ROB: Oke. Welkom bij het eerste deel. Ik ben Rob. JOSEPH: Ik ben Jozef. ROB: Dus we recht in duiken Eerste ding om te praten over is de Appliance. Dus hopelijk de meeste van jullie hebben gedownload reeds. Maar je kunt de instructies bij cs50.net/appliance. Oh god, nu ben ik zelfbewust. Ik hoor het nog steeds. JOSEPH: Wow, het klinkt als het is gedesoriënteerd. ROB: Dus sommige mensen hebben gehad problemen mee, dus wacht niet tot de laatste minuut van het probleem ingesteld op proberen en het oplossen van het apparaat en vinden dat het niet werkt. JOSEPH: En als er iets niet werkt en je hulp nodig hebt, kunt u naar cs50.net/discussion waar we hebben een forum waar u kunt uw vragen. En we zullen uiteindelijk om ze te krijgen. ROB: Oke. Dus dit is wat de Appliance eruit ziet. Nogmaals, het is gewoon een volledig gescheiden besturingssysteem dat binnen welk besturingssysteem u draaien op uw laptop. En de belangrijkste dingen die je worden met behulp van zijn gedit. Dus hopelijk heeft dit al uitgegroeid tot een vertrouwde website. De terminal. En u kunt ook Chrome draaien binnen de Appliance. Er zijn een paar mensen geweest die internet hebben gemeld niet in de Appliance. En sommigen van hen hebben net aangenomen dat er niet hoort te zijn internet in de Appliance. Maar ja, er wordt verondersteld met internet zijn. Ik zeg het nu, maar het doet niet echt iets betekenen. Als het internet niet werkt, dit is wat je de neiging om nodig te lopen om het te repareren. Als u internet problemen, niet herinneren, post het op Bespreken, en we zullen zeggen, lopen dat. Maar het internet zou moeten werken. Dus de enige andere ding - ja, niets anders is echt relevant. Maar ik wilde alleen maar op wijzen dat - zien in deze rechtsonder. Dus elk van uw apparaten moet hebben een IP-adres. En later in het semester, dit IP adres zal steeds relevanter worden naarmate je werkt op het web p-set, omdat je zult in staat zijn om de toegang website je werkt op basis van uw lokale Chrome met behulp van dit IP-adres. Maar wat ik graag het IP-adres gebruiken voor - en je hoeft dit niet te doen, ik wil gewoon het te wijzen - is hier. Dus dit is een terminal venster op mijn Mac, is dit niet in de Apparaat helemaal. En je kunt opzoeken wat dit commando doet. Maar ik ga SSH direct naar mijn Appliance. Ik weet niet wat het IP is. JOSEPH: 168 - 168.224.1.0. ROB: Dus zodra ik klaar ben met deze, loggen Nu, in principe, is identiek aan een terminal venster in mijn Appliance. Dus ik vrijwel nooit echt gewerkt vanuit het apparaat zelf. Ik heb altijd al het draaiende de achtergrond geminimaliseerd en SSHed erin. Het probleem met dit is dat u niet van plan kunnen gedit eenvoudig gebruik rechtstreeks uit deze. Maar als je wilt een echt cool te zijn hacker, dan moet je gebruikt om een ​​te krijgen command line tekstverwerker toch. Dus Vim en Emacs en Nano, al deze zijn verschillende alternatieven. Nano neiging om de gemakkelijkste. En ik denk dat het geen syntax highlighting. Oh, nee, het geheel doet. Dus je kunt Nano te gebruiken, omdat dat is vrij eenvoudig. Je ziet al deze commando's onderaan. Deze kleine wortel symbool. Als u nog niet eerder hebt gezien, zul je Waarschijnlijk zie het nu veel. Dit betekent over het algemeen de controle wortel, zoals de linksonder van je toetsenbord controle karakter. Dus hier vertelt me ​​hier beneden - oh, het is niet afgesneden als ik vergroten Dus Control, X is hoe Ik ga om af te sluiten. En het zegt ik kan raken Y voor Ja, voor het opslaan, N voor Nee Dus dat is Nano. Vim en Emacs de neiging om iets meer te zijn ingewikkeld en overweldigend. Maar je kunt een gebruikte om het te krijgen, en dan zul je love it. Dus dat is dat. JOSEPH: Geen behoefte om dat te doen. ROB: Ja. U bent vrij om gedit gebruiken voor de rest van het semester. Dus elke appliance-gerelateerde vragen? Of heeft u ideeën over wat anders moet worden gesproken over het apparaat? Ja. LUIDSPREKER 1: Wanneer u SSHed in uw ding, was het wachtwoord Crimson? ROB: Ja. Het wachtwoord voor vrijwel alles in het apparaat gaat zijn Crimson. SPEAKER 2: Installeer als een echte IDE op het apparaat, zal het werken? ROB: Ik stel me Eclipse heeft wel een Fedora versie, waarbij ja, kun je dat doen. Het is waarschijnlijk niet echt de moeite waard. SPEAKER 2: OK. Dus het is waarschijnlijk makkelijker als ik wilde Gebruik Eclipse, gebruik gewoon de inheemse en vervolgens uploaden naar - ROB: Oh, dat is waarschijnlijk ook makkelijker. Maar je kunt het werkend te krijgen binnen de Appliance. JOSEPH En voor de camera, de vraag was, kunt u een andere installeren IDE binnenkant van het apparaat? ROB: Eclipse wordt een voorbeeld van een IDE. Enig ander toestel vragen? Oke. Dus we zullen nu overgaan tot opdrachtregel -interface-gerelateerde dingen, dus CLI. En nogmaals, ik ga gewoon om in te werken hier, omdat dit identiek aan werken binnen een terminal venster binnen de Appliance. Hoe gaat dat lettertype op zoek? Is dat groot genoeg? Oke. Dus er zijn een heleboel opdrachten die moet je behoorlijk aan wennen het hele semester. De grote twee voor het navigeren zijn ls, lijst de bestanden in deze map, en cd, dus veranderen directory. Dus ik kan veranderen om het bureaublad en vervolgens een veel voorkomende patroon is cd naar een directory en onmiddellijk ls wat in de directory. Mensen soms ook niet beseffen dat Tab voltooiing is een ding. Dus zoals cd, VH, en dan druk ik Tab. Ik heb bijna nooit uittypen het hele ding. En als ik dan blijft raken Tab nogmaals, het zal automatisch beginnen met het aanbieden voor mij. Dus ik kan cd vhosts, lokale host. En dat zal alleen maar - in het geval u nog niet gehoord van de term vóór, directory is gewoon een ander woord voor de map. Dus als je nu ziet - laten brengen dat naar boven. Dus als je nu ziet in haakjes, u zie de kleine tilde, slash, vhost, slash, lokale host. Dus de tilde, die verwijst naar mijn home directory. Het is een directory die je bent in wanneer je SSH inch Het is de map je zit wanneer open je een terminal. Het is waar je begint. En dus ben ik de binnenkant van mijn home directory, en ik ben de binnenkant van de vhost directory binnenkant van mijn home directory. En dan ben ik de binnenkant van de lokale hostmap binnenkant van dat. Dus sommige andere nuttige dingen met cd - of goed, in het algemeen, dus dot altijd verwijst naar de huidige directory. Cd, dot is een vrij waardeloos commando. Maar dat is aan het veranderen om de huidige directory. Een nuttiger een qua cd is puntje, puntje, dat is gewoon een map gaan. En merk op dat deze - Ik wil aliassen zeggen, maar deze symbolen, dot, en dot, dot, die werk voor vrijwel elke opdracht die u bent gaan denken van hardlopen. Dus zoals cd is waarschijnlijk waar je in met de meeste, maar deze zijn niet dingen die gewoon cd begrijpt. Het is vrij veel wat je hele command line begrijpt. Veel van de programma's te begrijpen dot en dot, dot. Dus de andere nuttige degenen - cd, dash. Dus dat gaat me aan het brengen laatste map die ik was binnen Dus soms ga ik iets doen als, oh, ik werk hier. En ik zie een fout met iets, en Ik ga onderzoeken is door te gaan naar enkele willekeurige directory ergens. En ik weet niet of het zal laat me daar. Het zal. Dus dan moet ik doen wat ik wil in deze directory. Blah, blah, blah, blah, blah. En ik was als, oke, ik wil terug naar waar ik was gaan. cd, dashboard, en het brengt me direct terug. Dus ik ga een hoop te gooien van deze op u vandaag. Ik verwacht niet dat je te onthouden allemaal. Het is een soort van gewoon weet dat ze bestaan. En dan later, als je net als, hmm, ik wil terug naar de directory dat ik juist op, oh, wacht, zoiets bestaat. Je hoeft niet om gewoon te typen in in de gehele index weer. JOSEPH: En uiteindelijk zul je gewoon gebruik ze over en weer, en het zal spiergeheugen geworden. ROB: Ja. Dus hoe ik al eerder zei, dat tilde is je home directory. Dus ik kan cd, tilde. Maar ik heb niet eens te dat doen als ik - Ik ga terug naar de map, zodat het is niet een zinloze voorbeeld. Maar als ik gewoon cd doen, dat is ook de hetzelfde als, ga naar mijn home directory. Ik doe Command, K. JOSEPH: U kunt ook duidelijk typen, de woord, en het moet duidelijk. ROB: En ik denk ook Control, L doet het ook. Zo veel verschillende manieren. Ik denk dat er een aantal verschillen waar duidelijke en Control, L zal alleen duwen echt boven en Ik kan nog steeds terug te bladeren. Command, K letterlijk vernietigt alles, en je kunnen niet terug scrollen. Op zijn minst, dat is hoe het werkt in iTerm2. Ik weet niet hoe andere dingen - oh. Met SSHing, dus als je op Windows, je gaat te hebben om PuTTY downloaden om SSH sinds Windows niet hebben als een ingebouwde SSH tool. Van Macs, kunt u gewoon SSH direct vanuit een terminal venster. OK. Vragen? Met ls, dus iets om te wennen aan met de meeste van deze commando's is - goed, ik zal gewoon doen een. Ls, dash, l. Dus dash, l is wat we gaan om een ​​vlag te bellen met ls. En veel van deze commando's hebben vlaggen dat u kunt doorgeven aan hen. Dus in dit geval, dash, l is een vlag die vertelt het mij een volledig geven lijst van alle informatie van deze bestanden. We zien hier dus dat de desktop was gewijzigd op 30 juli om 12:54. Downloads werd gewijzigd op 6 september. Dit zijn de huidige omvang en bytes van deze mappen. Je hoeft niet te begrijpen dit alles. Dit spul aan de linkerkant, deze drwx's, dat zal veel relevanter geworden later wanneer je te maken hebben met - dat heeft te maken met wie machtigingen om te kijken naar deze bestanden. En dus als je de enige gebruiker op waren niet deze computer, zou je in staat te zijn laten we zeggen, OK, ik moet de enige zijn toegestaan ​​om te kijken naar dit bestand of ik ben gaan om iedereen om te kijken naar dit bestand. Zodat iemand anders op mijn computer kunnen kijken naar dit bestand. Ik weet niet eens wat dit - wat heeft dit te doen? JOSEPH: Ik ben niet helemaal zeker, eigenlijk. ROB: Geen idee. JOSEPH: Maar als je niet weet, is er een nuttig commando dat je kunt gebruiken om u te vertellen wat de output betekent. En als je typt in de mens voor de opdracht - dus M-A-N. ROB: Man. De mens is een ander dat is erg handig. En man, ls. Dus de man-pagina's, ze hebben beide opdrachten die je gaat gebruiken op de opdrachtregel, en ze hebben ook functies die relevant zijn met C. Dus je kan de mens - en ik negeerde 3. Maar man 3 printf gaat brengen de C-versie van printf. Maar als ik gewoon doen man printf, dit is gaan naar de commando printf brengen dat gebeurt op de opdrachtregel. Dus man, ls. De man pagina's kunnen mooi zijn overweldigend. Hier, hoewel, je zult deze lijst zien al deze vlaggen die ls begrijpt. Dus als we naar dash, l, en - Ik ga gewoon deze naar je gooien. Maar om te zoeken, je wilt om eerst de vraag te raken mark of slash toets. Dus slash. En dan kan ik zoeken voor wat ik wil. Dus ik ga slash voor dash, l. En daar was het. Dus gebruik een lange lijst formaat. Dat niet helpt me erachter te komen wat dat bepaalde kolom bedoelde, maar ik neem aan dat ergens in hier het zou uitleggen. Dus gebruik de man pagina's voor elke opdracht dat je niet meteen begrijpen. Ik ben vrij zeker dat je kan zelfs de mens, man. Een interface naar de online handleidingen. Oh, een laatste dat is misschien iets relevant is ls, dash, een. Dus merken als ik gewoon doen ls, Ik krijg deze vijf bestanden. Als ik ls doen, dash, een, ik krijgen veel meer bestanden. Dus het ding gemeen tussen al deze nieuwe bestanden is de stip op voorhand. Dus de conventie is dat een bestand dat begint met een punt is verborgen. Zodat u niet wilt dat bestand zien, je niet willen hebben knoeien met uw directory listing. Het is pas wanneer je expliciet vraagt, oke, ls, dashboard, een, toon mij. De een staat voor alle bestanden, waaronder verborgen degenen. Dus sommige andere opdrachten. Oh, vragen op dat punt? Ja. SPEAKER 3: Wanneer je ls doen, een, wat is het punt, punt? ROB: Oh. Dus dit is wat ik het over had. Het is hetzelfde ding waar Ik kan zoals CD, puntje, puntje. Dus technisch, dot en dot, dot zijn bestanden die bestaan ​​in elke directory waar de stip bestand verwijst naar de huidige directory. Dus als ik cd, punt, ik ben gewoon gaan voor een verblijf in de directory. En puntje, puntje verwijst altijd naar de vorige map een niveau hoger. Dus als ik in logboeken en ls, dash, al, Ik zie puntje, puntje. cd naar dot, dot brengt me bij de vorige map. Yeah. OK. Dus nog een vrij belangrijk commando rm. Dus dat is wat we gaan gebruik te verwijderen. En laat ik eigenlijk een andere doen commando eerste. Dus mkdir. Mkdir is hoe je kunt creëren directories. En ik zal een tijdelijke map aan te maken en ga in die tijdelijke map. En zoals verwacht, het is leeg. Maar als ik ls, dash, een, ik heb nog steeds dot en puntje, puntje, want dot verwijst naar de huidige directory. En punt, punt verwijst naar de vorige map. En die zal altijd blijven bestaan, ongeacht de map waarin u zich bevindt Dit is een volledig overbodig commando, maar aanraking. Ik gebruik het, want het is een eenvoudige manier om bestanden te maken. Dus raak een Raak b Raak c is gewoon naar drie bestanden genoemd maken, b en c die volledig leeg zijn. Dus het punt van mij het creëren van die in de eerste plaats is gewoon zo dat rm is hoe we ze kunnen verwijderen. Dus rm, een. Het gaat om te vragen, te verwijderen regelmatig leeg bestand een? En dan zeg ik ja. Dus als ik zeker weet dat ik wil wissen dat bestand zonder dat u zijn gevraagd, verwijder regelmatig leeg bestand?, dan rm, dashboard, f gaat worden de vlag die zegt, dwingen het te verwijderen zonder zelfs gevraagd me, oh, ben je ervoor dat u het bestand wilt verwijderen? Ja, ik weet het zeker. Dus rm, dash, fb zal alleen doe het zonder te vragen. Dus laten we wat meer mappen. mkdir, tmp2, cd, tmp2, raak een, aanraking b. OK. Dus nu wil ik verwijderen tmp2 als een directory. Dus rm tmp2. Je kunt niet verwijderen tmp2, het is een directory. Dus het probleem hier is dat rm niet meteen aan het werk op directories. Het is alleen bedoeld voor bestanden zoals non-directory bestanden. En dus wat we kunnen doen hier is rm, dash, r. Dat staat voor recursief, die misschien wel nog niets voor u betekenen. Maar als je naar recursie, het zal meer betekenen. Dus rm, dash, r, tmp2 gaat recursief gaan in die map. Dus afdalen in directory tmp2? Ja, laten we gaan in die. Willen we tmp2 verwijderen / a? Ja. Willen we tmp2 / b verwijderen? Ja. Nu willen we verwijderen de directory tmp2? Ja. En dus nu de directory en alles binnen van deze is verwijderd. Er is technisch gezien een commando rmdir die u kunt gebruiken om te verwijderen directories, maar werkt alleen op lege mappen toch. En om te zien dat, laten we gewoon do mkdir, tmp2 weer. Tmp2, raakt een. OK. Dus als ik probeer om dirtmp2 verwijderen, het zal zeggen, directory niet leeg. Daarom gebruik ik vrijwel nooit het verwijderen opdracht dir toch, want rm, dashboard, r zal werken op lege mappen en niet lege directory. En ook, als ik niet willen hebben om door dat hele proces van afdalen in de directory en het verwijderen van elk afzonderlijk dossier, rm, dash, rf, tmp2. En nu is het weg. Iets om voorzichtig te zijn over is rm, dash, rf. En het maakt me bang om nog te typen, want als ik per ongeluk Enter of zoiets. Dus rm, dash, rf, tilde zou, zonder gevraagd me, is de f niet gevraagd me, zal het automatisch verwijderen mijn hele home directory en alles erin. Dus je zou kunnen denken dat een dom ding om te doen. En ja, het is. Maar het kan heel gemakkelijk gebeuren door ongeval als, zeg, ik wilde verwijderen mijn slash, vhost directory. En voor het snel typen, Ik dit per ongeluk doen. Dat zal recursief verwijderen zowel mijn home directory en de vhost directory in deze specifieke directory die gebeurt nu niet bestaan. Maar dit zou toch te verwijderen mijn hele home directory. Althans door niet met een f, het zou me eerst vragen. En ik zou willen worden, oh, nee, ik niet willen doen. Maar mensen, schuine streep, met inbegrip me de neiging om in de gewoonte van om altijd rf-ing. Zelfs gewone bestanden die ik kan alleen rm, c, heb ik de neiging om gewoon rm, dash, rf, c. Wees voorzichtig wanneer u rf-ing bent. SPEAKER 4: Wat doet C doen? ROB: C Ik heb het over die C bestand in deze directory, dat rm, c. JOSEPH: En meer gevaarlijk, als je gebruik ster, verwijst naar alles de directory. Dus wat ik vaak de neiging om te doen is zal ik gaan in een map en ik wil Verwijder alle bestanden in. Dus rm, dash, rf, ster. ROB: Ja. Rm, dash, rf, ster. JOSEPH: En als je niet oppast welke map je zit - Ik was niet in temp, maar ik was per ongeluk in mijn home directory, dan zal ik alles verwijderen in mijn home directory. En ik heb eigenlijk dat eerder gedaan, en Ik denk dat je dit hebt gedaan vóór of Jay is al eerder gedaan. ROB: Ik heb per ongeluk verwijderd - dus negeer dat bevel voor een beetje. JOSEPH: Niet leuk. ROB: Dus in de slash bin directory is een bos van binaire bestanden waar er zal vertrouwd zijn degenen zoals Clang. Nou, kletteren en in principe al deze dingen die ik ben actief op de opdrachtregel lijn zijn in dit slash bin. JOSEPH: Net ls is hier. ROB: Dus punt, slash, ls zou een lijst van deze map. JOSEPH: Rm is ook in deze directory. ROB: Ik heb per ongeluk rm, rf-ed bin, die alle commando's ik kon verwijderd misschien ooit willen. Die dan ik gewoon opnieuw een nieuwe apparaat op dat punt. JOSEPH: Wees dus voorzichtig bij u deze opdracht gebruikt. PUBLIEK: [onverstaanbaar]? ROB: Ja. Dat is ook een slechte gewoonte om in. Als u merkt, ik ben nu - Nou, je kunt niet in de gaten, maar mijn zoom-in misschien wel. Dus ik ben nu root @ apparaat. Dus jharvard is de gebruiker die we willen je altijd gebruiken. Root is de gebruiker die toestemming heeft om absoluut niets te doen. Dus opvalt als ik ben jharvard, als ik probeer om cd - wat is een map die? Oh, wortel is een goed voorbeeld van. Dus cd, wortel. Permission denied. Want als we kijken naar deze aanbieding - en nogmaals, je hoeft niet te helemaal begrijpen dit. Maar deze drie streepjes zeggen dat geen andere laten gebruiker in deze map. En de directory overkomt eigendom zijn van de gebruiker root. Dus het feit dat ik ben jharvard en geen iemand die niet als root mag in deze directory, dat betekent dat ik ben gaat krijgen toegang geweigerd toen ik proberen om cd erin. Dus als ik ben wortel, ik heb toestemming om doen helemaal niets, met inbegrip essentiële bestanden verwijderen Om het apparaat en vernietigen het hele ding. Dus het is een slechte gewoonte om in gewoon rond uw besturingssysteem als root. Ik doe het toch. Vragen? En ik zal wortel te verlaten, blijven als jharvard. OK. Meer relevante opdrachten. Dus gaan terug naar onze temp, de mv commando staat voor beweging. Je kunt verplaatsen een. Nu willen we noemen b, dus nu het heet b. Of misschien willen we verhuizen b op een map. Dus nu leeg van deze map. Ik ga terug naar mijn home directory te gaan, en we zien dat b is hier, omdat de home directory is een map op van de map die b had geweest inch Er is ook cp. Dus cp is kopiëren super sectie, dot, tekst. Ik kan noemen is, punt, tekst. Nu hebben we allebei super sectie, stip, tekst, en s, punt, tekst. Dit werkt ook op directories. Ik rf-ed een enkel bestand. Dus cp - goed, laten we eerst proberen cp, tmp, tmp2. Dus weglaten directory tmp. Dus vergelijkbaar met rm, het standaard gedrag is niet op directories. En nogmaals, vergelijkbaar met rm, de standaard gedrag - goed, het krijgen van het werk met directories is een, dash-r weg. Dus kopiëren recursief de temp directory in tmp2. En nu hebben we allebei tmp en tmp2, en dat is niet zo behulpzaam sinds tmp leeg was in de eerste plaats. Tmp2. Laten we nu eens kopiëren tmp in tmp2. En we zien dat tmp2 heeft ook het bestand een, omdat de directory en alles binnen van die directory is gekopieerd. En dat kan enigszins nuttig als, zeg je werkt op probleem set one - of eigenlijk, later probleem sets zijn nog belangrijker, omdat zal een hele hoop te zijn van bestanden en dingen. Maar je wilt, voor een split ten tweede, je bent zoals, oke, ik ben gaat om iets anders te proberen. Laat me gewoon kopiëren mijn hele pset1 directory in pset1 backup zodat als Ik uiteindelijk schroeven dingen, ik kan ga terug in mijn backup directory. Er zijn meer geschikte manieren van versiebeheer back-up van uw code, maar dit is altijd een snelle manier om gewoon ervoor dat u een kopie van iets dat je op het punt te wijzigen. Dus echo is ook een eenmalige opdracht die soort sillily zal alleen afdrukken op de command line precies wat je wilde echo. Dus echo hi. We zullen gewoon uitprinten hi. Echo hallo wereld. We zullen hello wereld drukken. Die komt in het gebruik wanneer u start combineren commando. En nogmaals, verwacht niet dat je geheel begrijpen dit nog niet, maar het is iets te zien. En dan als je Googlen naar voorbeelden of je beseft dat je wilt doen iets, kan het nuttig zijn. Laten we als voorbeeld, zo ls, dash, l. Dus hier zie ik de uitgang van ls, dash, l. En ik zeg, oke, ik wil bewaar dat in een bestand. Alle van deze uitgang hier, ik wil in een apart bestand te zetten. Dus dit weinig meer dan het symbool is wat we gaan bellen. We heroriëntering van de uitvoer in een bestand. Laten we noemen het bestand blah, want dat is wat ik de neiging om altijd noemen. Dus nu zien we dat we een file blah hier. En als ik het open, zal ik zien dat het precies de uitvoer van het commando dat ik net liep. En dezelfde manier kunt u - als dit in een bestand, dit wordt krijgt input van een bestand. Wat is een opdracht die ik - JOSEPH: Ik denk dat je kunt gebruiken minder of meer, waarschijnlijk. ROB: Maar hoe zit het iets minder blah? Ik weet het niet. Als u in dit scenario, zoals er is psets dat het nuttig voor. JOSEPH: U kunt pijp het in echo. Pijp het bestand in echo om het te zien. ROB: Het is pijp. JOSEPH: Sorry. ROB: Oke. Dus dit is uitvoer naar een bestand. Dit is krijgen de tekst uit het bestand en geef het over aan het programma. En je ziet ook deze kerel. Dus dit is een soort van beide tegelijk doen. En eigenlijk, ik zal twee nieuwe introduceren commando's gewoon gebruik van maken. Geschiedenis is een handige commando dat is gewoon gaat het afdrukken van een lijst van alles wat ik ooit heb een opdrachtregel. We zien hier dus alles wat ik heb het uitvoeren van deze hele tijd. Veel ls's. En een andere nuttige commando is grep dat het doel is om te zoeken via tekst op zoek naar patronen, goed, op zoek naar wat je wilt zoeken. En dus een handig gebruik hier is, zeg we willen de geschiedenis te grijpen. En ik wil op zoek naar de commando's waar ik - wat is een nuttig een te zoeken? JOSEPH: [onverstaanbaar]? ROB: Of laten we gewoon kijken naar alle raakt, om welke reden. Dus dit is wat het eruit zal zien. En je hoeft niet helemaal te begrijpen dat. Maar het idee is hier, is de geschiedenis geven dezelfde output die het hier deed waar het afdrukken van de hele geschiedenis van alles wat ik ooit heb uitgevoerd. We worden dan terloops op dat - dus in plaats van deze af te drukken op het scherm, we willen doorgeven dat de commando grep die op zoek is naar alle exemplaren van het woord aanraking. En zo het gebruik van deze combinatie van de gereedschap geschiedenis en grep, ik kan zien, OK, hier is alle commando's die ik ooit heb lopen, en hier is een ietwat voorkomende. We zitten op de onderkant. En het is ook mij de opdracht Ik liep dat had de woord tintje erin. Maar de pijp is een erg handig ding voor het combineren van meerdere programma. En eigenlijk, het is een snelkoppeling voor te laten me uitgang geschiedenis blah bestand, en laat me grep behulp van het bestand blah als wat ik wil om te kijken over. Dus de pijp is gewoon een snelkoppeling voor die twee commando. Ja. SPEAKER 4: [onverstaanbaar]? ROB: Ja. Wat - Oh. Laten we eens testen. Dus kat, hond, vis. Dus ik wil grep. Dash, r, weer, zal worden recursief, dus ik wil afdalen alle mappen. Ik wil recursief grep voor iedereen - en laat me tijdelijk te krijgen deze uit de weg. Negeer me. OK. Dus ik wil tijdelijk grep voor alle exemplaren van het woord vis. En dus even wat ik doe is Grepping recursief voor het woord vis. En ster betekent dan al deze bestanden in deze map. En dus het gaf me een Permission Denied, omdat het niet is toegestaan ​​om te lezen dat bepaald bestand. Maar vond vis in het bestand, test. Ik zou ook kunnen zeggen, in het bijzonder, maar ik willen kijken in het bestand blah, in welk geval het niets zal vinden. Ik wil alleen maar te kijken in het bestand test. Het zal vis. Dat is een vrij nuttig commando te weten in het algemeen. Er zijn een aantal alternatieven voor grep die worden verondersteld om meer te zijn programmeur vriendelijk, maar ik ben geneigd om nog terug te vallen op grep. Vragen? OK. Zijn er andere opdrachten? Oh. Slechts een eenmalige een die ik altijd vinden te zijn plezier is cal. Dus merken wanneer ik in dit prachtige full-screen modus, ik heb geen als top werkbalk of wat dan ook. Zo cal enkel geeft me een leuk klein kalender dat klopt nu afgesneden, neem ik aan. Maar leuke opdracht. JOSEPH: Het is [onverstaanbaar]. Andere commando's die u zou kunnen hebben gezien onder meer clang en te maken. We gaan over hen in meer detail later. Maar als je hebt gewerkt op de PSET, moet u vertrouwd zijn met deze. ROB: Oke. Vragen over command line dingen? Oke. Dus laten we overgaan tot een aantal C-gerelateerde spullen. Variabelen wiskunde. OK. Dus net zoals we hadden wiskunde in Scratch, U kunt ook gebruik maken van wiskunde in C. Voordat we naar die volledig, dus variabelen. Vergeet niet dat wanneer je verklaren een variabele zoals int x of float y, u moeten geven voordat typt de naam van de variabele. Dus soorten die we hebben gezien tot nu toe zijn int, float, dubbel, lang lang, die ik eigenlijk niet weten of we hebben gezien dat nu toe. Er zijn een aantal andere. We hebben zien char. Er is kort, dat is alsof het de tegenovergestelde van lange lange waar het kleiner dan een geheel getal. We hebben ook gezien string. Dus wat is er bijzonder aan touwtje? Waarom zou ik zeggen dat het niet helemaal zoals int? SPEAKER 4: Het maakt niet echt bestaan. ROB: Ja. Dus de enige reden waarom we hebben touwtje is, want als je dat doet hash, omvatten cs50.h. En we zullen voorbeelden van deze later te zien - oh, dat betekent niet dat goed te behandelen - waar cs50.h iets doet langs de lijnen van het type def, char ster, string. En dat zegt dat we niet eens weten wat een char ster nog. Maar dit is te zeggen we willen string. Elke plek waar je geweest bent met string wordt u zou zijn met behulp van char ster, die eigenlijk een type dat bestaat in de C taal. Maar we krijgen dat. Oh, en het gaat terug. Netjes. Dus hetzelfde met bool waar waar en onwaar. Dat is niet echt een ingebouwd type in C. In plaats daarvan, het is gewoon, heeft dit de waarde nul? Dan zullen we maar eens kijken dat het is vals. Heeft dit de waarde - goed, heeft dit enig waarde die niet nul is? Dan zullen wij nadenken dat het waar is. Dus een waar twee waar, iets nul is waar. Dus dat zijn degenen. Vragen over verklaren variabelen en variabele types en zo? Yeah. SPEAKER 4: Voor lange lange, in het boek, het zei dat het moest long long int. Maar zal net lang lang werken? ROB: Dus dit soort modifiers. Dus int x. Dus we kunnen ook zeggen unsigned int x. We kunnen short int x zeggen. We kunnen lang lang zeggen int x. Maar vrijwel elk van die dingen die ik net zei, unsigned int, short int, long long int, kunt u zich te ontdoen van de int en het zal gewoon aannemen dat je bedoeld int. Dus unsigned x, wat betekent gewoon - je weet hoe je normaal met een int, je kunt zeggen dat x gelijk is aan negatieve 3? Met een unsigned int, kan je niet. JOSEPH: En nogmaals, voor de camera, de vraag was, wat is het verschil tussen long long int en net lang lang? ROB: Ja. Zo zal ik bijna nooit schrijven long long int. Ik zal lang lang schrijven. JOSEPH: Heeft u nog vragen? ROB: OK. Zo dom kleine herinnering van dat is hoe we verklaren een variabele en initialiseren de variabele en verklaar ander variabel en initialiseren het allemaal in een stap. Dus de verklaring van de variabele en de initialisatie variabele hoeft niet om maar kan op dezelfde lijn. Dus hebben we de standaard rekenkundige operatoren dat je gewend bent - plus, min, delen, tijden. Er is ook modulo, die we zullen zien. Er is niet, althans C, een ingebouwde power machtsverheffen dakje operator. Nou, er is een dakje operator, maar het is niet de macht. JOSEPH: Maar het is niet machtsverheffen, Ja. ROB: niet het dakje gebruiken aannemen dat het betekent zoals kwadraat of wat dan ook. Dus sommige dingen in te houden gedachten over divisie. Ik zal staan. Dus verklaarde initialize antwoord. Dus we vlotter antwoord zeggen gelijk aan 1 gedeeld door 10. Afdrukken antwoord op twee decimalen. En dit is het soort dingen die ik zou printf mens om erachter te komen dat wat de heck doet%, dot, 2f betekenen? En dat betekent, goed, het negeren van de 0.2. En%, f is wat we gebruiken afdrukken te zweven. De 0.2 is te zeggen, druk die drijven op twee decimalen. Dus dit programma heeft een bug, en je zou eerder hebben gezien dit in sommige voorafgaand CS natuurlijk. Maar wat is dat fout? SPEAKER 5: Zero. ROB: Ja. Dus als we zeggen, antwoord gelijk 1 gedeeld door 10, we willen dat de beantwoorden zijn 0.1. Maar 1 gedeeld door 10, 1 een integer, 10 een geheel getal is. En dus toen we doen een geheel getal gedeeld door een geheel getal, gaan we terug te krijgen een geheel getal. So 1 gedeeld door 10 is 0,1. Aangezien het nodig hebben een geheel getal geven, het is gewoon van plan om weg te gooien dat decimaal en zeggen dat het antwoord is 0. En dus toen we drukken antwoord hier, het gaat om af te drukken 0.00. JOSEPH: En net als een noot, het eigenlijk gooit wat is na de komma. Dus als je in plaats daarvan had 6 gedeeld door 10, zou je denken dat het u zou geven 0.6 en dan zou je ronden op 1. Maar eigenlijk, wat er gebeurt wanneer het typt taken is dat valt wat is achter de komma. Dus 0.6 doet geworden 0. ROB: Ja. En we zullen afkappen zeggen dat. Dus wanneer je cast naar een int, de komma wordt afgekapt. Dus de oplossing voor dat - er is eigenlijk twee. En ik ga die tweede te doen, omdat dit is een veel eenvoudiger oplossing. Dus een oplossing is gebruik maken van praalwagens in de divisie. En echt, je alleen maar te maakt een van hen een vlotter. Maar het is iets duidelijker gewoon aan beide vlotters maken. Dus 1,0 gedeeld door 10,0 is verdelen twee drijvers. Dus het antwoord zal uiteindelijk op een een float, en dus je zal correct af te drukken 0.10 hier. Iets dat zo goed werkt niet over dat wil zeggen, goed, zeker, het was makkelijk genoeg converteren 1 een drijven waardoor het 1.0. Maar wat als in plaats daarvan hadden we twee getallen zoals int x gelijk is aan 1 en int y gelijk aan 10, en daarna wilden we te doen x gedeeld door y? Dus het is niet gemakkelijk om gewoon doen X.0 of zoiets. Dus de oplossing voor die casting. Dus gieten is een manier in C om te zetten van de ene variabele type naar het andere. Hier, 1 een geheel getal. En door de invoering van deze float voor het, we gieten 1 een float. En dus dit zal omzetten de 1 tot 1,0. En dit zal omzetten 10 een 10,0. En dan dingen werken op dezelfde manier de vorige versie hebben we alleen waar, zoals verwacht, krijgen we 0.10 en het zal drukken dat. En we kunnen dit doen met variabelen, ook. Dus we kunnen zeggen, float x gedeeld door float y. JOSEPH: Heeft u nog vragen? ROB: Dus net als in de reguliere wiskunde, we hebben operator voorrang. Dus in wiskunde klas, heb je meer kans te noemen volgorde van de bewerkingen. Hier is de officiële term is operator voorrang. Maar de exploitant voorrang, of het meest operatoren, is zoals je zou verwachten. Dus net als in wiskunde, 2 maal 10 is gaan nauwer dan gegroepeerd deze 10 gedeeld door 2 en vervolgens op 2. De volgorde van de operaties, zal het doen 2 tijden 10, 10 gedeeld door 2, en het zal doen 20 plus 5 plus 2. Dus het is zoals verwacht, en u kunt gebruiken haakjes groeperen uitdrukkingen. U kunt geen haakjes gebruiken groep uitdrukkingen. Yeah? SPEAKER 5: Kunt u eigenlijk slechts een seconde terug te gaan? Kun je een int cast naar een string? ROB: Dus in C, kun je alles gegoten je wilt alles wat je wilt. Dat betekent niet dat het is een goede zaak te doen. Dus als je een int cast aan een string, dat betekent - en we krijgen in deze veel grondiger - JOSEPH: Veel later. ROB: Ik wilde niet veel later zeggen, dus ik heb geprobeerd om mijn zin te veranderen. We zullen veel grondiger krijgen in het later waar echt als je een tekenreeksvariabele - dus een string kan willekeurig worden lang, toch? En we hebben gezegd dat een int is vier bytes en lang lang is acht bytes en een float is vier bytes. Dus een string, net als een int, heeft slechts een aantal bytes aan. En dat zullen vier bytes. Maar een string kan mooi zijn willekeurig lange, toch? Dus hello wereld al, als dat is 10 tekens of wat dan ook, dat is al gaat worden over de 4 bytes Ik kan passen in een string. En dus hoe strings echt werken is dat ze zijn waar in het geheugen die string wordt gehouden. En zo hier, als ik zeg snaar x evenaart hello wereld, de binnenkant van x is alleen maar zeggen, oh, hallo wereld wordt opgeslagen op deze bijzondere plek in het geheugen. Dus als we proberen om een ​​integer werpen een snaar, dan we proberen te interpreteren enkele willekeurige deel van het geheugen als een string. En dat bijna altijd breekt dingen. JOSEPH: Maar als dat verwart je, we zijn over haar meer in de diepte later. ROB: Ja. Dit is waar je naartoe gaat te krijgen in pointers. En dat is een aanzienlijk deel van twee weken van deze cursus. SPEAKER 6: Werkt het als objecten in andere talen of niet echt? ROB: Dus met andere talen, voorwerpen zou worden weergegeven met behulp van pointers. Het is niet hetzelfde, dat wel. Elke gedachten? JOSEPH: Nee. Geen gedachten. ROB: OK. JOSEPH: Volgende. ROB: Gewoon gaan met die. Oke. Dus modulo. Net zoals we hebben plus, min, verdelen, en vermenigvuldigen. Dus modulo is degene die je kan niet eerder hebben gezien. En het gewoon zegt, geven me de rest van. Dus 55% 10. De rest van het doen 55 verdeeld 10 zou 5. Dus 55% 10 is 5. En 3% 5 zou 3. 8% 8 aan 0. 16% 15 zal 1. JOSEPH: Een ding om op te merken met deze, Ook is het misschien niet zoals verwacht als u een negatief getal te gebruiken. Zo negatief 5% 4, sommige mensen zou kunnen denken dat is - wat zou je negatief denken 5% 4 zijn? SPEAKER 5: One. JOSEPH: Dus sommige mensen zeggen een, sommige mensen zeggen negatieve. Maar wat - ROB: Ik zou niet eens zei een van hen. JOSEPH: Twee, sorry. Sommige mensen zeggen - ROB: Drie. JOSEPH: Drie? ROB: Negatief - wat was het - negatieve vijf - JOSEPH: Drie, drie, drie. Sorry. Omdat modulo, algemeen, wanneer je hebt elders gezien, betekent dit meestal terug een positief getal, toch? ROB: Dus als we zeggen in wiskunde,% 10's, ze de neiging om je wil geven - als we mod door 10, dan verwachten we krijgen een nummer tussen 0 en 9. Hier, dat is niet zo dat je krijgt negatieve getallen terug. JOSEPH: Zo negatief 5% 4 zou negatief 1 zijn. ROB: Maar het is zeldzaam dat je mod-ing bent negatieve getallen om mee te beginnen. Sla deze. JOSEPH: Ja. ROB: Meh. OK. Dus een laatste ding te wijzen over drijvers is dat het een gevaarlijk gedrag, maar praalwagens zijn geen exacte representatie. Dus terug naar bytes weer op gang, vergeet dat een int is altijd vier bytes en een float is altijd vier bytes. Dus Lucas bijvoorbeeld is vrij goed. Dus denk aan 1 gedeeld door 3. Dus 0,3333333. Als ik slechts 32 bits, hoe kan Ik bewaar 0,33333 precies? En misschien, om welke reden dan, zeg je, oke, goed, laten we maar zeggen dat deze specifieke 1011001, laten we gewoon zeggen dat zou moeten zijn 0,333333. Nou, heb je alleen een eindig aantal die bits, dus het is onmogelijk om vertegenwoordigen elk floating point waarde die slechts 32 bits. Nou, het is onmogelijk om te vertegenwoordigen floating point waarde die oneindige - goed, aangezien elk eindig aantal bits. Dus het probleem hier is, nou ja, toen we om af te drukken op twee decimalen, we hebben juist krijgt het antwoord 0.10. Maar onder de motorkap, het is echt worden opgeslagen zo dicht mogelijk bij 0,10 zoals die bits kan vertegenwoordigen. Is dit op de volgende dia? Of is het niet? JOSEPH: Ja, het is dat. ROB: Blegh, blegh. JOSEPH: Ja, je kunt gewoon Trek de noten een beetje. ROB: Ik ga gewoon om in te zoomen in het laatste op geven. Oh mijn god, dat is [onverstaanbaar]. Zodat nummer. Dat is wat zal worden gedrukt als we dat programma uitvoeren. En merk dat is niet echt een big deal als we alleen zijn zorg over als 02:58 decimalen. Alsof we alleen oorspronkelijk gedrukt 0.10, en dat is waarom we niets verkeerd zagen. Maar als we eenmaal beginnen met het krijgen in de precies, exact aantal dat het vertegenwoordigen, zien we dat het niet kan precies vertegenwoordigen 0.1. En een deel van het probleem is als, oke, dat is prima, maar goed, eerste, wat als we proberen te doen, antwoord is gelijk aan gelijk aan 0.1? Gaat dat waar of onwaar terug? En dus het is moeilijk te zeggen. Ik denk dat het eigenlijk waar zou kunnen terugkeren. Zal het eerst - Ik weet het niet. Het antwoord is als je eenmaal begint te maken met floating point waarden, je behoorlijk veel niet gebruiken gelijkheid als gevolg van deze onduidelijkheid. En voor alles wat je weet, het is de honderdste decimaal dat de floating point was niet in staat te kunnen verwerken. En dus gelijkheid zal gewoon niet zelfs hoewel het nummer - als u was geweest gebruik van exacte getallen, de getallen moet hebben precies hetzelfde geweest. Het is in de loop van als 50 berekeningen met deze drijvende punt waarden, kan de fout bouwen omhoog en omhoog en omhoog, en dingen gewoon verkeerd. JOSEPH: En zijn er echt geweest bekendste voorbeelden van dit gebeuren. Net als NASA-ingenieurs deze hebben gekregen verkeerd, waardoor raketten te exploderen in de lucht nadat ze zijn gestart. En veel problemen als dat. Dus ja. SPEAKER 6: Als je zegt 0,3 f, doet het afkappen de rest? Of is het afronden naar boven of beneden? ROB: Zal ​​printf omheen? JOSEPH: Ik denk printf afknottingen. ROB: OK. Dus we kunnen zo ook in de tegenovergestelde richting van deze waar in dit geval het dichtst kon vertegenwoordigen 0.1 was met dit nummer. De dichtstbijzijnde is het misschien in staat zijn om 0.2 vertegenwoordigen in de tegenovergestelde richting, ,199999996356 of zoiets. Dus als we gingen in die richting van dingen, dan printf 0,3 f zou terugkeren 1.99 in plaats van 2,00. JOSEPH: En ik ben niet helemaal zeker op dat. U wilt misschien een klein, weinig schrijven programma om gewoon controleren dat. ROB: Hoewel, wat wij zijn er zeker van is dat als je probeerde te werpen dat een int, en gieten naar een int gaat veroorzaken de decimale afkappen, indien je probeert te werpen 1.9999999 naar een int, krijg je 1. En dus moet je over het algemeen gebruik maken van de round functie in de wiskunde bibliotheek. Vragen? OK. JOSEPH: Dus u naar de voorwaarden en Booleaanse expressies. Dus je hebt gezien deze. En eigenlijk wil ik dat mijn maken computer is in het juiste formaat hier. Ruimte. Sorry, we gaan te maken hebben een beetje met cutoff aan de randen. Maar ja, jullie hebben gezien dit eerder in Scratch. Dus dit hier is een uitdrukking die wordt gebruikt in een voorwaardelijke verklaring. Dus antwoord groter dan nul vertellen u waar of onwaar. En deze zijn echt belangrijk, omdat ze laten ons in te voeren logica in onze code. Dus bijvoorbeeld, is een programma geschreven in Scratch dat de gebruiker vraagt voor een integer en vertelt hen of het getal dat ze je gaf was een positief of negatief getal. En de omzetting hier te zien is u eerst een afdruk van de verklaring, geef me een integer. En ze dan vragen om een ​​geheel getal. En dan voorwaardelijke logica gebruikt u dan hier om te controleren of dat nummer was zelfs groter dan nul of niet. Dus hier hebben we een Booleaanse uitdrukking binnenkant van een voorwaardelijke Als verklaring. Is er nog vragen? Zijn er nog vragen over? OK. Dus er is meer dan alleen groter dan, natuurlijk. U kunt Booleaanse uitdrukkingen construeren gebruik van de meeste van de soorten van dingen die je zou denken in wiskunde. Dus groter dan. Dat moet minder zijn dan. Sorry. En de afstand. ROB: God verhoede je het laat. JOSEPH: Oke. Dus groter dan, kleiner dan, groter dan, of gelijk aan, kleiner dan of gelijk aan. We maken gebruik van dubbel is om te controleren op gelijkheid, omdat enkele evenaart middelen opdracht, toch? Ja. En dan kunnen we ook niet gelijk aan niet door gebruik uitroepteken, evenaart. En dit uitroepteken symbool kan ook worden uitgebreid, zodat als je wilt om elke vorm van Booleaanse inverteren uitdrukking, kun je dat doen. Dus dit zal evalueren om waar indien het antwoord minder dan of gelijk aan nul. Heeft u vragen over zeggen? OK. Zo kunt u ook deze combineren uitdrukkingen met behulp van logische en en logisch Or. Dus dit is gewoon de En-symbool, die moet Shift, 7 zijn. En dit is de pijp symbool, dat is niet een kleine letter L. Het is het een dat is recht boven je Enter-toets. Zodat u twee van deze gebruiken om te symboliseren logisch En de logische Or. Dus dit is alleen maar waar terugkeren als antwoord een, twee, drie, of vier. En dit zal enige ware terugkeren als antwoord buiten dat aan beide zijden. Dus het is niet een, twee, drie, of vier. En de manier waarop je zou gebruiken dat in een expressie - ROB: Of een nul of een vijf. JOSEPH: nul of een vijf. Sorry. Ja, ja, ja. OK. En dan nu hier, op dezelfde manier als zou die uitdrukking te gebruiken, een kleiner expressie kant van een If voorwaardelijke verklaring, zou je het ook gebruiken de dezelfde manier door zomaar te binnen van de haakjes van het If statement. Dus dit printf alleen ontslaan als antwoord een, twee, drie, of vier. Heeft u vragen op het combineren uitdrukkingen? Dus er is nog een voorwaardelijke construeren we noemen een If / Else. Dus eigenlijk, dit betekent nu, OK, als iets wat ik wilde controleren niet was waar is, ga dan naar de Else en uitvoeren die andere actie. Dus in dit geval, vroeg ik de gebruiker voor een geheel getal. Het gehele getal groter dan nul? Ja? Nou, dan pakte ze een positief getal. Zo niet, dan moet het hebben negatief of nul geweest. Dus u een negatief getal geplukt of in dit geval nul. Ja. Of nul. En dan hebben we ook If / Else, Indien en Else. Dus dit laat ons een reeks van uit te voeren dingen alleen als de eersten mislukken. Dus in dit geval, nu we maken de laatste die u nul halen. Dus als ze niet geplukt een positieve noch een negatief getal, dan moet ze hebben nul geplukt. Dus het gaat gewoon naar beneden de keten als deze. Dus een voorbeeld van hoe een Als verschilt van - een If / Else is anders slechts een opeenvolging van Ifs. En dit is een veel voorkomende vraag die mensen vragen is, nou ja, als je als een 95 CS50, zal wat dit programma u vertellen? SPEAKER 5: Je hebt een A. JOSEPH: Ja. Je hebt elke een van die rechter. Je hebt een A, je hebt een B, je kreeg een C en een D, toch? Dus al deze krijgen geëvalueerd in orde is. Dus terwijl een 95 groter is dan 90, is het ook groter dan 80, het is ook groter dan 70 en het ook groter dan 60. Dus je hebt al die kwaliteiten. En ik neem aan dat je dat zou doen willen alleen de A. De manier om vast te stellen dat in de plaats komt degenen met Else / Als 's. Dus in dit scenario, het ziet dat 95 groter dan 90 en dan maakt niet de rest te evalueren van de verklaringen. Heeft u vragen over dat? Dus er is nog een voorwaardelijke soort structuur die we hier hebben, die we bel een switch statement. Hiermee kun je dus in principe controleren wat de waarde van een getal je in de switch statement is. Dus in dit scenario, we schakelen op n, en we zeggen, oh, als n een, dan afdrukken die verklaring. En dan breken, welke afslag betekent uit de instructie switch. Als het niet een, dan, nou ja, gewoon uiteindelijk al die gevallen controleren. En dus kijkt het of het een of twee of drie, en dienovereenkomstig wordt afgedrukt. En wat dit standaard zoekwoord hier beneden middel is als ze niet heeft ingevuld van die, dan zeg Ongeldige. Dus laten we zeggen dat ik vraag om n en de gebruiker geeft me vier. Nou, het past geen van deze gevallen, dus het zal drukken wat er in de standaard sectie. Ja, vraag? SPEAKER 5: Kunt u Boolean gebruiken uitdrukkingen plaats van een, twee, of drie? JOSEPH: Dus de vraag is kunt u gebruik maken van Booleaanse expressies plaats van een, twee en drie? En in C, ik geloof je kan dat niet doen. Maar in andere talen, die je misschien tegenkomen op het einde van de semester zoals JavaScript, je kunt. Nou, zou je eerst berekenen die waarde en vervolgens gebruiken in de switch statement. Yeah? ROB: Dus een deel van het voordeel van de schakelaar verklaringen is denken als je dit hebt gedaan als een If / Else, dus net als n gelijk staat voor een of wat dan ook. Else / Als n gelijk is twee, wat dan ook. Else / Als n gelijk is drie. Dus de manier waarop het programma zou lopen is het zou achtereenvolgens naar beneden die lijst en controleren, is n een? Nope. Is n twee? Nope. Is n drie? Yeah. Doe dit. Overwegende met schakelaar statements, het is daadwerkelijk in staat te compileren dat het is echt snel. En zodra het zegt schakelaar, zegt, oke, n is twee, ben ik meteen gaat springen naar waar Ik moet gaan uitvoeren. Ik ben niet van plan om eerst te controleren, is n een, is n twee? Het kan onmiddellijk beginnen met het doen wat het verondersteld wordt te doen. En daarom, het kan niet nemen Boolean voorwaarden. Of anders zou moeten doen de sequentieel, zoals, oke, is n groter dan nul? Else is n groter is dan 10 of wat dan ook. JOSEPH: In dit geval, als je gewend If / Else, Als het, dan is de schakelaar zou rijden ongeveer drie keer sneller dan de If / Else, Als. We kunnen de schakelaar zo in te een manier die wij niet breken na elk van de gevallen. Dus in dit geval, ik ben het partitioneren van de nummers die we kiezen in een en twee zijn geen hoge aantallen en drie zijn een groot aantal. Dus in dit geval, wanneer n een of twee is het geval zal raken en dan zal het vallen door, omdat er is geen pauze. En het zal hier eindigen. Dus als we kiezen een, zal het de printf doen en dan breken zodat geen van Dit wordt uitgevoerd. En natuurlijk, als zij komen binnen drie of iets anders, dan zal overslaan deze en niet naar daar, en het zal in plaats daarvan voeren de bijbehorende lijn. Zijn er nog vragen over? Ja? SPEAKER 4: Zou u een foutmelding krijgt als je had een pauze na het geval een, maar het is er iets niet voor te doen? JOSEPH: Dus de vraag is zou je een fout als je een pauze na het geval een, maar er is niets te doen? En het antwoord is nee. Je zal niet echt een fout. Ja, mm hmm. Dus als een soort van een kleine verandering hier, Ik ga een printf hier plaatsen. Whoops. Dus wat zou deze afdrukken als Ik zette een in als input? Yeah. Het zou u zeggen dat geen rekening een groot aantal twee keer, toch? Omdat het dat eerste geval zou raken, het zou niet breken, en het zou vallen met het tweede geval. Heeft u vragen over dat? ROB: Heeft u een andere vraag? JOSEPH: OK, koelen. Oke. Dus er is iets anders wat we noemen een ternaire operator die in feite een alternatieve syntax te doen Indien en vervolgens Else. En het laat je het allemaal op een lijn. Dus in dit programma, Ik vraag de gebruiker voor n. En als n groter is dan 100, ik zeg ze kozen ze een hoog aantal. Anders ik vertel hen dat ze pakte een laag getal. Dus we kunnen dit echt lang syntaxis, snaar, S, en dan controleren of n groter dan 100 en toewijzen dienovereenkomstig. Maar we kunnen dit veel bondiger maken door het gebruik van deze ternaire operator syntaxis die een vraag impliceert merk en een dubbele punt. Dus het vraagteken is in wezen het stellen van een vraag, toch? ROB: Misschien in te zoomen op dat. JOSEPH: Ja. Goed punt. Dus dit is de ternaire operator. Ik voor het eerst de vraag te stellen, is n groter dan 100? Als het is, dan voer ik de eerste gedeelte voor de dubbele punt. Als het niet, dan voer ik de tweede deel na de dubbele punt. Als n groter is dan 100, dan pakt hoog en zet dat in tekenreeks s. Als n kleiner is dan 100, het lage pikt en zet dan is dat in de tekenreeks s. Dus dat zal dit grote brok condenseren beneden in die ene lijn. SPEAKER 5: Is dat populair? JOSEPH: Ja, het is heel populair voor dingen waar wezen je wilt heb een opdracht op basis van een soort van aandoening. En in dit geval, werden we proberen om een ​​waarde toe te kennen aan tekenreeks s. Het is niet zo - Ik denk dat ik niet echt de voorkeur in andere gevallen. Maar het is vooral handig voor deze opdracht. ROB: Dat is een vrij normaal patroon waar je een aantal variabele die je gaat zeggen, als er iets, set deze variabele om een ​​waarde, anders, stellen deze variabele een andere waarde. En dat is het scenario waar gebruik van een ternair. JOSEPH: En je bespaart veel lijnen, toch? En het gewoon maakt je code misschien wel een beetje meer leesbaar. Ja, vraag? SPEAKER 6: Voor een ternair, kun je gaan, snaar s gelijken s, vraagteken? En dan kun je, laten we zeggen, vijf verschillende opties. En afhankelijk van het aantal n was, zou u een van die? JOSEPH: Dus de vraag is, is er een soort syntax waar je string kan doen s is gelijk aan n, en dan meer dan twee opties na dat vraagteken? En een eenvoudig antwoord is nee, er is geen echt een goede manier om dat te doen, tenzij die u wilt nesten meerdere ternair ondernemingen binnen elkaar. Je zou kunnen doen als n groter is dan 100, vraagteken, en dan nog ternaire operator, n groter is dan 50, vraagteken, en nest op die manier. Maar in dat scenario, uw code is word een beetje onleesbaar en rommelig, en is het misschien beter om gewoon naar een If / Else verklaring op dat punt. ROB: En ook, als een kanttekening, PHP verkeerd implementeert de ternaire operator zodanig dat geneste ternaries zelfs niet werken zoals ze zouden moeten. JOSEPH: Ja. Dus het wordt een beetje verwarrend, vooral als je gaat verschillende talen. ROB: Het is verwarrend genoeg dat talen zijn verkeerd over. JOSEPH: Dus eigenlijk, gewoon om te verduidelijken, weet iedereen wat dat % S doet hier? Heeft u vragen over dat? Ik denk dat alleen voor de camera, de% s laat eigenlijk ons ​​zet een placeholder voor een string. En dan aan het einde, we aangeven dat de variabele willen we in deze om te zetten place holder is s. Dus dat duurt in principe s en zet het in hier. En dan zal het uitprinten, je pakte een hoog of je pakte een laag getal. OK. Dus loops kun je dingen uit te voeren in cirkelvormige bewegingen, toch? Je zou dit hebben ondervonden in Scratch in de vorm van Forever lussen of herhalen totdat of herhalen van een bepaalde aantal keren. Dus waarom is dit goed voor ons? Nou, in C, laten we zeggen dat we dit lied geïmplementeerd in Scratch dat sings, is het nummer dat nooit eindigt. Het gaat maar door en door en voor altijd en eeuwig. Nou, je kunt niet echt een programma maken dat heeft een oneindig aantal printf verklaringen in, toch? Dus in dit scenario, een manier dat je dit werk zou kunnen maken en om het voor altijd te drukken is door in plaats daarvan een While-lus. Dus een While-lus zal uitvoeren wat is in het lichaam van de twee beugels die behoort tot het op basis van wat de aandoening. Dus in dit voorbeeld voor indien we willen dit voor altijd af te drukken, wat kunnen we doen? Nou ja, zeker, toch? Dus dit soort combineert het idee sommige Booleaanse uitdrukking samen met een lus. En we leerden over Booleaanse uitdrukkingen eerder. Dus wanneer de toestand binnenkant van Terwijl dat waar blijft, deze lus zal uitvoeren op en op en op. En in dit geval, als we gewoon leveren het met echte, veroorzaakt dit een oneindige lus die het lied drukt op en op en als wij gewenst eerder zonder met een programma dat een oneindige heeft aantal printf verklaringen, die is niet mogelijk. Dus meer dwingend, hoewel, u kunt deze gebruiken met een variabele en een voorwaarde. Dus laten we zeggen dat we willen herhalen zin, totaal geschift, 10 keer. Dus wat je kunt doen met een While-lus is kunt u eerst een teller initialiseren variabele buiten de Terwijl lus tot 10. En dan in principe, elke keer dat je gaat door de While-lus, print je uit de verklaring en dan verminderen de tellervariabele tot eind, op een gegeven moment, als we aftrekken ik genoeg tijden, 1 van I vaak genoeg - en gewoon te verduidelijken, ik minus minus betekent dat ik gelijk ik minus 1. Dat zal in principe breng ik naar beneden naar de punt waar zodra ik hit nul, wordt dit voorwaarde is niet langer waar en dus het verlaat uit de lus. Zo totaal geschift drukt slechts 10 keer. Heeft u vragen over een While-lus? OK. Dus er is een manier waarop we kunnen doen wat we net deed in een meer beknopte wijze met wat wij noemen een For-lus. Dus een For-lus bestaat uit een initialisatie, een voorwaarde, en een bijwerken, net als we eerder hadden in deze While-lus. Dus laten we eens een kijkje nemen. In deze While-lus, hadden we een initialisatie, dan hadden we een voorwaarde dat we gecontroleerd. En dan een update hadden we stap bovenaan. Met een For-lus, dit duurt in principe deze drie dingen en condenseert het naar beneden in een lijn. Dus het eerste wat zij doet in de For-lus is de initialisatie. En dan een puntkomma doe je, en dan je doet de voorwaarde, die ik groter dan nul gaat daar, en vervolgens de update stap. Dus wordt dit uitgevoerd op het einde van de lus lichaam. Dus deze twee programma's zijn hoofdzaak equivalent. Heeft u nog vragen? Dus wat is een verschil tussen deze twee? Kan iedereen wijzen het uit? Het is misschien een beetje subtiel. Het is gewoon een heel klein verschil. Ja? SPEAKER 5: Je zou het niet kunnen gebruiken de I variabele buiten de For-lus [Onverstaanbaar]? JOSEPH: Precies. Dus dit is iets wat we zullen krijgen later belde variabele reikwijdte. Maar in wezen is dit int ik leven buiten deze While-lus. Dus zodra deze While-lus wordt gedaan uitvoeren, zal ik in staat om later te gebruiken I op in het programma. Overwegende dat met deze For-lus, dit int I is scoped binnenkant van deze For-lus. En omdat het is de binnenkant van dit deel van de For-lus, die begint op de haakjes en eindigt met de accolade daar. Alles dat verklaard binnenkant van hier kan niet buiten gebruikt. Dus als ik probeer om buiten gebruik ik, het zal vertel me, zwart symbool. En in wezen, zou ik niet in staat zijn om het te gebruiken. ROB: En ja, 10 jaar geleden, in letterlijk alle gevallen, accolades zijn wat je gebruikt om te bepalen het bereik van een variabele. Dus daar, int ik gelijk aan 10 is de binnenkant van deze verklaard set van accolades. En zo dan zo lang als je probeert om die ik gebruik voordat deze accolade, het is prima. U kunt zien wanneer u typt te maken, je zie dash, dash, std, evenaart, C99. Dus dat is een latere versie van C die GCC heeft geïmplementeerd dat geeft ook deze snelkoppeling. Dus dit was vroeger niet toegestaan ​​in C. En kunt u zien waarom, want dit int Ik is buiten deze accolade maar het is nog steeds beschouwd als de reikwijdte van deze accolades. Maar dit is een erg handig ding, en dus is een goede extensie. JOSEPH: Heeft u nog vragen? OK. Dus wat is nuttiger is dat soms je wilt soort dynamiek in je loop, toch? U wilt niet alleen per se af te drukken volkomen geschift de hele tijd, je af te tellen vanaf 10 of zo. En zo kan je de teller variabele gebruiken binnenkant van die lus ook. En in dit geval, het programma gewoon telt af van 10 helemaal naar beneden. En wat doet het niet af? Het doet niet af aan nul, recht, want als - Ja, het doet ook niet af 11. Zodat het niet afgedrukt nul, want als Ik nul is, vergeet niet, het evalueert de staat voordat het gaat over het luslichaam te voeren. En toen ik nul is, dit is vals, zo het niet uitprinten aftellen nul, drukt het gewoon uit te tellen een daling van 10 helemaal naar beneden tot 1. Als we eigenlijk wilden het afdrukken nul, dan zouden we een gelijk-teken te zetten na deze groter dan teken. OK. Dus een manier om input validatie doen, die is wanneer u de gebruiker vragen om te doen iets, je wilt dat ze doen volg je de instructies, is het gebruik van de While-lus, toch? Dus in dit geval, ik vraag voor een positief getal, dan ben ik wacht op invoer. En dan heb ik gecontroleerd Terwijl de ingang minder dan nul, houden hen te vragen. Dus zolang ze geven me een aantal dat is niet positief, blijven vragen, blijven vragen, blijven vragen. Maar wat is een soort van raar over dit? Of wat lijkt niet optimaal over deze structuur hier? Iedereen? Ja? SPEAKER 6: Je herhalen de instructie twee keer. JOSEPH: Juist. Dus hebben we twee printf verklaringen hier, toch? Dus er is een manier waarop we konden dit gewoon neer op een, dat zou onze code gemakkelijker te lezen en een beetje meer schoon. En dan zouden we niet moeten hebben Neem twee keer zo goed. En een manier waarop je dit kunt doen is met behulp van een Do-While-lus. En een do-while lus is in feite een andere vorm van een While-lus waar alles wat in de accolades wordt ten minste eenmaal uitgevoerd. Dus hier, verklaar ik, int ingang buiten eerste. En dan zeg ik gewoon, doe dit instructie terwijl ingang kleiner is dan nul. Dus het raakt eerst de Do. Zij zal dit altijd ten uitvoer ten minste een keer, dus het zal altijd de gebruiker vragen voor invoer tenminste eenmaal. En dan evalueert die ingang, en het gaat op in een cirkel. Ja, vraag? SPEAKER 6: Is er een manier om het te doen [Onverstaanbaar] soorten, zoals als je zegt, GetString, en iemand [onverstaanbaar] is er een manier om [onverstaanbaar] JOSEPH: Dus de vraag is, is er een manier om de validatie van invoer doen als de gebruiker niet in de juiste type variabele? Dus als we vragen om een ​​int en ze geven ons een string in plaats daarvan. En in de functies die we uitvoeren voor u, getint, GetString in alle die functies, maar die eigenlijk al doen dat soort basic input type validering onder de motorkap. Dus als je gebruik maakt van de functies die we gaf je, hoef je niet echt hoeft te doen. Maar als je meer wilt kijken naar hoe je kunt eigenlijk doen, kunt u kijken onder de motorkap bij het bestand I/O-- niet bestand, de standaard I / O-functies als een lezen van standaard input en standaard output. En je kunt een beter gevoel te krijgen van hoe je zou kunnen doen. ROB: Een kwestie is echter specifiek met het voorbeeld dat je zei een string verwacht je en ik voer een int. Hoe zou u het verschil te vertellen tussen opzettelijk willen de snaar 123 versus willen de int 123? Dus touwtje, het is vrij veel is er geen validatie, het is gewoon wat ze ingevoerd, wordt u interpreteren als een string. Int is makkelijker, omdat niet uit de ingang u van de gebruiker, u bent altijd het nemen van een string. En zo die string u kunt dan controleren, zijn al deze eigenlijk numerieke cijfers? JOSEPH: OK. Heeft u vragen over een Do-While-lus? ROB: Oh, en dit is ook - terug te gaan naar omvang, een enigszins gemeenschappelijk fout probeert te gebruiken een aantal lokale variabele vanuit deze Do-While lus binnenkant van deze aandoening. En eigenlijk, als we net verlost van dit en zei, int ingang gelijk Getint, dan is de compiler zal schreeuwen op ons, want ingang bestaat niet buiten het bereik van deze accolades. JOSEPH: En dat is waarom we moet hier deze lineup. OK. Zo kunt u ook uit te breken van een lus vroeg als je wilt. Dus dit is een andere manier van uitvoering van wat we net geïmplementeerd. En in plaats van de aandoening binnen de haakjes, gebruiken we een Als verklaring binnenkant van het lichaam van de do-while lus. En eigenlijk, wanneer de ingang is eindelijk groter dan nul, zullen we breken van de lus. En dus gaan we allemaal de weg naar hier beneden. En je kunt zien dat dit zou waarschijnlijk de voorkeur in deze scenario, want het is een beetje beetje schoner en een beetje stuk makkelijker om te lezen. Overwegende dat deze, je soort van aanvullende lijnen in het. Het is gewoon een beetje lelijker, Ik denk dat, in zekere zin. Ja, vraag? SPEAKER 4: Zal ​​alleen breken krijgen je uit een set bretels? JOSEPH: Juist. Dus de vraag is alleen breken je uit een lus? En het antwoord is ja. Dus als je geneste For-lussen, voor Bijvoorbeeld, als ik heb voor int I gelijk is aan 0 tot 10 en dan voor int J gelijk is aan 0 tot 10, als ik het breken van de innerlijke loop, zal ik nog steeds gaan de buitenste lus. Dus het zal blijven presteren de operaties op de buitenkant. Heeft u vragen over dat? Ja? SPEAKER 5: Maar breken alleen functies voor accolades, niet voor andere uitspraken? [Onverstaanbaar] JOSEPH: Dus de vraag is zal breken enige functie lussen tegenover andere uitspraken als If? En ja, dat is het geval, omdat Je breekt uit een lus, recht, in zekere zin. ROB: In de overgrote meerderheid van de gevallen, het is dit is het soort Als er iets, dan breken. Dus je hoeft niet te breken van toepassing op Als dat het is inpakken omheen. En ook is dit niet zo'n lus, maar vergeet niet dat switches zijn ook uit gebroken door pauzes. We zagen pauzes wordt gebruikt met schakelaars voor. JOSEPH: En je kunt ze ook gebruiken Terwijl in lussen en For-lussen. Heeft u nog vragen? OK. Dus de volgende up is functies. Dus je zou gebruik hebben gemaakt van een van deze BYOB blokken in uw Scratch project. En dit maakt in principe u om een ​​reeks te definiëren instructies te volgen. En wat ik daarmee bedoel is laten we denken terug naar wiskunde, rechts, algebra. Je hebt wat we een functie van x noemen, enkele variabele, en laten we dit zeggen functie is f van x is gelijk aan x plus 5. Zo kunt u denken aan f van x als deze zwarte box die 15 neemt in en vervolgens 20 produceert. Dus algemeen iedere functie iets dat sommige ingangen en draait dan produceert een aantal uitgangen. En waarom zijn functies goed? Ze zijn goed voor een aantal redenen. Dus heeft iemand wil een gooi te nemen bij welke organisatie betekent? In termen van waarom functies zijn nuttig? Ja? SPEAKER 4: Het maakt je code beter leesbaar. JOSEPH: Juist. Dus een van de dingen is het maakt uw code beter leesbaar, toch? In plaats van zoals int x gelijk aan x maal x maal x, kan ik kubus van x hebben, dat is beter leesbaar en meer begrijpelijk voor een lezer. Organisatie is ook in termen van opsplitsen van uw code in hanteerbare delen, zodat in plaats van het proberen om uitvoering van dit alles in een lange sectie in de belangrijkste, kun je een soort van split up in als, OK, laten we schrijven een functie iets kubus, laten we schrijven functie om iets te regelen. Op die manier kun je het op te splitsen in kleine, kleine onderdelen die je kunt pakken in tegenstelling tot het proberen aan te pakken een groot probleem in een keer. ROB: Of zelfs uiterst klein, weinig onderdelen die u en een partner kunnen aanpakken. JOSEPH: Ja. ROB: In plaats van beide Probeer je een implantaat werken tegelijkertijd. JOSEPH: Vereenvoudiging. Wil iemand een gok te nemen? Ja? SPEAKER 5: Meer herhaling. JOSEPH: Juist. Dus een ding dat je kunt doen met vereenvoudiging is dat het soort op dezelfde lijnen als herbruikbaarheid is dat zodra ik schrijf een kubus functie, kan ik gebruik gewoon dat over en over en over weer in mijn programma in plaats van te typen x maal x maal x over en over en weer. En vereenvoudiging hier ook gewoon betekent het maakt je code soort makkelijker te debuggen als je eenmaal splitsen deze op in functies. Want dan kun je waar lokaliseren uw problemen soort zijn. Heeft u nog vragen? Dus een ander idee is abstractie, toch? Deze zwarte doos. Net weet je wat getInt doet om input van de gebruiker? We hebben niet echt verteld, toch? Alles wat we hebben je verteld is getInt doet precies wat het zegt dat het doet. Dus zelfs als we je niet vertellen hoe het werkt, weet je toch. Dus in dit geval, is een viervoudige functie die doet verschillende dingen voor een ingang een output. En u kunt een aantal verviervoudigen door te vermenigvuldigen met vier. Of u kunt wat wij noemen bits verschuiven twee. En we zullen dit dekken een beetje later. En er is geen behoefte om te weten hoe dit functie? zolang werkt als aangegeven. Dus onder de motorkap, kon ik zoals, terug ingang tijden acht gedeeld door twee. En je zou het niet weten, toch? Alles wat je moet weten is het doet wat het zegt. Dus dat is het nuttig ding over abstractie. En een ander ding is een soort van dit idee van lokaliseren van uw code op een bepaalde sectie. Dus als je een probleem hebt, je niet moeten gaan over je code proberen vast te stellen waar het probleem was. Dus in dit geval, ik geïmplementeerd kubus verkeerd. Ik dacht kubus werd vermenigvuldigen door drie. Dus in dit geval is dat een programma die net is te vermenigvuldigen met drie overal. En er is een ander programma dat heeft gefactorde kubus uit in een functie. En dus nu als ik wil mijn fout te repareren hier, ik moet elke lijn te repareren van code in dit programma. Terwijl aan de andere kant, als ik de functie, moet ik alleen maar om te veranderen wat er mis was op een plaats. Dus in de informatica, we bel-en uitgangen. Ingangen worden parameters genoemd of argumenten en voert genoemd terugkeren waarden. En we zullen zien hoe dit helpt ons soort een functie definiëren in een tweede. Dus dit is een functie-definitie voor cubing. Dus het duurt een input, en vervolgens keert dat aantal keren zelf drie keer. Dus laten we breken deze af. We hebben dus een functie header, die in feite bestaat uit drie dingen. Dus hebben we de parameters die zijn, zoals ik al zei, de input voor deze functie. En dan geven we de functie een naam. In dit geval, het heet kubus. En dan geven wij wat het type van de return waarde is. Dus in dit geval, mijn kubusfunctie neemt in een integer en het is ook geeft een geheel. Dus als ik pas in twee, twee is een geheel getal, het terugkeert acht tot mij, die een geheel getal. Dus terug typenaam parameters. Vragen over dat? En dan is de return waarde is eigenlijk aan het einde aangegeven door te zeggen terugkeer en vervolgens terug te keren wat bevat de return waarde. Dus in dit geval, als we het allemaal samen, een functie heeft in parameters, het is iets genaamd, en het iets dat is het type terug dat we zeggen dat het zou gaan worden. Heeft u nog vragen? Dus hoe kunnen we een functie gebruiken? Nou, schrijven we een functie en vervolgens we gebruiken in ons programma, toch? Dus belde ik het kubus, en dan kan ik gebruik maken van kubus. Maar wat is belangrijk op te merken is die volgorde zaken. Als ik kubus hieronder belangrijkste, het is gaan lopen in kubus. En op dit punt, is er niets riep kubus in het programma, en het is gewoon de bus zou komen, heb ik geen idee wat kubus is. Dus het zal u vertellen, impliciete verklaring van de functie. Dat is de fout die verschijnt. En in dit geval, kubus hieronder belangrijkste, dus het gaat niet te weten. SPEAKER 5: Dus belangrijkste is meestal de laatste functie gedefinieerd? JOSEPH: Dus de vraag is, is de belangrijkste meestal de laatste ding dat je zou omschrijven? En nee. Het is omdat we meestal graag belangrijkste te worden aan de top, toch? Want dat is het eerste wat je wil de programmeur het openen van de programma om te zien. En dus hoe lossen we dit nummer van we wil belangrijkste om aan de top, maar de functies die we willen, we willen dat ze te zijn dan de hoofd nog kunnen gebruiken ze naar binnen van de belangrijkste? Nou, we gebruiken wat we noemen een functie-prototype. Dus wat een functie prototype wezen is wordt het eerst neemt wat de handtekening of de functie header van wat we willen implementeren beneden hier, en we zetten het op de top van een programma. Dus in dit geval, zeggen we dat goed, later in ons programma, we gaan een belofte om dit te implementeren maken functie genaamd int kubus, waarbij rekening een geheel getal ingang. Dus nu, want dat is boven de belangrijkste, belangrijkste, het gaat om te zeggen, oh, nou ja, later in het programma, dat gaat worden er dus ik kan verwijzen naar het, dus ik zal gewoon laten doorlopen voor nu. En vervolgens op de bodem, implementeren we kubus. En dan de belangrijkste zal gewoon zeggen, goed, zal het sorteren van de link deze twee symbolen samen. En wat we laten zien wat dat middelen later. En dus het zal weten dat dit de kubus functie die het moet gebruiken. ROB: De [onverstaanbaar] over willen belangrijkste aan de onderkant of top, ik heb ze gezien. Er zijn dingen die net als aan de onderkant hoofd te zetten. Maar zodra een project krijgt bijzonder groot, gewoonlijk belangrijkste in een bestand al haar eigen. En op dat punt, zoals de int kubus lijn zou - binnenkant van stdio.h zijn een stelletje lijnen net als dat int kubus int invoerregel. En dus die prototypes zijn dingen die je hebben de neiging om in de header-bestanden om te zetten, welk punt, het maakt niet uit. Nou, het maakt niet uit. Die gaan altijd aan de top. En als belangrijkste is niet een bestand al haar eigen, je hoeft geen zorgen te maken over het zetten individuele functie prototypes in het bestand. JOSEPH: En we zullen daar nog een beetje te krijgen Even later toen Rob begint te praten over het compileren. En dus is er ook een verschil tussen de parameter en argument. En parameter is precies wat we deze ingangen bellen wanneer we de functie te definiëren. En we noemen het een argument wanneer we eigenlijk doorgeven in de functie. Dus in dit geval, is een parameter, zoals we al eerder gezegd. En als we daadwerkelijk te gebruiken daar, kubus van x, dan is X zelf is wat wij een argument noemen de functie kubus. ROB: Dus argumenten parameter zijn - er is dit onderscheid, zeer elkaar verward. Op dit punt, voor mij, het is als een van die woorden die als ik het zie in het wild, kan ik niet helpen, maar onmiddellijk vraag of ze het gebruiken in de juiste context, omdat de verschil is subtiel genoeg dat net iedereen heeft de neiging - Ik heb bijna altijd argument zeggen ongeacht wat ik bedoel. JOSEPH: En functies zijn ook nuttig voor wat we bijwerkingen noemen. Dus een functie kan geen ingangen nemen, en het kan produceren ook geen uitgangen. Dus in dit geval ben ik het definiëren van een subroutine dat er geen heeft waarde terug te keren. En om aan te geven dat, gebruiken we wat wij noemen een leegte hier. En dus is de bijwerking van deze functie is dat het gewoon afgedrukt spullen naar de pagina. Het maakt eigenlijk niet elke te nemen ingangen, en het niet daadwerkelijk produceren geen uitgangen. Maar dit kan nuttig zijn in de zin als je wilt, bijvoorbeeld, debug iets in uw programma, als je wilt om een ​​beetje subroutine te schrijven dat drukt, laten we zeggen, de inhoud van geheugen of iets. En dus deze bijwerkingen zijn soms bruikbaar buiten het kader van net als in-en uitgangen. Heeft u nog vragen? En om dit specifieke segment te beëindigen, wat heeft dit programma doen? Ik geef je jongens een paar seconden door te lezen. Op een zeer basaal niveau, wat we willen zeggen is dat het swaps x en y, toch? Dus hoe velen van jullie eigenlijk denken Dit zal x en y verwisselen? Steek je hand op. Niemand. OK. Wie denkt dat het zal x en y niet ruilen? En de som van dat was niet de hele kamer. Dus sommige mensen zijn niet zeker. OK. Dat is redelijk. Dus laten we gaan door wat er gebeurt als u functies eigenlijk eerst te bellen in Om deze vraag te beantwoorden. Dus dit is wat geheugen soort eruit ziet. Dit is een soort van een vereenvoudigd model van wat geheugen eruit ziet als u een programma uitvoert. Dus er is iets genaamd de stapel hier beneden en iets genaamd de heap. En deze groeien naar het midden van het geheugen. Dus in dit geval, als u een functie noemt, het wordt op de stapel gelegd. En wat staat op die functie blijft in wat wij noemen stackframe functie. En dus om een ​​mooie visualisatie van krijgen dit, Let's - bijvoorbeeld, hadden we de programma belangrijkste eerder. En de binnenkant van de belangrijkste, we noemden kubus. Dus belangrijkste zou eerst op de stapel Frame, want het is de eerste functie dat heet. En toen kubus binnenkant van heet belangrijkste, het wordt op de top van de belangrijkste zetten binnenkant van het geheugen. Dus wat je hier opvalt is dat kubus heeft zijn eigen parameters en de eigen bevolking. Dus als je daadwerkelijk iets doorgeven aan een functie van de parameters die het krijgt zijn kopieën van wat was doorgegeven van de belangrijkste. En om dit soort uit te leggen, laten we lopen door een programma. Dus hebben we de stack, dit is gewoon de stapel gedeelte. En wat we doen is dat we eerst initialiseren x en y om een ​​en twee. Dus hebben we deze kleine dozen. Ze zitten in de belangrijkste stack frame op de stack. Ze bevatten een en twee. Nu swap noemen. Wat er gebeurt is we langs x en y in swap, en swap creëert zijn eigen kopieën van deze variabelen om binnen te gebruiken van zijn stack frame. Dus nu daar, hebben we een, die bevat de waarde x heeft, en b, die bevat de waarde y had. Zo een, twee. En je zult merken dat dit aparte van x en y binnenzijde van de belangrijkste. Dus hebben we nu een tijdelijke variabele naar een bevatten. We stellen een gelijk aan b, dus het verandert van een tot twee. En dan zetten we b gelijk temp, dat is een. En dan nu zijn we verlaten uit deze functie. Bij het verlaten van de functie, de stackframe krijgt popped uit de stapel. Wij noemen het duwen. Je duwt een stackframe op de stapel en je pop als uit de stapel. En dus wat er gebeurt is alles wat was in die stapelframe soort van net gaat in vlammen op. En zo die niet meer bestaat. Maar wat weten we opmerken? We eigenlijk nooit veranderd de waarden van x en y gelijk? Dus die bleef lokale to main. En door het passeren van de dingen in ruil, wij eigenlijk nooit veranderd die waarden. En wat doen we dit noemen? We noemen dit passerende waarde. Dus in C, als je dingen overgaan in functies, het geeft ze in waarde en maakt een kopie van hen voor de functie te gebruiken. En we leren over iets genaamd langs referentie later, maar dat is een manier kunt u dit probleem oplossen. Maar we zullen geen zorgen over dat pas later. ROB: En eigenlijk, die term, passeren referentie gaat dus C niet eens passeren door te verwijzen. C uitsluitend is voorbij waarde. Het maakt niet uit wat je doet, je bent altijd passeren van een kopie van iets. Het is gewoon dat, als ik een soort van genoemd dat voordat met pointers en dat een string is eigenlijk gewoon vier bytes wijst naar ergens in het geheugen. Nou, als ik deze string en het is me te vertellen dat is waar de string - goed, als ik deze pointer naar deze plaatsen in het geheugen, dan kan ik een pas kopie van die pointer naar een functie, en die functie weet nog waar in geheugen is. Dus beide pointers wijzen naar dezelfde plaats in het geheugen, en dat is hoe we in staat zijn om dingen buiten het wijzigen huidige stack frame. JOSEPH: Wilt u doen samenstellen? ROB: Nee, het is 05:30. JOSEPH: OK. Het is 05:30. OK. Dus zullen we bestrijken het samenstellen denk ik in het volgende gedeelte, of uw afdeling leider zal op dat punt. En - ROB: Heeft u nog vragen? JOSEPH: Heeft u nog vragen? Ja? SPEAKER 5: Het gebruik van strings van CS50, elke functies die we willen gebruiken voor degenen, die zal net C functies. CS50 is niet in en gegaan gemaakt extra. ROB: Correct. Elk van de C als [onverstaanbaar], u zou gebruiken die op onze snaren. JOSEPH: En een laatste wat ik wil vermelding is dat we een stijlgids voor deze klasse. ROB: Oh, ja. JOSEPH: Dus als u bent gekomen uit een achtergrond programmeren voordat u mogelijk dat bepaalde conventies hebben wanneer je schrijft code als het zetten beugels op dezelfde lijn of bepaalde manieren inspringen of het benoemen van variabelen. In deze klasse, willen we volgen een specifieke stijlgids enkel omdat, Nou, als je naar buiten en werken in industrie, je gaat te verwachten aan de stijlgids van de te volgen bedrijf waar je gaat. Zoals bijvoorbeeld, Facebook denk ik heeft een bijzondere soort van naamgeving conventie. En er is verschil tussen de kameel behuizing variabelen en net als gescheiden met underscores. En ook, ik denk dat het allerbelangrijkste, zoals bijvoorbeeld, inspringen, toch? We accolades beginnen waar de conditie is, en ze zijn op de volgende regel. En we ook zetten accolades in ook al is het slechts een regel. En een heleboel keer, zijn er manieren om te doen het waar je kunt deze braces vertrekken uit als het is slechts een lijn onder het If statement. Maar in deze klasse willen we volgen een specifieke stijlgids gewoon zo krijg je gebruikt om dat soort dingen. ROB: Ja, en Style 50 gaat handhaving van deze stijlgids, en we zijn gaat Style 50 gebruiken tot de rang van uw code. Dus het maakt het wat makkelijker voor ons en hopelijk mag geen dingen die veel erger voor u, gezien de gestandaardiseerde stijl moet niet zo zijn dat onrealistisch. JOSEPH: En tot slot, om de stijl te vinden handleiding gaat u naar manual.cs50.net/style. En ja. SPEAKER 4: Gaat u af te dwingen geen tekens per regel? ROB: Ja. JOSEPH: Sorry, jongens. ROB: Dat is hetzelfde als een van de enigen. Op dit punt, ik ben OK met 120. Ik ben OK met het zeggen 120 tekens per regel. Ik begrijp dat er een bepaalde grens. Ik denk dat 80 is zo klein, maar we toepasten. JOSEPH: Persoonlijk denk ik dat met C, 80 tekens is OK. Zodra je begint steeds naar andere talen zoals JavaScript en PHP, niet zo redelijk om gewoon te beperken aan 80 karakters. OK. Nou, dat was het super sectie. Heeft iemand snoep willen? SPEAKER 4: Ja.