1 00:00:00,000 --> 00:00:12,510 2 00:00:12,510 --> 00:00:13,870 >> ROB: Okej. 3 00:00:13,870 --> 00:00:16,770 Välkommen till det första avsnittet. 4 00:00:16,770 --> 00:00:17,480 Jag är Rob. 5 00:00:17,480 --> 00:00:18,806 >> JOSEPH: Jag är Josef. 6 00:00:18,806 --> 00:00:21,540 >> ROB: Så ska vi dyka rätt i. 7 00:00:21,540 --> 00:00:23,420 Första sak att prata om är Appliance. 8 00:00:23,420 --> 00:00:27,150 Så förhoppningsvis de flesta av er har hämtat det redan. 9 00:00:27,150 --> 00:00:37,180 Men du kan se instruktionerna vid cs50.net/appliance. 10 00:00:37,180 --> 00:00:38,430 Åh gud, nu är jag självmedveten. 11 00:00:38,430 --> 00:00:44,590 12 00:00:44,590 --> 00:00:45,430 Jag hör fortfarande det. 13 00:00:45,430 --> 00:00:47,232 >> JOSEPH: Wow, det låter som det är desorienterad. 14 00:00:47,232 --> 00:00:52,460 >> ROB: Så en del människor har haft problem med det, så vänta inte tills 15 00:00:52,460 --> 00:00:54,940 den sista minuten av problemet satt till försöka lösa Appliance och 16 00:00:54,940 --> 00:00:56,320 reda på att det inte fungerar. 17 00:00:56,320 --> 00:00:59,010 >> JOSEPH: Och om något inte fungerar och du behöver hjälp, kan du gå till 18 00:00:59,010 --> 00:01:03,390 cs50.net/discussion där vi ha ett forum där man 19 00:01:03,390 --> 00:01:04,110 kan skicka dina frågor. 20 00:01:04,110 --> 00:01:06,655 Och vi kommer till dem så småningom. 21 00:01:06,655 --> 00:01:07,490 >> ROB: Okej. 22 00:01:07,490 --> 00:01:12,180 Så detta är vad Appliance ser ut som. 23 00:01:12,180 --> 00:01:15,480 Återigen, det är bara en helt separat operativsystem som körs inom 24 00:01:15,480 --> 00:01:19,440 oavsett operativsystem du kör på din bärbara dator. 25 00:01:19,440 --> 00:01:24,450 Och de huvudsakliga delar du använder är gedit. 26 00:01:24,450 --> 00:01:28,050 Så förhoppningsvis detta har redan blivit en välbekant plats. 27 00:01:28,050 --> 00:01:29,470 Terminalen. 28 00:01:29,470 --> 00:01:31,890 >> Och du kan också köra Chrome inom Appliance. 29 00:01:31,890 --> 00:01:33,860 Det har varit ett par personer som har rapporterat internet 30 00:01:33,860 --> 00:01:35,390 inte i Appliance. 31 00:01:35,390 --> 00:01:38,090 Och några av dem har bara antagit att det inte är tänkt att vara 32 00:01:38,090 --> 00:01:39,190 internet i Appliance. 33 00:01:39,190 --> 00:01:40,750 Men ja, det är tänkt att vara Internet. 34 00:01:40,750 --> 00:01:44,000 35 00:01:44,000 --> 00:01:46,410 >> Jag ska säga det just nu, men det gör det inte verkligen betyder någonting. 36 00:01:46,410 --> 00:01:50,680 Om internet inte fungerar, detta är vad du brukar behöva 37 00:01:50,680 --> 00:01:52,180 att köra för att fixa det. 38 00:01:52,180 --> 00:01:55,602 Om du har internet-problem, inte minns det, bara lägga upp den på 39 00:01:55,602 --> 00:01:57,560 Diskutera, och vi kommer att säga, kör det. 40 00:01:57,560 --> 00:02:00,420 Men Internet ska arbeta. 41 00:02:00,420 --> 00:02:06,650 >> Så det enda andra sak - ja, ingenting annat är verkligen relevant. 42 00:02:06,650 --> 00:02:08,979 Men jag ville bara påpeka att - 43 00:02:08,979 --> 00:02:13,290 se i denna nedre högra hörnet. 44 00:02:13,290 --> 00:02:16,530 Så alla dina apparater bör ha en IP-adress. 45 00:02:16,530 --> 00:02:22,350 Och senare på terminen, detta IP adress kommer att bli mer relevant när 46 00:02:22,350 --> 00:02:27,230 du arbetar på webben p-set, eftersom du kommer att kunna komma åt 47 00:02:27,230 --> 00:02:32,310 webbplats du arbetar på från din lokal Chrome genom att använda denna IP-adress. 48 00:02:32,310 --> 00:02:35,400 >> Men vad jag tycker om att använda IP-adressen för - och du behöver inte göra det här, jag 49 00:02:35,400 --> 00:02:37,460 vill bara påpeka det - 50 00:02:37,460 --> 00:02:39,540 är här. 51 00:02:39,540 --> 00:02:42,910 Så detta är ett terminalfönster på min Mac, är det inte i 52 00:02:42,910 --> 00:02:44,580 Appliance alls. 53 00:02:44,580 --> 00:02:47,190 Och du kan slå upp vad Detta kommando gör. 54 00:02:47,190 --> 00:02:51,855 Men jag ska direkt till SSH till min Appliance. 55 00:02:51,855 --> 00:02:53,410 Jag vet inte vad IP är. 56 00:02:53,410 --> 00:02:54,300 >> JOSEPH: 168 - 57 00:02:54,300 --> 00:02:56,080 >> 168.224.1.0. 58 00:02:56,080 --> 00:02:59,950 >> ROB: Så när jag är klar med detta, logga in 59 00:02:59,950 --> 00:03:05,450 Nu, i princip, är detta identiskt med ett terminalfönster i min apparat. 60 00:03:05,450 --> 00:03:10,280 Så jag ganska mycket aldrig fungerat inifrån själva apparaten. 61 00:03:10,280 --> 00:03:12,550 Jag alltid har den igång i bakgrunden minimeras 62 00:03:12,550 --> 00:03:15,890 och SSHed in i den. 63 00:03:15,890 --> 00:03:24,270 >> Problemet med detta är att du inte kommer för att kunna använda gedit lätt 64 00:03:24,270 --> 00:03:25,600 direkt från detta. 65 00:03:25,600 --> 00:03:31,500 Men om du vill vara en riktig coolt hacker, så ska du få använda en 66 00:03:31,500 --> 00:03:34,220 kommandorad textredigerare ändå. 67 00:03:34,220 --> 00:03:39,620 Så Vim och Emacs och Nano, alla dessa Vilka alternativ. 68 00:03:39,620 --> 00:03:41,560 Nano tenderar att vara det enklaste. 69 00:03:41,560 --> 00:03:45,006 Och jag tror att det inte har någon syntaxmarkering. 70 00:03:45,006 --> 00:03:47,620 Åh, nej, det gör det helt. 71 00:03:47,620 --> 00:03:49,870 Så du kan använda Nano, eftersom att man är ganska lätt. 72 00:03:49,870 --> 00:03:52,000 >> Du ser alla dessa kommandon vid bottnen. 73 00:03:52,000 --> 00:03:54,750 Denna lilla morot symbol. 74 00:03:54,750 --> 00:03:57,620 Om du inte har sett det förut, kommer du förmodligen se det mycket nu. 75 00:03:57,620 --> 00:04:02,350 Det innebär i allmänhet styr morot, som längst ned till vänster på tangentbordet 76 00:04:02,350 --> 00:04:04,130 styrtecken. 77 00:04:04,130 --> 00:04:07,260 Så här är det säger mig här nere - 78 00:04:07,260 --> 00:04:08,710 åh, det är inte avskurna om jag zoomar in 79 00:04:08,710 --> 00:04:11,040 Så Control, är X hur Jag ska avsluta. 80 00:04:11,040 --> 00:04:14,710 Och det säger att jag kan träffa Y för Ja, för att spara, N för Nej. 81 00:04:14,710 --> 00:04:17,190 Så det är Nano. 82 00:04:17,190 --> 00:04:22,860 >> Vim och Emacs tenderar att vara något mer komplicerat och överväldigande. 83 00:04:22,860 --> 00:04:28,840 Men du kan få van vid det, och Du kommer att älska det. 84 00:04:28,840 --> 00:04:30,590 Så det är det. 85 00:04:30,590 --> 00:04:31,720 >> JOSEPH: Du behöver inte göra det. 86 00:04:31,720 --> 00:04:31,840 >> ROB: Ja. 87 00:04:31,840 --> 00:04:37,510 Du är fri att använda gedit för resten av terminen. 88 00:04:37,510 --> 00:04:40,630 Så någon apparat relaterade frågor? 89 00:04:40,630 --> 00:04:42,820 Eller har du några tankar om vad måste talas om om 90 00:04:42,820 --> 00:04:43,610 apparaten? 91 00:04:43,610 --> 00:04:43,996 Ja. 92 00:04:43,996 --> 00:04:47,720 >> SPEAKER 1: När du SSHed in din sak, var lösenordet Crimson? 93 00:04:47,720 --> 00:04:48,390 >> ROB: Ja. 94 00:04:48,390 --> 00:04:50,170 Lösenordet för det mesta i Appliance går 95 00:04:50,170 --> 00:04:52,473 vara Crimson. 96 00:04:52,473 --> 00:04:56,517 >> TALARE 2: Installera som en riktig IDE på apparaten, kommer det att fungera? 97 00:04:56,517 --> 00:04:59,200 98 00:04:59,200 --> 00:05:07,290 >> ROB: Jag föreställer mig Eclipse har en Fedora version, i vilket fall, ett ja, 99 00:05:07,290 --> 00:05:08,420 du kan göra det. 100 00:05:08,420 --> 00:05:10,875 Det är nog inte riktigt värt det. 101 00:05:10,875 --> 00:05:11,742 >> TALARE 2: OK. 102 00:05:11,742 --> 00:05:15,924 Så det är nog lättare om jag ville använder Eclipse, använd bara de infödda och 103 00:05:15,924 --> 00:05:17,646 sedan ladda upp till - 104 00:05:17,646 --> 00:05:21,090 >> ROB: Åh, är det också förmodligen lättare. 105 00:05:21,090 --> 00:05:24,046 Men du kan få det att fungera inom Appliance. 106 00:05:24,046 --> 00:05:27,740 >> JOSEPH: Och för kameran, frågan var, kan du installera en annan 107 00:05:27,740 --> 00:05:29,490 IDE apparatens insida? 108 00:05:29,490 --> 00:05:31,520 >> ROB: Eclipse är en Exempel på en IDE. 109 00:05:31,520 --> 00:05:34,800 110 00:05:34,800 --> 00:05:36,050 Någon annan apparat frågor? 111 00:05:36,050 --> 00:05:38,250 112 00:05:38,250 --> 00:05:38,680 Okej. 113 00:05:38,680 --> 00:05:44,920 >> Så kommer vi nu att gå vidare till kommandoraden gränssnitt-relaterade saker, så CLI. 114 00:05:44,920 --> 00:05:47,990 Och återigen, jag kommer bara att arbeta i här, eftersom detta är identiskt med 115 00:05:47,990 --> 00:05:52,780 arbetar inom ett terminalfönster inom Appliance. 116 00:05:52,780 --> 00:05:54,160 Hur är det teckensnitt ser? 117 00:05:54,160 --> 00:05:55,970 Är det tillräckligt stor? 118 00:05:55,970 --> 00:05:57,000 Okej. 119 00:05:57,000 --> 00:06:02,480 >> Så det finns en hel del kommandon som du bör få ganska van vid 120 00:06:02,480 --> 00:06:04,490 under hela terminen. 121 00:06:04,490 --> 00:06:09,480 De två stora för navigering är ls, lista filerna i den här katalogen, och 122 00:06:09,480 --> 00:06:11,380 cd, så byta katalog. 123 00:06:11,380 --> 00:06:18,390 Så jag kan byta till skrivbordet och sedan ett mycket vanligt mönster är cd till en 124 00:06:18,390 --> 00:06:22,550 katalog och omedelbart ls vilka är i katalogen. 125 00:06:22,550 --> 00:06:25,540 >> Människor också ibland inte inser att Tab slutförande är en sak. 126 00:06:25,540 --> 00:06:28,370 Så som cd, vh, och då jag slog Tab. 127 00:06:28,370 --> 00:06:30,790 Jag skriver nästan aldrig ut det hela. 128 00:06:30,790 --> 00:06:32,920 Och sedan om jag fortsätter att slå Tab igen, kommer den automatiskt 129 00:06:32,920 --> 00:06:33,670 börja lista för mig. 130 00:06:33,670 --> 00:06:37,000 Så jag kan cd vhosts, lokal värd. 131 00:06:37,000 --> 00:06:39,880 Och det är bara att gå till - 132 00:06:39,880 --> 00:06:43,380 i fall du inte har hört termen tidigare, är katalog bara ett annat ord 133 00:06:43,380 --> 00:06:45,170 för mappen. 134 00:06:45,170 --> 00:06:49,930 Så nu om du ser - 135 00:06:49,930 --> 00:06:51,810 låt oss ta det till toppen. 136 00:06:51,810 --> 00:06:55,380 >> Så nu om du ser inom parentes, du se den lilla tilde, snedstreck, vhost, 137 00:06:55,380 --> 00:06:56,810 slash, lokal värd. 138 00:06:56,810 --> 00:07:00,040 Så tilde avser att till min hemkatalog. 139 00:07:00,040 --> 00:07:03,090 Det är en katalog du är i när du SSH i. 140 00:07:03,090 --> 00:07:05,660 Det är den katalog du befinner dig i när man öppnar en terminal. 141 00:07:05,660 --> 00:07:08,650 Det är där du börjar. 142 00:07:08,650 --> 00:07:13,110 Och så är jag inne i min hemkatalog, och jag är insidan av vhost 143 00:07:13,110 --> 00:07:14,475 katalog insidan av min hemkatalog. 144 00:07:14,475 --> 00:07:19,670 Och så är jag inne i den lokala värd katalog inne i det. 145 00:07:19,670 --> 00:07:23,740 >> Så några andra användbara saker med cd - 146 00:07:23,740 --> 00:07:29,220 eller bra, i allmänhet, så dot alltid hänvisar till den aktuella katalogen. 147 00:07:29,220 --> 00:07:31,130 Cd, är prick ett ganska värdelöst kommando. 148 00:07:31,130 --> 00:07:35,150 Men det förändras till det aktuella katalogen. 149 00:07:35,150 --> 00:07:38,230 En mer användbar en i termer av cd är prick, punkt, vilket är 150 00:07:38,230 --> 00:07:40,220 bara gå upp en katalog. 151 00:07:40,220 --> 00:07:43,360 >> Och observera att dessa - 152 00:07:43,360 --> 00:07:48,610 Jag vill säga alias, men dessa symboler, prick, och prick, prick, som arbete 153 00:07:48,610 --> 00:07:51,740 för ganska mycket varje kommando du är kommer att tänka på att köra. 154 00:07:51,740 --> 00:07:55,370 Så som CD är nog där du kommer att med användning av de flesta, men dessa är inte 155 00:07:55,370 --> 00:07:56,780 saker som bara cd förstår. 156 00:07:56,780 --> 00:07:59,980 Det är ganska mycket något hela din kommandorad förstår. 157 00:07:59,980 --> 00:08:01,932 En hel del program förstår prick och prick, prick. 158 00:08:01,932 --> 00:08:04,830 159 00:08:04,830 --> 00:08:09,090 >> Så de andra användbara sådana - cd, bindestreck. 160 00:08:09,090 --> 00:08:13,460 Så det kommer att föra mig till senaste katalog som jag var i. 161 00:08:13,460 --> 00:08:15,980 Så ibland jag ska göra något liknande, åh, jag arbetar här. 162 00:08:15,980 --> 00:08:21,110 Och jag ser något fel med någonting, och Jag går undersöka det genom att gå till 163 00:08:21,110 --> 00:08:24,020 några random katalog någonstans. 164 00:08:24,020 --> 00:08:25,260 Och jag vet inte om det kommer Låt mig i det. 165 00:08:25,260 --> 00:08:25,720 Det kommer. 166 00:08:25,720 --> 00:08:27,615 Så då jag göra vad jag vill i den här katalogen. 167 00:08:27,615 --> 00:08:28,950 Bla, bla, bla, bla, bla. 168 00:08:28,950 --> 00:08:31,770 Och jag var som, okej, jag vill ha att gå tillbaka till där jag var. 169 00:08:31,770 --> 00:08:34,490 cd, streck, och det leder mig tillbaka. 170 00:08:34,490 --> 00:08:39,970 >> Så jag kommer att kasta en hel del av dessa på dig i dag. 171 00:08:39,970 --> 00:08:43,730 Jag förväntar mig inte att du ska memorera alla av dem. 172 00:08:43,730 --> 00:08:46,170 Det är liksom bara vet att de finns. 173 00:08:46,170 --> 00:08:48,690 Och sedan senare när du är som, hmm, jag vill gå tillbaka till den 174 00:08:48,690 --> 00:08:51,870 katalog som jag var precis på, oh, vänta, något sådant existerar. 175 00:08:51,870 --> 00:08:53,980 Du behöver inte bara in i hela katalogen igen. 176 00:08:53,980 --> 00:08:56,090 >> JOSEPH: Och så småningom kommer du bara använda dem om och om igen, och 177 00:08:56,090 --> 00:08:57,830 det ska bli muskelminne. 178 00:08:57,830 --> 00:09:00,090 >> ROB: Ja. 179 00:09:00,090 --> 00:09:02,930 Så hur jag sa tidigare, att tilde är din hemkatalog. 180 00:09:02,930 --> 00:09:04,820 Så jag kan cd, tilde. 181 00:09:04,820 --> 00:09:07,280 Men jag har inte ens till göra det om jag bara - 182 00:09:07,280 --> 00:09:09,760 Jag ska gå tillbaka till katalogen så det är inte en meningslös exempel. 183 00:09:09,760 --> 00:09:14,560 Men om jag gör bara cd, det är också den samma som, gå till min hemkatalog. 184 00:09:14,560 --> 00:09:18,380 185 00:09:18,380 --> 00:09:19,880 Jag gör Command, K. 186 00:09:19,880 --> 00:09:24,015 >> JOSEPH: Du kan också skriva klart, det ord, och det borde klara det. 187 00:09:24,015 --> 00:09:28,650 >> ROB: Och jag tycker också Control, L också gör det. 188 00:09:28,650 --> 00:09:29,690 Så många olika sätt. 189 00:09:29,690 --> 00:09:34,070 Jag tror att det finns vissa skillnader där tydlig och kontroll, L kommer bara 190 00:09:34,070 --> 00:09:37,280 verkligen driva det till toppen och Jag kan fortfarande rulla tillbaka. 191 00:09:37,280 --> 00:09:40,580 Kommando, K bokstavligen förstör allt, och du 192 00:09:40,580 --> 00:09:42,960 kan inte rulla tillbaka upp. 193 00:09:42,960 --> 00:09:45,530 Åtminstone är det hur det fungerar i iTerm2. 194 00:09:45,530 --> 00:09:48,690 Jag vet inte hur andra saker - 195 00:09:48,690 --> 00:09:49,360 oh. 196 00:09:49,360 --> 00:09:55,450 >> Med SSHing, så om du är på Windows, du kommer att behöva ladda ner PuTTY 197 00:09:55,450 --> 00:10:02,360 För att SSH eftersom Windows inte har som en inbyggd SSH verktyg. 198 00:10:02,360 --> 00:10:06,150 Från Mac kan du bara SSH direkt från ett terminalfönster. 199 00:10:06,150 --> 00:10:08,755 200 00:10:08,755 --> 00:10:09,690 OK. 201 00:10:09,690 --> 00:10:11,840 Frågor? 202 00:10:11,840 --> 00:10:19,260 >> Med ls, så något att vänja sig med de flesta av dessa kommandon är - 203 00:10:19,260 --> 00:10:20,060 Tja, jag ska bara göra ett. 204 00:10:20,060 --> 00:10:21,310 Ls, bindestreck, l.. 205 00:10:21,310 --> 00:10:26,330 Så streck, l är vad vi ska att kalla en flagga till ls. 206 00:10:26,330 --> 00:10:30,770 Och en hel del av dessa kommandon har flaggor som du kan skicka till dem. 207 00:10:30,770 --> 00:10:35,020 Så i detta fall, är streck, l en flagga som talar om för den att ge mig en fullständig 208 00:10:35,020 --> 00:10:37,850 notering av all information av dessa filer. 209 00:10:37,850 --> 00:10:44,790 >> Så vi ser här att skrivbordet var ändrad den 30 juli kl 00:54. 210 00:10:44,790 --> 00:10:47,160 Nedladdningar ändrades 6 september. 211 00:10:47,160 --> 00:10:52,350 Dessa är de nuvarande storlek och byte av dessa kataloger. 212 00:10:52,350 --> 00:10:54,412 Du behöver inte förstå allt detta. 213 00:10:54,412 --> 00:11:00,380 >> Här grejer till vänster, dessa drwx s, som kommer att bli mycket mer relevant 214 00:11:00,380 --> 00:11:02,290 senare när du måste ta itu med - 215 00:11:02,290 --> 00:11:05,900 som har att göra med vem som har behörighet att titta på dessa filer. 216 00:11:05,900 --> 00:11:09,880 Och så om du inte var den enda användaren på denna dator, skulle du kunna 217 00:11:09,880 --> 00:11:13,345 säg, OK vill jag vara den enda tillåtet att titta på den här filen, eller jag är 218 00:11:13,345 --> 00:11:14,870 kommer att låta alla att titta på den här filen. 219 00:11:14,870 --> 00:11:17,710 Så någon annan på min dator kan titta på denna fil. 220 00:11:17,710 --> 00:11:22,190 221 00:11:22,190 --> 00:11:25,600 Jag vet inte ens vad det här - vad innebär det gör? 222 00:11:25,600 --> 00:11:26,840 >> JOSEPH: Jag är inte helt säker, faktiskt. 223 00:11:26,840 --> 00:11:27,705 >> ROB: Ingen aning. 224 00:11:27,705 --> 00:11:30,530 >> JOSEPH: Men om du inte vet, det finns ett bra kommando som du kan använda 225 00:11:30,530 --> 00:11:31,680 att berätta vad utgången betyder. 226 00:11:31,680 --> 00:11:33,780 Och om du skriver in människan före kommandot - 227 00:11:33,780 --> 00:11:35,000 så M-A-N. ROB: Man. 228 00:11:35,000 --> 00:11:37,690 Så man är en annan som är mycket användbar. 229 00:11:37,690 --> 00:11:39,540 Och mannen, ls. 230 00:11:39,540 --> 00:11:47,320 Så man-sidorna, de har båda kommandon som du kommer att använda 231 00:11:47,320 --> 00:11:50,330 på kommandoraden, och de har också funktioner som är relevanta 232 00:11:50,330 --> 00:11:52,530 med C. Så du kan människan - 233 00:11:52,530 --> 00:11:53,720 och jag ignorerade 3. 234 00:11:53,720 --> 00:11:57,410 Men man 3 printf kommer att föra upp till C-versionen av printf. 235 00:11:57,410 --> 00:12:01,030 Men om jag gör bara man printf, är detta kommer att ta upp kommando printf 236 00:12:01,030 --> 00:12:03,540 som händer på kommandoraden. 237 00:12:03,540 --> 00:12:05,730 >> Så mannen, ls. 238 00:12:05,730 --> 00:12:09,030 De man-sidor kan vara ganska överväldigande. 239 00:12:09,030 --> 00:12:12,770 Men här ser du den här informationen av alla dessa flaggor som ls 240 00:12:12,770 --> 00:12:14,300 förstår. 241 00:12:14,300 --> 00:12:17,876 Så om vi går till dash, l, och - 242 00:12:17,876 --> 00:12:19,300 Jag kommer bara att kasta det på dig. 243 00:12:19,300 --> 00:12:23,050 Men för att söka, du vill att först slå på frågan 244 00:12:23,050 --> 00:12:24,780 märke eller snedstreck knappen. 245 00:12:24,780 --> 00:12:26,040 Så snedstreck. 246 00:12:26,040 --> 00:12:29,000 >> Och då kan jag söka för vad jag vill. 247 00:12:29,000 --> 00:12:33,780 Så jag kommer att hugga för streck, l.. 248 00:12:33,780 --> 00:12:35,110 Och där var det. 249 00:12:35,110 --> 00:12:37,450 Så använd en lång lista format. 250 00:12:37,450 --> 00:12:40,060 Det hjälper inte mig att lista ut vad just den kolumnen betydde, men jag 251 00:12:40,060 --> 00:12:44,480 antar någonstans här Det skulle förklara det. 252 00:12:44,480 --> 00:12:48,740 Så använd man-sidorna för varje kommando att du inte omedelbart förstår. 253 00:12:48,740 --> 00:12:51,080 >> Jag är ganska säker på att du kan till och med mannen, mannen. 254 00:12:51,080 --> 00:12:53,070 Ett gränssnitt till nätet referenshandböcker. 255 00:12:53,070 --> 00:12:57,700 256 00:12:57,700 --> 00:13:03,570 Åh, en sista en som kanske är en aning relevant är ls, bindestreck, en. 257 00:13:03,570 --> 00:13:08,490 Så märker om jag gör just ls, Jag får dessa fem filer. 258 00:13:08,490 --> 00:13:11,480 Om jag gör ls, dash, en, jag får mycket fler filer. 259 00:13:11,480 --> 00:13:15,350 Så sak gemensamt mellan alla dessa nya filer är pricken förväg. 260 00:13:15,350 --> 00:13:21,220 >> Så konventionen är att en fil som börjar med en punkt är dolt. 261 00:13:21,220 --> 00:13:25,300 Så du vill inte se att filen du vill inte ha den bråka med 262 00:13:25,300 --> 00:13:26,750 din kataloglistning. 263 00:13:26,750 --> 00:13:30,020 Det är bara när du uttryckligen frågar, okej, ls, bindestreck, en, visa mig. 264 00:13:30,020 --> 00:13:32,830 I en står för alla filer, inklusive dolda sådana. 265 00:13:32,830 --> 00:13:37,260 266 00:13:37,260 --> 00:13:39,270 Så några andra kommandon. 267 00:13:39,270 --> 00:13:41,323 Åh, frågor på den punkten? 268 00:13:41,323 --> 00:13:41,746 Ja. 269 00:13:41,746 --> 00:13:45,914 >> TALARE 3: När du gör ls, a, vad är pricken, pricken? 270 00:13:45,914 --> 00:13:46,870 >> ROB: Åh. 271 00:13:46,870 --> 00:13:48,780 Så det här är vad jag pratade om. 272 00:13:48,780 --> 00:13:50,890 Det är samma sak där Jag kan gärna cd, punkt, punkt. 273 00:13:50,890 --> 00:13:56,790 Så tekniskt, punkt och prick, prick är filer som finns i varje enskild 274 00:13:56,790 --> 00:14:03,620 katalog där dot-filen refererar till den aktuella katalogen. 275 00:14:03,620 --> 00:14:06,930 Så om jag cd, punkt, jag ska bara att stanna i katalogen. 276 00:14:06,930 --> 00:14:10,870 Och prick, prick alltid hänvisar till den föregående katalog en nivå upp. 277 00:14:10,870 --> 00:14:18,200 Så om jag går in i loggar och ls, bindestreck, al, Vi ses prick, prick. cd till prick, prick 278 00:14:18,200 --> 00:14:20,390 leder mig till föregående katalog. 279 00:14:20,390 --> 00:14:24,530 280 00:14:24,530 --> 00:14:25,780 Yeah. 281 00:14:25,780 --> 00:14:27,160 282 00:14:27,160 --> 00:14:28,110 OK. 283 00:14:28,110 --> 00:14:33,070 >> Så en annan ganska viktig kommandot rm. 284 00:14:33,070 --> 00:14:35,650 Så det är vad vi ska att använda för att ta bort den. 285 00:14:35,650 --> 00:14:38,100 Och låt mig verkligen göra en kommando först. 286 00:14:38,100 --> 00:14:39,610 Så mkdir. 287 00:14:39,610 --> 00:14:42,770 Mkdir är hur du kan skapa kataloger. 288 00:14:42,770 --> 00:14:47,530 Och jag ska skapa en temporär katalog och gå in i den temporära katalogen. 289 00:14:47,530 --> 00:14:49,590 Och som väntat, det är tomt. 290 00:14:49,590 --> 00:14:53,680 Men om jag ls, bindestreck, ett, jag har fortfarande prick och prick, punkt, eftersom prick avser 291 00:14:53,680 --> 00:14:54,480 den aktuella katalogen. 292 00:14:54,480 --> 00:14:56,170 Och prick, hänvisar prick till föregående katalog. 293 00:14:56,170 --> 00:14:58,700 Och de kommer alltid att finnas oavsett den katalog du befinner dig i. 294 00:14:58,700 --> 00:15:01,910 295 00:15:01,910 --> 00:15:09,010 >> Och det här är en helt onödig kommando, utan beröring. 296 00:15:09,010 --> 00:15:11,880 Jag bara använda det, eftersom det är ett enkelt sätt att skapa filer. 297 00:15:11,880 --> 00:15:16,180 Så röra en trycker b, tryck c är bara kommer att skapa tre filer som kallas a, 298 00:15:16,180 --> 00:15:17,845 b och c som är helt tomma. 299 00:15:17,845 --> 00:15:20,450 300 00:15:20,450 --> 00:15:24,980 Så poängen med mig skapar de i första plats är bara så att rm är 301 00:15:24,980 --> 00:15:26,250 hur vi kan ta bort dem. 302 00:15:26,250 --> 00:15:27,850 Så rm, en. 303 00:15:27,850 --> 00:15:30,960 Det kommer att fråga mig, ta bort regelbunden tom fil a? 304 00:15:30,960 --> 00:15:33,170 Och så kommer jag säga ja. 305 00:15:33,170 --> 00:15:39,090 >> Så om jag vet att jag vill radera den filen utan att vara 306 00:15:39,090 --> 00:15:44,500 du uppmanas att ta bort vanlig tom fil?, sedan rm, bindestreck, f kommer att bli det 307 00:15:44,500 --> 00:15:48,230 flagga som säger, tvinga ta bort utan även vilket fick mig, åh, du är 308 00:15:48,230 --> 00:15:49,710 säker på att du vill ta bort filen? 309 00:15:49,710 --> 00:15:50,810 Ja, jag är säker. 310 00:15:50,810 --> 00:15:56,050 Så rm, bindestreck, fb kommer bara göra det utan att fråga. 311 00:15:56,050 --> 00:15:57,950 >> Så låt oss göra några fler kataloger. 312 00:15:57,950 --> 00:16:03,670 mkdir, tmp2, cd, tmp2, röra en, tryck b. 313 00:16:03,670 --> 00:16:04,300 OK. 314 00:16:04,300 --> 00:16:08,180 Så nu vill jag ta bort tmp2 som en katalog. 315 00:16:08,180 --> 00:16:10,316 Så rm tmp2. 316 00:16:10,316 --> 00:16:12,920 Du kan inte ta bort tmp2, det är en katalog. 317 00:16:12,920 --> 00:16:21,370 Så frågan här är att rm inte omedelbart arbeta med kataloger. 318 00:16:21,370 --> 00:16:26,530 Det är mer tänkt för filer som icke-katalogfiler. 319 00:16:26,530 --> 00:16:30,800 >> Och så vad vi kan göra här är rm, bindestreck, r.. 320 00:16:30,800 --> 00:16:35,160 Det står för rekursivt, vilket kan inte betyder någonting för dig ännu. 321 00:16:35,160 --> 00:16:38,280 Men när du kommer till rekursion, det kommer att innebära mer. 322 00:16:38,280 --> 00:16:43,540 Så rm, bindestreck, r, tmp2 kommer att rekursivt gå in i den katalogen. 323 00:16:43,540 --> 00:16:45,540 Så ner i katalog tmp2? 324 00:16:45,540 --> 00:16:47,330 Ja, vi går in i det. 325 00:16:47,330 --> 00:16:49,360 Vill vi ta bort tmp2 / a? 326 00:16:49,360 --> 00:16:49,745 Ja. 327 00:16:49,745 --> 00:16:51,830 Vill vi ta bort tmp2 / b? 328 00:16:51,830 --> 00:16:52,840 Ja. 329 00:16:52,840 --> 00:16:55,170 Nu vill vi ta bort katalog tmp2? 330 00:16:55,170 --> 00:16:56,040 Ja. 331 00:16:56,040 --> 00:16:58,410 Och så nu katalogen och allt inuti 332 00:16:58,410 --> 00:16:59,660 om den har tagits bort. 333 00:16:59,660 --> 00:17:02,850 334 00:17:02,850 --> 00:17:07,250 >> Det är tekniskt en kommando rmdir som du kan använda för att ta bort 335 00:17:07,250 --> 00:17:11,670 kataloger, men det fungerar bara på tomma kataloger ändå. 336 00:17:11,670 --> 00:17:14,109 Och för att se till att, låt oss bara do mkdir, tmp2 igen. 337 00:17:14,109 --> 00:17:15,940 Tmp2 trycker en. 338 00:17:15,940 --> 00:17:16,800 OK. 339 00:17:16,800 --> 00:17:22,770 Så om jag försöker ta bort dirtmp2, det ska säga, katalog inte tom. 340 00:17:22,770 --> 00:17:29,540 Så jag använder ganska mycket aldrig att ta bort dir-kommandot i alla fall, eftersom rm, streck, 341 00:17:29,540 --> 00:17:35,140 r kommer att arbeta med tomma kataloger och icke-tomma kataloger. 342 00:17:35,140 --> 00:17:37,760 >> Och även om jag inte vill ha att gå igenom det hela processen för 343 00:17:37,760 --> 00:17:40,720 fallande i katalogen och ta bort varje enskild fil, rm, 344 00:17:40,720 --> 00:17:44,190 streck, rf, tmp2. 345 00:17:44,190 --> 00:17:45,670 Och nu är det borta. 346 00:17:45,670 --> 00:17:51,220 >> Något att vara försiktig om är rm, bindestreck, rf. 347 00:17:51,220 --> 00:17:53,660 Och det skrämmer mig att ens skriva det, för om jag av misstag 348 00:17:53,660 --> 00:17:55,090 tryck på Retur eller något. 349 00:17:55,090 --> 00:18:02,735 Så rm, bindestreck, rf, tilde skulle, utan vilket fick mig, inte f ingen uppmaning 350 00:18:02,735 --> 00:18:05,670 mig, kommer den automatiskt att ta bort hela min hemkatalog och 351 00:18:05,670 --> 00:18:06,780 allt i den. 352 00:18:06,780 --> 00:18:11,460 Så du kanske tror att det är en dum sak att göra. 353 00:18:11,460 --> 00:18:12,830 Och ja, det är det. 354 00:18:12,830 --> 00:18:18,600 >> Men det kan hända mycket enkelt genom olycka om, säg, jag ville ta bort 355 00:18:18,600 --> 00:18:21,640 min snedstreck, vhost katalog. 356 00:18:21,640 --> 00:18:26,610 Och bara i snabb maskinskrivning, Jag råkar göra detta. 357 00:18:26,610 --> 00:18:31,880 Det kommer att ta bort rekursivt både min hemkatalog och vhost katalogen 358 00:18:31,880 --> 00:18:35,450 i denna speciella katalog som bara råkar inte existerar just nu. 359 00:18:35,450 --> 00:18:39,520 Men det skulle ändå bort hela min hemkatalog. 360 00:18:39,520 --> 00:18:43,090 Åtminstone genom att inte ha en f, det skulle uppmana mig först. 361 00:18:43,090 --> 00:18:45,670 Och jag skulle vara som, åh, nej, jag vill inte göra det. 362 00:18:45,670 --> 00:18:50,570 Men folk, snedstreck, inklusive jag har en tendens att komma in i 363 00:18:50,570 --> 00:18:53,090 vana att alltid rf-ning. 364 00:18:53,090 --> 00:18:58,713 Till och med vanliga filer som jag kan bara RM, c, jag brukar bara rm, bindestreck, rf, c.. 365 00:18:58,713 --> 00:19:01,330 Var bara försiktig när du är rf-ning. 366 00:19:01,330 --> 00:19:03,160 >> SPEAKER 4: Vad gör C göra? 367 00:19:03,160 --> 00:19:11,570 >> ROB: C är jag pratar om att C-fil i den här katalogen, som rm, c.. 368 00:19:11,570 --> 00:19:15,730 >> JOSEPH: Och mer farligt, om du använder en stjärna, hänvisat till allt i 369 00:19:15,730 --> 00:19:16,450 katalogen. 370 00:19:16,450 --> 00:19:20,040 Så vad jag brukar vanligtvis göra är att jag vill gå in i en katalog och jag vill 371 00:19:20,040 --> 00:19:21,510 ta bort alla filer i det. 372 00:19:21,510 --> 00:19:23,640 Så rm, bindestreck, rf, stjärna. 373 00:19:23,640 --> 00:19:25,700 >> ROB: Ja. 374 00:19:25,700 --> 00:19:26,780 Rm, tankstreck, rf, stjärna. 375 00:19:26,780 --> 00:19:29,530 >> JOSEPH: Och om du inte är försiktig vilken katalog du befinner dig i - 376 00:19:29,530 --> 00:19:33,340 Jag var inte i temp, men jag var av misstag i min hemkatalog, 377 00:19:33,340 --> 00:19:35,450 då ska jag ta bort allt i min hemkatalog. 378 00:19:35,450 --> 00:19:39,095 Och jag har faktiskt gjort det förut, och Jag tror att du har gjort det här förut, eller 379 00:19:39,095 --> 00:19:40,640 Jay har gjort det förut. 380 00:19:40,640 --> 00:19:42,480 >> ROB: Jag har av misstag bort - 381 00:19:42,480 --> 00:19:44,480 så ignorera detta kommando för lite. 382 00:19:44,480 --> 00:19:45,800 >> JOSEPH: Inte kul. 383 00:19:45,800 --> 00:19:52,650 >> ROB: Så i slash bin är en gäng binära filer där det kan 384 00:19:52,650 --> 00:19:54,840 vara bekanta uppstickare som klang. 385 00:19:54,840 --> 00:20:00,740 Tja, klang och i princip alla dessa saker som jag kör på kommando 386 00:20:00,740 --> 00:20:02,060 linje finns i denna snedstreck bin. 387 00:20:02,060 --> 00:20:03,090 >> JOSEPH: Liksom ls är i här. 388 00:20:03,090 --> 00:20:06,285 >> ROB: Så prick, snedstreck, ls skulle lista den här katalogen. 389 00:20:06,285 --> 00:20:08,120 >> JOSEPH: Rm är också i den här katalogen. 390 00:20:08,120 --> 00:20:12,770 >> ROB: Jag har av misstag rm, rf-ed bin, som tog bort något kommando jag kunde 391 00:20:12,770 --> 00:20:14,380 möjligen någonsin vill. 392 00:20:14,380 --> 00:20:18,085 Vilket då jag bara installera en nya Appliance på den punkten. 393 00:20:18,085 --> 00:20:20,170 >> JOSEPH: Så vara mycket försiktig när du använder det här kommandot. 394 00:20:20,170 --> 00:20:21,120 >> PUBLIK: [OHÖRBAR]? 395 00:20:21,120 --> 00:20:22,640 >> ROB: Ja. 396 00:20:22,640 --> 00:20:24,135 Det är också en dålig vana att komma in. 397 00:20:24,135 --> 00:20:27,920 398 00:20:27,920 --> 00:20:30,170 Om du märker, är jag nu - 399 00:20:30,170 --> 00:20:33,580 Tja, du kan inte märka, men min zoom-in kanske kan. 400 00:20:33,580 --> 00:20:35,360 Så jag är nu root @ apparaten. 401 00:20:35,360 --> 00:20:39,790 Så jharvard är användaren som vi vill att du alltid ska använda. 402 00:20:39,790 --> 00:20:43,820 Root är den användare som har behörighet att göra vad som helst. 403 00:20:43,820 --> 00:20:50,260 >> Så märker när jag är jharvard, om jag försöker cd - 404 00:20:50,260 --> 00:20:52,461 vad är en katalog som? 405 00:20:52,461 --> 00:20:53,980 Åh, är roten ett bra exempel. 406 00:20:53,980 --> 00:20:54,950 Så cd, rot. 407 00:20:54,950 --> 00:20:56,030 Permission denied. 408 00:20:56,030 --> 00:21:00,060 För om vi tittar på denna notering - 409 00:21:00,060 --> 00:21:02,410 och igen, behöver du inte att helt förstå detta. 410 00:21:02,410 --> 00:21:09,210 Men dessa tre streck säger att inte låta någon annan 411 00:21:09,210 --> 00:21:11,120 användare i den här katalogen. 412 00:21:11,120 --> 00:21:14,540 Och katalogen råkar ägas av användaren root. 413 00:21:14,540 --> 00:21:20,310 >> Så det faktum att jag är jharvard och ingen en som inte är root tillåts i 414 00:21:20,310 --> 00:21:23,490 denna katalog, innebär att att jag är kommer att få tillstånd nekas när jag 415 00:21:23,490 --> 00:21:25,160 försök att gå in i den. 416 00:21:25,160 --> 00:21:31,370 Så när jag är root, jag har tillstånd att göra vad som helst, inklusive 417 00:21:31,370 --> 00:21:34,660 ta bort viktiga filer till Appliance och 418 00:21:34,660 --> 00:21:36,640 förstör det hela. 419 00:21:36,640 --> 00:21:41,240 >> Så det är en dålig vana att komma in bara vandra runt 420 00:21:41,240 --> 00:21:43,650 operativsystem som root. 421 00:21:43,650 --> 00:21:46,520 Jag gör det ändå. 422 00:21:46,520 --> 00:21:48,710 Frågor? 423 00:21:48,710 --> 00:21:52,230 Och jag ska avsluta rot, stanna som jharvard. 424 00:21:52,230 --> 00:21:54,510 OK. 425 00:21:54,510 --> 00:21:55,820 >> Mer relevanta kommandon. 426 00:21:55,820 --> 00:22:03,975 Så gå tillbaka till vår temp, det mv kommandot står för drag. 427 00:22:03,975 --> 00:22:05,450 Du kan flytta en. 428 00:22:05,450 --> 00:22:07,610 Nu vill vi kalla det b, så nu det kallas b.. 429 00:22:07,610 --> 00:22:10,650 Eller kanske vi vill flytta b upp en katalog. 430 00:22:10,650 --> 00:22:12,730 Så nu den här katalogen är tom. 431 00:22:12,730 --> 00:22:15,410 Jag ska gå tillbaka till min hemkatalog, och Vi ser att b är här, eftersom 432 00:22:15,410 --> 00:22:19,230 hemkatalog var en katalog upp från den katalog som B hade varit i. 433 00:22:19,230 --> 00:22:24,710 434 00:22:24,710 --> 00:22:26,580 >> Det finns också cp. 435 00:22:26,580 --> 00:22:33,210 Så cp är kopiera super avsnitt, prick, text. 436 00:22:33,210 --> 00:22:35,750 Jag kan kalla det är, prick, text. 437 00:22:35,750 --> 00:22:39,780 Nu har vi båda super avsnitt, prick, text, och s, prick, text. 438 00:22:39,780 --> 00:22:41,340 Detta fungerar även på kataloger. 439 00:22:41,340 --> 00:22:44,040 440 00:22:44,040 --> 00:22:46,560 Jag rf-ed en enda fil. 441 00:22:46,560 --> 00:22:48,200 Så cp - 442 00:22:48,200 --> 00:22:51,710 väl, låt oss först försöka cp, tmp, tmp2. 443 00:22:51,710 --> 00:22:53,220 Så utelämna katalog tmp. 444 00:22:53,220 --> 00:22:57,440 Så lik rm, standardbeteendet är att inte arbeta med kataloger. 445 00:22:57,440 --> 00:23:01,570 >> Och återigen i samma rm, standard beteenden - bra, att få det att fungera 446 00:23:01,570 --> 00:23:04,230 med kataloger är en, streck-r borta. 447 00:23:04,230 --> 00:23:09,240 Så kopiera rekursivt temp katalog i tmp2. 448 00:23:09,240 --> 00:23:13,700 Och så nu har vi både tmp och tmp2, och det är inte så bra eftersom tmp 449 00:23:13,700 --> 00:23:16,814 var tomt i första hand. 450 00:23:16,814 --> 00:23:18,660 Tmp2. 451 00:23:18,660 --> 00:23:22,680 >> Nu kopierar tmp i tmp2. 452 00:23:22,680 --> 00:23:27,900 Och vi ser att tmp2 har också den fil en, eftersom katalogen och 453 00:23:27,900 --> 00:23:32,220 allt inne i det katalogen har kopierats. 454 00:23:32,220 --> 00:23:36,000 Och det kan vara något bra om, säger du arbetar 455 00:23:36,000 --> 00:23:38,860 på problem set en - 456 00:23:38,860 --> 00:23:41,320 eller faktiskt, senare problem apparater är ännu viktigare, eftersom det 457 00:23:41,320 --> 00:23:43,660 kommer att bli en hel drös av filer och ting. 458 00:23:43,660 --> 00:23:47,010 >> Men om du bara vill, för en delad andra, du gillar, okej, jag är 459 00:23:47,010 --> 00:23:50,210 kommer att prova något annat. 460 00:23:50,210 --> 00:23:57,860 Låt mig bara kopiera hela min pset1 katalog i pset1 backup så att om 461 00:23:57,860 --> 00:24:01,490 Jag sluta skruva upp saker, jag kan gå tillbaka in i min backup-katalog. 462 00:24:01,490 --> 00:24:07,340 Det finns mer lämpliga sätt att versionshantering säkerhetskopiering av din kod, men 463 00:24:07,340 --> 00:24:10,610 Detta är alltid ett snabbt sätt att bara göra att du har en kopia av något 464 00:24:10,610 --> 00:24:11,860 att du håller på att ändra. 465 00:24:11,860 --> 00:24:16,974 466 00:24:16,974 --> 00:24:27,090 >> Så eko är också en engångs kommando som slags sillily kommer bara ut till den 467 00:24:27,090 --> 00:24:31,540 kommandorad exakt vad du ville eko. 468 00:24:31,540 --> 00:24:32,680 Så echo hi. 469 00:24:32,680 --> 00:24:35,420 Vi ska bara skriva hej. 470 00:24:35,420 --> 00:24:38,030 Echo hallå världen. 471 00:24:38,030 --> 00:24:39,800 Vi kommer att skriva ut hallå världen. 472 00:24:39,800 --> 00:24:44,350 Som kommer i bruk när du börja kombinera kommandon. 473 00:24:44,350 --> 00:24:48,300 >> Och återigen, förvänta dig inte att du helt förstår detta ännu, men det är 474 00:24:48,300 --> 00:24:49,910 något att se. 475 00:24:49,910 --> 00:24:52,470 Och sedan om du googla efter exempel eller om du inser att du vill göra 476 00:24:52,470 --> 00:24:55,030 något, kan det vara till hjälp. 477 00:24:55,030 --> 00:24:59,020 Så låt oss, som ett exempel, så ls, bindestreck, l.. 478 00:24:59,020 --> 00:25:01,160 Så här ser jag utgången av ls, bindestreck, l.. 479 00:25:01,160 --> 00:25:06,560 Och jag säger, OK, jag vill lagra det i en fil. 480 00:25:06,560 --> 00:25:11,620 All denna utgång här, jag vill ha att sätta i en separat fil. 481 00:25:11,620 --> 00:25:16,080 >> Så denna lilla större än symbol är vad vi kommer att ringa. 482 00:25:16,080 --> 00:25:18,570 Vi omdirigera utdata till en fil. 483 00:25:18,570 --> 00:25:21,680 Låt oss kalla filen bla, eftersom det är vad jag brukar alltid kalla det. 484 00:25:21,680 --> 00:25:26,430 Så nu ser vi att vi har en fil bla här. 485 00:25:26,430 --> 00:25:30,270 Och om jag öppnar upp det, jag ser det är exakt utsignalen från kommando 486 00:25:30,270 --> 00:25:31,990 att jag sprang bara. 487 00:25:31,990 --> 00:25:36,020 Och på samma sätt kan du - 488 00:25:36,020 --> 00:25:41,260 om detta var till en fil, detta är att få input från en fil. 489 00:25:41,260 --> 00:25:45,790 490 00:25:45,790 --> 00:25:47,050 Vad är ett kommando som jag - 491 00:25:47,050 --> 00:25:49,620 >> JOSEPH: Jag tror att du kan använda mindre eller mer, förmodligen. 492 00:25:49,620 --> 00:25:53,031 >> ROB: Men vad sägs om bara mindre bla? 493 00:25:53,031 --> 00:25:53,930 Jag vet inte. 494 00:25:53,930 --> 00:25:57,870 Om du kommer in i detta scenario, som det finns psets att det är bra för. 495 00:25:57,870 --> 00:25:59,950 >> JOSEPH: Du kan rör det i eko. 496 00:25:59,950 --> 00:26:02,920 Rör filen till ekot att se den. 497 00:26:02,920 --> 00:26:04,060 >> ROB: Det är pipa. 498 00:26:04,060 --> 00:26:04,860 >> JOSEPH: Förlåt. 499 00:26:04,860 --> 00:26:06,190 >> ROB: Okej. 500 00:26:06,190 --> 00:26:12,720 Så detta matas ut till en fil. 501 00:26:12,720 --> 00:26:18,700 Det är få texten från filen och överlämna det till programmet. 502 00:26:18,700 --> 00:26:20,560 Och du kommer också se den här killen. 503 00:26:20,560 --> 00:26:24,410 Så det här är typ att göra båda samtidigt. 504 00:26:24,410 --> 00:26:28,310 Och faktiskt, jag ska presentera två nya kommandon bara att använda sig av det. 505 00:26:28,310 --> 00:26:33,060 >> Historien är en praktisk kommando som är just kommer att skriva ut en lista över 506 00:26:33,060 --> 00:26:34,940 något jag någonsin köra ett kommando. 507 00:26:34,940 --> 00:26:38,290 Så ser vi här allt som jag har varit igång hela tiden. 508 00:26:38,290 --> 00:26:39,540 Massor av ls-talet. 509 00:26:39,540 --> 00:26:41,570 510 00:26:41,570 --> 00:26:48,470 >> Och ett annat användbart kommando är grep att dess syfte är att söka över 511 00:26:48,470 --> 00:26:52,060 text leta efter mönster, bra, letar efter vad du 512 00:26:52,060 --> 00:26:53,310 vill att det ska leta efter. 513 00:26:53,310 --> 00:26:59,770 Och så en praktisk användning här är, säg vi vill ta tag i historien. 514 00:26:59,770 --> 00:27:03,860 Och jag vill leta efter kommandon där jag - vad är en 515 00:27:03,860 --> 00:27:05,000 användbar en att leta efter? 516 00:27:05,000 --> 00:27:06,898 >> JOSEPH: [OHÖRBAR]? 517 00:27:06,898 --> 00:27:09,710 >> ROB: Eller låt oss bara titta för alla berör, oavsett orsak. 518 00:27:09,710 --> 00:27:13,850 Så det här är vad det kommer att se ut. 519 00:27:13,850 --> 00:27:15,560 Och du behöver inte helt förstår det. 520 00:27:15,560 --> 00:27:20,570 Men tanken är här, är historia ger samma utgång den gjorde här 521 00:27:20,570 --> 00:27:25,030 där det är att skriva ut hela historia av allt jag någonsin springa. 522 00:27:25,030 --> 00:27:27,030 Vi är sedan förbigående att - 523 00:27:27,030 --> 00:27:30,230 så istället för att skriva ut den på skärmen, Vi vill skicka det till 524 00:27:30,230 --> 00:27:34,640 kommandot grep som söker alla förekomster av ordet beröring. 525 00:27:34,640 --> 00:27:40,280 >> Och så använder denna kombination av verktyg historia och grep, kan jag se, OK, 526 00:27:40,280 --> 00:27:44,820 Här är alla kommandon jag någonsin springa, och här är en ganska vanlig man. 527 00:27:44,820 --> 00:27:45,510 Vi är på botten. 528 00:27:45,510 --> 00:27:47,930 Och det är också ger mig kommandot Jag bara sprang som hade 529 00:27:47,930 --> 00:27:51,240 Ordet touch i det. 530 00:27:51,240 --> 00:27:58,500 Men röret är en ganska bra sak för kombinering av flera program. 531 00:27:58,500 --> 00:28:04,670 Och faktiskt, det är en genväg för låt mig utgång historia att lämna bla, och 532 00:28:04,670 --> 00:28:10,190 låt mig grep använda filen bla så vad jag vill se över. 533 00:28:10,190 --> 00:28:13,460 Så röret är bara en genväg för dessa två kommandon. 534 00:28:13,460 --> 00:28:13,950 Ja. 535 00:28:13,950 --> 00:28:15,306 >> SPEAKER 4: [OHÖRBAR]? 536 00:28:15,306 --> 00:28:16,556 >> ROB: Ja. 537 00:28:16,556 --> 00:28:20,142 538 00:28:20,142 --> 00:28:21,110 Vad är - 539 00:28:21,110 --> 00:28:21,858 Oh. 540 00:28:21,858 --> 00:28:24,820 Låt oss testa. 541 00:28:24,820 --> 00:28:29,170 Så katt, hund, fisk. 542 00:28:29,170 --> 00:28:33,770 Så jag vill grep. 543 00:28:33,770 --> 00:28:37,680 Dash, r, återigen, kommer att bli rekursivt, så jag vill sjunka ner 544 00:28:37,680 --> 00:28:38,870 alla kataloger. 545 00:28:38,870 --> 00:28:43,210 Jag vill rekursivt grep för alla - och låt mig tillfälligt få 546 00:28:43,210 --> 00:28:44,460 detta ur vägen. 547 00:28:44,460 --> 00:28:48,650 548 00:28:48,650 --> 00:28:50,740 Ignorera mig. 549 00:28:50,740 --> 00:28:51,360 OK. 550 00:28:51,360 --> 00:28:56,740 >> Så jag vill tillfälligt grep för alla förekomster av ordet fisk. 551 00:28:56,740 --> 00:29:00,510 Och så här vad jag gör är grepping rekursivt för ordet fisk. 552 00:29:00,510 --> 00:29:05,410 Och stjärnan betyder över alla dessa filer i den här katalogen. 553 00:29:05,410 --> 00:29:08,930 Och så det gav mig en Åtkomst nekad, eftersom det inte är tillåtet att läsa att 554 00:29:08,930 --> 00:29:10,060 viss fil. 555 00:29:10,060 --> 00:29:14,040 Men det fann fisk i filen, testa. 556 00:29:14,040 --> 00:29:18,450 >> Jag kan också säga, speciellt, jag bara vill titta i filen bla, i 557 00:29:18,450 --> 00:29:19,580 vilket fall kommer det inte att hitta något. 558 00:29:19,580 --> 00:29:20,990 Jag vill bara att titta i filen, testa. 559 00:29:20,990 --> 00:29:22,240 Det finns fisk. 560 00:29:22,240 --> 00:29:25,980 561 00:29:25,980 --> 00:29:29,260 Det är ett ganska användbart kommando veta i allmänhet. 562 00:29:29,260 --> 00:29:31,640 Det finns några alternativ att GREP som är tänkt att vara mer 563 00:29:31,640 --> 00:29:36,780 programmerare vänlig, men jag brukar att fortfarande falla tillbaka på grep. 564 00:29:36,780 --> 00:29:38,030 Frågor? 565 00:29:38,030 --> 00:29:39,965 566 00:29:39,965 --> 00:29:40,919 OK. 567 00:29:40,919 --> 00:29:42,520 >> Finns det andra kommandon? 568 00:29:42,520 --> 00:29:45,270 Oh. 569 00:29:45,270 --> 00:29:48,370 Bara en engångs en som jag alltid tycker är kul är cal. 570 00:29:48,370 --> 00:29:55,610 Så märker när jag är i denna vackra helskärmsläge, jag har ingen liknande topp 571 00:29:55,610 --> 00:29:56,720 verktygsfältet eller något. 572 00:29:56,720 --> 00:29:59,530 Så cal ger mig bara en trevlig liten kalender som är rätt 573 00:29:59,530 --> 00:30:02,380 nu avskurna, antar jag. 574 00:30:02,380 --> 00:30:04,770 Men trevligt litet kommando. 575 00:30:04,770 --> 00:30:06,540 >> JOSEPH: Det är [OHÖRBAR]. 576 00:30:06,540 --> 00:30:09,170 Andra kommandon som du kan ha sett innefattar klang och göra. 577 00:30:09,170 --> 00:30:11,180 Vi kommer att gå igenom dem i mer i detalj senare. 578 00:30:11,180 --> 00:30:13,400 Men om du har jobbat på den PSET, bör du vara 579 00:30:13,400 --> 00:30:15,160 bekanta med dem. 580 00:30:15,160 --> 00:30:16,640 >> ROB: Okej. 581 00:30:16,640 --> 00:30:18,520 Frågor på kommandoraden saker? 582 00:30:18,520 --> 00:30:22,450 583 00:30:22,450 --> 00:30:23,260 Okej. 584 00:30:23,260 --> 00:30:27,416 Så låt oss gå vidare till något C-relaterade saker. 585 00:30:27,416 --> 00:30:28,666 Variabler matte. 586 00:30:28,666 --> 00:30:39,078 587 00:30:39,078 --> 00:30:40,060 OK. 588 00:30:40,060 --> 00:30:45,230 Så precis som vi hade matte i Scratch, Du kan också använda matematik i C. 589 00:30:45,230 --> 00:30:49,270 >> Innan vi kommer till det helt och hållet, så variabler. 590 00:30:49,270 --> 00:30:53,920 Tänk på att när du deklarerar en variabel som int x eller float y, du 591 00:30:53,920 --> 00:30:56,710 måste ge det skriver innan variabelnamnet. 592 00:30:56,710 --> 00:31:03,020 Så typer vi har sett hittills är int, flyta, dubbel, lång lång, vilket jag 593 00:31:03,020 --> 00:31:06,150 vet faktiskt inte om vi har sett det hittills. 594 00:31:06,150 --> 00:31:07,700 >> Det finns några andra. 595 00:31:07,700 --> 00:31:09,990 Vi ser röding. 596 00:31:09,990 --> 00:31:13,920 Det är kort, vilket är som det är motsatsen till lång lång där det är 597 00:31:13,920 --> 00:31:16,650 mindre än ett heltal. 598 00:31:16,650 --> 00:31:18,580 Vi har också sett sträng. 599 00:31:18,580 --> 00:31:23,070 Vad är speciellt med snöre? 600 00:31:23,070 --> 00:31:25,350 Varför skulle jag säga att det är inte riktigt som int? 601 00:31:25,350 --> 00:31:27,030 >> SPEAKER 4: Det finns egentligen inte. 602 00:31:27,030 --> 00:31:27,990 >> ROB: Ja. 603 00:31:27,990 --> 00:31:31,820 Så den enda anledningen till att vi har sträng beror på att när du gör 604 00:31:31,820 --> 00:31:33,215 hash, inkludera cs50.h. 605 00:31:33,215 --> 00:31:36,530 606 00:31:36,530 --> 00:31:42,670 Och vi får se exempel på det senare - åh, som inte hanterar det väl - 607 00:31:42,670 --> 00:31:46,160 där cs50.h gör något i linje med typ 608 00:31:46,160 --> 00:31:49,230 def, röding stjärna, sträng. 609 00:31:49,230 --> 00:31:53,280 >> Och så det säger att vi inte ens vet vad en röding stjärna är ännu. 610 00:31:53,280 --> 00:31:56,770 Men detta säger vi vill ha sträng. 611 00:31:56,770 --> 00:32:00,250 Varje plats som du har använt sträng, du kunde ha använt röding stjärna, 612 00:32:00,250 --> 00:32:04,670 som faktiskt är en typ som förekommer i C-språket. 613 00:32:04,670 --> 00:32:06,680 Men vi kommer till det. 614 00:32:06,680 --> 00:32:07,860 Åh, och det går rätt tillbaka. 615 00:32:07,860 --> 00:32:10,170 Neat. 616 00:32:10,170 --> 00:32:15,370 >> Så samma sak med bool där sant och falskt. 617 00:32:15,370 --> 00:32:22,510 Det är egentligen inte en inbyggd typ i C. Istället är det bara, har detta 618 00:32:22,510 --> 00:32:23,740 värdet noll? 619 00:32:23,740 --> 00:32:26,200 Sedan ska vi bara tänka att det är falskt. 620 00:32:26,200 --> 00:32:27,350 Innebär detta har värdet - 621 00:32:27,350 --> 00:32:30,530 väl, har detta något värde som inte är noll? 622 00:32:30,530 --> 00:32:32,200 Då vi anser att det är sant. 623 00:32:32,200 --> 00:32:35,940 Så en är sant, två är sant, något skilt från noll är sant. 624 00:32:35,940 --> 00:32:38,710 625 00:32:38,710 --> 00:32:42,790 Så de är de. 626 00:32:42,790 --> 00:32:47,624 Frågor om deklarerar variabler och variabeltyper och allt det där? 627 00:32:47,624 --> 00:32:48,100 Yeah. 628 00:32:48,100 --> 00:32:52,384 >> SPEAKER 4: För länge länge, i boken, det sa att det skulle vara lång lång int. 629 00:32:52,384 --> 00:32:54,288 Men kommer bara lång lång fungera? 630 00:32:54,288 --> 00:32:58,210 631 00:32:58,210 --> 00:33:01,470 >> ROB: Så dessa typ modifierare. 632 00:33:01,470 --> 00:33:04,170 Så int x. 633 00:33:04,170 --> 00:33:07,710 Så kan vi också säga unsigned int x. 634 00:33:07,710 --> 00:33:09,640 Vi kan säga kort int x. 635 00:33:09,640 --> 00:33:12,570 Vi kan säga lång lång int x. 636 00:33:12,570 --> 00:33:17,250 Men ganska mycket av de saker jag just sagt, unsigned int, kort int, 637 00:33:17,250 --> 00:33:21,480 lång lång int, kan du bli av med int och det kommer bara ta 638 00:33:21,480 --> 00:33:22,510 att du menade int. 639 00:33:22,510 --> 00:33:26,045 Så osignerade x, vilket bara innebär - 640 00:33:26,045 --> 00:33:29,400 du vet hur normalt med en int, du kan säga x lika negativ 3? 641 00:33:29,400 --> 00:33:31,636 Med en unsigned int, det kan du inte. 642 00:33:31,636 --> 00:33:34,480 >> JOSEPH: Och återigen, för kameran, den Frågan var, vad är skillnaden 643 00:33:34,480 --> 00:33:37,796 mellan långa långa int och bara lång lång? 644 00:33:37,796 --> 00:33:38,410 >> ROB: Ja. 645 00:33:38,410 --> 00:33:42,850 Så jag kommer nästan aldrig skriva långa långa int. 646 00:33:42,850 --> 00:33:44,100 Jag kommer att skriva länge länge. 647 00:33:44,100 --> 00:33:47,770 648 00:33:47,770 --> 00:33:50,636 >> JOSEPH: Några frågor? 649 00:33:50,636 --> 00:33:51,886 >> ROB: OK. 650 00:33:51,886 --> 00:33:56,180 651 00:33:56,180 --> 00:34:02,390 Så dum liten påminnelse om det är hur Vi deklarerar en variabel och initiera 652 00:34:02,390 --> 00:34:04,450 variabeln och förklara en annan variabel och initiera 653 00:34:04,450 --> 00:34:05,870 allt i ett steg. 654 00:34:05,870 --> 00:34:09,370 Så deklarationen av variabeln och initieringen variabel behöver inte 655 00:34:09,370 --> 00:34:11,120 till, men kan vara på samma rad. 656 00:34:11,120 --> 00:34:15,409 657 00:34:15,409 --> 00:34:20,060 >> Så vi har standard matematikoperatorer att du är van vid - 658 00:34:20,060 --> 00:34:22,199 plus, minus, dividera, tider. 659 00:34:22,199 --> 00:34:24,389 Det finns också modulo, där vi får se. 660 00:34:24,389 --> 00:34:29,060 Det är inte, åtminstone i C, en inbyggd ström 661 00:34:29,060 --> 00:34:31,765 exponentiering cirkumflex operatören. 662 00:34:31,765 --> 00:34:33,770 Tja, det finns en cirkumflex operatör, men det är inte makt. 663 00:34:33,770 --> 00:34:34,239 >> JOSEPH: Men det är inte exponentieringen, Ja. 664 00:34:34,239 --> 00:34:36,210 >> ROB: Använd inte cirkumflex att anta att det betyder 665 00:34:36,210 --> 00:34:39,980 som kvadrat eller vad. 666 00:34:39,980 --> 00:34:42,289 Så några saker att ha i tänka om division. 667 00:34:42,289 --> 00:34:46,282 668 00:34:46,282 --> 00:34:48,880 Jag ska stå. 669 00:34:48,880 --> 00:34:51,315 Så förklarade initialize svar. 670 00:34:51,315 --> 00:34:54,670 Så vi säger float svar är lika med 1 delat med 10. 671 00:34:54,670 --> 00:34:57,500 Skriv svar till två decimaler. 672 00:34:57,500 --> 00:35:02,180 >> Och detta är den sortens saker som jag skulle människan printf att räkna ut att 673 00:35:02,180 --> 00:35:05,110 vad sjutton gör%, prick, 2f detta? 674 00:35:05,110 --> 00:35:07,930 Och det betyder bara, ja, ignorera 0,2. 675 00:35:07,930 --> 00:35:10,420 Och%, är f vad vi använder att skriva ut att flyta. 676 00:35:10,420 --> 00:35:15,370 Den 0,2 säger, skriv ut som flyter upp till två decimaler. 677 00:35:15,370 --> 00:35:19,600 Så det här programmet har en bugg, och du kanske har sett detta tidigare i någon 678 00:35:19,600 --> 00:35:20,870 innan CS kurs. 679 00:35:20,870 --> 00:35:22,170 Men vad är det bugg? 680 00:35:22,170 --> 00:35:23,050 >> SPEAKER 5: Zero. 681 00:35:23,050 --> 00:35:24,130 >> ROB: Ja. 682 00:35:24,130 --> 00:35:29,630 Så när vi säger, lika svar 1 dividerat med 10, vi vill ha det 683 00:35:29,630 --> 00:35:31,610 svara för att vara 0,1. 684 00:35:31,610 --> 00:35:37,450 Men ett dividerat med 10, en är en heltal, är 10 ett heltal. 685 00:35:37,450 --> 00:35:41,060 Och så när vi gör ett heltal dividerat med ett heltal, vi kommer att komma tillbaka 686 00:35:41,060 --> 00:35:42,190 ett heltal. 687 00:35:42,190 --> 00:35:43,660 Så 1 delat med 10 är 0,1. 688 00:35:43,660 --> 00:35:46,760 >> Eftersom det måste ge oss ett heltal, det är bara att kasta bort det 689 00:35:46,760 --> 00:35:49,410 decimal och säger att svaret är 0. 690 00:35:49,410 --> 00:35:55,314 Och så när vi trycker svara här, det kommer att skrivas ut 0,00. 691 00:35:55,314 --> 00:35:58,430 >> JOSEPH: Och precis som en notering, det faktiskt kastar bort vad som finns efter 692 00:35:58,430 --> 00:35:59,390 decimalkomma. 693 00:35:59,390 --> 00:36:03,180 Så om du i stället hade 6 delat med 10, du kanske tror att det skulle ge dig 694 00:36:03,180 --> 00:36:05,200 0,6 och då skulle man runda upp till 1. 695 00:36:05,200 --> 00:36:10,520 Men egentligen, vad händer när den skriver uppgifter som det är att det droppar det som är 696 00:36:10,520 --> 00:36:11,470 efter decimalkommat. 697 00:36:11,470 --> 00:36:13,020 Så 0,6 blir 0. 698 00:36:13,020 --> 00:36:13,370 >> ROB: Ja. 699 00:36:13,370 --> 00:36:15,160 Och vi säger truncate för det. 700 00:36:15,160 --> 00:36:21,760 Så när ni kastade till en int, decimaltrunkeras. 701 00:36:21,760 --> 00:36:23,980 Så fix för det - det finns faktiskt två. 702 00:36:23,980 --> 00:36:27,890 Och jag kommer att göra det andra, eftersom detta är en mycket enklare lösning. 703 00:36:27,890 --> 00:36:32,670 >> Så en fix är använda flottar i divisionen. 704 00:36:32,670 --> 00:36:34,720 Och egentligen, du bara behöver göra en av dem en flottör. 705 00:36:34,720 --> 00:36:37,400 Men det är något tydligare bara för att göra dem båda flyter. 706 00:36:37,400 --> 00:36:41,170 Så 1,0 delat med 10,0 är dividera två flottar. 707 00:36:41,170 --> 00:36:43,970 Så svaret kommer att hamna en flottör, och så kommer du 708 00:36:43,970 --> 00:36:48,050 rätt att skriva ut 0.10 här. 709 00:36:48,050 --> 00:36:52,220 >> Något som inte fungerar så bra om det vill, ja, visst var det lätt 710 00:36:52,220 --> 00:36:56,240 tillräckligt för att omvandla en till en flyta genom att göra det 1.0. 711 00:36:56,240 --> 00:37:02,180 Men tänk om istället hade vi två heltal som int x är lika med 1 och int y 712 00:37:02,180 --> 00:37:05,660 är lika med 10, och då vi ville ha att göra x dividerat med y? 713 00:37:05,660 --> 00:37:10,420 Så det är inte lätt att bara göra X.0 eller något. 714 00:37:10,420 --> 00:37:12,790 >> Så fixa till som gjutning. 715 00:37:12,790 --> 00:37:19,780 Så gjutning är ett sätt på C för att konvertera från en variabel till en annan. 716 00:37:19,780 --> 00:37:22,320 Så här, 1 är ett heltal. 717 00:37:22,320 --> 00:37:27,050 Och genom att sätta denna flottör framför det är vi gjutning 1 till en flottör. 718 00:37:27,050 --> 00:37:30,350 Och så detta kommer att konvertera den 1 till 1,0. 719 00:37:30,350 --> 00:37:33,380 Och detta kommer att konvertera den 10 till en 10,0. 720 00:37:33,380 --> 00:37:36,790 >> Och då saker beter sig på liknande sätt som tidigare version vi bara visade 721 00:37:36,790 --> 00:37:42,190 var, som väntat, får vi 0,10 och det kommer att skriva ut det. 722 00:37:42,190 --> 00:37:44,120 Och vi kan göra det med variabler, också. 723 00:37:44,120 --> 00:37:47,376 Så vi kan säga, float x dividerat med float y. 724 00:37:47,376 --> 00:37:48,626 >> JOSEPH: Några frågor? 725 00:37:48,626 --> 00:37:54,182 726 00:37:54,182 --> 00:38:00,090 >> ROB: Så precis som i vanlig matematik, Vi har operatörs företräde. 727 00:38:00,090 --> 00:38:06,960 Så i matematik klass, du är mer benägna att kalla det ordning av verksamheten. 728 00:38:06,960 --> 00:38:09,890 Här är den officiella termen operatör företräde. 729 00:38:09,890 --> 00:38:15,230 Men operatören företräde, eller de flesta operatörer, är som du förväntar dig. 730 00:38:15,230 --> 00:38:22,660 >> Så precis som i matte, 2 gånger 10 är kommer att grupperas närmare än 731 00:38:22,660 --> 00:38:25,410 detta 10 delat med 2 och sedan 2. 732 00:38:25,410 --> 00:38:29,745 Ordningen på verksamheten, kommer den att göra 2 gånger 10, 10 delat med 2, och sedan 733 00:38:29,745 --> 00:38:32,720 det ska göra 20 plus 5 plus 2. 734 00:38:32,720 --> 00:38:37,020 Så det är som förväntat, och du kan använda parenteser för att gruppera uttryck. 735 00:38:37,020 --> 00:38:41,063 Du kan inte använda hakparenteser till grupputtryck. 736 00:38:41,063 --> 00:38:41,544 Yeah? 737 00:38:41,544 --> 00:38:43,468 >> TALARE 5: Kan du faktiskt bara gå tillbaka en sekund? 738 00:38:43,468 --> 00:38:47,316 Kan du kasta en int till en sträng? 739 00:38:47,316 --> 00:38:53,330 >> ROB: Så i C, du kan kasta vad som helst du vill vad du vill. 740 00:38:53,330 --> 00:38:55,600 Det betyder inte att det är en bra sak att göra. 741 00:38:55,600 --> 00:38:59,760 Så när du kastar en int till en sträng, innebär att - 742 00:38:59,760 --> 00:39:03,240 och vi kommer att få in i denna mycket mer grundligt - 743 00:39:03,240 --> 00:39:03,720 >> JOSEPH: Långt senare. 744 00:39:03,720 --> 00:39:06,840 >> ROB: Jag ville inte säga mycket senare, så jag försökte ändra min mening. 745 00:39:06,840 --> 00:39:13,370 Vi kommer att komma in i det mycket mer noggrant senare var egentligen när du har ett 746 00:39:13,370 --> 00:39:14,810 strängvariabel - 747 00:39:14,810 --> 00:39:17,160 så en sträng kan vara godtyckligt länge, eller hur? 748 00:39:17,160 --> 00:39:21,850 Och vi har sagt att en int är fyra byte och långa långa är åtta 749 00:39:21,850 --> 00:39:23,620 byte och en flottör är fyra byte. 750 00:39:23,620 --> 00:39:29,520 Så en sträng, precis som en int, har endast ett visst antal bitgrupper till den. 751 00:39:29,520 --> 00:39:31,800 Och det kommer att bli fyra byte. 752 00:39:31,800 --> 00:39:34,750 >> Men en sträng kan vara ganska godtyckligt länge, eller hur? 753 00:39:34,750 --> 00:39:40,190 Så hallå världen redan, om det är 10 tecken eller vad som helst, det är redan 754 00:39:40,190 --> 00:39:42,670 kommer att vara över 4 byte Jag kan passa in i en sträng. 755 00:39:42,670 --> 00:39:51,140 Och så hur strängar fungerar egentligen är att de är där i minnet att strängen 756 00:39:51,140 --> 00:39:52,380 hålls. 757 00:39:52,380 --> 00:39:57,290 >> Och så här, när jag säger sträng x lika hallå världen, insidan av x är 758 00:39:57,290 --> 00:40:01,840 säger bara, åh, hej världen lagras på denna särskilda plats i minnet. 759 00:40:01,840 --> 00:40:07,060 Så om vi försöker att kasta ett heltal till en sträng, då vi försöker tolka 760 00:40:07,060 --> 00:40:10,500 vissa slumpmässiga delen av minnet som en sträng. 761 00:40:10,500 --> 00:40:14,465 Och som nästan alltid bryter saker. 762 00:40:14,465 --> 00:40:17,040 >> JOSEPH: Men om det förvirrar dig, kommer vi att täcka det 763 00:40:17,040 --> 00:40:17,550 mer ingående senare. 764 00:40:17,550 --> 00:40:17,850 >> ROB: Ja. 765 00:40:17,850 --> 00:40:20,540 Det är dit du ska att få in tips. 766 00:40:20,540 --> 00:40:25,485 Och det är en viktig bit av två veckor i denna kurs. 767 00:40:25,485 --> 00:40:28,275 >> HÖGTALARE 6: Fungerar det som objekt på andra språk eller inte egentligen? 768 00:40:28,275 --> 00:40:34,050 >> ROB: Så med andra språk, föremål skulle vara representerade med hjälp av pekare. 769 00:40:34,050 --> 00:40:37,070 770 00:40:37,070 --> 00:40:38,793 Det är inte samma sak, dock. 771 00:40:38,793 --> 00:40:42,110 772 00:40:42,110 --> 00:40:42,910 Några tankar? 773 00:40:42,910 --> 00:40:43,760 >> JOSEPH: Nej. 774 00:40:43,760 --> 00:40:44,185 Inga tankar. 775 00:40:44,185 --> 00:40:44,980 >> ROB: OK. 776 00:40:44,980 --> 00:40:46,994 >> JOSEPH: Next. 777 00:40:46,994 --> 00:40:48,255 >> ROB: Bara att gå med det. 778 00:40:48,255 --> 00:40:48,670 Okej. 779 00:40:48,670 --> 00:40:51,120 Så modulo. 780 00:40:51,120 --> 00:40:53,900 Precis som vi har plus, minus, dividera och multiplicera. 781 00:40:53,900 --> 00:40:56,720 Så modulo är en du kan inte har sett förut. 782 00:40:56,720 --> 00:40:59,540 Och det bara säger, ge mig återstoden av. 783 00:40:59,540 --> 00:41:02,850 Så 55% 10. 784 00:41:02,850 --> 00:41:06,840 Resten av att göra 55 delat med 10 skulle vara 5. 785 00:41:06,840 --> 00:41:09,630 Så 55% 10 är 5. 786 00:41:09,630 --> 00:41:12,260 Och 3% 5 skulle vara 3. 787 00:41:12,260 --> 00:41:14,180 8% 8 kommer att vara 0. 788 00:41:14,180 --> 00:41:15,903 16% 15 blir 1. 789 00:41:15,903 --> 00:41:20,670 >> JOSEPH: En sak att notera med detta, också, är det kanske inte fungerar som förväntat 790 00:41:20,670 --> 00:41:22,700 om du använder ett negativt tal. 791 00:41:22,700 --> 00:41:26,215 Så negativ 5% 4, en del människor kanske tror det är - 792 00:41:26,215 --> 00:41:28,890 793 00:41:28,890 --> 00:41:33,808 Vad skulle du tänka negativt 5% 4 skulle vara? 794 00:41:33,808 --> 00:41:34,792 >> SPEAKER 5: One. 795 00:41:34,792 --> 00:41:37,920 >> JOSEPH: Så en del människor säger en, en del människor säger negativt. 796 00:41:37,920 --> 00:41:38,450 Men vad - 797 00:41:38,450 --> 00:41:40,820 >> ROB: Jag skulle inte ens ha sade en av dem. 798 00:41:40,820 --> 00:41:42,370 >> JOSEPH: Två, sorry. 799 00:41:42,370 --> 00:41:43,240 Vissa människor säger - 800 00:41:43,240 --> 00:41:43,450 >> ROB: Tre. 801 00:41:43,450 --> 00:41:43,800 >> JOSEPH: Tre? 802 00:41:43,800 --> 00:41:44,890 >> ROB: Negativ - 803 00:41:44,890 --> 00:41:45,950 vad var det - negativ fem - 804 00:41:45,950 --> 00:41:47,100 >> JOSEPH: Tre, tre, tre. 805 00:41:47,100 --> 00:41:48,450 Ursäkta. 806 00:41:48,450 --> 00:41:51,910 Eftersom modulo, generellt, när du har sett det på andra ställen, oftast innebär det 807 00:41:51,910 --> 00:41:54,000 returnera ett positivt tal, eller hur? 808 00:41:54,000 --> 00:42:01,160 >> ROB: Så när vi säger i matematik,% 10-talet, de tenderar att vilja ge dig - 809 00:42:01,160 --> 00:42:05,980 om vi mod med 10, då räknar vi med att få ett nummer mellan 0 och 9. 810 00:42:05,980 --> 00:42:09,860 Här inne är det inte så att du kommer att få negativa tal returneras. 811 00:42:09,860 --> 00:42:15,898 >> JOSEPH: Så negativ 5% 4 skulle vara negativt 1. 812 00:42:15,898 --> 00:42:19,325 >> ROB: Men det är sällsynt att du är mod-ning negativa tal till att börja med. 813 00:42:19,325 --> 00:42:25,490 814 00:42:25,490 --> 00:42:25,970 Hoppa över detta. 815 00:42:25,970 --> 00:42:27,314 >> JOSEPH: Ja. 816 00:42:27,314 --> 00:42:29,420 >> ROB: Meh. 817 00:42:29,420 --> 00:42:29,990 OK. 818 00:42:29,990 --> 00:42:36,400 Så en sista sak att påpeka om flyter är att det är ett farligt beteende, 819 00:42:36,400 --> 00:42:39,850 men flyter är inte en exakt representation. 820 00:42:39,850 --> 00:42:46,190 Så gå tillbaka till byte igen, kom ihåg att en int är alltid fyra byte och en 821 00:42:46,190 --> 00:42:47,830 float är alltid fyra bitgrupper. 822 00:42:47,830 --> 00:42:51,340 Så Lucas exempel är ganska bra. 823 00:42:51,340 --> 00:42:55,730 >> Så tänk på 1 dividerat med 3. 824 00:42:55,730 --> 00:42:57,800 Så 0,3333333. 825 00:42:57,800 --> 00:43:03,540 Om jag bara har 32 bitar, hur kan Jag lagrar 0,33333 exakt? 826 00:43:03,540 --> 00:43:07,250 Och kanske, av någon anledning, säger du, okej, ja, låt oss bara säga 827 00:43:07,250 --> 00:43:13,210 att denna speciella 1011001, låt oss bara säga att skulle vara 0,333333. 828 00:43:13,210 --> 00:43:16,960 Tja, du har bara ett begränsat antal dessa bitar, så det är omöjligt att 829 00:43:16,960 --> 00:43:22,550 representera varenda flyttals värde ges bara 32 bitar. 830 00:43:22,550 --> 00:43:25,580 >> Tja, det är omöjligt att företräda någon flyttal givet oändligt - 831 00:43:25,580 --> 00:43:28,480 väl, gett någon ändligt antal bitar. 832 00:43:28,480 --> 00:43:38,265 Så frågan här är, väl, när vi använde för att skriva ut till två decimaler, 833 00:43:38,265 --> 00:43:42,000 Vi fick rätt få svaret 0,10. 834 00:43:42,000 --> 00:43:47,510 Men under huven, det är verkligen lagras så nära som möjligt för att 835 00:43:47,510 --> 00:43:51,790 0.10 eftersom dessa bitar kan representera. 836 00:43:51,790 --> 00:43:53,200 Är det på nästa bild? 837 00:43:53,200 --> 00:43:53,830 Eller är det inte? 838 00:43:53,830 --> 00:43:54,660 >> JOSEPH: Ja, det är det. 839 00:43:54,660 --> 00:43:55,750 >> ROB: Blegh, blegh. 840 00:43:55,750 --> 00:43:57,760 >> JOSEPH: Ja, kan du bara Dra noterna upp lite. 841 00:43:57,760 --> 00:43:59,700 >> ROB: Jag kommer bara att zooma i den sista på det. 842 00:43:59,700 --> 00:44:00,950 Jösses, det är [OHÖRBAR]. 843 00:44:00,950 --> 00:44:06,089 844 00:44:06,089 --> 00:44:08,300 Så det numret. 845 00:44:08,300 --> 00:44:12,300 Det är det som skrivs ut om vi kör det programmet. 846 00:44:12,300 --> 00:44:20,340 Och märker att det är egentligen inte en stor sak om vi bara bry sig om som 847 00:44:20,340 --> 00:44:21,920 2-3 decimaler. 848 00:44:21,920 --> 00:44:26,700 Som vi bara ursprungligen ut 0,10, och det är därför vi såg inget fel. 849 00:44:26,700 --> 00:44:31,380 Men när vi börjar komma in i exakt, exakt antal att det är 850 00:44:31,380 --> 00:44:35,660 representerar, ser vi att det inte kan exakt representerar 0,1. 851 00:44:35,660 --> 00:44:40,900 >> Och en del av problemet här är, okej, det är bra, men, ja, 852 00:44:40,900 --> 00:44:46,120 första, vad händer om vi försökte göra, Svaret är lika är lika med 0,1? 853 00:44:46,120 --> 00:44:49,200 Kommer det att returnera sant eller falskt? 854 00:44:49,200 --> 00:44:51,850 Och så det är svårt att säga. 855 00:44:51,850 --> 00:44:53,330 Jag tror att det faktiskt kan returnera sant. 856 00:44:53,330 --> 00:44:55,265 Kommer det först - 857 00:44:55,265 --> 00:44:56,180 Jag vet inte. 858 00:44:56,180 --> 00:45:00,090 Svaret är när du börjar att göra med flyttalsvärden, du ganska 859 00:45:00,090 --> 00:45:05,150 mycket bör inte använda jämlikhet på grund av denna bristande precision. 860 00:45:05,150 --> 00:45:09,470 >> Och för allt du vet, det är den hundrade decimal att 861 00:45:09,470 --> 00:45:13,670 flyttal kunde inte att korrekt hantera. 862 00:45:13,670 --> 00:45:18,180 Och så jämställdheten kommer bara att misslyckas med även om antalet - om du hade varit 863 00:45:18,180 --> 00:45:24,450 använda exakta siffror, siffrorna bör har exakt samma. 864 00:45:24,450 --> 00:45:27,790 Det är under loppet av liknande 50 beräkningar med dessa flytande 865 00:45:27,790 --> 00:45:30,270 punkt värden, kan felet bygga upp och upp och upp, och 866 00:45:30,270 --> 00:45:31,125 det blir bara fel. 867 00:45:31,125 --> 00:45:33,870 >> JOSEPH: Och det har varit riktigt kända exempel på att detta händer. 868 00:45:33,870 --> 00:45:37,190 Liksom NASA ingenjörer har fått detta fel, orsakar raketer att explodera in 869 00:45:37,190 --> 00:45:38,665 luften efter att de har lanserats. 870 00:45:38,665 --> 00:45:41,490 Och massor av frågor som denna. 871 00:45:41,490 --> 00:45:41,956 Så ja. 872 00:45:41,956 --> 00:45:45,218 >> HÖGTALARE 6: När du säger 0.3 f, betyder trunkera resten? 873 00:45:45,218 --> 00:45:46,468 Eller går det uppåt eller nedåt? 874 00:45:46,468 --> 00:45:48,800 875 00:45:48,800 --> 00:45:50,200 >> ROB: Kommer printf runt det? 876 00:45:50,200 --> 00:45:52,180 >> JOSEPH: Jag tror printf klipper. 877 00:45:52,180 --> 00:45:52,640 >> ROB: OK. 878 00:45:52,640 --> 00:45:59,890 Så kan vi på samma sätt gå i motsatt riktningen av denna, där, i detta fall, 879 00:45:59,890 --> 00:46:03,320 närmast det skulle kunna representera 0.1 var med detta nummer. 880 00:46:03,320 --> 00:46:06,820 Närmast det skulle kunna representerar 0,2 är i den motsatta 881 00:46:06,820 --> 00:46:11,420 riktning, 0,199999996356 eller något. 882 00:46:11,420 --> 00:46:17,480 Så om vi gick i den riktningen av saker, då printf 0.3 f skulle återvända 883 00:46:17,480 --> 00:46:20,866 1.99 istället för 2.00. 884 00:46:20,866 --> 00:46:22,960 >> JOSEPH: Och jag är inte helt säker på det. 885 00:46:22,960 --> 00:46:25,430 Du kanske vill skriva en liten, liten program för att bara kontrollera att. 886 00:46:25,430 --> 00:46:29,370 >> ROB: Men, vad vi är säkra på är att om du försökte kasta den till en 887 00:46:29,370 --> 00:46:33,660 int, och gjutning till en int kommer att bringa den att trunkera decimal, om 888 00:46:33,660 --> 00:46:38,140 du försöker kasta 1.9999999 till en int, får du 1. 889 00:46:38,140 --> 00:46:41,440 Och så bör du i allmänhet använda rund funktion i mattebiblioteket. 890 00:46:41,440 --> 00:46:44,190 891 00:46:44,190 --> 00:46:45,440 Frågor? 892 00:46:45,440 --> 00:46:47,660 893 00:46:47,660 --> 00:46:48,982 OK. 894 00:46:48,982 --> 00:46:54,000 >> JOSEPH: Så går vidare till villkor och booleska uttryck. 895 00:46:54,000 --> 00:46:58,120 Så du har sett dessa innan. 896 00:46:58,120 --> 00:47:07,420 Och egentligen vill jag se till att min Datorn är i rätt format här. 897 00:47:07,420 --> 00:47:08,670 Space. 898 00:47:08,670 --> 00:47:10,630 899 00:47:10,630 --> 00:47:13,870 Tyvärr, vi kommer att ha att göra en lite med cutoff vid kanterna. 900 00:47:13,870 --> 00:47:15,830 >> Men ja, har ni sett detta tidigare i Scratch. 901 00:47:15,830 --> 00:47:19,930 Så denna rätt här är ett uttryck som används i 902 00:47:19,930 --> 00:47:21,250 en villkorssats. 903 00:47:21,250 --> 00:47:23,930 Så svara större än noll kommer berätta sant eller falskt. 904 00:47:23,930 --> 00:47:26,530 Och dessa är verkligen viktigt, eftersom de tillåter oss att införa 905 00:47:26,530 --> 00:47:28,670 logik i vår kod. 906 00:47:28,670 --> 00:47:32,820 >> Så till exempel, är detta ett program skriven i Scratch som ber användaren 907 00:47:32,820 --> 00:47:36,980 för ett heltal och berättar för dem om det heltal som de gav dig var en 908 00:47:36,980 --> 00:47:38,690 positivt eller negativt tal. 909 00:47:38,690 --> 00:47:42,980 Och omvandlingen över här för att se är du först skriva ut ett uttalande, 910 00:47:42,980 --> 00:47:43,870 ge mig ett heltal. 911 00:47:43,870 --> 00:47:45,980 Och sedan ber du dem för ett heltal. 912 00:47:45,980 --> 00:47:49,870 >> Och sedan använda villkorslogik över här för att kontrollera om det numret 913 00:47:49,870 --> 00:47:52,030 var faktiskt större än noll eller inte. 914 00:47:52,030 --> 00:47:58,960 Så här har vi ett booleskt uttryck insidan av en villkorlig Om uttalande. 915 00:47:58,960 --> 00:48:00,660 Finns det några frågor? 916 00:48:00,660 --> 00:48:03,030 Finns det några frågor om det? 917 00:48:03,030 --> 00:48:03,950 OK. 918 00:48:03,950 --> 00:48:06,140 >> Så det finns mer än bara större än, naturligtvis. 919 00:48:06,140 --> 00:48:10,385 Du kan bygga booleska uttryck genom att använda de flesta av de möjliga saker som du 920 00:48:10,385 --> 00:48:11,150 skulle tänka på i matematik. 921 00:48:11,150 --> 00:48:12,370 Så större än. 922 00:48:12,370 --> 00:48:13,740 Det borde vara en mindre än. 923 00:48:13,740 --> 00:48:14,990 Ursäkta. 924 00:48:14,990 --> 00:48:18,520 925 00:48:18,520 --> 00:48:19,760 Och avståndet. 926 00:48:19,760 --> 00:48:22,971 >> ROB: Gud förbjude att du lämnar den. 927 00:48:22,971 --> 00:48:23,620 >> JOSEPH: Okej. 928 00:48:23,620 --> 00:48:25,950 Så större än, mindre än, större än, eller lika med, mindre 929 00:48:25,950 --> 00:48:27,070 än, eller lika med. 930 00:48:27,070 --> 00:48:31,980 Vi använder dubbla jämlikar för att kontrollera om jämlikhet, eftersom enstaka lika medel 931 00:48:31,980 --> 00:48:32,810 uppdrag, eller hur? 932 00:48:32,810 --> 00:48:33,140 Ja. 933 00:48:33,140 --> 00:48:37,130 Och då kan vi också inte lika med använder utropstecken, lika. 934 00:48:37,130 --> 00:48:41,530 >> Och detta utropstecken kan också utvidgas så att om du vill 935 00:48:41,530 --> 00:48:44,050 att invertera någon form av Boolean uttryck, kan du göra det. 936 00:48:44,050 --> 00:48:48,530 Så detta kommer att utvärderas till sant endast om svaret är mindre 937 00:48:48,530 --> 00:48:51,240 än eller lika med noll. 938 00:48:51,240 --> 00:48:53,950 Har du frågor om det? 939 00:48:53,950 --> 00:48:55,180 OK. 940 00:48:55,180 --> 00:48:58,840 >> Så kan du också kombinera dessa uttryck som använder logiska och och 941 00:48:58,840 --> 00:48:59,790 logisk Or. 942 00:48:59,790 --> 00:49:03,530 Så det här är bara Och symbolen, som bör vara Skift, 7. 943 00:49:03,530 --> 00:49:07,720 Och detta är röret symbol, som är inte en bokstav L. Det är en 944 00:49:07,720 --> 00:49:09,440 det är precis ovanför Enter. 945 00:49:09,440 --> 00:49:12,870 Så du använda två av dessa för att symbolisera logisk Och den logiska Or. 946 00:49:12,870 --> 00:49:18,180 >> Så det här kommer bara returnera true om svar är en, två, tre eller fyra. 947 00:49:18,180 --> 00:49:23,030 Och det kommer bara att returnera sant om svar är utöver det på vardera sidan. 948 00:49:23,030 --> 00:49:26,190 Så det är inte en, två, tre, eller fyra. 949 00:49:26,190 --> 00:49:28,385 Och det sätt som du skulle använda att i ett uttryck - 950 00:49:28,385 --> 00:49:29,990 >> ROB: Eller en nolla eller en fem. 951 00:49:29,990 --> 00:49:32,200 >> JOSEPH: Noll eller en fem. 952 00:49:32,200 --> 00:49:32,380 Ursäkta. 953 00:49:32,380 --> 00:49:33,320 Ja, ja, ja. 954 00:49:33,320 --> 00:49:34,180 OK. 955 00:49:34,180 --> 00:49:38,980 Och här borta nu, på samma sätt som du skulle använda det uttrycket, en mindre 956 00:49:38,980 --> 00:49:42,000 uttryckssidan av en Om villkor uttalande, skulle du även använda den för 957 00:49:42,000 --> 00:49:47,800 samma sätt genom att bara sätta den inne i parenteserna if. 958 00:49:47,800 --> 00:49:54,020 Så här printf kommer endast avfyras om svar är en, två, tre eller fyra. 959 00:49:54,020 --> 00:49:56,002 Har du frågor om att kombinera uttryck? 960 00:49:56,002 --> 00:50:00,450 961 00:50:00,450 --> 00:50:04,240 >> Så det finns en annan villkorlig konstruera vi kallar en If / Else. 962 00:50:04,240 --> 00:50:08,120 Så i princip, innebär det nu, OK, om något jag ville kolla var inte 963 00:50:08,120 --> 00:50:11,600 sant, sedan gå till Else och utföra det andra åtgärder. 964 00:50:11,600 --> 00:50:15,570 Så i detta fall, frågade jag användaren för ett heltal. 965 00:50:15,570 --> 00:50:17,790 Ger heltal större än noll? 966 00:50:17,790 --> 00:50:18,310 Ja? 967 00:50:18,310 --> 00:50:20,100 Nåväl, då de plockade ett positivt tal. 968 00:50:20,100 --> 00:50:22,320 Om inte, så måste den ha varit negativ eller en nolla. 969 00:50:22,320 --> 00:50:27,530 Så du valde ett negativt tal eller en nolla i det här fallet. 970 00:50:27,530 --> 00:50:29,235 Ja. 971 00:50:29,235 --> 00:50:30,485 Eller en nolla. 972 00:50:30,485 --> 00:50:36,320 973 00:50:36,320 --> 00:50:39,300 >> Och sedan har vi även om / Else, Om och annat. 974 00:50:39,300 --> 00:50:45,640 Så här låter oss utföra en sekvens av saker bara om de första misslyckas. 975 00:50:45,640 --> 00:50:49,540 Så i det här fallet, nu vi gör det sista du väljer noll. 976 00:50:49,540 --> 00:50:53,080 Så om de varken plockat en positiv eller ett negativt tal, då de måste 977 00:50:53,080 --> 00:50:53,640 har plockat noll. 978 00:50:53,640 --> 00:50:56,720 Så det bara går ner kedja så här. 979 00:50:56,720 --> 00:50:59,960 >> Så ett exempel på hur en Om skiljer sig från - 980 00:50:59,960 --> 00:51:02,590 en Om / Else skiljer sig från bara en sekvens av Ifs. 981 00:51:02,590 --> 00:51:07,680 Och detta är en vanlig fråga som folk frågar är, ja, om du får som en 982 00:51:07,680 --> 00:51:11,265 95 i CS50, vad kommer detta program berätta? 983 00:51:11,265 --> 00:51:12,600 >> SPEAKER 5: Du fick ett A. 984 00:51:12,600 --> 00:51:13,490 >> JOSEPH: Ja. 985 00:51:13,490 --> 00:51:14,960 Du fick varenda en av dem rätt. 986 00:51:14,960 --> 00:51:17,130 Du fick ett A, du fick ett B, du fick ett C och ett D, eller hur? 987 00:51:17,130 --> 00:51:19,770 Så alla dessa blir utvärderade i ordning. 988 00:51:19,770 --> 00:51:23,570 Så medan en 95 är större än 90, är ​​det också större än 80, är ​​det också 989 00:51:23,570 --> 00:51:25,790 större än 70, och det är också större än 60. 990 00:51:25,790 --> 00:51:27,620 Så du har alla dessa kvaliteter. 991 00:51:27,620 --> 00:51:31,630 Och jag antar att du skulle bara är intresserad av A. 992 00:51:31,630 --> 00:51:34,060 >> Det sättet att fixa det är att ersätta de med Else / Ifs. 993 00:51:34,060 --> 00:51:37,540 Så i det här fallet ser det att 95 är större än 90, och då det gör 994 00:51:37,540 --> 00:51:38,885 inte bedöma resten av uttalanden. 995 00:51:38,885 --> 00:51:41,900 996 00:51:41,900 --> 00:51:43,150 Eventuella frågor om det? 997 00:51:43,150 --> 00:51:48,580 998 00:51:48,580 --> 00:51:52,470 >> Så det finns en annan villkorlig sorts struktur som vi har här, som vi 999 00:51:52,470 --> 00:51:53,390 kallar en switch-sats. 1000 00:51:53,390 --> 00:51:57,390 Så detta gör att du i princip kontrollera vad värdet av ett nummer som du lägger 1001 00:51:57,390 --> 00:51:59,000 i switch-satsen är. 1002 00:51:59,000 --> 00:52:03,200 Så i det här fallet, vi byter på n, och vi säger, åh, om n är 1003 00:52:03,200 --> 00:52:04,710 en, sedan skriva ut det uttalandet. 1004 00:52:04,710 --> 00:52:07,910 Och sedan bryta, vilket innebär utgång ur switch-satsen. 1005 00:52:07,910 --> 00:52:12,670 >> Om det inte var en, då, ja, precis småningom kontrollera alla dessa fall. 1006 00:52:12,670 --> 00:52:16,280 Och så kollar om det är en eller två eller tre, och den skriver därefter. 1007 00:52:16,280 --> 00:52:19,780 Och vad denna standard nyckelordet här nere medel är om de inte in någon 1008 00:52:19,780 --> 00:52:21,690 av dem, då säger ogiltig. 1009 00:52:21,690 --> 00:52:25,910 Så låt oss säga att jag ber om n och användaren ger mig fyra. 1010 00:52:25,910 --> 00:52:29,470 Tja, matchar det inget av dessa fall, så det kommer att skriva ut vad som finns i 1011 00:52:29,470 --> 00:52:30,540 Standard avsnitt. 1012 00:52:30,540 --> 00:52:31,180 Ja, fråga? 1013 00:52:31,180 --> 00:52:32,614 >> TALARE 5: Kan du använda Boolean uttryck i stället för 1014 00:52:32,614 --> 00:52:33,570 en, två, eller tre? 1015 00:52:33,570 --> 00:52:36,940 >> JOSEPH: Så frågan är kan du använda Booleska uttryck i stället för en, 1016 00:52:36,940 --> 00:52:37,940 två och tre? 1017 00:52:37,940 --> 00:52:40,520 Och i C, tror jag att du kan inte göra det. 1018 00:52:40,520 --> 00:52:44,320 Men på andra språk, som du kanske möter i slutet av 1019 00:52:44,320 --> 00:52:46,460 termin som JavaScript, du kan. 1020 00:52:46,460 --> 00:52:50,050 Tja, skulle du behöva för att beräkna först detta värde och sedan använda den i 1021 00:52:50,050 --> 00:52:50,650 byta uttalande. 1022 00:52:50,650 --> 00:52:50,930 Yeah? 1023 00:52:50,930 --> 00:52:54,760 >> ROB: Så en del av nyttan med omkopplaren uttalanden är att tänka på om du gjorde detta 1024 00:52:54,760 --> 00:52:58,680 som en Om / Else, så som om n är lika med lika med ett eller vad. 1025 00:52:58,680 --> 00:53:00,300 Else / Om n är lika med är lika med två, vad som helst. 1026 00:53:00,300 --> 00:53:01,960 Else / Om n är lika med är lika med tre. 1027 00:53:01,960 --> 00:53:05,930 Så hur programmet skulle köra är det skulle sekventiellt gå den lista 1028 00:53:05,930 --> 00:53:07,500 och kolla, är n en? 1029 00:53:07,500 --> 00:53:08,040 Nope. 1030 00:53:08,040 --> 00:53:09,070 Är n två? 1031 00:53:09,070 --> 00:53:09,490 Nope. 1032 00:53:09,490 --> 00:53:10,940 Är n tre? 1033 00:53:10,940 --> 00:53:11,710 Yeah. 1034 00:53:11,710 --> 00:53:12,610 Gör det här. 1035 00:53:12,610 --> 00:53:15,270 >> Medan med switch uttalanden, är det faktiskt kunna sammanställa det att vara 1036 00:53:15,270 --> 00:53:16,360 riktigt snabbt. 1037 00:53:16,360 --> 00:53:19,550 Och så fort det står switch, det säger, okej, n är två, jag är 1038 00:53:19,550 --> 00:53:23,060 omedelbart kommer att hoppa dit Jag ska börja köra. 1039 00:53:23,060 --> 00:53:26,080 Jag tänker inte först kontrollera, är n en, är n två? 1040 00:53:26,080 --> 00:53:28,860 Det kan omedelbart börja göra vad den ska göra. 1041 00:53:28,860 --> 00:53:33,830 >> Och på grund av detta, kan det inte ta booleska villkor. 1042 00:53:33,830 --> 00:53:36,480 Annars skulle det ha att göra med sekventiell, liksom, okej, är n 1043 00:53:36,480 --> 00:53:37,820 större än noll? 1044 00:53:37,820 --> 00:53:41,140 Else är n större än 10 eller vad som helst. 1045 00:53:41,140 --> 00:53:44,780 >> JOSEPH: I det här fallet, om du använt Om / Else, Ifs, då växeln skulle 1046 00:53:44,780 --> 00:53:47,792 kör ungefär tre gånger snabbare än om / Else If. 1047 00:53:47,792 --> 00:53:53,060 1048 00:53:53,060 --> 00:53:56,040 Vi kan organisera strömbrytare så så att vi inte bryter 1049 00:53:56,040 --> 00:53:57,520 efter varje fall. 1050 00:53:57,520 --> 00:54:00,960 Så i detta fall, jag uppdelning av siffror som vi väljer i en och 1051 00:54:00,960 --> 00:54:04,250 två är inte höga siffror och tre är en hög siffra. 1052 00:54:04,250 --> 00:54:08,290 >> Så i det här fallet, är om n en eller två, det kommer att träffa målet och så kommer det 1053 00:54:08,290 --> 00:54:10,640 falla igenom, eftersom det finns ingen paus. 1054 00:54:10,640 --> 00:54:11,610 Och det kommer att hamna här. 1055 00:54:11,610 --> 00:54:15,360 Så om vi väljer en, kommer den att göra det printf och sedan bryta så att ingen av 1056 00:54:15,360 --> 00:54:17,610 detta utförs. 1057 00:54:17,610 --> 00:54:21,870 Och naturligtvis, om de kommer in i tre eller något annat, så kommer det att hoppa 1058 00:54:21,870 --> 00:54:25,320 dem och inte gå dit, och det kommer att utföra i stället 1059 00:54:25,320 --> 00:54:27,490 motsvarande linje. 1060 00:54:27,490 --> 00:54:29,390 Finns det några frågor om det? 1061 00:54:29,390 --> 00:54:29,780 Ja? 1062 00:54:29,780 --> 00:54:32,642 >> SPEAKER 4: Skulle du får ett felmeddelande om du hade en paus efter fall en men det 1063 00:54:32,642 --> 00:54:34,550 hade inte något för den att göra? 1064 00:54:34,550 --> 00:54:37,820 >> JOSEPH: Så frågan är skulle du få ett fel om du har en paus efter 1065 00:54:37,820 --> 00:54:39,730 skift en men det finns inget att göra? 1066 00:54:39,730 --> 00:54:41,520 Och svaret är nej. 1067 00:54:41,520 --> 00:54:43,172 Du kommer inte att faktiskt få ett felmeddelande. 1068 00:54:43,172 --> 00:54:44,590 Ja, mm hmm. 1069 00:54:44,590 --> 00:54:54,540 >> Så som en slags liten förändring här, Jag ska sätta en printf här. 1070 00:54:54,540 --> 00:54:55,790 Whoops. 1071 00:54:55,790 --> 00:55:00,994 1072 00:55:00,994 --> 00:55:04,880 Så vad skulle det ut om Jag satte en i som insats? 1073 00:55:04,880 --> 00:55:07,530 1074 00:55:07,530 --> 00:55:07,770 Yeah. 1075 00:55:07,770 --> 00:55:10,360 Det skulle säga dig att det inte tog ett stort antal gånger, eller hur? 1076 00:55:10,360 --> 00:55:13,500 Eftersom det skulle slå det första fallet, det skulle inte gå sönder, och det skulle falla 1077 00:55:13,500 --> 00:55:15,730 genom att det andra fallet. 1078 00:55:15,730 --> 00:55:16,950 Eventuella frågor om det? 1079 00:55:16,950 --> 00:55:18,280 >> ROB: Hade du en annan fråga? 1080 00:55:18,280 --> 00:55:20,840 >> JOSEPH: OK, svalna. 1081 00:55:20,840 --> 00:55:22,400 Okej. 1082 00:55:22,400 --> 00:55:25,780 Så finns det något annat vi kallar en ternära operatör som är i grunden en 1083 00:55:25,780 --> 00:55:29,010 alternativa syntax att göra Om och då annars. 1084 00:55:29,010 --> 00:55:30,470 Och det kan du göra allt på en rad. 1085 00:55:30,470 --> 00:55:34,110 Så i detta program, Jag ber användaren för n. 1086 00:55:34,110 --> 00:55:37,190 Och om n är större än 100, säger jag dem att de valde ett stort antal. 1087 00:55:37,190 --> 00:55:39,560 Annat jag berätta för dem att de plockade en låg siffra. 1088 00:55:39,560 --> 00:55:43,030 >> Så vi kan använda det här riktigt långa syntax, sträng, S, och sedan kontrollera om n är 1089 00:55:43,030 --> 00:55:45,260 större än 100 och tilldela det därefter. 1090 00:55:45,260 --> 00:55:49,450 Men vi kan göra så mycket mer kortfattade med hjälp av denna ternära operatören syntax 1091 00:55:49,450 --> 00:55:52,090 vilket innebär en fråga varumärke och ett kolon. 1092 00:55:52,090 --> 00:55:55,070 Så frågetecknet är i huvudsak att ställa en fråga, eller hur? 1093 00:55:55,070 --> 00:55:56,625 >> ROB: kanske zooma in på det. 1094 00:55:56,625 --> 00:55:57,372 >> JOSEPH: Ja. 1095 00:55:57,372 --> 00:56:00,210 Bra punkt. 1096 00:56:00,210 --> 00:56:02,550 Så detta är den ternära operatören. 1097 00:56:02,550 --> 00:56:06,100 Jag först ställa frågan, är n större än 100? 1098 00:56:06,100 --> 00:56:09,770 Om det är, då kör jag den första del före tjocktarmen. 1099 00:56:09,770 --> 00:56:13,360 Om det inte är, då kör jag den andra delen efter kolon. 1100 00:56:13,360 --> 00:56:16,640 Så om n är större än 100, då plockar hög och sätter 1101 00:56:16,640 --> 00:56:18,360 som i strängen s. 1102 00:56:18,360 --> 00:56:22,170 Om n är mindre än 100, plockar låg och sedan sätter det i strängen s.. 1103 00:56:22,170 --> 00:56:30,186 Så det kommer att kondensera denna stor bit ner i just det en rad. 1104 00:56:30,186 --> 00:56:32,010 >> TALARE 5: Är det populärt? 1105 00:56:32,010 --> 00:56:36,070 >> JOSEPH: Ja, det är ganska populärt för saker där i huvudsak du vill 1106 00:56:36,070 --> 00:56:38,700 gör ett uppdrag baserat på någon form av tillstånd. 1107 00:56:38,700 --> 00:56:43,110 Och i det här fallet, vi försökte att tilldela ett värde till sträng s. 1108 00:56:43,110 --> 00:56:44,840 Det är inte så - 1109 00:56:44,840 --> 00:56:47,670 Jag antar att jag inte riktigt föredrar den i övriga fall. 1110 00:56:47,670 --> 00:56:49,390 Men det är särskilt användbart för detta uppdrag. 1111 00:56:49,390 --> 00:56:54,490 >> ROB: Det är ett ganska vanligt mönster där du har någon variabel som 1112 00:56:54,490 --> 00:56:58,200 du ska säga, om något, ställa denna variabel till en värde, annat, ange 1113 00:56:58,200 --> 00:56:59,810 denna variabel till ett annat värde. 1114 00:56:59,810 --> 00:57:03,360 Och det är det scenario där använda en ternär. 1115 00:57:03,360 --> 00:57:05,220 >> JOSEPH: Och du sparar massor av linjer, eller hur? 1116 00:57:05,220 --> 00:57:08,090 Och det bara gör din kod utan tvekan lite mer lättläst. 1117 00:57:08,090 --> 00:57:08,635 Ja, fråga? 1118 00:57:08,635 --> 00:57:12,384 >> HÖGTALARE 6: För en trefaldigt, kan du gå, string s jämlikar s, frågetecken? 1119 00:57:12,384 --> 00:57:15,280 Och då kan du ha, säg, fem olika alternativ. 1120 00:57:15,280 --> 00:57:18,310 Och beroende på vad det antal n var, skulle du välja en av dem? 1121 00:57:18,310 --> 00:57:22,210 >> JOSEPH: Så frågan är, är det en sorts syntax där du kan göra sträng 1122 00:57:22,210 --> 00:57:25,910 s är lika med n, och sedan har mer än två alternativ efter att frågetecken? 1123 00:57:25,910 --> 00:57:29,740 Och ett enkelt svar är nej, det finns inte verkligen ett bra sätt att göra det, om inte 1124 00:57:29,740 --> 00:57:33,850 du vill bo flera ternära operatörer inuti varandra. 1125 00:57:33,850 --> 00:57:38,050 >> Du kan göra som n större än 100, frågetecken, och sedan en annan 1126 00:57:38,050 --> 00:57:41,850 ternära operatör, n är större än 50, frågetecken, och bo på det sättet. 1127 00:57:41,850 --> 00:57:45,240 Men i detta scenario, är din kod få slags oläsbart och rörigt, 1128 00:57:45,240 --> 00:57:47,920 och det kan vara bättre att bara gå till en Om / Else uttalande på den punkten. 1129 00:57:47,920 --> 00:57:54,530 >> ROB: Och dessutom, som en sidoanteckning, PHP felaktigt implementerar ternära 1130 00:57:54,530 --> 00:57:58,053 operatören så att kapslade ternaries inte ens fungerar som de ska. 1131 00:57:58,053 --> 00:57:58,840 >> JOSEPH: Ja. 1132 00:57:58,840 --> 00:58:01,170 Så det blir lite förvirrande, speciellt när du går 1133 00:58:01,170 --> 00:58:02,145 till olika språk. 1134 00:58:02,145 --> 00:58:04,810 >> ROB: Det är förvirrande nog att språk är fel om det. 1135 00:58:04,810 --> 00:58:08,030 1136 00:58:08,030 --> 00:58:11,510 >> JOSEPH: Så egentligen, bara för att klargöra, inte alla vet vad som 1137 00:58:11,510 --> 00:58:13,900 % S gör här borta? 1138 00:58:13,900 --> 00:58:15,650 Eventuella frågor om det? 1139 00:58:15,650 --> 00:58:19,760 Jag antar att bara för kameran, den% s i grund och botten låter oss sätta en platshållare 1140 00:58:19,760 --> 00:58:20,790 för en sträng. 1141 00:58:20,790 --> 00:58:23,920 Och sedan i slutet, vi ange att variabel som vi vill sätta in i detta 1142 00:58:23,920 --> 00:58:25,500 platshållare är s. 1143 00:58:25,500 --> 00:58:27,730 Så att i grunden tar s och det sätter den in här. 1144 00:58:27,730 --> 00:58:32,130 Och så kommer det att skriva ut, du valde en hög eller du valde en låg siffra. 1145 00:58:32,130 --> 00:58:33,770 OK. 1146 00:58:33,770 --> 00:58:36,970 >> Så loopar kan du utföra saker i cirkulära rörelser, eller hur? 1147 00:58:36,970 --> 00:58:40,300 Du kanske har stött på detta i Skrapa i form av evigt loopar 1148 00:58:40,300 --> 00:58:45,650 eller Upprepa tills eller Upprepa en viss antal gånger. 1149 00:58:45,650 --> 00:58:47,540 Så varför är det bra för oss? 1150 00:58:47,540 --> 00:58:51,500 Tja, i C, låt oss säga att vi har denna sång förs i Scratch att 1151 00:58:51,500 --> 00:58:53,450 sjunger, är detta den låten som aldrig tar slut. 1152 00:58:53,450 --> 00:58:55,710 Det går bara om och om och för alltid och för evigt. 1153 00:58:55,710 --> 00:58:59,395 Tja, kan man inte riktigt göra ett program som har ett oändligt antal printf 1154 00:58:59,395 --> 00:59:00,850 uttalanden i det, eller hur? 1155 00:59:00,850 --> 00:59:04,900 >> Så i detta scenario, ett sätt att du skulle kunna göra detta arbete och 1156 00:59:04,900 --> 00:59:09,330 att få det att skriva ut för alltid är att istället använda en while-slinga. 1157 00:59:09,330 --> 00:59:13,640 Så en while-slinga kommer att utföra vad som är i kroppen av de två hängslen som 1158 00:59:13,640 --> 00:59:17,250 tillhör det baserat på vad tillståndet är. 1159 00:59:17,250 --> 00:59:21,170 Så i detta speciella exempel tidigare, om Vi vill skriva ut det här för alltid, vad 1160 00:59:21,170 --> 00:59:23,590 kan vi göra? 1161 00:59:23,590 --> 00:59:25,190 Jo, visst, eller hur? 1162 00:59:25,190 --> 00:59:32,290 >> Så här sortens kombinerar idén av några booleskt uttryck 1163 00:59:32,290 --> 00:59:33,610 tillsammans med en slinga. 1164 00:59:33,610 --> 00:59:35,780 Och vi lärde oss om Boolean uttryck tidigare. 1165 00:59:35,780 --> 00:59:39,650 Så när tillståndet inuti att Medan fortfarande sant, denna slinga 1166 00:59:39,650 --> 00:59:41,480 kommer att köra på och på och på. 1167 00:59:41,480 --> 00:59:44,640 Och i det här fallet, om vi bara leverera det med sann, orsakar detta en oändlig 1168 00:59:44,640 --> 00:59:49,310 slinga som skriver låten om och om och den som vi önskade innan utan 1169 00:59:49,310 --> 00:59:52,410 att ha ett program som har ett oändligt antal printf uttalanden, vilket är 1170 00:59:52,410 --> 00:59:55,220 inte möjligt. 1171 00:59:55,220 --> 00:59:57,810 >> Så mer fängslande, fast, Du kan använda denna med en 1172 00:59:57,810 --> 00:59:59,710 variabel och ett tillstånd. 1173 00:59:59,710 --> 01:00:04,420 Så låt oss säga att vi vill upprepa fras, totalt loopy, 10 gånger. 1174 01:00:04,420 --> 01:00:08,380 Så vad du kan göra med en while-slinga är kan du först initiera en räknare 1175 01:00:08,380 --> 01:00:10,860 variabel utsida Medan slingan till 10. 1176 01:00:10,860 --> 01:00:14,360 Och sedan i princip, varje gång du går genom Medan slingan, skriva ut dig 1177 01:00:14,360 --> 01:00:19,090 uttalandet och sedan minska räknevariabeln förrän i slutet, 1178 01:00:19,090 --> 01:00:23,020 någon gång, när vi subtrahera jag nog gånger, 1 från I tillräckligt många gånger - 1179 01:00:23,020 --> 01:00:27,290 och bara för att klargöra, jag minus minus betyder att jag är lika jag minus 1. 1180 01:00:27,290 --> 01:00:31,280 >> Det kommer i princip ta jag ner till punkt där när jag slog noll, detta 1181 01:00:31,280 --> 01:00:35,260 tillstånd är inte längre sant och så det kommer ut ur loopen. 1182 01:00:35,260 --> 01:00:37,045 Så helt loopy endast skriver ut 10 gånger. 1183 01:00:37,045 --> 01:00:39,550 1184 01:00:39,550 --> 01:00:41,080 Har du frågor om en while-slinga? 1185 01:00:41,080 --> 01:00:44,580 1186 01:00:44,580 --> 01:00:46,790 OK. 1187 01:00:46,790 --> 01:00:50,550 >> Så det finns ett sätt som vi kan göra det vi just gjorde på ett mer koncist sätt med 1188 01:00:50,550 --> 01:00:51,715 vad vi kallar en For loop. 1189 01:00:51,715 --> 01:00:55,750 Så en For-slinga består av en initiering, ett tillstånd och en 1190 01:00:55,750 --> 01:00:58,950 uppdatering, precis som vi hade innan i denna Medan slinga. 1191 01:00:58,950 --> 01:00:59,890 Så låt oss ta en titt. 1192 01:00:59,890 --> 01:01:02,900 I denna Medan slinga, hade vi en initiering, sedan hade vi en 1193 01:01:02,900 --> 01:01:04,260 skick att vi kontrollerat. 1194 01:01:04,260 --> 01:01:06,450 Och sedan hade vi en uppdatering steg på toppen. 1195 01:01:06,450 --> 01:01:10,060 >> Med en For loop, detta i grunden tar dessa tre saker och kondenserar det 1196 01:01:10,060 --> 01:01:11,370 ner i en linje. 1197 01:01:11,370 --> 01:01:15,130 Så det första som det gör i För loop är initieringen. 1198 01:01:15,130 --> 01:01:19,090 Och då du gör ett semikolon, och sedan du gör det tillstånd, som jag 1199 01:01:19,090 --> 01:01:22,200 större än noll går därborta, och sedan steg uppdateringen. 1200 01:01:22,200 --> 01:01:26,470 Så detta blir utfört på slutet av slingan. 1201 01:01:26,470 --> 01:01:28,790 Så dessa två program är väsentligen ekvivalenta. 1202 01:01:28,790 --> 01:01:31,960 1203 01:01:31,960 --> 01:01:33,870 >> Några frågor? 1204 01:01:33,870 --> 01:01:37,000 Så vad är en skillnad mellan dessa två? 1205 01:01:37,000 --> 01:01:38,000 Kan någon peka ut det? 1206 01:01:38,000 --> 01:01:40,480 Det kan vara lite subtil. 1207 01:01:40,480 --> 01:01:41,930 Det är bara en mycket liten skillnad. 1208 01:01:41,930 --> 01:01:42,330 Ja? 1209 01:01:42,330 --> 01:01:49,008 >> TALARE 5: Du skulle inte kunna använda I variabeln utanför För loop 1210 01:01:49,008 --> 01:01:49,962 [OHÖRBAR]? 1211 01:01:49,962 --> 01:01:50,900 >> JOSEPH: Exakt. 1212 01:01:50,900 --> 01:01:53,550 Så det här är något som vi kommer till senare kallad variabel omfattning. 1213 01:01:53,550 --> 01:01:56,610 Men i grunden, det int i liv utanför denna Medan slinga. 1214 01:01:56,610 --> 01:01:59,800 Så när denna Medan slinga görs köra, kommer jag att kunna använda jag senare 1215 01:01:59,800 --> 01:02:00,880 på i programmet. 1216 01:02:00,880 --> 01:02:05,430 >> Av följande skäl: med detta För loop, detta int jag är scoped insidan av denna För loop. 1217 01:02:05,430 --> 01:02:10,240 Och eftersom det är insidan av denna del i För loop börjar det 1218 01:02:10,240 --> 01:02:13,200 på parentesen och slutar med den lockiga stag där. 1219 01:02:13,200 --> 01:02:16,120 Allt som har deklarerats inuti här kan inte användas utanför. 1220 01:02:16,120 --> 01:02:20,420 Så om jag försöker använda jag utanför, det ska säg mig, svart symbol. 1221 01:02:20,420 --> 01:02:22,420 Och i grunden, jag skulle inte kunna använda den. 1222 01:02:22,420 --> 01:02:28,460 >> ROB: Och ja, för 10 år sedan, i bokstavligen alla fall, klammerparenteser är 1223 01:02:28,460 --> 01:02:31,140 vad du använde för att bestämma räckvidden för en variabel. 1224 01:02:31,140 --> 01:02:37,240 Så där, int jag lika med 10 deklareras inuti denna 1225 01:02:37,240 --> 01:02:38,520 set av klammerparenteser. 1226 01:02:38,520 --> 01:02:42,530 Och så då, så länge som du försöker använda jag innan denna klammerparentes, det är bra. 1227 01:02:42,530 --> 01:02:47,090 1228 01:02:47,090 --> 01:02:51,460 Du kan se när du skriver gör du se streck, streck, std, lika, C99. 1229 01:02:51,460 --> 01:02:57,100 >> Så det är en senare version av C som GCC har genomförts som också ger 1230 01:02:57,100 --> 01:02:58,740 denna genväg. 1231 01:02:58,740 --> 01:03:03,505 Så här används för att inte tillåtas i C. Och du kan se varför, eftersom detta int 1232 01:03:03,505 --> 01:03:07,600 Jag är utanför denna klammer men det är fortfarande anses vara i 1233 01:03:07,600 --> 01:03:09,750 omfattningen av dessa klammerparenteser. 1234 01:03:09,750 --> 01:03:14,120 Men detta är en mycket bekväm sak, och så är det en bra förlängning. 1235 01:03:14,120 --> 01:03:15,370 >> JOSEPH: Några frågor? 1236 01:03:15,370 --> 01:03:17,550 1237 01:03:17,550 --> 01:03:19,260 OK. 1238 01:03:19,260 --> 01:03:22,820 Så vad är mer användbart är att ibland du vill sorts dynamik i 1239 01:03:22,820 --> 01:03:23,410 din loop, eller hur? 1240 01:03:23,410 --> 01:03:26,350 Du vill inte bara nödvändigtvis skriva ut helt loopy hela tiden, du 1241 01:03:26,350 --> 01:03:28,650 vill räkna ner från 10 eller något. 1242 01:03:28,650 --> 01:03:32,010 Och så du kan använda räknarvariabeln inne i nämnda slinga samt. 1243 01:03:32,010 --> 01:03:35,530 Och i det här fallet, det här programmet bara räknar ner från 10 hela vägen ner. 1244 01:03:35,530 --> 01:03:39,260 Och vad betyder det inte att skriva ut? 1245 01:03:39,260 --> 01:03:42,790 Det skrivs inte ut noll, rätt, för när - 1246 01:03:42,790 --> 01:03:45,460 Ja, det också inte skriver ut 11. 1247 01:03:45,460 --> 01:03:49,200 >> Så det inte skrivs ut noll, för när Jag är noll, kom ihåg, det utvärderar 1248 01:03:49,200 --> 01:03:52,170 tillståndet innan det går på att exekvera slingan. 1249 01:03:52,170 --> 01:03:56,820 Och när jag är noll, är det falskt, så den inte skriva ut räknar ner 1250 01:03:56,820 --> 01:04:00,200 noll, bara skriver ut räkning ner 10 hela vägen ner till 1. 1251 01:04:00,200 --> 01:04:03,420 Om vi ​​ville faktiskt det att skriva ut noll, då skulle vi sätta ett likhetstecken 1252 01:04:03,420 --> 01:04:04,750 efter det att denna är större än-tecken. 1253 01:04:04,750 --> 01:04:09,400 1254 01:04:09,400 --> 01:04:10,130 OK. 1255 01:04:10,130 --> 01:04:16,410 >> Så ett sätt att göra validering av indata, vilket är när du ber användaren att göra 1256 01:04:16,410 --> 01:04:18,620 något, vill du se till att de följer dina instruktioner, är att använda 1257 01:04:18,620 --> 01:04:19,400 While loop, eller hur? 1258 01:04:19,400 --> 01:04:22,990 Så i det här fallet, jag ber för ett positivt tal så är jag 1259 01:04:22,990 --> 01:04:23,810 väntar på inmatning. 1260 01:04:23,810 --> 01:04:28,210 >> Och då jag kollade Medan ingången är mindre än noll, hålla ber dem. 1261 01:04:28,210 --> 01:04:32,100 Så länge de ger mig ett nummer det är inte positivt, tiden ställer, 1262 01:04:32,100 --> 01:04:33,600 hålla frågar, tiden ställer. 1263 01:04:33,600 --> 01:04:35,860 Men vad är slags konstigt om det här? 1264 01:04:35,860 --> 01:04:38,570 Eller vad tycks inte optimalt om denna struktur här? 1265 01:04:38,570 --> 01:04:44,282 1266 01:04:44,282 --> 01:04:44,758 Någon? 1267 01:04:44,758 --> 01:04:45,234 Ja? 1268 01:04:45,234 --> 01:04:47,614 >> HÖGTALARE 6: Du upprepar instruktionen två gånger. 1269 01:04:47,614 --> 01:04:48,100 >> JOSEPH: Höger. 1270 01:04:48,100 --> 01:04:50,090 Så vi har två printf uttalanden här, eller hur? 1271 01:04:50,090 --> 01:04:53,440 Så det finns ett sätt som vi kunde få detta bara ner till en som skulle göra våra 1272 01:04:53,440 --> 01:04:57,170 kod lättare att läsa och lite mer ren. 1273 01:04:57,170 --> 01:05:00,180 Och då vi inte skulle behöva har få in dubbelt så bra. 1274 01:05:00,180 --> 01:05:03,740 Och ett sätt du kan göra detta är med hjälp av en Do-While-loop. 1275 01:05:03,740 --> 01:05:07,670 >> Och en Do-While-loop är i grunden en annan form av en while-slinga där 1276 01:05:07,670 --> 01:05:11,460 allt inom klammerparenteserna blir körs minst en gång. 1277 01:05:11,460 --> 01:05:14,840 Så här förklarar jag, int ingång, utanför först. 1278 01:05:14,840 --> 01:05:18,100 Och då säger jag bara, gör det instruktion medan inmatning 1279 01:05:18,100 --> 01:05:19,140 är mindre än noll. 1280 01:05:19,140 --> 01:05:20,530 Så det träffar Do först. 1281 01:05:20,530 --> 01:05:24,190 Det kommer alltid att utföra detta åtminstone en gång, så det kommer alltid att be användaren 1282 01:05:24,190 --> 01:05:25,960 för inmatning minst en gång. 1283 01:05:25,960 --> 01:05:29,390 Och sedan utvärderar den ingången, och det händer i en cirkel. 1284 01:05:29,390 --> 01:05:30,135 Ja, fråga? 1285 01:05:30,135 --> 01:05:32,602 >> HÖGTALARE 6: Finns det något sätt att göra det [OHÖRBAR] slag, som om du säger, 1286 01:05:32,602 --> 01:05:34,268 GetString, och någon [OHÖRBAR] 1287 01:05:34,268 --> 01:05:35,220 finns det något sätt att [OHÖRBAR] 1288 01:05:35,220 --> 01:05:40,060 >> JOSEPH: Så frågan är, är det en sätt att göra validering av indata om användaren 1289 01:05:40,060 --> 01:05:41,850 sätter inte i rätt typ av variabel? 1290 01:05:41,850 --> 01:05:44,460 Så om vi ber om en int och de ge oss en sträng istället. 1291 01:05:44,460 --> 01:05:49,110 Och i de funktioner som vi genomför för dig, getInt, GetString i alla 1292 01:05:49,110 --> 01:05:52,680 dessa funktioner, de faktiskt redan göra den sortens grundtyp ingång 1293 01:05:52,680 --> 01:05:54,120 valideringen under huven. 1294 01:05:54,120 --> 01:05:57,390 Så om du använder de funktioner som vi gav dig, behöver du inte verkligen måste. 1295 01:05:57,390 --> 01:06:01,380 >> Men om du vill titta mer på hur du faktiskt kan göra det, kan du titta 1296 01:06:01,380 --> 01:06:03,360 under huven på filen I/O-- 1297 01:06:03,360 --> 01:06:07,990 inte filen, standard I / O-funktioner som en läsning från standard input och 1298 01:06:07,990 --> 01:06:08,580 standard ut. 1299 01:06:08,580 --> 01:06:10,630 Och du kan få en bättre känsla om hur du kan göra det. 1300 01:06:10,630 --> 01:06:13,670 >> ROB: En fråga är dock specifikt med exempel som du 1301 01:06:13,670 --> 01:06:17,070 sagt, förvänta dig en sträng och jag anger en int. 1302 01:06:17,070 --> 01:06:20,110 Hur skulle du se skillnad mellan avsiktligt vilja ha 1303 01:06:20,110 --> 01:06:23,130 sträng 123 kontra att vilja det int 123? 1304 01:06:23,130 --> 01:06:29,230 Så sträng, det är ganska mycket det finns ingen validering, det är precis vad de 1305 01:06:29,230 --> 01:06:31,600 angett att du kommer att tolka som en sträng. 1306 01:06:31,600 --> 01:06:35,790 >> Int är lättare, eftersom oavsett den input du tar från användaren, är du 1307 01:06:35,790 --> 01:06:37,470 alltid med en sträng. 1308 01:06:37,470 --> 01:06:40,650 Och så att strängen kan du sedan kolla, är alla dessa 1309 01:06:40,650 --> 01:06:44,218 faktiskt numeriska siffror? 1310 01:06:44,218 --> 01:06:45,170 >> JOSEPH: OK. 1311 01:06:45,170 --> 01:06:46,420 Har du frågor om en Do-While-loop? 1312 01:06:46,420 --> 01:06:49,170 >> ROB: Åh, och det är också - 1313 01:06:49,170 --> 01:06:55,130 gå tillbaka till omfattning, en något gemensamt misstag försöker använda vissa lokala 1314 01:06:55,130 --> 01:06:59,540 variabel inifrån denna Do-While slinga insidan av detta tillstånd. 1315 01:06:59,540 --> 01:07:02,850 Och faktiskt, om vi bara blev av detta och sade, int input är lika 1316 01:07:02,850 --> 01:07:06,990 GetInt, då kompilatorn kommer att skrika på oss, eftersom indata inte finns 1317 01:07:06,990 --> 01:07:08,900 utanför tillämpningsområdet för dessa klammerparenteser. 1318 01:07:08,900 --> 01:07:10,792 >> JOSEPH: Och det är därför vi behöver denna lineup här. 1319 01:07:10,792 --> 01:07:13,620 1320 01:07:13,620 --> 01:07:14,630 OK. 1321 01:07:14,630 --> 01:07:17,530 Så kan man också bryta sig ur en loop tidigt om du vill. 1322 01:07:17,530 --> 01:07:21,240 Så det här är ett annorlunda sätt att genomföra det som vi just genomfört. 1323 01:07:21,240 --> 01:07:24,340 Och istället för att använda villkoret inom parentes, vi använder en 1324 01:07:24,340 --> 01:07:26,920 Om uttalandet insidan av kroppen av Do-While-loop. 1325 01:07:26,920 --> 01:07:30,000 >> Och i grund och botten, när ingången är äntligen större än noll, kommer vi 1326 01:07:30,000 --> 01:07:31,000 bryta sig ut ur loopen. 1327 01:07:31,000 --> 01:07:33,420 Och så kommer vi att gå alla vägen hit. 1328 01:07:33,420 --> 01:07:37,920 Och du kan se att detta skulle förmodligen att föredra i denna 1329 01:07:37,920 --> 01:07:39,870 scenario, eftersom det är en liten lite renare och lite 1330 01:07:39,870 --> 01:07:41,380 lite lättare att läsa. 1331 01:07:41,380 --> 01:07:45,210 Detta, du slags har extra rader i den. 1332 01:07:45,210 --> 01:07:47,890 Det är bara lite fulare, Jag antar, i en mening. 1333 01:07:47,890 --> 01:07:48,530 Ja, fråga? 1334 01:07:48,530 --> 01:07:52,178 >> SPEAKER 4: Kommer bryta bara få dig av en uppsättning av hängslen? 1335 01:07:52,178 --> 01:07:53,080 >> JOSEPH: Höger. 1336 01:07:53,080 --> 01:07:58,100 Så frågan är kommer bara att bryta får du ut av en loop? 1337 01:07:58,100 --> 01:07:59,280 Och svaret är ja. 1338 01:07:59,280 --> 01:08:04,290 Så om du har kapslade för loopar, för exempel, om jag har för int jag lika med 0 1339 01:08:04,290 --> 01:08:09,040 fram till 10 och sedan för int J är lika med 0 till 10, om jag bryter ut ur inner 1340 01:08:09,040 --> 01:08:12,310 slinga, jag kommer fortfarande att gå till den yttre slingan. 1341 01:08:12,310 --> 01:08:15,760 Så det kommer att fortsätta att utföra operationer på utsidan. 1342 01:08:15,760 --> 01:08:17,640 Eventuella frågor om det? 1343 01:08:17,640 --> 01:08:18,000 Ja? 1344 01:08:18,000 --> 01:08:21,760 >> TALARE 5: Men bryta endast funktioner för klammerparenteser, inte för andra 1345 01:08:21,760 --> 01:08:22,230 påståenden? 1346 01:08:22,230 --> 01:08:22,700 [OHÖRBAR] 1347 01:08:22,700 --> 01:08:27,620 >> JOSEPH: Så frågan är kommer att bryta endast funktion för loopar i motsats till 1348 01:08:27,620 --> 01:08:29,014 övriga uttalanden som om? 1349 01:08:29,014 --> 01:08:32,950 Och ja, det är fallet, eftersom du bryta ut i en slinga, höger, 1350 01:08:32,950 --> 01:08:33,630 i en mening. 1351 01:08:33,630 --> 01:08:37,215 >> ROB: I de allra flesta fall är det Detta är den typ av Om något, 1352 01:08:37,215 --> 01:08:37,660 sedan bryta. 1353 01:08:37,660 --> 01:08:41,580 Så du behöver inte bryta gälla If som omslag runt den. 1354 01:08:41,580 --> 01:08:45,250 Och också, det är inte mycket av en slinga, men kom ihåg att switchar är också 1355 01:08:45,250 --> 01:08:46,340 brutit ut i form av pauser. 1356 01:08:46,340 --> 01:08:48,390 Vi såg raster som används med växlar innan. 1357 01:08:48,390 --> 01:08:52,189 >> JOSEPH: Och du kan även använda dem i medan slingor och för slingor. 1358 01:08:52,189 --> 01:08:54,560 Några frågor? 1359 01:08:54,560 --> 01:08:55,830 OK. 1360 01:08:55,830 --> 01:08:57,779 Så nästa upp är funktioner. 1361 01:08:57,779 --> 01:09:01,500 Så du kanske har använt en av dessa BYOB block i din Scratch projektet. 1362 01:09:01,500 --> 01:09:04,569 Och detta i grund och botten tillåter du definiera en uppsättning 1363 01:09:04,569 --> 01:09:05,680 instruktioner som ska följas. 1364 01:09:05,680 --> 01:09:09,569 >> Och vad jag menar med det är låt oss tänka tillbaka till matte, höger, algebra. 1365 01:09:09,569 --> 01:09:13,370 Du har vad vi kallar en funktion av x, någon variabel, och låt oss säga att detta 1366 01:09:13,370 --> 01:09:16,080 Funktionen är f av x är lika med x plus 5. 1367 01:09:16,080 --> 01:09:20,410 Så du kan tänka på f på x som denna svarta box som tar 15 i och sedan 1368 01:09:20,410 --> 01:09:22,590 producerar 20. 1369 01:09:22,590 --> 01:09:26,630 >> Så mer generellt, är en funktion något som tar några ingångar och 1370 01:09:26,630 --> 01:09:27,880 sedan producerar några utgångar. 1371 01:09:27,880 --> 01:09:31,920 1372 01:09:31,920 --> 01:09:32,960 Och varför är funktioner bra? 1373 01:09:32,960 --> 01:09:35,189 De är bra för ett antal skäl. 1374 01:09:35,189 --> 01:09:40,470 Så gör någon vill ta ett knivhugg på vilken organisation innebär? 1375 01:09:40,470 --> 01:09:42,630 När det gäller varför funktioner är till någon hjälp? 1376 01:09:42,630 --> 01:09:43,090 Ja? 1377 01:09:43,090 --> 01:09:44,735 >> SPEAKER 4: Det gör din kod mer lättläst. 1378 01:09:44,735 --> 01:09:45,399 >> JOSEPH: Höger. 1379 01:09:45,399 --> 01:09:47,670 Så en av de saker som är det gör din kod mer lättläst, eller hur? 1380 01:09:47,670 --> 01:09:53,710 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, 1381 01:09:53,710 --> 01:09:57,190 vilket är mer lättläst och mer begriplig för en läsare. 1382 01:09:57,190 --> 01:10:01,150 >> Organisationen är också i fråga om dela upp koden i hanterbara 1383 01:10:01,150 --> 01:10:05,610 portioner, så att istället för att försöka genomföra detta allt i ett långt avsnitt 1384 01:10:05,610 --> 01:10:09,070 i huvud, kan du slags dela upp in liksom, OK, låt oss skriva en funktion 1385 01:10:09,070 --> 01:10:11,910 att kub något, låt oss skriva ett fungera till torget något. 1386 01:10:11,910 --> 01:10:15,950 Så att du kan dela upp den i små, små delar som du kan hantera 1387 01:10:15,950 --> 01:10:18,944 i stället för att försöka ta itu med ett stort problem på en gång. 1388 01:10:18,944 --> 01:10:21,806 >> ROB: Eller till och med små, små delar som du och en partner kan tackla. 1389 01:10:21,806 --> 01:10:22,283 >> JOSEPH: Ja. 1390 01:10:22,283 --> 01:10:23,855 >> ROB: Så istället för båda du försöker att implantera en 1391 01:10:23,855 --> 01:10:27,170 fungera på samma gång. 1392 01:10:27,170 --> 01:10:28,800 >> JOSEPH: Förenkling. 1393 01:10:28,800 --> 01:10:30,050 Den som vill ta en gissning? 1394 01:10:30,050 --> 01:10:33,080 1395 01:10:33,080 --> 01:10:33,410 Ja? 1396 01:10:33,410 --> 01:10:34,675 >> SPEAKER 5: Mer upprepning. 1397 01:10:34,675 --> 01:10:35,260 >> JOSEPH: Höger. 1398 01:10:35,260 --> 01:10:39,210 Så en sak som du kan göra med förenkling är att det är typ av på 1399 01:10:39,210 --> 01:10:42,520 samma linjer som återanvändbarhet är att när jag skriver en kub funktion, jag kan 1400 01:10:42,520 --> 01:10:45,410 bara använda den om och om och om igen igen i mitt program i stället för att skriva 1401 01:10:45,410 --> 01:10:49,610 x gånger x gånger x över och om och om igen. 1402 01:10:49,610 --> 01:10:52,980 Och förenkling här också bara betyder att det gör din kod slags 1403 01:10:52,980 --> 01:10:55,900 lättare att felsöka när du delar detta upp in funktioner. 1404 01:10:55,900 --> 01:10:58,250 För då kan man lokalisera var dina problem sorts är. 1405 01:10:58,250 --> 01:11:00,910 1406 01:11:00,910 --> 01:11:02,160 Några frågor? 1407 01:11:02,160 --> 01:11:04,200 1408 01:11:04,200 --> 01:11:06,540 >> Så en annan idé är abstraktion, eller hur? 1409 01:11:06,540 --> 01:11:07,390 Denna svarta låda. 1410 01:11:07,390 --> 01:11:11,360 Som vet du vad getInt gör för att ta emot synpunkter från användaren? 1411 01:11:11,360 --> 01:11:12,510 Vi har inte riktigt sagt, eller hur? 1412 01:11:12,510 --> 01:11:15,670 Allt vi har sagt är getInt gör exakt vad den säger att den gör. 1413 01:11:15,670 --> 01:11:18,440 Så även om vi inte berätta hur det fungerar, du fortfarande känner. 1414 01:11:18,440 --> 01:11:21,670 >> Så i detta fall, är detta en fyrdubbel funktion som gör 1415 01:11:21,670 --> 01:11:24,520 olika saker för en ingång att alstra en utsignal. 1416 01:11:24,520 --> 01:11:28,050 Och du kan fyrdubbla ett nummer genom att multipliceras med fyra. 1417 01:11:28,050 --> 01:11:30,790 Eller så kan det vi kallar bitars flytta den med två. 1418 01:11:30,790 --> 01:11:32,960 Och vi kommer att täcka detta lite senare. 1419 01:11:32,960 --> 01:11:36,570 Och det finns ingen anledning att veta hur detta Funktionen fungerar faktiskt så länge det 1420 01:11:36,570 --> 01:11:37,640 arbetar som anges. 1421 01:11:37,640 --> 01:11:40,740 >> Så under huven, skulle jag vara liknande, återinmatningstider 1422 01:11:40,740 --> 01:11:41,690 åtta dividerat med två. 1423 01:11:41,690 --> 01:11:42,510 Och du skulle inte veta, eller hur? 1424 01:11:42,510 --> 01:11:44,970 Allt du behöver veta är Det gör vad den säger. 1425 01:11:44,970 --> 01:11:48,070 Så det är den användbar sak om abstraktion. 1426 01:11:48,070 --> 01:11:52,910 >> Och en annan sak är slags denna idé att lokalisera din kod till någon 1427 01:11:52,910 --> 01:11:54,280 särskilt avsnitt. 1428 01:11:54,280 --> 01:11:57,450 Så om du har ett problem, gör du inte måste gå över din kod försöker 1429 01:11:57,450 --> 01:11:58,730 att åtgärda var problemet var. 1430 01:11:58,730 --> 01:12:00,990 Så i det här fallet, genomfört jag kub fel. 1431 01:12:00,990 --> 01:12:02,820 Jag trodde att kuben var multiplicera genom tre. 1432 01:12:02,820 --> 01:12:05,760 >> Så i det här fallet, är detta ett program som har bara multiplicera med tre 1433 01:12:05,760 --> 01:12:06,750 överallt. 1434 01:12:06,750 --> 01:12:10,910 Och det är ett annat program som har factored kub ut i en funktion. 1435 01:12:10,910 --> 01:12:14,040 Och så nu, om jag vill fixa mitt misstag här, jag måste fixa varenda rad 1436 01:12:14,040 --> 01:12:15,620 av kod i programmet. 1437 01:12:15,620 --> 01:12:19,190 Medan å andra sidan, om jag använder funktion, jag behöver bara ändra 1438 01:12:19,190 --> 01:12:20,650 vad som var fel på ett ställe. 1439 01:12:20,650 --> 01:12:25,330 1440 01:12:25,330 --> 01:12:28,730 >> Så i datavetenskap, vi ringa in-och utgångar. 1441 01:12:28,730 --> 01:12:31,640 Ingångar kallas parametrar eller argument och utgångar kallas 1442 01:12:31,640 --> 01:12:32,950 returnera värden. 1443 01:12:32,950 --> 01:12:39,000 Och vi får se hur det hjälper oss att sortera av definiera en funktion i en sekund. 1444 01:12:39,000 --> 01:12:41,430 Så det här är en funktionsdefinition för cubing. 1445 01:12:41,430 --> 01:12:45,110 Så det tar en ingång, och sedan återgår det antal gånger 1446 01:12:45,110 --> 01:12:47,020 sig själv tre gånger. 1447 01:12:47,020 --> 01:12:48,020 Så låt oss bryta ner det. 1448 01:12:48,020 --> 01:12:53,090 >> Så vi har en funktionshuvudet, vilket i grund och botten består av tre saker. 1449 01:12:53,090 --> 01:12:56,050 Så vi har de parametrar som är, som jag sa tidigare, det 1450 01:12:56,050 --> 01:12:57,680 ingångar i denna funktion. 1451 01:12:57,680 --> 01:12:59,300 Och sedan ger vi den funktion ett namn. 1452 01:12:59,300 --> 01:13:00,740 I det här fallet, det kallas kub. 1453 01:13:00,740 --> 01:13:03,860 Och ange sedan vi vilken typ av returvärdet är. 1454 01:13:03,860 --> 01:13:06,760 >> Så i detta fall, min kub funktion tar in ett heltal och det också 1455 01:13:06,760 --> 01:13:07,890 returnerar ett heltal. 1456 01:13:07,890 --> 01:13:11,510 Så om jag passera i två, två är ett heltal, den återgår åtta till mig, som 1457 01:13:11,510 --> 01:13:13,250 är ett heltal. 1458 01:13:13,250 --> 01:13:15,420 Så tillbaka typ namnparametrar. 1459 01:13:15,420 --> 01:13:16,670 Frågor om det? 1460 01:13:16,670 --> 01:13:19,440 1461 01:13:19,440 --> 01:13:24,230 >> Och då är returvärdet faktiskt specificeras i slutet genom att säga avkastning 1462 01:13:24,230 --> 01:13:27,540 och sedan återvänder allt innehåller returvärdet. 1463 01:13:27,540 --> 01:13:30,940 Så i det här fallet, om vi sätter allt tillsammans, tar en funktion i 1464 01:13:30,940 --> 01:13:35,100 parametrar, det kallas något, och det återgår något som är den typ 1465 01:13:35,100 --> 01:13:36,350 att vi säger att det skulle bli. 1466 01:13:36,350 --> 01:13:39,830 1467 01:13:39,830 --> 01:13:41,080 Några frågor? 1468 01:13:41,080 --> 01:13:43,710 1469 01:13:43,710 --> 01:13:45,080 >> Så hur använder vi en funktion? 1470 01:13:45,080 --> 01:13:49,230 Tja, vi skriver en funktion och sedan vi använder det i vårt program, eller hur? 1471 01:13:49,230 --> 01:13:51,565 Så jag kallade det kub, och då kan jag använda kuben. 1472 01:13:51,565 --> 01:13:54,200 >> Men vad som är viktigt att notera är att orderfrågor. 1473 01:13:54,200 --> 01:13:58,100 Om jag har kub nedan viktigaste, det är kommer att köra in i kuben. 1474 01:13:58,100 --> 01:14:00,360 Och vid det här laget, det finns inget kallas kub i programmet, och det är 1475 01:14:00,360 --> 01:14:02,550 bara kommer att bli som jag har ingen aning om vad kuben är. 1476 01:14:02,550 --> 01:14:05,060 >> Så det kommer att säga, implicit förklaring funktion. 1477 01:14:05,060 --> 01:14:06,690 Det är fel som dyker upp. 1478 01:14:06,690 --> 01:14:10,230 Och så i detta fall, är kub nedan huvud, så det inte kommer 1479 01:14:10,230 --> 01:14:12,006 att veta om det. 1480 01:14:12,006 --> 01:14:14,724 >> TALARE 5: Så huvud är oftast den sista funktionen definieras? 1481 01:14:14,724 --> 01:14:17,290 >> JOSEPH: Så frågan är, är huvud oftast det sista 1482 01:14:17,290 --> 01:14:18,170 sak som du skulle definiera? 1483 01:14:18,170 --> 01:14:19,730 Och nr. 1484 01:14:19,730 --> 01:14:22,280 Det är för att vi brukar vilja huvud att vara i toppen, eller hur? 1485 01:14:22,280 --> 01:14:24,640 För det är det första du vill programmeraren öppnar 1486 01:14:24,640 --> 01:14:25,640 program för att se. 1487 01:14:25,640 --> 01:14:29,950 Och så hur löser vi det här problemet om vi intresserad av huvud att vara överst, men 1488 01:14:29,950 --> 01:14:33,750 funktioner som vi vill ha, vi vill ha dem ligga under huvud ännu kunna använda 1489 01:14:33,750 --> 01:14:34,930 dem inne i huvud? 1490 01:14:34,930 --> 01:14:36,870 >> Tja, vi använder det vi kallar en funktion prototyp. 1491 01:14:36,870 --> 01:14:40,830 Så vad en funktionsprototyp i huvudsak är det första tar det som 1492 01:14:40,830 --> 01:14:45,060 signaturen eller funktionshuvudet av vad vi vill genomföra ned 1493 01:14:45,060 --> 01:14:47,420 här, och vi satte den på den övre delen av ett program. 1494 01:14:47,420 --> 01:14:51,400 >> Så i det här fallet, säger vi att, ja, senare i vårt program, vi ska 1495 01:14:51,400 --> 01:14:55,010 att göra ett löfte att genomföra detta Funktionen kallas int kub, som tar 1496 01:14:55,010 --> 01:14:56,260 ett heltal ingång. 1497 01:14:56,260 --> 01:15:00,870 Så nu, eftersom det är över huvud, viktigaste, det kommer att säga, oh, ja, 1498 01:15:00,870 --> 01:15:03,910 senare i programmet, det kommer att bli där så jag kan hänvisa till det, så jag ska 1499 01:15:03,910 --> 01:15:05,230 bara låta det gå igenom för nu. 1500 01:15:05,230 --> 01:15:07,660 >> Och sedan i botten, vi genomföra kub. 1501 01:15:07,660 --> 01:15:11,180 Och sedan huvud kommer bara säga, bra kommer det slags länk 1502 01:15:11,180 --> 01:15:12,250 dessa två symboler tillsammans. 1503 01:15:12,250 --> 01:15:14,320 Och vi kommer att täcka vad som betyder senare. 1504 01:15:14,320 --> 01:15:17,090 Och så det ska veta att detta är den kub funktion som den ska använda. 1505 01:15:17,090 --> 01:15:19,630 1506 01:15:19,630 --> 01:15:23,383 >> ROB: Den [OHÖRBAR] om att vilja Huvud i botten eller 1507 01:15:23,383 --> 01:15:24,880 topp, jag har sett båda. 1508 01:15:24,880 --> 01:15:28,630 Det finns saker som bara gillar att sätta huvud i botten. 1509 01:15:28,630 --> 01:15:32,520 Men när ett projekt blir särskilt stora, oftast huvud är i en 1510 01:15:32,520 --> 01:15:34,290 fil alla sina egna. 1511 01:15:34,290 --> 01:15:38,170 Och vid denna punkt, som den int kub linje skulle - 1512 01:15:38,170 --> 01:15:42,460 insida stdio.h är ett gäng rader precis som det int 1513 01:15:42,460 --> 01:15:44,010 kub int ingångsledning. 1514 01:15:44,010 --> 01:15:50,170 >> Och så dessa prototyper är saker som du tenderar att sätta in header-filer, på 1515 01:15:50,170 --> 01:15:52,140 vilken punkt, det spelar ingen roll. 1516 01:15:52,140 --> 01:15:54,700 Tja, det spelar ingen roll. 1517 01:15:54,700 --> 01:15:56,070 De som alltid går i toppen. 1518 01:15:56,070 --> 01:15:59,490 Och om huvud är inte en fil alla sina egna, du behöver inte oroa dig för att sätta 1519 01:15:59,490 --> 01:16:02,360 individuella funktionsprototyper i filen. 1520 01:16:02,360 --> 01:16:05,370 >> JOSEPH: Och vi kommer till det lite Lite senare när Rob börjar prata 1521 01:16:05,370 --> 01:16:06,380 om att sammanställa. 1522 01:16:06,380 --> 01:16:09,480 Och så finns det också en skillnad mellan parameter och argument. 1523 01:16:09,480 --> 01:16:12,500 Och parameter är precis vad Vi kallar dessa ingångar när 1524 01:16:12,500 --> 01:16:13,820 vi definiera funktionen. 1525 01:16:13,820 --> 01:16:16,950 Och vi kallar det ett argument när vi faktiskt för in funktionen. 1526 01:16:16,950 --> 01:16:19,600 >> Så i detta fall, är detta en parameter, som vi sagt tidigare. 1527 01:16:19,600 --> 01:16:24,130 Och när vi faktiskt använder den där borta, kub av x, då x i sig är 1528 01:16:24,130 --> 01:16:25,910 vad vi kallar ett argument till funktionen kub. 1529 01:16:25,910 --> 01:16:28,150 >> ROB: Så parameter argument är - 1530 01:16:28,150 --> 01:16:33,270 det är denna skillnad, mycket förvirrad omväxlande. 1531 01:16:33,270 --> 01:16:37,090 Vid denna punkt, för mig, det är som en av dessa ord att när jag ser det ut i 1532 01:16:37,090 --> 01:16:41,190 det vilda, jag kan inte låta bli att omedelbart frågan om de använder den i 1533 01:16:41,190 --> 01:16:44,120 rätt sammanhang eftersom Skillnaden är subtil nog att bara 1534 01:16:44,120 --> 01:16:45,500 alla tenderar - 1535 01:16:45,500 --> 01:16:48,530 Jag säger nästan alltid argument oavsett vad jag menar. 1536 01:16:48,530 --> 01:16:51,230 1537 01:16:51,230 --> 01:16:54,630 >> Joseph: Och funktioner är också användbara för det vi kallar biverkningar. 1538 01:16:54,630 --> 01:16:59,230 Så en funktion kan ta några ingångar, och det kan också producera inga utgångar. 1539 01:16:59,230 --> 01:17:03,280 Så i detta fall, är jag definierar en subrutin som inte har någon 1540 01:17:03,280 --> 01:17:03,970 returvärde. 1541 01:17:03,970 --> 01:17:07,730 Och för att specificera det använder vi vad vi kallar ett tomrum här. 1542 01:17:07,730 --> 01:17:10,890 Och så bieffekt av denna funktion är att det bara skriver stuff 1543 01:17:10,890 --> 01:17:11,920 ut till sidan. 1544 01:17:11,920 --> 01:17:13,840 Det behöver faktiskt inte ta några ingångar, och det gör inte 1545 01:17:13,840 --> 01:17:15,360 faktiskt ger några utgångar. 1546 01:17:15,360 --> 01:17:18,230 >> Men detta skulle kunna vara användbara i den meningen om du vill, till exempel, felsöka 1547 01:17:18,230 --> 01:17:21,530 något i ditt program, om du vill att skriva en liten subrutin som 1548 01:17:21,530 --> 01:17:25,160 skriver ut, låt oss säga, innehållet minne eller något. 1549 01:17:25,160 --> 01:17:29,800 Och så dessa biverkningar är ibland användbara utanför ramen 1550 01:17:29,800 --> 01:17:33,010 för precis som in-och utgångar. 1551 01:17:33,010 --> 01:17:34,260 Några frågor? 1552 01:17:34,260 --> 01:17:37,270 1553 01:17:37,270 --> 01:17:44,240 >> Och för att avsluta detta segment, vad gör det här programmet göra? 1554 01:17:44,240 --> 01:17:47,420 Jag ska ge er ett par sekunder att läsa igenom det. 1555 01:17:47,420 --> 01:17:52,720 1556 01:17:52,720 --> 01:17:56,880 Vid en mycket grundläggande nivå, vad vi vill säga är att det byter x och y, eller hur? 1557 01:17:56,880 --> 01:18:00,090 >> Så hur många av er som faktiskt tror detta kommer att byta x och y? 1558 01:18:00,090 --> 01:18:02,160 Räck upp handen. 1559 01:18:02,160 --> 01:18:02,760 Ingen. 1560 01:18:02,760 --> 01:18:03,070 OK. 1561 01:18:03,070 --> 01:18:06,720 Vem tror att det kommer inte byta x och y? 1562 01:18:06,720 --> 01:18:09,120 Och summan av det var inte hela rummet. 1563 01:18:09,120 --> 01:18:10,440 Så en del människor är osäker. 1564 01:18:10,440 --> 01:18:10,920 OK. 1565 01:18:10,920 --> 01:18:11,630 Det är rimligt. 1566 01:18:11,630 --> 01:18:16,450 >> Så låt oss gå igenom vad som händer när du faktiskt ringa funktioner först i 1567 01:18:16,450 --> 01:18:18,320 För att svara på denna fråga. 1568 01:18:18,320 --> 01:18:21,430 Så det här är vad minne slags ser ut. 1569 01:18:21,430 --> 01:18:23,860 Det är ungefär som en förenklad modell vad minnet ser ut när 1570 01:18:23,860 --> 01:18:24,800 du kör ett program. 1571 01:18:24,800 --> 01:18:27,270 Så det finns något som kallas stapeln här nere och 1572 01:18:27,270 --> 01:18:28,330 något som kallas högen. 1573 01:18:28,330 --> 01:18:30,950 Och dessa växer mot mitt i minnet. 1574 01:18:30,950 --> 01:18:33,860 >> Så i detta särskilda fall, när du kallar en funktion, det 1575 01:18:33,860 --> 01:18:35,680 får sätta på stacken. 1576 01:18:35,680 --> 01:18:38,900 Och sedan det som finns i det Funktionen stannar i vad vi kallar att 1577 01:18:38,900 --> 01:18:40,550 funktionens stackram. 1578 01:18:40,550 --> 01:18:44,500 Och så för att få en fin visualisering av detta, let's - till exempel, hade vi 1579 01:18:44,500 --> 01:18:45,960 programhuvud tidigare. 1580 01:18:45,960 --> 01:18:47,820 Och inne i huvud, ringde vi kub. 1581 01:18:47,820 --> 01:18:50,650 Så huvud skulle först gå på stacken rama, eftersom det är den första funktionen 1582 01:18:50,650 --> 01:18:51,640 det kallas. 1583 01:18:51,640 --> 01:18:55,740 >> Och sedan när kuben kallas inuti huvud, blir det sätta på toppen av huvud 1584 01:18:55,740 --> 01:18:57,790 insidan av minnet. 1585 01:18:57,790 --> 01:19:02,090 Så vad du ser här är att kuben har sina egna parametrar och dess 1586 01:19:02,090 --> 01:19:02,950 egna lokalbefolkningen. 1587 01:19:02,950 --> 01:19:06,720 Så när du faktiskt skicka något till en funktion, de parametrar som det 1588 01:19:06,720 --> 01:19:09,910 får är kopior av det som var gått in från huvud. 1589 01:19:09,910 --> 01:19:14,140 >> Och att sorts förklara detta, låt oss gå igenom ett program. 1590 01:19:14,140 --> 01:19:16,960 Så vi har stacken, det är bara stapeln partiet. 1591 01:19:16,960 --> 01:19:21,240 Och det vi gör är att vi först initiera x och y till ett och två. 1592 01:19:21,240 --> 01:19:22,400 Så vi har dessa små lådor. 1593 01:19:22,400 --> 01:19:25,310 De sitter i huvud stack rama på stacken. 1594 01:19:25,310 --> 01:19:26,580 De innehåller ett och två. 1595 01:19:26,580 --> 01:19:28,820 >> Nu kallar vi swap. 1596 01:19:28,820 --> 01:19:33,940 Vad som händer är att vi passerar x-och y i swap, och swap skapar sina egna kopior 1597 01:19:33,940 --> 01:19:36,520 av dessa variabler för att använda inne av sin stack ramen. 1598 01:19:36,520 --> 01:19:39,920 Så nu där borta, har vi en, som innehåller det värde som x hade, och b, 1599 01:19:39,920 --> 01:19:41,620 som innehåller det värde som y hade. 1600 01:19:41,620 --> 01:19:42,670 Så ett, två. 1601 01:19:42,670 --> 01:19:47,130 >> Och du kommer att märka att det är separata från x och y på insidan av huvud. 1602 01:19:47,130 --> 01:19:51,390 Så vi nu skapa en temporär variabel som innehåller en. 1603 01:19:51,390 --> 01:19:56,100 Vi satt en lika med b, så det förändringar från en till två. 1604 01:19:56,100 --> 01:19:59,340 Och då kommer vi in ​​b lika till temp, som är ett. 1605 01:19:59,340 --> 01:20:01,640 >> Och så nu vi lämnar ut av denna funktion. 1606 01:20:01,640 --> 01:20:04,310 1607 01:20:04,310 --> 01:20:07,410 När du stänger av funktionen, den stack ram blir dök upp i stacken. 1608 01:20:07,410 --> 01:20:08,270 Vi kallar det driva. 1609 01:20:08,270 --> 01:20:12,750 Du trycker en bunt ram på stacken och du pop om från stacken. 1610 01:20:12,750 --> 01:20:16,080 Och så vad som händer är allt som var i det stack ram slags bara 1611 01:20:16,080 --> 01:20:17,280 går upp i lågor. 1612 01:20:17,280 --> 01:20:19,180 Och så det finns inte längre. 1613 01:20:19,180 --> 01:20:20,470 >> Men vad är det vi ser? 1614 01:20:20,470 --> 01:20:23,690 Vi aldrig faktiskt förändrat värden för x och y, eller hur? 1615 01:20:23,690 --> 01:20:26,530 Så de stannade lokal till huvud. 1616 01:20:26,530 --> 01:20:29,900 Och genom att skicka saker till swap, vi faktiskt aldrig bytt dessa värden. 1617 01:20:29,900 --> 01:20:31,260 Och vad kallar vi det här? 1618 01:20:31,260 --> 01:20:33,040 Vi kallar detta passerar genom värde. 1619 01:20:33,040 --> 01:20:36,860 >> Så i C, när du passerar saker i funktioner, går det dem med värde och 1620 01:20:36,860 --> 01:20:40,160 gör en kopia av dem för den funktion som ska användas. 1621 01:20:40,160 --> 01:20:43,980 Och vi kommer att lära sig om något som kallas passerar genom hänvisning senare, men det är 1622 01:20:43,980 --> 01:20:45,390 ett sätt du kan lösa detta problem. 1623 01:20:45,390 --> 01:20:47,080 Men vi kommer inte att oroa sig för det förrän senare. 1624 01:20:47,080 --> 01:20:52,200 >> ROB: Och faktiskt, den termen, som passerar genom hänvisning, betyder så C inte ens 1625 01:20:52,200 --> 01:20:54,270 passerar genom att referera. 1626 01:20:54,270 --> 01:20:56,760 C uteslutande har förbi värde. 1627 01:20:56,760 --> 01:20:59,630 Oavsett vad du gör, är du alltid passerar en kopia av något. 1628 01:20:59,630 --> 01:21:03,395 Det är bara det att, som jag slags nämnt som tidigare med pekare 1629 01:21:03,395 --> 01:21:07,690 och att en sträng är egentligen bara fyra byte som pekar på någonstans i minnet. 1630 01:21:07,690 --> 01:21:11,890 >> Tja, om jag har denna sträng och det är säger det är där strängen - 1631 01:21:11,890 --> 01:21:15,470 väl, om jag har denna pekare till detta plats i minnet, så jag kan skicka en 1632 01:21:15,470 --> 01:21:19,160 kopia av denna pekare till en funktion, och att funktionen fortfarande vet var i 1633 01:21:19,160 --> 01:21:19,780 minnet är. 1634 01:21:19,780 --> 01:21:22,950 Så båda dessa pekare pekar till samma plats i minnet och 1635 01:21:22,950 --> 01:21:26,460 det är hur vi ska kunna att ändra saker utanför 1636 01:21:26,460 --> 01:21:29,852 nuvarande stack ram. 1637 01:21:29,852 --> 01:21:31,040 >> JOSEPH: Vill du göra sammanställa? 1638 01:21:31,040 --> 01:21:31,820 >> ROB: Nej, det är 05:30. 1639 01:21:31,820 --> 01:21:32,910 >> JOSEPH: OK. 1640 01:21:32,910 --> 01:21:35,040 Det är 05:30. 1641 01:21:35,040 --> 01:21:35,360 OK. 1642 01:21:35,360 --> 01:21:39,280 Så vi kommer att täcka sammanställa Jag antar i nästa avsnitt, eller din avdelning 1643 01:21:39,280 --> 01:21:42,795 ledare kommer då. 1644 01:21:42,795 --> 01:21:43,272 Och - 1645 01:21:43,272 --> 01:21:44,630 >> ROB: Några frågor? 1646 01:21:44,630 --> 01:21:46,760 >> JOSEPH: Några frågor? 1647 01:21:46,760 --> 01:21:47,150 Ja? 1648 01:21:47,150 --> 01:21:52,469 >> SPEAKER 5: Använda strängar från CS50, något funktioner som vi vill använda för 1649 01:21:52,469 --> 01:21:53,880 de kommer att vara som C-funktioner. 1650 01:21:53,880 --> 01:21:59,050 CS50 har inte gått in och gjorde ytterligare. 1651 01:21:59,050 --> 01:22:01,850 >> ROB: Rätt. 1652 01:22:01,850 --> 01:22:08,155 Någon av C som [OHÖRBAR], du skulle använda dem på våra strängar. 1653 01:22:08,155 --> 01:22:12,400 >> JOSEPH: Och en sista sak jag vill nämna är att vi har en stilguide 1654 01:22:12,400 --> 01:22:13,130 för denna klass. 1655 01:22:13,130 --> 01:22:13,360 >> ROB: Oh, ja. 1656 01:22:13,360 --> 01:22:15,270 >> JOSEPH: Så om du har kommit från en programmering bakgrund innan du 1657 01:22:15,270 --> 01:22:17,750 kanske har vissa konventioner när du skriver kod som att sätta 1658 01:22:17,750 --> 01:22:20,950 hängslen på samma linje eller särskild sätt att indrag 1659 01:22:20,950 --> 01:22:22,240 eller namnge dina variabler. 1660 01:22:22,240 --> 01:22:26,870 I denna klass, som vi vill följa en specifik stilguide bara för att, 1661 01:22:26,870 --> 01:22:31,100 Tja, om du går ut och arbeta i industri, du kommer att vänta 1662 01:22:31,100 --> 01:22:34,780 att följa stilguiden för företag där du går till. 1663 01:22:34,780 --> 01:22:38,040 >> Som till exempel, Facebook tror jag har en särskild typ av namngivning 1664 01:22:38,040 --> 01:22:38,760 konvention. 1665 01:22:38,760 --> 01:22:42,570 Och det finns skillnader mellan kamel hölje variabler och precis som 1666 01:22:42,570 --> 01:22:44,610 separera dem med understreck. 1667 01:22:44,610 --> 01:22:52,170 Och dessutom, jag tror viktigast, liksom till exempel indrag, eller hur? 1668 01:22:52,170 --> 01:22:56,440 >> Vi klamrar börjar där tillståndet är, och de 1669 01:22:56,440 --> 01:22:57,730 finns på nästa rad. 1670 01:22:57,730 --> 01:23:01,230 Och vi också sätta klammerparenteserna i även om det är bara en rad. 1671 01:23:01,230 --> 01:23:06,100 Och många gånger, det finns sätt att göra den där du kan lämna dessa hängslen 1672 01:23:06,100 --> 01:23:08,380 av om det är endast en rad under Om uttalandet. 1673 01:23:08,380 --> 01:23:12,070 Men i denna klass, som vi vill följa en specifik stilguide bara så att du får 1674 01:23:12,070 --> 01:23:13,550 van vid sånt. 1675 01:23:13,550 --> 01:23:16,410 >> ROB: Ja, och Style 50 kommer att driva denna stilguide, och vi är 1676 01:23:16,410 --> 01:23:18,080 kommer att använda Style 50 till grad din kod. 1677 01:23:18,080 --> 01:23:25,150 Så det underlättar för oss och förhoppningsvis ska inte göra saker som 1678 01:23:25,150 --> 01:23:30,120 mycket värre för dig med tanke på standardiserad stil bör inte vara att 1679 01:23:30,120 --> 01:23:31,460 orealistiskt. 1680 01:23:31,460 --> 01:23:36,000 >> JOSEPH: Och slutligen, för att hitta den stil går du till manual.cs50.net/style. 1681 01:23:36,000 --> 01:23:37,725 Och ja. 1682 01:23:37,725 --> 01:23:40,575 >> SPEAKER 4: Kommer ni att genomdriva eventuella tecken per rad? 1683 01:23:40,575 --> 01:23:42,480 >> ROB: Ja. 1684 01:23:42,480 --> 01:23:45,405 >> JOSEPH: Tyvärr, killar. 1685 01:23:45,405 --> 01:23:47,680 >> ROB: Det är som en av de enda. 1686 01:23:47,680 --> 01:23:50,420 På denna punkt är jag OK med 120. 1687 01:23:50,420 --> 01:23:52,460 Jag är OK med att säga 120 tecken per rad. 1688 01:23:52,460 --> 01:23:53,830 Jag förstår att det finns någon gräns. 1689 01:23:53,830 --> 01:23:57,130 Jag tror att 80 är så liten, men vi genomdriva det. 1690 01:23:57,130 --> 01:24:00,260 >> JOSEPH: Personligen tror jag med C, 80 tecken är mer OK. 1691 01:24:00,260 --> 01:24:04,160 När du börjar få till andra språk som JavaScript och PHP, inte 1692 01:24:04,160 --> 01:24:08,860 så rimligt att bara begränsa den till 80 tecken. 1693 01:24:08,860 --> 01:24:09,260 OK. 1694 01:24:09,260 --> 01:24:12,780 Tja, det var super sektionen. 1695 01:24:12,780 --> 01:24:14,750 Finns det någon som vill ha godis? 1696 01:24:14,750 --> 01:24:16,000 >> SPEAKER 4: Ja. 1697 01:24:16,000 --> 01:24:18,667