ROB BOWDEN: Dette er den mere komfortabel sektion, men det betyder ikke, at hvis du føle, at du ikke mere behageligt vil du ikke lære ting her. Så lad os komme i gang. Har du dias går lige ind i tingene. Er jeg ved at bare tage det lige nu? Skifte laptops. ALLISON: Du ønsker ikke at introducere dig selv, Rob? ROB BOWDEN: Åh, jeg er Rob. Dette er mit femte år TF-ing CS50. GABRIEL: Jeg er Gabriel. Jeg leder TF af CS50. Jeg var TF sidste år og i år. ALLISON: Og jeg er Alison, og dette er mit andet år TF-ing CS50. ROB BOWDEN: Okay, så denne ting til venstre, forhåbentlig du har set det før. Hvis ikke, fordi du hente det for dig selv, Du skulle have set det i forelæsning. Så dette er CS50 apparat, og han gjorde en noget af en beskrivelse af det i foredraget. Men dybest set er det bare dig kører et operativsystem systemet inden for dit operativsystem system, så vi kan give dig programmer uden at behøve at bekymre sig, oh er dette kommer til at arbejde på både Windows og Mac, eller hvis nogle af jer er allerede bruger Linux, Linux. Det er bare meningen at være en fælles spilleregler område, så alle har nøjagtig samme miljø. Så hvis du ikke har hentet det allerede, du skal hente det, fordi du er vil få brug for det for problemet sæt. Og det er en to gigabyte hente, så det kan tage et stykke tid. På Harvard det vil gå hurtigt. Så CS50 apparatet. Nu i begyndelsen, vil vi tale om bare en masse kommandolinje ting, og så ved det, jeg mener arbejde i denne lille miljø herovre. Og mærke alle ting Jeg siger lige her lige nu kommer til at arbejde, hvis du er inde i en terminal inde i apparatet, eller hvis du er inde i gedit terminal vinduet indersiden af ​​apparatet. Så disse miljøer er identiske. Men jeg har tænkt mig at gå en tredje vej. Og læg mærke til hernede dette lille IP-adresse lige her. Så du behøver ikke at gøre dette, men denne IP address-- nu hvis I-- undtagen det er blokeret af denne ting. OK, så IP-adresse i en terminal her-- så denne terminal i løbet her er en terminal i min Mac. Så dette er på ingen måde i øjeblikket forbundet med apparatet på alle. Og hvis du er på Windows, så er du vil få brug for at hente noget specielt til denne, navnlig folk har en tendens til at bruge Putty, P-U-T-T-Y. Så hvad jeg har tænkt mig at gøre er at skrive SSH og så er IP-adresse. Nå, jharvard på denne IP-adresse. Så 192.168.24.220. Denne skræmmende budskab, ignorere det. Bare skriv ja. Dette er CS50 i en kasse. Den beder om dit kodeord. Og så i en masse af disse sammenhænge, ​​hvor den beder om adgangskoden, [uhørligt]. Vi har fået en masse spørgsmål, hvor det siger, det er faktisk ikke skriver. Det betyder ikke vise dig karakterer af password som du skriver, hvis noget, for en sikkerhedsfunktion, fordi hvis er nogen, der kigger dig over skulderen og de ser stjerne stjerne stjerne stjerne, så de vide, at din adgangskode er fire tegn. Så ideen er det vil bede dig om din adgangskode, type. Det kommer ikke til at vise du de tegn, men det er faktisk at acceptere dem. I dette tilfælde, hver gang du nogensinde se et password prompt beskæftiger sig med apparatet, den adgangskode bliver Crimson. Så Crimson. Og nu her inde i dette vindue, der er i min Mac, Jeg dybest set have nøjagtig de samme udsigt som indersiden af ​​en terminal i apparatet. Så du behøver ikke at gøre dette. Du kan gøre alt, hvad du ønsker indersiden af ​​apparatet. Jeg har næsten aldrig rent faktisk gør noget i apparatet. Jeg har næsten altid minimere det, og nu Jeg arbejder SSH ind i apparatet. Hvis der er noget, hvis du har en langsommere computer, kan du mærke en forskel. Jeg gør det, fordi jeg foretrækker denne terminal vindue. Det har nogle funktioner som Jeg kan opdele vinduet og nu kan jeg SSH i gennem apparatet. Jeg fik to SSH der sker på én gang. Hvis din computer er særlig langsom og du arbejder i apparatet, og du indser dette er virkelig laggy, uanset hvad. Tendens til at være meget hurtigere hvis du er SSH-ed i. Men ellers kan du arbejde enten måde. PUBLIKUM: Hvad betyder SSH betyde? ROB BOWDEN: Sikker skaller, sådan noget? Hvad betyder SSH betyde? GABRIEL: Secure shell. ALLISON: Det er bare sikker shell. ROB BOWDEN: Secure shell. Det er en protokol, der du-- det er en sikker protokol, så krypteret. Folk kan ikke snoop netværket og se, hvad du siger til noget du er SSH-ed til. Og i virkeligheden, i den olden dage af CS50, så i 2009 da jeg var en freshman, den måde, at du har arbejdet på CS50 problemet sæt, var du SSH-ed til nogle server at vi gav dig adgang til, og du har arbejdet der. Så du ikke har dette grafisk apparatet. Du havde ikke gedit. Du har ikke har alle disse ting, du visuelt kan pege og klikke. Du var nødt til at arbejde i denne grænseflade. Jeg foretrækker at arbejde i denne grænseflade. Så en del af, hvad vi vil at gå til over lige nu er en flok af kommandoer, du skal begynde at blive fortrolig med, da du går sammen i løbet. Og helt ærligt, når du vænne sig til dem, er det er så meget hurtigere til arbejde i dette miljø end det er at arbejde med finderen, trække og klikke på ting. Så her er vi. Nu skal jeg bare SSH-ed i, og så standard Beliggende- dig så nogle af disse kommandoer i klassen, men vi vil gå over dem alle igen. Standardplaceringen er vi i er hjem bibliotek. Og biblioteket, bare et andet ord for mappe. Så vi er i hjemmet bibliotek. Skriv ls, en liste over de filer i denne mappe. Åbenbart jeg oprettet en blah.c tidligere. Så vi har en desktop mappe. Du bemærker det syntaksfremhævning? Den lyseblå fremhævning angiver et bibliotek og den rette hvide angiver blot en almindelig fil. Så der vil være nogle andre farver, du ser. En eksekverbar fil er sandsynligvis vil at være grøn eller noget lignende. OK, så vi er i hjemmet bibliotek. Nu hvis jeg ønsker at gå ind i en anden bibliotek, cd er den kommando, jeg ønsker. Så skifter mappe, og så er du passere navnet på mappen at du ønsker at gå ind i. Så her har vi fire muligheder. Jeg kan gå ind i downloads, og nu ser vi her har det opdateret denne parentes at sige, jeg er i ~ / downloads. Så hvad er tilde? Det er en forkortelse for dit hjem bibliotek. Så næsten alt hvad du gør vil være med hensyn til dit hjem bibliotek, og pwd er blot en kommando Jeg bruger en gang i et år, bare udskriver den aktuelle mappe. Og så du kan se her, at ~ / Downloads virkelig løser til / home / jharvard / downloads. Så / home / jharvard er mit hjem bibliotek. Så vi kan cd dot dot. Nu prik prik er en speciel mappe, altid refererer til én mappe op. Så hvis jeg i ~ / downloads, så cd dot prik kommer til at bringe mig til Tilde. Hvad tror vi cd dot dot kommer til at bringe mig til nu? Det vil bringe mig til / home. Så tilde ved print working directory, Jeg er i nu / home / jharvard. én mappe op fra det, nu står her / home. Nu cd dot dot. Nu er jeg i rodmappen, og du kan ikke gøre det igen. Du vil bare blive i rodmappen for evigt. Rodbiblioteket har en hel masse ting, at hvis du ønsker at se ind i, du kan. For eksempel, hvis jeg går ind i bin, som indeholder alle disse binære filer, såsom ls, og cd, og alle disse ting. Så disse kommandoer skal findes et andet sted i systemet, og det er i / bin mappe. Men næsten alt, hvad du gør, er vil være fra dit hjem bibliotek. Og cd uden nogen som helst argumenter, du kunne sige cd ~, behøver ikke at. cd vil bringe dig tilbage til dit hjem bibliotek. Én sidste. cd - vil bringe dig tilbage til den sidste mappe, som du var i. Så jeg bare cd'd to gange i træk, så min sidste bibliotek var hjem bibliotek. Hvis jeg går til skråstreg bin, og nu lad os gå op og ind i brugeren. Bruger aktie. Lad os gå til bruger aktie. Nu er jeg nu i brugerens aktie. cd - tilbage i bin. Så det bliver særlig nyttig når du have-- og det vil skifte. Så bruger aktie, ryg bin, dele bin. Så dette bliver nyttig. Du kan finde dig selv at have mange, mange, mange indlejrede mapper. Og du ønsker at gøre noget virkelig hurtig i en øvre mappe. Du går til denne mappe, skal du ændringer og den slags, og nu vil du gå tilbage til hvor du var. cd -. Jeg er altid frustrerede når jeg tilfældigvis gå til denne mappe jeg ønskede at gøre arbejdet i. Jeg får altid frustreret, når jeg gjorde det i to trin i stedet for et skridt, fordi det betyder, at cd - går at bringe ind i det mellemliggende sted i stedet for, hvor jeg vil hen. Så vi ser alle på listen filer. Vi ved, hvordan man kommer rundt hidtil. Så lad os nu snakke om redigering af filer. Så i dette kursus, er du næsten altid forventes at bruge gedit. Hvis du vil, kan du tage det næste skridt og begynde at lære en kommandolinje tekst editor. Så findes der forskellige muligheder. Og dem, der er sandsynligvis vil være relevant for dig, Vi har Nano, Vim, og Emacs. Så Nano er begyndere kommandolinje tekst editor. Så Nano lad os gå på blah.c jeg oprettede tidligere. Det er bare denne standard C-fil. Og du kan se en hel masse ting foregår på bunden af ​​skærmen, og tilsyneladende blah.c indeholder denne C-kode. Så i dette særlige editor, hvad det siger på bottom-- nu denne indskudsmærke symbol, vi ser dette ^ G ^ X ^ O. Således at der i næsten alle kontekst, som du ser, du måske se, at indskudsmærke symbol i andre steder online, på Stack Overflow, noget lignende. Det henviser næsten altid til at styre. Så for at afslutte jeg ønsker at gøre Kontrol X. Kontrol X, afslutter. Og jeg kan bruge min pil tasterne til at flytte rundt. Bemærk, at jeg ikke kan pege og klikke let. Du har brug for at bruge din pil tasterne til at flytte rundt. Der kan være en indstilling at pege og klikke. Men lad os lave nogle ændringer. Nu Kontrol X at gå exit. Det kommer til at sige Gem ændret buffer. Nu prompt, y for ja, n for nej. Kontrol C for at annullere. Jeg vil bare sige ja. Fil navn at skrive. Standarden er den fil at det allerede er. Hit Enter. OK. Nu har jeg lige redigeret denne fil, gemte det, og det er ændret. Så Nano er den nemmeste teksteditor vænne sig til. Alternativerne er Vim og Emacs. Det er højere niveau teksteditorer der har en meget stejl indlæringskurve. Så min personlige præference er Vim. Og det har en bred vifte af muligheder. Og når man vænner til det, vil du aldrig ønsker at gå til en anden teksteditor, fordi du bare har så mange ting til rådighed for dig i disse, men det tager en virkelig lang tid at lære. Så måske du bare ønsker at tvinge dig selv lige nu at vænne sig til det, men jeg vil sige det er det værd. Men det er svært. Og så Emacs. Jeg kæmper altid i Emacs fordi Jeg ved, hvordan man gør absolut ingenting. Tilsyneladende Emacs er ikke som standard installeret på apparatet. Vi vil sandsynligvis tilføje, at Som standard installationer. Når du lærer en af Vim eller Emacs, der er ingen tvingende grund til at nogensinde lære den anden, men det er en helt anden stil. OK, så det er at redigere tekstfiler. PUBLIKUM: Hvis du blev hængende i Vim lige nu, hvordan gør we-- ROB BOWDEN: Der er flere tilstande i Vim, og der er hele tutorials på læring Vim. Så hvis du tilfældigvis i insert tilstand, med henblik at skrive tekst, som du kan træder som på forskellige måder, men jeg er, hvordan du kommer ind i insert mode. I eller komme ud af eventuelle særlige mode, som du er i, bare undslippe. Og du bare bash undslippe at få ud af eventuelle indlejrede modes din i. Bare OK, nu er jeg tilbage i normal tilstand. Og så i normal tilstand, et kolon. Du ser det ud i bunden. Og derefter q. Så q vil holde op, hvis du har foretaget ændringer, som I-- jeg har foretaget ændringer? Jeg har lavet ændringer tilsyneladende. Så hvis du har foretaget ændringer, det vil sige, at du kan sætte et udråbstegn. Jeg har tænkt mig at kalde det et brag. Så du kan sætte et forbud til bare Afslut uden at gøre noget, eller kolon WQ vil gemme og afslutte. Så w i almindelighed, er at skrive. Så skrive filen. Jeg kan skrive og holde op. Eller du kunne bare have qx slam, q bang bare at komme ud af der, uanset om eventuelle ændringer, du har foretaget. Okay, så lad os nu go-- kan vi skabe filer. Lad os begynde at fjerne filer. Og jeg vil bare smide i en hurtig ny kommando, touch. Så røre foo. Touch bar. Touch baz. Hvis jeg ls, nu ser vi at disse filer findes. De er helt tom. Så touch er bare en nem måde af en [uhørlig]. To teknisk bare til staten det, opdaterer det tidsstempler. Så enhver fil, du opretter, har et tidsstempel forbundet med det. Så baz blev skabt på 14 September på 16:21. Det er nu 16:22, så hvis Jeg rører Baz igen, vi se baz var mest nylig ændret ved 16:22. Men ellers jeg næsten aldrig se på de tidsstempler på filer. Så touch, her er jeg bare bruger den til at skabe nogle hurtige filer. Okay, så nu rm er kommando, som vi bekymrer os om her. Og vi kan rm boo. Sig fjerne regelmæssig tom fil boo. Og vi kan skrive y, og nu er det fjerner. rm baz. Fjern regelmæssig tom fil Baz og type n for ingen. Nu er det ikke fjernet. Så bar og Baz stadig eksisterer. Foo er væk. GABRIEL: Hold taler. ROB BOWDEN: Great. Så den irriterende besked her, fjern regelmæssig empty-- hvad laver du dernede? Fjern regelmæssig tom fil. Så hvis vi ikke ønsker at være generet af dette budskab, vi kan smide i denne -f flag, og så det er kraft. Og nu, hvis jeg rm -f, er det ikke kommer til sige ønsker du at fjerne denne fil. Det vil bare gøre det. Og ls, kan jeg ikke se bar der længere. Nu, er en potentielt farlig kommando. Det har tendens til ikke at alt for dårlig. Vi vil komme tilbage i en anden, hvordan det kan få virkelig farligt. Og lad os skabe nogle temp mappe. mkdir, en anden kommando. Så mkdir er en kommando der gør en mappe. Og nu ved ls ser vi denne nice lys blå fremhævede temp bibliotek. Jeg kan cd i temp. Og jeg kan mkdir foo. CD i foo. mkdir bar. CD i baren. Så vi ser, vi kan nemt få ind i nogle temmelig dyb nesting. Nu hvordan fjerner jeg en mappe? rmdir. Så hvis jeg bare lige prøve at rm, ligesom vi gjorde med en almindelig fil, rm bar vil sige kan ikke fjerne bar. Det er et bibliotek. Der er en speciel kommando for fjerne mapper, slags. Så rmdir bar. Nu bar er væk. OK, så rmdir jeg temmelig aldrig bruge. Årsagen being-- lad os nu lave en almindelig fil bar i her. Så rmdir boo. rmdir. Mislykkedes at fjerne foo. Bliv ikke er tom. Så kan du ikke bruge fjerne dir på en bibliotek, der har ting i det. Så har du nogle valgmuligheder. Du kan gå ind i denne mappe, skal du fjerne alt manuelt, og derefter komme ud og rmdir kataloget. Der naturligvis lyder irriterende. Hvad hvis der er tusindvis af filer i der? Nå, du kunne rm *. Vi vil tale om * i en anden. Det betyder dybest set, alle de ting. Men endnu bedre, så rm -r. Så rm -r-- i en masse sammenhænge -r betyder rekursiv som vi vil tale om, hvad rekursive midler i flere uger. Men det dybest set betyder travers hele denne mappe og fjerne alt. Så rm -r foo kommer til at sige ned i mappen foo? Ja. Fjern regelmæssig tom fil foo / bar? Ja. Fjern bibliotek foo? Ja. Så nu foo og alt inden den er blevet fjernet. Nu, kan få særlig irriterende when-- lad os røre 1, skal du trykke på 2 skal du trykke 3. Kunne have en hel masse filer. Hvis jeg ville, kunne jeg skabe tusindvis af filer her. Og rm -r foo går at være temmelig irriterende. Ja, ja, ja, ja, ja, ja. Med en masse flere filer, du hurtigt se, hvor mange gange Jeg ville have til at skrive ja. Godt, vi lige har set før, hvordan vi kan slippe for at skulle skrive ja, -F. Så mkdir foo cd foo touch 1 2 3. OK, så rm -rf foo går til blindt fjerne foo helt. Ingen prompt. Ikke noget. Foo er væk. Så jeg har en tendens til at bruge denne kommandoen hele tiden. Når det er sagt, er det en meget farlig kommando, fordi hvis jeg gør noget lignende dette, vil det ikke bede dig. Det vil være væk. Og det sker ret ofte, og selv i højere niveau CS kurser. Nogle gange vil vi se noget hvor nogen siger jeg ved et uheld vores rm rf-ed mit hjem mappe og alle mine P sæt er væk. Og det er ødelæggende, men der er ingen papirkurven. Der er ingen der er ikke noget for dig at hente. Det er lige gået. Endnu værre ville være noget lignende rm -rf /. Så vi bare diskuteret at rodmappe. Det holder alle de filer på dit system. Ting tendens til at få temmelig rodet når du fjerner ting som ls, og cd, og alle af dem. PUBLIKUM: Hvad er forskellen mellem rm, rf, og rm * ROB BOWDEN: Så rm * - ALLISON: Spørgsmål var hvad er Forskellen mellem rm, rf, og rm *. ROB BOWDEN: Så rm *. Star i almindelighed måde alle indholdet af denne mappe. Forsøger at tænke på andre måder til at vise stjerne. Tja, Star faktisk generelt betyder matche enhver mønster. Så hvis jeg har en fil kaldet dog1, røre dog2, touch cat1, touch cat2. Så ls * 1 kommer til at udskrive cat1 og dog1, fordi denne stjerne kan fyldes i med-- det er man nødt til at være der, men stjerne kan være enten kat eller hund. Det er et wild card. Det er det ord, jeg leder efter. Wild card. Eller jeg kunne ls hund *, og Jeg fik at se dog1, dog2. Så dem, der viser filerne der matcher det pågældende mønster. Du kan bruge ls på denne måde. Ls * stjerne matcher noget. Så det kommer til at udskrive alle indholdet af denne mappe idet alle af dem til at passe. Det kommer ikke til at udskrive noget i øverste niveau mapper. Hvis jeg har en sub directory, foo, og Rør 1 2 3-- så nu, hvis rm * stjerne, fjerne cat1, cat2, dog1, dog2. Kan ikke fjerne foo. Det er et bibliotek. Så stjerne udvider til alle filer i biblioteket. Så teknisk set rm * er ligesom at sige rm cat1, cat2, dog1, dog2, foo. Ud fra følgende betragtninger rm -rf teknisk stjerne ville udrette, hvad vi ønsker, men rm -rf-- hvis jeg går ud af denne bibliotek, rm -rf temp, der kommer til at gå ind i temp og rekursivt fjerne alt. Så stjerne er adskilt i det at forstås by-- så denne ting at jeg kører i, denne ting der bliver bedt mig for kommandoer og derefter udføre og gør dem, jeg kalder det min shell. Og så dette skallen er selv et program. Og hvis jeg ville, jeg kunne køre i / bin / bash. Skallen hedder bash. Og nu ser vi noget har ændret en smule, og det er fordi mine indstillinger for skallen er noget anderledes. Men nu er jeg teknisk kører en shell i min oprindelige shell, og jeg kan forlade det skal, og nu Jeg er tilbage til mit topniveau shell. Formålet med at sige der is-- stjernen. Så stjernen er noget forstås af bash. Så rm -rf, -rf flag er forstås ved blot rm. Den ved, at når du passere en -rf som du ønsker det rekursivt fjerne alle filer uden at spørge. Stjernen er noget forstået ved bash at når du siger rm * bash kommer ikke til at sige hey rm *, fjern stjerne. Bash vil sige rm * fjerne cat1, cat2, dog1, dog2. Det er automatisk kommer til at udvide alle filerne i mappen. Og tilsvarende tilde er en anden symbol, bash forstår. Når du siger cd ~, bash udvider at til dit hjem bibliotek. Andre spørgsmål indtil videre? OK, så vi kommer til at begynde at gå hurtigt. Tab afslutning. Bare for at smide det derude. En masse mennesker ikke realisere dette eksisterer. Så hvis jeg skriver cd dow, jeg ønsker at gå ind i downloads. Jeg behøver ikke at skrive nloads. Jeg kan bare ramt Tab. Så det anerkender, at Dow er et præfiks, matcher ikke noget andet i denne mappe, så det vil fuldføre det for dig. Nu kan jeg komme ind. Jeg vil også gøre det rekursivt. Så mkdir foo. Lad os gå ind i foo. mkdir bar. Så gå tilbage til mit hjem bibliotek, kan jeg se downloads. Nu rammer fanen igen, automatisk kommer til at fylde i foo. Det er det eneste bibliotek. Fanen Hitting igen, automatisk kommer til at fylde i bar. Så nu er jeg i (~ Downloads / foo / bar). Så denne fane færdiggørelse, når jeg fik til kontortid, og jeg står i andens skulder, og de kommer rm D-O-W-N-L-O-A-D-S, jeg er ved at dø. Bare fane, fane, fane, fane. Så absolut brugt fane. Og tilsvarende op og ned, en masse mennesker netop det skete for aldrig har ramt op og ned. Det vil gå gennem den tidligere kommandoer, så hvis du bare kørte noget, og du ønsker at køre det igen, bare holde op indtil du kommer til det. OK. Så hurtig, nogle andre ting. Lad os gå tilbage til temp. Lad os oprette nogle filer. Så i her, jeg er bare vil liste nogle ord. hund, kat, meow. Lad os gøre hund, fisk. Så nu rep er en meget nyttige kommandoer, som du bruge til at søge i hele filer til en bestemt tekst, og teknisk kan du gøre virkelig komplekse udtryk for det til at matche. Så her, hvis jeg grep, og hvad ønsker jeg at søge efter? Lad os sige, jeg søger efter katte, og Jeg ønsker at søge i alle disse filer. Så hvordan gør jeg alle disse filer? Star. Så i filen en, jeg har kat. Jeg sandsynligvis kunne have kaldte det noget bedre, fordi der ligner linjenumre eller noget. Men i fil, jeg har en linje med kat. I fil to har jeg en linje med kat. Så nu kan jeg se inde fil én og se oh yeah, at filen havde kat. Notice fil tre ikke blev matchet fordi katten ikke er derinde. Jeg kan grep for meow. Kun fil to har meow. Så dette kan du kombinere, igen med -r, som som jeg sagde før ofte betyder rekursive. Og så jeg kan komme op her, grep -r for enhver instans of-- lad os redigere denne ene bare at smide en kat derinde. Så grep -r for enhver forekomst af kat i hele denne mappe. Og det vil rekursivt søge blandt alle undermapper. Så i Baz, der er kat. I temp / 2, der er kat. Og i temp / 1 der er kat. Så det er at søge inden for filer. Nu kan du også bruge et fund. Og så finde er specifikt om leder efter filer med et bestemt navn. Så lad os gøre noget mere. Lad os gå ind i downloads. Touch dog1. Touch cat2. Touch cat_dog. Touch catcat. Så jeg ønsker at finde alle filer med hund i navnet. Så finde, og for den længste tid jeg aldrig husket hvordan finder arbejdede, indtil jeg endelig læse noget, der gjorde det så klart. Så find automatisk rekursive. Du behøver ikke at passere en -r. Så find prik. Vi har ikke talt om dot endnu. Ud fra følgende betragtninger dot dot altid betyder én mappe op. Dot betyder altid den aktuelle mappe. Så jeg kunne rm -r prik i samme måde kan jeg rm -rf *. I sidste ende de opnå det samme. rm -rf prik kommer til at fjerne hele det nuværende bibliotek. OK, som jeg ikke ønsker at gøre der. Men find prik. Så rekursivt søge den aktuelle bibliotek, og nu alt efter dette er en flok af flag, som du bruge til at udelukke ting fra afkastet. Så find prik returnerer alt, hvad det kan finde fra den aktuelle mappe. Det er alle filerne rekursivt søgning. Vi vil se nogle af dem i en anden. Men i tilfælde af at du spekulerer på, hvordan jeg gør at så Command K, i det mindste i min terminal i Mac reddede. Kontrol L generelt rydder det for enhver form for terminal. Du kan også skrive klart. Og hvis du nogensinde får ind i en underlig scenario-- Det er sket for mig et par time-- hvor farverne på dine prompter er alle rodet op, eller du er ikke i stand til at se noget der indtastes, når du skriver, fordi sommetider som baggrundsfarve er indstillet den samme som forgrundsfarve og nu kan du ikke se de skrifttyper. Reset er noget, der bare nulstiller du til standard sort baggrund, hvid front, eller hvad du indstille dem til. Så hvor var vi? Find prik. Så nu er alt forbi dette punkt begrænser resultaterne til noget, der matcher det givne mønster. Så her jeg ønsker at søge alt med navnet kat. Jeg fik intet. Hvorfor er det sådan? Nå, jeg bare søger efter noget med nøjagtigt navn kat. Hvis jeg ønsker at søge noget der har nogle mønster, og cat-- citater teknisk er ikke nødvendigt, men jeg smide dem derinde. Så nu er det finder catcat fordi det er det eneste, der har en vilkårlig mønster efterfulgt af kat. Jeg kan sætte katten *, og nu finde catcat, cat_dog, cat2, fordi disse er alle ting med kat i begyndelsen efterfulgt af noget. Du kan kombinere dette. Hvis du ønsker at søge efter alle C-filer at du har, kan du gøre * .c. Vi har blah.c her. Så det er et fund værker. Du kan søge. Det har en hel bunke af flag for yderligere begrænsninger. Og en af ​​dem, lad os sige -D. Så frarådet. Åh, det er ikke hvad jeg vil. Ikke -d. Type D. Så find dot - typen d. Så hvad der bare gjorde, er jeg søger for alle filer i det aktuelle katalog med en-- d står for directory-- bibliotek type. Dette returnerer alle mapper i det aktuelle bibliotek. Og type F er alle regelmæssige filer, alle ikke mapper. Så det er bare en eksempel på andre måder, du kan begrænse den anden søgning end blot navnet på filen. Det har været 30 minutter. Still going. ALLISON: Jeg vil brise gennem. Det vil være fint. ROB BOWDEN: Så nogle andre ting. Nu bang, udråbstegn. Så generelt means-- Nå, lad os se et eksempel. Så! F, hvad der er at gøre? Nå det ser ud til at have gentagen fund dot -type f. Hvad med! G? Det er bare grep -r kat *. Så bang, du kan bruge til at gentage en nylig udført kommando. Så hvis jeg skriver! GRE, går det til at re-run de kommandoer, der begyndte med gre mest for nylig. Og du kan se alle disse kommandoer med historie. Så historie. Disse er alle kommandoer Jeg har kørt i dag. Og ja, det er ikke bogstaveligt begrænset til i dag, men jeg har kun brugt dette apparat som i dag. Det er din hele den historien om din bash shell, undtagen det skærer på et tidspunkt. PUBLIKUM: Hvad sker der, hvis du gør historie [uhørligt] kommando og en fejl i resultatet vil stadig udskrive til-- ROB BOWDEN: Ja, hvis der er en fejl i en af ​​disse commands-- så lad os sige, det er en fejl kommando ikke fundet. Stadig vises i historien. Ok. Andre spørgsmål om noget? Så det er bang. Nu virkelig nyttig kommando, mand. Så det giver dig manual for en given kommando. Så lad os sige mand ls, så dette viser mig ls. Den opregner mappe indholdet. Og det er her, jeg kan se, at der er disse forskellige flag, der findes. Så vi kan se, at ls -l eksisterer hvis vi skulle læse det. ls -l giver mig denne komplet liste over mappe med, hvem der ejer filen, størrelsen af ​​den fil, den modificerede tidsstempel. Så ls -a er en anden en, som du måske faktisk bruger lidt ofte. -al er min mest almindelige flag denne sidste ls. Så -a, bemærk der er en masse flere filer end bare ls. ls -a. Hvad er fælles med alle disse filer? De starter med en prik. Så dette er en konvention i Linux, der filer, der begynder med et prik er skjult. Så det betyder bare, at når vi bare lige ls, eller vi søger denne mappe ved hjælp af finderen tilsvarende, eller Windows Explorer tilsvarende, at vi ikke ønsker at se disse dot-filer. De bare forurener opfattelse af tingene. Så de er skjult medmindre du specifikt anmoder dem med noget som -a. Så jeg kan cd i .local, og jeg kan se at der selv er en mappe med et fælles bibliotek, og applikationer og blah blah blah. Så dot, filer, de er bare skjult. OK, så andre vigtige. Jeg har et par jeg kan springe. Lad os bare rigtig hurtig snak om de filomdirigering ting. Så der er et helt kompleks serie af ting, du kan gøre med disse, men blot for at se dem, lad os sige, ekko. En anden kommando. Virkelig dum kommando. Alt det gør, er print, hvad jeg fortæller det til. Så echo hej. Det bare lød goddag til skærmen. Hello world. Echoes hej verden. Så en kommando eller et symbol at bash forstår er det større end symbol, og der er output til en fil symbol. Så hvis jeg output dette til foo, er der nu en fil kaldet foo, indersiden af som er hello verden. Så bemærke, at når jeg tilslutter mig hello world røret ind foo, det ikke echo hej verden. I stedet blev det sat ind i fil foo. Og en anden kommando bare at smide det på dig, kat. Det er en nem måde at bare helt vise indholdet af filen så jeg ikke behøver at åbne en teksteditor til at se den. Så indholdet af foo fil er hej verden. Og jeg kunne kat blah.c, indholdet dette. Igen, disse er kommandoer det, ikke forventer, at du har dem alle udenad. Ideen er, du har set dem. Måske du arbejder på noget, og du er ligesom jeg er træt af at åbne denne fil. Jeg ville ønske, jeg kunne bare se på indholdet virkelig hurtig. Du kan gøre det, så se tilbage og sige åh jeg huske noget lignende der eksisterer, og det er kat. Så vil en fil. Nu er der ikke rigtig nogen god eksempel på læsning fra en fil endnu. Hvad er noget, der tager noget fra standard i? Nogen simpel Linux kommando? Når vi kommer til det, i et par uger alle de piece-- godt, denne uge du har et stykke, hvor du begynder at tage input fra brugeren. Og så normalt du skriver at input på tastaturet. I stedet for at skrive, at input på tastaturet, kan du i stedet rør ind fra en fil så når du gør Mario, ./mario, rør i fra en given fil, og der kommer til at køre Mario programmet. Ikke forventer input på tastaturet, det er i stedet bare at læse linjer fra foo fil. Så større end foo sætter det ind foo-filen, og mindre end foo tager ting fra foo filen og bruger disse som input til dette program. Og bare for at se det, kunne vi også echo foo bar baz, og så i stedet for en større end, lad os gøre to i foo. Hvad betyder det så? Det bare føjer til filen. Så i stedet mærke til hvis jeg ekko blah ind foo og derefter kat foo, det er bare bla. Så når du output til en fil, er det helt overskriver den fil. Hvis du blot ønsker at tilføje, dobbelt [? gradere. ?] Og sidst er røret. Pipe Gets meget mere kompliceret, hvor det tager outputtet af en kommando og fører det ind i den næste kommando. Så nogle fælles ting, historie. Så uh, jeg ikke ønsker at se på dette. Vis mig alle kommandoer i min historie hvor jeg grep-ed for noget. Nej, det er forvirrende. Vis mig alle kommandoer, hvor jeg finder. Alle finde kommandoer jeg nogensinde løb. Så historie. Nu historie udgange til den screene denne liste over kommandoer, men jeg ønsker ikke at output det til skærmen. I stedet har jeg tænkt mig at rør det til grep. Så lad os grep for alle tilfælde af fund. Så nu i stedet for grep udtagning input i stedet of-- grep er i stand til at håndtere så input-- vi er anvendelse grep smule anderledes her. Så i stedet for at skrive listen over ting, vi ønskede at søge efter og nævnte grep tager som input. Så hvis jeg bare grep finde, det venter for mig at skrive ting. Så kat hej finde. Hej. Find. Læg mærke til hver gang jeg skriver finde Det erkender, at jeg har skrevet fund. Så i stedet for dette, vil søgning filer til Søg. Så historie vil nu output en liste over alle kommandoer. Vi lægger det, at produktionen, og vi fodrer det til grep, og så er det spytte ud alle tilfælde af fund. Grunden til at jeg sagde, at det ville være forvirrende er, hvis I-- det er stadig forvirrende. Hvis jeg grep til grep. Bemærk, det er temmelig meget altid viser kommandoen jeg bare løb, fordi denne kommando selv har grep inde i den. OK, så eventuelle spørgsmål om noget? Og jeg vil overføre det over på dette punkt. Forhåbentlig er dette en nice oversigt over alle kommandoer at du ikke behøver at have udenad, men disse udgør en solid 95% af, hvad jeg gøre på kommandolinjen. Også huske på, at kommandolinjen selv, bash er et programmeringssprog, og så når du kommer ned til det, du måske ønsker at gøre virkelig komplekse ting. Og så det har ting som sløjfer og hvis'er, og alle af dem at du kommer til at vænne sig til med dine programmeringssprog. Men det er uden for omfanget af dette afsnit. OK, så ingen spørgsmål? ALLISON: Ingen? GABRIEL: Skal du at-- ALLISON: Jeg kan gøre det på min, hvis du ønsker. Vi kan se, hvad der sker. ROB BOWDEN: Afsted til Allison. ALLISON: Woo. Du er en hård handling til følge, Rob. Vil du have mig til at skifte med dig? Eller du fik, OK. Jeg har tænkt mig at prøve og ikke helt være så langvarige der. Lad os se om denne vilje arbejde på den måde, jeg ønsker det. Måske? Haha! Ja. Så jeg vil bare meget hurtigt gå igennem variabler, løkker, betingede, og en lille smule på den compiler. Hvis du har spørgsmål på enhver tid, skal du stoppe mig. Disse fyre vil minde mig om at gentage dit spørgsmål i tilfælde jeg glemmer, men bør ikke være alt for dårlig. Så variabler, ja. Vi har ingen en af ​​dine Scratch stykker her. Jeg er sikker på de fleste af jer, hvis du havde en slags spil som du har oprettet med Scratch, du havde at holde styr på noget lignende score, eller tid, eller noget lignende. Så dem lyse orange stykker, som vi ser der er blot Scratch form af variabler, og du vil helt være ved at bruge variabler hele Deres programmer. Hvis du ikke er, jeg er ikke rigtig sikker på hvad du laver. Men alligevel, store ting, definere variable. Med C hver variabel har at have en type erklæret, så jeg gav dig en meget generel øverst. Så du har din skrive og derefter uanset du beslutter dig for at ringe til din variabel. Så i dette tilfælde, type på din variabel liste. Vi har tre eksempler. Char nogle kvalitet, en A, hvilket er, hvad Jeg er sikker på, du ønsker alle at få i denne klasse. Du kan definere flere variabler på én linje så længe de er alle af samme type, som er vores andet eksempel er hvor du har tre variable, x, y og z. De er alle flåd. Og så kan man også i denne sidste eksempel med int score og nummer af teams, kan du initialisere dem lige der. Så i midten eksempel, hvor vi bare flyde af x, y og z, dem initialiseres ikke endnu. De har ingen værdi. Eller de har skrald værdier. Og hvis du prøver og bruge dem, compileren vil råbe på dig. Du er nødt til både erklære og initialisere dine variabler. Så i dette sidste, vi gør begge dele. Vi erklærer variabler af score og antallet af hold, og vi initialiseres dem, hvilket giver dem deres oprindelige værdier på 7 og 4 hhv. Cool. Alle godt? Awesome. OK, så nogle konventioner. Hvis du fyre har læst gennem stil 50, disse er bare ting, som vi gerne vil for du at implementere i din stil. Så meningsfulde navne. Hvis du begynder at kalde tingene bare x, y og z, især som du kommer ind i længerevarende programmer, er du sandsynligvis vil forvirre dig selv og være ligesom hvad er denne variabel henviser til. Jeg har ingen idé om, hvad dette betyder. Så hvis det er meningen, at holde en score, kalder det score. Hvis det er meningen, at holde nogle svar eller resultere i, give den et navn som dette. Efter sløjfer, som vi vil komme ind i det næste dias, enkelttegnsforkortelser variabler er fint. ROB BOWDEN: I, J og K er bare konventioner for efter sløjfer at alle forventer dem at blive kaldt i, j og k. Du kan ringe them-- jeg se rækken kolonne eller række opkald til tider for to indlejrede løkker og det er også slags standard. Men i og j er helt forstået. ALLISON: Ja, jeg og j du er helt fint. For klarhedens skyld gerne i nogle af dine P-apparater, det kan være fornuftigt at have mere beskrivende ting der bare at holde styr på den. Men jeg tror, ​​I, J og k tror jeg langt de fleste af os alle brug. ROB BOWDEN: Med disse konventioner, så stil er vigtig. Det er en af ​​de fire akser hvor du er gradueret, og det er så nemt at bare gå over din P ved udgangen, og sørg at der ikke er stilistiske fejl. Så sørg for at du tabbing korrekt. Sørg for, at dine variabler er navngivet. Efterlad nogle kommentarer. Det er meget let at få disse punkter. Du behøver ikke at tænke på noget for at få disse punkter. Du behøver ikke at regne noget ud. Det er bare at gøre det ser pænt ud. ALLISON: I virkeligheden, vi har stil 50, som vil fortælle dig, hvor du griseri op, hvis du rode op på stil og vil fortælle dig præcis, hvad du skal løse, og hvordan du skal løse det. Det er også kun godt at nævne at det er selvfølgelig politik at hvis du er på kontoret timer og din kode er noget rod, Vi kan afvise at hjælpe dig, indtil det ser pænere. Så start ud til højre, holde konsekvent stil, du også bare at gøre jeres liv en hel del lettere, når du forsøger at gå gennem debug. Hvis du prøver at finde ud af hvor du mangler en klammeparentes og de er over det hele, er du bare gøre dit eget liv sværere. Så være i overensstemmelse med stil. Jeg lover, at det vil gøre dit liv lettere. Det vil gøre vores liv lettere. Alle vil være meget lykkeligere. Og det er hvad du ønsker. GABRIEL: Din karakter vil være højere. ALLISON: Ja, og din klasse. Hvis din TF er ligesom dig, tendens til at være gunstige. Okay, og så bare det andet punkt her. Konsekvent initialiseringer. Så som vi har set, kan du erklære og initialisere ting. Flere variabler på samme linje. Én ting vi vil gerne have dig ikke at gøre, er at erklære nogle variabler og ikke initialisere dem på samme linje, som du initialiserer andre. Så i tilfælde, der gjorde overhovedet ingen mening, vi har eksemplet her hvor vi erklære int'er i variabler af kvartaler dimes og småpenge, men kvartaler og øre har ingen indledende værdi. Vi har ikke initialiseret dem, men lige i midten der vi allerede initialiseret Dimes til 0. Så enten gøre kvartaler, dimes, småpenge. Eller gør kvartaler lig med 0. Dimes lig med 0. Øre lig med 0, eller hvad disse indledende værdier. Store ting med stil, være konsekvente. Når du er i tvivl, være konsekvente. Men følg vores stil guide også. Cool. Alle godt der? PUBLIKUM: Hvor er den stil guide? ALLISON: Stilen guide er on-- hvad er hjemmesiden? GABRIEL: Jeg synes det er manual.cs50.net/-- ALLISON: Style? GABRIEL: Style. Yep. ALLISON: Ja. Så spørgsmålstegn, hvor er stil 50. manual.cs50.net/style. Ja? PUBLIKUM: Hvis vi definerer variabler, er det OK hvis vi sætter ligesom [uhørligt] ligesom int score og derefter int mål. Så ville du sige, at vi nu har fik at definere dem sammen? ALLISON: Så spørgsmål skal du har redundant kode når du definerer variabler som int score og på næste linje int spil? ROB BOWDEN: Der er absolut tilfælde, hvor overflødige kode er dårlig. Jeg ville ikke overveje at redundant kode. Jeg har næsten aldrig erklære multiple variabler på samme linje nogensinde. Og hvis noget, er det fordi normalt jeg forlader en slags kommentar forklare, hvad variablen er for. Så jeg vil sige int score skråstreg skråstreg. Holder styr på hvad som helst. I alt skråstreg skråstreg. Så det er meget grovere på den måde at sætte dem alle på samme linje. Jeg har bare aldrig sætte dem på samme linje. ALLISON: Jeg har lyst til, det er personlige præferencer på dette punkt. PUBLIKUM: Betyder det gå til for loops og ting også? ROB BOWDEN: Ligesom indeni? Ligesom int jeg lig 0 komma længde er lig noget? At du ikke har et valg. Med efter sløjfer initialiseringen part-- så du måske kun har set int jeg lig 0 semikolon i mindre end hvad semikolon i plus plus. At int i er lig med 0, teknisk kan du også gøre, hvad vi har set før med komma syntaks. int i lig 0 komma j lig med 3 komma k lig med 5. Du behøver ikke et valg at opdele at op i flere linjer, og det er standard. Se det er fint. ALLISON: Awesome. Nå, praktisk segue ind løkker. Så ja, her har vi nogle eksempler af sløjfer, som du fyre så i Scratch. Og naturligvis alle disse kan bare blive genskabt i C. Og de dybest set giver dig mulighed at gentage nogle afsnit kode indtil en bestemt tilstand er opfyldt, som vi vil komme ind lige efter at tale om sløjfer med betingede. Så vi har tre hovedtyper. For, mens og gøre, mens, som vil vi alle gå igennem lige nu. Så første er for sløjfer. Så for nogle tilstand, udføre denne blok af kode. Vi har denne cool lille diagram her nederst. Men dybest set du har i dit for, at første linje, du kommer til at initialisere dine variabler. Så som vi talte om, jeg er lig med 0 eller i er lig med 10. Uanset hvad du har brug for at variabel til at være det vil blive initialiseret der, erklæret og initialiseret til en vis værdi. Så vi har nogle betingelse, at der sker at være kontrollere vores variabel mod noget. Tilfældet det typiske tilfælde, hvor måske du ønsker denne sektion af kode at udføre fem gange. Så ville vi have int Jeg er lig med 0, og vi ønsker det skal være, når jeg er mindre end 5. Så er denne betingelse kun kommer til at kontrollere, at hver gang. Såfremt denne betingelse evalueres til sand, er det kommer til at køre koden, hvilket er nøjagtigt hvad denne lille diagram viser. Og så det udfører det. Den opdaterer en variabel, hvilket er, hvad vi ser i den sidste del af vores for loop initialisering der. Så det vil bare holde gør dette indtil denne betingelse ikke er opfyldt, og så vil det gå ud løkken og fortsætte går videre med resten af ​​dit program. Alle godt der? Cool. Så her er et eksempel, meget lignende til noget, jeg bare talt om. Så vi bare ønsker at udskrive dette er CS50 10 gange. Så du ser her har vi vores til, og så vi initialisere variable i at være lig med 0. Vores tilstand kontrol at det er mindre end 10. Så evalueres til sandt, når vi først starte, og derefter opdaterer vores variabel hver gang, at det faktisk udfører og udskriver dette er CS50. Og vil afslutte efter 10 gange. Cool. Så mens loops er op næste gang. Og som du kan se her, vi bare have nogle mens denne Stand- spørgsmål? PUBLIKUM: Hvordan kan jeg springe faktisk bare ikke ét nummer, men to numre [uhørlig] Jeg plus plus plus? ALLISON: Så spørgsmålet var, hvordan kan du opdatere din variabel ved mere end én på et tidspunkt. Så jeg plus Plus opdatering af en hver gang. Hvis du ønskede at opdatere den ved to, kan du gøre i plus lig med 2. ROB BOWDEN: Har du set plus lig i foredrag endnu? PUBLIKUM: [uhørligt]. ALLISON: Det er effektivt samme ting, som jeg svarer jeg plus 2. Så det kommer til at tage det og opdatere den ved to hver gang. Plus lig er bare noget vi kalder syntaktisk sukker. ROB BOWDEN: Ja, der findes for temmelig meget alle aritmetiske operatorer. Så jeg gange lig med ville fordoble antallet. j kløft lig med 3 er det samme som j lig j divideret med 3. ALLISON: Eller minus er lig med 2 ville formindske jeg med to hver gang. ROB BOWDEN: Selv mod ligemænd. Du har ikke set bitvise operatører, men caret lig og-tegn er lig med, alle de eksisterer. ALLISON: Så en masse gange, især med din første par P-apparater, du vil være sandsynligvis forøgelse af én, så jeg plus plus, j plus plus er alle ting, du vil typisk at være bruger. Men at opdatere betingelse er helt inden for din kontrol. Du kan opdatere det uanset intervaller eller på den måde, du vælger at. Måske har du selv ønsker det at være et tilfældigt tal til tider. Men ja, der er masser af ting, du kan gøre med det. Du er ikke begrænset til i plus plus. ROB BOWDEN: Bare så du vide at det eksisterer, er det også eksisterer i en anden form, plus plus jeg. Så hvis du nogensinde søger online og tilfældigvis til at se plus plus jeg, temmelig meget betyder det samme. ALLISON: Cool. Godt? Awesome. Så mens sløjfer. Meget ens. Du har nogle tilstand. Den vigtigste ting at bemærke her er i stedet for at tre forskellige dele at sætte op, har vi en. Vi skal bare have nogle tilstand der bliver kontrolleret. Og på samme måde, så længe denne betingelse evalueres til sand, din kode kommer til at køre. Og hvis det er falsk, er det vil opsige, flytte til den næste del af dit program. Så dette er en slags like--, hvad der er et godt eksempel på kontrol for nogle normale tilstand? GABRIEL: Mens sandt. ALLISON: Du kunne gøre, mens sand. Tja, 1 er lig med 1. ROB BOWDEN: Du kan gøre while-- lige i stedet for at anvende en for-løkke, du kan altid kode en for-løkke i en while-løkke, så jeg større end 0 eller mens jeg mindre end 10. ALLISON: Awesome. Og så har vi gøre, mens loops, som er stor for bruger validering, hvor du ønsker at få noget fra din bruger, se om det er gyldigt, og derefter fortsætte derfra. Så en af ​​de ting at vide, er med en gøre, mens er, at det kommer til at udføre, og så vil det re-execute hvis denne betingelse er opfyldt. Så sandsynligvis den bedste måde at gøre dette er blot for at se et eksempel her. Så som jeg lige har nævnt, bruger validering er virkelig useful-- eller er gøre whiles virkelig nyttigt med brugeren validering. Så dette er bare at re-bede nogle bruger indtil de træder et positivt tal, som kan være nyttige for din P sæt denne uge. Og så i dette tilfælde, hvor vi indledningsvis køre dette program, det kommer til at udskrive indtaste et positivt tal. Det kommer til at få nogle input fra brugeren, og så det kommer til at kontrollere at input mod tilstand at du har sat for den. Så i dette tilfælde kommer til at kontrollere. Det kommer til at sige, OK, er vores input negative, eller er det 0 eller negativ, hvilket ville være ugyldig. Så det ville re-prompt. Spørgsmål? PUBLIKUM: Er det den samme derefter som en mens løkke, hvis du lige har kopieret denne kode og sætte det [uhørligt] mens loop? ALLISON: Så var spørgsmålet ville dette være den samme som blot et stykke løkke, hvis vi bare kopiere mens løkken ovenfor. Så i dette tilfælde, at din mens løkke er kommer til at kontrollere tilstanden først. Så i dette tilfælde, hvis vi forsøgte at skrive så bare en while-løkke, det vil sige, mens input er mindre end én. Men vi har ikke en indgang til det. PUBLIKUM: Hvis du [uhørligt] mens løkke herunder denne kode, men så skal du klarede koden over while-løkken også. Du har lige haft denne kode [Uhørligt] while-løkke. ALLISON: Det ville være de samme ting, ja. Så du kan bare write-- i stedet for at have en do-- ja. GABRIEL: Men det er mere elegant. ALLISON: Ja, det er mere elegant. Du kan komme ind i design og whatnot, men ja, kan du helt gøre det. Andre spørgsmål? OK, cool. Så vi har talt meget om betingelser med alle disse sløjfer, vi har, så vi faktisk at komme ind forhold i booleske udtryk. Igen, du bruge disse i C, så bare slags overgang fra mere grafisk brugerflade faktisk kodning. Cool, så stor en, hvis. Dybest set bare giver os mulighed for at indføre vis logik ind i vores program og kontrol SYS forhold. Så i dette tilfælde, OK, er n større end 0? Ja, det er, så du kan udføre dette. Det er bare at tjekke nogle betingelse, at du har sæt, som jeg tror, ​​vi er alle komfortabel med at kontrollere forhold. Cool. Så hvis ellers er din anden, du kan sige OK, hvis dette er sandt, gøre dette første ting. Ellers jeg vil have dig til standard og gøre noget andet. Ligesom i dette tilfælde enten du vælger en positivt tal eller et negativt tal. Du har kun to muligheder. Du har brug for det til at udføre uanset af hvad dine brugeroplysninger indgange. Så du kan sige godt, er det større end 0? Cool. Udskriv et positivt tal. Hvis det ikke er, kan du udskrive et negativt. Alle godt? Og så én ting at erkende, er at hvis hvis betingelsen er opfyldt, det andet vil aldrig også udføre. Kun én af disse vil udføre ad gangen. Så det er en afvejning. Du behøver ikke komme til at have begge dele. Du har enten den første betingelse. Du har enten hvis eller andet, ikke begge dele. Som derefter kan gøre tingene endnu mere kompliceret, fordi du kan gøre, hvis, ellers, og andet. Så i dette tilfælde, vi har tre betingelser. Og igen, kun en af ​​disse er kommer til at ende med at blive henrettet. Så du kan være undrende godt, hvad nu hvis du har noget, kan opfylde to af disse. Måske uanset hvad du indtaster opfylder både betingelsen for hvis og andet, hvis. Kun ting, der kommer til at køre ALLISON: Så snart finder noget at den opfylder betingelsen for at evalueres til sand, det er hvad det kommer til at køre og intet andet. Så hvis du havde er dette tal mellem 0 og 5 for din første, eller er dette tal mellem 3 og 5 for andet, hvis en del, og du indtaste den number-- Jeg sagde 0 og 5 og-- 4. Det kommer til at ramme den første. Det kommer til at sige OK, dette tal ligger mellem 0 og 5. Udfør og forlade. Det vil aldrig skud afsted anden mulighed. Cool? Awesome. OK har vi også skifte udtalelser, hvis du ønsker at få endnu more-- eller ked af det, switch er næste. Jeg får forud for mig her. Igen, flere hvis blokke hvor som jeg lige har sagt er, så snart du finder en betingelse der er opfyldt, og en hvis ellers hvis andet, det efterlader. Hvis du har brug for at tjekke flere ting, du er lyst til at bruge dette, fordi det vil kontrollere hver gang her. Så det vil løbe gennem og hvis den er større end eller lig med 90, det kommer til at udskrive det. Og det vil køre igennem og kontrollere hver enkelt af disse. PUBLIKUM: Så det ville være mere buggy end [uhørligt]. Ville det være ligesom [uhørligt]? ALLISON: Spørgsmålet er ville dette være buggy eller betyder dette gøre hvad du vil. Det er virkelig afhænger af, hvad du ønsker fra dit program. PUBLIKUM: Jeg mener ligesom hvis du lægger 90 i. ALLISON: Hvis du lægger 90-- PUBLIKUM: [uhørligt]. GABRIEL: Du kommer til at få to ting. ALLISON: Du kommer til at få to ting. Ja, to. ROB BOWDEN: Two? ALLISON: Nej. ROB BOWDEN: Four. Hvis du sætter 90, det vil sige, at du fik en A, du fik en B, du fik et C, du fik en D. PUBLIKUM: [uhørligt]. ALLISON: Right. Så jeg afhænger af, hvad du ønsker fra dig program. Nogle gange er du nødt til at kontrollere flere ting. Du får meget dybere ind i, hvad godt design er, som du går fremad. Det vigtige ting at indser er, at dette vil tjekke alle fire betingelser her. Såfremt dette var en hvis ellers hvis ellers hvis ellers ville det ramte den første sag det ville udskrive du fik en A og skal gøres. ROB BOWDEN: Selv hvis vi besluttet at ændre dette til, hvis og større end eller lig med 90, hvis og større end eller lig med 80, og mindre end eller lig med 89, hvis n er større end eller lig med 70, og n er mindre end eller lig med 79, så der vil være korrekt. Det vil gøre, hvad vi vil, men det stadig kontrollerer hver eneste det. Så mens det i første scenario, hvis vi indtaste 90 med blot hvis ellers hvis andet, hvis og vi går ind 90, så det kommer til at korrigere. Det vil kontrollere den første én, print du fik en A, springe alt, fordi det allerede fundet en, der virker. Alle sager er gensidigt udelukkende baseret på, hvis ellers hvis ellers hvis. Så det vil udføre først, hvis, så er det gjort. Det vil gå til slutningen. Hvorimod hvis vi ændrer dette er hvad jeg var sige med mindre end eller lig med 89. Det kommer til at kontrollere den første. Det vil udskrive. Det vil kontrollere den anden. Det kommer ikke til at udskrive. Kontroller tredje. Ikke kommer til at udskrive. Tjek den fjerde. Går nu for at udskrive. Så i dette tilfælde, den ellers hvis udgave, da disse sager er gensidigt udelukkende, det er bedre anvendelse, hvis andet, hvis ellers, hvis fordi det vil have færre kontrol af de betingelser, end denne version. ALLISON: Awesome. Så en anden ting, vi kan gøre, er at skifte udsagn. Dybest set en switch-statement tager i nogle variable, i dette tilfælde er n, og bestemmer, hvilke tilfælde at udføre. Så dette er også en, hvor dine sager bør være slags gensidigt udelukkende. Så i dette tilfælde, hvis vi, at vi får en en, er det kommer til at matche uanset at variable-- uanset værdien af ​​n er et af disse tilfælde, så 1, 2, eller 3, og udskrive den tilsvarende linje. Og så hvis du bemærker her, vi har også en standard som du kan af tænke på som dit andet. Så hvis du vælger et andet nummer foruden 1, 2 og 3 i dette tilfælde det bare at gå at udskrive ugyldig. Beslutte, hvornår at bruge hvis'er versus hvis elses versus kontakter går at være noget, du fyre vil se design klog, når du begynder at skrive mere komplicerede programmer, og Der er ingen hårde og hurtige regler af hvornår du skal bruge dem. Det er virkelig afhænger af din kontekst. ROB BOWDEN: Og lige at smide det derude da det er mere behageligt sektion. Afbrydere, de har tendens til være-- så du er begrænset i række måder, du kan bruge dem, fordi hvis'er, tilstanden kan være temmelig meget noget, du ønsker. Med skifter tilfælde skal være tal, eller teknisk de kan være tegn, men chars, som vi skal se, er bare tal. Så de er nødt til at være tal, men skifter er virkelig mere effektiv end hvis else if else if, fordi selv tage eksemplet before-- godt, eksempel klasse synes godt. Jamen så lad os sige her, at vi i stedet gøre dette som en hvis ellers hvis ellers hvis scenario. Så hvis n er lig er lig med 1, udskrive du valgte et lavt antal. Hvis andet, hvis n er lig med lig med 2, du valgte et medium nummer. Else hvis ligemænd lig med 3, høj. Else ugyldig. Så lad os sige det var vores scenarie. Så lad os sige vi træder 4, så vi forventer ugyldig. Den måde, at hvis ellers hvis ellers hvis tilgang kommer til at arbejde, er kontrollerer den første betingelse. Det er ikke tilfreds. Så vi kontrollere den anden betingelse. Det er ikke tilfreds. Tjek den tredje betingelse. Ikke tilfreds. Så vi går til andet og udskrive ugyldig. Den måde kontakten værker er det kompilerer ned ind i, hvad vi vil at kalde et hop tabel. Den vigtigste idé væsen at når du indtaster 4, det kan straks gå til standard. Det behøver ikke at tjekke am Jeg tilfælde 1? Nope, det er ikke det. Case 2? Nope. Case 3? Nope. Standard. OK, dette skal være, hvor jeg ønsker, og derefter udføre det. Nej, det straks springer til standard. Eller det jeg skriver 2, er det straks vil gå til 2 uden at skulle gå igennem tilfælde 1. Så på denne måde, realistisk i dag, der er ikke så meget af en effektiviseringsgevinst. Normalt computere er temmelig hurtigt, og det er ikke så stor. Men det er sådan, at afbrydere er hurtigere. Hvis du virkelig forsøger at optimere, skal du bruge en switch. ALLISON: Cool. Og så har vi ternære operatør. Så jeg ved, jeg nævnte tidligere ordet syntaktisk sukker. Så det er bare ting, der gør din kode meget mere kortfattet. Så dette er en af ​​disse sager. Så ternære operator er spørgsmålstegn kolon, som vi ser i line snor s er lig med n større end 100 spørgsmålstegn høj colon lav. Så dybest set, hvordan det fungerer, er det n er større end 100 er en betingelse. Så jeg tror, ​​det kan give mening. Det er ligesom at stille et spørgsmål. Det siger åh, er n større end 100. Hvem ved? Og hvis det evalueres til sandt, det kommer til at give dig den første ting, der er opført der, hvilket er højt. Ellers er det kommer til at give dig lav. Så dette er bare en meget simpel og effektiv måde at gøre ligesom en if andet. Det er alt dette er. Og hvis vi skulle skrive dette som hvis ellers betinget, det ville være, hvis n er større end 100, tilbage høj. Else returnere lav. Dette er blot en meget mere kortfattet måde at skrive det. ROB BOWDEN: Så dette særlige eksempel er, når du laver noget som denne, er dette mønster hvor jeg bruger ternære meget ofte. Så vi har ikke talt om omfanget endnu, men jeg hader at se streng s semikolon. Hvis n er større end 100, s er lig med høj. Else, s lig lav. Så det mønster, de fem linjer kode bogstaveligt 100% af tiden kan overføres til det var oppe med en tredelt. Så ternære én linje kode. If andet, fem. Det er et eksempel, som jeg pege ud hver eneste gang. Dette ville godt sted for et ternært operatør. Det er så rene. Men folk har tendens til aldrig at bruge det. ALLISON: Tag det væk Gabe. GABRIEL: Så nu jer alle lært i forelæsning denne uge at alt i en computer er binær, right? Ligesom lamperne her. De kan enten være tændt og slukket. Og ved alt, mener jeg bogstaveligt talt alt. Nogle tal og tegn, og strygere, og selv den kode, som du skriver, når det bliver kompileret til maskine kode og den slags, så det hele kan koges ned til 0'er og 1 '. Og så når vi har at gøre med heltal, som er noget, der er teknisk meget enkel, bør vi være i stand til at gøre ting ligesom at tilføje dem, som er sandsynligvis en af ​​de simpleste ting du kan gøre for to heltal, right? Så addition og subtraktion virker lige ligesom det fungerer i decimal notation, undtagen her er det binære, right? Så det er i bund to. Så tilsættes 1 plus 1. Det giver 0 og 1 bærer over. Og bare holde gør det, så nu kommer mere interessant spørgsmål. Vi ved, hvordan til at repræsentere alle positive heltal i computeren, men lad os gøre dette til en øvelse. Lad som om du fyre er alle i 1960 eller noget forsøger at skabe en computer, og du er nødt til at komme op af en måde at lagre minus 1, for eksempel, eller minus eventuelle heltal for den sags skyld. Hvordan ville du gøre det? Nogen idéer? Bare smide noget på mig. Ja? PUBLIKUM: [uhørligt] udpege en særlig, hvis din [uhørligt]. GABRIEL: Du kan udpege en særlige bit, som vil være 0 eller 1. Lad os sige en, hvis det er positivt og 0, hvis det er negativt. Og derefter resten af ​​bitten bare for at gemme nummeret. Cool. Så det er en meget god idé. Vi har, ved jeg ikke, 200. Og hvis den første bit er tændt, så er det plus 200. Hvis den er slukket, er det minus 200. Cool. Der er kun en lille Problemet med dette, som er, hvis vi prøver at opsummere. Så forestil dig, vi har 11111 her, og vi summen dette med 00100 whatever. Hvis de to er positive, det er fint. Men hvis en af dem er negativ, ligesom lad os sige, at denne bit her er den, der er ansvarlig for-- Jeg har tænkt mig at lave en separate-- så denne ene betyder, at dette nummer her er positiv. Dette betyder, at denne nummer her er negativ, right? Men så når du er kommer til at opsummere dem, du har brug for en hvis erklæring siger oh hvis dette er 0, så min sum vil være noget andet, ikke? Så der er en anelse mere smart måde at gøre det, som kaldes tos komplement. Så dybest set, hvad vi gøre, er at vi definerer minus 1 at være ting, at hvis vi tilføje op til 1 giver os 0. Lad mig gentage det. Så lad os sige, at det her er 1. Hvad er den ting, naturligt i positive heltal tilføjes der giver os 0? Hvad hvis vi forsøger at føje den til dette nummer? Vi kommer til at have-- OK, så lad os tilføje. Vi kommer til at have 1 plus 1 er 0, og så bærer over. Og så vil vi få 0 igen. Jeg bliver forvirret. Og du kommer til at få 0 og 0 og 0 og 0 og 0 og 0. Masser af 0'er. På den allersidste, vi er ikke vil være i stand til at bære det over, fordi lad os sige vi kun beskæftiger med en byte, så kun 8 bit. Så hvad computeren gør som standard er bare glemmer at [uhørligt] OK? Så dette er, hvad der kaldes den to-komplement. Vi definerer blot minus 1 at være ting her, at hvis du tilføjer det til 1 ville give dig 0. Og det er temmelig cool fordi vi ikke rigtig brug sent at gennemføre en anden type sum alt efter om det er en negativt eller et positivt tal. Giver det mening? Så én ting, vi gør her for at omdanne mellem en positiv og en negativ heltal derefter vi vende alting, og så tilføjer vi 1 til dette nummer. Hvis du forsøger at gøre det selv på et stykke papir, du kommer til at se det giver mening. Men hvis jeg tager dette nummer her, det er fem. Så hvis jeg vende alting her, så 1, 1, 1, 1, 1. Flip, flip, flip. Og så vil jeg tilføje 1 til det. Jeg har tænkt mig at have nøjagtig minus 5. OK? Denne form for mening, fordi hvis du forsøger at opsummere dette med nummeret at vi havde før, hvilket was-- lad os vende det igen. Det var 101 og masser af 0'er. Hvis du forsøger at tilføje disse to tal sammen, du kommer til at have nøjagtig 0. OK. Eventuelle spørgsmål? PUBLIKUM: [uhørligt] GABRIEL: Hvad mener du? PUBLIKUM: Negativ til positiv [uhørligt]. GABRIEL: Nej, du flip og du tilføjer 1 altid. Ja. OK, så tegn også kodet binære filer. Vi har ASCII tabel, som du så også i foredrag, right? Så det er dybest set en kortlægning af ting. Og her kan jeg ikke understrege nok at for en computer, en og 65 er bogstaveligt talt det samme. Så hvis jeg skriver noget som char c er lig med en, kunne jeg samtidig bare skrive 65 her, og det ville være præcis den samme, OK? Der er ingen som helst forskel. Vi plejer at lægge tegn i variabler af typen. Char, ikke fordi de er væsentlige lavet til det, men fordi af human konvention. Men du kan bare beskæftige sig med heltal i stedet for variabler af typen char, og du vil være fint. Den eneste egentlige forskel mellem en char c og en int i er, at en int har fire bytes i de fleste systemer, mens en char har en byte. De er i det væsentlige samme ting i form af data. Så hvad vil udskrive her? Her er vi udskriver et ciffer ved hjælp af printf med et plus 1, og ligesom heltal, chars kan sammenfattes, så tegn kan også gøres. Så dette er præcis 65. Så der vil være 66, og her har vi 65 plus lidt et minus big A, som vil være, ved jeg ikke rigtig kender. Men det vil være nøjagtig kløften mellem de store bogstaver og og de mindre bogstaver, så vi kommer til at få lille en, right? Ja. Så det kommer til at udskrive en karakter, som er præcis denne ene. Godt? Eventuelle spørgsmål? Her har vi en masse forskellige typer for numeriske variable. Vi taler allerede om int. Float er bare en måde at-- dette er virkelig sjovt, fordi da jeg første gang hørte at programmere tilbage i dag med Python, det første program, jeg nogensinde forsøgte at skrive, så jeg, at der var en type, der kaldes i og en type, der kaldes float. Og svømmeren var for alle reelle tal. Så spurgte jeg, hvorfor skulle Jeg nogensinde bruge en int så? Fordi hvis jeg kan bruge alle reelle tal med en float, Jeg ville bare stoppe med at bruge int'er, right? Fordi reelle tal er meget gerne mere generisk. Det viser sig, at det er ikke tilfældet i computere fordi de er væsentlige forskellige ting. Så heltal og flåd, den operationer, som du gør for dem er væsensforskellige fordi af den måde, at de er lagret, OK? Vi kommer til at snakke lidt lidt mere om det i en anden. Så dobbelt er bare en større kassebeholdning. Normalt i de fleste systemer, en float er fire bytes, ligesom en int. Og en dobbelt er otte bytes. En lang lang er faktisk bare et symbol at du vedlægge en type som int. Du siger lang lang int som denne. Lang lang int x for at gøre det længere. Så i de fleste systemer vil der giver otte bytes i stedet for de sædvanlige fire. Og du kan faktisk slippe i, så det kan bare sige lang lang, og det virker også, OK? Du kan også gøre andre ting som unsigned int, eller igen bare usigneret ville også fungere. Og som ville gøre x være en variabel ligesom alt er positiv, så du kan ikke rigtig har negativ numre i den måde, vi så op her. Så efter vidunderlige floating point og præcision. Det er en af ​​grundene til, at du ønsker at bruge int'er stedet for flåd, fordi int'er er 100% præcise, right? Det er præcis dette nummer. For flydende points, hvis du sige svar lig 1 over 10-- Jeg tilfældigvis har netop dette program her, float.c. Der udskriver til 20 decimaler. 1 divideret med 10, og normalt er 0,1, right? Men her, hvis vi gør flyde og så vi kører det, vi se, at det er ikke ligefrem 0,1. Det er 0,149 noget. Og hvorfor er det? Fordi du ikke kan virkelig repræsentere hver enkelt muligt reelt tal i hukommelsen fordi der er uncountably mange af dem. Så vi er teknisk set kun i stand til at repræsenterer en begrænset mængde af dem med en begrænset mængde data. Men det er virkelig interessant. Nu rejser spørgsmål om, hvordan du ville gå om repræsentere dette med bits, right? Så hvordan flåd gemt? Med heltal det var let. Men med flåd, du ønsker at maksimere intervallet, og du ønsker at være i stand til at repræsentere store tal og meget små numre som 0.000001 samtidig. Så igen samme spil. Er der nogen der har nogen idé om, hvordan vi kunne gå om repræsentere float i hukommelsen? Bare smide noget. Ja, tak. PUBLIKUM: [uhørligt] som hvis det var to ints og en er det [uhørligt], og det ene er alt efter kommaet. GABRIEL: OK, cool. Så to forskellige heltal. Du kan have 12.45, så det er 12 og 45. Nice. Hvad førend du vil sige? Det samme? Ja? PUBLIKUM: [uhørligt] notation hvor man adskille base. GABRIEL: Videnskabelig notation, Ja, det er normalt, hvad der sker. Så dette er hvad der kaldes mantissen. Det er, hvad er faktisk det nummer og derefter eksponenten er bare hvor komma er, right? Så dette vil være noget af form 1, 2, 3, 4, 5 gange 10 til minus 4. Jeg har lige indset at-- yeah, nøjagtigt. Og så er denne 10 til minus 4 er kommer til at definere, hvor kommaet er, OK? I Brasilien bruger vi komma. Her kan du fyre bruge en prik. Så en prik. Og det er cool, fordi så kan du fokusere masser af dine bits på denne fyr her, om mantissen, og så er vil være din faktiske præcision. Og du kan gøre dette enten i decimal eller i det binære system. Der er forskellige måder at gennemføre dette. Spørgsmål? Ja? PUBLIKUM: Hvor mange steder efter kommaet [uhørligt]? GABRIEL: Det er et kompliceret spørgsmål, fordi det er aldrig rigtig 100% præcise, fordi som du kan se her, for nogle numre det er 100% præcis. Jeg tror, ​​at hvis vi sætter 0,5 her, det kommer til at være 100% præcis. Det kommer til at være 0,500000. Så i dette tilfælde, er det perfekt. Men i andre tilfælde, Det er langt mindre perfekt. I min erfaring, ligesom op til fire, fem decimaler er temmelig præcis. Hvis du bruger en dobbelt, det vil være langt mere præcis end det, OK? ROB BOWDEN: Så bare at smide nogle mere sammenhæng på flåd, Jeg husker aldrig 100% hvordan spec af flåd rent faktisk virker, men jeg gør dig altid huske at flåd begynder at få rodet. Så ideen er, at når du får virkelig, virkelig store tal eller virkelig, virkelig små tal, vi starter værre og værre at differentiere mellem to tætte flåd. Så hvordan jeg kan lide at tænke på er med flydende komma unøjagtighed, der er to flydere, der hvis jeg forsøger at præcisere dem i C, på trods af at de er forskellige numre, de kommer til at være fortolkes som det samme antal, fordi vi kan ikke gemme dem forskelligt. Vi er nødt til at bruge de samme bits. Og så når vi kommer til virkelig, virkelig store tal, taler ligesom 10 til 300 eller noget, er det på dette tidspunkt at 10 til 300 eller 5 gange 10 til 300 kan ikke differentieres fra 7 gange 10 til 300. Så det er en temmelig stor forskel mellem de to tal. Men så når du kommer ned til normalområdet ting, du har tendens til at være temmelig god til at differentiere. Og så når du får ned virkelig små, du også få temmelig dårlig igen. Så ligesom en hel masse 0,0000, det bliver temmelig dårlig. GABRIEL: Ja, så en hurtig bemærkning. Aldrig gøre dette. Forsøg aldrig at sammenligne flåd hjælp ligemænd lig, fordi selv om de er næsten samme, næsten det samme er ikke det samme. Så hvad du normalt gør, er du fratrække dem, tage den absolutte værdi af det, og se om der er mindre end 0,0001 eller noget lignende, OK? Og cool. Jeg kender en masse mennesker har nogle baggrund i Java, især dem, der gjorde AP datalogi, right? Og Java er et sprog det meste baseret på C, det har et par meget store forskelle. Men efter sløjfer, og hvis'er, og stuff at, de er alle den samme syntaks. Jeg har et par programmer her for at vise dette. Så for eksempel en simpel hello verden. Dette er hej verden i C, som du fyre er helt bekendt med, og dette og dette er i Java. Så i Java har vi denne public class, hej verden, og public static void main, og string args. Strengen args går at dukke op i C meget snart. Men lad os ikke gå der endnu. Lige nu har vi tomrum her, hvilket betyder dette hovederhverv ikke tage nogen argumenter. Og så har vi System.out.println, det og det er slags svarer til printf. Her har vi ikke virkelig har brug for backslash n fordi print ln gør det for dig. Det føjer backslash n i slutningen af ​​linjen. Men hvis du går ind i noget som en, er du kan se, at de er temmelig de samme ting. Så initialisering, og tilstand, og opdateringen is-- Jeg savnede et rum her-- de er stort set det samme, bortset fra Java har som et par mere højt stuff. Her kan vi gøre plus jeg og Java automatisk gøre dette jeg her, hvilket er et helt tal, til en streng, og derefter føje to strenge sammen. Her i C er vi nødt til at gøre det &% d. Linjen her, den for ser nøjagtig det samme. Og hvis vi ser på, hvis de hvis'er også ser nøjagtig det samme, right? Så de reelle store forskelle i de ting, du ser her. Public static, ugyldig, og derefter public class hvis. Så Java har, hvad der er kaldes en virtuel maskine. Og det er meget stærkt baseret på hvad kaldes objektorienteret programmering, som er et meget, meget almindelig paradigme for programmering i dag. Og denne klasse ting er, hvad du ser, noget fra objekt orientering, er du oprette en klasse og så skal du kan udlede objekter fra denne klasse. Vi kommer ikke til at tale for meget om det i CS50, men det er absolut noget virkelig cool, især hvis du ønsker at gå ind mere sofistikeret webudvikling ved afslutningen af ​​forløbet, ligesom indsende din endelige projekt og nogle nice rammer og kram. Så dybest set ideen er, at du ønsker ikke at re-implementere noget, så du skabe noget, der er meget generisk, ligesom formen, og så skal du oprette forskellige former af det, og derefter fra hver af disse former, du opretter nogle mere specifikke former i tre dimensioner eller noget lignende. Og de har dette hierarki de arve fra de andre, så alle funktioner og alle variabler, den store form her har alle disse skal have, og alle disse er nødt til, og så videre og så videre. Så det er den grundlæggende idé. C ikke har det, men C ++ har denne form for funktion. Og Java er stærkt påvirket ved objekt orientering, så det er derfor, du ser klasse her hele tiden. Og den anden ting er denne Java virtuel maskine. Så dette, tror jeg, er en meget smart idé. Hvad så de folk, der opfundet java gjorde, er de ikke ønsker at kompilere deres kode to gange hvis de skulle køre det i en Windows, eller en Mac eller Linux, så hvad de gør er de bogstaveligt talt køre noget som apparatet, men du kan ikke rigtig se, at det sker. Så de kører en virtuel maskine indersiden af ​​din computer, som er dybest set som en mini operativsystem. Og at driftsstøtte systemets formål i livet er blot at køre det, der kaldes byte kode. Så i stedet for i C, den måde, vi ville kompilere dette er at gøre, hvis og derefter køre ./if. Jeg har glemt backslash i. I Java, ville du gøre først Java C at kompilere det, if.c. Det er ikke C. Det er dot java. Og så er du nødt til at køre ikke ./. Du får denne nye fil if.class, men du kan ikke rigtig køre if.class nu bare ligesom vi gjorde før. Dette er ikke en eksekverbar. Du er nødt til at køre. Du er nødt til at fodre den ind et program kaldet Java, og programmet er den virtuelle maskine, og så skal du gøre if.class, eller hvis. Ja. Og så virker det. OK, så det er sådan det virtuel maskine sker. C ikke har det, så hvis jeg skulle sætte dette program i en Windows-maskine, det ville ikke fungere i C. I Java det gør. Spørgsmål? Cool. Det er hvis for super sektion for dag.