ROB: Okej. Välkommen till det första avsnittet. Jag är Rob. JOSEPH: Jag är Josef. ROB: Så ska vi dyka rätt i. Första sak att prata om är Appliance. Så förhoppningsvis de flesta av er har hämtat det redan. Men du kan se instruktionerna vid cs50.net/appliance. Åh gud, nu är jag självmedveten. Jag hör fortfarande det. JOSEPH: Wow, det låter som det är desorienterad. ROB: Så en del människor har haft problem med det, så vänta inte tills den sista minuten av problemet satt till försöka lösa Appliance och reda på att det inte fungerar. JOSEPH: Och om något inte fungerar och du behöver hjälp, kan du gå till cs50.net/discussion där vi ha ett forum där man kan skicka dina frågor. Och vi kommer till dem så småningom. ROB: Okej. Så detta är vad Appliance ser ut som. Återigen, det är bara en helt separat operativsystem som körs inom oavsett operativsystem du kör på din bärbara dator. Och de huvudsakliga delar du använder är gedit. Så förhoppningsvis detta har redan blivit en välbekant plats. Terminalen. Och du kan också köra Chrome inom Appliance. Det har varit ett par personer som har rapporterat internet inte i Appliance. Och några av dem har bara antagit att det inte är tänkt att vara internet i Appliance. Men ja, det är tänkt att vara Internet. Jag ska säga det just nu, men det gör det inte verkligen betyder någonting. Om internet inte fungerar, detta är vad du brukar behöva att köra för att fixa det. Om du har internet-problem, inte minns det, bara lägga upp den på Diskutera, och vi kommer att säga, kör det. Men Internet ska arbeta. Så det enda andra sak - ja, ingenting annat är verkligen relevant. Men jag ville bara påpeka att - se i denna nedre högra hörnet. Så alla dina apparater bör ha en IP-adress. Och senare på terminen, detta IP adress kommer att bli mer relevant när du arbetar på webben p-set, eftersom du kommer att kunna komma åt webbplats du arbetar på från din lokal Chrome genom att använda denna IP-adress. Men vad jag tycker om att använda IP-adressen för - och du behöver inte göra det här, jag vill bara påpeka det - är här. Så detta är ett terminalfönster på min Mac, är det inte i Appliance alls. Och du kan slå upp vad Detta kommando gör. Men jag ska direkt till SSH till min Appliance. Jag vet inte vad IP är. JOSEPH: 168 - 168.224.1.0. ROB: Så när jag är klar med detta, logga in Nu, i princip, är detta identiskt med ett terminalfönster i min apparat. Så jag ganska mycket aldrig fungerat inifrån själva apparaten. Jag alltid har den igång i bakgrunden minimeras och SSHed in i den. Problemet med detta är att du inte kommer för att kunna använda gedit lätt direkt från detta. Men om du vill vara en riktig coolt hacker, så ska du få använda en kommandorad textredigerare ändå. Så Vim och Emacs och Nano, alla dessa Vilka alternativ. Nano tenderar att vara det enklaste. Och jag tror att det inte har någon syntaxmarkering. Åh, nej, det gör det helt. Så du kan använda Nano, eftersom att man är ganska lätt. Du ser alla dessa kommandon vid bottnen. Denna lilla morot symbol. Om du inte har sett det förut, kommer du förmodligen se det mycket nu. Det innebär i allmänhet styr morot, som längst ned till vänster på tangentbordet styrtecken. Så här är det säger mig här nere - åh, det är inte avskurna om jag zoomar in Så Control, är X hur Jag ska avsluta. Och det säger att jag kan träffa Y för Ja, för att spara, N för Nej. Så det är Nano. Vim och Emacs tenderar att vara något mer komplicerat och överväldigande. Men du kan få van vid det, och Du kommer att älska det. Så det är det. JOSEPH: Du behöver inte göra det. ROB: Ja. Du är fri att använda gedit för resten av terminen. Så någon apparat relaterade frågor? Eller har du några tankar om vad måste talas om om apparaten? Ja. SPEAKER 1: När du SSHed in din sak, var lösenordet Crimson? ROB: Ja. Lösenordet för det mesta i Appliance går vara Crimson. TALARE 2: Installera som en riktig IDE på apparaten, kommer det att fungera? ROB: Jag föreställer mig Eclipse har en Fedora version, i vilket fall, ett ja, du kan göra det. Det är nog inte riktigt värt det. TALARE 2: OK. Så det är nog lättare om jag ville använder Eclipse, använd bara de infödda och sedan ladda upp till - ROB: Åh, är det också förmodligen lättare. Men du kan få det att fungera inom Appliance. JOSEPH: Och för kameran, frågan var, kan du installera en annan IDE apparatens insida? ROB: Eclipse är en Exempel på en IDE. Någon annan apparat frågor? Okej. Så kommer vi nu att gå vidare till kommandoraden gränssnitt-relaterade saker, så CLI. Och återigen, jag kommer bara att arbeta i här, eftersom detta är identiskt med arbetar inom ett terminalfönster inom Appliance. Hur är det teckensnitt ser? Är det tillräckligt stor? Okej. Så det finns en hel del kommandon som du bör få ganska van vid under hela terminen. De två stora för navigering är ls, lista filerna i den här katalogen, och cd, så byta katalog. Så jag kan byta till skrivbordet och sedan ett mycket vanligt mönster är cd till en katalog och omedelbart ls vilka är i katalogen. Människor också ibland inte inser att Tab slutförande är en sak. Så som cd, vh, och då jag slog Tab. Jag skriver nästan aldrig ut det hela. Och sedan om jag fortsätter att slå Tab igen, kommer den automatiskt börja lista för mig. Så jag kan cd vhosts, lokal värd. Och det är bara att gå till - i fall du inte har hört termen tidigare, är katalog bara ett annat ord för mappen. Så nu om du ser - låt oss ta det till toppen. Så nu om du ser inom parentes, du se den lilla tilde, snedstreck, vhost, slash, lokal värd. Så tilde avser att till min hemkatalog. Det är en katalog du är i när du SSH i. Det är den katalog du befinner dig i när man öppnar en terminal. Det är där du börjar. Och så är jag inne i min hemkatalog, och jag är insidan av vhost katalog insidan av min hemkatalog. Och så är jag inne i den lokala värd katalog inne i det. Så några andra användbara saker med cd - eller bra, i allmänhet, så dot alltid hänvisar till den aktuella katalogen. Cd, är prick ett ganska värdelöst kommando. Men det förändras till det aktuella katalogen. En mer användbar en i termer av cd är prick, punkt, vilket är bara gå upp en katalog. Och observera att dessa - Jag vill säga alias, men dessa symboler, prick, och prick, prick, som arbete för ganska mycket varje kommando du är kommer att tänka på att köra. Så som CD är nog där du kommer att med användning av de flesta, men dessa är inte saker som bara cd förstår. Det är ganska mycket något hela din kommandorad förstår. En hel del program förstår prick och prick, prick. Så de andra användbara sådana - cd, bindestreck. Så det kommer att föra mig till senaste katalog som jag var i. Så ibland jag ska göra något liknande, åh, jag arbetar här. Och jag ser något fel med någonting, och Jag går undersöka det genom att gå till några random katalog någonstans. Och jag vet inte om det kommer Låt mig i det. Det kommer. Så då jag göra vad jag vill i den här katalogen. Bla, bla, bla, bla, bla. Och jag var som, okej, jag vill ha att gå tillbaka till där jag var. cd, streck, och det leder mig tillbaka. Så jag kommer att kasta en hel del av dessa på dig i dag. Jag förväntar mig inte att du ska memorera alla av dem. Det är liksom bara vet att de finns. Och sedan senare när du är som, hmm, jag vill gå tillbaka till den katalog som jag var precis på, oh, vänta, något sådant existerar. Du behöver inte bara in i hela katalogen igen. JOSEPH: Och så småningom kommer du bara använda dem om och om igen, och det ska bli muskelminne. ROB: Ja. Så hur jag sa tidigare, att tilde är din hemkatalog. Så jag kan cd, tilde. Men jag har inte ens till göra det om jag bara - Jag ska gå tillbaka till katalogen så det är inte en meningslös exempel. Men om jag gör bara cd, det är också den samma som, gå till min hemkatalog. Jag gör Command, K. JOSEPH: Du kan också skriva klart, det ord, och det borde klara det. ROB: Och jag tycker också Control, L också gör det. Så många olika sätt. Jag tror att det finns vissa skillnader där tydlig och kontroll, L kommer bara verkligen driva det till toppen och Jag kan fortfarande rulla tillbaka. Kommando, K bokstavligen förstör allt, och du kan inte rulla tillbaka upp. Åtminstone är det hur det fungerar i iTerm2. Jag vet inte hur andra saker - oh. Med SSHing, så om du är på Windows, du kommer att behöva ladda ner PuTTY För att SSH eftersom Windows inte har som en inbyggd SSH verktyg. Från Mac kan du bara SSH direkt från ett terminalfönster. OK. Frågor? Med ls, så något att vänja sig med de flesta av dessa kommandon är - Tja, jag ska bara göra ett. Ls, bindestreck, l.. Så streck, l är vad vi ska att kalla en flagga till ls. Och en hel del av dessa kommandon har flaggor som du kan skicka till dem. Så i detta fall, är streck, l en flagga som talar om för den att ge mig en fullständig notering av all information av dessa filer. Så vi ser här att skrivbordet var ändrad den 30 juli kl 00:54. Nedladdningar ändrades 6 september. Dessa är de nuvarande storlek och byte av dessa kataloger. Du behöver inte förstå allt detta. Här grejer till vänster, dessa drwx s, som kommer att bli mycket mer relevant senare när du måste ta itu med - som har att göra med vem som har behörighet att titta på dessa filer. Och så om du inte var den enda användaren på denna dator, skulle du kunna säg, OK vill jag vara den enda tillåtet att titta på den här filen, eller jag är kommer att låta alla att titta på den här filen. Så någon annan på min dator kan titta på denna fil. Jag vet inte ens vad det här - vad innebär det gör? JOSEPH: Jag är inte helt säker, faktiskt. ROB: Ingen aning. JOSEPH: Men om du inte vet, det finns ett bra kommando som du kan använda att berätta vad utgången betyder. Och om du skriver in människan före kommandot - så M-A-N. ROB: Man. Så man är en annan som är mycket användbar. Och mannen, ls. Så man-sidorna, de har båda kommandon som du kommer att använda på kommandoraden, och de har också funktioner som är relevanta med C. Så du kan människan - och jag ignorerade 3. Men man 3 printf kommer att föra upp till C-versionen av printf. Men om jag gör bara man printf, är detta kommer att ta upp kommando printf som händer på kommandoraden. Så mannen, ls. De man-sidor kan vara ganska överväldigande. Men här ser du den här informationen av alla dessa flaggor som ls förstår. Så om vi går till dash, l, och - Jag kommer bara att kasta det på dig. Men för att söka, du vill att först slå på frågan märke eller snedstreck knappen. Så snedstreck. Och då kan jag söka för vad jag vill. Så jag kommer att hugga för streck, l.. Och där var det. Så använd en lång lista format. Det hjälper inte mig att lista ut vad just den kolumnen betydde, men jag antar någonstans här Det skulle förklara det. Så använd man-sidorna för varje kommando att du inte omedelbart förstår. Jag är ganska säker på att du kan till och med mannen, mannen. Ett gränssnitt till nätet referenshandböcker. Åh, en sista en som kanske är en aning relevant är ls, bindestreck, en. Så märker om jag gör just ls, Jag får dessa fem filer. Om jag gör ls, dash, en, jag får mycket fler filer. Så sak gemensamt mellan alla dessa nya filer är pricken förväg. Så konventionen är att en fil som börjar med en punkt är dolt. Så du vill inte se att filen du vill inte ha den bråka med din kataloglistning. Det är bara när du uttryckligen frågar, okej, ls, bindestreck, en, visa mig. I en står för alla filer, inklusive dolda sådana. Så några andra kommandon. Åh, frågor på den punkten? Ja. TALARE 3: När du gör ls, a, vad är pricken, pricken? ROB: Åh. Så det här är vad jag pratade om. Det är samma sak där Jag kan gärna cd, punkt, punkt. Så tekniskt, punkt och prick, prick är filer som finns i varje enskild katalog där dot-filen refererar till den aktuella katalogen. Så om jag cd, punkt, jag ska bara att stanna i katalogen. Och prick, prick alltid hänvisar till den föregående katalog en nivå upp. Så om jag går in i loggar och ls, bindestreck, al, Vi ses prick, prick. cd till prick, prick leder mig till föregående katalog. Yeah. OK. Så en annan ganska viktig kommandot rm. Så det är vad vi ska att använda för att ta bort den. Och låt mig verkligen göra en kommando först. Så mkdir. Mkdir är hur du kan skapa kataloger. Och jag ska skapa en temporär katalog och gå in i den temporära katalogen. Och som väntat, det är tomt. Men om jag ls, bindestreck, ett, jag har fortfarande prick och prick, punkt, eftersom prick avser den aktuella katalogen. Och prick, hänvisar prick till föregående katalog. Och de kommer alltid att finnas oavsett den katalog du befinner dig i. Och det här är en helt onödig kommando, utan beröring. Jag bara använda det, eftersom det är ett enkelt sätt att skapa filer. Så röra en trycker b, tryck c är bara kommer att skapa tre filer som kallas a, b och c som är helt tomma. Så poängen med mig skapar de i första plats är bara så att rm är hur vi kan ta bort dem. Så rm, en. Det kommer att fråga mig, ta bort regelbunden tom fil a? Och så kommer jag säga ja. Så om jag vet att jag vill radera den filen utan att vara du uppmanas att ta bort vanlig tom fil?, sedan rm, bindestreck, f kommer att bli det flagga som säger, tvinga ta bort utan även vilket fick mig, åh, du är säker på att du vill ta bort filen? Ja, jag är säker. Så rm, bindestreck, fb kommer bara göra det utan att fråga. Så låt oss göra några fler kataloger. mkdir, tmp2, cd, tmp2, röra en, tryck b. OK. Så nu vill jag ta bort tmp2 som en katalog. Så rm tmp2. Du kan inte ta bort tmp2, det är en katalog. Så frågan här är att rm inte omedelbart arbeta med kataloger. Det är mer tänkt för filer som icke-katalogfiler. Och så vad vi kan göra här är rm, bindestreck, r.. Det står för rekursivt, vilket kan inte betyder någonting för dig ännu. Men när du kommer till rekursion, det kommer att innebära mer. Så rm, bindestreck, r, tmp2 kommer att rekursivt gå in i den katalogen. Så ner i katalog tmp2? Ja, vi går in i det. Vill vi ta bort tmp2 / a? Ja. Vill vi ta bort tmp2 / b? Ja. Nu vill vi ta bort katalog tmp2? Ja. Och så nu katalogen och allt inuti om den har tagits bort. Det är tekniskt en kommando rmdir som du kan använda för att ta bort kataloger, men det fungerar bara på tomma kataloger ändå. Och för att se till att, låt oss bara do mkdir, tmp2 igen. Tmp2 trycker en. OK. Så om jag försöker ta bort dirtmp2, det ska säga, katalog inte tom. Så jag använder ganska mycket aldrig att ta bort dir-kommandot i alla fall, eftersom rm, streck, r kommer att arbeta med tomma kataloger och icke-tomma kataloger. Och även om jag inte vill ha att gå igenom det hela processen för fallande i katalogen och ta bort varje enskild fil, rm, streck, rf, tmp2. Och nu är det borta. Något att vara försiktig om är rm, bindestreck, rf. Och det skrämmer mig att ens skriva det, för om jag av misstag tryck på Retur eller något. Så rm, bindestreck, rf, tilde skulle, utan vilket fick mig, inte f ingen uppmaning mig, kommer den automatiskt att ta bort hela min hemkatalog och allt i den. Så du kanske tror att det är en dum sak att göra. Och ja, det är det. Men det kan hända mycket enkelt genom olycka om, säg, jag ville ta bort min snedstreck, vhost katalog. Och bara i snabb maskinskrivning, Jag råkar göra detta. Det kommer att ta bort rekursivt både min hemkatalog och vhost katalogen i denna speciella katalog som bara råkar inte existerar just nu. Men det skulle ändå bort hela min hemkatalog. Åtminstone genom att inte ha en f, det skulle uppmana mig först. Och jag skulle vara som, åh, nej, jag vill inte göra det. Men folk, snedstreck, inklusive jag har en tendens att komma in i vana att alltid rf-ning. Till och med vanliga filer som jag kan bara RM, c, jag brukar bara rm, bindestreck, rf, c.. Var bara försiktig när du är rf-ning. SPEAKER 4: Vad gör C göra? ROB: C är jag pratar om att C-fil i den här katalogen, som rm, c.. JOSEPH: Och mer farligt, om du använder en stjärna, hänvisat till allt i katalogen. Så vad jag brukar vanligtvis göra är att jag vill gå in i en katalog och jag vill ta bort alla filer i det. Så rm, bindestreck, rf, stjärna. ROB: Ja. Rm, tankstreck, rf, stjärna. JOSEPH: Och om du inte är försiktig vilken katalog du befinner dig i - Jag var inte i temp, men jag var av misstag i min hemkatalog, då ska jag ta bort allt i min hemkatalog. Och jag har faktiskt gjort det förut, och Jag tror att du har gjort det här förut, eller Jay har gjort det förut. ROB: Jag har av misstag bort - så ignorera detta kommando för lite. JOSEPH: Inte kul. ROB: Så i slash bin är en gäng binära filer där det kan vara bekanta uppstickare som klang. Tja, klang och i princip alla dessa saker som jag kör på kommando linje finns i denna snedstreck bin. JOSEPH: Liksom ls är i här. ROB: Så prick, snedstreck, ls skulle lista den här katalogen. JOSEPH: Rm är också i den här katalogen. ROB: Jag har av misstag rm, rf-ed bin, som tog bort något kommando jag kunde möjligen någonsin vill. Vilket då jag bara installera en nya Appliance på den punkten. JOSEPH: Så vara mycket försiktig när du använder det här kommandot. PUBLIK: [OHÖRBAR]? ROB: Ja. Det är också en dålig vana att komma in. Om du märker, är jag nu - Tja, du kan inte märka, men min zoom-in kanske kan. Så jag är nu root @ apparaten. Så jharvard är användaren som vi vill att du alltid ska använda. Root är den användare som har behörighet att göra vad som helst. Så märker när jag är jharvard, om jag försöker cd - vad är en katalog som? Åh, är roten ett bra exempel. Så cd, rot. Permission denied. För om vi tittar på denna notering - och igen, behöver du inte att helt förstå detta. Men dessa tre streck säger att inte låta någon annan användare i den här katalogen. Och katalogen råkar ägas av användaren root. Så det faktum att jag är jharvard och ingen en som inte är root tillåts i denna katalog, innebär att att jag är kommer att få tillstånd nekas när jag försök att gå in i den. Så när jag är root, jag har tillstånd att göra vad som helst, inklusive ta bort viktiga filer till Appliance och förstör det hela. Så det är en dålig vana att komma in bara vandra runt operativsystem som root. Jag gör det ändå. Frågor? Och jag ska avsluta rot, stanna som jharvard. OK. Mer relevanta kommandon. Så gå tillbaka till vår temp, det mv kommandot står för drag. Du kan flytta en. Nu vill vi kalla det b, så nu det kallas b.. Eller kanske vi vill flytta b upp en katalog. Så nu den här katalogen är tom. Jag ska gå tillbaka till min hemkatalog, och Vi ser att b är här, eftersom hemkatalog var en katalog upp från den katalog som B hade varit i. Det finns också cp. Så cp är kopiera super avsnitt, prick, text. Jag kan kalla det är, prick, text. Nu har vi båda super avsnitt, prick, text, och s, prick, text. Detta fungerar även på kataloger. Jag rf-ed en enda fil. Så cp - väl, låt oss först försöka cp, tmp, tmp2. Så utelämna katalog tmp. Så lik rm, standardbeteendet är att inte arbeta med kataloger. Och återigen i samma rm, standard beteenden - bra, att få det att fungera med kataloger är en, streck-r borta. Så kopiera rekursivt temp katalog i tmp2. Och så nu har vi både tmp och tmp2, och det är inte så bra eftersom tmp var tomt i första hand. Tmp2. Nu kopierar tmp i tmp2. Och vi ser att tmp2 har också den fil en, eftersom katalogen och allt inne i det katalogen har kopierats. Och det kan vara något bra om, säger du arbetar på problem set en - eller faktiskt, senare problem apparater är ännu viktigare, eftersom det kommer att bli en hel drös av filer och ting. Men om du bara vill, för en delad andra, du gillar, okej, jag är kommer att prova något annat. Låt mig bara kopiera hela min pset1 katalog i pset1 backup så att om Jag sluta skruva upp saker, jag kan gå tillbaka in i min backup-katalog. Det finns mer lämpliga sätt att versionshantering säkerhetskopiering av din kod, men Detta är alltid ett snabbt sätt att bara göra att du har en kopia av något att du håller på att ändra. Så eko är också en engångs kommando som slags sillily kommer bara ut till den kommandorad exakt vad du ville eko. Så echo hi. Vi ska bara skriva hej. Echo hallå världen. Vi kommer att skriva ut hallå världen. Som kommer i bruk när du börja kombinera kommandon. Och återigen, förvänta dig inte att du helt förstår detta ännu, men det är något att se. Och sedan om du googla efter exempel eller om du inser att du vill göra något, kan det vara till hjälp. Så låt oss, som ett exempel, så ls, bindestreck, l.. Så här ser jag utgången av ls, bindestreck, l.. Och jag säger, OK, jag vill lagra det i en fil. All denna utgång här, jag vill ha att sätta i en separat fil. Så denna lilla större än symbol är vad vi kommer att ringa. Vi omdirigera utdata till en fil. Låt oss kalla filen bla, eftersom det är vad jag brukar alltid kalla det. Så nu ser vi att vi har en fil bla här. Och om jag öppnar upp det, jag ser det är exakt utsignalen från kommando att jag sprang bara. Och på samma sätt kan du - om detta var till en fil, detta är att få input från en fil. Vad är ett kommando som jag - JOSEPH: Jag tror att du kan använda mindre eller mer, förmodligen. ROB: Men vad sägs om bara mindre bla? Jag vet inte. Om du kommer in i detta scenario, som det finns psets att det är bra för. JOSEPH: Du kan rör det i eko. Rör filen till ekot att se den. ROB: Det är pipa. JOSEPH: Förlåt. ROB: Okej. Så detta matas ut till en fil. Det är få texten från filen och överlämna det till programmet. Och du kommer också se den här killen. Så det här är typ att göra båda samtidigt. Och faktiskt, jag ska presentera två nya kommandon bara att använda sig av det. Historien är en praktisk kommando som är just kommer att skriva ut en lista över något jag någonsin köra ett kommando. Så ser vi här allt som jag har varit igång hela tiden. Massor av ls-talet. Och ett annat användbart kommando är grep att dess syfte är att söka över text leta efter mönster, bra, letar efter vad du vill att det ska leta efter. Och så en praktisk användning här är, säg vi vill ta tag i historien. Och jag vill leta efter kommandon där jag - vad är en användbar en att leta efter? JOSEPH: [OHÖRBAR]? ROB: Eller låt oss bara titta för alla berör, oavsett orsak. Så det här är vad det kommer att se ut. Och du behöver inte helt förstår det. Men tanken är här, är historia ger samma utgång den gjorde här där det är att skriva ut hela historia av allt jag någonsin springa. Vi är sedan förbigående att - så istället för att skriva ut den på skärmen, Vi vill skicka det till kommandot grep som söker alla förekomster av ordet beröring. Och så använder denna kombination av verktyg historia och grep, kan jag se, OK, Här är alla kommandon jag någonsin springa, och här är en ganska vanlig man. Vi är på botten. Och det är också ger mig kommandot Jag bara sprang som hade Ordet touch i det. Men röret är en ganska bra sak för kombinering av flera program. Och faktiskt, det är en genväg för låt mig utgång historia att lämna bla, och låt mig grep använda filen bla så vad jag vill se över. Så röret är bara en genväg för dessa två kommandon. Ja. SPEAKER 4: [OHÖRBAR]? ROB: Ja. Vad är - Oh. Låt oss testa. Så katt, hund, fisk. Så jag vill grep. Dash, r, återigen, kommer att bli rekursivt, så jag vill sjunka ner alla kataloger. Jag vill rekursivt grep för alla - och låt mig tillfälligt få detta ur vägen. Ignorera mig. OK. Så jag vill tillfälligt grep för alla förekomster av ordet fisk. Och så här vad jag gör är grepping rekursivt för ordet fisk. Och stjärnan betyder över alla dessa filer i den här katalogen. Och så det gav mig en Åtkomst nekad, eftersom det inte är tillåtet att läsa att viss fil. Men det fann fisk i filen, testa. Jag kan också säga, speciellt, jag bara vill titta i filen bla, i vilket fall kommer det inte att hitta något. Jag vill bara att titta i filen, testa. Det finns fisk. Det är ett ganska användbart kommando veta i allmänhet. Det finns några alternativ att GREP som är tänkt att vara mer programmerare vänlig, men jag brukar att fortfarande falla tillbaka på grep. Frågor? OK. Finns det andra kommandon? Oh. Bara en engångs en som jag alltid tycker är kul är cal. Så märker när jag är i denna vackra helskärmsläge, jag har ingen liknande topp verktygsfältet eller något. Så cal ger mig bara en trevlig liten kalender som är rätt nu avskurna, antar jag. Men trevligt litet kommando. JOSEPH: Det är [OHÖRBAR]. Andra kommandon som du kan ha sett innefattar klang och göra. Vi kommer att gå igenom dem i mer i detalj senare. Men om du har jobbat på den PSET, bör du vara bekanta med dem. ROB: Okej. Frågor på kommandoraden saker? Okej. Så låt oss gå vidare till något C-relaterade saker. Variabler matte. OK. Så precis som vi hade matte i Scratch, Du kan också använda matematik i C. Innan vi kommer till det helt och hållet, så variabler. Tänk på att när du deklarerar en variabel som int x eller float y, du måste ge det skriver innan variabelnamnet. Så typer vi har sett hittills är int, flyta, dubbel, lång lång, vilket jag vet faktiskt inte om vi har sett det hittills. Det finns några andra. Vi ser röding. Det är kort, vilket är som det är motsatsen till lång lång där det är mindre än ett heltal. Vi har också sett sträng. Vad är speciellt med snöre? Varför skulle jag säga att det är inte riktigt som int? SPEAKER 4: Det finns egentligen inte. ROB: Ja. Så den enda anledningen till att vi har sträng beror på att när du gör hash, inkludera cs50.h. Och vi får se exempel på det senare - åh, som inte hanterar det väl - där cs50.h gör något i linje med typ def, röding stjärna, sträng. Och så det säger att vi inte ens vet vad en röding stjärna är ännu. Men detta säger vi vill ha sträng. Varje plats som du har använt sträng, du kunde ha använt röding stjärna, som faktiskt är en typ som förekommer i C-språket. Men vi kommer till det. Åh, och det går rätt tillbaka. Neat. Så samma sak med bool där sant och falskt. Det är egentligen inte en inbyggd typ i C. Istället är det bara, har detta värdet noll? Sedan ska vi bara tänka att det är falskt. Innebär detta har värdet - väl, har detta något värde som inte är noll? Då vi anser att det är sant. Så en är sant, två är sant, något skilt från noll är sant. Så de är de. Frågor om deklarerar variabler och variabeltyper och allt det där? Yeah. SPEAKER 4: För länge länge, i boken, det sa att det skulle vara lång lång int. Men kommer bara lång lång fungera? ROB: Så dessa typ modifierare. Så int x. Så kan vi också säga unsigned int x. Vi kan säga kort int x. Vi kan säga lång lång int x. Men ganska mycket av de saker jag just sagt, unsigned int, kort int, lång lång int, kan du bli av med int och det kommer bara ta att du menade int. Så osignerade x, vilket bara innebär - du vet hur normalt med en int, du kan säga x lika negativ 3? Med en unsigned int, det kan du inte. JOSEPH: Och återigen, för kameran, den Frågan var, vad är skillnaden mellan långa långa int och bara lång lång? ROB: Ja. Så jag kommer nästan aldrig skriva långa långa int. Jag kommer att skriva länge länge. JOSEPH: Några frågor? ROB: OK. Så dum liten påminnelse om det är hur Vi deklarerar en variabel och initiera variabeln och förklara en annan variabel och initiera allt i ett steg. Så deklarationen av variabeln och initieringen variabel behöver inte till, men kan vara på samma rad. Så vi har standard matematikoperatorer att du är van vid - plus, minus, dividera, tider. Det finns också modulo, där vi får se. Det är inte, åtminstone i C, en inbyggd ström exponentiering cirkumflex operatören. Tja, det finns en cirkumflex operatör, men det är inte makt. JOSEPH: Men det är inte exponentieringen, Ja. ROB: Använd inte cirkumflex att anta att det betyder som kvadrat eller vad. Så några saker att ha i tänka om division. Jag ska stå. Så förklarade initialize svar. Så vi säger float svar är lika med 1 delat med 10. Skriv svar till två decimaler. Och detta är den sortens saker som jag skulle människan printf att räkna ut att vad sjutton gör%, prick, 2f detta? Och det betyder bara, ja, ignorera 0,2. Och%, är f vad vi använder att skriva ut att flyta. Den 0,2 säger, skriv ut som flyter upp till två decimaler. Så det här programmet har en bugg, och du kanske har sett detta tidigare i någon innan CS kurs. Men vad är det bugg? SPEAKER 5: Zero. ROB: Ja. Så när vi säger, lika svar 1 dividerat med 10, vi vill ha det svara för att vara 0,1. Men ett dividerat med 10, en är en heltal, är 10 ett heltal. Och så när vi gör ett heltal dividerat med ett heltal, vi kommer att komma tillbaka ett heltal. Så 1 delat med 10 är 0,1. Eftersom det måste ge oss ett heltal, det är bara att kasta bort det decimal och säger att svaret är 0. Och så när vi trycker svara här, det kommer att skrivas ut 0,00. JOSEPH: Och precis som en notering, det faktiskt kastar bort vad som finns efter decimalkomma. Så om du i stället hade 6 delat med 10, du kanske tror att det skulle ge dig 0,6 och då skulle man runda upp till 1. Men egentligen, vad händer när den skriver uppgifter som det är att det droppar det som är efter decimalkommat. Så 0,6 blir 0. ROB: Ja. Och vi säger truncate för det. Så när ni kastade till en int, decimaltrunkeras. Så fix för det - det finns faktiskt två. Och jag kommer att göra det andra, eftersom detta är en mycket enklare lösning. Så en fix är använda flottar i divisionen. Och egentligen, du bara behöver göra en av dem en flottör. Men det är något tydligare bara för att göra dem båda flyter. Så 1,0 delat med 10,0 är dividera två flottar. Så svaret kommer att hamna en flottör, och så kommer du rätt att skriva ut 0.10 här. Något som inte fungerar så bra om det vill, ja, visst var det lätt tillräckligt för att omvandla en till en flyta genom att göra det 1.0. Men tänk om istället hade vi två heltal som int x är lika med 1 och int y är lika med 10, och då vi ville ha att göra x dividerat med y? Så det är inte lätt att bara göra X.0 eller något. Så fixa till som gjutning. Så gjutning är ett sätt på C för att konvertera från en variabel till en annan. Så här, 1 är ett heltal. Och genom att sätta denna flottör framför det är vi gjutning 1 till en flottör. Och så detta kommer att konvertera den 1 till 1,0. Och detta kommer att konvertera den 10 till en 10,0. Och då saker beter sig på liknande sätt som tidigare version vi bara visade var, som väntat, får vi 0,10 och det kommer att skriva ut det. Och vi kan göra det med variabler, också. Så vi kan säga, float x dividerat med float y. JOSEPH: Några frågor? ROB: Så precis som i vanlig matematik, Vi har operatörs företräde. Så i matematik klass, du är mer benägna att kalla det ordning av verksamheten. Här är den officiella termen operatör företräde. Men operatören företräde, eller de flesta operatörer, är som du förväntar dig. Så precis som i matte, 2 gånger 10 är kommer att grupperas närmare än detta 10 delat med 2 och sedan 2. Ordningen på verksamheten, kommer den att göra 2 gånger 10, 10 delat med 2, och sedan det ska göra 20 plus 5 plus 2. Så det är som förväntat, och du kan använda parenteser för att gruppera uttryck. Du kan inte använda hakparenteser till grupputtryck. Yeah? TALARE 5: Kan du faktiskt bara gå tillbaka en sekund? Kan du kasta en int till en sträng? ROB: Så i C, du kan kasta vad som helst du vill vad du vill. Det betyder inte att det är en bra sak att göra. Så när du kastar en int till en sträng, innebär att - och vi kommer att få in i denna mycket mer grundligt - JOSEPH: Långt senare. ROB: Jag ville inte säga mycket senare, så jag försökte ändra min mening. Vi kommer att komma in i det mycket mer noggrant senare var egentligen när du har ett strängvariabel - så en sträng kan vara godtyckligt länge, eller hur? Och vi har sagt att en int är fyra byte och långa långa är åtta byte och en flottör är fyra byte. Så en sträng, precis som en int, har endast ett visst antal bitgrupper till den. Och det kommer att bli fyra byte. Men en sträng kan vara ganska godtyckligt länge, eller hur? Så hallå världen redan, om det är 10 tecken eller vad som helst, det är redan kommer att vara över 4 byte Jag kan passa in i en sträng. Och så hur strängar fungerar egentligen är att de är där i minnet att strängen hålls. Och så här, när jag säger sträng x lika hallå världen, insidan av x är säger bara, åh, hej världen lagras på denna särskilda plats i minnet. Så om vi försöker att kasta ett heltal till en sträng, då vi försöker tolka vissa slumpmässiga delen av minnet som en sträng. Och som nästan alltid bryter saker. JOSEPH: Men om det förvirrar dig, kommer vi att täcka det mer ingående senare. ROB: Ja. Det är dit du ska att få in tips. Och det är en viktig bit av två veckor i denna kurs. HÖGTALARE 6: Fungerar det som objekt på andra språk eller inte egentligen? ROB: Så med andra språk, föremål skulle vara representerade med hjälp av pekare. Det är inte samma sak, dock. Några tankar? JOSEPH: Nej. Inga tankar. ROB: OK. JOSEPH: Next. ROB: Bara att gå med det. Okej. Så modulo. Precis som vi har plus, minus, dividera och multiplicera. Så modulo är en du kan inte har sett förut. Och det bara säger, ge mig återstoden av. Så 55% 10. Resten av att göra 55 delat med 10 skulle vara 5. Så 55% 10 är 5. Och 3% 5 skulle vara 3. 8% 8 kommer att vara 0. 16% 15 blir 1. JOSEPH: En sak att notera med detta, också, är det kanske inte fungerar som förväntat om du använder ett negativt tal. Så negativ 5% 4, en del människor kanske tror det är - Vad skulle du tänka negativt 5% 4 skulle vara? SPEAKER 5: One. JOSEPH: Så en del människor säger en, en del människor säger negativt. Men vad - ROB: Jag skulle inte ens ha sade en av dem. JOSEPH: Två, sorry. Vissa människor säger - ROB: Tre. JOSEPH: Tre? ROB: Negativ - vad var det - negativ fem - JOSEPH: Tre, tre, tre. Ursäkta. Eftersom modulo, generellt, när du har sett det på andra ställen, oftast innebär det returnera ett positivt tal, eller hur? ROB: Så när vi säger i matematik,% 10-talet, de tenderar att vilja ge dig - om vi mod med 10, då räknar vi med att få ett nummer mellan 0 och 9. Här inne är det inte så att du kommer att få negativa tal returneras. JOSEPH: Så negativ 5% 4 skulle vara negativt 1. ROB: Men det är sällsynt att du är mod-ning negativa tal till att börja med. Hoppa över detta. JOSEPH: Ja. ROB: Meh. OK. Så en sista sak att påpeka om flyter är att det är ett farligt beteende, men flyter är inte en exakt representation. Så gå tillbaka till byte igen, kom ihåg att en int är alltid fyra byte och en float är alltid fyra bitgrupper. Så Lucas exempel är ganska bra. Så tänk på 1 dividerat med 3. Så 0,3333333. Om jag bara har 32 bitar, hur kan Jag lagrar 0,33333 exakt? Och kanske, av någon anledning, säger du, okej, ja, låt oss bara säga att denna speciella 1011001, låt oss bara säga att skulle vara 0,333333. Tja, du har bara ett begränsat antal dessa bitar, så det är omöjligt att representera varenda flyttals värde ges bara 32 bitar. Tja, det är omöjligt att företräda någon flyttal givet oändligt - väl, gett någon ändligt antal bitar. Så frågan här är, väl, när vi använde för att skriva ut till två decimaler, Vi fick rätt få svaret 0,10. Men under huven, det är verkligen lagras så nära som möjligt för att 0.10 eftersom dessa bitar kan representera. Är det på nästa bild? Eller är det inte? JOSEPH: Ja, det är det. ROB: Blegh, blegh. JOSEPH: Ja, kan du bara Dra noterna upp lite. ROB: Jag kommer bara att zooma i den sista på det. Jösses, det är [OHÖRBAR]. Så det numret. Det är det som skrivs ut om vi kör det programmet. Och märker att det är egentligen inte en stor sak om vi bara bry sig om som 2-3 decimaler. Som vi bara ursprungligen ut 0,10, och det är därför vi såg inget fel. Men när vi börjar komma in i exakt, exakt antal att det är representerar, ser vi att det inte kan exakt representerar 0,1. Och en del av problemet här är, okej, det är bra, men, ja, första, vad händer om vi försökte göra, Svaret är lika är lika med 0,1? Kommer det att returnera sant eller falskt? Och så det är svårt att säga. Jag tror att det faktiskt kan returnera sant. Kommer det först - Jag vet inte. Svaret är när du börjar att göra med flyttalsvärden, du ganska mycket bör inte använda jämlikhet på grund av denna bristande precision. Och för allt du vet, det är den hundrade decimal att flyttal kunde inte att korrekt hantera. Och så jämställdheten kommer bara att misslyckas med även om antalet - om du hade varit använda exakta siffror, siffrorna bör har exakt samma. Det är under loppet av liknande 50 beräkningar med dessa flytande punkt värden, kan felet bygga upp och upp och upp, och det blir bara fel. JOSEPH: Och det har varit riktigt kända exempel på att detta händer. Liksom NASA ingenjörer har fått detta fel, orsakar raketer att explodera in luften efter att de har lanserats. Och massor av frågor som denna. Så ja. HÖGTALARE 6: När du säger 0.3 f, betyder trunkera resten? Eller går det uppåt eller nedåt? ROB: Kommer printf runt det? JOSEPH: Jag tror printf klipper. ROB: OK. Så kan vi på samma sätt gå i motsatt riktningen av denna, där, i detta fall, närmast det skulle kunna representera 0.1 var med detta nummer. Närmast det skulle kunna representerar 0,2 är i den motsatta riktning, 0,199999996356 eller något. Så om vi gick i den riktningen av saker, då printf 0.3 f skulle återvända 1.99 istället för 2.00. JOSEPH: Och jag är inte helt säker på det. Du kanske vill skriva en liten, liten program för att bara kontrollera att. ROB: Men, vad vi är säkra på är att om du försökte kasta den till en int, och gjutning till en int kommer att bringa den att trunkera decimal, om du försöker kasta 1.9999999 till en int, får du 1. Och så bör du i allmänhet använda rund funktion i mattebiblioteket. Frågor? OK. JOSEPH: Så går vidare till villkor och booleska uttryck. Så du har sett dessa innan. Och egentligen vill jag se till att min Datorn är i rätt format här. Space. Tyvärr, vi kommer att ha att göra en lite med cutoff vid kanterna. Men ja, har ni sett detta tidigare i Scratch. Så denna rätt här är ett uttryck som används i en villkorssats. Så svara större än noll kommer berätta sant eller falskt. Och dessa är verkligen viktigt, eftersom de tillåter oss att införa logik i vår kod. Så till exempel, är detta ett program skriven i Scratch som ber användaren för ett heltal och berättar för dem om det heltal som de gav dig var en positivt eller negativt tal. Och omvandlingen över här för att se är du först skriva ut ett uttalande, ge mig ett heltal. Och sedan ber du dem för ett heltal. Och sedan använda villkorslogik över här för att kontrollera om det numret var faktiskt större än noll eller inte. Så här har vi ett booleskt uttryck insidan av en villkorlig Om uttalande. Finns det några frågor? Finns det några frågor om det? OK. Så det finns mer än bara större än, naturligtvis. Du kan bygga booleska uttryck genom att använda de flesta av de möjliga saker som du skulle tänka på i matematik. Så större än. Det borde vara en mindre än. Ursäkta. Och avståndet. ROB: Gud förbjude att du lämnar den. JOSEPH: Okej. Så större än, mindre än, större än, eller lika med, mindre än, eller lika med. Vi använder dubbla jämlikar för att kontrollera om jämlikhet, eftersom enstaka lika medel uppdrag, eller hur? Ja. Och då kan vi också inte lika med använder utropstecken, lika. Och detta utropstecken kan också utvidgas så att om du vill att invertera någon form av Boolean uttryck, kan du göra det. Så detta kommer att utvärderas till sant endast om svaret är mindre än eller lika med noll. Har du frågor om det? OK. Så kan du också kombinera dessa uttryck som använder logiska och och logisk Or. Så det här är bara Och symbolen, som bör vara Skift, 7. Och detta är röret symbol, som är inte en bokstav L. Det är en det är precis ovanför Enter. Så du använda två av dessa för att symbolisera logisk Och den logiska Or. Så det här kommer bara returnera true om svar är en, två, tre eller fyra. Och det kommer bara att returnera sant om svar är utöver det på vardera sidan. Så det är inte en, två, tre, eller fyra. Och det sätt som du skulle använda att i ett uttryck - ROB: Eller en nolla eller en fem. JOSEPH: Noll eller en fem. Ursäkta. Ja, ja, ja. OK. Och här borta nu, på samma sätt som du skulle använda det uttrycket, en mindre uttryckssidan av en Om villkor uttalande, skulle du även använda den för samma sätt genom att bara sätta den inne i parenteserna if. Så här printf kommer endast avfyras om svar är en, två, tre eller fyra. Har du frågor om att kombinera uttryck? Så det finns en annan villkorlig konstruera vi kallar en If / Else. Så i princip, innebär det nu, OK, om något jag ville kolla var inte sant, sedan gå till Else och utföra det andra åtgärder. Så i detta fall, frågade jag användaren för ett heltal. Ger heltal större än noll? Ja? Nåväl, då de plockade ett positivt tal. Om inte, så måste den ha varit negativ eller en nolla. Så du valde ett negativt tal eller en nolla i det här fallet. Ja. Eller en nolla. Och sedan har vi även om / Else, Om och annat. Så här låter oss utföra en sekvens av saker bara om de första misslyckas. Så i det här fallet, nu vi gör det sista du väljer noll. Så om de varken plockat en positiv eller ett negativt tal, då de måste har plockat noll. Så det bara går ner kedja så här. Så ett exempel på hur en Om skiljer sig från - en Om / Else skiljer sig från bara en sekvens av Ifs. Och detta är en vanlig fråga som folk frågar är, ja, om du får som en 95 i CS50, vad kommer detta program berätta? SPEAKER 5: Du fick ett A. JOSEPH: Ja. Du fick varenda en av dem rätt. Du fick ett A, du fick ett B, du fick ett C och ett D, eller hur? Så alla dessa blir utvärderade i ordning. Så medan en 95 är större än 90, är ​​det också större än 80, är ​​det också större än 70, och det är också större än 60. Så du har alla dessa kvaliteter. Och jag antar att du skulle bara är intresserad av A. Det sättet att fixa det är att ersätta de med Else / Ifs. Så i det här fallet ser det att 95 är större än 90, och då det gör inte bedöma resten av uttalanden. Eventuella frågor om det? Så det finns en annan villkorlig sorts struktur som vi har här, som vi kallar en switch-sats. Så detta gör att du i princip kontrollera vad värdet av ett nummer som du lägger i switch-satsen är. Så i det här fallet, vi byter på n, och vi säger, åh, om n är en, sedan skriva ut det uttalandet. Och sedan bryta, vilket innebär utgång ur switch-satsen. Om det inte var en, då, ja, precis småningom kontrollera alla dessa fall. Och så kollar om det är en eller två eller tre, och den skriver därefter. Och vad denna standard nyckelordet här nere medel är om de inte in någon av dem, då säger ogiltig. Så låt oss säga att jag ber om n och användaren ger mig fyra. Tja, matchar det inget av dessa fall, så det kommer att skriva ut vad som finns i Standard avsnitt. Ja, fråga? TALARE 5: Kan du använda Boolean uttryck i stället för en, två, eller tre? JOSEPH: Så frågan är kan du använda Booleska uttryck i stället för en, två och tre? Och i C, tror jag att du kan inte göra det. Men på andra språk, som du kanske möter i slutet av termin som JavaScript, du kan. Tja, skulle du behöva för att beräkna först detta värde och sedan använda den i byta uttalande. Yeah? ROB: Så en del av nyttan med omkopplaren uttalanden är att tänka på om du gjorde detta som en Om / Else, så som om n är lika med lika med ett eller vad. Else / Om n är lika med är lika med två, vad som helst. Else / Om n är lika med är lika med tre. Så hur programmet skulle köra är det skulle sekventiellt gå den lista och kolla, är n en? Nope. Är n två? Nope. Är n tre? Yeah. Gör det här. Medan med switch uttalanden, är det faktiskt kunna sammanställa det att vara riktigt snabbt. Och så fort det står switch, det säger, okej, n är två, jag är omedelbart kommer att hoppa dit Jag ska börja köra. Jag tänker inte först kontrollera, är n en, är n två? Det kan omedelbart börja göra vad den ska göra. Och på grund av detta, kan det inte ta booleska villkor. Annars skulle det ha att göra med sekventiell, liksom, okej, är n större än noll? Else är n större än 10 eller vad som helst. JOSEPH: I det här fallet, om du använt Om / Else, Ifs, då växeln skulle kör ungefär tre gånger snabbare än om / Else If. Vi kan organisera strömbrytare så så att vi inte bryter efter varje fall. Så i detta fall, jag uppdelning av siffror som vi väljer i en och två är inte höga siffror och tre är en hög siffra. Så i det här fallet, är om n en eller två, det kommer att träffa målet och så kommer det falla igenom, eftersom det finns ingen paus. Och det kommer att hamna här. Så om vi väljer en, kommer den att göra det printf och sedan bryta så att ingen av detta utförs. Och naturligtvis, om de kommer in i tre eller något annat, så kommer det att hoppa dem och inte gå dit, och det kommer att utföra i stället motsvarande linje. Finns det några frågor om det? Ja? SPEAKER 4: Skulle du får ett felmeddelande om du hade en paus efter fall en men det hade inte något för den att göra? JOSEPH: Så frågan är skulle du få ett fel om du har en paus efter skift en men det finns inget att göra? Och svaret är nej. Du kommer inte att faktiskt få ett felmeddelande. Ja, mm hmm. Så som en slags liten förändring här, Jag ska sätta en printf här. Whoops. Så vad skulle det ut om Jag satte en i som insats? Yeah. Det skulle säga dig att det inte tog ett stort antal gånger, eller hur? Eftersom det skulle slå det första fallet, det skulle inte gå sönder, och det skulle falla genom att det andra fallet. Eventuella frågor om det? ROB: Hade du en annan fråga? JOSEPH: OK, svalna. Okej. Så finns det något annat vi kallar en ternära operatör som är i grunden en alternativa syntax att göra Om och då annars. Och det kan du göra allt på en rad. Så i detta program, Jag ber användaren för n. Och om n är större än 100, säger jag dem att de valde ett stort antal. Annat jag berätta för dem att de plockade en låg siffra. Så vi kan använda det här riktigt långa syntax, sträng, S, och sedan kontrollera om n är större än 100 och tilldela det därefter. Men vi kan göra så mycket mer kortfattade med hjälp av denna ternära operatören syntax vilket innebär en fråga varumärke och ett kolon. Så frågetecknet är i huvudsak att ställa en fråga, eller hur? ROB: kanske zooma in på det. JOSEPH: Ja. Bra punkt. Så detta är den ternära operatören. Jag först ställa frågan, är n större än 100? Om det är, då kör jag den första del före tjocktarmen. Om det inte är, då kör jag den andra delen efter kolon. Så om n är större än 100, då plockar hög och sätter som i strängen s. Om n är mindre än 100, plockar låg och sedan sätter det i strängen s.. Så det kommer att kondensera denna stor bit ner i just det en rad. TALARE 5: Är det populärt? JOSEPH: Ja, det är ganska populärt för saker där i huvudsak du vill gör ett uppdrag baserat på någon form av tillstånd. Och i det här fallet, vi försökte att tilldela ett värde till sträng s. Det är inte så - Jag antar att jag inte riktigt föredrar den i övriga fall. Men det är särskilt användbart för detta uppdrag. ROB: Det är ett ganska vanligt mönster där du har någon variabel som du ska säga, om något, ställa denna variabel till en värde, annat, ange denna variabel till ett annat värde. Och det är det scenario där använda en ternär. JOSEPH: Och du sparar massor av linjer, eller hur? Och det bara gör din kod utan tvekan lite mer lättläst. Ja, fråga? HÖGTALARE 6: För en trefaldigt, kan du gå, string s jämlikar s, frågetecken? Och då kan du ha, säg, fem olika alternativ. Och beroende på vad det antal n var, skulle du välja en av dem? JOSEPH: Så frågan är, är det en sorts syntax där du kan göra sträng s är lika med n, och sedan har mer än två alternativ efter att frågetecken? Och ett enkelt svar är nej, det finns inte verkligen ett bra sätt att göra det, om inte du vill bo flera ternära operatörer inuti varandra. Du kan göra som n större än 100, frågetecken, och sedan en annan ternära operatör, n är större än 50, frågetecken, och bo på det sättet. Men i detta scenario, är din kod få slags oläsbart och rörigt, och det kan vara bättre att bara gå till en Om / Else uttalande på den punkten. ROB: Och dessutom, som en sidoanteckning, PHP felaktigt implementerar ternära operatören så att kapslade ternaries inte ens fungerar som de ska. JOSEPH: Ja. Så det blir lite förvirrande, speciellt när du går till olika språk. ROB: Det är förvirrande nog att språk är fel om det. JOSEPH: Så egentligen, bara för att klargöra, inte alla vet vad som % S gör här borta? Eventuella frågor om det? Jag antar att bara för kameran, den% s i grund och botten låter oss sätta en platshållare för en sträng. Och sedan i slutet, vi ange att variabel som vi vill sätta in i detta platshållare är s. Så att i grunden tar s och det sätter den in här. Och så kommer det att skriva ut, du valde en hög eller du valde en låg siffra. OK. Så loopar kan du utföra saker i cirkulära rörelser, eller hur? Du kanske har stött på detta i Skrapa i form av evigt loopar eller Upprepa tills eller Upprepa en viss antal gånger. Så varför är det bra för oss? Tja, i C, låt oss säga att vi har denna sång förs i Scratch att sjunger, är detta den låten som aldrig tar slut. Det går bara om och om och för alltid och för evigt. Tja, kan man inte riktigt göra ett program som har ett oändligt antal printf uttalanden i det, eller hur? Så i detta scenario, ett sätt att du skulle kunna göra detta arbete och att få det att skriva ut för alltid är att istället använda en while-slinga. Så en while-slinga kommer att utföra vad som är i kroppen av de två hängslen som tillhör det baserat på vad tillståndet är. Så i detta speciella exempel tidigare, om Vi vill skriva ut det här för alltid, vad kan vi göra? Jo, visst, eller hur? Så här sortens kombinerar idén av några booleskt uttryck tillsammans med en slinga. Och vi lärde oss om Boolean uttryck tidigare. Så när tillståndet inuti att Medan fortfarande sant, denna slinga kommer att köra på och på och på. Och i det här fallet, om vi bara leverera det med sann, orsakar detta en oändlig slinga som skriver låten om och om och den som vi önskade innan utan att ha ett program som har ett oändligt antal printf uttalanden, vilket är inte möjligt. Så mer fängslande, fast, Du kan använda denna med en variabel och ett tillstånd. Så låt oss säga att vi vill upprepa fras, totalt loopy, 10 gånger. Så vad du kan göra med en while-slinga är kan du först initiera en räknare variabel utsida Medan slingan till 10. Och sedan i princip, varje gång du går genom Medan slingan, skriva ut dig uttalandet och sedan minska räknevariabeln förrän i slutet, någon gång, när vi subtrahera jag nog gånger, 1 från I tillräckligt många gånger - och bara för att klargöra, jag minus minus betyder att jag är lika jag minus 1. Det kommer i princip ta jag ner till punkt där när jag slog noll, detta tillstånd är inte längre sant och så det kommer ut ur loopen. Så helt loopy endast skriver ut 10 gånger. Har du frågor om en while-slinga? OK. Så det finns ett sätt som vi kan göra det vi just gjorde på ett mer koncist sätt med vad vi kallar en For loop. Så en For-slinga består av en initiering, ett tillstånd och en uppdatering, precis som vi hade innan i denna Medan slinga. Så låt oss ta en titt. I denna Medan slinga, hade vi en initiering, sedan hade vi en skick att vi kontrollerat. Och sedan hade vi en uppdatering steg på toppen. Med en For loop, detta i grunden tar dessa tre saker och kondenserar det ner i en linje. Så det första som det gör i För loop är initieringen. Och då du gör ett semikolon, och sedan du gör det tillstånd, som jag större än noll går därborta, och sedan steg uppdateringen. Så detta blir utfört på slutet av slingan. Så dessa två program är väsentligen ekvivalenta. Några frågor? Så vad är en skillnad mellan dessa två? Kan någon peka ut det? Det kan vara lite subtil. Det är bara en mycket liten skillnad. Ja? TALARE 5: Du skulle inte kunna använda I variabeln utanför För loop [OHÖRBAR]? JOSEPH: Exakt. Så det här är något som vi kommer till senare kallad variabel omfattning. Men i grunden, det int i liv utanför denna Medan slinga. Så när denna Medan slinga görs köra, kommer jag att kunna använda jag senare på i programmet. Av följande skäl: med detta För loop, detta int jag är scoped insidan av denna För loop. Och eftersom det är insidan av denna del i För loop börjar det på parentesen och slutar med den lockiga stag där. Allt som har deklarerats inuti här kan inte användas utanför. Så om jag försöker använda jag utanför, det ska säg mig, svart symbol. Och i grunden, jag skulle inte kunna använda den. ROB: Och ja, för 10 år sedan, i bokstavligen alla fall, klammerparenteser är vad du använde för att bestämma räckvidden för en variabel. Så där, int jag lika med 10 deklareras inuti denna set av klammerparenteser. Och så då, så länge som du försöker använda jag innan denna klammerparentes, det är bra. Du kan se när du skriver gör du se streck, streck, std, lika, C99. Så det är en senare version av C som GCC har genomförts som också ger denna genväg. Så här används för att inte tillåtas i C. Och du kan se varför, eftersom detta int Jag är utanför denna klammer men det är fortfarande anses vara i omfattningen av dessa klammerparenteser. Men detta är en mycket bekväm sak, och så är det en bra förlängning. JOSEPH: Några frågor? OK. Så vad är mer användbart är att ibland du vill sorts dynamik i din loop, eller hur? Du vill inte bara nödvändigtvis skriva ut helt loopy hela tiden, du vill räkna ner från 10 eller något. Och så du kan använda räknarvariabeln inne i nämnda slinga samt. Och i det här fallet, det här programmet bara räknar ner från 10 hela vägen ner. Och vad betyder det inte att skriva ut? Det skrivs inte ut noll, rätt, för när - Ja, det också inte skriver ut 11. Så det inte skrivs ut noll, för när Jag är noll, kom ihåg, det utvärderar tillståndet innan det går på att exekvera slingan. Och när jag är noll, är det falskt, så den inte skriva ut räknar ner noll, bara skriver ut räkning ner 10 hela vägen ner till 1. Om vi ​​ville faktiskt det att skriva ut noll, då skulle vi sätta ett likhetstecken efter det att denna är större än-tecken. OK. Så ett sätt att göra validering av indata, vilket är när du ber användaren att göra något, vill du se till att de följer dina instruktioner, är att använda While loop, eller hur? Så i det här fallet, jag ber för ett positivt tal så är jag väntar på inmatning. Och då jag kollade Medan ingången är mindre än noll, hålla ber dem. Så länge de ger mig ett nummer det är inte positivt, tiden ställer, hålla frågar, tiden ställer. Men vad är slags konstigt om det här? Eller vad tycks inte optimalt om denna struktur här? Någon? Ja? HÖGTALARE 6: Du upprepar instruktionen två gånger. JOSEPH: Höger. Så vi har två printf uttalanden här, eller hur? Så det finns ett sätt som vi kunde få detta bara ner till en som skulle göra våra kod lättare att läsa och lite mer ren. Och då vi inte skulle behöva har få in dubbelt så bra. Och ett sätt du kan göra detta är med hjälp av en Do-While-loop. Och en Do-While-loop är i grunden en annan form av en while-slinga där allt inom klammerparenteserna blir körs minst en gång. Så här förklarar jag, int ingång, utanför först. Och då säger jag bara, gör det instruktion medan inmatning är mindre än noll. Så det träffar Do först. Det kommer alltid att utföra detta åtminstone en gång, så det kommer alltid att be användaren för inmatning minst en gång. Och sedan utvärderar den ingången, och det händer i en cirkel. Ja, fråga? HÖGTALARE 6: Finns det något sätt att göra det [OHÖRBAR] slag, som om du säger, GetString, och någon [OHÖRBAR] finns det något sätt att [OHÖRBAR] JOSEPH: Så frågan är, är det en sätt att göra validering av indata om användaren sätter inte i rätt typ av variabel? Så om vi ber om en int och de ge oss en sträng istället. Och i de funktioner som vi genomför för dig, getInt, GetString i alla dessa funktioner, de faktiskt redan göra den sortens grundtyp ingång valideringen under huven. Så om du använder de funktioner som vi gav dig, behöver du inte verkligen måste. Men om du vill titta mer på hur du faktiskt kan göra det, kan du titta under huven på filen I/O-- inte filen, standard I / O-funktioner som en läsning från standard input och standard ut. Och du kan få en bättre känsla om hur du kan göra det. ROB: En fråga är dock specifikt med exempel som du sagt, förvänta dig en sträng och jag anger en int. Hur skulle du se skillnad mellan avsiktligt vilja ha sträng 123 kontra att vilja det int 123? Så sträng, det är ganska mycket det finns ingen validering, det är precis vad de angett att du kommer att tolka som en sträng. Int är lättare, eftersom oavsett den input du tar från användaren, är du alltid med en sträng. Och så att strängen kan du sedan kolla, är alla dessa faktiskt numeriska siffror? JOSEPH: OK. Har du frågor om en Do-While-loop? ROB: Åh, och det är också - gå tillbaka till omfattning, en något gemensamt misstag försöker använda vissa lokala variabel inifrån denna Do-While slinga insidan av detta tillstånd. Och faktiskt, om vi bara blev av detta och sade, int input är lika GetInt, då kompilatorn kommer att skrika på oss, eftersom indata inte finns utanför tillämpningsområdet för dessa klammerparenteser. JOSEPH: Och det är därför vi behöver denna lineup här. OK. Så kan man också bryta sig ur en loop tidigt om du vill. Så det här är ett annorlunda sätt att genomföra det som vi just genomfört. Och istället för att använda villkoret inom parentes, vi använder en Om uttalandet insidan av kroppen av Do-While-loop. Och i grund och botten, när ingången är äntligen större än noll, kommer vi bryta sig ut ur loopen. Och så kommer vi att gå alla vägen hit. Och du kan se att detta skulle förmodligen att föredra i denna scenario, eftersom det är en liten lite renare och lite lite lättare att läsa. Detta, du slags har extra rader i den. Det är bara lite fulare, Jag antar, i en mening. Ja, fråga? SPEAKER 4: Kommer bryta bara få dig av en uppsättning av hängslen? JOSEPH: Höger. Så frågan är kommer bara att bryta får du ut av en loop? Och svaret är ja. Så om du har kapslade för loopar, för exempel, om jag har för int jag lika med 0 fram till 10 och sedan för int J är lika med 0 till 10, om jag bryter ut ur inner slinga, jag kommer fortfarande att gå till den yttre slingan. Så det kommer att fortsätta att utföra operationer på utsidan. Eventuella frågor om det? Ja? TALARE 5: Men bryta endast funktioner för klammerparenteser, inte för andra påståenden? [OHÖRBAR] JOSEPH: Så frågan är kommer att bryta endast funktion för loopar i motsats till övriga uttalanden som om? Och ja, det är fallet, eftersom du bryta ut i en slinga, höger, i en mening. ROB: I de allra flesta fall är det Detta är den typ av Om något, sedan bryta. Så du behöver inte bryta gälla If som omslag runt den. Och också, det är inte mycket av en slinga, men kom ihåg att switchar är också brutit ut i form av pauser. Vi såg raster som används med växlar innan. JOSEPH: Och du kan även använda dem i medan slingor och för slingor. Några frågor? OK. Så nästa upp är funktioner. Så du kanske har använt en av dessa BYOB block i din Scratch projektet. Och detta i grund och botten tillåter du definiera en uppsättning instruktioner som ska följas. Och vad jag menar med det är låt oss tänka tillbaka till matte, höger, algebra. Du har vad vi kallar en funktion av x, någon variabel, och låt oss säga att detta Funktionen är f av x är lika med x plus 5. Så du kan tänka på f på x som denna svarta box som tar 15 i och sedan producerar 20. Så mer generellt, är en funktion något som tar några ingångar och sedan producerar några utgångar. Och varför är funktioner bra? De är bra för ett antal skäl. Så gör någon vill ta ett knivhugg på vilken organisation innebär? När det gäller varför funktioner är till någon hjälp? Ja? SPEAKER 4: Det gör din kod mer lättläst. JOSEPH: Höger. Så en av de saker som är det gör din kod mer lättläst, eller hur? Istället för att ha som int x är lika med x gånger x gånger x, kan jag få kub av x, vilket är mer lättläst och mer begriplig för en läsare. Organisationen är också i fråga om dela upp koden i hanterbara portioner, så att istället för att försöka genomföra detta allt i ett långt avsnitt i huvud, kan du slags dela upp in liksom, OK, låt oss skriva en funktion att kub något, låt oss skriva ett fungera till torget något. Så att du kan dela upp den i små, små delar som du kan hantera i stället för att försöka ta itu med ett stort problem på en gång. ROB: Eller till och med små, små delar som du och en partner kan tackla. JOSEPH: Ja. ROB: Så istället för båda du försöker att implantera en fungera på samma gång. JOSEPH: Förenkling. Den som vill ta en gissning? Ja? SPEAKER 5: Mer upprepning. JOSEPH: Höger. Så en sak som du kan göra med förenkling är att det är typ av på samma linjer som återanvändbarhet är att när jag skriver en kub funktion, jag kan bara använda den om och om och om igen igen i mitt program i stället för att skriva x gånger x gånger x över och om och om igen. Och förenkling här också bara betyder att det gör din kod slags lättare att felsöka när du delar detta upp in funktioner. För då kan man lokalisera var dina problem sorts är. Några frågor? Så en annan idé är abstraktion, eller hur? Denna svarta låda. Som vet du vad getInt gör för att ta emot synpunkter från användaren? Vi har inte riktigt sagt, eller hur? Allt vi har sagt är getInt gör exakt vad den säger att den gör. Så även om vi inte berätta hur det fungerar, du fortfarande känner. Så i detta fall, är detta en fyrdubbel funktion som gör olika saker för en ingång att alstra en utsignal. Och du kan fyrdubbla ett nummer genom att multipliceras med fyra. Eller så kan det vi kallar bitars flytta den med två. Och vi kommer att täcka detta lite senare. Och det finns ingen anledning att veta hur detta Funktionen fungerar faktiskt så länge det arbetar som anges. Så under huven, skulle jag vara liknande, återinmatningstider åtta dividerat med två. Och du skulle inte veta, eller hur? Allt du behöver veta är Det gör vad den säger. Så det är den användbar sak om abstraktion. Och en annan sak är slags denna idé att lokalisera din kod till någon särskilt avsnitt. Så om du har ett problem, gör du inte måste gå över din kod försöker att åtgärda var problemet var. Så i det här fallet, genomfört jag kub fel. Jag trodde att kuben var multiplicera genom tre. Så i det här fallet, är detta ett program som har bara multiplicera med tre överallt. Och det är ett annat program som har factored kub ut i en funktion. Och så nu, om jag vill fixa mitt misstag här, jag måste fixa varenda rad av kod i programmet. Medan å andra sidan, om jag använder funktion, jag behöver bara ändra vad som var fel på ett ställe. Så i datavetenskap, vi ringa in-och utgångar. Ingångar kallas parametrar eller argument och utgångar kallas returnera värden. Och vi får se hur det hjälper oss att sortera av definiera en funktion i en sekund. Så det här är en funktionsdefinition för cubing. Så det tar en ingång, och sedan återgår det antal gånger sig själv tre gånger. Så låt oss bryta ner det. Så vi har en funktionshuvudet, vilket i grund och botten består av tre saker. Så vi har de parametrar som är, som jag sa tidigare, det ingångar i denna funktion. Och sedan ger vi den funktion ett namn. I det här fallet, det kallas kub. Och ange sedan vi vilken typ av returvärdet är. Så i detta fall, min kub funktion tar in ett heltal och det också returnerar ett heltal. Så om jag passera i två, två är ett heltal, den återgår åtta till mig, som är ett heltal. Så tillbaka typ namnparametrar. Frågor om det? Och då är returvärdet faktiskt specificeras i slutet genom att säga avkastning och sedan återvänder allt innehåller returvärdet. Så i det här fallet, om vi sätter allt tillsammans, tar en funktion i parametrar, det kallas något, och det återgår något som är den typ att vi säger att det skulle bli. Några frågor? Så hur använder vi en funktion? Tja, vi skriver en funktion och sedan vi använder det i vårt program, eller hur? Så jag kallade det kub, och då kan jag använda kuben. Men vad som är viktigt att notera är att orderfrågor. Om jag har kub nedan viktigaste, det är kommer att köra in i kuben. Och vid det här laget, det finns inget kallas kub i programmet, och det är bara kommer att bli som jag har ingen aning om vad kuben är. Så det kommer att säga, implicit förklaring funktion. Det är fel som dyker upp. Och så i detta fall, är kub nedan huvud, så det inte kommer att veta om det. TALARE 5: Så huvud är oftast den sista funktionen definieras? JOSEPH: Så frågan är, är huvud oftast det sista sak som du skulle definiera? Och nr. Det är för att vi brukar vilja huvud att vara i toppen, eller hur? För det är det första du vill programmeraren öppnar program för att se. Och så hur löser vi det här problemet om vi intresserad av huvud att vara överst, men funktioner som vi vill ha, vi vill ha dem ligga under huvud ännu kunna använda dem inne i huvud? Tja, vi använder det vi kallar en funktion prototyp. Så vad en funktionsprototyp i huvudsak är det första tar det som signaturen eller funktionshuvudet av vad vi vill genomföra ned här, och vi satte den på den övre delen av ett program. Så i det här fallet, säger vi att, ja, senare i vårt program, vi ska att göra ett löfte att genomföra detta Funktionen kallas int kub, som tar ett heltal ingång. Så nu, eftersom det är över huvud, viktigaste, det kommer att säga, oh, ja, senare i programmet, det kommer att bli där så jag kan hänvisa till det, så jag ska bara låta det gå igenom för nu. Och sedan i botten, vi genomföra kub. Och sedan huvud kommer bara säga, bra kommer det slags länk dessa två symboler tillsammans. Och vi kommer att täcka vad som betyder senare. Och så det ska veta att detta är den kub funktion som den ska använda. ROB: Den [OHÖRBAR] om att vilja Huvud i botten eller topp, jag har sett båda. Det finns saker som bara gillar att sätta huvud i botten. Men när ett projekt blir särskilt stora, oftast huvud är i en fil alla sina egna. Och vid denna punkt, som den int kub linje skulle - insida stdio.h är ett gäng rader precis som det int kub int ingångsledning. Och så dessa prototyper är saker som du tenderar att sätta in header-filer, på vilken punkt, det spelar ingen roll. Tja, det spelar ingen roll. De som alltid går i toppen. Och om huvud är inte en fil alla sina egna, du behöver inte oroa dig för att sätta individuella funktionsprototyper i filen. JOSEPH: Och vi kommer till det lite Lite senare när Rob börjar prata om att sammanställa. Och så finns det också en skillnad mellan parameter och argument. Och parameter är precis vad Vi kallar dessa ingångar när vi definiera funktionen. Och vi kallar det ett argument när vi faktiskt för in funktionen. Så i detta fall, är detta en parameter, som vi sagt tidigare. Och när vi faktiskt använder den där borta, kub av x, då x i sig är vad vi kallar ett argument till funktionen kub. ROB: Så parameter argument är - det är denna skillnad, mycket förvirrad omväxlande. Vid denna punkt, för mig, det är som en av dessa ord att när jag ser det ut i det vilda, jag kan inte låta bli att omedelbart frågan om de använder den i rätt sammanhang eftersom Skillnaden är subtil nog att bara alla tenderar - Jag säger nästan alltid argument oavsett vad jag menar. Joseph: Och funktioner är också användbara för det vi kallar biverkningar. Så en funktion kan ta några ingångar, och det kan också producera inga utgångar. Så i detta fall, är jag definierar en subrutin som inte har någon returvärde. Och för att specificera det använder vi vad vi kallar ett tomrum här. Och så bieffekt av denna funktion är att det bara skriver stuff ut till sidan. Det behöver faktiskt inte ta några ingångar, och det gör inte faktiskt ger några utgångar. Men detta skulle kunna vara användbara i den meningen om du vill, till exempel, felsöka något i ditt program, om du vill att skriva en liten subrutin som skriver ut, låt oss säga, innehållet minne eller något. Och så dessa biverkningar är ibland användbara utanför ramen för precis som in-och utgångar. Några frågor? Och för att avsluta detta segment, vad gör det här programmet göra? Jag ska ge er ett par sekunder att läsa igenom det. Vid en mycket grundläggande nivå, vad vi vill säga är att det byter x och y, eller hur? Så hur många av er som faktiskt tror detta kommer att byta x och y? Räck upp handen. Ingen. OK. Vem tror att det kommer inte byta x och y? Och summan av det var inte hela rummet. Så en del människor är osäker. OK. Det är rimligt. Så låt oss gå igenom vad som händer när du faktiskt ringa funktioner först i För att svara på denna fråga. Så det här är vad minne slags ser ut. Det är ungefär som en förenklad modell vad minnet ser ut när du kör ett program. Så det finns något som kallas stapeln här nere och något som kallas högen. Och dessa växer mot mitt i minnet. Så i detta särskilda fall, när du kallar en funktion, det får sätta på stacken. Och sedan det som finns i det Funktionen stannar i vad vi kallar att funktionens stackram. Och så för att få en fin visualisering av detta, let's - till exempel, hade vi programhuvud tidigare. Och inne i huvud, ringde vi kub. Så huvud skulle först gå på stacken rama, eftersom det är den första funktionen det kallas. Och sedan när kuben kallas inuti huvud, blir det sätta på toppen av huvud insidan av minnet. Så vad du ser här är att kuben har sina egna parametrar och dess egna lokalbefolkningen. Så när du faktiskt skicka något till en funktion, de parametrar som det får är kopior av det som var gått in från huvud. Och att sorts förklara detta, låt oss gå igenom ett program. Så vi har stacken, det är bara stapeln partiet. Och det vi gör är att vi först initiera x och y till ett och två. Så vi har dessa små lådor. De sitter i huvud stack rama på stacken. De innehåller ett och två. Nu kallar vi swap. Vad som händer är att vi passerar x-och y i swap, och swap skapar sina egna kopior av dessa variabler för att använda inne av sin stack ramen. Så nu där borta, har vi en, som innehåller det värde som x hade, och b, som innehåller det värde som y hade. Så ett, två. Och du kommer att märka att det är separata från x och y på insidan av huvud. Så vi nu skapa en temporär variabel som innehåller en. Vi satt en lika med b, så det förändringar från en till två. Och då kommer vi in ​​b lika till temp, som är ett. Och så nu vi lämnar ut av denna funktion. När du stänger av funktionen, den stack ram blir dök upp i stacken. Vi kallar det driva. Du trycker en bunt ram på stacken och du pop om från stacken. Och så vad som händer är allt som var i det stack ram slags bara går upp i lågor. Och så det finns inte längre. Men vad är det vi ser? Vi aldrig faktiskt förändrat värden för x och y, eller hur? Så de stannade lokal till huvud. Och genom att skicka saker till swap, vi faktiskt aldrig bytt dessa värden. Och vad kallar vi det här? Vi kallar detta passerar genom värde. Så i C, när du passerar saker i funktioner, går det dem med värde och gör en kopia av dem för den funktion som ska användas. Och vi kommer att lära sig om något som kallas passerar genom hänvisning senare, men det är ett sätt du kan lösa detta problem. Men vi kommer inte att oroa sig för det förrän senare. ROB: Och faktiskt, den termen, som passerar genom hänvisning, betyder så C inte ens passerar genom att referera. C uteslutande har förbi värde. Oavsett vad du gör, är du alltid passerar en kopia av något. Det är bara det att, som jag slags nämnt som tidigare med pekare och att en sträng är egentligen bara fyra byte som pekar på någonstans i minnet. Tja, om jag har denna sträng och det är säger det är där strängen - väl, om jag har denna pekare till detta plats i minnet, så jag kan skicka en kopia av denna pekare till en funktion, och att funktionen fortfarande vet var i minnet är. Så båda dessa pekare pekar till samma plats i minnet och det är hur vi ska kunna att ändra saker utanför nuvarande stack ram. JOSEPH: Vill du göra sammanställa? ROB: Nej, det är 05:30. JOSEPH: OK. Det är 05:30. OK. Så vi kommer att täcka sammanställa Jag antar i nästa avsnitt, eller din avdelning ledare kommer då. Och - ROB: Några frågor? JOSEPH: Några frågor? Ja? SPEAKER 5: Använda strängar från CS50, något funktioner som vi vill använda för de kommer att vara som C-funktioner. CS50 har inte gått in och gjorde ytterligare. ROB: Rätt. Någon av C som [OHÖRBAR], du skulle använda dem på våra strängar. JOSEPH: Och en sista sak jag vill nämna är att vi har en stilguide för denna klass. ROB: Oh, ja. JOSEPH: Så om du har kommit från en programmering bakgrund innan du kanske har vissa konventioner när du skriver kod som att sätta hängslen på samma linje eller särskild sätt att indrag eller namnge dina variabler. I denna klass, som vi vill följa en specifik stilguide bara för att, Tja, om du går ut och arbeta i industri, du kommer att vänta att följa stilguiden för företag där du går till. Som till exempel, Facebook tror jag har en särskild typ av namngivning konvention. Och det finns skillnader mellan kamel hölje variabler och precis som separera dem med understreck. Och dessutom, jag tror viktigast, liksom till exempel indrag, eller hur? Vi klamrar börjar där tillståndet är, och de finns på nästa rad. Och vi också sätta klammerparenteserna i även om det är bara en rad. Och många gånger, det finns sätt att göra den där du kan lämna dessa hängslen av om det är endast en rad under Om uttalandet. Men i denna klass, som vi vill följa en specifik stilguide bara så att du får van vid sånt. ROB: Ja, och Style 50 kommer att driva denna stilguide, och vi är kommer att använda Style 50 till grad din kod. Så det underlättar för oss och förhoppningsvis ska inte göra saker som mycket värre för dig med tanke på standardiserad stil bör inte vara att orealistiskt. JOSEPH: Och slutligen, för att hitta den stil går du till manual.cs50.net/style. Och ja. SPEAKER 4: Kommer ni att genomdriva eventuella tecken per rad? ROB: Ja. JOSEPH: Tyvärr, killar. ROB: Det är som en av de enda. På denna punkt är jag OK med 120. Jag är OK med att säga 120 tecken per rad. Jag förstår att det finns någon gräns. Jag tror att 80 är så liten, men vi genomdriva det. JOSEPH: Personligen tror jag med C, 80 tecken är mer OK. När du börjar få till andra språk som JavaScript och PHP, inte så rimligt att bara begränsa den till 80 tecken. OK. Tja, det var super sektionen. Finns det någon som vill ha godis? SPEAKER 4: Ja.