ROB: Dobre. Vitajte v prvej časti. Som Rob. JOSEPH: Ja som Jozef. ROB: Takže budeme ponoriť dovnútra Prvá vec, hovoriť o tom, Je zariadenie. Takže dúfajme, že väčšina z vás má stiahli už. Ale môžete vidieť podľa pokynov na cs50.net/appliance. Ach bože, teraz som rozpačitý. Stále počujem. JOSEPH: Wow, to znie ako to je dezorientovaný. ROB: Takže niektorí ľudia majú problémy s ním, takže sa nemusíte čakať, až last minute problému nastavený na pokúsiť vyriešiť Appliance a zistil, že to nefunguje. JOSEPH: A keď niečo nefunguje a budete potrebovať pomoc, môžete prejsť na cs50.net/discussion kde sme mať fórum, kde sa môžete písať svoje otázky. A my sa k nim nakoniec. ROB: Dobre. Tak toto je to, čo zariadenie vyzerá. Opäť, je to len úplne oddelené operačný systém beží v rámci bez ohľadu na operačný systém beží na vašom notebooku. A hlavné vecí, ktoré budete používať je gedit. Tak dúfajme, že to má už stala známou stránky. Terminál. A môžete tiež spustiť Chrome vnútri spotrebiča. Tam bolo niekoľko ľudí, ktorí hlásili k internetu nefunguje v Appliance. A niektorí z nich jednoducho predpokladať, že sa nepredpokladá, že internet v Appliance. Ale áno, tam sa predpokladá, byť internet. Poviem to hneď, ale to nie je naozaj nič neznamená. Ak internet nefunguje, To je to, čo majú tendenciu potrebovať spustiť ho opraviť. Ak máte problémy internete, nie Pamätám si to, stačí poslať ho na Diskutujte, a budeme hovoriť, že beží. Ale internet je potrebné pracovať. Takže jediná vec - jo, nič inak je naozaj dôležité. Ale ja som len chcel poukázať na to, že - pozri v tomto pravom dolnom rohu. Takže každý z vašich zariadení by mať IP adresu. A neskôr v semestri, to IP adresa bude vhodnejšie, keď pracujete na webovej p-set, pretože budete mať prístup Webové stránky, na ktorom pracujete zo svojho miestnej Chrome pomocou tejto IP adresy. Ale to, čo som chcel použiť IP adresu pre - a nemusíte to robiť, som Len chcem poukázať na to - je tu. Tak toto je okno terminálu na môj Mac, to nie je Spotrebič vôbec. A môžete sa pozrieť do toho, čo Tento príkaz robí. Ale ja idem na SSH priamo k môjmu Appliance. Ja neviem, čo je IP. JOSEPH: 168 - 168.224.1.0. ROB: Takže akonáhle som urobil s tým, prihlásiť Teraz, v podstate, to je totožný s okno terminálu v mojom Appliance. Takže som skoro nikdy skutočne odpracované zvnútra spotrebiča samotného. Vždy som si to beží v pozadí minimalizovanom a SSHed do neho. Problém s týmto je, že nebudete , Aby bolo možné použiť gedit ľahko priamo z tohto. Ale ak chcete byť naozaj v pohode hacker, potom by ste mali zvyknúť na príkazového riadku, textový editor rovnako. Takže Vim a Emacs a Nano, všetky z nich sú rôzne alternatívy. Nano má tendenciu byť najjednoduchšie. A myslím, že to nemá žiadny zvýrazňovanie syntaxe. Oh, nie, je to úplne robí. Takže môžete použiť Nano, pretože že jeden je celkom jednoduché. Vidíte všetky tieto príkazy v spodnej časti. Táto malá mrkva symbol. Ak ste ešte nevideli, budete si musieť vybrať pravdepodobne vidieť to teraz veľa. To všeobecne znamená, že ovládacie mrkva, ako dolnej ľavej časti klávesnice riadiaci znak. Tak tu to mi hovorí, sem - oh, to nie je orezaný, ak som zoom palcov Takže Control, X je, ako Chystám sa ukončiť. A to hovorí, že môže zasiahnuť Y pre Áno, pre ukladanie, N pre Nie. Tak to je Nano. Vim a Emacs majú tendenciu byť o niečo viac zložité a ohromujúci. Ale môžete sa na to zvyknúť, a potom sa budete milovať. Tak to je to. JOSEPH: Nie je potreba to urobiť. ROB: Jo. Tie sú zadarmo k použitie gedit pre Zostávajúca časť semestra. Takže nejaké otázky spotrebič súvisiace? Alebo máte nejaké myšlienky na to, čo iného Treba hovorí o spotrebič? Áno. SPEAKER 1: Keď SSHed do svojej vec, bolo heslo Crimson? ROB: Jo. Heslo pre skoro všetko v prístroji sa deje byť Crimson. SPEAKER 2: Inštalácia ako skutočný IDE na zariadenie, bude to fungovať? ROB: Viem si predstaviť, Eclipse má mať Fedora verzia, v tom prípade, áno, môžete to urobiť. Je to asi nie je naozaj stojí za to. SPEAKER 2: OK. Takže je to asi jednoduchšie, keď som chcel, aby používať Eclipse, stačí použiť natívne a potom nahrať do - ROB: Oh, to je tiež asi jednoduchšie. Ale môžete si to pracovať vnútri spotrebiča. JOSEPH: A pre kameru, otázka bolo, môžete nainštalovať ďalšie IDE vnútri spotrebiča? ROB: Eclipse je Príkladom IDE. Nejaké ďalšie otázky spotrebičov? Dobrá. Takže teraz budeme pohybovať na príkazovom riadku veci rozhrania súvisiace, tak CLI. A opäť, ja som jednoducho ísť do práce v tu, pretože je totožný s prácu v terminálovom okne vnútri spotrebiča. Ako to, že písmo hľadáte? Je to dosť veľká? Dobrá. Takže existuje veľa príkazov, ktoré mali by ste si celkom používa pre v priebehu semestra. Veľký dva pre navigáciu sú ls, zoznam Súbory v tomto adresári, a cd, tak zmeňte adresár. Tak som sa môže zmeniť na plochu a potom veľmi časté vzor je cd na adresára a okamžite ls to, čo je v adresári. Ľudia tiež často neuvedomujú, že dokončenie Tab je vec. Tak ako CD, VH, a potom som narazila Tab. Takmer nikdy som písať z Celá vec. A potom keď som držať biť Tab znovu, bude to automaticky spustiť výpis na mňa. Takže môžem cd vhosts, miestneho hostiteľa. A to len tak - V prípade, že ste počuli termín predtým, adresár je len iné slovo pre zložku. Takže teraz, ak ste vidieť - Poďme priniesť, že na vrchol. Takže teraz, ak vidíte v zátvorke, môžete vidieť malé vlnovka, lomítko, vhost, lomka, miestneho hostiteľa. Takže vlnovka, ktorá sa týka do môjho domovského adresára. Je to adresár, ktorý ste , Keď ste SSH palcov Je to adresár si, keď môžete otvoriť terminál. Je to miesto, kde začnete. A tak som vo vnútri môjho domovského adresára, a ja som vnútri vhost adresár vnútri môjho domovského adresára. A potom som vnútri miestnej hostiť adresár vnútri, že. Takže niektoré ďalšie užitočné veci s cd - alebo dobre, všeobecne, tak dot vždy odkazuje na aktuálny adresár. Cd, bodka je celkom bezcenný príkaz. Ale to sa mení na aktuálny adresár. Užitočnejšie jedna, pokiaľ ide o cd je bodka, bodka, čo je stačí ísť do jedného adresára. A všimnite si, že tieto - Chcem povedať, aliasy, ale títo symboly, bodka, a bodka, bodka, tie práce pre skoro akýkoľvek príkaz, ktorú ste bude myslieť na beh. Tak ako cd je pravdepodobne, kde budete použitie najviac, ale tie nie sú veci, ktoré jednoducho cd rozumie. Je to v podstate niečo, čo vaša celá príkazového riadku chápe. Mnoho programov pochopiť bodka a bodka, bodka. Takže ďalšie užitočné ty - CD, pomlčka. Tak, že sa chystá priviesť ma posledný adresár, ktorý som dovnútra Takže niekedy budem robiť niečo ako, oh, ja pracujem tu. A vidím nejakú chybu s niečím, a Ja pôjdem preskúmať ju bude nejaký náhodný adresár niekde. A mám robiť, keď to nebudem vedieť, dovoľte mi, aby som tam. To bude. Tak som robiť, čo chcem v tomto adresári. Bla, bla, bla, bla, bla. A bol som rád, v poriadku, chcem vrátiť sa na miesto, kde som bol. cd, pomlčka, a to ma privádza späť. Tak idem hodiť veľa z nich na vás dnes. Nemyslím, že budete pamätať všetky z nich. Je to trochu len viem, , Že existujú. A potom neskôr, keď ste ako, hmm, chcem sa vrátiť do adresár, ktorý som bol len na, ach, počkajte, niečo také existuje. Nemusíte len zadať celý znova adresári. JOSEPH: A nakoniec budete len používať znovu a znovu, a to bude stáť svalovej pamäte. ROB: Jo. Tak, ako som už povedal skôr, že tilda je váš domovský adresár. Takže môžem cd, vlnovku. Ale ja nemám ani na to, že keď som - Vrátim sa do adresára, takže nie je to zbytočné príklad. Ale keď som to CD, ktoré je tiež rovnako ako, ísť do môjho domovského adresára. Ja Command, K. JOSEPH: Môžete tiež zadať jasné, slovo, a mal by si ju vyčistil. ROB: A myslím, že aj ovládanie, L tiež robí. Takže mnoho rôznych spôsobov. Myslím, že tam sú niektoré rozdiely, pokiaľ jasné a riadenie, L bude len Naozaj ju zatlačte na hornej a Môžem stále posúvať späť. Príkaz, K doslova ničí všetko, a vy Nemožno rolovať späť hore. Prinajmenšom, to je ako to funguje v iTerm2. Neviem, ako ostatné veci - oh. S SSHing, takže ak ste na Windows, budete musieť stiahnuť PuTTY aby sa SSH, pretože Windows nie je majú ako vstavané SSH nástroja. Od Macs, môžete len SSH priamo z terminálového okna. OK. Otázky? S ls, takže niečo si zvyknúť u väčšiny z týchto príkazov je - dobre, budem len robiť jeden. Sk, pomlčka, l Takže pomlčka, l je to, čo budeme volať vlajku ls. A mnoho z týchto príkazov majú vlajky ktoré môžete odovzdať na ne. Takže v tomto prípade, pomlčka, l je vlajka , Ktorý hovorí to, aby mi v plnej výpis všetkých informácií z týchto súborov. Takže tu vidíme, že desktop je zmenená 30. júla v 12:54. Stiahnutie bola zmenená na 6. septembra. Jedná sa o aktuálnej veľkosti a bajtov týchto adresárov. Nemusíte rozumieť To všetko. Tohle na ľavej strane, tieto drwx to, že bude oveľa viac relevantné neskôr, keď budete musieť vysporiadať s - že má čo do činenia s tým, kto má oprávnenie pozrieť sa na tieto súbory. A tak ak ste neboli jediným používateľom na tento počítač, mali by ste byť schopní povedzme, OK, ja som mala byť len jedna možnosť pozrieť sa na tento súbor, alebo som bude, aby všetci pozrieť sa na tento súbor. Takže niekto iný na mojom počítači Môžete sa pozrieť na tento súbor. Ja ani neviem, čo to - čo to robiť? JOSEPH: Nie som si úplne istý, naozaj. ROB: No nápad. JOSEPH: Ale ak neviete, že je užitočné príkaz, ktorý môžete použiť aby tí, čo výstup znamená. A ak ste typ človeka pred príkazom - takže M-A-N. ROB: Man. Takže človek je ešte jeden to je veľmi užitočné. A človek, ls. Takže manuálové stránky, ktoré majú obe príkazy, ktoré budete používať na príkazovom riadku, a majú tiež funkcie, ktoré budú relevantné s C. Takže si môže človek - a ja som ignoroval 3. Ale človek 3 printf sa chystá priviesť až C verzie printf. Ale keď som si to človek printf, to je ísť na vyvolanie príkazu printf čo sa deje na príkazovom riadku. Takže človek, ls. Manuálové stránky môže byť docela ohromujúci. Tu, keď uvidíte tento zápis všetkých týchto príznakov, ktoré ls chápe. Takže ak pôjdeme do pomlčka, l, a - Idem hodiť to na vás. Ale ak chcete hľadať, chcete- prvý narazí na otázku Značka alebo tlačidlo lomítko. Tak lomítko. A potom môžem hľadať na čo chcem. Tak idem na lomítko na prístrojovú, l A bolo to. Takže použiť dlhý formát výpisu. To nepomôže mi prísť na to, čo že konkrétny stĺpec znamená, ale ja Predpokladám, niekde tu to by vysvetľovalo, že. Takže používať manuálové stránky pre všetky príkazu že nemusíte hneď pochopiť. Som si istá, že je to možné, aj človek, človek. Rozhranie na on-line referenčné príručky. Jo, ešte jedna posledná, že je to možno trochu je relevantný ls, pomlčka,. Takže výpovednej lehoty, ak som to ls, Ja si týchto päť súborov. Ak sa mi ls, pomlčka,, Aj získať oveľa viac súborov. Takže spoločnú vec medzi všetkými týmito Nové súbory je bodka dopredu. Takže konvencie je, že súbor, ktorý začína sa bodka skryté. Takže nechcete vidieť, že súbor, Nechcem, aby sa to bordel s Váš výpis adresára. Je to len vtedy, keď výslovne požiadať, v poriadku, ls, pomlčka,, ukáž mi. Platí pre všetky súbory, vrátane skrytých ty. Takže niektoré ďalšie príkazy. Oh, otázky na tomto mieste? Áno. SPEAKER 3: Keď to urobíte ls, , Čo je bodka, bodka? ROB: Oh. Tak toto je to, čo som hovoril. Je to to isté, kde Môžem ako sú CD, bodka, bodka. Takže technicky, bodka a bodka, bodka sa súbory, ktoré existujú v každý adresár, kde je súbor bodka označuje do aktuálneho adresára. Takže keď som cd, bodka, ja som jednoducho ísť zostať v adresári. A bodka, bodka vždy sa odkazuje na predchádzajúci adresár o úroveň vyššie. Takže keď som sa ísť do protokolov a LS, pomlčka, al, Uvidím, bodka, bodka. cd do dot, dot ma privádza do predchádzajúceho adresára. Jo. OK. Takže ďalší dosť dôležité príkaz rm. Tak to je to, čo budeme použiť na odstránenie. A dovoľte mi, aby som vlastne robiť ďalšie príkaz prvý. Tak mkdir. Mkdir je to, ako môžete vytvárať adresáre. A ja vám vytvoriť dočasný adresár a choďte do tohto dočasného adresára. A ako sa očakávalo, je prázdny. Ale ak ls Aj, pomlčka,, Stále mám bodku a bodka, bodka, bodka, pretože odkazuje na aktuálny adresár. A bodka, bodka označuje predchádzajúci adresár. A tie budú vždy existovať bez ohľadu na adresár, kde sa nachádzate A to je úplne zbytočné príkaz, ale dotyk. Len som ju používať, pretože je to jednoduchý spôsob, ako vytvárať súbory. Takže dotyk, dotyk b, stlačte c je len bude vytvoriť tri súbory s názvom, b, c, že ​​sú úplne prázdne. Takže miesto ma vytvárať tie Prvé miesto je tak, že RM je ako ich môžeme odstrániť. Takže rm,. Bude to a opýtajte sa ma, odstráňte pravidelné prázdny súbor? A potom poviem áno. Takže keď som si istý, že chcem, aby zmazať tento súbor, bez toho aby museli byť vyzvanie vyberte pravidelné prázdny súbor?, potom rm, pomlčka, f bude príznak, ktorý hovorí, núti odstrániť bez ma ani výzvy, oh, si Naozaj chcete zmazať súbor? Áno, som si istý. Takže rm, pomlčka, fb bude len to bez pýtania. Takže poďme urobiť nejaké ďalšie adresáre. mkdir, tmp2, cd, tmp2, dotknúť, dotykové b OK. Takže teraz chcem odstrániť tmp2 ako adresár. Takže rm tmp2. Nemôžete odstrániť tmp2, je adresár. Takže otázka je, že rm nie je okamžite pracovať na adresára. Je určený len pre súbory, ako sú Súbory non-adresára. A tak to, čo môžeme urobiť Tu je rm, pomlčka, r. To znamená rekurzívne, ktoré by mohli neznamená nič pre vás ešte. Ale keď sa dostanete do rekurzia, to bude znamenať viac. Takže rm, pomlčka, r, tmp2 sa chystá rekurzívne ísť do tohto adresára. Takže zostúpiť do adresára tmp2? Áno, poďme do toho. Chceme odstrániť tmp2 /? Áno. Chceme odstrániť tmp2 / b? Áno. Teraz chceme odstrániť adresár tmp2? Áno. A tak teraz adresár a všetko vo vnútri z toho odstránil. Tam je technicky príkaz rmdir ktoré môžete použiť na odstránenie adresárov, ale to funguje iba na prázdnych adresárov rovnako. A vidieť, že, povedzme, urobiť znovu mkdir, tmp2. Tmp2, dotknúť. OK. Takže keď sa snažím odstrániť dirtmp2, bude to povedať, adresár nie je prázdny. Takže som skoro nikdy nepoužívajte odstrániť Príkaz dir tak ako tak, pretože rm, pomlčka, r bude pracovať na prázdnych adresárov a non-prázdne adresáre. A tiež, či nechcem mať na prejsť, že celý proces zostupne do adresára a vybratie každého jednotlivého súboru, rm, pomlčka, rf, tmp2. A teraz je to preč. Niečo, čo dávať pozor o je rm, pomlčka, rf. A to ma desí ešte zadajte ho, pretože keď som omylom stlačte klávesu Enter, alebo tak niečo. Takže rm, pomlčka, rf, vlnovka by bez toho, aby mňa výzva, f nevyzve mi, bude to automaticky odstrániť celý môj domovský adresár a všetko v ňom. Takže si môže myslieť, že je to hlúposť. A dobre, že je. Ale to sa môže stať veľmi ľahko nehoda-li, povedzme, chcel som sa odstrániť môj slash, vhost adresár. A práve v rýchlom písaní, Omylom som to urobiť. To bude odstrániť rekurzívne aj my domovský adresár a adresár vhost v tomto konkrétnom adresári, ktorý práve stane sa to práve teraz neexistuje. Ale to by ešte odstrániť celý môj domovský adresár. Aspoň tým, že má f, to by ma prvú výzvu. A ja by som bol rád, oh, nie, ja Nechcem to urobiť. Ale ľudia, lomítko, vrátane ma majú tendenciu dostať sa do zvyk vždy rf-Ing. Dokonca aj pravidelné súbory, ktoré môžem len RM, c, mám tendenciu len rm, pomlčka, rf, c Len si dajte pozor, keď ste rf-ing. SPEAKER 4: Čo je C robiť? ROB: C je Hovorím o tomto súbore C v tomto adresári, ktorý rm, c JOSEPH: A viac nebezpečne, ak používate hviezda, to sa odkazuje na všetko v adresár. Takže to, čo som zvyčajne majú tendenciu robiť je, že bude ísť do adresára a ja chcem, aby odstrániť všetky súbory tam. Takže rm, pomlčka, rf, hviezda. ROB: Jo. Rm, pomlčka, rf, hviezda. JOSEPH: A ak si nie ste opatrní čo adresár ste v - Nebol som v temp, ale bol som náhodou v mojom domovskom adresári, potom budem odstrániť všetko v mojom domovskom adresári. A ja som vlastne urobil predtým, a Myslím, že ste to urobil predtým alebo Jay urobil skôr. ROB: Ja som omylom odstránený - tak ignorovať, že príkaz na chvíľu. JOSEPH: Nie je legrace. ROB: Takže v adresári bin lomítkom je banda binárnych súborov, kde bude byť dobre známa ako kovový zvuk. No, zvoniť a v podstate všetci z nich veci, ktoré som beží na príkaz linka je v tomto lomítko adresári bin. JOSEPH: Rovnako ako ls, je tu. ROB: Tak bodka, lomítko, ls by zoznam tohto adresára. JOSEPH: Rm je tiež v tomto adresári. ROB: Omylom som rm, rf-ed bin, ktorý odstráni ľubovoľný príkaz, čo som mohol možno niekedy chcieť. Čo potom som preinštalovať nové spotrebiče v tomto bode. JOSEPH: Takže buďte veľmi opatrní pri môžete použiť tento príkaz. DIVÁKOV: [nepočuteľné]? ROB: Áno. To je tiež zlý zvyk sa dostať do. Ak si všimnete, že som teraz - dobre, môžete si to nevšimol, ale môj zoom-in možno môže. Takže som teraz root @ spotrebiča. Takže jharvard je užívateľ chceme aby ste sa vždy používať. Root je užívateľ, ktorý má oprávnenie robiť absolútne nič. Takže všimnete, keď som jharvard, keď sa pokúsim cd - čo je adresár, ktorý? Oh, koreň je dobrý príklad. Takže cd, koreň. Permission denied. Vzhľadom k tomu, ak sa pozrieme na tomto zozname - a znova, nemusíte sa úplne pochopiť. Ale tieto tri pomlčky hovoria ktoré nenechajte akýkoľvek iný užívateľ do tohto adresára. A adresár sa stane byť vlastnený užívateľom root. Takže fakt, že som jharvard a nie Ten, kto nie je koreň je povolené do tento adresár, to znamená, že som chystá sa poprieť, povolenie, keď som sa snaží cd do neho. Takže keď som koreň, mám oprávnenie k robiť úplne čokoľvek, vrátane vymazať dôležité súbory k prístroju a zničiť celú vec. Tak to je zlý zvyk sa dostať do len putovanie okolo operačného systému ako root. Robím to tak ako tak. Otázky? A ja ukončiť koreň, zostať ako jharvard. OK. Viac príslušné príkazy. Takže ísť späť do nášho temp, mv príkaz je skratka pre pohyb. Môžete sa pohybovať. Teraz chceme hovoriť b, tak teraz sa to volá b Alebo snáď chceme presunúť b do jedného adresára. Takže teraz prázdny tomto adresári je. Vrátim sa do svojho domovského adresára, a vidíme, že b je tu, pretože domovský adresár bol o úroveň vyššie od adresár, ktorý b bolo palcov K dispozícii je tiež cp. Takže cp je kopírovať výborný časť, bodka, textu. Môžem hovoriť to, bodka, textu. Teraz máme obaja výborný časť, bodka, textu a je, bodka, textu. To tiež pracuje na adresára. RF-ED som jeden súbor. Takže cp - dobre, prvý skúsme CP tmp, tmp2. Takže vynechanie adresára tmp. Takže podobne ako rm, predvolené správanie je to pracovať v adresároch. A opäť, podobne ako rm, predvolené správanie - dobre, ako to funguje s adresárov je, pomlčka-r preč. Takže kopírovať rekurzívne temp adresár do tmp2. A tak teraz máme obaja tmp a tmp2, a to nie je tak užitočné, pretože tmp bola v prvom rade prázdne. Tmp2. Teraz poďme kopírovať tmp do tmp2. A vidíme, že tmp2 má tiež súbor , Pretože adresár a všetko vo vnútri, ktoré Adresár bol skopírovaný. A to môže byť trochu užitočné ak, povedzme, že pracujete o probléme nastaviť jednu - alebo skutočnosti, neskôr problém sady ešte dôležitejšie, pretože tam bude celá partia súborov a vecí. Ale len chcete, na zlomok Druhá, že si rád, v poriadku, ja som ísť skúsiť niečo iné. Dovoľte mi stačí skopírovať celý môj pset1 adresár do zálohy pset1 tak, že ak Aj skončí skrutkovanie veci do poriadku, môžem vrátiť sa do svojho záložného adresára. Existuje vhodnejšie spôsoby verzií zálohovanie kód, ale to je vždy rýchly spôsob, ako len sa uistite, že máte kópiu niečoho že sa chystáte zmeniť. Takže echo je tiež príkaz one-off, ktoré druh sillily bude len tlačiť príkazový riadok presne to, čo čo ste chceli echo. Tak echo ahoj. Budeme len vytlačiť hi. Echo hello world. Budeme tlačiť ahoj svet. Ktorý prichádza do užívania, ak kto kombinuje príkazy. A opäť, nečakajte, že vám úplne pochopiť to ešte, ale je to niečo vidieť. A potom, ak ste Googling príklady alebo si uvedomíte, že chcete robiť niečo, to môže byť užitočné. Tak poďme, ako napríklad takže ls, pomlčka, l Takže tu vidím výstup LS, pomlčka, l A ja hovorím, OK, chcem, aby uložiť, že do súboru. Všetky tohto výstupu tu, chcem dať do samostatného súboru. Takže to trochu väčšie ako symbol je to, čo budeme hovoriť. Sme presmerovanie výstup do súboru. Hovorme súbor bla, pretože to je čo mám tendenciu vždy hovoriť. Takže teraz vidíme, máme súbor bla tu. A keď som ho otvoríte, tak vidím, že je to presne výstup z príkazu že som bežal. A podobne, môžete - či je to výstup do súboru, tento je získať vstup zo súboru. Čo je to príkaz, ktorý som - JOSEPH: Myslím, že môžete použiť viac či menej, pravdepodobne. ROB: Ale ako sa len o menej bla? Neviem. Ak prídete do tohto scenára, rovnako ako tam je psets, že je to užitočné pre. JOSEPH: Môžete potrubia do echo. Pipe súbor do echo ju vidieť. ROB: Je to potrubie. JOSEPH: Je mi ľúto. ROB: Dobre. Tak toto je výstup do súboru. To je získať text zo súboru a odovzdať ju do programu. A budete tiež vidieť toho chlapa. Takže je to trochu robí oboje naraz. A vlastne, budem predstaviť dva nové Príkazy len využiť toho. História je šikovný príkaz, ktorý je práve ísť vytlačiť výpis niečo, čo som kedy spustiť príkazový riadok. Takže tu vidíme všetko, čo mám beží celú túto dobu. Veľa ls rokov. A ďalší užitočný príkaz grep, že jeho účelom je vyhľadávať cez text, hľadá vzory, dobre, hľadá čokoľvek, čo Chcem, aby to vyzeralo na. A tak šikovný použitie tu je, povedzme chceme chytiť históriu. A chcem sa pozrieť na príkazy kde som - čo je to užitočné kto hľadať? JOSEPH: [nepočuteľné]? ROB: Alebo poďme sa len pozrieť na všetky dotýka, z akéhokoľvek dôvodu. Takže to je to, čo to bude vyzerať. A nemusíte sa úplne pochopiť, že. Ale myšlienka je tu, história dáva Rovnaký výkon je tu urobil kde je to tlač z celej História všetkého, čo som kedy bežať. My sme potom mimochodom, že - takže namiesto toho, aby ho vytlačiť na obrazovku, chceme prejsť, že na Príkaz grep, ktorý hľadá všetky inštancie slová dotyk. A tak pomocou tejto kombinácie Histórie a grep nástrojov, vidím, OK, tu je všetky príkazy som kedy beh, a tu je to trochu obyčajný. Sme na dne. A to mi tiež dáva príkaz Len som bežal, aby mal Slovo dotyk v nej. Ale potrubie je celkom užitočná vec pre kombináciu viacerých programov. A skutočne, je to skratka pre prenájmu me výstup histórie do súboru bla, a dovoľte mi, aby som grep pomocou súboru bla ako to, čo chcem, aby sa pozreli na. Takže rúrka je len skratka pre tieto dva príkazy. Áno. SPEAKER 4: [nepočuteľné]? ROB: Áno. Čo je to - Oh. Poďme otestovať. Takže mačka, pes, ryba. Takže chcem grep. Dash, r, znovu, bude rekurzívne, takže chcem, aby zostúpil dole všetky adresáre. Chcem sa rekurzívne grep pre všetkých - a dovoľte mi, aby som dočasne dostať to z cesty. Ignorovať ma. OK. Takže chcem, aby dočasne grep pre všetky inštancie slová rýb. A tak tu to, čo robím, je grep rekurzívne pre slovo ryby. A hviezda znamená, že cez všetky tieto Súbory v tomto adresári. A tak mi to dal oprávnenie odmietnutý, pretože to nie je dovolené, aby čítal, že konkrétny súbor. Ale to našiel ryby v súbore, skúška. Mohol by som tiež povedať, konkrétne, len som chcem sa pozrieť do súboru bla, v takom prípade to nebude nič nájsť. Chcem sa pozrieť do súboru, skúška. To sa nájsť ryby. To je celkom užitočné príkaz poznať všeobecne. Tam sú niektoré alternatívy k grep , Ktoré majú byť programátor priateľský, ale mám tendenciu sa ešte oprieť o grep. Otázky? OK. Existujú ďalšie príkazy? Oh. Len jeden-off ten, ktorý som vždy tu bude legrace je kalibru. Takže všimnete, keď som v tejto krásnej Režim celej obrazovky, nemám ako vrchol paneli nástrojov alebo tak niečo. Takže cal len mi dáva peknú Kalendár je to pravda Teraz odrezať, predpokladám. Ale pekný malý príkaz. JOSEPH: Je [nepočuteľný]. Ďalšie príkazy, ktoré by mohli mať Videl patrí rinčanie a robiť. Pôjdeme po nich viac detailov neskôr. Ale ak ste pracovali na pset, mali by ste byť oboznámení s tými. ROB: Dobre. Otázky na príkazovom riadku, čo? Dobrá. Takže poďme sa presunúť na niektoré C-súvisiace veci. Premenné matematika. OK. Takže rovnako ako sme mali matematiku vo Scratch, môžete tiež použiť matematiku v C. Než sa dostaneme k tomu úplne, tak premenné. Pamätajte si, že vždy, keď vyhlasujú, premenné ako int x, alebo float y, vás musí ho zadať pred názov premennej. Takže typy sme videli doteraz sú int, float, double, long long, ktorý som vlastne neviem, či máme vidieť, že tak ďaleko. Tam sú niektoré tie ostatné. Sme vidieť char. K dispozícii je krátka, čo je ako by to Opakom long long, kde je to menšie ako celé číslo. Videli sme tiež reťazec. Takže to, čo je zvláštne na povrázku? Prečo by som povedal, že je to nie tak celkom ako int? SPEAKER 4: Je to v skutočnosti neexistuje. ROB: Jo. Takže jediný dôvod, prečo máme reťazec Je tomu tak preto, keď robíte hash, sú cs50.h. A uvidíme príklady neskôr - oh, že nespracováva, že dobre - kde je cs50.h niečo robiť pozdĺž radov typu def, char hviezda, reťazec. A tak, že hovorí, že nemáme ani Vieš, čo char hviezda je ešte. Ale to sa hovorí, chceme reťazec. Akékoľvek miesto, ktoré ste používali reťazec, môžete by boli pomocou char hviezda, , Ktorý je v skutočnosti, že typ existuje v jazyku C. Ale k tomu sa dostaneme. Jo, a ide naspäť. Neat. Takže to isté s bool kde true a false. To nie je naozaj vstavaný typ v jazyku C. Namiesto toho, to je jednoducho, to má Nulová hodnota? Potom budeme len za to, že je falošný. Má to hodnotu - dobre, to má každá hodnota, ktorá nie je nula? Potom budeme uvažovať, že je to pravda. Takže jeden je pravda, dva je pravda, niečo nenulové, je pravda. Takže to sú tie. Otázky týkajúce sa deklarovaní premenných a typy premenných a všetko, čo? Jo. SPEAKER 4: Pre long long, v knihe, to hovoril, že to muselo byť long long int. Ale len na tak dlho dlho fungovať? ROB: Takže tieto modifikátory typu. Tak int x. Takže môžeme povedať, unsigned int x. Dá sa povedať, krátky int x. Dá sa povedať, long long int x. Ale skoro žiadne z tých vecí, ktoré som práve povedal, unsigned int, short int, long long int, môžete zbaviť int, a to bude len predpokladať, že ste mal na mysli int. Tak nepodpísané x, čo jednoducho znamená - Viete, ako normálne s int, môžete povedať, x sa rovná negatívna 3? S unsigned int, to nemôžeš. JOSEPH: A ešte raz, pre kameru, Otázkou bolo, aký je rozdiel medzi long long int a len long long? ROB: Jo. Tak som sa skoro nikdy napísať dlhé dlhé int. Budem písať long long. JOSEPH: Nejaké otázky? ROB: OK. Tak hlúpa pripomienka, že to, ako deklarujeme premennú a inicializovať premenné a deklarovať ďalšie premenné a inicializovať to všetko v jednom kroku. Takže deklarácie premenné a premenná inicializácia nemajú sa ale môže byť na rovnakom riadku. Takže máme štandardné operátormi matematické ktoré ste zvyknutí - plus, mínus, delenie, časy. K dispozícii je tiež modulo, čo uvidíme. Nie je, aspoň v C, vstavaný zdroj umocňovanie operátor strieška. No, tam je operátor strieška, ale to nie je moc. JOSEPH: Ale to nie je umocňovanie, Áno. ROB: Nepoužívajte strieška predpokladať, že to znamená, že ako otesaný, alebo čokoľvek iného. Takže niektoré veci by ste mali mať na nevadí o rozdelení. Ja budem stáť. Tak vyhlásil initialize odpoveď. Takže hovoríme float odpoveď sa rovná 1 delené 10. Vytlačiť odpoveď na dve desatinné miesta. A to je jedna z tých vecí, ktoré som by človek printf prísť na to, že Čo to sakra má%, bodka, 2f znamená? A to práve znamená, dobre, ignorovanie 0.2. A%, f je to, čo používame tlačiť plávať. 0.2 hovorí, že tlač plávať na dve desatinné miesta. Takže tento program má chybu, a tie by mohli videli predtým v niektorých Pred CS kurz. Ale čo je to chyba? SPEAKER 5: Zero. ROB: Jo. Takže keď hovoríme, odpoveď sa rovná 1 delené 10, chceme odpovedať na 0,1. Ale 1 delené 10, 1 je celé číslo, 10 je celé číslo. A tak, keď budeme robiť celé číslo delené číslo, budeme sa dostať späť celé číslo. So 1 delené 10 je 0,1. Vzhľadom k tomu, že je potrebné, aby nám dal číslo, to len tak zahodiť, že desatinné miesto, a tvrdia, že Odpoveď je 0. A tak, keď tlačíme odpoveď tu, to bude tlačiť 0.00. JOSEPH: A len ako poznámku, že v skutočnosti odhodí, čo je po desatinná čiarka. Takže ak ste namiesto toho mal 6 delené 10, si možno myslíte, že by vám 0.6 a potom by ste zaokrúhliť nahor na 1. Ale v skutočnosti to, čo sa stane, keď to typ úlohy, to je to, že to, čo je kvapky za desatinnou čiarkou. Takže 0.6 sa stanú 0. ROB: Jo. A budeme hovoriť skráti za to. Takže zakaždým, keď pretypovať na int, desatinná skrátený. Takže oprava, ktorá - je tu vlastne dva. A ja budem robiť to druhé, pretože toto je oveľa jednoduchšie opraviť. Takže jedna oprava je použiť plaváky v divízii. A naozaj, máte len aby jeden z nich float. Ale je to trochu jasnejšie len aby oba plaváky. Tak 1,0 delené 10,0 je delenie dvoma plaváky. Takže odpoveď bude skončiť float, a tak budete správne vytlačiť 0.10 tu. Niečo, čo nefunguje tak dobre o, že je dobre, iste, to bolo jednoduché tak previesť 1 až plávať tým, že 1.0. Ale čo keď namiesto toho sme mali dve celé čísla ako int x sa rovná 1 a int y sa rovná 10, a potom sme chceli Ak chcete x delené y? Takže to nie je ľahké len robiť X.0, alebo tak niečo. Takže oprava, ktorá je casting. Takže liatie je spôsob, ako v C previesť z jednej premennej typu na iný. Tak tu, 1 je celé číslo. A tým, že tento plavák pred že sme obsadení 1 až plaváku. A tak to bude prevádzať 1 do 1,0. A to bude prevádzať 10 na 10,0. A potom, čo sa správajú podobne ako Predchádzajúce verzie sa len ukázalo, kde, ako sa očakávalo, dostaneme 0,10 a to bude tlačiť to. A môžeme to urobiť s premenné, taky. Takže môžeme povedať, float x delené float y. JOSEPH: Nejaké otázky? ROB: Takže, rovnako ako v bežnom matematike, máme operátor prednosť. Takže matiku, máte väčšiu pravdepodobnosť hovoriť poradí operácií. Tu je oficiálny termín je operátor prednosť. Ale operátor prednosť, alebo väčšina operátori, je, ako by sa dalo očakávať. Takže rovnako ako v matematike, 2 krát 10 je bude zoskupené bližšie ako Tento 10 deleno 2 a potom 2. Poradie operácií, bude to robiť 2 časy 10, 10 deleno 2, a potom to bude robiť 20 plus 5 plus 2. Takže je to, ako sa očakávalo, a môžete použiť zátvorky pre zoskupenie výrazov. Nemožno použiť hranaté zátvorky do skupiny výrazov. Jo? SPEAKER 5: Mohli by ste vlastne stačí prejsť späť o jednu chvíľku? Môžete obsadiť int na reťazec? ROB: Tak v C, môžete obsadiť čokoľvek Ak chcete čokoľvek chcete. To neznamená, že je to dobrá vec. Takže, keď cast int na reťazec, to znamená, že - a my sa do toho oveľa hlbšie - JOSEPH: Oveľa neskôr. ROB: Nechcel som povedať oveľa neskôr, tak som sa snažil zmeniť svoj trest. Dostaneme sa do neho oveľa dôkladnejšie neskôr, kedy naozaj, keď máte Reťazec premenné - takže reťazec môže byť ľubovoľne dlho, že jo? A my sme hovorili, že int je štyri byty a dlhé dlhé osem bajtov a plavák je štyri bajty. Takže reťazec, rovnako ako int, má len určitý počet bajtov k nej. A to bude štyri bajty. Ale reťazec môže byť docela ľubovoľne dlho, že jo? Tak ahoj svet už, či je to 10 znaky alebo čokoľvek, je to už bude v priebehu 4 bajty Aj vojde do reťazca. A tak, ako struny naozaj funguje, je, že ak sú v pamäti, že reťazec je zachovaná. A tak sa sem, keď poviem, že reťazec x rovná Hello World, vnútorný x je Len hovorím, oh, ahoj svet je uložený v tomto konkrétnom mieste v pamäti. Takže keď sa budeme snažiť obsadiť celé číslo k reťazec, potom sa snažíme interpretovať nejaký náhodný časť pamäte ako reťazec. A to takmer vždy zlomí veci. JOSEPH: Ale či to zamieňaný vy, budeme sa ho pokrývajúci viac do hĺbky neskôr. ROB: Jo. To je miesto, kde budete dostať sa do ukazovateľov. A to je významný kus dvoch týždňov tohto kurzu. SPEAKER 6: Má to fungovať ako objekty v iných jazykoch, alebo ani nie? ROB: Takže v iných jazykoch, objekty budú reprezentovať pomocou ukazovateľov. Nie je to to isté, hoci. Akékoľvek myšlienky? JOSEPH: Nie Žiadne myšlienky. ROB: OK. JOSEPH: Ďalšie. ROB: Len choď s tým. Dobrá. Tak modulo. Rovnako ako máme plus, mínus, deliť a násobiť. Takže modulo je ten, ktorý môže byť Niet nevideli. A to len hovorí, dať ja zvyšok. Takže 55% 10. Zvyšok robí 55 rozdelená od 10 by 5. Takže 55% 10 je 5. A 3% 5 bude 3. 8% 8 bude 0. 16% 15 bude 1. JOSEPH: Jedna vec na vedomie s tým, Tiež je to nemusí fungovať podľa očakávania Ak používate záporné číslo. Takže negatívne 5% 4, niektorí ľudia Možno si myslíte, že je - čo by si myslíte, že negatívne 5% 4 bude? SPEAKER 5: One. JOSEPH: Takže niektorí ľudia hovoria jedno, Niektorí ľudia hovoria, že negatívne jednu. Ale čo - ROB: Ja by som ani povedal jeden z nich. JOSEPH: dva, je mi ľúto. Niektorí ľudia hovoria - ROB: Three. JOSEPH: Tri? ROB: Negatívne - čo bolo - negatívne päť - JOSEPH: Tri, tri, tri. Prepáčte. Vzhľadom k tomu, modulo, zvyčajne, keď ste videl inde, zvyčajne to znamená, vracia kladné číslo, že jo? ROB: Takže keď hovoríme v matematike,% 10 je, majú tendenciu chcieť, aby vám - ak budeme mod do 10., potom očakávame, že získať číslo medzi 0 a 9. Vo tu, že nie je pravda, že ste Získate záporné čísla sa vrátil. JOSEPH: Tak negatívne 5% 4 by bol negatívny 1. ROB: Ale to je zriedkavé, že si mod-ing záporné čísla sa začínajú. Preskočiť. JOSEPH: Jo. ROB: Meh. OK. Takže posledná vec poukázať na to, o plaváky je, že je to nebezpečné správanie, ale plaváky nie sú presné zastúpenie. Takže ísť späť do bajtov znova, nezabudnite že int je vždy štyri byty a plavák je vždy štyri bajty. Takže Lucasova príkladom je celkom dobrý. Takže myslíte, že z 1 delené 3. Tak 0,3333333. Ak mám len 32 bitov, ako môže Aj uložiť 0,33333 presne? A možno, z akéhokoľvek dôvodu, hovoríte, v poriadku, no, povedzme, že že tento konkrétny 1011001, poďme len povedať, že by mal byť 0,333333. No, máte len konečný počet tie bity, takže je nemožné, aby predstavujú každý s plávajúcou desatinnou čiarkou vzhľadom k len 32 bitov hodnoty. No, to je nemožné reprezentovať niektorý plávajúce bodová hodnota daná nekonečná - dobre, vzhľadom k tomu akýkoľvek konečný počet bitov. Takže otázkou je, dobre, keď sme použili tlačiť na dve desatinné miesta, sme správne dostať odpoveď 0.10. Ale pod kapotou, je to naozaj sú uložené tak blízko, ako je to možné, aby 0.10 ako tie kúsky môžu predstavovať. Je to na ďalšiu snímku? Alebo nie? JOSEPH: Jo, je to tak. ROB: Blegh, blegh. JOSEPH: Jo, je to možné len vytiahnuť poznámky sa trochu. ROB: Idem pre zväčšenie v na posledný na to. Ach môj bože, to je [nepočuteľný]. Takže číslo. To je to, čo sa bude tlačiť ak sme sa spustiť tento program. A všimnite si, že to nie je naozaj veľký problém ak budeme len starať o ako dve až tri desatinné miesta. Rovnako ako my len pôvodne tlačený 0,10, a to je dôvod, prečo sme nevideli nič zlé. Ale akonáhle začneme dostať do presný, presný počet, že je to predstavuje, vidíme, že to tak nie je presne predstavujú 0,1. A časť problému je tu ako, v poriadku, to je v poriadku, ale, no, Prvé, čo keď sme sa snažili robiť, Odpoveď rovná sa rovná 0,1? Je to ísť vrátiť true alebo false? A tak to je ťažké povedať. Myslím, že to vlastne môže vrátiť true. Bude to prvý - Neviem. Odpoveď je, akonáhle začnete zaoberať s plávajúcou desatinnou čiarkou hodnoty, ste celkom e by sa nemala používať rovnosť kvôli tejto nepresnosti. A za všetko, čo viem, je to stý desatinné miesto, s plávajúcou desatinnou čiarkou nebol schopný správne spracovať. A tak rovnosť bude len zlyhať aj hoci číslo - ak bolo pomocou presných čísel, by čísla boli presne rovnaké. Je to v priebehu asi 50 výpočty pomocou týchto plávajúce bodové hodnoty, chyba môže stavať a vyššie a vyššie, a veci proste niečo pokaziť. JOSEPH: A tam boli naozaj slávne príklady tohto deja. Rovnako ako inžinieri NASA sa dostali tento zlé, spôsobuje rakety vybuchnúť v vzduchu potom, čo bola zahájená. A veľa otázok, ako je to. Tak jo. SPEAKER 6: Keď sa povie 0,3 f, to skrátiť zvyšok? Alebo to zaokrúhliť smerom nahor alebo nadol? ROB: Bude printf okolo neho? JOSEPH: Myslím, že printf skráti. ROB: OK. Takže môžeme podobne ísť v opačnom smer Tu, v tomto prípade, Najbližšie to mohlo predstavovať 0.1 bol s týmto číslom. Najbližšie to by mohol byť schopný predstavujú 0,2 je v protiklade smer,, 199999996356 alebo tak niečo. Takže keď sme išli v tomto smere veci, potom printf 0,3 f sa vráti 1,99 namiesto 2,00. JOSEPH: A ja nie som úplne istí, na ktoré. Možno budete chcieť napísať malé, malé Program len skontrolovať, že. ROB: Aj keď to, čo sme si istí, že ak ste sa pokúsili obsadiť, ktoré sa int, a liatie na int bude spôsobí, že sa skrátiť desatinu, ak pokuse o obsadenie 1.9999999 na int, dostanete 1. A tak by ste mali obvykle použiť kolo funkcie v matematickej knižnici. Otázky? OK. JOSEPH: Tak pohybujúce sa na podmienkach a logické výrazy. Takže ste videl tie. A skutočne, dovoľte mi, aby som sa uistil, môj Počítač je v správnom formáte tu. Space. Je nám ľúto, budeme musieť vysporiadať trochu s cut-off na okrajoch. Ale jo, vy ste videli predtým v roku Scratch. Tak toto tu je výrazom , Ktorý sa používa v podmienený príkaz. Takže odpoveď väčšie ako nula ti true alebo false. A to je veľmi dôležité, pretože ktoré nám umožňujú predstaviť logika do nášho kódu. Tak napríklad, to je program, písaný v Scratch, ktorý požiada užívateľa pre celé číslo a povie im, nech číslo, ktoré vám dal bola kladné alebo záporné číslo. A konverzia sem vidieť, je najprv vytlačiť vyhlásenie, daj mi číslo. A potom sa ich spýtate na celé číslo. A potom použiť podmienené logiky nad tu overiť, či toto číslo bol v skutočnosti väčší ako nula, alebo nie. Takže tu máme logický výraz vnútri podmienené If. Je tam nejaké otázky? Existujú nejaké otázky o tom? OK. Takže tam je viac, než len väčšie ako, samozrejme. Môžete vytvoriť logických výrazov pomocou väčšiny druhov vecí, ktoré by si myslel, ze v matematike. Tak väčšia ako. To by malo byť menšie ako. Prepáčte. A odstup. ROB: Bože chráň ju opustiť. JOSEPH: Dobre. Takže väčšie ako, menšie ako, väčšie alebo rovné, menšie alebo rovné. Používame dvojité rovná pre kontrolu rovnosť, pretože jeden sa rovná prostriedky úloha, že jo? Áno. A potom môžeme tiež nemajú rovná podľa pomocou výkričník, rovná. A tento symbol výkričník môže tiež byť rozšírená tak, aby v prípade, že chcete k obráteniu nejaký druh Boolean výraz, môžete to urobiť. Takže to bude hodnotiť na hodnotu true iba v prípade, že odpoveď je menej než alebo sa rovná nule. Akékoľvek otázky na to? OK. Takže si môžete tiež kombinovať tieto Výrazy používajúce logické A a logické Or. Takže je to len symbol A, ktorý by mal byť posun, 7.. A to je symbol rúrka, ktorá je nie je malá písmena L. Je to jedna To je priamo nad klávesou Enter. Takže môžete použiť dva z nich symbolizuje logické a logické Or. Takže to bude vracať hodnotu true iba vtedy, ak odpoveď je jeden, dva, tri, alebo štyri. A to vráti hodnotu true iba vtedy, ak odpoveď Okrem toho je na oboch stranách. Takže to nie je jeden, dva, tri, alebo štyri. A ako by ste použiť že vo výraze - ROB: Alebo nula alebo päť. JOSEPH: Zero alebo päť. Prepáčte. Áno, áno, áno. OK. A tu teraz, rovnakým spôsobom, by sa použiť ten výraz, menšie Výraz strana Ak podmienené vyhlásenie, mali by ste tiež použiť Rovnakým spôsobom by len uvedenie vnútri zátvorkách u príkazu If. Takže to printf bude len oheň, ak odpoveď je jeden, dva, tri, alebo štyri. Akékoľvek otázky týkajúce sa kombinuje výrazy? Takže je tu ďalší podmienené konštrukt hovoríme if / else. Takže v podstate, to teraz znamená, OK, Ak niečo, čo som chcel skontrolovať nebol pravda, potom ísť do iného a vykonávať túto inú akciu. Takže v tomto konkrétnom prípade, spýtal som sa užívateľ na celé číslo. Je celé číslo väčšie ako nula? Áno? No, potom sa zdvihol kladné číslo. Ak nie, potom to musí mať bol negatívny, alebo nula. Takže ste si vybral záporné číslo alebo nula v tomto prípade. Áno. Alebo nula. A potom tu máme tiež if / else, If a else. Tak to nám umožňuje vykonať postupnosť veci, iba v prípade, že ako prvá sa zlyhá. Takže v tomto prípade, teraz robíme posledný si vyberiete nulu. Takže ak sa ani vybral pozitívne, ani záporné číslo, potom sa musí si vybral nulu. Tak to proste chodí dole reťaz takto. Takže príklad toho, ako Ak sa líši od - if / else sa líši od len sled stability. A to je častá otázka, ktorá ľudia pýtajú sa, no, ak sa dostanete ako 95, CS50, čo bude tento Program vám povie? SPEAKER 5: Dostal si A. JOSEPH: Áno. Máš každý jeden z nich priamo. Máš jedničku, máš B, budete dostal C a D, že jo? Takže všetci z nich sa hodnotí v poradí. Takže zatiaľ čo 95 je väčší ako 90, je to Tiež väčšie než 80, je to tiež väčšie ako 70, a to tiež vyšší ako 60 rokov. Takže máš všetky tie stupňov. A predpokladám, že by ste iba chcete A. Spôsob, ako opraviť, že je nahradiť tie s Else / li 's Takže v tomto prípade, že vidí, že 95 je väčší ako 90 °, a potom to robí nehodnotí ostatné z výkazov. Akékoľvek otázky týkajúce sa, že? Takže je tu ďalší podmienené druh štruktúra, ktorá sa tu, ktoré sa volanie príkazu switch. Tak to umožňuje v podstate kontrolovať čo je hodnota čísla, ktoré dal do príkazu switch je. Takže v tomto prípade, sme prepínanie na n, a hovoríme, oh, ak n je jeden, potom vytlačte toto vyhlásenie. A potom zlomiť, čo znamená, že výstup z príkazu switch. Ak to nebol jeden, potom dobre, len nakoniec skontrolovať všetky z týchto prípadov. A tak sa kontroluje, či je to jeden alebo dva alebo tri, a to vytlačí podľa toho. A čo tu to default kľúčové slovo dole prostriedky, ak nemali zadávať akákoľvek z tých, povedzte Neplatné. Takže povedzme, že som sa požiadať o n a užívateľ dáva mi štyri. No, to zodpovedá žiadny z týchto prípadov, tak to bude tlačiť to, čo je v predvolené sekcie. Áno, otázka? SPEAKER 5: Môžete použiť Boolean výrazy miesto jeden, dva, alebo tri? JOSEPH: Takže otázka je môžete použiť Booleovské výrazy namiesto jedného, dva, tri a? A v C, verím, že vám nemôže robiť, že. Ale v iných jazykoch, ktoré by mohli narazíte na konci roka semester ako JavaScript, môžete. No, mali by ste počítať prvý že hodnota a použiť ho v prepnúť vyhlásenie. Jo? ROB: Takže časť prospech spínača vyhlásenie je, že na to, ak ste to urobil as if / else, tak ako v prípade n sa rovná sa rovná jednej alebo čokoľvek iného. Else / li n rovné rovná sa dva, čokoľvek. Else / li n rovné rovná tri. Takže ako by program spustiť, je to by postupne ísť dole v tomto zozname a skontrolujte, či je n jeden? Nie. N dve? Nie. Je n tri? Jo. Urob to. Vzhľadom k tomu, s výrokmi spínač, je to skutočne schopný zostaviť, aby to bolo naozaj rýchlo. A akonáhle sa hovorí, že spínač je hovorí, všetko v poriadku, n je dva, ja som bezprostredne chystá skočiť tam, kde Ja som mal začať vykonávanie. Nebudem sa najprv skontrolujte, n je jedna, je n dva? To môže okamžite začať robiť to, čo má robiť. A kvôli tomu, nemôže sa booleovské podmienky. Alebo to bude musieť urobiť, sekvenčné, rovnako ako, v poriadku, je n väčšie ako nula? Inak je n väčšie ako 10, alebo čokoľvek iného. JOSEPH: V tomto prípade, ak ste použili If / else, potom prepínač by ak to bežať približne trikrát rýchlejšie než if / else, ak je. Môžeme zorganizovať spínač v takej tak, že sa neporušujú Po každom z týchto prípadov. Takže v tomto prípade, som rozdelenie čísla, ktoré sa rozhodnú do jedného a dva byť nie vysoké čísla a tri je vysoké číslo. Takže v tomto prípade, ak je n je jedna alebo dve, to zasiahne prípad a potom to bude prepadnúť, pretože nie je prestávka. A to skončí tu. Takže ak si vyberieme jeden, bude to robiť printf a potom zlomiť tak, že žiadny z to je popravený. A samozrejme, ak sa vstúpiť do troch alebo niečo iné, potom to bude preskakovať tie, a nie tam, a to bude namiesto toho spustiť zodpovedajúci riadok. Existujú nejaké otázky o tom? Áno? SPEAKER 4: Chceli by ste si chybu, ak vám mal prestávku po prípade, že jeden, ale to nemal niečo pre to urobiť? JOSEPH: Takže otázka je by vám chyba, ak máte prestávku po prípade, že jeden, ale nie je nič, čo robiť? A odpoveď je nie. Nič v skutočnosti dôjde k chybe. Jo, mm hmm. Tak ako tak nejako malá zmena tu, Chystám sa dať printf tu. Jejda. Takže to, čo by to tlačiť, ak Dal som jeden v ako vstup? Jo. To by sa ti to netrvalo vysoký počet dvakrát, že jo? Vzhľadom k tomu, že by zasiahnutý, že prvý prípad, by to zlomiť, a to by spadnúť až druhom prípade. Akékoľvek otázky týkajúce sa, že? ROB: Už máte iný dotaz? JOSEPH: OK, v pohode. Dobrá. Takže tam je niečo iné, čo nazývame ternárnu operátor, ktorý je v podstate alternatívne syntaxe robiť Ak aj potom Else. A to vám umožní robiť všetko na jednom riadku. Takže v tomto konkrétnom programe, Pýtam užívateľa k n. A ak n je väčšie ako 100, hovorím je, že si vybral vysoký počet. Inak som im povedať, že vybral nízke číslo. Takže môžeme použiť to naozaj dlhé syntax, reťazec, S, a potom skontrolujte, či n je väčšie ako 100 a priradiť to podľa toho. Ale môžeme to oveľa stručnejšia pomocou tejto syntaxe ternárnu operátor ktorý zahŕňa otázku značka a hrubého čreva. Takže otáznik je v podstate pýtam, že jo? ROB: Možno priblížiť na to. JOSEPH: Áno. Dobrý postreh. Tak toto je ternárnu operátor. Prvýkrát som sa opýtať, n je väčšie ako 100? Ak je, potom som sa urobiť prvý časť pred dvojbodkou. Ak tomu tak nie je, potom som spustiť Druhá časť za dvojbodkou. Takže, ak n je väčšie ako 100, potom sa zdvihne vysoko a kladie že do reťazca s Ak n je menšie ako 100, sa vyberie low a potom sa dáva, že do reťazca s Tak, že bude kondenzovať tento veľký kus dole do práve tohto jedného riadku. SPEAKER 5: Je to populárne? JOSEPH: Áno, to je docela populárny pre veci, kde v podstate chcete sa priradenie na základe nejaký stave. A v tomto prípade sme sa snažili priradiť hodnotu na reťazec s Nie je to tak - Myslím, že som to naozaj radšej že v ostatných prípadoch. Ale to je obzvlášť užitočné pre túto úlohu. ROB: To je celkom obyčajný vzor kde máte nejaké premenné, ktoré budete hovoriť, či niečo, nastavte táto premenná na jednu hodnotu, inak nastavte táto premenná na inú hodnotu. A to je scenár kde pomocou trojice. JOSEPH: A ty úspory veľa liniek, že jo? A to práve robí váš kód pravdepodobne trochu čitateľnejšie. Áno, otázka? SPEAKER 6: U trojice, môžete ísť, reťazec s rovní s, otáznik? A potom by ste mohli mať, povedzme, päť rôznych možností. A v závislosti na tom, čo je počet n bol by si vybrať jeden z nich? JOSEPH: Takže otázka je, je tam druh syntaxe, kde si môžete urobiť reťazec s sa rovná n, a potom mať viac ako dve Možnosti po tej otáznikom? A jednoduchá odpoveď je nie, že to nie je naozaj dobrý spôsob, ako to urobiť, že ak Ak chcete hniezdo viacnásobné trojica subjekty vnútri každého iný. Dalo by sa to ako n väčšie ako 100, otáznik, a potom ďalšie ternárnu operátor, n väčšie ako 50, otáznik, a hniezdo to tak. Ale v tomto prípade, váš kód je dostať trochu nečitateľný a chaotický, a to by mohlo byť lepšie jednoducho ísť na Ak / Else v tomto bode. ROB: A tiež, ako okrajová poznámka, PHP nesprávne implementuje ternárnu Operátor tak, aby vnorené ternaries ani fungovať ako by mali. JOSEPH: Jo. Takže to bude trochu mätúce, zvlášť, keď idete do rôznych jazykov. ROB: Je to mätúce dosť, že jazyky sú zle o tom. JOSEPH: Takže vlastne, len objasniť, to všetci vieme, čo to % S robí tu? Akékoľvek otázky týkajúce sa, že? Myslím, že len pre kameru,% s v podstate nám umožňuje dať zástupný symbol pre reťazca. A potom na konci, sme určiť, že Premenná chceme dať do toho Držiak miesto je s Takže v podstate sa s a dá to sem. A potom to bude tlačiť, ste si vybral vysokej alebo ste si vybral nízke číslo. OK. Takže slučky umožňujú vykonávať veci krúživými pohybmi, že jo? Možno ste narazili na túto Scratch vo forme Forever slučiek alebo Repeat Until alebo opakujte, najmä počet opakovaní. Tak prečo je to pre nás dobré? No, v C, povedzme, že sme to Pieseň realizovaný v Scratch, že spieva, je to pieseň ktorý nikdy nekončí. Je to proste pokračuje ďalej a ďalej a večne a navždy. No, nemôžete naozaj program že má nekonečný počet printf vyhlásenie v tom, že jo? Takže v tomto prípade, jeden spôsob že by ste mohli urobiť túto prácu a , Aby sa vytlačilo navždy je namiesto toho použite cyklus while. Takže keď slučka bude vykonávať to, čo je v tele dvoch zložených zátvoriek, ktoré Patrí k nej na základe toho, čo Podmienkou je. Takže v tomto konkrétnom prípade skôr, ak Ak chceme tlačiť na veky, čo môžeme robiť? No jasne, že jo? Tak to nejako v sebe spája myšlienku nejaký logický výraz spolu so slučkou. A dozvedeli sme sa o logický výrazy skôr. Takže zakaždým, keď stav vnútro že keď zostáva pravdou, táto slučka bude vykonávať ďalej a ďalej a ďalej. A v tomto prípade, ak budeme len dodávať s pravdou, to spôsobí nekonečný slučky, ktorá vytlačí pieseň ďalej a ďalej a ako sme žiadali skôr, bez toho, aby má program, ktorý má nekonečný počet printf závierke, ktorá je nie je možné. Takže viac presvedčivo, aj keď, môžete použiť s variabilný a stav. Takže povedzme, že chceme opakovať frázy, šialené, 10 krát. Takže, čo môžete robiť s slučky while je môžete najprv inicializovať čítače Premenná mimo While do 10. A potom sa v podstate zakaždým, keď idete pomocou slučky while, môžete vytlačiť vyhlásenie a potom sa zníži Počítadlo variabilný až na konci, v určitom okamihu, akonáhle odpočítame Aj dosť krát, 1 od Aj dosť čias - a len objasniť, som mínus mínus znamená, že sa rovná Aj mínus 1. To v podstate prinesie I až Miesto, kde som kedysi hit nula, to podmienka už nie je pravda a takže na výstupe zo slučky. Takže úplne praštěná len vytlačí 10 krát. Akékoľvek otázky týkajúce sa chvíľu slučky? OK. Takže tam je spôsob, ako môžeme robiť to, čo sme práve robil v výstižnejší spôsobom s to, čomu hovoríme Pre slučky. Takže pre slučka sa skladá z inicializácia, stav, a aktualizácie, rovnako ako sme mali predtým V tejto slučke while. Takže poďme sa pozrieť. V tomto cyklus while, mali sme inicializácia, potom sme mali za predpokladu, že budeme kontrolovať. A potom sme mali aktualizáciu krok v hornej časti. S slučke for, to v podstate trvá Tieto tri veci a zráža ju sa do jedného riadku. Takže prvá vec, ktorá to robí v Pre slučky je inicializácia. A potom si to bodkočiarku, a potom tie podmienky, ktoré je Aj väčší ako nula, ide tam, a potom aktualizovať krok. Takže to dostane vykonáva na veľmi koniec tela slučky. Takže tieto dva programy sú v podstate rovnocenné. Akékoľvek otázky? Takže to, čo je rozdiel medzi týmito dvoma? Môže niekto poukázať na to? To by mohlo byť trochu jemnejšie. Je to len veľmi malý rozdiel. Áno? SPEAKER 5: Nebudete môcť používať Premenná som mimo For slučky [Nepočuteľný]? JOSEPH: Presne tak. Tak to je niečo, čo budeme mať na neskôr volal variabilný rozsah. Ale v podstate to pravý život Aj mimo tento cyklus while. Takže akonáhle to while sa vykonáva vykonávanie, budem môcť Aj neskoršie použitie Na programe. Vzhľadom k tomu, s tým pre sláčiky, to int Aj je rozsahom vnútri to pre sláčiky. A preto, že je v tejto časti FOR slučky, ktorá začína v zátvorke a končí zložená zátvorka tam. Čokoľvek, čo je vyhlásený vnútri tu nemožno používať vonku. Takže keď sa snažím používať Aj mimo, je to povedz mi, nelegálnej symbol. A v podstate, ja by som to byť schopní používať. ROB: A dobre, pred 10 rokmi, v roku doslova všetky prípady, zložené zátvorky sú to, čo slúži na určenie rozsah ukazovateľa. Takže tam, pravý som sa rovná 10 je deklarovaná vnútri tejto sada zložených zátvoriek. A tak teda, ak sa pokúsite použiť Aj pred týmto zloženú zátvorkou, je to v poriadku. Môžete vidieť, keď zadáte, aby, vám pozri pomlčka, pomlčka, STD, rovná, C99. Takže to je novšia verzia C, ktorý GCC zaviedla, že tiež dáva tento zástupca. Takže to používa k nemalo byť dovolené v C. A môžete vidieť prečo, pretože to int Aj mimo tohto zloženou zátvorkou, ale je to stále považované za Rozsah týchto zložených zátvoriek. Ale to je veľmi výhodné vec, a tak to je dobrý rozšírenie. JOSEPH: Nejaké otázky? OK. Takže to, čo je oveľa užitočnejšie je, že niekedy Ak druh dynamiky v vaše slučky, nie? Nechcete len nutne vytlačiť úplne praštěná po celú dobu, môžete chcete odpočítavať od 10, alebo tak niečo. A tak môžete použiť premennú counter vnútri tejto slučky rovnako. A v tomto prípade, tento program iba odpočítava od 10 po celú cestu dole. A čo to netlačí? To netlačí nula, pravdu, pretože keď - Áno, je to tiež netlačí 11. Takže to netlačí nula, pretože pri Ja je nula, pamätajte si, že hodnotí stav pred tým, než ide na na vykonanie tela slučky. A keď som ich nula, to je nepravdivé, tak to netlačí sa odpočítavať nula, to jednoducho vytlačí počítanie po 10 po celú cestu až do 1. Ak by sme skutočne chceli, aby to tlačiť na nulu, potom by sme dať znamienko rovnosti potom, čo tento znak väčší než. OK. Takže jeden spôsob, ako to urobiť overovanie vstupu, ktoré je, keď sa spýtate užívateľovi robiť niečo, čo budete chcieť, aby sa ubezpečil, že postupujte podľa vašich pokynov, je použitie Kým slučky, nie? Takže v tomto konkrétnom prípade, pýtam sa pre kladným číslom a potom som čakanie na vstup. A potom som skontroloval keď vstup je menšie ako nula, aby im pýtať. Tak dlho, ako oni mi dať číslo že nie je pozitívny, stále pýtajú, stále pýtajú, stále pýtajú. Ale to, čo je trochu divné o tom? Alebo to, čo sa nezdá byť optimálna o Táto štruktúra priamo tu? Každý, kto? Áno? SPEAKER 6: Ste opakovaní inštrukcie dvakrát. JOSEPH: Správne. Takže máme dve printf vyhlásenia tu, že jo? Takže tam je spôsob, ako sa to mohlo dostať len dole na jeden, ktorý by našu kód čitateľnejší a ľahšie sa trochu čistejšie. A potom by sme nemuseli sa dostať do dvakrát tak dobre. A jeden spôsob, ako to môžete urobiť, je pomocou do-while slučky. A Do-while je v podstate iná forma slučke while, kde čo je vo vnútri zložených zátvoriek dostane vykonaný aspoň raz. Takže tu prehlasujem, int vstup mimo prvý. A potom som si povedal, to Inštrukcie pri vstupe je menšia ako nula. Tak to dopadne ako prvý robiť. To bude vždy vykonávať toto aspoň raz, tak to bude vždy požiadať užívateľa pre vstup aspoň raz. A potom sa to vyhodnotí, že vstup, a to sa deje v kruhu. Áno, otázka? SPEAKER 6: Existuje spôsob, ako to urobiť [Nepočuteľné] typy, ako keď poviete, GetString, a niekto [nepočuteľný] Je tam spôsob, ako [nepočuteľný] JOSEPH: Takže otázka je, je tam spôsob, ako to urobiť vstupné overenie, či užívateľ nekladie na pravej strane typ premennej? Takže ak budeme žiadať o int a nám reťazec miesto. A funkcie, ktoré sa používajú pre vás, vezmi_int, GetString vo všetkých tie funkcie, ktoré skutočne už to, že akýsi základný typ vstupu validácia pod kapotou. Takže ak používate funkcie, ktoré sme vám dal, nemáte naozaj musieť. Ale ak chcete, aby vyzeral na to, ako môžete skutočne urobiť, môžete sa pozrieť pod kapotou v súbore I/O-- nie je súbor, štandardné I / O funkcie ako čítanie zo štandardného vstupu a štandardný výstup. A môžete získať lepší pocit o tom, ako by ste mohli urobiť. ROB: Jeden problém, aj keď je špecificky sa napríklad môžete povedal, môžete očakávať reťazec a zadám int. Ako by sa vám spoznať rozdiel medzi zámerne chcú string 123 proti chcieť int 123? Takže reťazec, je to skoro neexistuje validácia, je to len, čo sa im vstúpil budete interpretovať ako reťazec. Int je jednoduchšie, pretože bez ohľadu na to, Vstup, ktorý sa od užívateľa, budete vždy s ohľadom na reťazec. A tak, že reťazec potom môžete skontrolovať, sú všetky tieto vlastne číselné znaky? JOSEPH: OK. Akékoľvek otázky týkajúce sa do-while slučky? ROB: Jo, a to je tiež - návrat do rozsahu, trochu obyčajné chyba sa snažia využiť niektoré miestne variabilné v rámci tejto do-while slučky vnútri tohto stavu. A vlastne, keby sme sa zbavili to a povedal, int vstup sa rovná Vezmi_int, potom kompilátor bude kričať na us, pretože neexistuje vstup mimo oblasť pôsobnosti Tieto zložené zátvorky. JOSEPH: A to je dôvod, prečo sme Potrebujeme tu tento lineup. OK. Takže sa môžete tiež dostať sa z slučka čo najskôr, ak chcete. Tak to je iný spôsob, ako , Ktorým sa vykonáva to, čo sme práve vykonávaná. A namiesto použitia stav v zátvorkách, sme pomocou Ak je vyhlásenie vnútri tela z do-while slučky. A v podstate, ak je vstup konečne väčší ako nula, bude sa vymaniť sa zo slučky. A tak pôjdeme všetci cesta sem. A môžete vidieť, že to by pravdepodobne výhodné v tomto scenár, pretože je to málo trochu čistejšie a trochu bit čitateľnejší. Vzhľadom k tomu, to ste nejako majú zvláštne riadky v ňom. Je to len trochu škaredšie, Myslím, že v istom zmysle. Áno, otázka? SPEAKER 4: Budú zlomiť len získať môžete z jednej sady rovnátka? JOSEPH: Správne. Takže otázka je zlomí iba vám z jednej slučky? A odpoveď je áno. Takže ak ste vnorené cykly for, pre napríklad, keď mám pre int Aj rovná 0 do 10 a potom pre int J rovná 0 až 10, keď som vymaniť sa z vnútornej slučky, budem aj naďalej pokračovať do vonkajšej slučky. Takže to bude držať prevedení operácie na vonkajšej strane. Akékoľvek otázky týkajúce sa, že? Áno? SPEAKER 5: Ale zlomiť iba funkcie pre zložených zátvoriek, nie pre ostatné vyhlásenie? [Nepočuteľný] JOSEPH: Takže otázka je zlomí iba funkcie pre slučky sú na rozdiel od ďalšie príkazy, ako keby? A áno, je to tento prípad, pretože ste vypadla z slučky, vpravo, v istom zmysle. ROB: V drvivej väčšine prípadov je to to je druh, ak sa niečo, potom sa zlomiť. Takže nemusíte rozbiť sa vzťahujú na Ak tomu tak je obal okolo neho. A tiež, že to nie je moc slučky, ale pamätajte, že prepínače sú tiež členenie z prestávkami. Videli sme prestávky sa používa s prepínačmi predtým. JOSEPH: A môžete tiež použiť vo while a pre slučky. Akékoľvek otázky? OK. Takže nabudúce až sa funkcie. Takže ste mohli použiť jeden z týchto BYOB bloky vo vašom Scratch projektu. A to v podstate umožňuje definovať sadu pravidlá treba dodržiavať. A čo tým myslím, že je poďme si späť k matematike, vpravo, algebra. Máte to, čo nazývame funkcie x, niektoré premenné, a povedzme, že to funkcia f na X je X plus 5. Takže si môžete myslieť f x, pretože to čierne box, ktorý berie 15, a potom produkuje 20. Takže všeobecne, funkcia je niečo, čo trvá niekoľko vstupov a potom produkuje nejaké výstupy. A prečo sú funkcie dobré? Sú dobré z mnohých dôvodov. Takže môže niekto chcieť, aby sa bodnúť na to, čo organizácia znamená? Pokiaľ ide o dôvod, prečo funkcie sú užitočné? Áno? SPEAKER 4: To je vaša kód čitateľnejší. JOSEPH: Správne. Takže jedna z vecí, ktoré ich robia váš kód čitateľnejší, nie? Namiesto toho, aby ako int x sa rovná x krát x x x, môžem mať kocku x, ktorý je čitateľnejší a viac zrozumiteľná pre čitateľa. Organizácie je tiež z hľadiska rozdeliť svoj kód do zvládnuteľné časti, takže namiesto toho sa snažia realizovať to všetko v jednom dlhom úseku V hlavnej, môžete nejako rozdeliť do na ako, OK, poďme napísať funkciu aby kocka niečo, poďme napísať fungovať na námestí niečo. Týmto spôsobom môžete rozdeliť až na malé, malé diely, ktoré môžete riešiť na rozdiel od snažia riešiť veľký problém naraz. ROB: Alebo aj drobné, malé časti, ktoré vy a partner môže riešiť. JOSEPH: Jo. ROB: Takže namiesto toho, aby oba Snažíte sa implantovať jeden fungovať v rovnakom čase. JOSEPH: Zjednodušenie. Každý, kto chcú, aby sa hádať? Áno? SPEAKER 5: Viac opakovaní. JOSEPH: Správne. Takže jedna vec, ktorú môžete urobiť s zjednodušenie je, že je to niečo na v rovnakom duchu ako opätovné použiteľnosti je, že Raz som sa napísať funkciu, kocky, môžem stačí použiť, aby znovu a znovu a znovu opäť v mojom programe namiesto písania x x x x x nad a znova a znova. A zjednodušenie tu tiež len znamená, že je váš kód druhu ľahšie ladenie, akonáhle sa rozdeliť to sa do funkcie. Pretože potom môžete lokalizovať kdekoľvek vaše problémy nejako je. Akékoľvek otázky? Takže ďalší nápad je abstrakcia, nie? Táto čierna skrinka. Ako viete, čo robí vezmi_int prijímať vstup od používateľa? Sme naozaj povedal, že jo? Všetko, čo som vám povedal, je vezmi_int robí presne to, čo hovorí, že to robí. Takže aj keď to nemôžem povedať, ako to funguje, budete stále vedieť. Takže v tomto konkrétnom prípade sa jedná štvornásobný funkcia, ktorá robí rôzne veci na vstup pre vytváranie výstupu. A môžete štvornásobok čísla že sa vynásobí štyrmi. Alebo môžete to, čo nazývame trochu posunúť ju dvoma. A budeme pokrývať to trochu neskôr. A nie je potrebné vedieť, ako to funkcia vlastne funguje tak dlho, ako to funguje, ako je uvedené. Takže pod kapotou, mohol by som byť ako, vráti vstupné krát osem delené dvoma. A vy by ste nevedel, že jo? Všetko, čo potrebujete vedieť, je, robí to, čo hovorí. Tak to je užitočná vec o abstrakciu. A ďalšia vec je trochu táto myšlienka z lokalizácie kód do jedného najmä časť. Takže ak máte problém, vy nie ísť celého kódu sa snaží opraviť, kde je problém. Takže v tomto prípade, som implementoval kocka zle. Myslel som, že kocka bola vynásobením tromi. Takže v tomto prípade, je to jeden program že jednoducho sa vynásobí tromi všade. A je tu ďalší program, ktorý má zapracované kocka sa do funkcie. A tak teraz, keď chcem napraviť svoju chybu tu, musím opraviť každý riadok kódu v tomto programe. Vzhľadom k tomu, na druhej strane, ak sa používa funkcie, len som potrebné zmeniť čo sa deje na jednom mieste. Takže v informatike, sme zavolajte vstupy a výstupy. Vstupy sa nazývajú parametre alebo argumenty a výstupy sa nazývajú návratovej hodnoty. A uvidíme, ako nám to pomôže trochu o definovať funkciu v sekunde. Tak to je definícia funkcie pre Cubing. Tak to trvá vstup, a potom to vráti, že počet krát samo o sebe trikrát. Takže poďme rozčleniť tento systém. Takže máme hlavičku funkcie, ktoré v podstate sa skladá z troch vecí. Takže máme parametre, ktoré sú, ako som už povedal skôr, vstupy do tejto funkcie. A potom dáme Funkciu meno. V tomto prípade, je to len kocka. A potom sme sa určiť, aký typ z návratová hodnota je. Takže v tomto prípade, môj kocka funkcie berie na celé číslo, a to aj vráti celé číslo. Takže keď som sa prejsť v dvoch, dvoch je celé číslo, sa vracia osem ku mne, čo je celé číslo. Takže návrat parametre názov typu. Otázky o tom? A potom návratová hodnota je v skutočnosti je uvedené na konci tým, návrat a potom sa vracať, čo obsahuje návratovú hodnotu. Takže v tomto prípade, ak by sme to všetko spoločne, funkcia sa v parametre, je to len niečo, a vráti niečo, čo je typ že hovoríme, že to bude. Akékoľvek otázky? Tak ako sme sa použiť funkciu? No, my napíšeme funkciu a potom sme ho používať v našom programe, nie? Tak som to nazval kocky, a potom môžem použiť kocku. Ale to, čo je dôležité si uvedomiť, je to, že objednávka záležitosti. Ak mám kocku pod hlavnou, je to bude bežať do kocky. A v tomto bode, tam je nič volal kocka v programe, a to Len bude vyzerať, mám žiadny nápad, čo kocky. Tak to vám povie, implicitné deklarácie funkcie. To je chyba, ktorá sa objaví. A tak v tomto prípade, kocka je pod hlavné, takže to nebude o tom vedieť. SPEAKER 5: Takže hlavné je zvyčajne posledný funkcie definované? JOSEPH: Takže otázka je, je hlavný zvyčajne posledný vec, ktorú by ste definovať? A no. Je to preto, že sme väčšinou radi hlavným byť na vrchole, že jo? Vzhľadom k tomu, že je to prvá vec, ktorú Chcete-otvorenie programátor program viď. A tak ako sme sa vyriešiť tento problém my Chcem hlavným byť na vrchole, ale funkcie, ktoré chceme, chceme im byť pod hlavným ešte mohli používať je vo vnútri hlavnej? No, my používame to, čo nazývame prototyp funkcie. Takže to, čo prototyp funkcie v podstate je je to prvé, čo sa podpis alebo záhlavie funkcie o tom, čo chceme realizovať dole tú, a dáme ju na v hornej časti programu. Takže v tomto prípade, môžeme povedať, že dobre, neskôr v našom programe, ideme aby sľub zaviesť tento volanie funkcie int kocka, ktorá sa číslo vstupu. Takže teraz, pretože to je nad hlavnou, hlavné, bude to povedať, oh, dobre, neskôr v programe, ktorý sa bude tam, takže som si na neho odkazujú, takže budem nechaj to prejsť teraz. A potom v dolnej časti, realizujeme kocku. A potom hlavný bude len povedať, dobre, bude to akýsi odkaz Tieto dva symboly spoločne. A budeme pokrývať, čo to znamená, že neskôr. A tak to bude vedieť, že je to Funkcie kocka, že by mal používať. ROB: [nepočuteľné] o chcú Hlavné v dolnej časti hore, videl som ako. Existujú veci, ktoré rovnako ako , Aby v spodnej časti hlavnej. Ale akonáhle sa projekt dostane najmä veľký, zvyčajne hlavné je v súbor všetkých jeho vlastné. A v tomto bode, ako je int kocka linka by - vnútri stdio.h sú banda riadkov len tak int kocka int linkový vstup. A tak tie prototypy sú veci, ktoré majú tendenciu dať do hlavičkových súborov, na ktoré ukazujú, že nezáleží na tom. No, na tom nezáleží. Ti vždy hore. A ak hlavná nie je súbor všetkých jeho vlastné, nemusíte sa starať o uvedenie Jednotlivé funkčné prototypy v súbore. JOSEPH: A dostaneme sa, že trochu Trochu neskôr, keď Rob začne hovoriť o kompiláciu. A tak je tu tiež rozdiel medzi parametrom a argumentom. A parameter je práve to, čo nazývame tieto vstupy pri definujeme funkciu. A hovoríme, že argument, keď sme v skutočnosti sa do nej funkcie. Takže v tomto prípade sa jedná o parameter, ako sme povedali skôr. A keď sme vlastne používať tam, kocka X, potom X je sám o sebe to, čo nazývame argument, do funkcie kocky. ROB: Takže argumenty parametra sú - je tento rozdiel veľmi zmätený zamieňajú. Na tomto mieste, pre mňa, je to ako jedna z tieto slová, že keď som ho vidieť v divoký, nemôžem si pomôcť, ale hneď otázka, či sa jeho použitie v správny kontext, pretože Rozdiel je v tom dosť subtílne, že práve každý má tendenciu - Skoro som vždy hovorím argument, bez ohľadu na to, čo mám na mysli. JOSEPH: A funkcie sú tiež užitočné za to, čo nazývame vedľajšie účinky. Takže funkcia môže mať žiadne vstupy, a to môže tiež produkovať žiadne výstupy. Takže v tomto konkrétnom prípade som definovať podprogram, ktorý nemá žiadny vráti hodnotu. A aby sa stanovilo, že používame to, čo nazývame medzeru sem. A tak vedľajší efekt tejto funkcie je, že to jednoducho vytlačí veci von na stránku. To nie je v skutočnosti sa niektorý vstupy, a to nie je vlastne produkovať žiadne výstupy. Ale to by mohlo byť užitočné v tom zmysle, Ak chcete, napríklad, ladenie niečo, čo vo svojom programe, ak chcete napísať trochu podprogram, ktorý vytlačí, povedzme, obsah pamäte, alebo tak niečo. A tak sa tieto nežiaduce účinky sú niekedy užitočné mimo rámec o rovnako ako vstupy a výstupy. Akékoľvek otázky? A na koniec tohto konkrétneho segmentu, čo tento program robiť? Dám ti chalani pár sekúnd čítať cez to. Na veľmi základnej úrovni, to, čo chceme povedať, je to, že vymení x a y, nie? Tak koľko z vás skutočne myslíte to vymení x a y? Zdvihnite ruku. Nikto. OK. Kto si myslí, že to bude Nie je zameniť x a y? A suma, ktorá bola nie je celá miestnosť. Takže niektorí ľudia nie sú istí. OK. To je rozumné. Takže poďme sa prejsť, čo sa stane, keď ste vlastne volať funkcie prvý Aby sme mohli odpovedať na túto otázku. Tak toto je to, čo pamäť trochu vyzerá. To je niečo ako zjednodušený model čo pamäť vyzerá, keď spustenie programu. Takže je tu niečo, čo nazýva zásobník tu dole a niečo, čo sa nazýva haldy. A tie rastú smerom stredná pamäti. Takže v tomto konkrétnom prípade, kedy voláte funkciu, dostane kladený na zásobníku. A potom, čo je obsiahnuté v tom, že funkcia zostáva v tom, čo hovoríme, že Funkcie stack frame. A tak si pekné vizualizáciu to, let 's - napríklad sme mali programu main skôr. A vnútri hlavnej, hovorili sme kocku. Takže hlavné by najprv ísť na stack rám, pretože je to prvá funkcia tomu sa hovorí. A potom, keď kocka sa nazýva vnútro hlavné, dostane kladený na hornej časti hlavnej vnútornej pamäte. Takže to, čo si všimnete, je, že kocka má svoje vlastné parametre a jeho vlastné miestni obyvatelia. Takže, keď ste vlastne zložiť niečo funkcie, parametre, ktoré sa dostane sa kópia toho, čo bolo prešiel od hlavnej. A nejako vysvetliť, poďme prejsť program. Takže máme hromadu, čo je len zásobník časť. A to, čo robíme, je, že sme najprv inicializovať x a y na jeden a dva. Takže máme tieto malé krabičky. Oni sedia v hlavnej stacku rám na zásobníku. Obsahujú jeden a dva. Teraz hovoríme swapu. Čo sa stane, je, že sme prejsť x a y do swap a swap vytvára svoje vlastné kópie o tieto premenné používať vnútri z jeho rámca zásobníka. Takže teraz tam máme, čo obsahuje hodnotu, ktorá mala x, b, ktorý obsahuje hodnotu, ktorá mala y. Tak jeden, dva. A všimnite si, že je to samostatný z x a y vnútri z hlavnej. Tak sme sa vytvoriť dočasný premenná obsahovať. Vydali sme sa rovná b, takže zmeny z jedného na dva. A potom sme sa vydali b rovné na teplote, čo je jeden. A potom sa môžeme ukončiť von tejto funkcie. Keď ukončíte z funkcie, stack frame dostane vyskočila off zásobníka. Hovoríme, že tlačiť. Môžete tlačiť rámček zásobníka do zásobníka a pop, ak mimo zásobníka. A tak to, čo sa stane, je všetko, čo bol v tomto zásobníku ráme druhu len ide v plameňoch. A tak, že už neexistuje. Ale čo sme si všimli? Nikdy sme sa vlastne zmenilo hodnoty x a y, nie? Takže tí ostali miestnej hlavnej. A odovzdaním veci do swapu, sa vlastne nikdy nezmenil týchto hodnôt. A čo nazývame to? Nazývame to okolo hodnoty. Takže v C, pri odovzdaní veci do funkcie, odovzdáva im hodnoty a vytvorí kópiu nich funkciu použiť. A dozvieme sa o niečo, čo nazýva odovzdávanie odkazom neskôr, ale to je spôsob, ako možno tento problém vyriešiť. Ale nebudeme báť že až neskôr. ROB: A v skutočnosti, že termín, prechádzajúce odkazom, takže C ani nemá odovzdávanie odkazom. C výhradne sa okolo hodnoty. Bez ohľadu na to, čo robíte, ste vždy odovzdaním kópie niečoho. Je to len, že, ako som trochu zmienil že predtým, než sa ukazovatele a že reťazec je naozaj len štyri bytov ukázal niekam do pamäte. No, ak mám tento reťazec, a to mi hovorí, že je miesto, kde reťazec - dobre, keď mám tento ukazovateľ na túto miesto v pamäti, potom som si prejsť Kópiu tohto ukazovateľa na funkcie, a že funkcie ešte vie, kde v pamäť je. Tak sú oba tieto ukazovatele smerujúce na rovnaké miesto v pamäti, a že to, ako budeme môcť zmeniť veci nad rámec aktuálny stack frame. JOSEPH: Chcete urobiť kompiláciu? ROB: Nie, to je 05:30. JOSEPH: OK. Je 5:30. OK. Takže sa budeme zaoberať zostavovaní Myslím, že v ďalšiu časť, alebo váš sekcie vodca bude v tomto bode. A - ROB: Nejaké otázky? JOSEPH: Nejaké otázky? Áno? SPEAKER 5: Použitie reťazca z CS50, každá funkcie, ktoré chceme použiť pre ti, že to bude ako C funkcie. CS50 nebol preč a z akejkoľvek ďalšej. ROB: Správne. Každý z C ako [nepočuteľné], môžete by sa používať tie na našich reťazcoch. JOSEPH: A ešte jedna posledná vec, ktorú chcem zmienka je, že máme sprievodca štýlu pre túto triedu. ROB: Jo, jo. JOSEPH: Takže ak ste prišiel z Pred naprogramovaním pozadia, môžete môže mať určité konvencie, kedy píšete kód, ako je uvedenie traky na rovnakom riadku alebo najmä spôsoby odsadenie alebo pomenovanie premenných. V tejto triede, chceme nasledovať špecifický štýl sprievodca len preto, dobre, keď idete von a pracovať v priemysel, budete očakávať, nasledovať sprievodca štýlu spoločnosť, v ktorej idete. Rovnako ako napríklad Facebook myslím, že má zvláštny druh pomenovanie konvencie. A tam je rozdiel medzi ťavou opláštenie premenné a, rovnako ako oddeľte ich podčiarkovníkov. A tiež si myslím, že je najdôležitejšie, rovnako ako napríklad odsadenie, že jo? Nemáme zložené zátvorky začať tam, kde podmienkou je, a oni sú na ďalšom riadku. A my sme tiež dať zložené zátvorky v aj keď je to len jeden riadok. A veľa krát, existujú spôsoby, ako robiť to, kde si môžete nechať tieto rovnátka vypnúť, ak je to len jeden riadok v rámci príkazu If. Ale v tejto triede, chceme nasledovať špecifický štýl sprievodca len tak dostanete používa na také veci. ROB: Jo, a Style 50 sa chystá presadzovanie tohto štýlu sprievodca, a my sme bude používať štýl 50 do platovej triedy kódu. Tak to robí veci pre nás jednoduchšie a dúfajme, že by nemal robiť veci, ktoré oveľa horšie pre vás vzhľadom k štandardizovaný spôsob by nemal byť, že nereálne. JOSEPH: A konečne, nájsť štýl sprievodca, choďte na manual.cs50.net/style. A jo. SPEAKER 4: Chystáš sa presadiť všetky znaky na riadok? ROB: Áno. JOSEPH: Je nám ľúto, chlapci. ROB: To je ako jeden z mála tých. V tomto bode, som OK s 120. Som OK sa hovorí 120 znakov na riadok. Chápem, že je nejaké obmedzenie. Myslím, že 80 je tak malý, ale budeme presadzovať ju. JOSEPH: Osobne si myslím, že sa C, 80 znakov je v poriadku. Akonáhle začnete dostať do ďalšej jazyky, ako je JavaScript a PHP, nie tak rozumné len obmedziť je 80 znakov. OK. No, to bolo super sekcie. Má niekto chcel pečivo? SPEAKER 4: Áno.