ROB BOWDEN: Questa è la sezione più comodo, ma questo non significa che se si sentire come se non si è più a suo agio non sarà possibile imparare le cose qui. Quindi cerchiamo di iniziare. Hai diapositive andando a destra in cose. Sto per prendere proprio in questo momento? Commutazione computer portatili. ALLISON: Non si vuole presentarsi, Rob? ROB BOWDEN: Oh, io sono Rob. Questo è il mio quinto anno TF-ing CS50. GABRIEL: Io sono Gabriele. Io sono responsabile di TF di CS50. Ero TF l'anno scorso e quest'anno. ALLISON: E io sono Alison, e questo è il mio secondo anno TF-ing CS50. ROB BOWDEN: Va bene, così questa cosa a sinistra, Speriamo che hai visto prima. Se non perché si scaricarlo per te stesso, si dovrebbe avere visto in conferenza. Quindi questo è l'apparecchio CS50, e lui ha fatto un po 'di una descrizione di esso in conferenza. Ma in fondo è solo voi sono in esecuzione di un esercizio sistema all'interno della vostra operativo sistema in modo che possiamo darvi programmi senza bisogno di di cui preoccuparsi, oh è questo andare a lavorare sia in ambiente Windows e Mac, o se qualcuno di voi sono già usando Linux, Linux. E 'solo dovuto essere un gioco comune campo in modo tutti hanno la stesso ambiente esatto. Quindi, se non si dispone di scaricato questo già, è necessario scaricarlo, perché sei andando ad avere bisogno per il problema insieme. Ed è due gigabyte scaricare, quindi potrebbe richiedere un po '. Sul Harvard che andrà veloce. Apparecchio così CS50. Ora, in principio, che andremo a parlare solo un mucchio di linea di comando roba, e così con questo, intendo lavorare in questo piccolo ambiente qui. E notare tutte le cose Io dico proprio qui in questo momento stanno andando a lavorare, se sei dentro di un terminale interno della macchina, o se si è all'interno di la finestra del terminale gedit all'interno dell'apparecchio. Quindi questi ambienti sono identici. Ma ho intenzione di andare un terzo percorso. E notare qui questo poco indirizzo IP proprio qui. Quindi non c'è bisogno di fare questo, ma questo IP address-- ora se I-- eccezione è bloccato da questa cosa. OK, in modo che l'indirizzo IP sopra in un terminale qui-- così questo terminale su ecco un terminale nel mio Mac. Quindi questo è in alcun modo attualmente propri dell'apparecchio a tutti. E se siete su Windows, allora sei andando ad avere bisogno di scaricare qualcosa specificamente per questo, in particolare le persone tendono utilizzare Putty, P-U-T-T-Y. Così che cosa ho intenzione di fare è di tipo SSH e quindi tale indirizzo IP. Beh, jharvard a tale indirizzo IP. Così 192.168.24.220. Questo messaggio spaventoso, lo ignorano. Basta digitare sì. Questo è CS50 in una scatola. Si chiede la password. E così in molti di questi contesti in cui chiede la password, [incomprensibile]. Abbiamo un sacco di domande in cui si dice che non è in realtà la digitazione. Esso non mostra i caratteri di la password durante la digitazione, se non altro, per una funzione di protezione, perché se qualcuno sta cercando dietro le spalle e vedono star star star star, poi si sapere che la password è di quattro caratteri. Così l'idea è che vi chiederà voi per la vostra password, tipo. Non è intenzione di mostrare i personaggi, ma in realtà è loro accettazione. In questo caso, ogni volta che si mai visto una richiesta di password trattare con l'apparecchio, la la password sarà cremisi. Così cremisi. Ed ora qui all'interno di questa finestra che è in mio Mac, Io sono fondamentalmente avendo la stessa visione precisa come all'interno di un terminale nell'apparecchio. Quindi non c'è bisogno di fare questo. Si può fare tutto quello che vogliono interno della macchina. Ho quasi mai in realtà fare nulla nella macchina. Ho quasi sempre che minimizzare e ora Sto lavorando SSH all'interno dell'apparecchio. Semmai, se si avere un computer lento, si può notare una differenza. Lo faccio perché preferisco questa finestra di terminale. Ha alcune caratteristiche come Posso dividere la finestra, e ora posso SSH in attraverso l'apparecchio. Ho avuto due SSH sta succedendo in una sola volta. Se il computer è particolarmente lento e si sta lavorando all'interno dell'apparecchio, e ti rendi conto questo è davvero lag, qualunque sia. Tende ad essere molto più veloce se siete SSH-ed in. Ma per il resto si può lavorare in entrambi i modi. PUBBLICO: Cosa significa SSH? ROB BOWDEN: coperture sicure, una cosa del genere? Che cosa significa SSH significa? GABRIEL: Secure shell. ALLISON: E 'solo shell sicura. ROB BOWDEN: Secure shell. Si tratta di un protocollo che you-- è un protocollo di sicurezza, in modo crittografato. La gente non può curiosare nella rete e vedi quello che stai dicendo a nulla sei SSH-ed a. Ed infatti, nel anticato giorni di CS50, quindi nel 2009 quando ero una matricola, il modo in cui hai lavorato sui set di problemi CS50, si era SSH-ed di alcuni server che abbiamo dato di accedere a, e hai lavorato lì. Quindi non ha avuto questo apparecchio grafica. Non c'era bisogno gedit. Non c'era bisogno di tutte queste cose che si potrebbe visivamente punta e clicca. Si doveva lavorare in questa interfaccia. Preferisco lavorare in questa interfaccia. Quindi, parte di ciò che stiamo andando per andare a più di adesso sono un gruppo di comandi che si dovrebbe iniziare a prendere confidenza con come si va avanti nel corso. E onestamente, una volta che si abituarsi a loro, è molto più veloce di lavorare in questo ambiente di quello che è di lavorare con finder, trascinando e facendo clic cose. Così eccoci qui. Ora ho solo SSH-ed in, e così il default luogo-- ho visto alcuni di questi comandi in classe, ma andremo su tutti ancora una volta. La posizione predefinita siamo a è la home directory. E directory, solo un'altra parola per la cartella. Quindi siamo nella home directory. Digitare ls, elencare i file in questa directory. Evidentemente ho creato un blah.c prima. Così abbiamo una directory del desktop. Si nota l'evidenziazione della sintassi? L'evidenziazione azzurro indica una directory e il bianco dritto indica solo un normale file. Quindi ci stanno per essere alcuni altri colori che vedete. Un file eseguibile è destinata probabilmente essere verde o qualcosa del genere. OK, quindi siamo nella home directory. Ora, se io voglio andare in un altro directory, cd è il comando che voglio. Quindi cambiare directory, e poi si passare il nome della directory che si vuole andare in. Quindi qui abbiamo quattro opzioni. Posso andare in download, e ora vediamo qui ha aggiornato questa parentesi dire che sono in ~ / download. Così che cosa è tilde? E 'una scorciatoia per la vostra home directory. Quindi, quasi tutto quello che fai è andare a essere in rapporto al tuo home directory, e pwd è solo un comando Io uso una volta in un anno che stampa solo la directory corrente. E così che vedete qui che ~ / Download risolve veramente a / home / jharvard / download. Quindi, / home / jharvard è la mia home directory. Così possiamo cd dot dot. Ora dot dot è una directory speciale che si riferisce sempre a quella directory up. Quindi, se mi trovo in ~ / download, quindi cd dot dot sta per portarmi a tilde. Cosa pensiamo cd dot dot sta per portarmi a ora? Mi porterò a / home. Così tilde da directory di lavoro di stampa, Sono ora / home / jharvard. directory uno fino a quello, ora si dice qui / home. Ora cd dot dot. Ora sono nella directory principale, e non si può farlo di nuovo. Devi solo stare in directory radice per sempre. La directory principale ha un sacco di cose che, se si vuole guardare in, puoi. Ad esempio, se vado in bin, che contiene tutti questi binari, come ls, e cd, e tutte queste cose. Così questi comandi devono esistere da qualche parte nel sistema, ed è nella directory / bin. Ma quasi tutto quello che fai è sta per essere dalla vostra home directory. E cd senza argomenti di sorta, si potrebbe dire cd ~, non è necessario. cd sta per portare voi torna alla propria directory home. Un ultimo. cd - sta per portare indietro a l'ultima directory che eri in. Così ho cd'd due volte di fila, quindi il mio ultima directory è la directory home. Se vado a tagliare bin, e ora andiamo su e in utente. Quota utente. Andiamo a quota utente. Ora sono ora in azione utente. cd -, nel cestino. Così questo diventa particolarmente utile quando si have-- e ti alternare. Così condivisione utente, indietro bin, bin quota. Così questo diventa utile. Si possono trovare a dover molti, molte, molte directory nidificate. E si vuole fare qualcosa molto velocemente in una directory superiore. Si va in quella directory, fare modifiche e cose del genere, e ora si vuole andare indietro a dove eravate. cd -. Sono sempre frustrato quando mi capita di andare in quella directory ho voluto fare un lavoro in. Ho sempre frustrato quando l'ho fatto in due fasi invece di un passo, perché questo significa che cd - sta andando mettere in quella posizione intermedia invece di dove voglio andare. Così vediamo tutti i file di elenco. Sappiamo come muoversi fino ad ora. Così ora parliamo di modifica dei file. Quindi, in questo corso, si è quasi sempre prevede di utilizzare gedit. Se si desidera, è possibile fare il passo successivo e iniziare ad imparare un testo a riga di comando Editor. Quindi, esistono varie opzioni. E quelli che sono probabilmente sta per essere relativo al sistema, abbiamo Nano, Vim e Emacs. Così Nano è principianti riga di comando editor di testo. Così Nano andiamo su blah.c ho creato in precedenza. E 'solo il file C standard. E si vede un sacco di roba succede nella parte inferiore della schermata, e apparentemente blah.c contiene il codice C. Quindi, in questo particolare editore, quello che sta dicendo al bottom-- ora questo simbolo di accento circonflesso, vediamo questo ^ G, X ^, ^ O. Così che in quasi tutti contesto che si vede, si potrebbe vedere che simbolo di inserimento in altri posti in linea, su Stack Overflow, qualcosa del genere. Si riferisce quasi sempre da controllare. Quindi, per uscire da quello che voglio fare Controllo X. Controllo X, esce. E posso utilizzare il mio freccia i tasti per muoversi. Si noti che non posso puntare e cliccare facilmente. È necessario utilizzare la freccia i tasti per muoversi. Ci potrebbe essere una regolazione per puntare e cliccare. Ma facciamo alcuni cambiamenti. Ora controllo X per andare all'uscita. Sta andando a dire salvare buffer modificato. Ora il prompt, y per sì, n per n. Controllo C per annullare. Mi limiterò a dire di sì. Nome di scrivere file. Il valore di default è il file che lo sia già. Premete Invio. Ok. Ora ho appena modificato il file, salvato, ed è cambiato. Così Nano è il più facile editor di testo si abitua. Le alternative sono Vim e Emacs. Questi sono gli editor di testo di livello superiore che hanno una curva di apprendimento molto ripida. Quindi la mia preferenza personale è Vim. Ed ha una grande varietà di opzioni. E una volta che ci si abitua ad esso, non sarai mai voglia di andare in qualsiasi altro editor di testo perché basta avere così tante cose a vostra disposizione in questi, ma ci vuole molto molto tempo per imparare. Quindi forse volete solo per forza te stesso in questo momento per abituarsi ad esso, ma direi che ne vale la pena. Ma è difficile. E poi Emacs. Ho sempre fatica a Emacs perché Io so fare assolutamente nulla. A quanto pare Emacs non è di default installato l'apparecchio. Ci sarà probabilmente aggiungere che come installazioni predefinite. Una volta imparato uno dei Vim o Emacs, c'è alcun motivo valido per mai imparare dall'altro, ma è uno stile completamente diverso. OK, questa è la modifica di file di testo. PUBBLICO: Se tu fossi bloccato Vim in questo momento, come si fa we-- ROB BOWDEN: Ci sono più modalità di Vim, e ci sono tutta tutorial su apprendimento Vim. Quindi, se vi capita di essere in modalità di inserimento, al fine per digitare il testo, che è possibile immettere che in vari modi, ma io è come si entra in modalità inserimento. In o uscire da qualsiasi danno speciale modalità che ci si trovi, basta fuga. E basta bash Fuga per ottenere di qualsiasi modalità nidificate la vostra in. OK, ora sono tornato in modalità normale. E così in modalità normale, i due punti. Si vede apparire in basso. E poi q. Quindi q si chiuderà se hai apportato delle modifiche, che hanno I-- ho fatto modifiche? Ho apportato delle modifiche a quanto pare. Quindi, se hai apportato delle modifiche, sarà dici si può mettere un punto esclamativo. Io vado a chiamare un botto. Così si può mettere un divieto a poco uscire senza fare niente, o del colon wq salverà e uscire. Quindi w in generale è scrivere. Quindi scrivere il file. Posso scrivere e uscire. Oppure si potrebbe avere solo qx Slam, q botto solo per uscire da lì a prescindere di tutte le modifiche apportate. Va bene, così ora cerchiamo di go-- siamo in grado di creare file. Cominciamo la rimozione dei file. E mi limiterò a buttare in un veloce nuovo comando, toccare. Quindi toccare foo. Bar Touch. Toccare baz. Se I ls, ora vediamo l'esistenza di tali file. Sono completamente vuoto. Quindi tocco è solo un semplice modo di uno, [incomprensibile]. Due, tecnicamente solo a stato esso, aggiorna il timestamp. Quindi, qualsiasi file che si crea ha un timestamp associato con esso. Così baz è stato creato il 14 settembre alle 16:21. Ora è 16:22, quindi se Mi tocco di nuovo baz, abbiamo vedere che baz è stato più recentemente modificato a 16:22. Ma per il resto ho quasi mai guardare i timestamp sui file. Così tocco, qui sto solo usando per creare alcuni file veloci. Va bene, così ora rm è il comando che ci sta a cuore qui. E possiamo rm boo. Dire rimuovere file regolare boo vuoto. E possiamo digitare y, e ora è rimuove. rm baz. Rimuovere regolarmente file vuoto baz e tipo n per n. Ora non è rimosso. Quindi, bar e baz esistono ancora. Foo è andato. GABRIEL: continuare a parlare. ROB BOWDEN: Grande. Così il messaggio fastidioso qui, rimuovere empty-- regolare che ci fai lì? Rimuovere regolarmente file vuoto. Quindi, se non vogliamo essere disturbato da quel messaggio, siamo in grado di lanciare in questo -f bandiera, e in modo che è forza. E ora, se io rm -f, è non andare a dici vuoi rimuovere questo file. Sarà solo farlo. E ls, non vedo bar più lì. Ora che è potenzialmente Comando pericoloso. Si tende a non troppo male. Ci torneremo in un secondo come si può ottenere molto pericoloso. E creiamo una directory temporanea. mkdir, un altro comando. Così mkdir è un comando che fa una directory. E ora da ls vediamo questa bella luce blu evidenziato directory temp. Posso cd in temperatura. E posso mkdir foo. cd in foo. bar mkdir. cd nella barra. Così vediamo che possiamo facilmente ottenere in qualche nidificazione piuttosto profondo. Ora come faccio a rimuovere una directory? rmdir. Quindi, se ho solo dritto cerco di rm, come abbiamo fatto con un file regolare, bar rm sta per dire che non è possibile rimuovere la barra. Si tratta di una directory. C'è un comando speciale per rimuovere directory, tipo di. Bar così rmdir. Ora bar non c'è più. OK, quindi rmdir ho praticamente non uso mai. La ragione being-- ora facciamo fare un bar normale file qui. Boo Così rmdir. rmdir. Impossibile rimuovere foo. Directory non vuota. Quindi non si può utilizzare cancella directory su un directory che ha delle cose in esso. In modo da avere alcune opzioni. Si può andare in quella directory, rimuovere tutto manualmente, e poi uscire e RmDir la directory. Che suona ovviamente fastidioso. E se ci sono migliaia di file in là? Beh, si potrebbe rm *. Parleremo * in un secondo. Ciò significa in pratica tutte le cose. Ma meglio ancora, così rm -r. Così rm -r-- in un sacco di contesti, -r significa ricorsiva, che parleremo di ciò che mezzi ricorsive in alcune settimane. Ma significa fondamentalmente traversata la totalità di questa directory e rimuovere tutto ciò. Così rm -r foo sta per dire scendere nella directory pippo? Sì. Rimuovere regolarmente file foo / bar vuoto? Sì. Rimuovere la directory foo? Sì. Così ora foo e tutto al suo interno è stato rimosso. Ora che si può ottenere particolarmente fastidioso when-- andiamo a toccare 1, 2 toccare, toccare 3. Potrebbe avere un sacco di file. Se avessi voluto, avrei potuto creare migliaia di file in qui. E rm -r foo sta andando essere abbastanza fastidioso. Sì, sì, sì, sì, sì, sì. Con un sacco di più file vedere rapidamente quante volte Avrei dovuto scrivere sì. Beh, abbiamo appena visto prima come possiamo sbarazzarsi di dover digitare Sì, -f. Così mkdir foo cd foo tocco 1 2 3. OK, allora rm -rf foo sta per rimuovano a occhi chiusi foo tutto. Nessuna richiesta. No niente. Foo è andato. Quindi tendo a usare questo comandare tutto il tempo. Detto questo, si tratta di un comando molto pericoloso, perché se faccio qualcosa di simile questo, non verrà richiesto. Sarà andato. E succede abbastanza di frequente, e anche nel livello superiore corsi di CS. A volte vedremo qualcosa in cui qualcuno dice che accidentalmente nostro rm rf-ed a casa mia directory e tutto il mio P set è andato. Ed è devastante, ma non c'è cestino. Non c'è non c'è niente di essere recuperato. E 'appena andato. Ancora peggio sarebbe qualcosa come rm -rf /. Così abbiamo appena discusso quella directory radice. Essa detiene tutti i file sul vostro sistema. Le cose tendono a diventare piuttosto disordinato quando si rimuove le cose come ls, e cd, e tutti quelli. PUBBLICO: Qual è la differenza tra rm, rf, e rm * ROB BOWDEN: Quindi rm * - ALLISON: Domanda era quello che è il differenza tra rm, rf, e rm *. ROB BOWDEN: Così rm *. Stella in mezzo generale tutti il contenuto di questa directory. Cercando di pensare di altri modi di mostrare stelle. Beh, stella in realtà in genere significa corrisponde ad alcun modello. Quindi, se ho un file chiamato dog1, dog2 toccare, toccare cat1, toccare cat2. Così ls * 1 sta per la stampa e cat1 dog1, perché quella stella può essere riempito in with-- la si ha la necessità di essere lì, ma stella può essere sia gatto o cane. Si tratta di una wild card. Questa è la parola che sto cercando. Wild card. Oppure potrei ls cane *, e Ho avuto modo di vedere dog1, dog2. Quindi questi sono l'elenco dei file che corrispondono a quel particolare modello. È possibile utilizzare ls in questo modo. Ls * stelle corrisponde a qualsiasi cosa. Così sta andando a stampare tutte il contenuto di questo elenco dal momento che tutti loro corrispondere. Non sta andando a stampare nulla nelle directory di livello superiore. Se ho una sottodirectory, foo, e toccare 1 2 3-- così ora se rm * stelle, rimuovere cat1, CAT2, dog1, dog2. Impossibile rimuovere foo. Si tratta di una directory. Quindi stella si espande a tutto il i file nella directory. Quindi tecnicamente rm * è come dire rm cat1, CAT2, dog1, dog2, foo. Considerando che -rf rm, tecnicamente stelle sarebbe realizziamo ciò che vogliamo, ma rm -rf-- se esco di questo directory, rm -rf temporanea, che sta per andare in temperatura e rimuovere ricorsivamente tutto. Quindi stella è separata in quanto tale si intende by-- così questa cosa che sto correndo in, questa cosa che mi sta spingendo per i comandi e poi l'esecuzione e fare loro, io chiamo questo mio guscio. E così questo guscio è esso stesso un programma. E se volessi, io potrebbe eseguire in / bin / bash. La shell si chiama bash. E ora notiamo qualcosa è un po 'cambiato, e questo perché le mie impostazioni per il guscio è un po 'diversa. Ma ora sto tecnicamente in esecuzione un guscio nel mio guscio originale, e posso uscire da quel guscio, e ora Sono tornato al mio guscio di livello superiore. Lo scopo di dire che è-- la stella. Così la stella è qualcosa compreso da bash. Così rm -rf, -rf bandiera è compreso da solo rm. Si sa che quando si passare un -rf che si vuole per rimuovere in modo ricorsivo tutti i file senza chiedere conferma. La stella è qualcosa di comprensibile da bash che quando si dice rm *, bash non ha intenzione di dire hey rm *, rimuovere stella. Bash sta per dire rm * rimuovere cat1, CAT2, dog1, dog2. Sta andando automaticamente per espandere tutti i file nella directory. E allo stesso modo tilde è un altro simbolo che bash capisce. Quando si dice cd ~, bash si espande che, per la vostra home directory. Altre domande fino ad ora? OK, stiamo per cominciare ad andare veloce. Completamento Tab. Giusto per buttare fuori là. Un sacco di gente non lo fanno realizzare questo esiste. Quindi, se digito cd dow, ho voglia di andare in download. Non ho bisogno di digitare nloads. Posso solo premere Tab. Quindi riconosce che finestra è un prefisso che non corrisponde nulla altro in questa directory, in modo che completerà per te. Ora posso entrare. Ho anche fare che in modo ricorsivo. Foo così mkdir. Andiamo in foo. bar mkdir. Quindi, tornando a casa mia directory, posso vedere i download. Ora scheda colpire di nuovo, andando automaticamente a compilare foo. E 'l'unica directory. Scheda Colpire di nuovo, automaticamente andando a riempire in bar. Così ora sono in (~ Downloads / foo / bar). Quindi questo completamento automatico, ogni volta che ho avuto modo di orari d'ufficio, e sto in piedi sopra spalla di qualcuno, e che stanno andando rm D-O-W-N-L-O-A-D-S, sto morendo. Scheda Just, scheda, scheda, scheda. Così scheda sicuramente usato. E allo stesso modo e verso il basso, un sacco di gente proprio quello che è successo a mai hanno colpito su e giù. Sarà passare attraverso il precedente comandi, quindi se si ha qualcosa, e si desidera eseguire di nuovo, basta tenere su fino ad arrivare ad esso. Ok. Così veloce, alcune altre cose. Torniamo in temperatura. Creiamo alcuni file. Così qui, io sono solo andando ad elencare alcune parole. cane, gatto, meow. Facciamo cane, pesce. Così ora è un rappresentante molto comandi utili che si utilizzare per la ricerca in tutta file per un particolare testo, e tecnicamente si può fare davvero espressioni complesse per essere trovato. Ecco, se io grep, e ciò che voglio cercare? Diciamo che sto cercando per i gatti, e Voglio cercare tutti questi file. Allora, come faccio tutti questi file? Stella. Quindi, in un unico file, ho cat. Probabilmente potuto chiamato qualcosa di meglio, perché che assomiglia numeri di riga o qualcosa del genere. Ma in un unico file che ho una linea con il gatto. Nel file di due Ho una linea con il gatto. Così ora posso guardare dentro un unico file e vedi oh sì, quel file ha avuto cat. File di preavviso di tre non ha fatto riscontro perché il gatto non è in là. Posso grep per miagolio. Solo presentare due ha miagolio. Quindi questo è possibile combinare, di nuovo, con -r, che come ho detto prima significa spesso ricorsiva. E così posso venire qui, grep -r per qualsiasi istanza di-- modifichiamo questo solo per gettare un gatto in là. Così grep -r per ogni istanza di gatto nel corso di questo elenco. E lo farà in modo ricorsivo ricercare le sottodirectory. Quindi, in baz, c'è il gatto. In temp / 2, c'è il gatto. E in temp / 1 c'è cat. Ecco, questo è la ricerca all'interno dei file. Ora è anche possibile utilizzare una scoperta. E così trovare è specificamente alla ricerca di file con un determinato nome. Quindi cerchiamo di fare un po 'di più. Andiamo in download. Toccare dog1. Toccare CAT2. Toccare cat_dog. Toccare catcat. Quindi voglio trovare tutte file con il cane nel nome. Così trovare, e per il più lungo tempo non ho mai ricordato come trovare funzionato, fino a quando ho finalmente leggere qualcosa che ha reso così chiaro. Quindi, trovare, automaticamente ricorsiva. Non è necessario passare un -r. Quindi, trovare dot. Non abbiamo ancora parlato di punto. Mentre dot dot sempre significa directory uno. Dot significa sempre la directory corrente. Così ho potuto rm -r punti nel Allo stesso modo posso rm -rf *. In ultima analisi, ottenere la stessa cosa. rm -rf dot sta per eliminare in tutta la directory corrente. OK, che io non voglio fare. Ma trovare dot. Così ricorsivamente la ricerca corrente directory, e ora tutto dopo questo sono un sacco di bandiere che si utilizzare per escludere le cose dal ritorno. Quindi, trovare punti restituisce tutto ciò che essa può trovare dalla directory corrente. Questi sono tutti i file ricorsivamente la ricerca. Staremo a vedere alcuni di quelli in un secondo. Ma nel caso in cui vi state chiedendo come fare che, così Comando K, almeno nel mio terminale in Mac cancella esso. Controllo L cancella generale per qualsiasi tipo di terminale. È inoltre possibile digitare chiaro. E se mai in un scenario-- strano è successo a me un paio tempo-- dove i colori delle vostre richieste sono tutti incasinato, o si non sono in grado di vedere nulla essere digitato quando si sta digitando, in quanto a volte come colore di sfondo è impostato lo stesso del colore di primo piano e ora non è possibile visualizzare i tipi di carattere. Reset è qualcosa che ripristina solo di lo sfondo nero di default, anteriore bianco, o qualsiasi altra cosa si imposta loro. Allora, dove eravamo rimasti? Trova dot. Così ora tutto questo passato punto restringe i risultati a qualcosa che corrisponde il modello dato. Così qui voglio cercare tutto con il nome gatto. Non ho niente. Perché è così? Beh, sto solo cercando qualcosa con esattamente il nome del gatto. Se voglio cercare qualcosa che ha qualche modello, e cat-- le citazioni tecnicamente non sono necessari, ma io li sto buttando lì. Così ora si trova catcat perché questa è l'unica cosa che ha un po 'arbitraria modello seguito da gatto. Posso mettere cat *, e ora trovare catcat, cat_dog, cat2, perché quelle sono tutte le cose con il gatto all'inizio seguita da nulla. È possibile combinare questo. Se si desidera eseguire la ricerca per tutti i file C che si ha, si potrebbe fare * .c. Abbiamo blah.c qui. Ecco, questo è un funziona Trova. È possibile cercare. Ha un sacco di bandiere per ulteriori restrizioni. E uno di loro, diciamo -d. Così deprecato. Oh, che non è quello che voglio. Non -d. Tipo d. Quindi, trovare punti - tipo d. Quindi, che cosa ha appena fatto è che sto cercando per tutti i file nella directory corrente con a-- d sta per directory-- tipo di directory. Ciò restituisce tutte le directory nella directory corrente. E il tipo F è tutto regolare file, tutti i non le directory. Ecco, questo è solo un esempio di altri modi può limitare la ricerca altro non solo il nome del file. Sono passati 30 minuti. Ancora in corso. ALLISON: Io brezza attraverso. Andrà tutto bene. ROB BOWDEN: Così alcune altre cose. Ora battere, punto esclamativo. In modo che generalmente means-- bene, vediamo un esempio. Così! F, che cosa è che sta per fare? Beh, sembra avere ripetuto ritrovamento dot -type f. Che dire! G? Che proprio grep -r * cat. Così sbatte è possibile utilizzare per ripetere un comando fatto di recente. Quindi, se digito! Gre, sta andando a ri-run i comandi che ha avuto inizio con gre più di recente. E si può vedere tutte queste comandi con la storia. Così la storia. Questi sono tutti comandi Ho eseguito oggi. E bene, non è letteralmente limitato a oggi, ma ho usato solo questo apparecchio come di oggi. E 'il tuo totalità del storia della vostra shell bash, tranne che interrompe ad un certo punto. PUBBLICO: Che cosa succede se si fa cronologia dei comandi [incomprensibile] e un errore nel risultato sarà ancora stampare the-- ROB BOWDEN: Sì, se c'è un errore in uno di questi commands-- così diciamo, che è un errore Command not found. Appare ancora nella storia. Bene. Altre domande su qualsiasi cosa? Ecco, questo è il botto. Ora, il comando veramente utile, l'uomo. In modo che ti dà la manuale per un dato comando. Quindi diciamo che man ls, così questo mi sta mostrando ls. Elenca il contenuto della directory. Ed è qui che vedo che c'è sono queste varie bandiere che esistono. Così vediamo che ls -l esiste se dovessimo leggere quella. ls -l mi dà questo integrale dell'elenco dei directory con chi possiede il file, la dimensione del file, la il timestamp modificato. Così ls -a è un altro che si potrebbe effettivamente utilizzare un po 'di frequente. -al è la mia bandiera più comune questi ultimi ls. Così -a, notare che c'è un sacco più file di solo ls. ls -a. Cosa c'è in comune con tutti questi file? Si inizia con un punto. Quindi questa è una convenzione in Linux i file che iniziano con un punto sono nascosti. Quindi, significa solo che quando abbiamo appena ls diritte, o stiamo cercando questa directory utilizzando l'equivalente finder, o Windows Explorer equivalente, che non vogliono vedere questi file di punti. Hanno appena inquinano la visione delle cose. Così sono nascosti a meno che non specificatamente chiedere loro con qualcosa di simile -a. Così posso cd in .local, e vedo che che è di per sé una directory con una directory condivisa, e applicazioni, e bla bla bla. Così dot, i file sono solo nascosti. OK, in modo che altri importanti. Ho un paio posso saltare. Diciamo solo vero e proprio discorso rapido su le cose di file di reindirizzamento. Quindi c'è tutta una serie complessa di cose che si possono fare con questi, ma solo per vedere loro, diciamo, eco. Un altro comando. Comando di veramente stupido. Tutto ciò che fa è stampare quello che gli dico di. Quindi echo ciao. E 'solo eco ciao allo schermo. Ciao mondo. Echi ciao mondo. Quindi, un comando o una simbolo che bash capisce è questo simbolo di maggiore, e che è l'uscita di un simbolo di file. Quindi, se ho l'uscita di questo foo, c'è ora un file chiamato foo, all'interno di che è ciao mondo. Così notato che quando mi associo ciao tubo mondo in foo, non ha eco ciao mondo. Invece è stato messo in file foo. E un altro comando solo di buttare a voi, cat. Questo è un modo semplice per solo completamente visualizzare il contenuto del file in modo che non devo aprire un editor di testo per visualizzarlo. Quindi il contenuto del file foo sono ciao mondo. E ho potuto gatto blah.c, il contenuto è presente. Anche in questo caso, si tratta di comandi che, non lo fanno si aspettano di avere tutti memorizzati. L'idea è che li ho visti. Forse si sta lavorando qualcosa, e tu sei come se fossi malato di aprire questo file. Vorrei poter solo guardare il contenuto reale veloce. Si potrebbe fare che, poi guardare indietro e dire oh ricordare qualcosa di simile che esiste, ed è il gatto. In modo che sta andando in un file. Ora non c'è davvero nulla di buono esempio di lettura da un file ancora. Che cosa è qualcosa che prende qualcosa di standard? Qualsiasi semplice comando di Linux? Quando arriviamo ad essa, in un paio settimane tutte le piece-- bene, questa settimana avete un pezzo in cui si iniziare a prendere input da parte dell'utente. E così di solito si digita tale ingresso alla tastiera. Invece di digitare che ingresso alla tastiera, si può invece tubo da un file in modo che quando si fa Mario, ./mario, tubo in da un dato file, e che sta per eseguire il programma mario. Non mi aspettavo di ingresso a la tastiera, invece è solo andando a leggere il righe del file foo. Quindi maggiore di foo mette in il file foo, e meno di foo prende roba dal file foo e che utilizza come input per il programma. E proprio a vederlo, potremmo anche eco foo bar baz, e allora invece di una superiore, facciamo due in foo. Che cosa fare? Si aggiunge solo per il file. Così, invece notare se faccio eco blah in foo e poi gatto foo, è solo bla. Così, quando si output in un file che, sovrascrive completamente il file. Se si desidera solo per aggiungere, doppia [? grader. ?] E per ultimo è il tubo. Tubo diventa molto più complicato, in cui prende l'output di un comando e la immette il comando successivo. Quindi un po 'cosa comune, la storia. Quindi, ugh, non voglio guardare a questa. Visualizza tutti i comandi della mia storia dove ho Grep-ed per qualcosa. No, questo è fonte di confusione. Visualizza tutti i comandi dove mi trovo. Tutto trovano i comandi che io abbia mai imbattuto. Così la storia. Ora uscite storia alla schermo la lista dei comandi, ma io non voglio uscita allo schermo. Invece ho intenzione di tubo in grep. Quindi cerchiamo di Grep per tutte le istanze di find. Così ora invece di prendere grep l'ingresso, invece di-- grep è in grado di gestire come input-- siamo utilizzando grep leggermente diverso qui. Così, invece di digitare l'elenco dei cose che volevamo cercare e ha detto grep sta prendendo come input. Quindi, se mi trovo solo grep, esso aspetta che io digito le cose. Così gatto ciao trovare. Ciao. Trova. Notate ogni volta che si digita trovare riconosce che ho digitato find. Così, invece di questo, sarà file di ricerca per trovare. Così la storia è ora di andare a uscita un elenco di tutti i comandi. Stiamo mettendo che in uscita, e stiamo alimentandola a grep, e quindi è sputando tutte le istanze di scoperta. Il motivo che mi ha detto che sarebbe stato fonte di confusione è se I-- è ancora confusa. Se io GREP per grep. Si noti è più o meno sempre che mostra il comando ho appena corse perché quel comando stessa ha grep all'interno di esso. OK, in modo da tutte le domande su qualsiasi cosa? E io trasferisco sopra a questo punto. Speriamo che questo sia un bel Panoramica di tutti i comandi che non c'è bisogno di avere memorizzati, ma questi costituiscono un solido 95% di quello che fare dalla riga di comando. Anche tenere a mente che la riga di comando in sé, bash è un linguaggio di programmazione, e così quando si arriva al dunque, è potrebbe desiderare di fare cose veramente complesse. E così ha cose come loop e IFS, e tutti coloro che si sta andando per abituarsi a con i vostri linguaggi di programmazione. Ma questo è al di là del campo di applicazione della presente sezione. OK, quindi non domande? ALLISON: Nessuno? GABRIEL: Avete intenzione a-- ALLISON: posso farlo sulla mia se vuoi. Siamo in grado di vedere cosa succede. ROB BOWDEN: Off per Allison. ALLISON: Woo. Sei un atto difficile da seguire, Rob. Vuoi che a passare con voi? Oppure avete ottenuto, OK. Io vado a cercare di non piuttosto essere il più lungo lì. Vediamo se questa volontà lavorare nel modo che voglio. Forse? Haha! Sì. Così sto solo andando a andare molto rapidamente attraverso variabili, loop, condizionali, e un po 'dal compilatore. Se avete domande a qualsiasi momento, per favore ferma. Questi ragazzi mi ricordano di ripetere la tua domanda nel caso in cui mi dimentico, ma non dovrebbe essere troppo male. Quindi le variabili, sì. Non abbiamo uno dei vostri Pezzi Scratch qui. Sono sicuro che molti di voi, se hai avuto una sorta di gioco che si è creato con Scratch, hai avuto per tenere traccia di qualcosa di simile a punteggio, o il tempo, o qualcosa del genere. Così quelli arancione pezzi che vediamo lì sono solo la forma di Scratch variabili, e sarà sicuramente essere l'utilizzo di variabili durante i vostri programmi. Se non lo sei, io non sono davvero sicuro di quello che stai facendo. Ma comunque, grande cosa, definizione delle variabili. Con C ogni variabile ha ad avere un tipo dichiarato, così ti ho dato un quella generale in alto. Così avrete il vostro digitare e quindi tutto ciò che si decide di chiamare la variabile. Quindi, in questo caso, tipo nella lista delle variabili. Abbiamo tre esempi. Char di qualche grado, di un A, che è ciò che Sono sicuro che tutti voi volete per entrare in questa classe. È possibile definire più variabili in un'unica riga purché siano tutti dello stesso tipo, che è il nostro secondo esempio ci dove si hanno tre variabili, x, y, z. Sono tutti i carri allegorici. E allora si può anche, in questo ultimo esempio con int punteggio e il numero di squadre, è possibile li inizializzare proprio lì. Quindi, nell'esempio mezzo dove siamo appena hanno galleggiante di x, y, z, quelli che non sono ancora inizializzati. Essi non hanno alcun valore. O hanno valori di immondizia. E se si cerca di utilizzarli, il compilatore urlare a voi. Si deve sia dichiarare e inizializzare le variabili. Quindi, in questo ultimo, stiamo facendo entrambe le cose. Siamo la dichiarazione delle variabili di punteggio e il numero di squadre, e li stiamo in fase di inizializzazione, dando li loro valori iniziali di 7 e 4 rispettivamente. Freddo. Tutto bene? Impressionante. OK, quindi alcune convenzioni. Se voi ragazzi avete letto attraverso lo stile 50, questi sono solo cose che vorremmo per di implementare nel vostro stile. Nomi così significativi. Se si inizia a chiamare le cose solo x, y, z, in particolare come si entra in lunghe programmi, si è probabilmente andando a confondere te stesso ed essere come quello che è questa variabile si riferisce a. Non ho idea di cosa questo significhi. Quindi, se è destinata a tenere un punteggio, lo chiamano punteggio. Se è destinata a tenere qualche risposta o provocare, dargli un nome del genere. Per i cicli, che ci sarà entrare nella diapositiva successiva, variabili lettera singoli vanno bene. ROB BOWDEN: i, j, e k sono solo convenzioni per i cicli for che ognuno si aspetta essere chiamato i, j, k. È possibile chiamare them-- vedo fila colonna o riga chiamata a volte per due cicli annidati, e questo è anche un po 'di serie. Ma i e j è completamente noto. ALLISON: Sì, i e j sei totalmente soddisfacente. Per motivi di chiarezza, come in alcune delle vostre serie P, potrebbe avere senso per avere più cose descrittivi a lì solo per tenere traccia di esso. Ma penso che i, j, k e credo la stragrande maggioranza di noi tutto l'uso. ROB BOWDEN: Con questi convenzioni, così lo stile è importante. E 'uno dei quattro assi su cui si sta graduate, ed è così facile andare poco più di il vostro P situato alla fine e assicurarsi che che non ci sono errori stilistici. Quindi, assicurarsi che si sta tabulazione correttamente. Assicurarsi che le variabili sono chiamati. Lasciare alcuni commenti. E 'molto facile per ottenere quei punti. Non dovete pensare tutto ciò al fine di ottenere quei punti. Non c'è bisogno di capire nulla. E 'solo facendo sembrare abbastanza. ALLISON: In realtà, abbiamo avere stile 50, che vi dirà dove stai pasticciano up se siete rovinare sullo stile e vi dirà esattamente quello che bisogno di sistemare e come è necessario risolvere il problema. E 'anche solo bene ricordare che è la politica corso che se siete in ufficio ore e il codice è un pasticcio, possiamo rifiutare di aiutare finché non si guarda più bello. Quindi iniziare a destra, mantenere stile coerente, si sta anche solo andando a fare la vostra vita molto più semplice quando si sta cercando di passare attraverso il debug. Se si sta cercando di capire dove ti manca una parentesi graffa e sono in tutto il luogo, si è basta fare il vostro proprio la vita più difficile. Quindi, essere coerente con lo stile. Prometto che farò la vita più facile. Si farà la vita più facile. Ognuno sarà molto più felice. E questo è ciò che si desidera. GABRIEL: Il tuo voto sarà più alto. ALLISON: Sì, e il vostro grado. Se il TF è come te, tende ad essere favorevole. Va bene, e poi basta il secondo punto qui. Inizializzazioni coerenti. Quindi, come abbiamo visto, è possibile dichiarare e inizializzare le cose. Più variabili sulla stessa linea. Una cosa che vorremmo non di fare è quello di dichiarare alcune variabili e non li inizializza sullo stesso linea che si inizializza gli altri. Quindi, nel caso quello reso alcun senso, abbiamo l'esempio qui dove stiamo dichiarando int nelle variabili di quartieri Dimes e centesimi, ma quarti e penny non hanno alcun valore iniziale. Noi non li abbiamo inizializzato, ma proprio nel mezzo là abbiamo già inizializzato monetine a 0. Quindi, o fare quarti, Dimes, centesimi. O fanno quarti uguale a 0. Dimes uguale a 0. Pennies uguale a 0, o qualsiasi altra cosa tali valori iniziali sono. Grande cosa con stile, essere coerenti. In caso di dubbio, essere coerenti. Ma anche seguire la nostra guida di stile. Freddo. Tutto bene lì? PUBBLICO: Dov'è la guida di stile? ALLISON: La guida di stile è on-- qual è il sito? GABRIEL: Penso che sia manual.cs50.net/-- ALLISON: Style? GABRIEL: Style. Yep. ALLISON: Sì. Quindi mettere in discussione, in cui è in stile 50. manual.cs50.net/style. Sì? PUBBLICO: Se stiamo definendo variabili, è OK se mettiamo come [incomprensibile] come int punteggio e quindi int obiettivo. Quindi vuoi dire che ora abbiamo avuto modo di definirli insieme? ALLISON: Così in discussione, dovrebbe si dispone di codice ridondante quando si definisce variabili come int e punteggio sulla prossima int gioco online? ROB BOWDEN: Ci sono sicuramente casi in cui il codice ridondante è male. Non prenderei in considerazione quel codice ridondante. Non ho quasi mai dichiarare più variabili sulla stessa riga mai. E se non altro, è perché di solito lascio una sorta di commento spiegando ciò che la variabile è per. Quindi io dico int punteggio barra barra. Tiene traccia di tutto ciò. In totale barra barra. Quindi è molto più grossolano in quel modo metterli tutti sulla stessa riga. Ho appena non li metto sulla stessa linea. ALLISON: mi sento come se fosse preferenza personale a questo punto. PUBBLICO: Fa che vanno per cicli for e roba troppo? ROB BOWDEN: Come dentro? Come int i uguale a 0 virgola longitudinale è pari a qualcosa? Che non si dispone di una scelta. Con cicli for l'inizializzazione part-- per cui si potrebbe aver visto solo int i uguale a 0 e virgola i meno di qualunque punto e virgola i plus plus. Che int i uguale a 0, tecnicamente si può anche facciamo quello che abbiamo visto prima con la sintassi virgola. int i uguale a 0 virgola j è uguale a 3 comma k è uguale a 5. Non è una scelta da dividere che fino in più righe, e questo è normale. Vedendo che non vi va bene. ALLISON: Awesome. Beh, comodo Segue in loop. Quindi sì, qui abbiamo alcuni esempi di cicli che voi ragazzi ha visto in Scratch. E, naturalmente, tutti questi può solo essere ricreato in C. E si tratta fondamentalmente consentono per ripetere alcune sezioni di codice finché una certa condizione è soddisfatto, di cui parleremo entrare a destra dopo aver parlato su loop con condizionali. Quindi abbiamo tre tipi principali. Infatti, mentre, e fare, mentre, che noi tutti passare attraverso in questo momento. Così prima è per i loop. Così per alcune condizioni, eseguire questo blocco di codice. Abbiamo questo piccolo fresco diagramma qui nella parte inferiore. Ma in fondo che avete in per informazioni, che prima linea, si sta andando a inizializzare le variabili. Così come abbiamo detto, i è uguale a 0 o i è uguale a 10. Qualunque cosa avete bisogno che variabili di essere è sta per essere inizializzato lì, dichiarato e inizializzato a un valore. Allora abbiamo un po ' condizione che sta andando per essere il nostro controllo variabile contro qualcosa. Quindi, nel caso tipico caso in cui forse si vuole questa sezione di codice eseguire cinque volte. Così avremmo int i uguale a 0, e noi voglio che sia quando i è inferiore a 5. In modo che condizione è solo andando a controllare che ogni volta. Se tale condizione restituisce true, è andando a eseguire il codice, che è esattamente ciò che questo piccolo schema sta mostrando. E così lo esegue. Si aggiorna una variabile, che è quello che vediamo nell'ultima parte del nostro per inizializzazione del ciclo lì. Quindi sarà solo continuare a fare questo fino a quando tale condizione non è soddisfatta, e quindi viene nuovamente il ciclo e continua passare con il resto del programma. Tutto bene lì? Freddo. Quindi, ecco un esempio, molto simile a qualcosa di cui ho appena parlato. Quindi, vogliamo solo la stampa questo è CS50 10 volte. Quindi, vedete qui abbiamo per la nostra, e poi ci inizializzare la variabile i per essere uguale a 0. La nostra condizione è il controllo che è inferiore a 10. Quindi, valutata come vera quando abbiamo iniziare, e quindi aggiorna la nostra variabile ogni volta che esegue effettivamente e stampa questo è CS50. E terminerà dopo 10 volte. Freddo. Così, mentre i cicli sono accanto. E come vedete qui, non ci resta che qualche tempo a questa domanda condition--? PUBBLICO: Come posso saltare in realtà non solo un numero, ma due numeri [incomprensibile] i plus plus plus? ALLISON: Quindi la domanda era come si può aggiornare la variabile da più di un alla volta. Così ho plus plus sarà aggiornamento di uno ogni volta. Se si voleva aggiornarlo due, si potrebbe fare i uguale a più 2. ROB BOWDEN: Hai visto più uguale a lezione ancora? PUBBLICO: [incomprensibile]. ALLISON: E 'efficace la stessa cosa come i uguale i più 2. Così sta andando a prenderlo e aggiornarlo due ogni volta. Inoltre ha eguagliato è solo qualcosa noi chiamiamo zucchero sintattico. ROB BOWDEN: Sì, quelli esistono per più o meno tutti gli operatori aritmetici. Volte così ho uguale raddoppierebbe il numero. j dividere uguale 3 è la stessa come j pari j diviso per 3. ALLISON: o meno uguale a 2 sarebbe diminuire i da due ogni volta. ROB BOWDEN: Anche eguali mod. Non hai visto operatori bit a bit, ma punto di inserimento è uguale e commerciale è uguale, tutti quelli esistono. ALLISON: Così un sacco di volte, in particolare con il vostro primo paio di set di P, sarete probabilmente con incrementi di uno, così ho plus plus, j plus plus sono tutte cose che si sta andando di essere in genere utilizzando. Ma tale condizione aggiornamento è completamente sotto il vostro controllo. È possibile aggiornarlo con qualsiasi incrementi o in qualunque modo si decida di. Forse persino vuoi che sia un numero casuale a volte. Ma sì, ci sono un sacco di cose che si possono fare con questo. Tu non sei limitato a i plus plus. ROB BOWDEN: Solo così si so che esiste, anche esiste in un'altra forma, più oltre i. Quindi, se siete mai ricerca on-line e capita di vedere i plus plus, più o meno significa la stessa cosa. ALLISON: Freddo. Buono? Impressionante. Così, mentre i loop. Molto simile. Hai qualche condizione. La cosa principale da notare qui è invece di avere tre parti differenti di istituire, abbiamo uno. Non ci resta che una certa condizione che viene controllato. E nello stesso modo, finché tale condizione restituisce true, il codice è andare a correre. E se è falso, terminerà, mossa sulla parte successiva del programma. Quindi questo è una specie di like-- ciò che è un buon esempio di controllo per qualche condizione normale? GABRIEL: while true. ALLISON: Si potrebbe fare while true. Ebbene, 1 è uguale a 1. ROB BOWDEN: Si può fare while-- basta invece di utilizzare un ciclo for, è sempre possibile codificare un per ciclo in un ciclo while, così ho maggiore di 0 o mentre i meno di 10. ALLISON: Awesome. E allora abbiamo fare cicli while, che è grande per la convalida utente, dove si vuole ottenere qualcosa da l'utente, vedere se è valida, e poi continuare da lì. Quindi una delle cose da sapere è con un fare mentre è che sta andando ad eseguire, e poi si rieseguire se è soddisfatta questa condizione. Quindi probabilmente il modo migliore per fare questo è solo per vedere un esempio qui. Quindi, come ho appena detto, l'utente convalida è davvero useful-- o fare talora sono veramente utile con la convalida dell'utente. Quindi questo è solo andare di ri-richiedere qualche utente fino entrano in un numero positivo, che potrebbe essere utile per il vostro set di P questa settimana. E così in questo caso, quando eseguire inizialmente questo programma, sta andando per la stampa inserire un numero positivo. Sta andando a prendere un po ' input da parte dell'utente, e poi sta andando a controllare che l'ingresso contro la condizione che hai impostato per esso. Quindi in questo caso è andare a controllare. E 'intenzione di dire, OK, è il nostro ingresso negativo, o è 0 o negativo, che sarebbe valido. Così allora sarebbe nuovamente pronta. Domanda? PUBBLICO: E 'lo stesso poi come ciclo while se appena copiato il codice e metterlo [incomprensibile] ciclo while? ALLISON: Così questione era sarebbe questo sia lo stesso di appena un po ciclo se dovessimo solo copiare il ciclo while sopra. Quindi, in questo caso, il vostro ciclo while è andando a controllare la condizione del primo. Quindi, in questo caso, se abbiamo provato di scrivere come un semplice ciclo while, si direbbe, mentre ingresso è inferiore a uno. Ma non abbiamo un ingresso per esso. PUBBLICO: Se [incomprensibile] ciclo while compreso questo codice, ma poi cavata il codice sopra il ciclo while anche. Hai appena avuto questo codice [Incomprensibile] ciclo while. ALLISON: Sarebbe la stessa cosa, sì. Quindi, si può solo write-- invece di avere un sì fare--. GABRIEL: Ma questo è più elegante. ALLISON: Sì, che è più elegante. È possibile ottenere nella progettazione e quant'altro, ma sì, si può assolutamente farlo. Tutte le altre domande? OK, fresco. Così abbiamo parlato molto di condizioni con tutti questi cicli che abbiamo, quindi stiamo in realtà sempre in condizioni di espressioni booleane. Anche in questo caso, è possibile utilizzare questi in C, così solo tipo di transizione da interfaccia grafica più effettivamente codifica. Fresco, così grande, se. In pratica ci permette solo di introdurre una certa logica nel nostro programma e di controllo condizioni sys. Quindi in questo caso, OK, n è maggiore di 0? Sì, è, in modo da poter eseguire questo. E 'solo un po' di controllo condizione che hai impostato, che credo che siamo tutti agio con le condizioni di controllo. Freddo. Quindi, se il resto è il vostro altro, si può dire OK, se questo è vero, farlo prima cosa. Altrimenti Voglio predefinito e fare qualcosa di diverso. Come in questo caso, si sia scelta la numero positivo o un numero negativo. Hai solo due opzioni. Avete bisogno di eseguire a prescindere di ciò che i vostri dati da parte dell'utente. Così si può dire bene, è maggiore di 0? Freddo. Stampa un numero positivo. Se non è, stampare un negativo. Tutto bene? E poi una cosa da riconoscere è che se la se la condizione è soddisfatta, l'altro sarà mai anche eseguire. Solo uno di questi sarà esecuzione alla volta. Quindi è un compromesso. Non arrivare ad avere entrambe le cose. O si ha la prima condizione. O si ha la se o l'altro, non entrambi. Che poi può rendere le cose ancora più complicato, perché si può fare se, altrimenti, e poi altro. Quindi, in questo caso, avere tre condizioni. E ancora, solo uno di questi è andando a finire per essere eseguito. Così si potrebbe chiedere bene, cosa succede se si avere qualcosa che può soddisfare due di questi. Forse quello che stai inserendo soddisfa sia la condizione per se e la else if. L'unica cosa che sta andando a correre ALLISON: Non appena trova qualcosa che soddisfa la condizione che restituisce true, questo è ciò che è andare a correre e nient'altro. Quindi, se hai avuto questo numero compreso tra 0 e 5 per il primo, o è questo numero compreso tra 3 e 5 per l'altra parte, se, e si immette il number-- Ho detto 0 e 5 e-- 4. Sta andando a colpire il primo. E 'intenzione di dire OK, questo numero è compreso tra 0 e 5. Esegui e lasciare. Non sarà mai colpire quel seconda opzione. Cool? Impressionante. OK abbiamo anche istruzioni switch se si desidera ottenere anche more-- o dispiaciuto, interruttore è vicino. Sto andando troppo avanti di me stesso qui. Anche in questo caso, di più se i blocchi dove, come ho appena detto è, non appena si trova una condizione che è soddisfatta e se un altro se altro, lascia. Se hai bisogno di controllare più cose, sei andando a voler utilizzare questo perché che controllerà ogni volta qui. Quindi, questo verrà eseguito attraverso e se è maggiore o uguale a 90, sta andando a stampare quello. E verrà eseguito attraverso e controllare ogni singolo uno di questi. PUBBLICO: Quindi questo sarebbe più buggy di [incomprensibile]. Questo sarebbe come [incomprensibile]? ALLISON: La domanda è: questo sarebbe buggy o questo fare quello che vuoi. Dipende molto da cosa che volete dal vostro programma. PUBBLICO: Voglio dire, come se si mette 90 in. ALLISON: Se si mette 90-- PUBBLICO: [incomprensibile]. GABRIEL: Hai intenzione di ottenere due cose. ALLISON: Hai intenzione di ottenere due cose. Sì, due. ROB BOWDEN: Due? ALLISON: No. ROB BOWDEN: Four. Se si mette 90, sta andando a dire che ha ottenuto una A, hai una B, hai una C, hai un D. PUBBLICO: [incomprensibile]. ALLISON: Giusto. Così ho dipende da ciò che si voglio da te programma. A volte è necessario controllare più cose. Otterrete molto più profondo in quello che buon design è, come si va avanti. La cosa importante da capiscono è che questo controllerà tutte e quattro le condizioni qui. Considerando che, se si trattasse di un if else if else se altro, avrebbe colpito quel primo caso, sarebbe stampare hai un A e da fare. ROB BOWDEN: Anche se deciso di cambiare questo per se e maggiore o uguale a 90, se e maggiore o uguale a 80, e inferiore o uguale a 89, se n maggiore o uguale a 70, ed n minore o uguale a 79, così che sarà corretta. Che fare quello che vogliamo, ma controlla ancora ogni singolo esso. Così, mentre nel primo scenario, se si immettere 90 con appena se else if else if, ed entriamo 90, poi sta andando a correggere. Controllerà la prima uno, stampa hai un A, salta tutto, perché già trovato uno che funziona. Tutti i casi si escludono a vicenda in base a se else if else if. Così sarà eseguire il in primo luogo, se, poi è fatta. Si andrà fino in fondo. Considerando che, se cambiamo che questo sia quello che ero dicendo con inferiore o uguale a 89. Sta andando a controllare la prima. Sarà stampa. Sarà controllare la seconda. Non è andare in stampa. Controllare il terzo. Non andare in stampa. Controllare il quarto. Ora andare in stampa. Quindi, in questo caso, l'altro se versione, poiché questi casi si escludono a vicenda, è un uso migliore se else if else if, perché sta per avere meno controlli delle condizioni a questa versione. ALLISON: Awesome. Quindi, un'altra cosa che possiamo fare è istruzioni switch. Fondamentalmente un'istruzione switch prende in qualche variabile, in questo caso è n, e determina qual caso eseguire. Quindi questo è anche uno dove i vostri casi dovrebbe essere una specie di escludono a vicenda. Quindi, in questo caso, se noi abbiamo un uno, è intenzione di abbinare qualunque cosa variable-- qualunque sia il valore di n è uno di questi casi, quindi 1, 2, o 3, e stampare la riga corrispondente. E poi se si nota qui, abbiamo anche una impostazione predefinita, il quale è possibile di pensare a come gli altri. Quindi, se si sceglie un altro numero oltre 1, 2, e 3, in questo caso è solo andare in stampa non valida. Decidere quando usare IFS contro se elses contro switch che sta accadendo di essere qualcosa che voi ragazzi sarà vedere progettare saggio come si inizia a scrivere programmi più complessi, e non ci sono regole dure e veloci di quando utilizzarli. In realtà dipende dal vostro contesto. ROB BOWDEN: E proprio di buttare là fuori dal momento che è la sezione più comodo. Interruttori, tendono a essere-- così si è limitato il numero di modi in cui li può usare, perché IFS, la condizione può essere abbastanza molto tutto quello che vuoi. Con gli interruttori dei casi devono essere numeri, o tecnicamente possono essere caratteri, ma caratteri, come vedremo, sono solo numeri. Così devono essere i numeri, ma gli interruttori sono molto più efficiente rispetto al caso else if else if, perché anche prendendo l'esempio before-- bene, l'esempio di grado sembra buona. Beh diciamo qui, noi invece facciamo questo come se else if else if scenario. Quindi, se n è uguale a è uguale a 1, stampare hai scelto un numero basso. Se altro se n è uguale a è uguale a 2, hai scelto un numero medio. Altrimenti se uguali è uguale a 3, alta. Altrimenti non valido. Quindi diciamo che è stato il nostro scenario. Quindi diciamo che entriamo 4, quindi ci aspettiamo valido. Il modo in cui if else if else se l'approccio è andare a lavorare è verifica la prima condizione. Non è soddisfatto. Quindi controlliamo la seconda condizione. Non è soddisfatto. Controllare la terza condizione. Non soddisfatto. Quindi andiamo al resto e il risultato della stampa non valida. Il modo in cui le opere di commutazione è compila verso il basso in quello che stiamo andando per chiamare un tavolo salto. La principale idea dell'essere che quando si entra 4, si può immediatamente andare in default. Non ha bisogno di controllare am caso ho 1? No che non è vero. Caso 2? Nope. Caso 3? Nope. Di default. OK, questo deve essere dove sono volere, e quindi eseguire tale. No, salta immediatamente al default. Oppure Entro 2, è immediatamente per andare al 2 senza bisogno di passare per caso 1. Quindi, in questo modo, realisticamente giorno d'oggi che è non tanto di un incremento di efficienza. Di solito i computer sono abbastanza veloce, e questo non è un gran che. Ma è il caso che interruttori sono più veloci. Se si sta veramente cercando per ottimizzare, utilizzare un interruttore. ALLISON: Freddo. E poi abbiamo operatore ternario. Quindi so che ho citato in precedenza la parola zucchero sintattico. Quindi è solo cose che fanno il codice molto più conciso. Quindi questo è uno di quei casi. Così operatore ternario è punto interrogativo due punti come si vede nella stringa di linea s è uguale a n maggiore di 100 punto di domanda bassa alta del colon. Quindi, in pratica come funziona è la sua n maggiore di 100 è una condizione. Quindi penso che possa avere un senso. E 'come chiedere a una domanda. Sta dicendo: oh, è n maggiore di 100. Chi lo sa? E se restituisce vero, sta andando a dare la prima cosa che è lì elencati, che è alto. In caso contrario, sta andando per darvi basso. Quindi, questo è solo un molto semplice e modo efficace per fare come un if else. E 'tutto questo è. E se dovessimo scrivere questo come se il resto condizionale, sarebbe se n è maggiore di 100, di ritorno elevata. Altrimenti, ritorno basso. Questo è solo un molto più modo conciso di scriverlo. ROB BOWDEN: Quindi questo particolare esempio è ogni volta che si sta facendo qualcosa così, questo è il motivo dove io uso ternario molto frequentemente. Quindi non abbiamo ancora parlato di portata, ma Odio vedere punto e virgola stringa s. Se n maggiore di 100, s uguale elevata. Altrimenti, s è uguale a basso. Quindi quel modello, quei cinque linee di codice letteralmente 100% del tempo può essere trasferito in quello era lì con un ternario. Così il ternario, una riga di codice. L'if else, cinque. Questo è un esempio io punto fuori ogni singola volta. Questo sarebbe ottimo posto per un operatore ternario. E 'così pulito. Ma la gente tende mai usarlo. ALLISON: Prendere via Gabe. GABRIEL: Così ora voi ragazzi tutto imparato nella lezione di questa settimana che tutto in un calcolatore è binario, giusto? Proprio come le lampade qui. Si può essere attivata e disattivata. E da tutto ciò, voglio dire letteralmente tutto. Alcuni numeri e caratteri e stringhe, e anche il codice che si scrive quando esso viene compilato a macchina codice e cose del genere, in modo che tutto si riduce a 0 e di 1 '. E così quando abbiamo a che fare con numeri interi, che è qualcosa che è tecnicamente molto semplice, dovremmo essere in grado di fare cose come l'aggiunta di loro, che è probabilmente una delle cose più semplici si può fare per due interi, giusto? Quindi, addizione e sottrazione funziona proprio come funziona in notazione decimale, solo che qui è binario, giusto? Quindi è in base due. Quindi aggiungere 1 più 1. Che dà 0, e 1 porta su. E solo continuare a fare quello, Così ora arriva la domanda più interessante. Noi sappiamo come rappresentare tutto interi positivi nel calcolatore, ma facciamo questo esercizio. Fingere voi ragazzi siete tutti nel 1960 o qualcosa cercando di creare un computer, e devi venire da un modo di immagazzinare meno 1, per esempio, o meno qualsiasi intero per quella materia. Come hai fatto? Tutte le idee? Basta buttare niente a me. Sì? PUBBLICO: [incomprensibile] designare uno speciale se il [incomprensibile]. GABRIEL: È possibile designare un po 'speciale, che sarà 0 o 1. Diciamo che uno se è positivo e 0 se è negativo. E poi il resto del bit è solo per memorizzare il numero. Freddo. Ecco, questo è una buona idea. Abbiamo, io non lo so, 200. E se il primo bit è acceso, allora è più 200. Se è spento, è meno di 200. Freddo. C'è solo una piccola problema con questo, che è se cerchiamo di riassumere le cose. Quindi immaginate che abbiamo 11111 qui, e stiamo sommando questo con 00100 qualunque cosa. Se quei due sono positivi, va bene. Ma se uno dei loro è negativo, come diciamo che questo bit qui è quello che è responsabile for-- ho intenzione di fare un separate-- quindi questo significa che questo numero qui è positivo. Questo significa che questo numero qui è negativo, giusto? Ma poi quando si è andando a riassumere loro, bisogno di un'istruzione if dicendo oh se questo è 0, allora la mia somma sarà qualcosa di diverso, giusto? Quindi c'è un po ' più intelligente modo di fare questo, che si chiama complemento a due. Quindi, in pratica quello che abbiamo DO è definiamo meno 1 essere la cosa che se aggiungiamo fino a 1 ci dà 0. Lasciatemelo ripetere. Quindi diciamo che questo qui è 1. Qual è la cosa che naturalmente in numeri interi positivi aggiunto che ci dà 0? Che cosa succede se si cerca di aggiungere a questo numero? Stiamo andando a have-- OK, quindi cerchiamo di aggiungere. Stiamo per avere 1 più 1 è 0, e quindi porta sopra. E allora stiamo andando a ottenere 0 di nuovo. Sto diventando confuso. E si sta andando ad ottenere 0 e 0 e 0 e 0 e 0 e 0. Un sacco di di 0. Per lo ultimo, non siamo sarà in grado di portare sopra, perché diciamo che stiamo solo trattando con un byte, in modo che solo 8 bit. Che cosa fa il computer per impostazione predefinita è solo dimentica che [incomprensibile], Ok? Quindi questo è quello che viene chiamato complemento a due. Abbiamo semplicemente definiamo meno 1 per essere il cosa qui che se si aggiunge che a 1 darebbe 0. E questo è piuttosto fresco perché in realtà non necessario tardi per implementare un diverso tipo di somma a seconda del fatto che è un negativo o un numero positivo. Questo fa senso? Quindi una cosa che facciamo Qui, al fine di convertire tra positivo e negativo intero viene poi capovolgere tutto, e poi aggiungiamo 1 a quel numero. Se si tenta di farlo da soli su un pezzo di carta, si sta andando a vedere che ha un senso. Ma se prendo questo numero Qui, questo è cinque. Quindi, se ho capovolgere tutto qui, quindi 1, 1, 1, 1, 1. Flip, flip, flip. E poi aggiungo 1 ad esso. Ho intenzione di avere esattamente meno 5. Ok? Questo tipo di senso, perché se si tenta di riassumere con il numero che avevamo prima, che era-- cerchiamo di capovolgere di nuovo. E 'stato 101 e un sacco di 0 di. Se si tenta di aggiungere questi due numeri insieme, si sta andando ad avere esattamente 0. Ok. Tutte le domande? PUBBLICO: [incomprensibile] GABRIEL: Che cosa vuoi dire? PUBBLICO: negativo per positivo [incomprensibile]. GABRIEL: No, si ribalta e si aggiunge 1 sempre. Sì. Ok, quindi anche caratteri codificati binari. Abbiamo tabella ASCII, come si ha visto anche in conferenza, giusto? Quindi è fondamentalmente una mappatura delle cose. E qui non posso sottolineare abbastanza che per un computer, un e 65 sono letteralmente la stessa cosa. Quindi, se scrivo qualcosa come char c uguale a, ho potuto contemporaneamente basta scrivere 65 qui, e sarebbe esattamente lo stesso, OK? Non c'è alcuna differenza. Di solito tendiamo a mettere caratteri a variabili di tipo. Char, non perché sono essenzialmente fatta per questo, ma perché della convenzione umana. Ma si può trattare solo con numeri interi invece di variabili di tipo char, e andrà tutto bene. L'unica differenza reale tra un c char e int i è che un int quattro byte in più sistemi, mentre un char ha un byte. Sono essenzialmente la stessa cosa in termini di dati. Così che cosa stamperà qui? Qui stiamo stampando una cifra utilizzando printf con un più 1, e proprio come numeri interi, caratteri possono essere sommati, in modo caratteri possono essere sommati. Quindi questo è esattamente 65. Quindi ci sara ' 66, e qui abbiamo 65 più piccolo un meno grande A, che sarà, io non lo so. Ma sarà esattamente il divario tra le lettere maiuscole ee le lettere più piccole, così stiamo andando a ottenere un piccolo, giusto? Sì. Quindi questo sta per stampare un personaggio che è esattamente questa. Buono? Tutte le domande? Qui abbiamo un mucchio di diverso tipi per le variabili numeriche. Abbiamo già parla di int. Float è solo un modo a-- questo è davvero divertente, perché quando ho imparato programmare nel giorno con Python, il primo programma che ho mai cercato di scrivere, ho visto che c'era un tipo chiamato e un tipo chiamato galleggiante. E il galleggiante era per tutti i numeri reali. Allora ho chiesto perché dovrei Io abbia mai usare un int, allora? Perché se posso usare tutto numeri reali con un galleggiante, Vorrei solo smettere di usare interi, giusto? Perché i numeri reali sono molto simile più generico. Si scopre che si tratta di non è il caso in calcolatori perché sono essenzialmente cose diverse. Così interi e carri allegorici, il operazioni che fai per loro sono essenzialmente diversa perché del modo in cui sono memorizzati, OK? Stiamo andando a parlare un po ' po 'di più su che in un secondo. Quindi doppio è solo un galleggiante più grande. Solitamente nella maggior parte dei sistemi, un galleggiante è quattro byte, proprio come un int. E una doppia è di otto byte. Una lunga lunga in realtà è solo un simbolo che si aggiunge a un tipo come int. Tu dici long long int come questo. Long long int x per renderlo più a lungo. Quindi, nella maggior parte dei sistemi, che darà otto byte invece dei soliti quattro. E si può effettivamente cadere la in, in modo che possa solo dire long long, e che funziona troppo, OK? Si può anche fare altre cose come unsigned int, o ancora semplicemente senza segno potrebbe anche funzionare. E che avrebbe fatto x sia una variabile come tutto ciò che è positivo, quindi non si può davvero negativo numeri nel modo che abbiamo visto qui. Così dopo meraviglioso punto e precisione floating. Questo è uno dei motivi per cui si desidera utilizzare int invece di carri allegorici, perché interi sono al 100% preciso, giusto? E 'esattamente quel numero. Per i punti galleggianti, se si dicono risposta è uguale a 1 su 10-- Mi capita di avere questo esatto programma qui, float.c. Che stampa a 20 cifre decimali. 1 diviso 10, e che di solito è 0,1, giusto? Ma qui se facciamo Galleggiante e poi corriamo esso, si vede che non è esattamente 0.1. E 'qualcosa di 0,149. E perché? Perché non si può davvero rappresentare ogni unico possibile numero reale in memoria perché ci sono numerabile molti di loro. Quindi siamo tecnicamente in grado solo di rappresentare una quantità finita di essi con una quantità limitata di dati. Ma è davvero interessante. Ora si pone la questione di come si farebbe andare a questo proposito che rappresenta questo con i bit, giusto? Così come vengono memorizzati i galleggianti? Con numeri interi è stato facile. Ma con i galleggianti che si desidera per massimizzare l'intervallo, e si vuole essere in grado di rappresentare numeri enormi e molto piccoli numeri come 0.000001 contemporaneamente. Quindi, di nuovo, stesso gioco. Qualcuno ha qualche idea di come potremmo andare in giro che rappresenta galleggiante in memoria? Basta buttare nulla. Sì, per favore. PUBBLICO: [incomprensibile] come se era due int e uno essendo il [incomprensibile] e un essere tutto dopo il punto decimale. GABRIEL: OK, fresco. Così due interi diversi. Si può avere 12.45, in modo che è 12 e 45. Nizza. Che prima che tu per dire? La stessa cosa? Sì? PUBBLICO: notazione [incomprensibile] dove si separa la base. GABRIEL: La notazione scientifica, sì che di solito è quello che succede. Quindi questo è quello che viene chiamato la mantissa. Questo è ciò che è in realtà il numero, quindi l'esponente è proprio dove la virgola è, giusto? Quindi questo sta per essere qualcosa della forma 1, 2, 3, 4, 5 volte 10 al meno 4. Ho appena realizzato che-- sì, esattamente. E allora questa 10 ^ 4 è andando a definire dove la virgola è, OK? In Brasile si usa virgola. Qui voi ragazzi Utilizzare un punto. Quindi un punto. E questo è cool, perché allora si può mettere a fuoco un sacco di vostre punte su questo ragazzo qui, sulla mantissa e quindi questo è sarà il vostro precisione effettiva. E si può fare questo sia in decimale o nel sistema basato binario. Ci sono diversi modi per implementare questa. Domande? Sì? PUBBLICO: Quanti sono i posti dopo la virgola [incomprensibile]? GABRIEL: Questa è una domanda complicata, perché non è mai veramente al 100% preciso, perché, come si vede qui, per alcuni numeri è 100% precisa. Credo che se mettiamo 0,5 qui, che sta per essere al 100% preciso. E sarà 0,500000. Quindi, in questo caso, è perfetto. Ma in altri casi, è molto meno perfetto. Nella mia esperienza, come fino a quattro, cinque cifre decimali è abbastanza preciso. Se si utilizza un doppio, sta andando a essere il modo più preciso di quello, OK? ROB BOWDEN: Quindi, solo per gettare un po 'di contesto a carri allegorici, Non mi ricordo mai al 100% come il spec di carri funziona davvero, ma io ti ricordi sempre che galleggia iniziare a ricevere disordinato. Quindi l'idea è che quando si arriva davvero, numeri molto grandi o molto, molto piccoli numeri, si parte sempre peggio e peggio a differenziare tra due vicini galleggianti. Così come mi piace pensare è con il punto imprecisioni galleggiante, ci sono due galleggianti se cerco di specificarli in C, nonostante il fatto che sono numeri diversi, che stanno andando a essere interpretato come lo stesso numero, perché non siamo in grado di memorizzare in modo diverso. Dobbiamo usare gli stessi bit. E così quando si arriva a davvero, davvero grandi numeri, parlando come 10 alla 300 o qualcosa, è a quel punto che il 10 al 300 o 5 volte 10 al 300 non può essere differenziata da 7 volte 10 al 300. Quindi questa è una bella differenza tra i due numeri. Ma poi quando si arriva alle normali cose gamma, si tende ad essere abbastanza bravi a differenziare. E poi quando si arriva davvero piccolo, si sta anche ricevendo di nuovo piuttosto male. Così come un sacco di 0.0000, diventa piuttosto male. GABRIEL: Sì, così una breve nota. Non fare questo. Non tentare mai di confrontare galleggianti con uguali uguali, perché anche se sono quasi il stesso, quasi lo stesso non è lo stesso. Che cosa fai di solito è si sottrae li, assumono il valore assoluto di questo, e vedere se è più piccolo di 0,0001 o qualcosa del genere, OK? E fresco. So che un sacco di persone hanno alcuni retroscena in Java, soprattutto quelli che hanno fatto AP informatica, giusto? E Java è un linguaggio che per lo più sulla base di C, ha una coppia molto grandi differenze. Ma per i loop, e IFS, e cose del genere che, sono tutti la stessa sintassi. Ho un paio di programmi qui per mostrare questo. Così, per esempio, un mondo ciao semplice. Questo è ciao mondo in C, che si ragazzi sono sicuramente a conoscenza, e questo e questo è in Java. Così in Java abbiamo questa public class, ciao mondo, e static void pubblico args principale, e di stringa. Gli argomenti di stringa sono in corso ad apparire in C molto breve. Ma cerchiamo di non andare lì ancora. In questo momento abbiamo nulla qui, il che significa che principale non è richiede alcun argomento. E poi abbiamo System.out.println, e questo è il tipo di equivalente per printf. Qui non abbiamo davvero bisogno della barra rovesciata n perché stampa ln fa per voi. Si aggiunge la barra rovesciata n alla fine della linea. Ma se si va in qualcosa come un per, voi può vedere che sono più o meno la stessa cosa. Quindi l'inizializzazione e la condizioni, e l'aggiornamento è-- Ho perso uno spazio qui-- sono più o meno la stessa cosa, ad eccezione di Java ha come qualcuno in più roba di alto livello. Qui possiamo fare più I e Java verrà automaticamente fare questo ho qui, che è un intero, in una stringa, e poi aggiungere il due stringhe insieme. Qui in C abbiamo bisogno di fare il &% d. La linea qui per la appare esattamente lo stesso. E se guardiamo se, IFS anche apparire esattamente lo stesso, giusto? Così i veri grandi differenze sono in quelle cose che vedete qui. Public static, vuoto, e poi public class se. Quindi, Java ha che cosa è chiamato una macchina virtuale. Ed è fortemente basata su ciò che si chiama programmazione orientata agli oggetti, che è molto, molto comune paradigma di programmazione al giorno d'oggi. E questa cosa classe è ciò che si vede, qualcosa da orientamento agli oggetti, viene a creare una classe e poi si può derivare oggetti da quella classe. Non stiamo andando a parlare troppo molto su questo in CS50, ma questo è sicuramente qualcosa di veramente cool, soprattutto se si vuole andare in più sofisticato sviluppo web al termine del corso, come presentare il progetto finale e alcune strutture belle e cose. Quindi, in pratica l'idea è che si non si vuole re-implementare qualcosa, in modo da creare qualcosa che sia molto generico, come la forma, e quindi si crea forme diverse da esso, e poi da ciascuna queste forme, si crea alcune forme più specifiche in tre dimensioni o qualcosa del genere. E hanno questa gerarchia si ereditano dalle altre, così tutte le funzioni e tutte le variabili che la grande forma qui ha, tutti questi stanno per avere, e tutti questi sono andando ad avere, e così via e così via. Ecco, questo è l'idea di base. C non ha questo, ma C ++ non avere questo tipo di funzione. E Java è fortemente influenzato per l'orientamento agli oggetti, ecco perché si vede Classe qui tutto il tempo. E l'altra cosa è questa macchina virtuale Java. Quindi questo, penso, è una idea molto intelligente. Quindi quali sono le persone che java inventato ha fatto è che non volevano compilare il loro codice due volte se dovessero funzionare in Windows, o un Mac, o Linux, in modo da quello che fanno è letteralmente corrono qualcosa di simile l'apparecchio, ma non si ha realmente vedere che succede. Così corrono una macchina virtuale all'interno del computer, che è fondamentalmente come un sistema operativo mini. E che di funzionamento scopo del sistema nella vita è solo per eseguire quello che viene chiamato bytecode. Così, invece di in C, il modo in cui sarebbe compilare questo è fare se, e quindi eseguire ./if. Ho dimenticato il backslash. In Java, si dovrebbe fare prima Java C a compilarlo, if.c. Non è di C. dot java. E poi si deve eseguire non ./. È possibile ottenere questo nuovo file if.class, ma non si può davvero eseguire if.class ora solo come abbiamo fatto prima. Questo non è un eseguibile. Devi eseguire. Devi dargli da mangiare in un programma chiamato Java, e che il programma è la macchina virtuale, e poi si fa if.class, o se. Sì. E allora funziona. OK, questo è una specie di macchina virtuale accadendo. C non ha questo, quindi se dovessi mettere questo programma in una macchina Windows, che non avrebbe funzionato in C. In Java lo fa. Domande? Freddo. Questo è se per la sezione eccellente per oggi.