>> ROB BOWDEN: Dit is het comfortabeler sectie,
maar dat betekent niet dat als je het gevoel dat je niet meer comfortabel
je zult hier geen dingen te leren.
Dus laten we beginnen.
Heeft u dia's ga rechtsaf de dingen.
Ben ik op het punt om gewoon het juiste moment?
Schakelen laptops.
>> Ann: Je wilt niet stel jezelf voor, Rob?
>> ROB BOWDEN: Oh, ik ben Rob.
Dit is mijn vijfde jaar TF-ing CS50.
>> GABRIEL: Ik ben Gabriel.
Ik ben hoofd TF van CS50.
Ik TF was vorig jaar en dit jaar.
Ann: En ik ben Alison, en dit is mijn tweede jaar TF-ing CS50.
>> ROB BOWDEN: Oke, dus dit ding aan de linkerkant,
hopelijk heb je het eerder gezien.
Zo niet, omdat u downloaden het voor jezelf,
je had het moeten zien in collegezaal.
Dus dit is de CS50 apparaat, en hij heeft een enigszins een beschrijving ervan
in collegezalen.
Maar in principe is het gewoon je een besturingssysteem
systeem binnen uw besturingssysteem systeem, zodat wij u kunnen geven
programma zonder zorgen te maken, oh is dit
gaan werken op zowel Windows en Mac, of als sommige van jullie
zijn al gebruik van Linux, Linux.
Het is gewoon de bedoeling om zijn een gemeenschappelijke spelen
gebied dus iedereen heeft de exact dezelfde omgeving.
>> Dus als je niet gedownload dit al,
je moet het downloaden, want je bent gaat het nodig hebben voor het probleem set.
En het is een twee gigabyte downloaden, dus het een tijdje kan duren.
Op de Harvard het zal snel gaan.
Dus CS50 apparaat.
>> Nu in het begin, we gaan praten over gewoon een stelletje opdrachtregel
stuff, en zo door dat, ik bedoel werken in deze kleine omgeving hier.
En merk op alle dingen Ik hier zeggen nu
gaat werken als je de binnenkant van een terminal binnenkant van het apparaat,
of als je binnen van de gedit terminalvenster
binnenkant van het apparaat.
Dus die omgevingen zijn identiek.
>> Maar ik ga een derde route te gaan.
En let hier dit neer weinig IP-adres hier.
Dus je hoeft niet te dit doen, maar dit IP
address-- nu als I-- behalve het wordt geblokkeerd door dat ding.
OK, zodat het IP-adres meer dan in een terminal
hier-- zodat deze terminal boven Hier is een terminal in mijn Mac.
Dus dit is op geen enkele wijze op dit moment geassocieerd met het apparaat helemaal.
En als je op Windows, dan ben je gaat nodig hebben om iets te downloaden
speciaal voor dit, met name mensen hebben de neiging te gebruiken Putty, P-U-T-T-Y.
>> Dus wat ik ga doen is het type SSH en dan is dat IP-adres.
Nou, jharvard op dat IP-adres.
Dus 192.168.24.220.
Deze enge bericht negeren.
Typ gewoon ja.
Dit CS50 in een doos.
Het vraagt ​​om uw wachtwoord.
>> En dus in veel van deze contexten waar het vraagt ​​om het wachtwoord, [onverstaanbaar].
We hebben een heleboel vragen waar kreeg hij zegt dat het eigenlijk niet te typen.
Het maakt je niet tonen de karakters van het wachtwoord terwijl u typt, als er iets,
voor een beveiligingsfunctie, want als iemand kijkt over je schouder
en ze zien star star ster ster, dan zijn ze
weet dat uw wachtwoord is vier personages.
Het idee is dus het zal vragen dank voor uw wachtwoord, type.
Het gaat niet om aan te tonen je de personages,
maar het is hen daadwerkelijk te accepteren.
In dit geval, elke keer dat u ooit een wachtwoord prompt te zien
het omgaan met het apparaat, de wachtwoord gaat karmozijn zijn.
Dus karmozijnrood.
>> En nu hier binnenkant van deze venster dat is in mijn Mac,
Ik ben in principe met exact dezelfde uitzicht
als binnenkant van een terminal in het apparaat.
Dus je hoeft niet om dit te doen.
U kunt alles doen u willen binnenkant van het apparaat.
Ik bijna nooit eigenlijk doen iets in het apparaat.
Ik heb bijna altijd te minimaliseren dat en nu Ik ben bezig met SSH in het apparaat.
>> Als er iets, als je een langzamere computer,
je zou een verschil merken.
Ik doe dit omdat ik de voorkeur deze terminal venster.
Het heeft een aantal functies, zoals Ik kan het venster te splitsen,
en nu kan ik SSH in door het toestel.
Ik kreeg twee SSH aan de hand is in een keer.
Als uw computer is bijzonder traag en je werkt in het toestel,
en je realiseren dat dit echt laggy, wat dan ook.
Heeft de neiging om veel sneller te zijn als je SSH-ed in.
Maar anders kun je alle kanten op werken.
>> Publiek: Wat doet SSH betekenen?
>> ROB BOWDEN: Secure schelpen, iets dergelijks?
Wat betekent SSH betekenen?
GABRIEL: Secure shell.
Ann: Het is gewoon secure shell.
ROB BOWDEN: Secure shell.
Het is een protocol dat u-- het is een beveiligd protocol, dus versleuteld.
Mensen kunnen het netwerk niet snoop en zien wat je zegt om iets te
je SSH-ed aan.
En in feite, in de oude dagen van de CS50, zodat in 2009
toen ik een eerstejaars, de manier waarop je werkte aan CS50 probleem sets,
was je SSH-ed om enkele server dat gaven we u toegang tot,
en je werkte op daar.
Dus heb je dit niet hebt grafische apparaat.
Je hoefde niet gedit.
Je hebt niet al deze dingen hebben die kon je punt visueel en klik.
Je moest werken in deze interface.
Ik geef de voorkeur om te werken in deze interface.
Dus een deel van wat we gaan te gaan over nu
zijn een stelletje van de commando's die je moet
beginnen om vertrouwd te raken met zo krijgen je mee te gaan in de cursus.
En eerlijk gezegd, als je eenmaal wennen aan hen, het
is zo veel sneller te werken in deze omgeving
dan is te werken finder, slepen en klikken dingen.
>> Dus hier zijn we.
Nu heb ik net SSH-ed in, en dus de standaard locatie-- u
zag een aantal van deze opdrachten in de klas, maar we zullen weer gaan ze allemaal.
De standaard locatie zijn we in de home directory.
En directory, net een ander woord voor map.
Dus we zijn in de home directory.
Typ ls, een lijst van de bestanden in deze map.
Blijkbaar heb ik een blah.c eerder.
Dus we hebben een desktop directory.
Je merkt de syntax highlighting?
De licht blauwe markering geeft aan een directory en de rechte witte
geeft enkel een duidelijke bestand.
Dus er zullen zijn sommige andere kleuren die je ziet.
Een uitvoerbaar bestand is waarschijnlijk zal te groen of iets dergelijks.
OK, dus we zijn in de home directory.
>> Nu als ik wil naar een andere te gaan directory, cd is de opdracht die ik wil.
Dus veranderen directory, en dan moet je passeren de naam van de directory
dat u wilt in te gaan.
Dus hier hebben we vier opties.
Ik kan gaan in downloads, en nu zien we hier is het deze haakjes bijgewerkt
om te zeggen ik ben in ~ / downloads.
>> Dus wat is tilde?
Het is een afkorting voor je home directory.
Dus bijna alles wat je doet gaat zijn met betrekking tot uw home directory,
en pwd is gewoon een opdracht Ik heb een keer gebruiken in een jaar dat
alleen drukt de huidige directory.
En dus hier dat zien ~ / Downloads echt lost
naar / home / jharvard / downloads.
Dus / home / jharvard is mijn home directory.
>> Dus we kunnen cd dot dot.
Nu dot dot is een speciale map die altijd verwijst naar de ene directory omhoog.
Dus als ik in ~ / downloads, dan cd dot dot gaat me brengen tot tilde.
Wat vinden we cd dot dot gaat me nu brengen?
Het zal me aan / naar huis te brengen.
Dus tilde door middel van druk werkmap, Ik ben nu in / home / jharvard.
één directory omhoog van dat, nu hier staat / home.
>> Nu cd dot dot.
Nu ben ik in de root directory, en je kan het niet nog een keer doen.
Je moet gewoon blijven in de root directory altijd.
De root-directory heeft een hele hoop dingen die, als je wilt kijken naar,
je kunt.
Bijvoorbeeld, als ik ga in bin, dat bevat
al deze binaries, zoals ls, en cd, en al die dingen.
Dus deze opdrachten moeten er ergens in het systeem,
en het is in de / bin directory.
Maar bijna alles wat je doet is gaat worden vanuit je home-directory.
En cd zonder argumenten dan ook, je zou kunnen zeggen cd ~, hoeven niet te.
cd gaat je brengen terug naar je home directory.
>> Een laatste vraag.
cd - gaat u terug te brengen de laatste map die je in.
Dus ik net twee keer cd'd op een rij, dus mijn laatste map was de home directory.
Als ik naar bin slash, en nu laten we naar boven en naar de gebruiker gaan.
Gebruiker aandeel.
Laten we naar de gebruiker aandeel.
Nu ben ik nu in user aandeel.
cd -, terug in de bak.
Dus dit wordt bijzonder bruikbaar wanneer je have-- en het zal schakelen.
Dus aandeel gebruiker, terug bin, bin aandeel.
>> Dus dit wordt nuttig.
Het kan zijn dat je met velen, vele geneste directories.
En wilt u iets doen echt snel in een bovenste directory.
Je gaat naar die directory, maken veranderingen en dat soort dingen,
en nu wil je gaan terug naar waar je was.
cd -.
Ik ben altijd gefrustreerd toen ik toevallig te gaan
naar die directory I wilde aan het werk in te doen.
Ik krijg altijd gefrustreerd toen ik dat deed in twee stappen plaats van één stap,
want dat betekent dat de cd - gaat in die tussenliggende locatie te brengen
in plaats van waar ik heen wil.
>> Zo zien we al de lijst van bestanden.
We weten hoe ze rond zo ver te komen.
Dus nu laten we praten over het bewerken van bestanden.
Dus in deze cursus, je bent er bijna verwacht altijd gedit gebruiken.
Als u wilt, kunt u de volgende stap te zetten en beginnen met het leren van een command line tekst
editor.
Dus verschillende opties bestaan.
>> En degenen die waarschijnlijk ga u relevant zijn,
we hebben Nano, Vim, en Emacs.
Dus Nano is de beginners command line tekstverwerker.
Dus Nano laten we gaan op blah.c ik al eerder gemaakt.
Het is gewoon deze standaard C-bestand.
En je ziet een hele hoop spullen gaande onderaan het scherm,
en blijkbaar blah.c bevat deze C-code.
>> Dus in dit editor, wat het zegt op de bottom--
nu dit dakje staat, zien we dit ^ G, ^ X, ^ O.
Zodat in bijna alle context die je ziet,
je zou dat dakje symbool zien in andere plaatsen online, op Stack Overflow,
zoiets.
Het verwijst bijna altijd te controleren.
Dus om af te sluiten wil ik doen Controle X. Controle X, verlaat.
En ik kan mijn pijl gebruiken toetsen om te bewegen.
Let op, ik kan niet aanwijzen en klikken gemakkelijk.
Je moet gebruik maken van je pijl toetsen om te bewegen.
Er kan een setting te wijzen en klikken.
>> Maar laten we een aantal wijzigingen.
Nu Controle X te gaan verlaten.
Het gaat save gewijzigde buffer te zeggen.
Nu de prompt, y voor ja, n voor nee.
Controle C voor annuleren.
Ik zal enkel zeggen ja.
File naam te schrijven.
De standaard is de file dat het al is.
Drukt u op Enter.
OK.
Nu heb ik net bewerkt dat bestand, gered, en deze wordt gewijzigd.
>> Dus Nano is de makkelijkste teksteditor wennen.
De alternatieven zijn Vim en Emacs.
Die zijn hoger niveau tekstverwerkers dat een zeer steile leercurve hebben.
Dus mijn persoonlijke voorkeur is Vim.
En het heeft een groot aantal opties.
En als je eenmaal wennen om het, zult u nooit
wil naar een andere tekstverwerker omdat je gewoon
hebben zo veel dingen voor u beschikbaar in deze,
maar het duurt een echt lange tijd om te leren.
Dus misschien wil je gewoon dwingen uzelf nu om gebruikte om het te krijgen,
maar ik zou zeggen dat het de moeite waard.
Maar het is moeilijk.
>> En dan Emacs.
Ik altijd strijd in Emacs, omdat Ik weet hoe ik absoluut niets te doen.
Blijkbaar Emacs is niet standaard geïnstalleerd op het apparaat.
We zullen waarschijnlijk aan toevoegen dat als een standaard installaties.
Zodra je een van leren Vim of Emacs, er is
geen dwingende reden om ooit de ander te leren,
maar het is een heel andere stijl.
OK dus dat is het bewerken van tekstbestanden.
>> PUBLIEK: Als u vastzaten in Vim op dit moment, hoe doe we--
>> ROB BOWDEN: Er zijn meerdere modi in Vim,
en er zijn hele tutorials op het leren van Vim.
Dus als je toevallig te zijn in insert-modus om
om tekst te typen, die u kunt Voer dat op verschillende manieren,
maar ik is hoe je in insert-modus.
In of uit een speciale modus die je in, net Escape.
En je gewoon bash Escape te krijgen uit enige geneste modes je in.
Gewoon OK, nu ben ik terug in de normale modus.
>> En dus in de normale modus, een dubbele punt.
Je ziet het verschijnen aan de onderkant.
En dan q.
Dus q zal stoppen als u wijzigingen heeft aangebracht, die I-- heb ik wijzigingen aangebracht?
Ik heb veranderingen blijkbaar gemaakt.
Dus als u wijzigingen heeft aangebracht, het zal zeggen dat je een uitroepteken zetten.
Ik ga noemen het een knal.
U kunt dus een verbod om te zetten net stoppen zonder iets te doen,
of colon wq zal redden en stoppen.
Dus w in het algemeen is te schrijven.
Dus schrijf het bestand.
Ik kan schrijven en af ​​te sluiten.
Of je kan gewoon qx slam, q knal net
om daar weg te gaan, ongeacht van eventuele wijzigingen die je hebt gemaakt.
>> Oke, dus nu laten we gaan-- we kunnen bestanden maken.
Laten we beginnen met het verwijderen van bestanden.
En ik zal gewoon gooien in één snel nieuwe commando, touch.
Dus raken foo.
Touch bar.
Raak baz.
Als ik ls, nu zien we dat deze bestanden bestaan.
Ze zijn helemaal leeg.
Dus touch is gewoon een makkelijke manier van het ene, [onverstaanbaar].
Twee, technisch gewoon tot staat het, het werkt de timestamps.
Dus elk bestand dat u maakt een tijdstempel die ermee verbonden zijn.
Dus baz is gemaakt op 14 september bij 16:21.
Het is nu 16:22, dus als Ik weer raak baz, we
zien dat baz was het meest onlangs gewijzigd om 16:22.
Maar anders had ik bijna nooit kijk naar de timestamps op bestanden.
Dus tintje, hier ben ik gewoon gebruik het aan een aantal snelle bestanden te maken.
>> Oke, dus nu rm is de opdracht die we de zorg over hier.
En we kunnen rm boo.
Zeggen verwijder regelmatig leeg bestand boo.
En we kunnen het type y, en nu is het verwijdert.
rm baz.
Verwijder regelmatig leeg bestand baz en het type n voor nee.
Nu is het niet verwijderd.
Zo bar en baz bestaan ​​nog steeds.
Foo is verdwenen.
GABRIEL: Blijf praten.
ROB BOWDEN: Great.
Dus het vervelende bericht hier, verwijder regelmatig empty--
wat doe je daar beneden?
Verwijder regelmatig leeg bestand.
Dus als we niet willen zijn last van dat bericht,
we kunnen gooien in deze -f vlag, en dus dat is kracht.
En nu als ik rm -f, het gaat niet om zeggen wilt u dit bestand te verwijderen.
Het zal gewoon doen.
En ls, zie ik niet meer de bar daar.
>> Nu is een potentieel gevaarlijke opdracht.
Het heeft de neiging om niet te slecht.
We komen terug in een tweede hoe het kan echt gevaarlijk.
En kunnen we een temp directory.
mkdir, een andere opdracht.
Dus mkdir is een command dat maakt een directory.
En nu door ls zien we dit mooi licht blauw gemarkeerd temp directory.
Ik kan cd in temp.
En ik kan subdirectory foo.
cd in foo. mkdir bar.
cd in de bar.
>> Dus we zien kunnen we gemakkelijk in een aantal mooie diepe nesten.
Nu hoe kan ik een map verwijderen?
rmdir.
Dus als ik gewoon recht proberen te rm, zoals we hebben gedaan met een regulier bestand,
rm bar gaat zeggen kan niet bar verwijderen.
Het is een directory.
Er is een speciaal commando voor het verwijderen van mappen, een soort van.
Dus rmdir bar.
Nu bar is verdwenen.
>> OK, dus rmdir ik vrijwel nooit gebruik.
De reden being-- nu laten maak een regulier bestand bar in hier.
Dus rmdir boo.
rmdir.
Verzuimd om foo te verwijderen.
Directory niet leeg.
Dus je kunt niet gebruik Verwijder dir op een directory die dingen in zich heeft.
>> Dus heb je een aantal opties.
U kunt gaan in die folder, verwijder alles handmatig, en dan naar buiten komen
en rmdir de directory.
Die duidelijk klinkt vervelend.
Wat als er duizenden van bestanden daar?
Nou, zou je rm *.
We praten * in een tweede.
Het betekent in feite alle dingen.
Maar beter nog, dus rm -r.
Dus rm -r-- in veel contexten, -r betekent recursieve,
waarin we praten over wat recursieve wijze in verscheidene weken.
Maar het betekent in feite traverse het geheel van deze map
en verwijder alles.
>> Dus rm -r foo gaat zeggen afdalen in directory foo?
Ja.
Verwijder regelmatig leeg bestand foo / bar?
Ja.
Verwijder directory foo?
Ja.
Dus nu foo en alles daarin is verwijderd.
>> Nu dat kan bijzonder vervelend when-- laten aanraken 1, Touch 2, touch 3.
Zou hebben een hele hoop van bestanden.
Als ik wilde, kon ik creëer duizenden bestanden in hier.
En rm -r foo gaat erg vervelend.
Ja, ja, ja, ja, ja, ja.
Met veel meer bestanden die u snel zien hoeveel keer
Ik zou hebben om ja te typen.
Nou ja, we zagen eerder hoe we kunnen zich te ontdoen van hoeft te typen ja, -f.
Dus mkdir foo cd foo tintje 1 2 3.
OK, dus rm -rf foo gaat blindelings geheel verwijderen foo.
Geen prompt.
Nee niets.
Foo is verdwenen.
>> Dus heb ik de neiging om dit te gebruiken bevelen de hele tijd.
Dat gezegd hebbende, het is een zeer gevaarlijke opdracht,
want als ik iets doe dit, het zal u niet gevraagd.
Het zal worden gegaan.
En het gebeurt vrij vaak, en zelfs in hogere mate CS cursussen.
Soms zien we wel iets waar iemand
zegt dat ik per ongeluk onze rm rf-ed mijn huis directory en al mijn P set is verdwenen.
En het is verwoestende, maar er is geen prullenbak.
Er is geen er is niets u kunt ophalen.
Het is gewoon weg.
Nog erger zou zijn iets als rm-rf /.
Dus we zojuist besproken dat root directory.
Het houdt alle van de bestanden op uw systeem.
Dingen hebben de neiging om behoorlijk rommelig als je dingen als ls verwijderen,
en cd, en al die.
>> Publiek: Wat is het verschil tussen rm, rf en rm *
ROB BOWDEN: Dus rm * -
>> Ann: Vraag was wat is het verschil tussen rm, rf, en rm *.
>> ROB BOWDEN: Dus rm *.
Star in de algemene middelen in alle de inhoud van deze map.
Proberen te denken aan andere manieren van het tonen ster.
Nou, ster eigenlijk algemeen betekent passende patroon.
Dus als ik een bestand genaamd dog1, aanraken dog2, raakt cat1, raakt cat2.
Dus ls * 1 gaat cat1 drukken en dog1, want die ster kan worden gevuld
in met-- de ene moet om daar te zijn, maar ster kan zowel kat of hond.
Het is een wild card.
Dat is het woord dat ik ben op zoek naar.
Wild card.
Of ik kon ls hond *, en Ik kreeg te dog1 zien, dog2.
Dus dat zijn een opsomming van de bestanden dat overeenkomt met dat bepaald patroon.
U kunt ls op deze manier gebruiken.
>> Ls * ster past alles.
Dus het gaat om alle af te drukken de inhoud van deze map
aangezien ze allemaal passen.
Het gaat niet om iets af te drukken in bovenste niveau directories.
Als ik een sub-directory, foo, en Raak 1 2 3-- dus nu als rm * sterren,
verwijderen cat1, cat2, dog1, dog2.
Kan niet verwijderen foo.
Het is een directory.
>> Dus ster breidt uit naar alle bestanden in de directory.
Dus technisch rm * is hetzelfde als zeggen rm cat1, cat2, dog1, dog2, foo.
Overwegende rm -rf, technisch ster zou bereiken wat we willen, maar rm -rf--
als ik uit te gaan van deze directory, rm -rf temp,
dat gaat in temp te gaan en recursief alles verwijderen.
>> Dus ster is apart in dat dat wordt begrepen by-- dus dit ding
dat ik ben actief in, dit ding dat wordt gevraagd mij voor opdrachten
en vervolgens het uitvoeren van en het doen van hen, ik noem dit mijn schelp.
En dus is deze shell is zelf een programma.
En als ik wilde, ik kon in / bin / bash lopen.
De schelp heet bash.
En nu iets merken we heeft iets veranderd,
en dat komt omdat mijn instellingen voor de schelp zijn iets anders.
>> Maar nu ben ik technisch running een shell in mijn originele shell,
en ik kan dat shell verlaten, en nu Ik ben terug naar mijn topniveau shell.
Het doel zeggen dat is-- de ster.
Dus de ster is iets begrepen door bash.
Dus rm-rf, rf vlag is begrijpen enkel rm.
Het weet dat bij passeren een rf dat u
wil dat het recursief verwijderen alle bestanden zonder waarschuwing.
De ster is iets begrepen door bash dat wanneer je zegt rm *,
bash is niet van plan om te zeggen hey rm * Verwijder ster.
Bash gaat rm zeggen * verwijderen cat1, cat2, dog1, dog2.
Het wordt automatisch gaat uitbreiden alle bestanden in de directory.
>> En evenzo is een tilde symbool dat bash begrijpt.
Als je zegt cd ~, bash breidt die naar uw home directory.
Andere vragen tot nu toe?
OK dus we gaan om te beginnen snel gaan.
>> Tab-completion.
Gewoon om het daar te gooien.
Veel mensen doen niet beseffen dat dit bestaat.
Dus als ik typ cd dow, I willen naar downloads te gaan.
Ik hoef niet te nloads typen.
Ik kan gewoon op Tab.
Dus dat herkent Dow is een voorvoegsel dat
niet overeenkomt niets anders in deze map,
dus het zal voltooien die voor u.
Nu kan ik gaan.
>> Ik dat doen ook recursief.
Dus mkdir foo.
Laten we naar foo.
mkdir bar.
Dus ga terug naar mijn huis directory, kan ik downloads zien.
Nu weer toe kan slaan tab, automatisch gaan in foo te vullen.
Het is de enige map.
Hitting tabblad weer, automatisch gaan in de bar te vullen.
Dus nu ben ik in (~ Downloads / foo / bar).
>> Dus dit tab-completion, telkens als ik naar kantoor uren,
en ik sta boven iemands schouder,
en ze gaan rm D-O-W-N-L-O-A-D-S, ik ga dood.
Gewoon tab, tab, tab, tab.
Dus zeker gebruikt tabblad.
En evenzo en naar beneden, veel mensen
alleen dat is er gebeurd met nooit hebben geraakt op en neer.
Het zal gaan door de vorige commando's, dus als je net liep iets,
en u wilt om het opnieuw uit te voeren, gewoon omhoog houden tot je bij het.
OK.
>> Zo snel, een aantal andere dingen.
Laten we terug gaan naar temp.
Laten we een aantal bestanden.
Dus hier, ik ben gewoon gaan naar de lijst een aantal woorden.
hond, kat, miauw.
Laten we het doen hond, vis.
Dus nu rep is een zeer nuttige commando's die u
om overal zoeken bestanden voor een bepaalde tekst,
en technisch kan je echt doen complexe expressies voor het aan te passen.
>> Dus hier, als ik grep, en wat wil ik naar zoeken?
Laten we zeggen dat ik ben op zoek naar katten, en Ik wil al deze bestanden te zoeken.
Dus hoe kan ik al deze bestanden doen?
Star.
Dus in één bestand, heb ik de kat.
Ik waarschijnlijk zou kunnen hebben noemde het iets beter,
want dat lijkt op lijnnummers of zoiets.
Maar in het dossier van één heb ik een lijn met de kat.
In bestand twee heb ik een lijn met de kat.
Dus nu kan ik kijken in het bestand één en zie oh ja, dat bestand had cat.
Notice bestand drie werd niet geëvenaard omdat de kat is er niet in.
Ik kan grep voor miauw.
Alleen bestand twee heeft meow.
>> Dus dit kun je combineren, opnieuw, met -r, dat
zoals ik al zei betekent vaak recursieve.
En dus kan ik hier te komen, grep -r voor elk exemplaar van-- laten bewerken
dit alleen maar om een ​​kat te gooien daar.
Dus grep -r voor elke instantie van kat in deze directory.
En het zal recursief naar elke subdirectory.
Dus in baz, er is cat.
In temp / 2, er is cat.
En in temp / 1 er is cat.
Dus dat is zoeken binnen bestanden.
>> Nu kunt u ook gebruik maken van een vondst.
En dus zoek gaat specifiek over op zoek naar bestanden met een bepaalde naam.
Dus laten we wat meer.
Laten we naar downloads.
Raak dog1.
Raak cat2.
Raak cat_dog.
Raak Catcat.
>> Dus ik wil alles vinden Bestanden met de hond in de naam.
Dus vinden, en de langste keer dat ik nooit onthouden
hoe vind werkte, totdat ik eindelijk iets gelezen dat het zo duidelijk gemaakt.
Dus vinden, automatisch recursieve.
U hoeft niet naar een -r passeren.
Dus vind dot.
We hebben nog niet gesproken over dot nog.
Overwegende dot dot altijd betekent één directory omhoog.
Dot betekent altijd de huidige directory.
Dus kon ik -r stip in de RM dezelfde manier als ik kan rm-rf *.
Uiteindelijk ze bereiken hetzelfde.
rm -rf dot gaat verwijderen de gehele huidige directory.
>> OK, dat wil ik niet om daar te doen.
Maar vind dot.
Dus recursief zoeken op het huidige directory, en nu alles
na dit zijn een stelletje vlaggen die u gebruiken om dingen uit te sluiten van het rendement.
Dus vind dot keert alles dat het kunnen vinden in de huidige directory.
Dat zijn alle bestanden recursief zoeken.
We zullen een aantal van degenen die in een seconde te zien.
>> Maar in het geval je je afvraagt ​​hoe ik het doe dat zo Command K, althans
in mijn terminal in de Mac ontzette.
Control L ontruimt algemeen het voor elk soort terminal.
U kunt ook duidelijk.
En mocht je ooit in een rare scenario--
het is mij overkomen een paar tijd-- waar de kleuren van uw herinneringen
zijn helemaal in de war, of u zijn niet in staat om iets te zien
wordt getypt wanneer je aan het typen bent, omdat soms als achtergrondkleur is ingesteld
hetzelfde als de voorgrondkleur en nu kun je niet zien de fonts.
Reset is iets dat gewoon reset u de standaard zwarte achtergrond,
wit voorzijde, of wat dan ook u ze op te zetten.
>> Dus waar waren we?
Vinden dot.
Dus nu is alles voorbij dit punt worden de resultaten beperkt
iets wat overeenkomt het gegeven patroon.
Dus hier ben wil zoeken alles wat met de naam van de kat.
Ik heb niets.
Waarom is dat het geval?
Nou, ik ben gewoon op zoek naar iets met precies de naam van de kat.
Als ik iets wil zoeken dat heeft een bepaald patroon, en cat--
de citaten technisch niet nodig zijn, maar ik ben gooien ze in daar.
Dus nu het vindt Catcat omdat dat is het enige dat
heeft een aantal willekeurige patroon gevolgd door kat.
Ik kan de kat * zetten, en nu vinden Catcat, cat_dog, cat2,
want dat zijn allemaal dingen met kat aan het begin, gevolgd door iets.
U zou dit kunnen combineren.
Als u wilt zoeken voor alle C-bestanden die je hebt, zou je doen * .c.
We hebben hier blah.c.
Dus dat is een vondst werken.
U kunt zoeken.
Het heeft een hele hoop van vlaggen voor verdere beperkingen.
En een op hen, laten we zeggen -d.
Dus deprecated.
Oh, dat is niet wat ik wil.
Niet -d.
Type d.
Dus vind dot - het type d.
Dus wat dat net deed is ik zoek voor alle bestanden in de huidige directory
met a-- d staat voor directory-- directory type.
Hiermee worden alle directories in de huidige directory.
En type F is alle reguliere bestanden, alle niet directories.
Dus dat is gewoon een voorbeeld van andere manieren waarop u
kan de andere zoekopdracht beperken dan de naam van het bestand.
>> Het is al 30 minuten.
Still going.
>> Ann: Ik zal door middel van wind.
Het komt wel goed.
>> ROB BOWDEN: Dus een aantal andere dingen.
Nu bang, uitroepteken.
Zodat algemeen means-- Nou, laten we eens een voorbeeld bekijken.
Dus! F, wat dat gaat doen?
Nou, het lijkt te hebben herhaalde vondst dot -type f.
Hoe zit! G?
Dat net grep -r kat *.
Dus bang je kunt gebruiken om te herhalen een recent vernieuwd commando.
Dus als ik typ! Gre, het gaat om re-run de commando's die begonnen met gre meest
onlangs.
>> En u kunt al deze te zien commando's met de geschiedenis.
Zo geschiedenis.
Dit zijn alle commando's die ik heb lopen vandaag.
En tja, het is niet letterlijk beperkt is tot vandaag de dag,
maar ik heb alleen deze gebruikt apparaat met ingang van vandaag.
Het is uw geheel van de geschiedenis van uw bash shell,
behalve dat het afsnijdt op een bepaald punt.
Publiek: Wat gebeurt er als je dat doet geschiedenis [onverstaanbaar] commando en een fout
in het resultaat zal nog steeds afdrukken the--
>> ROB BOWDEN: Ja, als er een fout in één van deze commands--
dus laten we zeggen, dat is een fout command not found.
Nog steeds wordt in de geschiedenis.
Prima.
Andere vragen over iets?
Dus dat is knal.
>> Nu, echt nuttig commando, man.
Zodat u de handleiding voor een bepaalde opdracht.
Dus laten we zeggen man ls, dus Dit toont me ls.
Het bevat inhoud directory.
En dit is waar ik te zien dat er zijn deze verschillende vlaggen die er bestaan.
Dus we zien dat ls -l bestaat als we lezen dat. ls -l
geeft me dit volledig overzicht van de directory met die het bestand bezit,
de grootte van het bestand, de de gemodificeerde timestamp.
Dus ls -a is een ander dat je misschien daadwerkelijk gebruik maken van wat vaak.
-al is mijn meest voorkomende vlag afgelopen ls.
>> Dus -a, merkt dat er veel meer bestanden dan alleen ls.
ls -a.
Wat is gemeen met al die files?
Ze beginnen met een punt.
Dus dit is een conventie in Linux dat bestanden die beginnen met een punt zijn verborgen.
Dus het betekent alleen dat als we gewoon rechtdoor ls,
of we zoekt deze map gebruiken de vinder equivalent, of het Windows
Explorer equivalent, dat we niet willen deze dot bestanden te zien.
Ze vervuilen enkel de kijk op de dingen.
Dus ze zijn verborgen tenzij u specifiek
verzoek hen met iets als -a.
Dus ik kan cd in .local, en ik zie dat zelf een directory met
een gedeelde map, en toepassingen, en blah blah blah.
Dus dot, bestanden ze gewoon verborgen.
>> OK, dus andere belangrijke.
Ik heb een paar Ik kan overslaan.
Laten we gewoon echt snel gepraat over het bestand redirection dingen.
Dus er is een hele complexe reeks van dingen die je kunt doen met deze,
maar gewoon om ze te zien, laten we zeggen, echo.
Een andere opdracht.
Echt dom commando.
Alles wat het doet is het printen wat ik vertel het aan.
Dus echo hello.
Het klonk gewoon hallo tegen het scherm.
Hello world.
Echoes hallo wereld.
>> Dus één opdracht of een symbool dat bash begrijpt
is deze groter dan symbool, en dat de uitvoer naar een bestand symbool.
Dus als ik de uitgang dit aan foo, is er nu een bestand
genaamd foo, de binnenkant van dat is Hello World.
Dus merken dat wanneer ik echo hallo wereld buis in foo,
het duurde niet echo hallo wereld.
In plaats daarvan werd het in het bestand foo zetten.
En een ander commando net om het naar je gooien, cat.
Dat is een makkelijke manier om gewoon helemaal een lijst van de inhoud van het bestand
zodat ik niet hoeft te openen een tekstverwerker om het te bekijken.
Zodat de inhoud van de foo bestand zijn hallo wereld.
En ik kon kat blah.c, de inhoud van deze.
>> Nogmaals, dit zijn opdrachten die, niet verwachten dat je ze allemaal onthouden.
Het idee is dat je hebt ze gezien.
Misschien bent u bezig iets, en je bent
zoals ik ben ziek van het openen van dit bestand.
Ik wou dat ik kon alleen maar kijken op de inhoud echt snel.
Je kon dat doen, dan terugkijken en zeggen oh ik
herinner me iets als die er bestaat, en het is de kat.
>> Dus dat gaat naar een bestand.
Nu is er niet echt een goed Bijvoorbeeld lezen uit een bestand nog.
Wat is iets dat neemt iets van standaard in?
Elke eenvoudige Linux command?
Als we bij het, in een paar weken alle piece-- goed,
Deze week heb je een stuk waar je start met de input van de gebruiker.
En dus meestal je typt die ingang naar het toetsenbord.
In plaats van het typen van dat invoer via het toetsenbord,
je kan in plaats pijp in uit een bestand zodat wanneer je dat doet Mario, ./mario,
pijp in van een bepaald bestand, en dat gaat om de mario programma uit te voeren.
Niet verwacht ingang aan het toetsenbord, maar het is
gewoon naar de lezen lijnen van de foo-bestand.
>> Dus groter dan foo zet het in de foo-bestand, en minder dan foo
neemt spullen uit de foo-bestand en gebruikt deze als invoer voor het programma.
En alleen maar om het te zien, kunnen we ook de echo foo bar baz, en dan in plaats van één
groter dan, laten we het doen twee tot foo.
Wat doet dat?
Het voegt alleen maar om het bestand.
Dus in plaats opmerken als ik echo blah in foo en dan cat foo, het is gewoon blah.
Dus als je uitvoer naar een bestand, het volledig overschreven dat bestand.
Als je gewoon wilt toevoegen, double [? grader. ?]
>> En als laatste is pijp.
Pijp Gets veel ingewikkelder, waar die de uitgang van een commando
en deze stroom aan de volgende opdracht.
Dus sommige gemeenschappelijke zaak, geschiedenis.
Dus, ugh, ik wil niet om dit te bekijken.
Toon mij alle commando's in mijn geschiedenis waar ik grep-ed voor iets.
Nee, dat is verwarrend.
Toon mij alle commando's waar ik vind.
Alle commando's vinden die ik ooit liep.
>> Zo geschiedenis.
Nu geschiedenis uitgangen aan op de screenen deze lijst van commando's,
maar ik wil niet uit te voeren naar het scherm.
In plaats daarvan ga ik pijp hem in grep.
Dus laten we grep voor alle instanties van vondst.
Dus nu in plaats van grep nemen de invoer plaats van--
grep is in staat om als input-- we behandelen met behulp van grep anders hier iets.
Dus in plaats van het typen van de lijst van dingen die we wilden om te zoeken naar
en zei grep neemt als input.
Dus als ik gewoon grep te vinden, het wacht op mij om dingen te typen.
Dus kat hello vinden.
Hello.
Vinden.
Let op elke keer als ik het type vinden wordt erkend dat ik typte vondst.
Dus in plaats van deze, zal search-bestanden te vinden.
>> Dus geschiedenis gaat nu uitgang van een lijst van alle commando's.
We zetten dat de output, en we zijn dit naar grep,
en dus het uitspugen alle exemplaren van vondst.
De reden dat ik zei dat het zou verwarrend zijn is als Ik-- het is nog steeds verwarrend.
Als ik grep voor grep.
Let op het is vrij veel altijd waaruit het commando ik gewoon
liep omdat dat commando zelf heeft grep binnenkant van het.
>> OK, dus vragen over iets?
En ik zal het overdragen dan op dit punt.
Hopelijk is dit een leuke overzicht van alle commando's
dat je niet hoeft te hebben onthouden, maar deze maken
een solide 95% van wat ik doen op de opdrachtregel.
Ook in gedachten houden dat de command line zelf, bash is een programmeertaal,
en dus, als je naar beneden om het, je zou willen om echt complexe dingen te doen.
En heeft dus dingen als loops en ifs, en al die
dat je gaat om te wennen aan met programmeertalen.
Maar dat is buiten de toepassingsgebied van deze afdeling.
OK, dus geen vragen?
Ann: Geen?
GABRIEL: Gaat u to--
Ann: Ik kan het doen op de mijne als je wilt.
We kunnen zien wat er gebeurt.
ROB BOWDEN: Off to Allison.
Ann: Woo.
Je bent een moeilijk te evenaren, Rob.
Wil je dat ik om te schakelen met je mee?
Of je hebt, OK.
Ik ga proberen en niet zo lang te zijn daar.
Eens kijken of dit wil werken zoals ik het wil.
Misschien?
Haha!
Ja.
>> Dus ik ga gewoon heel snel gaan door middel van variabelen, lussen, voorwaardelijke,
en een beetje aan de compiler.
Als je vragen bij hebben elk moment, dan kunt u stoppen met me.
Deze jongens zullen me eraan te herinneren om te herhalen je vraag in het geval ik het vergeet,
maar moet niet al te slecht.
>> Dus variabelen, ja.
We hebben geen een van uw Scratch stukken hier.
Ik weet zeker dat de meesten van u, indien je een soort van spel had
die u hebt gemaakt met Scratch, je had bij te houden van iets als score,
of tijd, of iets dergelijks.
Dus die fel oranje stukken die we daar te zien
zijn slechts de Scratch vorm van variabelen, en je zal zeker
worden met behulp van variabelen in uw programma's.
Als je niet, ik ben niet echt zeker weet wat je aan het doen bent.
>> Maar goed, groot ding, definiëren variabelen.
Met C elke variabele om een ​​soort aangegeven,
dus ik gaf je een zeer algemeen een aan de bovenkant.
Dus je moet je typt en dan wat
u besluit om uw variabele noemen.
Dus in dit geval, het type in uw variabele lijst.
>> We hebben drie voorbeelden.
Char van enkele rang, van een A, wat
Ik weet zeker dat je alles wilt te krijgen in deze klasse.
U kunt meerdere definiëren variabelen op één regel
zolang ze zijn allemaal hetzelfde type, dat is onze tweede voorbeeld is er
waar u drie hebben variabelen, x, y en z.
Ze zijn allemaal praalwagens.
En dan kun je ook in dit laatste Bijvoorbeeld met int score en het aantal
van teams, kunt u initialiseren ze daar.
>> Dus in het midden voorbeeld waarbij gewoon float van x, y, en z,
deze zijn nog niet geïnitialiseerd.
Ze hebben geen waarde.
Of ze vuilnis waarden.
En als je het probeert en ze gebruiken, de compiler zal tegen je schreeuwen.
Je moet beide verklaren en initialiseren van uw variabelen.
Dus in dit laatste, zijn we allebei doen.
We zijn te verklaren variabelen van scoren en het aantal teams,
en we zijn hen initialiseren, het geven van ze hun oorspronkelijke waarden van 7 en 4
respectievelijk.
Cool.
Iedereen goed?
Awesome.
>> OK, dus een aantal conventies.
Als jullie hebben gelezen door middel van stijl 50, deze
zijn gewoon dingen die we willen voor u te implementeren in uw stijl.
Dus betekenisvolle namen.
Als je begint dingen te roepen gewoon x, y, en z, vooral
als je in de langere programma's, je bent
waarschijnlijk gaat om verwarren jezelf en wees
zoals wat is deze variabele verwijst.
Ik heb geen idee wat dit betekent.
>> Dus als het is bedoeld om vast te houden een score, noem het scoren.
Als het is bedoeld om een ​​aantal antwoorden te houden of leiden, geef het een naam als dat.
Voor lussen, die we zullen krijgen in de volgende dia,
enkele letter variabelen zijn prima.
ROB BOWDEN: I, j, en k gewoon conventies voor te lussen
dat iedereen hen verwacht worden i genoemd, j en k.
U kunt bellen them-- ik zie rij kolom of rij oproep soms
twee geneste lussen, en dat is ook een soort van standaard.
Maar i en j is volledig begrepen.
>> Ann: Yeah, i en j je bent helemaal prima.
Ter verduidelijking als in sommige van uw P sets,
is het misschien zinvol om meer hebben beschrijvende dingen er gewoon
bij te houden van het te houden.
Maar ik denk dat i, j en k denk ik de overgrote meerderheid van ons allemaal gebruik.
>> ROB BOWDEN: Met deze conventies, zo stijl is belangrijk.
Het is één van de vier assen waarop je ingedeeld bent,
en het is zo gemakkelijk om gewoon over te gaan je P aan het einde en zorg ervoor dat
dat er geen stilistische fouten.
Dus zorg ervoor dat je goed bent tabben.
Zorg ervoor dat uw variabelen worden genoemd.
Laat een bericht achter.
Het is heel gemakkelijk om die punten te krijgen.
Je hoeft niet na te denken over iets om die punten te krijgen.
Je hoeft niet om iets uit te zoeken.
Het is gewoon waardoor het lijkt mooi.
>> Ann: In feite zijn wij stijl 50, die
zal u vertellen waar u het knoeien up als je verprutsen op stijl
en zal u precies vertellen wat u moet oplossen en hoe je nodig hebt om het te repareren.
Het is ook gewoon goed te noemen dat het natuurlijk beleid
dat als je op het kantoor van uur en de code is een puinhoop,
We kunnen weigeren om te helpen u totdat het ziet er mooier uit.
Dus beginnen rechts, houden consistente stijl,
je bent ook gewoon gaan maken uw leven een stuk makkelijker wanneer
je probeert te gaan door debug.
Als je probeert te achterhalen waar je mist een accolade
en ze zijn all over the place, je bent alleen het maken van je eigen leven moeilijker.
Dus in overeenstemming zijn met stijl.
Ik beloof het zal uw leven gemakkelijker te maken.
Het zal ons leven gemakkelijker te maken.
Iedereen zal veel gelukkiger zijn.
En dat is wat je wilt.
GABRIEL: Uw cijfer hoger zal zijn.
Ann: Ja, en je cijfer.
Als uw TF is alsof je, meestal gunstig.
Oké, en dan gewoon het tweede punt hier.
Consistent initialisaties.
Dus zoals we zagen, kunt u verklaren en initialiseren dingen.
Meerdere variabelen op dezelfde lijn.
Een ding willen we u vragen niet te doen is om een ​​aantal variabelen op te geven
en ze niet initialiseren op dezelfde lijn die u initialiseren anderen.
>> Dus in het geval dat gemaakt geen enkele zin,
we hebben het voorbeeld hier waar we verklaren ints
in variabelen van kwartalen dubbeltjes en stuivers,
maar kwartalen en penningen hebben geen initiële waarde.
We hebben ze niet geïnitialiseerd, maar in het midden is er
we reeds geïnitialiseerd dubbeltjes tot 0.
Dus ofwel doe kwartalen, dubbeltjes, stuivers.
Of wil kwartalen gelijk 0.
Dimes gelijk 0.
Pennies gelijk 0, of wat dan ook deze initiële waarden zijn.
>> Groot ding met stijl, consequent zijn.
Bij twijfel, consequent zijn.
Maar volg onze stijlgids ook.
Cool.
Iedereen goed daar?
>> Publiek: Waar is de stijlgids?
Ann: De stijlgids is on-- wat is de website?
>> GABRIEL: Ik denk dat het manual.cs50.net/--
Ann: Style?
>> GABRIEL: Style.
Yep.
>> Ann: Ja.
Dus de vraag, waar is de stijl 50.
manual.cs50.net/style.
Ja?
>> PUBLIEK: Als we het definiëren variabelen, is het OK
als we als [onverstaanbaar], zoals int score en dan int doel.
Dus zou je zeggen dat nu hebben we kreeg om ze samen te definiëren?
>> Ann: Dus vraag moet je hebt redundante code
wanneer u definieert variabelen zoals int score en
op de volgende regel int spel?
ROB BOWDEN: Er zijn zeker gevallen waarbij redundante code is slecht.
Ik zou niet overwegen dat redundante code.
Ik bijna nooit verklaren meerdere variabelen op dezelfde lijn ooit.
En als er iets, dan is dat omdat meestal ben een soort van commentaar achter te laten
uit te leggen wat de variabele is voor.
Dus ik zal zeggen int score slash slash.
Houdt bij wat dan ook.
In totaal slash slash.
Dus het is veel grover op die manier ze allemaal op dezelfde lijn gezet.
Ik gewoon nooit zet ze op dezelfde lijn.
>> Ann: Ik heb het gevoel alsof het persoonlijke voorkeur op dit punt.
>> Publiek: Betekent dat gaan voor voor loops en dingen ook?
ROB BOWDEN: Net binnen?
Net als int i gelijk is aan 0 komma lengte gelijk aan iets?
Dat u niet beschikt over een keuze.
Met voor lussen de initialisatie part-- dus zou je alleen hebt gezien
int i gelijk is aan 0 puntkomma i minder dan wat puntkomma i plus plus.
Dat int i gelijk is aan 0, technisch kunt u ook
doen wat we eerder zagen de komma syntax.
int i gelijk is aan 0 komma j gelijk aan 3 komma k gelijk 5.
Je hoeft niet een keuze om te splitsen die in meerdere lijnen,
en dat is standaard.
Het zien van het daar is prima.
Ann: Awesome.
Nou, handig segue in lussen.
Dus ja, hier hebben we een aantal voorbeelden van loops die jullie zagen in Scratch.
En natuurlijk al die kan gewoon worden herschapen in C.
En ze eigenlijk u toestaan ​​dat om enkele sectie van code te herhalen
totdat een bepaalde voorwaarde wordt voldaan, die we zullen
krijgen in direct na het praten over loops met conditionals.
>> Dus hebben we drie belangrijke soorten.
Voor, tijdens, en te doen terwijl die we zullen allemaal door nu.
Dus eerste is voor lussen.
Dus voor sommigen staat, voer je dit blok code.
We hebben deze coole diagram hier onder.
Maar in principe heb je in je voor, dat de eerste lijn,
je gaat initialiseren van uw variabelen.
>> Dus als we het over, i is gelijk aan 0 of i gelijk aan 10.
Wat u ook nodig dat variabel het
gaan om daar te worden geïnitialiseerd, gedeclareerd en geïnitialiseerd op een bepaalde waarde.
Dus dan hebben we een aantal voorwaarde dat er aan de hand
te controleren onze variabele tegen iets.
Dus in het geval het typische geval misschien heb je dit deel van de code wilt
vijfmaal uitgevoerd.
Dus we zouden moeten int i gelijk is aan 0, en we wilt dat het is als ik minder dan 5.
Dus die voorwaarde is gewoon gaan om te controleren dat elke keer.
Als aan die voorwaarde true, het is
gaan naar de code, dat is precies draaien wat deze kleine diagram toont.
>> En zo voert het uit.
Het werkt een variabele, dat is wat we zien
in het laatste deel van onze voor lus initialisatie daar.
Dus het zal gewoon blijven doen tot die voorwaarde niet is voldaan,
en dan zal het af te sluiten de lus en doorgaan
verder te gaan met de rest van uw programma.
Iedereen goed daar?
Cool.
>> Dus hier is een voorbeeld, zeer vergelijkbaar om iets wat ik net over sprak.
Dus we willen gewoon om af te drukken dit CS50 10 keer.
Zo zie je maar hier hebben we ons voor, en dan hebben we
initialiseren van de variabele i gelijk is aan 0 zijn.
Onze conditie is het controleren dat het minder dan 10.
Dus evalueren op true wanneer we voor het eerst starten, en dan werkt onze variabele
elke keer dat het daadwerkelijk uitvoert en drukt dit is CS50.
En zal eindigen na 10 keer.
Cool.
>> Dus terwijl loops zijn de aankomende.
En zoals je hier ziet, hebben we gewoon sommige terwijl dit Staat- vraag?
>> Publiek: Hoe kan ik springen eigenlijk gewoon niet één nummer,
maar twee nummers [onverstaanbaar] i plus plus plus?
>> Ann: De vraag was dus hoe kun je update uw variabele door meer dan één
tegelijk.
Dus ik plus plus zal update via één per keer.
Als je wilde om het bij te werken door twee, zou je kunnen doen i plus is gelijk aan 2.
>> ROB BOWDEN: Heb je gezien plus evenaart in collegezaal nog?
>> Publiek: [onverstaanbaar].
>> Ann: Het is in feite de hetzelfde als ik gelijk i plus 2.
Dus het gaat om het te nemen en bijwerken door twee per keer.
Plus is gelijk aan is gewoon iets we noemen syntactische suiker.
ROB BOWDEN: Ja, deze bestaan ​​voor vrijwel alle rekenkundige operatoren.
Dus ik keer gelijk aan zou het nummer verdubbelen.
j verdeel gelijk 3 is hetzelfde als j j gelijk gedeeld door 3.
>> Ann: of min is gelijk aan 2 zou decrement i door twee per keer.
ROB BOWDEN: Zelfs mod gelijken.
U hebt geen logische operatoren op te zien, maar dakje gelijken en ampersand gelijk,
al deze bestaan.
>> Ann: Dus een heleboel keer, in het bijzonder met uw eerste paar P sets,
je zult waarschijnlijk het verhogen van één, dus ik plus plus, j plus plus
zijn allemaal dingen die je gaat dat deze typisch gebruikt.
Maar die update voorwaarde is volledig binnen uw controle.
U kunt deze bijwerken met welke stappen of op welke wijze u beslist om.
Misschien heb je ook wilt dat het is een willekeurig getal soms.
Maar ja, er zijn veel dingen die je kunt doen met dat.
U bent niet beperkt tot i plus plus.
>> ROB BOWDEN: Just so you weten dat het bestaat, is het ook
bestaat in een andere vorm, plus plus i.
Dus als je ooit online zoeken en toevallig zien plus plus i,
vrij veel betekent hetzelfde.
Ann: Cool.
Goed?
Awesome.
Dus terwijl loops.
Zeer vergelijkbaar.
Je hebt een aantal aandoening.
Het belangrijkste ding om op te merken Hier is in plaats van
drie verschillende onderdelen op te zetten, hebben we één.
We hebben slechts enkele voorwaarde dat wordt gecontroleerd.
Op dezelfde wijze, zolang die voorwaarde true,
uw code is gaan lopen.
En als het is vals, het zal, move beëindigen
naar het volgende onderdeel van uw programma.
Dus dit is een soort van like-- wat een goed voorbeeld van het controleren
voor sommige normale toestand?
GABRIEL: Terwijl waar.
Ann: Je zou kunnen doen, terwijl waar.
Goed, 1 gelijk is aan 1.
>> ROB BOWDEN: U kunt while-- doen slechts plaats van een lus,
je kunt altijd coderen een lus in een while loop,
dus ik groter dan 0 of terwijl ik minder dan 10.
>> Ann: Awesome.
En dan hebben we het doen terwijl loops, die is zeer geschikt voor de gebruiker validatie, waar
je wilt iets uit te krijgen uw gebruiker, kijk of deze geldig is,
en dan verder vanaf daar.
Dus een van de dingen om te weten is met een doen terwijl is dat het gaat om uit te voeren,
en dan zal het opnieuw uitvoeren Als aan deze voorwaarde wordt voldaan.
>> Dus waarschijnlijk de beste manier om dit te doen is alleen maar om een ​​voorbeeld te zien hier.
Dus zoals ik zojuist noemde, gebruiker validatie is echt useful--
of doe whiles zijn echt handig met gebruiksvriendelijke validatie.
Dus dit is gewoon om opnieuw te vragen wat de gebruiker
totdat ze in een positief getal, die nuttig zijn voor uw P set zou kunnen zijn
deze week.
Dus in dit geval, wanneer we aanvankelijk dit programma uit te voeren,
het gaat om af te drukken voer een positief getal.
Het gaat om wat te krijgen input van de gebruiker,
en dan gaat het te controleren dat invoer tegen de aandoening
dat u hebt ingesteld voor.
>> Dus in dit geval is dat het gaat om te controleren.
Het gaat om te zeggen, OK, is onze inbreng negatief,
of is het 0 of negatief is, die ongeldig zou zijn.
Dus dan zou het re-prompt.
Vraag?
>> Publiek: Is dit hetzelfde dan als een while loop als je gewoon gekopieerd die code
en zet het [onverstaanbaar] while loop?
>> Ann: Dus vraag was zou Dit is hetzelfde als enkel een tijdje
lus als we gewoon Kopieer de while lus boven.
Dus in dit geval, je while lus is gaan naar de toestand eerst controleren.
Dus in dit geval, als we probeerden om te schrijven als gewoon een while loop,
het zou tijdje zeggen ingang is minder dan één.
Maar we hebben niet een ingang voor.
>> PUBLIEK: Als u [onverstaanbaar] while loop met inbegrip van deze code,
maar dan moet je de code omgingen boven de while loop ook.
Je moest gewoon deze code [Onverstaanbaar] while lus.
Ann: Het zou hetzelfde, ja.
Dus je kon gewoon write-- plaats van een doen-- ja.
GABRIEL: Maar dat is meer elegant.
Ann: Ja, dat is meer elegant.
Je kunt krijgen in het ontwerp en wat al niet, maar ja, je kunt helemaal doen.
Een andere vragen?
OK, cool.
>> Dus hebben we veel gesproken over voorwaarden al deze lussen die we hebben,
dus we eigenlijk krijgen in omstandigheden in Booleaanse uitdrukkingen.
Nogmaals, deze gebruikt u C, dus gewoon een soort van overgang
uit meer grafische interface om daadwerkelijk te coderen.
>> Cool, zo groot een, als.
Eigenlijk gewoon laat ons toe om te introduceren enkele logica in ons programma en check
sys voorwaarden.
Dus in dit geval, OK, n is groter dan 0?
Ja het is, zodat u dit kunt uitvoeren.
Het is gewoon het controleren van enkele voorwaarde dat je hebt
ingesteld, waarvan ik denk dat we allemaal comfortabel met het controleren van omstandigheden.
Cool.
Dus als het andere is uw andere één, je kunt zeggen OK, als dit waar is,
Hiertoe dient u eerst ding.
Anders wil ik dat je standaard en iets anders doen.
Zoals in dit geval, je ofwel kies een positief getal of een negatief getal.
Je hebt maar twee opties.
Je hebt het nodig om uit te voeren, ongeacht van wat uw gebruikers-ingangen.
Dus je kunt zeggen goed, is het groter dan 0?
Cool.
Druk een positief getal.
Als het niet, druk dan een negatieve.
Iedereen goed?
>> En dan een ding te herkennen is dat indien de als voorwaarde wordt voldaan,
de andere zal nooit ook uitvoeren.
Slechts één van deze zal uitvoeren tegelijk.
Dus het is een afweging.
Je krijgt niet beide hebben.
Je hebt ofwel de eerste voorwaarde.
Je hebt ofwel de als of anders, niet beide.
Die dan dingen kan maken nog ingewikkelder,
want je kunt doen als, anders, en dan anders.
Dus in dit geval, we hebben drie voorwaarden.
En nogmaals, slechts één van deze is zal uiteindelijk worden uitgevoerd.
Dus u vraagt ​​zich misschien af nou ja, wat als je
hebben iets dat kan aan twee van deze.
Misschien wat u ook invoeren voldoet aan zowel de conditie
want als en de else if.
Enige wat er aan de hand te lopen
>> Ann: Zodra het iets vindt dat het voldoet aan de voorwaarde voor die
true, dat is wat het gaat lopen en niets anders.
Dus als je had is dit nummer tussen 0 en 5 voor uw eerste,
of is dit getal tussen 3 en 5 voor de anders indien een deel,
en je voer de number-- Ik zei 0 en 5 en-- 4.
Het gaat om de eerste hit.
Het gaat om te zeggen OK, dit getal is tussen 0 en 5.
Uitvoeren en vertrekken.
Het zal nooit raken die tweede optie.
Cool?
Awesome.
>> OK we hebben ook switch statements als je wilt zelfs more-- of spijt te krijgen,
schakelaar is de volgende.
Ik krijg voor mezelf hier.
Nogmaals, indien meerdere blokken waar, zoals ik net zei
is zodra je een voorwaarde vinden dat is voldaan en een if else if anders,
laat.
Als u nodig hebt om te controleren meerdere dingen, je bent
gaat willen dit omdat gebruik het zal elke keer hier te controleren.
Dus zal dit doorlopen en als Het is groter dan of gelijk aan 90,
het gaat om af te drukken dat.
En het zal doorlopen en Controleer elk van deze.
>> Publiek: Dus dit zou meer buggy dan [onverstaanbaar].
Zou dit zijn als [onverstaanbaar]?
>> Ann: De vraag is zou dit zijn buggy of is dit te doen wat je wilt.
Het hangt af van wat U wilt van uw programma.
>> Publiek: Ik bedoel, als als je 90 in.
Ann: Als je 90--
Publiek: [onverstaanbaar].
GABRIEL: Je gaat om twee dingen te krijgen.
Ann: Je gaat om twee dingen te krijgen.
Ja, twee.
>> ROB BOWDEN: Two?
>> Ann: Nee.
>> ROB BOWDEN: Four.
Als je 90, het gaat om u te zeggen kreeg een A, je kreeg een B, je hebt een C,
je kreeg een D.
>> Publiek: [onverstaanbaar].
Ann: Right.
Dus ik afhankelijk van wat je van je wil programma.
Soms moet je check meerdere dingen.
Je zult veel dieper in te krijgen wat goed ontwerp is als je gaat vooruit.
Het belangrijkste om te realiseren is dat deze
zal hier alle vier de voorwaarden te controleren.
Overwegende dat als dit een if else if anders indien anders, zou het dat eerste geval geraakt,
het zou afdrukken heb je een A en worden gedaan.
>> ROB BOWDEN: Zelfs als we besloten om dit te veranderen om zo
en groter dan of gelijk aan 90, indien en groter dan of gelijk aan 80,
en minder dan of gelijk aan 89, of n groter dan of gelijk aan 70,
en n kleiner is dan of gelijk aan 79, zodat correct zijn.
Dat zullen doen wat we willen, maar het nog steeds controleert ieder het.
>> Dus terwijl in het eerste scenario, als we voer 90 met slechts indien anders als anders als,
en we voeren 90, daarna het gaat om te corrigeren.
Het controleert de eerste één, afdrukken heb je een A,
skip alles, omdat het al een gevonden die werkt.
Alle gevallen zijn wederzijds exclusief op basis van dat else if else if.
Dus het zal voeren de eerst als, dan is het gedaan.
Het zal gaan tot het einde.
>> Terwijl als we veranderen dit om te zijn wat ik was
zeggen met minder dan of gelijk aan 89.
Het gaat om de eerste te controleren.
Het zal drukken.
Het zal de tweede controleren.
Het gaat niet om af te drukken.
Controleer de derde één.
Niet van plan om af te drukken.
Controleer de vierde.
Nu ter perse gaan.
Dus in dat geval, de else if versie, aangezien deze gevallen
sluiten elkaar uit, het is beter gebruik als else if else if,
want dat zal moeten minder controles van de voorwaarden
dan deze versie.
Ann: Awesome.
Dus een ander ding dat we kunnen doet is switch statements.
Eigenlijk een switch statement neemt in sommige variabele,
in dit geval is n, en bepaalt dat geval uit te voeren.
Dus dit is ook één waar je gevallen moet soort wederzijds exclusief zijn.
Dus in dit geval, als we krijgen we een één, het is
gaan passen wat dat variable-- ongeacht de waarde van n
is één van deze gevallen dus 1, 2, of 3, en een afdruk van de betreffende regel.
>> En dan als je hier ziet, hebben we ook een standaard,
die kun je van denken als je anders.
Dus als je een ander nummer te halen bovendien 1, 2 en 3 in dit geval
het is gewoon om ongeldige afdrukken.
Beslissen wanneer te ifs gebruiken versus indien elses versus switches gaat
iets te zijn dat je jongens zullen zie ontwerpen wijs als je begint te schrijven
meer ingewikkelde programma, en er is geen harde en snelle regels
van wanneer ze te gebruiken.
Het hangt af van uw context.
>> ROB BOWDEN: En net om het daar te gooien
aangezien het comfortabeler sectie.
Schakelaars, ze de neiging om be-- dus je bent beperkt
in het aantal manieren waarop je kunnen ze gebruiken, omdat ifs,
de aandoening kan behoorlijk zijn alles wat je wilt.
Met schakelt de gevallen moeten getallen,
of technisch kunnen ze chars, maar klusjes, zoals we zullen zien, zijn slechts getallen.
Dus ze hebben om nummers, maar schakelaars zijn echt efficiënter dan wanneer
anders als anders als, want zelfs nemen het voorbeeld before-- goed,
de rang voorbeeld lijkt goed.
>> Nou laten we zeggen hier, we in plaats daarvan doen dit als een if else if else if scenario.
Als n gelijk is gelijk aan 1, afdrukken u een laag aantal geplukt.
Indien anders als n gelijk gelijk is aan 2, u een medium aantal geplukt.
Anders als gelijken is gelijk aan 3, hoog.
Else ongeldig.
>> Dus laten we zeggen dat was onze scenario.
Dus laten we zeggen dat we in 4, dus we verwachten ongeldig.
De manier waarop indien anders als anders als benadering gaat werken is
controleert de eerste voorwaarde.
Het is niet tevreden.
Zo controleren we de tweede voorwaarde.
Het is niet tevreden.
Controleer de derde voorwaarde.
Niet tevreden.
Dus gaan we naar de ander en afdrukken ongeldig.
>> De manier waarop de schakelaar werkt is het compileert naar beneden
in wat we gaan om een ​​sprong tafel noemen.
Het belangrijkste idee wezen dat wanneer je 4 invoert,
het kan onmiddellijk naar de standaard.
Het hoeft niet te am I geval 1 te controleren?
Nope dat is het niet.
Case 2?
Nope.
Case 3?
Nope.
Default.
OK, dit moet waar zijn I willen, en uit te voeren dan dat.
Nee, het onmiddellijk springt naar de standaard.
Of het ik voer 2, het is onmiddellijk gaat naar de 2
zonder om te gaan door middel van case 1.
>> Dus op die manier, realistisch dat is tegenwoordig
niet zo veel van een efficiencywinst.
Meestal computers zijn vrij snel, en dat is niet zo geweldig.
Maar het is zo dat switches zijn sneller.
Als je echt proberen optimaliseren, gebruiken een schakelaar.
>> Ann: Cool.
En dan hebben we ternaire operator.
Dus ik weet dat ik al eerder zei het woord syntactische suiker.
Dus het is gewoon dingen die te maken uw code veel beknopter.
Dus dit is een van die gevallen.
>> Dus ternaire operator is vraagteken colon zoals we zien in de lijn snaar
s gelijk aan n groter is dan 100 vraagteken hoge colon laag.
Dus eigenlijk hoe dit werkt is dat het n groter dan 100 is een voorwaarde.
Dus ik denk dat het kan zinvol zijn.
Het is als het stellen van een vraag.
Het zegt oh, is n groter is dan 100.
Wie weet?
En als het evalueert tot waar is, het gaat om u
het eerste ding dat is er vermeld, dat is hoog.
Anders gaat je laag te geven.
Dus dit is gewoon een heel eenvoudige en efficiënte manier te doen als een of ander.
Dat is dit alles is.
>> En als we dit schrijven als indien anders voorwaardelijk,
het zou zijn als n groter dan 100, terug hoog.
Else, terug laag.
Dit is gewoon een veel meer beknopte manier van schrijven.
>> ROB BOWDEN: Dus dit specifieke voorbeeld is wanneer je iets te doen
als dit, dit is het patroon waar ik gebruik ternair heel vaak.
Dus we hebben niet gesproken over scope nog, maar ik haat het zien touwtje s puntkomma.
Als n groter is dan 100, s gelijk hoog.
Else, s is gelijk aan laag.
Dus dat patroon, die vijf lijnen code letterlijk 100% van de tijd
in wat kan worden overgedragen was daar met een ternair.
Dus de ternaire, een regel code.
De als anders, vijf.
Dat is een voorbeeld wijs ik out elke keer weer.
Dit zou geweldige plek een ternaire operator.
Het is zo schoon.
Maar mensen hebben de neiging om nooit gebruiken.
>> Ann: Neem het weg Gabe.
>> GABRIEL: Dus nu jullie allemaal geleerd in college deze week
dat alles in een computer is binair, toch?
Net als de lampen hier.
Je kan zowel in- en uitgeschakeld.
En door alles, ik bedoel letterlijk alles.
Enkele cijfers en tekens, en strijkers, en zelfs de code die je schrijft wanneer
het wordt gecompileerd naar machine code en dat soort dingen,
dus het komt allemaal neer op 0 en 1 '.
>> En dus wanneer we te maken hebben integers, welke
is iets dat is technisch zeer eenvoudige, moeten we in staat zijn om dingen te doen
als ze toe te voegen, dat is waarschijnlijk een van de eenvoudigste dingen
je kunt doen om twee gehele getallen, toch?
Dus optellen en aftrekken werkt gewoon als het werkt in decimale notatie,
behalve hier is het binaire, toch?
Dus het is in de basis twee.
Dus voeg 1 plus 1.
Dat geeft 0, en 1 aanreikt.
En gewoon blijven doen, dus nu komt de meer interessante vraag.
>> We weten hoe we alle vormen positieve gehele getallen in de computer,
maar laten we dit een oefening.
Doe alsof jullie zijn allemaal in 1960 of iets proberen om een ​​computer te maken,
en je moet komen van een manier van opslag minus 1,
bijvoorbeeld of minus integer voor die kwestie.
Hoe zou je dat doen?
Het even welke ideeën?
Gooi alles bij me.
Ja?
>> Publiek: [onverstaanbaar] wijzen een speciaal als uw [onverstaanbaar].
>> GABRIEL: U kunt wijzen een speciale bit, die 0 of 1.
Laten we zeggen dat men als het positief en 0 als het negatief is.
En dan de rest van de bit is gewoon om het nummer op te slaan.
Cool.
Dus dat is een heel goed idee.
We hebben, ik weet het niet, 200.
En als de eerste bit ingeschakeld, dan is het plus 200.
Als het is uitgeschakeld, is het min 200.
Cool.
>> Er is slechts een klein probleem met deze,
dat is als we proberen om dingen te vatten.
Dus stel we hebben 11111 hier, en we optellen dit met 00100 wat dan ook.
Als die twee zijn positief, dat is prima.
Maar indien een van ze is negatief, net
laten we zeggen dat dit stukje hier is degene die verantwoordelijk is
voor-- Ik ga een separate-- maken dus dit betekent dat dit aantal hier
is positief.
Dit betekent dat deze nummer hier negatief is, toch?
>> Maar dan als je gaat ze samen te vatten, je
een if statement nodig zeggen oh als dit 0,
dan is mijn som zal zijn iets anders, toch?
Dus er is een iets meer slimme manier te doen
dat die twee-complement wordt genoemd.
Dus eigenlijk wat we doen is definiëren we min 1
om het ding te zijn dat als we optellen tot 1 geeft ons 0.
Laat me dat herhalen.
Dus laten we zeggen dat dit hier is 1.
Wat is het ding dat nature in positieve gehele getallen
toegevoegd dat geeft ons 0?
Wat als we proberen om het toe te voegen aan dit nummer?
We gaan have-- OK, dus laten we toe.
We gaan te hebben 1 plus 1 is 0, en dan aanreikt.
En dan gaan we weer krijgen 0.
Ik krijg de war.
En je gaat krijgen 0 en 0 en 0 en 0 en 0 en 0.
Veel 0's.
>> Op zijn laatste, zijn we niet gaat om te kunnen om het over te dragen,
want laten we zeggen dat we alleen te maken één byte, dus slechts 8 bits.
Dus wat doet de computer standaard is gewoon vergeet dat [onverstaanbaar],
OK?
Dus dit is wat wordt genoemd het twee-complement.
We hebben gewoon te definiëren minus 1 op de te ding hier dat als je die toevoegen aan 1
geef je aan 0.
En dat is wel cool omdat we niet echt
nodig laat om uit te voeren een ander type sum
afhankelijk van of dat een negatief of een positief getal.
Heeft dat zin?
>> Dus een ding dat we doen hier om te zetten
tussen een positieve en een negatieve integer is dan spiegelen we alles,
en dan voegen we 1 aan dat nummer.
Als u probeert om het zelf te doen op een stuk papier,
je gaat zien dat is logisch.
Maar als ik dit nummer hier, dit is vijf.
Dus als ik flip alles hier dus 1, 1, 1, 1, 1.
Flip, flip, flip.
En voeg ik 1 aan.
Ik ga precies minus 5 hebben.
OK?
>> Logisch soort omdat als u proberen om dit samen te vatten met het nummer
dat we eerder hadden, wat was-- laten we weer omdraaien dit.
Het was 101 en veel 0's.
Als u probeert om deze toe te voegen twee getallen elkaar,
je gaat precies 0 hebben.
OK.
Heeft u vragen?
>> Publiek: [onverstaanbaar]
>> GABRIEL: Wat bedoel je?
>> Publiek: Negatief aan positieve [onverstaanbaar].
>> GABRIEL: Nee, je klep en je 1 altijd toevoegen.
Yeah.
OK, dus personages ook gecodeerd binaries.
We hebben ASCII-tabel, zoals u ook zag in collegezaal, toch?
Dus het is eigenlijk een mapping van de dingen.
En hier kan ik niet genoeg benadrukken dat voor een computer, en een 65
zijn letterlijk hetzelfde.
Dus als ik iets als char c schrijven gelijk aan een, kan ik tegelijkertijd
gewoon schrijven 65 hier, en het zou precies hetzelfde zijn, OK?
Er is geen enkel verschil.
>> We meestal de neiging om te zetten personages in variabelen van het type.
Char, niet omdat ze in wezen gemaakt, maar omdat
van menselijke conventie.
Maar je kunt gewoon gaan met gehele getallen in plaats van de variabelen van het type char,
en je komt wel goed.
Het enige werkelijke verschil tussen een char c en een int i
dat een int vier bytes in de meeste systemen, terwijl een char één byte.
Ze zijn in wezen de hetzelfde in termen van data.
Dus wat zal hier af te drukken?
Hier zijn we het afdrukken van een cijfer met behulp van printf met een plus 1, en net zoals integers,
chars kan worden samengevat, zodat karakters kunnen ook worden samengevat.
Dus dit is precies 65.
Dus er gaat worden 66, en hier hebben we
65 plus beetje een min grote A, die zal zijn, weet ik niet echt weten.
Maar het zal precies de kloof tussen de hoofdletters
en de kleine letters, dus we gaan om kleine een te krijgen, toch?
Yeah.
Dus dit gaat om een ​​af ​​te drukken karakter en dat is precies deze.
Goed?
Heeft u vragen?
>> Hier hebben we een heleboel verschillende types voor numerieke variabelen.
We praten nu al over int.
Float is gewoon een manier to-- dit is echt grappig, want toen ik voor het eerst leerde
om terug te programmeren in de dag met Python, het eerste programma dat ik ooit
geprobeerd om te schrijven, zag ik dat er een soort genoemd in en een type genaamd float.
En de float was voor alle reële getallen.
Dus toen vroeg ik waarom zou Ik ooit een int gebruiken dan?
Want als ik alles kan gebruiken reële getallen met een vlotter,
Ik zou gewoon stoppen met het gebruik ints, toch?
Omdat reële getallen zijn net als meer generiek.
>> Het blijkt dat dit niet het geval computers
omdat ze in wezen verschillende dingen.
Dus integers en floats, de handelingen die je doet om ze te
wezenlijk verschillend omdat van de manier waarop ze zijn opgeslagen, OK?
We gaan een beetje praten wat meer over dat in een tweede.
>> Dus dubbel is gewoon een groter float.
Meestal in de meeste systemen, een vlotter is vier bytes, net als een int.
En een dubbele is acht bytes.
Een lange lange is eigenlijk alleen maar een symbool dat u toevoegen aan een type als int.
U zegt long long int als deze.
Lang lang int x om het langer te maken.
Dus in de meeste systemen, dat zal geven acht bytes in plaats van de gebruikelijke vier.
En kun je eigenlijk laten vallen van de in, zodat het net lang lang kan zeggen,
en dat werkt ook, OK?
U kunt ook andere dingen doen, zoals unsigned int, of weer gewoon unsigned
ook zou werken.
En dat zou x zijn een variabele zoals alles is positief,
dus je kunt niet echt negatief nummers op de manier die we zagen hier.
Dus volgende prachtige floating point en precisie.
Dat is een van de redenen waarom u willen ints in plaats van praalwagens gebruiken,
omdat ints zijn 100% nauwkeurig, toch?
Het is precies dat nummer.
Voor drijvende punten, als je zeggen antwoord is gelijk aan 1 op 10--
Ik ben toevallig deze exacte hebben programma hier, float.c.
Dat drukt tot 20 cijfers achter de komma.
1 gedeeld door 10, en dat meestal is 0,1, toch?
Maar hier, als we te maken zweven en dan lopen we het,
zien we dat het is precies 0.1 niet.
Het is 0,149 iets.
>> En waarom is dat?
Want je kunt niet echt elke vertegenwoordigen enkel mogelijk reëel getal in het geheugen
omdat er ontelbaar velen van hen.
We zijn dus technisch gezien alleen in staat om vormen een eindige hoeveelheid daarvan
met een beperkte hoeveelheid gegevens.
Maar het is echt interessant.
Nu dit roept de vraag hoe je dat zou
gaan vertegenwoordigen dit met bits, toch?
Dus hoe zijn praalwagens opgeslagen?
Met gehele getallen was het gemakkelijk.
Maar met praalwagens je wilt om het bereik te maximaliseren,
en je wilt in staat zijn om te vertegenwoordigen enorme aantallen en zeer kleine getallen zoals
0.000001 tegelijkertijd.
Dus nogmaals, hetzelfde spel.
Heeft iemand enig idee hoe we konden gaan vertegenwoordigen float in het geheugen?
Gooi alles.
Ja, graag.
>> Publiek: [onverstaanbaar] als als het was twee ints en één
zijnde de [onverstaanbaar] en één wezen alles na de komma.
GABRIEL: OK, cool.
Dus twee verschillende gehele getallen.
U kunt 12.45, dus dat is 12 en 45.
Nice.
Wat waren wondermooi ga je zeggen?
Het zelfde ding?
Yeah?
>> Publiek: [onverstaanbaar] notatie waar u scheiden de basis.
>> GABRIEL: De wetenschappelijke notatie, ja dat is meestal wat er gebeurt.
Dus dit is wat de mantisse genoemd.
Dat is wat is eigenlijk de nummer en de exponent
is precies waar de komma is, toch?
Dus dit gaat iets te zijn van de vorm 1, 2, 3, 4, 5 keer 10
de minus 4.
Ik besefte dat-- ja, precies.
En dan deze 10 tot de min 4 gaan bepalen waar de komma is, OK?
In Brazilië gebruiken we komma.
Hier gebruiken jullie een punt.
Dus een punt.
>> En dit is cool, want dan kun je richten veel van je stukjes op deze kerel
Hier, op de mantisse, en dan is dat gaat om uw daadwerkelijke precisie zijn.
En u kunt dit doen in decimale of in het binaire systeem.
Er zijn verschillende manieren om dit te implementeren.
Vragen?
Ja?
Publiek: Hoeveel plaatsen na de komma [onverstaanbaar]?
>> GABRIEL: Dat is een ingewikkelde vraag, want het is nooit echt 100% nauwkeurig,
want zoals u hier, voor zien sommige nummers is het 100% nauwkeurig.
Ik geloof dat als we 0,5 hier, het gaat 100% om precies te zijn.
Het gaat zijn 0,500000.
Dus in dat geval, is het perfect.
Maar in andere gevallen, het is veel minder perfect.
In mijn ervaring, zoals maximaal vier, vijf cijfers achter de komma is vrij nauwkeurig.
Als je een dubbel gebruik, het gaat om zijn manier nauwkeuriger dan dat, OK?
>> ROB BOWDEN: Dus gewoon om te gooien wat meer context op drijvers,
Ik herinner me nog nooit 100% hoe de spec van praalwagens echt werkt,
maar ik heb je altijd onthouden dat praalwagens begint steeds rommelig.
Dus het idee is dat als je echt, echt grote aantallen of echt, echt
kleine aantallen, we beginnen erger en erger
bij het differentiëren tussen twee dicht praalwagens.
>> Dus hoe ik te denken over is met floating point onnauwkeurigheid,
er zijn twee praalwagens die als ik probeer ze te specificeren
in C, hoewel ze verschillende nummers,
ze gaan worden opgevat als even,
want we kunnen ze niet anders op te slaan.
We moeten dezelfde stukjes gebruiken.
En dus als we in echt, echt grote aantallen,
praten als 10 op de 300 of iets, het op dat moment
dat 10 tot 300 of 5 maal 10 tot 300
kan niet worden onderscheiden 7 maal 10 tot 300.
Dus dat is een vrij groot verschil tussen de twee nummers.
>> Maar dan wanneer je naar beneden tot het normale bereik dingen,
je de neiging om behoorlijk te zijn goed in differentiëren.
En dan wanneer je naar beneden echt klein, je bent ook weer al behoorlijk slecht.
Dus net als een hele hoop 0.0000, wordt het behoorlijk slecht.
GABRIEL: Ja, dus een snelle notitie.
Dit doen nooit.
Probeer nooit om te vergelijken drijft met behulp van gelijken gelijken,
want zelfs als ze bijna de Hetzelfde bijna hetzelfde is niet hetzelfde.
Dus wat je meestal doen is je aftrekken ze neemt de absolute waarde van dat,
en kijk of dat is kleiner dan 0.0001 of iets dergelijks, OK?
En koel.
Ik weet dat veel mensen hebben wat achtergrond in Java,
vooral degenen die wel AP informatica, toch?
En Java is een taal die meestal gebaseerd op C,
het heeft een paar zeer grote verschillen.
Maar voor loops en ifs, en dat soort dingen dat, ze zijn allemaal hetzelfde syntax.
Ik heb een paar programma's hier om deze te tonen.
>> Dus bijvoorbeeld, een eenvoudige hello wereld.
Dit is hallo wereld in C, die u jongens zijn zeker vertrouwd met,
en deze en deze is in Java.
Dus in Java hebben we dit public class, hallo wereld,
en openbare static void belangrijkste, en string args.
De string args gaan te verschijnen in C zeer binnenkort.
Maar laten we er nog niet heen.
Op dit moment hebben we leegte hier, wat betekent dat hoofd is geen argumenten nemen.
En dan hebben we System.out.println, het en dat is
soort het equivalent voor printf.
Hier hebben we niet echt de backslash nodig n omdat afdruk ln dat voor je doet.
Het voegt de backslash n aan het einde van de regel.
>> Maar als je in zoiets als een voor u
kan zien dat ze vrij veel het zelfde ding.
Dus initialisatie, en de conditie, en de update
is-- Ik miste een ruimte hier-- ze vrijwel hetzelfde, behalve Java
heeft als een paar meer high level stuff.
Hier kunnen we doen plus ik en Java zal automatisch
maken dit ik hier, dat is een geheel getal in een reeks,
en voeg dan de twee strings samen.
Hier in C moeten we doen de &% d.
De lijn hier, de voor ziet er precies hetzelfde.
>> En als we kijken naar wanneer de ifs Ook zien er precies hetzelfde, toch?
Dus de echte grote verschillen zijn in die dingen die je hier ziet.
Public static, leegte, en vervolgens public class indien.
Dus Java heeft wat is zogenaamde virtuele machine.
En het is zeer sterk gebaseerd op wat heet object georiënteerd programmeren,
dat is een zeer, zeer vaak paradigma voor het programmeren tegenwoordig.
En deze klasse ding is wat je ziet, iets van object-oriëntatie,
wordt u een klasse te maken en dan moet je kunnen objecten uit die klasse ontlenen.
We gaan niet om te praten veel over dat in CS50,
maar dat is zeker iets echt cool,
vooral als je wilt in te gaan meer geavanceerde web development
aan het einde van de cursus als stuur je afstudeerproject
en een aantal leuke kaders en stuff.
>> Dus eigenlijk het idee is dat je wil niet opnieuw te implementeren iets,
zodat je iets dat te maken zeer generiek, zoals de vorm,
en dan heb je te maken verschillende vormen van het,
en dan uit elk van deze vormen, die u maakt
specifiekere vormen in drie afmetingen of iets dergelijks.
En ze hebben deze hiërarchie ze erven van de andere, zodat
alle functies en variabelen zijn die de grote vorm heeft hier, al deze
gaat hebben, en al deze zijn gaan, enzovoort, enzovoort hebben.
Dus dat is het basisidee.
>> C niet hebben dat, maar C ++ heeft dat soort functie.
En Java is sterk beïnvloed door object-oriëntatie,
dus dat is de reden waarom zie je klasse hier de hele tijd.
En de andere is Deze Java virtual machine.
Dus dit, denk ik, is een heel slim idee.
Dus wat de mensen die uitgevonden java deed is
ze wilde niet hun code tweemaal compileren
als ze het uit te voeren in een Windows, of een Mac, of Linux, dus wat ze doen
wordt ze letterlijk rennen iets als het apparaat,
maar je niet echt zien gebeuren.
Zodat ze een virtuele machine te laten draaien binnenkant van uw computer, die
is in principe net als een mini-besturingssysteem.
En dat besturingssysteem het doel van het systeem in het leven
is gewoon om te draaien wat byte code genoemd.
>> Dus in plaats van in C, de weg zouden we compileren is dit te maken als en voer
./if.
Ik vergat de backslash in.
In Java, zou je eerst doen Java C om het te compileren, if.c.
Het is niet C. Het is dot java.
En dan moet je rennen niet ./.
U krijgt dit nieuwe bestand if.class, maar je kunt niet echt
run if.class nu net zoals we voorheen.
Dit is niet uitvoerbaar.
Je moet rennen.
Je moet het worden meegenomen in een programma genaamd Java,
en dat programma de virtuele machine, en dan doe je if.class, of indien.
Ja.
En dan werkt het.
OK dus dit is een soort van de virtuele machine gebeurt.
C heeft dat niet, dus als ik zet dit programma op een Windows-machine,
het zou niet werken in C. In Java het doet.
Vragen?
Cool.
Dat is als voor de super sectie voor vandaag.