1 00:00:00,000 --> 00:00:12,510 2 00:00:12,510 --> 00:00:13,870 >> ROB: Greit. 3 00:00:13,870 --> 00:00:16,770 Velkommen til den første delen. 4 00:00:16,770 --> 00:00:17,480 Jeg er Rob. 5 00:00:17,480 --> 00:00:18,806 >> JOSEPH: Jeg er Joseph. 6 00:00:18,806 --> 00:00:21,540 >> ROB: Så vi vil dykke rett i. 7 00:00:21,540 --> 00:00:23,420 Første ting å snakke om Er apparatet. 8 00:00:23,420 --> 00:00:27,150 Så forhåpentligvis de fleste av dere har lastet det ned allerede. 9 00:00:27,150 --> 00:00:37,180 Men du kan se instruksjonene på cs50.net/appliance. 10 00:00:37,180 --> 00:00:38,430 Å gud, nå er jeg sjenert. 11 00:00:38,430 --> 00:00:44,590 12 00:00:44,590 --> 00:00:45,430 Jeg kan fortsatt høre det. 13 00:00:45,430 --> 00:00:47,232 >> JOSEPH: Wow, høres det ut som det er desorientert. 14 00:00:47,232 --> 00:00:52,460 >> ROB: Så noen mennesker har hatt problemer med det, så ikke vent til 15 00:00:52,460 --> 00:00:54,940 i siste øyeblikk av problemet satt til prøve og løse Appliance og 16 00:00:54,940 --> 00:00:56,320 finne ut at det ikke fungerer. 17 00:00:56,320 --> 00:00:59,010 >> JOSEPH: Og hvis det er noe som ikke fungerer og du trenger hjelp, kan du gå til 18 00:00:59,010 --> 00:01:03,390 cs50.net/discussion hvor vi ha et forum hvor du 19 00:01:03,390 --> 00:01:04,110 kan legge inn spørsmål. 20 00:01:04,110 --> 00:01:06,655 Og vi vil komme til dem til slutt. 21 00:01:06,655 --> 00:01:07,490 >> ROB: Greit. 22 00:01:07,490 --> 00:01:12,180 Så dette er hva Appliance ser ut. 23 00:01:12,180 --> 00:01:15,480 Igjen, det er bare en helt egen operativsystem som kjører innenfor 24 00:01:15,480 --> 00:01:19,440 uansett hvilket operativsystem du kjører på din bærbare PC. 25 00:01:19,440 --> 00:01:24,450 Og de viktigste tingene du vil skal bruke er gedit. 26 00:01:24,450 --> 00:01:28,050 Så forhåpentligvis har allerede bli et kjent område. 27 00:01:28,050 --> 00:01:29,470 Terminalen. 28 00:01:29,470 --> 00:01:31,890 >> Og du kan også kjøre Chrome innenfor Appliance. 29 00:01:31,890 --> 00:01:33,860 Det har vært et par personer som har rapportert internett 30 00:01:33,860 --> 00:01:35,390 ikke jobbe i Appliance. 31 00:01:35,390 --> 00:01:38,090 Og noen av dem har bare antatt at det ikke er ment å bli 32 00:01:38,090 --> 00:01:39,190 Internett i Appliance. 33 00:01:39,190 --> 00:01:40,750 Men ja, er det ment å være internett. 34 00:01:40,750 --> 00:01:44,000 35 00:01:44,000 --> 00:01:46,410 >> Jeg vil si det akkurat nå, men det gjør ikke egentlig betyr noe. 36 00:01:46,410 --> 00:01:50,680 Hvis internett ikke fungerer, Dette er hva du pleier å trenge 37 00:01:50,680 --> 00:01:52,180 å kjøre for å fikse det. 38 00:01:52,180 --> 00:01:55,602 Hvis du har Internett-problemer, ikke husker det, bare legge det ut på 39 00:01:55,602 --> 00:01:57,560 Diskuter, og vi vil si, kjøre det. 40 00:01:57,560 --> 00:02:00,420 Men internett bør jobbe. 41 00:02:00,420 --> 00:02:06,650 >> Så den eneste andre ting - ja, ingenting annet er virkelig relevant. 42 00:02:06,650 --> 00:02:08,979 Men jeg ville bare påpeke at - 43 00:02:08,979 --> 00:02:13,290 se i denne nederste høyre hjørne. 44 00:02:13,290 --> 00:02:16,530 Så hver av dine apparater skal ha en IP-adresse. 45 00:02:16,530 --> 00:02:22,350 Og senere i semesteret, denne IP -postadresse vil bli mer aktuelt når 46 00:02:22,350 --> 00:02:27,230 du arbeider på nettet p-sett, fordi vil du være i stand til å få tilgang til 47 00:02:27,230 --> 00:02:32,310 nettsiden du jobber med fra din lokale Chrome ved hjelp av denne IP-adressen. 48 00:02:32,310 --> 00:02:35,400 >> Men det jeg liker å bruke IP-adressen for - og du trenger ikke å gjøre dette, jeg 49 00:02:35,400 --> 00:02:37,460 bare ønsker å peke det ut - 50 00:02:37,460 --> 00:02:39,540 er her. 51 00:02:39,540 --> 00:02:42,910 Så dette er et terminalvindu på min Mac, er dette ikke i 52 00:02:42,910 --> 00:02:44,580 Apparatet i det hele tatt. 53 00:02:44,580 --> 00:02:47,190 Og du kan se opp hva denne kommandoen gjør. 54 00:02:47,190 --> 00:02:51,855 Men jeg kommer til å SSH direkte til min Appliance. 55 00:02:51,855 --> 00:02:53,410 Jeg vet ikke hva IP er. 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 jeg er ferdig med dette, må du logge inn 59 00:02:59,950 --> 00:03:05,450 Nå, i utgangspunktet, er denne identisk med en terminalvindu innenfor mitt Appliance. 60 00:03:05,450 --> 00:03:10,280 Så jeg ganske mye faktisk aldri jobbet innenfra selve apparatet. 61 00:03:10,280 --> 00:03:12,550 Jeg bare alltid har den i gang i bakgrunnen minimert 62 00:03:12,550 --> 00:03:15,890 og SSHed inn i den. 63 00:03:15,890 --> 00:03:24,270 >> Problemet med dette er at du ikke kommer for å kunne bruke gedit lett 64 00:03:24,270 --> 00:03:25,600 direkte fra denne. 65 00:03:25,600 --> 00:03:31,500 Men hvis du ønsker å være en virkelig kul hacker, så bør du bli vant til et 66 00:03:31,500 --> 00:03:34,220 kommandolinje tekst editor uansett. 67 00:03:34,220 --> 00:03:39,620 Så Vim og Emacs og Nano, alle disse er forskjellige alternativer. 68 00:03:39,620 --> 00:03:41,560 Nano en tendens til å være den enkleste. 69 00:03:41,560 --> 00:03:45,006 Og jeg tror det har ingen syntax highlighting. 70 00:03:45,006 --> 00:03:47,620 Å, nei, det gjør det helt. 71 00:03:47,620 --> 00:03:49,870 Så du kan bruke Nano, fordi at man er ganske lett. 72 00:03:49,870 --> 00:03:52,000 >> Du ser alle disse kommandoene på bunnen. 73 00:03:52,000 --> 00:03:54,750 Denne lille gulrot symbol. 74 00:03:54,750 --> 00:03:57,620 Hvis du ikke har sett det før, vil du trolig se det mye nå. 75 00:03:57,620 --> 00:04:02,350 Det betyr som regel kontroll gulrot, som nederste venstre på tastaturet 76 00:04:02,350 --> 00:04:04,130 kontroll karakter. 77 00:04:04,130 --> 00:04:07,260 Så her er det forteller meg ned her - 78 00:04:07,260 --> 00:04:08,710 Å, det er ikke avskåret hvis jeg zoomer inn 79 00:04:08,710 --> 00:04:11,040 Så Control, er X hvordan Jeg kommer til å avslutte. 80 00:04:11,040 --> 00:04:14,710 Og det står jeg kan treffe Y for Ja, for sparing, N for Nei. 81 00:04:14,710 --> 00:04:17,190 Så det er Nano. 82 00:04:17,190 --> 00:04:22,860 >> Vim og Emacs har en tendens til å være litt mer komplisert og overveldende. 83 00:04:22,860 --> 00:04:28,840 Men du kan bli vant til det, og da vil du elske det. 84 00:04:28,840 --> 00:04:30,590 Så det er det. 85 00:04:30,590 --> 00:04:31,720 >> JOSEPH: Du trenger ikke å gjøre det. 86 00:04:31,720 --> 00:04:31,840 >> ROB: Yeah. 87 00:04:31,840 --> 00:04:37,510 Du står fritt til å bruke gedit for Resten av semesteret. 88 00:04:37,510 --> 00:04:40,630 Så noen apparatrelaterte spørsmål? 89 00:04:40,630 --> 00:04:42,820 Eller har du noen tanker om hva annet trenger å bli snakket om om 90 00:04:42,820 --> 00:04:43,610 apparatet? 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 inn ting, var passordet Crimson? 93 00:04:47,720 --> 00:04:48,390 >> ROB: Yeah. 94 00:04:48,390 --> 00:04:50,170 Passordet for stort sett alt i Appliance kommer 95 00:04:50,170 --> 00:04:52,473 å være Crimson. 96 00:04:52,473 --> 00:04:56,517 >> SPEAKER 2: Installer som en ekte IDE på apparatet, vil det fungere? 97 00:04:56,517 --> 00:04:59,200 98 00:04:59,200 --> 00:05:07,290 >> ROB: Jeg kan tenke meg Eclipse har en Fedora-versjonen, og i så fall, ja, 99 00:05:07,290 --> 00:05:08,420 du kan gjøre det. 100 00:05:08,420 --> 00:05:10,875 Det er nok egentlig ikke verdt det. 101 00:05:10,875 --> 00:05:11,742 >> SPEAKER 2: OK. 102 00:05:11,742 --> 00:05:15,924 Så det er nok lettere hvis jeg ønsket å bruke Eclipse, bare bruk den innfødte og 103 00:05:15,924 --> 00:05:17,646 så laste opp til - 104 00:05:17,646 --> 00:05:21,090 >> ROB: Åh, er det også trolig lettere. 105 00:05:21,090 --> 00:05:24,046 Men du kan få det til å fungere innenfor Appliance. 106 00:05:24,046 --> 00:05:27,740 >> JOSEPH: Og for kameraet, spørsmålet var, kan du installere en annen 107 00:05:27,740 --> 00:05:29,490 IDE innsiden av Appliance? 108 00:05:29,490 --> 00:05:31,520 >> ROB: Eclipse er en eksempel på en IDE. 109 00:05:31,520 --> 00:05:34,800 110 00:05:34,800 --> 00:05:36,050 Andre apparater spørsmål? 111 00:05:36,050 --> 00:05:38,250 112 00:05:38,250 --> 00:05:38,680 OK. 113 00:05:38,680 --> 00:05:44,920 >> Så vi vil nå gå videre til kommandolinjen grensesnitt-relaterte ting, så CLI. 114 00:05:44,920 --> 00:05:47,990 Og igjen, jeg bare kommer til å jobbe i her, fordi dette er identisk 115 00:05:47,990 --> 00:05:52,780 arbeider innenfor et terminalvindu innenfor Appliance. 116 00:05:52,780 --> 00:05:54,160 Hvordan er det skrift ute? 117 00:05:54,160 --> 00:05:55,970 Er det stort nok? 118 00:05:55,970 --> 00:05:57,000 OK. 119 00:05:57,000 --> 00:06:02,480 >> Så det er mange kommandoer som du bør bli ganske vant til 120 00:06:02,480 --> 00:06:04,490 gjennom hele semesteret. 121 00:06:04,490 --> 00:06:09,480 Den store to for å navigere er ls, liste filene i denne katalogen, og 122 00:06:09,480 --> 00:06:11,380 cd, så endre katalogen. 123 00:06:11,380 --> 00:06:18,390 Så jeg kan endre til skrivebordet og deretter en veldig vanlig mønster er cd til en 124 00:06:18,390 --> 00:06:22,550 katalog og umiddelbart ls hva er i katalogen. 125 00:06:22,550 --> 00:06:25,540 >> Folk også noen ganger ikke skjønner at Tab ferdigstillelse er en ting. 126 00:06:25,540 --> 00:06:28,370 Så ut som cd, vh, og da jeg traff Tab. 127 00:06:28,370 --> 00:06:30,790 Jeg nesten aldri skriver ut hele greia. 128 00:06:30,790 --> 00:06:32,920 Og så hvis jeg holder treffer Tab igjen, vil det automatisk 129 00:06:32,920 --> 00:06:33,670 starte oppføringen for meg. 130 00:06:33,670 --> 00:06:37,000 Så jeg kan ikke CD vhosts, lokale verten. 131 00:06:37,000 --> 00:06:39,880 Og det er bare å gå til - 132 00:06:39,880 --> 00:06:43,380 i tilfelle du ikke har hørt uttrykket før, er katalogen bare et annet ord 133 00:06:43,380 --> 00:06:45,170 for mappen. 134 00:06:45,170 --> 00:06:49,930 Så nå hvis du ser - 135 00:06:49,930 --> 00:06:51,810 la oss ta med at til toppen. 136 00:06:51,810 --> 00:06:55,380 >> Så nå hvis du ser i parentes, du se den lille tilde, slash, vhost, 137 00:06:55,380 --> 00:06:56,810 slash, lokale verten. 138 00:06:56,810 --> 00:07:00,040 Så tilde, refererer at til min hjemmekatalog. 139 00:07:00,040 --> 00:07:03,090 Det er en katalog du er i når du SSH i. 140 00:07:03,090 --> 00:07:05,660 Det er den katalogen du er i når du åpner opp en terminal. 141 00:07:05,660 --> 00:07:08,650 Det er der du starter. 142 00:07:08,650 --> 00:07:13,110 Og så er jeg inne i min hjemmekatalog, og jeg er inne i vhost 143 00:07:13,110 --> 00:07:14,475 katalogen innsiden av min hjemmekatalog. 144 00:07:14,475 --> 00:07:19,670 Og da er jeg inne i den lokale vert katalogen innsiden av det. 145 00:07:19,670 --> 00:07:23,740 >> Så noen andre nyttige ting med cd - 146 00:07:23,740 --> 00:07:29,220 eller godt, generelt, så dot alltid refererer til gjeldende katalog. 147 00:07:29,220 --> 00:07:31,130 Cd, er dot en ganske verdiløs kommando. 148 00:07:31,130 --> 00:07:35,150 Men det forandrer seg til gjeldende katalog. 149 00:07:35,150 --> 00:07:38,230 En mer nyttig en i form av cd er prikk, prikk, som er 150 00:07:38,230 --> 00:07:40,220 bare gå opp en katalog. 151 00:07:40,220 --> 00:07:43,360 >> Og merk at disse - 152 00:07:43,360 --> 00:07:48,610 Jeg ønsker å si aliaser, men disse symboler, prikk, og prikk, prikk, de som arbeidet 153 00:07:48,610 --> 00:07:51,740 for ganske mye noen kommando du er kommer til å tenke på å kjøre. 154 00:07:51,740 --> 00:07:55,370 Så ut som cd er sannsynligvis der du vil være ved hjelp av de fleste, men disse er ikke 155 00:07:55,370 --> 00:07:56,780 ting som bare cd forstår. 156 00:07:56,780 --> 00:07:59,980 Det er ganske mye noe hele kommandolinje forstår. 157 00:07:59,980 --> 00:08:01,932 En rekke programmer forstå prikk og prikk, prikk. 158 00:08:01,932 --> 00:08:04,830 159 00:08:04,830 --> 00:08:09,090 >> Så de andre nyttige seg - cd, dash. 160 00:08:09,090 --> 00:08:13,460 Så det kommer til å bringe meg til siste katalog som jeg var i. 161 00:08:13,460 --> 00:08:15,980 Så noen ganger vil jeg gjøre noe sånt, oh, jeg jobber her. 162 00:08:15,980 --> 00:08:21,110 Og jeg ser noen feil med noe, og Jeg skal gå undersøke det ved å gå til 163 00:08:21,110 --> 00:08:24,020 noen tilfeldige katalogen et sted. 164 00:08:24,020 --> 00:08:25,260 Og jeg vet ikke om det vil la meg i det. 165 00:08:25,260 --> 00:08:25,720 Det vil det. 166 00:08:25,720 --> 00:08:27,615 Så da jeg gjøre hva jeg vil i denne katalogen. 167 00:08:27,615 --> 00:08:28,950 Blah, blah, blah, blah, blah. 168 00:08:28,950 --> 00:08:31,770 Og jeg var som, all right, jeg vil å gå tilbake til der jeg var. 169 00:08:31,770 --> 00:08:34,490 cd, dash, og det bringer meg rett tilbake. 170 00:08:34,490 --> 00:08:39,970 >> Så jeg kommer til å kaste mye av disse på deg i dag. 171 00:08:39,970 --> 00:08:43,730 Jeg forventer ikke at du å huske alle. 172 00:08:43,730 --> 00:08:46,170 Det er slags bare vet at de eksisterer. 173 00:08:46,170 --> 00:08:48,690 Og så senere når du er som, hmm, jeg ønsker å gå tilbake til 174 00:08:48,690 --> 00:08:51,870 katalog som jeg var bare på, oh, vent, noe sånt eksisterer. 175 00:08:51,870 --> 00:08:53,980 Du trenger ikke å bare skrive inn hele katalogen på nytt. 176 00:08:53,980 --> 00:08:56,090 >> JOSEPH: Og til slutt vil du bare bruke dem om igjen og om igjen, og 177 00:08:56,090 --> 00:08:57,830 det vil bli muskel minne. 178 00:08:57,830 --> 00:09:00,090 >> ROB: Yeah. 179 00:09:00,090 --> 00:09:02,930 Så hvordan jeg sa tidligere, at tilde er hjemmekatalogen. 180 00:09:02,930 --> 00:09:04,820 Så jeg kan cd, tilde. 181 00:09:04,820 --> 00:09:07,280 Men jeg trenger ikke engang å gjøre det hvis jeg bare - 182 00:09:07,280 --> 00:09:09,760 Jeg skal gå tilbake til katalogen så det er ikke en meningsløs eksempel. 183 00:09:09,760 --> 00:09:14,560 Men hvis jeg bare gjøre cd, det er også den samme som, gå til min hjemmekatalog. 184 00:09:14,560 --> 00:09:18,380 185 00:09:18,380 --> 00:09:19,880 Jeg gjør Command, K. 186 00:09:19,880 --> 00:09:24,015 >> JOSEPH: Du kan også skrive klart, ord, og det bør klare det. 187 00:09:24,015 --> 00:09:28,650 >> ROB: Og jeg tror også Control, L gjør det også. 188 00:09:28,650 --> 00:09:29,690 Så mange forskjellige måter. 189 00:09:29,690 --> 00:09:34,070 Jeg tror det er noen forskjeller der klar og kontroll, L vil bare 190 00:09:34,070 --> 00:09:37,280 virkelig presse den til toppen og Jeg kan fortsatt rulle tilbake. 191 00:09:37,280 --> 00:09:40,580 Command, K bokstavelig talt ødelegger alt, og du 192 00:09:40,580 --> 00:09:42,960 kan ikke bla opp igjen. 193 00:09:42,960 --> 00:09:45,530 I det minste, det er hvordan det fungerer i iTerm2. 194 00:09:45,530 --> 00:09:48,690 Jeg vet ikke hvordan andre ting - 195 00:09:48,690 --> 00:09:49,360 oh. 196 00:09:49,360 --> 00:09:55,450 >> Med SSHing, så hvis du er på Windows, du er nødt til å laste ned PuTTY 197 00:09:55,450 --> 00:10:02,360 for å SSH siden Windows ikke ha som en innebygd SSH verktøyet. 198 00:10:02,360 --> 00:10:06,150 Fra Mac, kan du bare SSH direkte fra et terminalvindu. 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 Spørsmål? 202 00:10:11,840 --> 00:10:19,260 >> Med ls, så noe å bli vant til med de fleste av disse kommandoene er - 203 00:10:19,260 --> 00:10:20,060 vel, jeg skal bare gjøre én. 204 00:10:20,060 --> 00:10:21,310 Ls, dash, l. 205 00:10:21,310 --> 00:10:26,330 Så dash, l er hva vi skal å ringe et flagg til ls. 206 00:10:26,330 --> 00:10:30,770 Og mange av disse kommandoene har flagg at du kan gå over til dem. 207 00:10:30,770 --> 00:10:35,020 Så i dette tilfellet, er dash, l et flagg som forteller det til å gi meg en full 208 00:10:35,020 --> 00:10:37,850 oppføring av alle opplysninger av disse filene. 209 00:10:37,850 --> 00:10:44,790 >> Så vi ser her at skrivebordet var endret 30. juli kl 12:54. 210 00:10:44,790 --> 00:10:47,160 Nedlastinger ble endret 6. september. 211 00:10:47,160 --> 00:10:52,350 Dette er den nåværende størrelse og byte av disse katalogene. 212 00:10:52,350 --> 00:10:54,412 Du trenger ikke å forstå alt dette. 213 00:10:54,412 --> 00:11:00,380 >> Dette ting på venstre side, disse drwx tallet, som vil bli mye mer relevant 214 00:11:00,380 --> 00:11:02,290 senere når du har å forholde seg til - 215 00:11:02,290 --> 00:11:05,900 som har å gjøre med hvem som har tillatelse å se på disse filene. 216 00:11:05,900 --> 00:11:09,880 Og så hvis du ikke var den eneste brukeren på denne datamaskinen, vil du være i stand til 217 00:11:09,880 --> 00:11:13,345 si, OK, skal jeg være den eneste lov til å se på denne filen eller jeg er 218 00:11:13,345 --> 00:11:14,870 kommer til å tillate alle å se på denne filen. 219 00:11:14,870 --> 00:11:17,710 Så noen andre på min datamaskin kan se på denne filen. 220 00:11:17,710 --> 00:11:22,190 221 00:11:22,190 --> 00:11:25,600 Jeg vet ikke engang hva dette - hva betyr dette? 222 00:11:25,600 --> 00:11:26,840 >> JOSEPH: Jeg er ikke helt sikker, faktisk. 223 00:11:26,840 --> 00:11:27,705 >> ROB: Ingen anelse. 224 00:11:27,705 --> 00:11:30,530 >> JOSEPH: Men hvis du ikke vet, det er en nyttig kommando som du kan bruke 225 00:11:30,530 --> 00:11:31,680 å fortelle deg hva resultatet betyr. 226 00:11:31,680 --> 00:11:33,780 Og hvis du skriver i mennesket før kommandoen - 227 00:11:33,780 --> 00:11:35,000 slik at M-A-N. ROB: Man. 228 00:11:35,000 --> 00:11:37,690 Så mannen er en annen som er svært nyttig. 229 00:11:37,690 --> 00:11:39,540 Og mannen, ls. 230 00:11:39,540 --> 00:11:47,320 Så man-sidene, har de begge kommandoer som du skal bruke 231 00:11:47,320 --> 00:11:50,330 på kommandolinjen, og de har også funksjoner som vil være relevante 232 00:11:50,330 --> 00:11:52,530 med C. Så du kan mennesket - 233 00:11:52,530 --> 00:11:53,720 og jeg ignorert tre. 234 00:11:53,720 --> 00:11:57,410 Men mannen tre printf kommer til å bringe opp C-versjonen av printf. 235 00:11:57,410 --> 00:12:01,030 Men hvis jeg bare gjøre mennesket printf, er dette kommer til å få opp kommando printf 236 00:12:01,030 --> 00:12:03,540 som skjer på kommandolinjen. 237 00:12:03,540 --> 00:12:05,730 >> Så mann, ls. 238 00:12:05,730 --> 00:12:09,030 Man-sidene kan være ganske overveldende. 239 00:12:09,030 --> 00:12:12,770 Her, men vil du se denne oppføringen av alle disse flaggene som ls 240 00:12:12,770 --> 00:12:14,300 forstår. 241 00:12:14,300 --> 00:12:17,876 Så hvis vi går til dash, l, og - 242 00:12:17,876 --> 00:12:19,300 Jeg kommer bare til å kaste dette på deg. 243 00:12:19,300 --> 00:12:23,050 Men for å søke, vil du først treffe spørsmålet 244 00:12:23,050 --> 00:12:24,780 mark eller slash-knappen. 245 00:12:24,780 --> 00:12:26,040 Så slash. 246 00:12:26,040 --> 00:12:29,000 >> Og så kan jeg søke for hva jeg vil. 247 00:12:29,000 --> 00:12:33,780 Så jeg kommer til å kutte for dash, l. 248 00:12:33,780 --> 00:12:35,110 Og det var det. 249 00:12:35,110 --> 00:12:37,450 Så bruk en lang liste format. 250 00:12:37,450 --> 00:12:40,060 Det hjelper ikke meg å finne ut hva den aktuelle kolonnen mente, men jeg 251 00:12:40,060 --> 00:12:44,480 anta et sted i her det ville forklare det. 252 00:12:44,480 --> 00:12:48,740 Så bruker man sidene for enhver kommando at du ikke umiddelbart forstår. 253 00:12:48,740 --> 00:12:51,080 >> Jeg er ganske sikker på at du kan til og med mann, mann. 254 00:12:51,080 --> 00:12:53,070 Et grensesnitt til den elektroniske referansehåndbøker. 255 00:12:53,070 --> 00:12:57,700 256 00:12:57,700 --> 00:13:03,570 Oh, en siste en som er kanskje litt relevant er ls, dash, en. 257 00:13:03,570 --> 00:13:08,490 Så merke hvis jeg bare gjøre ls, Jeg får disse fem filer. 258 00:13:08,490 --> 00:13:11,480 Hvis jeg gjør ls, dash, en, jeg får mye flere filer. 259 00:13:11,480 --> 00:13:15,350 Så ting til felles mellom alle disse nye filer er prikken på forhånd. 260 00:13:15,350 --> 00:13:21,220 >> Så konvensjonen er at en fil som begynner med en prikk er skjult. 261 00:13:21,220 --> 00:13:25,300 Så du ikke ønsker å se denne filen, du ønsker ikke å ha det rotet med 262 00:13:25,300 --> 00:13:26,750 katalogoppføring. 263 00:13:26,750 --> 00:13:30,020 Det er bare når du eksplisitt be, all right, ls, dash, en, vis meg. 264 00:13:30,020 --> 00:13:32,830 Den en står for alle filer, inkludert skjulte seg. 265 00:13:32,830 --> 00:13:37,260 266 00:13:37,260 --> 00:13:39,270 Så noen andre kommandoer. 267 00:13:39,270 --> 00:13:41,323 Oh, spørsmål på dette punktet? 268 00:13:41,323 --> 00:13:41,746 Ja. 269 00:13:41,746 --> 00:13:45,914 >> SPEAKER 3: Når du gjør ls, en, hva er prikk, prikk? 270 00:13:45,914 --> 00:13:46,870 >> ROB: Oh. 271 00:13:46,870 --> 00:13:48,780 Så dette er hva jeg snakket om. 272 00:13:48,780 --> 00:13:50,890 Det er det samme hvor Jeg kan gjerne cd, prikk, prikk. 273 00:13:50,890 --> 00:13:56,790 Så teknisk sett prikk og prikk, prikk er filer som finnes i hver enkelt 274 00:13:56,790 --> 00:14:03,620 katalogen der dot filen refererer til gjeldende katalog. 275 00:14:03,620 --> 00:14:06,930 Så hvis jeg cd, prikk, jeg bare går å bo i katalogen. 276 00:14:06,930 --> 00:14:10,870 Og prikk, refererer alltid prikk til forrige katalogen ett nivå opp. 277 00:14:10,870 --> 00:14:18,200 Så hvis jeg går inn logger og ls, dash, al, Jeg skal se prikk, prikk. cd til prikk, prikk 278 00:14:18,200 --> 00:14:20,390 bringer meg til den forrige katalogen. 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 annen ganske viktig kommandoen rm. 284 00:14:33,070 --> 00:14:35,650 Så det er det vi skal å bruke til å fjerne. 285 00:14:35,650 --> 00:14:38,100 Og la meg faktisk gjøre en annen kommando først. 286 00:14:38,100 --> 00:14:39,610 Så mkdir. 287 00:14:39,610 --> 00:14:42,770 Mkdir er hvordan du kan opprette kataloger. 288 00:14:42,770 --> 00:14:47,530 Og jeg vil opprette en midlertidig katalog og gå inn i den midlertidige katalogen. 289 00:14:47,530 --> 00:14:49,590 Og som forventet, er det tomt. 290 00:14:49,590 --> 00:14:53,680 Men hvis jeg ls, dash, en, jeg har fortsatt prikk og prikk, prikk, fordi dot refererer til 291 00:14:53,680 --> 00:14:54,480 gjeldende katalog. 292 00:14:54,480 --> 00:14:56,170 Og dot refererer prikk til forrige katalogen. 293 00:14:56,170 --> 00:14:58,700 Og de vil alltid eksistere uansett katalogen du er i. 294 00:14:58,700 --> 00:15:01,910 295 00:15:01,910 --> 00:15:09,010 >> Og dette er et helt unødvendig kommando, men touch. 296 00:15:09,010 --> 00:15:11,880 Jeg bare bruker det, fordi det er en enkel måte å opprette filer. 297 00:15:11,880 --> 00:15:16,180 Så ta på en, berører b, berøre c er bare kommer til å lage tre filer som kalles en, 298 00:15:16,180 --> 00:15:17,845 b og c som er helt tom. 299 00:15:17,845 --> 00:15:20,450 300 00:15:20,450 --> 00:15:24,980 Så poenget med meg å lage de i første omgang er bare slik at rm er 301 00:15:24,980 --> 00:15:26,250 hvordan vi kan fjerne dem. 302 00:15:26,250 --> 00:15:27,850 Så rm, en. 303 00:15:27,850 --> 00:15:30,960 Det kommer til å spørre meg, fjern vanlig tom fil en? 304 00:15:30,960 --> 00:15:33,170 Og så vil jeg si ja. 305 00:15:33,170 --> 00:15:39,090 >> Så hvis jeg vet at jeg ønsker å slette filen uten å bli 306 00:15:39,090 --> 00:15:44,500 bedt om det, fjerner regelmessig tom fil?, deretter rm, dash, f kommer til å være det 307 00:15:44,500 --> 00:15:48,230 flagg som sier, tvinge fjerne uten selv å spørre meg, oh, er du 308 00:15:48,230 --> 00:15:49,710 sikker på at du vil slette filen? 309 00:15:49,710 --> 00:15:50,810 Ja, jeg er sikker. 310 00:15:50,810 --> 00:15:56,050 Så rm, dash, fb vil bare gjøre det uten å spørre. 311 00:15:56,050 --> 00:15:57,950 >> Så la oss gjøre noen flere kataloger. 312 00:15:57,950 --> 00:16:03,670 mkdir, TMP2, cd, TMP2, berøre en, berøring b. 313 00:16:03,670 --> 00:16:04,300 OK. 314 00:16:04,300 --> 00:16:08,180 Så nå ønsker jeg å fjerne 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 ikke fjerne TMP2, det er en katalog. 317 00:16:12,920 --> 00:16:21,370 Så problemet her er at rm ikke umiddelbart arbeidet på kataloger. 318 00:16:21,370 --> 00:16:26,530 Det er bare ment for filer som non-katalogfiler. 319 00:16:26,530 --> 00:16:30,800 >> Og så hva vi kan gjøre her er rm, dash, r. 320 00:16:30,800 --> 00:16:35,160 Som står for rekursivt, som kanskje ikke bety noe for deg ennå. 321 00:16:35,160 --> 00:16:38,280 Men når du kommer til rekursjon, det vil bety mer. 322 00:16:38,280 --> 00:16:43,540 Så rm, dash, r, TMP2 kommer til å rekursivt gå inn i den katalogen. 323 00:16:43,540 --> 00:16:45,540 Så ned i katalogen TMP2? 324 00:16:45,540 --> 00:16:47,330 Ja, la oss gå inn på det. 325 00:16:47,330 --> 00:16:49,360 Ønsker vi å fjerne TMP2 / a? 326 00:16:49,360 --> 00:16:49,745 Ja. 327 00:16:49,745 --> 00:16:51,830 Ønsker vi å fjerne TMP2 / b? 328 00:16:51,830 --> 00:16:52,840 Ja. 329 00:16:52,840 --> 00:16:55,170 Nå ønsker vi å fjerne katalogen TMP2? 330 00:16:55,170 --> 00:16:56,040 Ja. 331 00:16:56,040 --> 00:16:58,410 Og så nå katalogen og alt inni 332 00:16:58,410 --> 00:16:59,660 av den har blitt fjernet. 333 00:16:59,660 --> 00:17:02,850 334 00:17:02,850 --> 00:17:07,250 >> Det er teknisk sett en kommando rmdir som du kan bruke til å fjerne 335 00:17:07,250 --> 00:17:11,670 kataloger, men det fungerer bare på tomme mapper uansett. 336 00:17:11,670 --> 00:17:14,109 Og for å se det, la oss bare gjøre mkdir, TMP2 igjen. 337 00:17:14,109 --> 00:17:15,940 TMP2, berører en. 338 00:17:15,940 --> 00:17:16,800 OK. 339 00:17:16,800 --> 00:17:22,770 Så hvis jeg prøver å fjerne dirtmp2, det vil si, katalogen ikke er tom. 340 00:17:22,770 --> 00:17:29,540 Så jeg ganske mye aldri bruke remove dir kommandoen uansett, fordi rm, dash, 341 00:17:29,540 --> 00:17:35,140 r vil fungere på tomme mapper og ikke-tomme kataloger. 342 00:17:35,140 --> 00:17:37,760 >> Og også, hvis jeg ikke ønsker å ha til gå gjennom at hele prosessen med 343 00:17:37,760 --> 00:17:40,720 synkende i katalogen og fjerne hver enkelt fil, rm, 344 00:17:40,720 --> 00:17:44,190 dash, rf, TMP2. 345 00:17:44,190 --> 00:17:45,670 Og nå er det borte. 346 00:17:45,670 --> 00:17:51,220 >> Noe å være forsiktig om er rm, dash, rf. 347 00:17:51,220 --> 00:17:53,660 Og det skremmer meg å selv skrive det, fordi hvis jeg ved et uhell 348 00:17:53,660 --> 00:17:55,090 trykk Enter eller noe. 349 00:17:55,090 --> 00:18:02,735 Så rm, dash, rf, tilde ville, uten spørre meg, vil ikke f ber ikke 350 00:18:02,735 --> 00:18:05,670 meg, vil det automatisk fjerne Hele min hjemmekatalog og 351 00:18:05,670 --> 00:18:06,780 alt i den. 352 00:18:06,780 --> 00:18:11,460 Så du tror kanskje det er en dum ting å gjøre. 353 00:18:11,460 --> 00:18:12,830 Og godt er det. 354 00:18:12,830 --> 00:18:18,600 >> Men det kan skje veldig enkelt ved ulykke om, sier jeg ønsket å fjerne 355 00:18:18,600 --> 00:18:21,640 min slash, vhost katalog. 356 00:18:21,640 --> 00:18:26,610 Og akkurat i rask typing, Jeg tilfeldigvis gjør dette. 357 00:18:26,610 --> 00:18:31,880 Som vil fjerne rekursivt både min filområde og vhost katalogen 358 00:18:31,880 --> 00:18:35,450 i dette bestemte katalogen som bare skjer ikke eksisterer akkurat nå. 359 00:18:35,450 --> 00:18:39,520 Men dette vil likevel fjerne Hele min hjemmekatalog. 360 00:18:39,520 --> 00:18:43,090 Minst ved ikke å ha en f, det ville spørre meg først. 361 00:18:43,090 --> 00:18:45,670 Og jeg vil være som, oh, nei, jeg ønsker ikke å gjøre det. 362 00:18:45,670 --> 00:18:50,570 Men folk, slash, inkludert meg har en tendens til å komme inn i 363 00:18:50,570 --> 00:18:53,090 vane å alltid rf-ing. 364 00:18:53,090 --> 00:18:58,713 Selv vanlige filer som jeg kan bare RM, c, jeg har en tendens til å bare rm, dash, rf, c. 365 00:18:58,713 --> 00:19:01,330 Bare vær forsiktig når du er rf-ing. 366 00:19:01,330 --> 00:19:03,160 >> SPEAKER 4: Hva gjør C gjøre? 367 00:19:03,160 --> 00:19:11,570 >> ROB: C er jeg snakker om at C-fil i denne katalogen, som rm, c. 368 00:19:11,570 --> 00:19:15,730 >> JOSEPH: Og mer farlig, hvis du bruker en stjerne, refererer det til alt i 369 00:19:15,730 --> 00:19:16,450 katalogen. 370 00:19:16,450 --> 00:19:20,040 Så det jeg vanligvis pleier å gjøre, er jeg vil gå inn i en katalog, og jeg ønsker å 371 00:19:20,040 --> 00:19:21,510 fjerne alle filene i det. 372 00:19:21,510 --> 00:19:23,640 Så rm, dash, rf, stjerne. 373 00:19:23,640 --> 00:19:25,700 >> ROB: Yeah. 374 00:19:25,700 --> 00:19:26,780 Rm, dash, rf, stjerne. 375 00:19:26,780 --> 00:19:29,530 >> JOSEPH: Og hvis du ikke er forsiktig hvilken katalog du er i - 376 00:19:29,530 --> 00:19:33,340 Jeg var ikke i temp, men jeg var et uhell i min hjemmekatalog, 377 00:19:33,340 --> 00:19:35,450 så skal jeg fjerne alt i min hjemmekatalog. 378 00:19:35,450 --> 00:19:39,095 Og jeg har faktisk gjort det før, og Jeg tror du har gjort dette før eller 379 00:19:39,095 --> 00:19:40,640 Jay har gjort det før. 380 00:19:40,640 --> 00:19:42,480 >> ROB: Jeg har ved et uhell fjernet - 381 00:19:42,480 --> 00:19:44,480 så overse at kommandoen for en bit. 382 00:19:44,480 --> 00:19:45,800 >> JOSEPH: Ikke morsomt. 383 00:19:45,800 --> 00:19:52,650 >> ROB: Så i skråstreken bin katalogen er en haug av binære filer der det vil 384 00:19:52,650 --> 00:19:54,840 være kjent seg som klang. 385 00:19:54,840 --> 00:20:00,740 Vel, klang og i utgangspunktet alle disse ting som jeg kjører på kommando 386 00:20:00,740 --> 00:20:02,060 linjen er i denne slash bin katalogen. 387 00:20:02,060 --> 00:20:03,090 >> JOSEPH: Som ls er i her. 388 00:20:03,090 --> 00:20:06,285 >> ROB: Så prikk, slash, ls ville liste denne katalogen. 389 00:20:06,285 --> 00:20:08,120 >> JOSEPH: Rm er også i denne katalogen. 390 00:20:08,120 --> 00:20:12,770 >> ROB: Jeg har ved et uhell rm, rf-ed bin, som fjernet enhver kommando jeg kunne 391 00:20:12,770 --> 00:20:14,380 muligens noensinne vil ha. 392 00:20:14,380 --> 00:20:18,085 Som da jeg bare installere en ny Appliance på det tidspunktet. 393 00:20:18,085 --> 00:20:20,170 >> JOSEPH: Så vær veldig forsiktig når du bruker denne kommandoen. 394 00:20:20,170 --> 00:20:21,120 >> PUBLIKUM: [uhørbart]? 395 00:20:21,120 --> 00:20:22,640 >> ROB: Ja. 396 00:20:22,640 --> 00:20:24,135 Det er også en dårlig vane å komme inn. 397 00:20:24,135 --> 00:20:27,920 398 00:20:27,920 --> 00:20:30,170 Hvis du legger merke til, er jeg nå - 399 00:20:30,170 --> 00:20:33,580 vel, kan du ikke legge merke til, men min zoom-in kanskje kan. 400 00:20:33,580 --> 00:20:35,360 Så jeg er nå root @ apparatet. 401 00:20:35,360 --> 00:20:39,790 Så jharvard er brukeren vi ønsker du alltid skal bruke. 402 00:20:39,790 --> 00:20:43,820 Root er brukeren som har tillatelse å gjøre absolutt alt. 403 00:20:43,820 --> 00:20:50,260 >> Så legger merke til når jeg er jharvard, hvis jeg prøver å cd - 404 00:20:50,260 --> 00:20:52,461 hva er en katalog som? 405 00:20:52,461 --> 00:20:53,980 Oh, er roten et godt eksempel. 406 00:20:53,980 --> 00:20:54,950 Så cd, rot. 407 00:20:54,950 --> 00:20:56,030 Tillatelse nektet. 408 00:20:56,030 --> 00:21:00,060 Fordi hvis vi ser på denne nettsiden - 409 00:21:00,060 --> 00:21:02,410 og igjen, trenger du ikke å helt forstå dette. 410 00:21:02,410 --> 00:21:09,210 Men disse tre streker sier som ikke la noen andre 411 00:21:09,210 --> 00:21:11,120 brukeren inn i denne katalogen. 412 00:21:11,120 --> 00:21:14,540 Og katalogen skjer med være eid av brukeren root. 413 00:21:14,540 --> 00:21:20,310 >> Så det faktum at jeg er jharvard og ingen en som ikke er roten er tillatt i 414 00:21:20,310 --> 00:21:23,490 denne katalogen, det betyr at jeg er kommer til å få tillatelse nektes når jeg 415 00:21:23,490 --> 00:21:25,160 prøv å cd inn i den. 416 00:21:25,160 --> 00:21:31,370 Så når jeg er root, jeg har tillatelse til å gjøre absolutt alt, inkludert 417 00:21:31,370 --> 00:21:34,660 slette viktige filer til Appliance og 418 00:21:34,660 --> 00:21:36,640 ødelegge hele greia. 419 00:21:36,640 --> 00:21:41,240 >> Så det er en dårlig vane å komme inn bare vandre rundt 420 00:21:41,240 --> 00:21:43,650 operativsystem som root. 421 00:21:43,650 --> 00:21:46,520 Jeg gjør det likevel. 422 00:21:46,520 --> 00:21:48,710 Spørsmål? 423 00:21:48,710 --> 00:21:52,230 Og jeg vil avslutte rot, opphold som jharvard. 424 00:21:52,230 --> 00:21:54,510 OK. 425 00:21:54,510 --> 00:21:55,820 >> Mer relevante kommandoer. 426 00:21:55,820 --> 00:22:03,975 Så kommer tilbake til vår temp, den MV kommandoen står for flyttingen. 427 00:22:03,975 --> 00:22:05,450 Du kan flytte en. 428 00:22:05,450 --> 00:22:07,610 Nå ønsker vi å kalle det b, så nå er det som kalles b. 429 00:22:07,610 --> 00:22:10,650 Eller kanskje vi ønsker å flytte b opp en katalog. 430 00:22:10,650 --> 00:22:12,730 Så nå denne katalogen er tom. 431 00:22:12,730 --> 00:22:15,410 Jeg skal gå tilbake til min hjemmekatalog, og vi ser at b er i her, fordi 432 00:22:15,410 --> 00:22:19,230 hjemmekatalog var en mappe opp fra katalogen som b hadde vært i. 433 00:22:19,230 --> 00:22:24,710 434 00:22:24,710 --> 00:22:26,580 >> Det er også cp. 435 00:22:26,580 --> 00:22:33,210 Så cp er kopiere super-delen, prikk, tekst. 436 00:22:33,210 --> 00:22:35,750 Jeg kan kalle det er, prikk, tekst. 437 00:22:35,750 --> 00:22:39,780 Nå har vi både super-delen, prikk, tekst, og s, prikk, tekst. 438 00:22:39,780 --> 00:22:41,340 Dette fungerer også på kataloger. 439 00:22:41,340 --> 00:22:44,040 440 00:22:44,040 --> 00:22:46,560 Jeg rf-ed en enkelt fil. 441 00:22:46,560 --> 00:22:48,200 Så cp - 442 00:22:48,200 --> 00:22:51,710 vel, først la oss prøve cp, tmp, TMP2. 443 00:22:51,710 --> 00:22:53,220 Så utelate katalogen tmp. 444 00:22:53,220 --> 00:22:57,440 Så lik rm, standard oppførsel er å ikke jobbe på kataloger. 445 00:22:57,440 --> 00:23:01,570 >> Og igjen, i likhet med rm, standard adferd - vel, få det til å fungere 446 00:23:01,570 --> 00:23:04,230 med kataloger er en, dash-r unna. 447 00:23:04,230 --> 00:23:09,240 Så kopiere rekursivt temp katalog i TMP2. 448 00:23:09,240 --> 00:23:13,700 Og så nå har vi både tmp og TMP2, og det er ikke så nyttig siden tmp 449 00:23:13,700 --> 00:23:16,814 var tom i første omgang. 450 00:23:16,814 --> 00:23:18,660 TMP2. 451 00:23:18,660 --> 00:23:22,680 >> Nå la oss kopiere tmp inn TMP2. 452 00:23:22,680 --> 00:23:27,900 Og vi ser at TMP2 har også filen en, fordi katalogen og 453 00:23:27,900 --> 00:23:32,220 alt innsiden av det katalogen ble kopiert. 454 00:23:32,220 --> 00:23:36,000 Og det kan være noe nyttig hvis, sier du jobber 455 00:23:36,000 --> 00:23:38,860 på oppgavesettet ett - 456 00:23:38,860 --> 00:23:41,320 eller faktisk, senere problem sett er enda viktigere, fordi det 457 00:23:41,320 --> 00:23:43,660 vil være en hel haug av filer og ting. 458 00:23:43,660 --> 00:23:47,010 >> Men du bare vil, for en splitt andre, du liker, all right, jeg er 459 00:23:47,010 --> 00:23:50,210 kommer til å prøve noe annerledes. 460 00:23:50,210 --> 00:23:57,860 La meg bare kopiere hele mitt pset1 katalog i pset1 backup slik at hvis 461 00:23:57,860 --> 00:24:01,490 Jeg ender opp med å skru opp ting, jeg kan gå tilbake til min backup-katalogen. 462 00:24:01,490 --> 00:24:07,340 Det er mer hensiktsmessige måter å versjons sikkerhetskopiering koden din, men 463 00:24:07,340 --> 00:24:10,610 Dette er alltid en rask måte å bare gjøre at du har en kopi av noe 464 00:24:10,610 --> 00:24:11,860 at du er i ferd med å endre. 465 00:24:11,860 --> 00:24:16,974 466 00:24:16,974 --> 00:24:27,090 >> Så ekko er også en one-off kommando som slags sillily vil bare skrive ut til 467 00:24:27,090 --> 00:24:31,540 kommandolinje nøyaktig hva du ønsket å ekko. 468 00:24:31,540 --> 00:24:32,680 Så ekko hi. 469 00:24:32,680 --> 00:24:35,420 Vi vil bare skrive hei. 470 00:24:35,420 --> 00:24:38,030 Echo hello world. 471 00:24:38,030 --> 00:24:39,800 Vi vil skrive ut hello world. 472 00:24:39,800 --> 00:24:44,350 Som kommer i bruk når du begynne å kombinere kommandoer. 473 00:24:44,350 --> 00:24:48,300 >> Og igjen, ikke forvent deg til helt forstår dette ennå, men det er 474 00:24:48,300 --> 00:24:49,910 noe å se. 475 00:24:49,910 --> 00:24:52,470 Og så hvis du Googling for eksempler eller du innser at du ønsker å gjøre 476 00:24:52,470 --> 00:24:55,030 noe, kan det være nyttig. 477 00:24:55,030 --> 00:24:59,020 Så la oss, som et eksempel, så ls, dash, l. 478 00:24:59,020 --> 00:25:01,160 Så her ser jeg resultatet av ls, dash, l. 479 00:25:01,160 --> 00:25:06,560 Og jeg sier, OK, jeg ønsker å lagre det i en fil. 480 00:25:06,560 --> 00:25:11,620 Alt dette produksjonen her, jeg vil ha å sette inn i en egen fil. 481 00:25:11,620 --> 00:25:16,080 >> Så dette litt større enn symbol er hva vi kommer til å ringe. 482 00:25:16,080 --> 00:25:18,570 Vi omdirigere utgang til en fil. 483 00:25:18,570 --> 00:25:21,680 La oss kalle filen blah, fordi det er hva jeg pleier alltid å kalle det. 484 00:25:21,680 --> 00:25:26,430 Så nå ser vi at vi har en fil blah akkurat her. 485 00:25:26,430 --> 00:25:30,270 Og hvis jeg åpner den opp, vil jeg se det er nøyaktig output fra kommandoen 486 00:25:30,270 --> 00:25:31,990 at jeg bare løp. 487 00:25:31,990 --> 00:25:36,020 Og på samme måte, kan du - 488 00:25:36,020 --> 00:25:41,260 hvis dette var utgang til en fil, denne er få innspill fra en fil. 489 00:25:41,260 --> 00:25:45,790 490 00:25:45,790 --> 00:25:47,050 Hva er en kommando som jeg - 491 00:25:47,050 --> 00:25:49,620 >> JOSEPH: Jeg tror du kan bruke mindre eller mer, sannsynligvis. 492 00:25:49,620 --> 00:25:53,031 >> ROB: Men hva med bare mindre blah? 493 00:25:53,031 --> 00:25:53,930 Jeg vet ikke. 494 00:25:53,930 --> 00:25:57,870 Hvis du kommer inn i dette scenariet, som det er psets at det er nyttig for. 495 00:25:57,870 --> 00:25:59,950 >> JOSEPH: Du kan rør det inn i ekko. 496 00:25:59,950 --> 00:26:02,920 Pipe filen til ekko for å se det. 497 00:26:02,920 --> 00:26:04,060 >> ROB: Det er rør. 498 00:26:04,060 --> 00:26:04,860 >> JOSEPH: Beklager. 499 00:26:04,860 --> 00:26:06,190 >> ROB: Greit. 500 00:26:06,190 --> 00:26:12,720 Så dette er utgang til en fil. 501 00:26:12,720 --> 00:26:18,700 Dette er få teksten fra filen og overlate den til programmet. 502 00:26:18,700 --> 00:26:20,560 Og du vil også se denne fyren. 503 00:26:20,560 --> 00:26:24,410 Så dette er slags gjøre begge deler på en gang. 504 00:26:24,410 --> 00:26:28,310 Og faktisk, vil jeg presentere to nye kommandoer bare for å gjøre bruk av den. 505 00:26:28,310 --> 00:26:33,060 >> Historien er en hendig kommando som er bare kommer til å skrive ut en liste over 506 00:26:33,060 --> 00:26:34,940 noe jeg noensinne har kjørt en kommandolinje. 507 00:26:34,940 --> 00:26:38,290 Så vi ser her alt som jeg har vært i gang hele denne tiden. 508 00:26:38,290 --> 00:26:39,540 Masse ls tallet. 509 00:26:39,540 --> 00:26:41,570 510 00:26:41,570 --> 00:26:48,470 >> Og en annen nyttig kommando er grep som dens formål er å søke over 511 00:26:48,470 --> 00:26:52,060 tekst på jakt etter mønstre, vel, på jakt etter hva du 512 00:26:52,060 --> 00:26:53,310 vil at den skal se etter. 513 00:26:53,310 --> 00:26:59,770 Og så en praktisk bruk her er, si vi ønsker å ta tak i historien. 514 00:26:59,770 --> 00:27:03,860 Og jeg ønsker å se etter kommandoene der jeg - hva er en 515 00:27:03,860 --> 00:27:05,000 nyttig en skal se etter? 516 00:27:05,000 --> 00:27:06,898 >> JOSEPH: [uhørbart]? 517 00:27:06,898 --> 00:27:09,710 >> ROB: Eller la oss bare se for alle berører, uansett grunn. 518 00:27:09,710 --> 00:27:13,850 Så dette er hva det vil se ut. 519 00:27:13,850 --> 00:27:15,560 Og du trenger ikke å fullstendig forstå det. 520 00:27:15,560 --> 00:27:20,570 Men ideen er her, er historie gir samme effekt som den gjorde her 521 00:27:20,570 --> 00:27:25,030 hvor det er å skrive ut hele Historien om alt jeg noensinne har kjørt. 522 00:27:25,030 --> 00:27:27,030 Vi er så passerer det - 523 00:27:27,030 --> 00:27:30,230 så i stedet for å skrive den ut på skjermen, vi ønsker å gi denne til 524 00:27:30,230 --> 00:27:34,640 Kommandoen grep som er på jakt etter alle forekomster av ordet berøring. 525 00:27:34,640 --> 00:27:40,280 >> Og så bruker denne kombinasjonen av verktøy historie og grep, kan jeg se, OK, 526 00:27:40,280 --> 00:27:44,820 her er alle kommandoene jeg noensinne kjøre, og her er noe vanlig en. 527 00:27:44,820 --> 00:27:45,510 Vi er på bunnen. 528 00:27:45,510 --> 00:27:47,930 Og det er også noe som gir meg kommandoen Jeg bare løp som hadde 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 er en ganske nyttig ting for å kombinere flere programmer. 531 00:27:58,500 --> 00:28:04,670 Og faktisk, det er en snarvei for la meg utgangs historie til fil blah, og 532 00:28:04,670 --> 00:28:10,190 la meg grep'e bruker filen blah så det jeg ønsker å se over. 533 00:28:10,190 --> 00:28:13,460 Så røret er bare en snarvei for de to kommandoer. 534 00:28:13,460 --> 00:28:13,950 Ja. 535 00:28:13,950 --> 00:28:15,306 >> SPEAKER 4: [uhørbart]? 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 Hva er - 539 00:28:21,110 --> 00:28:21,858 Oh. 540 00:28:21,858 --> 00:28:24,820 La oss teste. 541 00:28:24,820 --> 00:28:29,170 Så katt, hund, fisk. 542 00:28:29,170 --> 00:28:33,770 Så jeg ønsker å grep'e. 543 00:28:33,770 --> 00:28:37,680 Dash, r, igjen, kommer til å være rekursivt, så jeg ønsker å stige ned 544 00:28:37,680 --> 00:28:38,870 alle kataloger. 545 00:28:38,870 --> 00:28:43,210 Jeg ønsker å rekursivt grep for alle - og la meg midlertidig få 546 00:28:43,210 --> 00:28:44,460 dette ut av veien. 547 00:28:44,460 --> 00:28:48,650 548 00:28:48,650 --> 00:28:50,740 Ignorer meg. 549 00:28:50,740 --> 00:28:51,360 OK. 550 00:28:51,360 --> 00:28:56,740 >> Så jeg ønsker å midlertidig grep for alle forekomster av ordet fisk. 551 00:28:56,740 --> 00:29:00,510 Og så her er hva jeg gjør er grepping rekursivt for ordet fisk. 552 00:29:00,510 --> 00:29:05,410 Og stjerne betyr at over alle disse filene i denne katalogen. 553 00:29:05,410 --> 00:29:08,930 Og så det ga meg en Permission Denied, fordi det ikke er lov til å lese det 554 00:29:08,930 --> 00:29:10,060 bestemt fil. 555 00:29:10,060 --> 00:29:14,040 Men det finnes fisk i filen, test. 556 00:29:14,040 --> 00:29:18,450 >> Jeg kan også si, spesielt, bare jeg ønsker å se i filen blah, i 557 00:29:18,450 --> 00:29:19,580 hvilket tilfelle det ikke vil finne noe. 558 00:29:19,580 --> 00:29:20,990 Jeg bare ønsker å se i filen, test. 559 00:29:20,990 --> 00:29:22,240 Det vil finne fisk. 560 00:29:22,240 --> 00:29:25,980 561 00:29:25,980 --> 00:29:29,260 Det er en ganske nyttig kommando å vite generelt. 562 00:29:29,260 --> 00:29:31,640 Det er noen alternativer til GREP som er ment å være mer 563 00:29:31,640 --> 00:29:36,780 programmerer vennlig, men jeg har en tendens å fortsatt falle tilbake på grep. 564 00:29:36,780 --> 00:29:38,030 Spørsmål? 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 >> Er det andre kommandoer? 568 00:29:42,520 --> 00:29:45,270 Oh. 569 00:29:45,270 --> 00:29:48,370 Bare en one-off en som jeg alltid finne for å være morsomt er cal. 570 00:29:48,370 --> 00:29:55,610 Så legger merke til når jeg er i denne herlige fullskjermmodus, har jeg ingen som topp 571 00:29:55,610 --> 00:29:56,720 verktøylinjen eller noe. 572 00:29:56,720 --> 00:29:59,530 Så cal bare gir meg en fin liten kalenderen som passer 573 00:29:59,530 --> 00:30:02,380 nå avskåret, antar jeg. 574 00:30:02,380 --> 00:30:04,770 Men fint lite kommando. 575 00:30:04,770 --> 00:30:06,540 >> JOSEPH: Det er [uhørbart]. 576 00:30:06,540 --> 00:30:09,170 Andre kommandoer som du måtte ha sett inkluderer klang og gjøre. 577 00:30:09,170 --> 00:30:11,180 Vi skal gå over dem i nærmere senere. 578 00:30:11,180 --> 00:30:13,400 Men hvis du har jobbet med den PSett, bør du være 579 00:30:13,400 --> 00:30:15,160 kjent med dem. 580 00:30:15,160 --> 00:30:16,640 >> ROB: Greit. 581 00:30:16,640 --> 00:30:18,520 Spørsmål om kommandolinje ting? 582 00:30:18,520 --> 00:30:22,450 583 00:30:22,450 --> 00:30:23,260 OK. 584 00:30:23,260 --> 00:30:27,416 Så la oss gå videre til noen C-relaterte ting. 585 00:30:27,416 --> 00:30:28,666 Variabler matematikk. 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å akkurat som vi hadde matte i Scratch, du kan også bruke matematikk i C. 589 00:30:45,230 --> 00:30:49,270 >> Før vi kommer til det helt, så variable. 590 00:30:49,270 --> 00:30:53,920 Husk at når du erklære en variabel som int x eller float y, du 591 00:30:53,920 --> 00:30:56,710 nødt til å gi det skriver før variabelnavnet. 592 00:30:56,710 --> 00:31:03,020 Så typene vi har sett så langt er int, float, double, lang lang, som jeg 593 00:31:03,020 --> 00:31:06,150 faktisk ikke vet om vi har sees at så langt. 594 00:31:06,150 --> 00:31:07,700 >> Det er noen andre. 595 00:31:07,700 --> 00:31:09,990 Vi har se røye. 596 00:31:09,990 --> 00:31:13,920 Det er kort, som er som det er motsatte av lang lang hvor det er 597 00:31:13,920 --> 00:31:16,650 mindre enn et helt tall. 598 00:31:16,650 --> 00:31:18,580 Vi har også sett streng. 599 00:31:18,580 --> 00:31:23,070 Så hva er spesielt streng? 600 00:31:23,070 --> 00:31:25,350 Hvorfor skulle jeg si det er ikke helt som int? 601 00:31:25,350 --> 00:31:27,030 >> SPEAKER 4: Det spiller egentlig ikke eksisterer. 602 00:31:27,030 --> 00:31:27,990 >> ROB: Yeah. 603 00:31:27,990 --> 00:31:31,820 Så den eneste grunnen til at vi har streng er fordi når du gjør 604 00:31:31,820 --> 00:31:33,215 hash, inkluderer cs50.h. 605 00:31:33,215 --> 00:31:36,530 606 00:31:36,530 --> 00:31:42,670 Og vi får se eksempler på dette senere - oh, som ikke håndterer det godt - 607 00:31:42,670 --> 00:31:46,160 hvor cs50.h gjør noe langs linjene av typen 608 00:31:46,160 --> 00:31:49,230 def, røye stjerne, streng. 609 00:31:49,230 --> 00:31:53,280 >> Og slik det er å si at vi ikke gjør det selv vet hva en char stjernen er ennå. 610 00:31:53,280 --> 00:31:56,770 Men dette sier vi ønsker streng. 611 00:31:56,770 --> 00:32:00,250 Noe sted du har brukt streng, du kunne ha brukt røye stjerne, 612 00:32:00,250 --> 00:32:04,670 som faktisk er en type som eksisterer i C-språk. 613 00:32:04,670 --> 00:32:06,680 Men vi får til det. 614 00:32:06,680 --> 00:32:07,860 Oh, og det går rett tilbake. 615 00:32:07,860 --> 00:32:10,170 Neat. 616 00:32:10,170 --> 00:32:15,370 >> Så samme med bool hvor sant og usant. 617 00:32:15,370 --> 00:32:22,510 Det er egentlig ikke en innebygget type i C. I stedet er det bare, har dette 618 00:32:22,510 --> 00:32:23,740 verdien null? 619 00:32:23,740 --> 00:32:26,200 Så får vi bare vurdere det å være falsk. 620 00:32:26,200 --> 00:32:27,350 Betyr dette har verdien - 621 00:32:27,350 --> 00:32:30,530 vel, har dette noe verdi som ikke er null? 622 00:32:30,530 --> 00:32:32,200 Deretter vil vi vurdere det til å være sant. 623 00:32:32,200 --> 00:32:35,940 Så man er sant, to er sant, noe forskjellig fra null er sant. 624 00:32:35,940 --> 00:32:38,710 625 00:32:38,710 --> 00:32:42,790 Så de er de. 626 00:32:42,790 --> 00:32:47,624 Spørsmål om erklære variabler og variable typer og alt det? 627 00:32:47,624 --> 00:32:48,100 Yeah. 628 00:32:48,100 --> 00:32:52,384 >> SPEAKER 4: For lenge lenge, i boken, det sa det måtte være lang lang int. 629 00:32:52,384 --> 00:32:54,288 Men vil bare lang lang jobbe? 630 00:32:54,288 --> 00:32:58,210 631 00:32:58,210 --> 00:33:01,470 >> ROB: Så disse type modifikatorer. 632 00:33:01,470 --> 00:33:04,170 Så int x. 633 00:33:04,170 --> 00:33:07,710 Så vi kan også si usignert int x. 634 00:33:07,710 --> 00:33:09,640 Vi kan si kort int x. 635 00:33:09,640 --> 00:33:12,570 Vi kan si lang lang int x. 636 00:33:12,570 --> 00:33:17,250 Men stort sett alle av de tingene jeg nettopp sa, unsigned int, short int, 637 00:33:17,250 --> 00:33:21,480 lang lang int, kan du bli kvitt int og det vil bare anta 638 00:33:21,480 --> 00:33:22,510 at du mente int. 639 00:33:22,510 --> 00:33:26,045 Så usignerte x, noe som bare betyr - 640 00:33:26,045 --> 00:33:29,400 du vet hvor normalt med en int, du kan si x er lik negative 3? 641 00:33:29,400 --> 00:33:31,636 Med en usignert int, kan du ikke. 642 00:33:31,636 --> 00:33:34,480 >> JOSEPH: Og igjen, for kameraet, Spørsmålet var, hva er forskjellen 643 00:33:34,480 --> 00:33:37,796 mellom lang lang int og akkurat lenge lenge? 644 00:33:37,796 --> 00:33:38,410 >> ROB: Yeah. 645 00:33:38,410 --> 00:33:42,850 Så jeg vil nesten aldri skrive lang lang int. 646 00:33:42,850 --> 00:33:44,100 Jeg vil skrive lang lang. 647 00:33:44,100 --> 00:33:47,770 648 00:33:47,770 --> 00:33:50,636 >> JOSEPH: Noen spørsmål? 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 er slik vi deklarere en variabel og initial 652 00:34:02,390 --> 00:34:04,450 variabelen og erklærer en annen variable og initial 653 00:34:04,450 --> 00:34:05,870 alt i ett trinn. 654 00:34:05,870 --> 00:34:09,370 Så erklæringen av variable og initialisering variable har 655 00:34:09,370 --> 00:34:11,120 til, men kan være på samme linje. 656 00:34:11,120 --> 00:34:15,409 657 00:34:15,409 --> 00:34:20,060 >> Så vi har standard matematiske operatorer at du er vant til - 658 00:34:20,060 --> 00:34:22,199 pluss, minus, dele, ganger. 659 00:34:22,199 --> 00:34:24,389 Det er også modulo, som vi skal se. 660 00:34:24,389 --> 00:34:29,060 Det er ikke, i hvert fall i C, en innebygd strøm 661 00:34:29,060 --> 00:34:31,765 eksponensieringen caret operatør. 662 00:34:31,765 --> 00:34:33,770 Vel er det en cirkumflekstegn operatør men det er ikke strøm. 663 00:34:33,770 --> 00:34:34,239 >> JOSEPH: Men det er ikke potenser, Ja. 664 00:34:34,239 --> 00:34:36,210 >> ROB: Ikke bruk cirkumflekstegnet å anta at det betyr 665 00:34:36,210 --> 00:34:39,980 som squared eller hva. 666 00:34:39,980 --> 00:34:42,289 Så noen ting å huske på tankene om divisjon. 667 00:34:42,289 --> 00:34:46,282 668 00:34:46,282 --> 00:34:48,880 Jeg skal stå. 669 00:34:48,880 --> 00:34:51,315 Så erklærte initialize svaret. 670 00:34:51,315 --> 00:34:54,670 Så vi sier float svar tilsvarer en delt på ti. 671 00:34:54,670 --> 00:34:57,500 Skriv ut svaret med to desimaler. 672 00:34:57,500 --> 00:35:02,180 >> Og dette er den slags ting som jeg ville mennesket printf å finne ut at 673 00:35:02,180 --> 00:35:05,110 hva pokker gjør%, prikk, 2f bety? 674 00:35:05,110 --> 00:35:07,930 Og det betyr bare, vel, ignorerer 0,2. 675 00:35:07,930 --> 00:35:10,420 Og%, er f hva vi bruker å skrive ut til å flyte. 676 00:35:10,420 --> 00:35:15,370 Den 0,2 sier, print som flyte til to desimaler. 677 00:35:15,370 --> 00:35:19,600 Så dette programmet har en feil, og du kan har sett dette før i noen 678 00:35:19,600 --> 00:35:20,870 før CS kurset. 679 00:35:20,870 --> 00:35:22,170 Men hva er det bug? 680 00:35:22,170 --> 00:35:23,050 >> SPEAKER 5: Zero. 681 00:35:23,050 --> 00:35:24,130 >> ROB: Yeah. 682 00:35:24,130 --> 00:35:29,630 Så når vi sier, er lik svar 1 delt på 10, vi vil at 683 00:35:29,630 --> 00:35:31,610 besvare å være 0,1. 684 00:35:31,610 --> 00:35:37,450 Men en dividert med 10, 1 er et heltall, er 10 et heltall. 685 00:35:37,450 --> 00:35:41,060 Og så når vi gjør et heltall delt på et heltall, skal vi komme tilbake 686 00:35:41,060 --> 00:35:42,190 et helt tall. 687 00:35:42,190 --> 00:35:43,660 So 1 dividert med 10 er 0,1. 688 00:35:43,660 --> 00:35:46,760 >> Siden det er behov for å gi oss et heltall, det er bare kommer til å kaste bort at 689 00:35:46,760 --> 00:35:49,410 desimal og si at svaret er 0. 690 00:35:49,410 --> 00:35:55,314 Og så når vi skriver ut svaret her, det kommer til å skrive ut 0.00. 691 00:35:55,314 --> 00:35:58,430 >> JOSEPH: Og akkurat som et notat, er det faktisk kaster bort hva som er etter 692 00:35:58,430 --> 00:35:59,390 desimaltegn. 693 00:35:59,390 --> 00:36:03,180 Så hvis du i stedet hadde seks delt på 10, du kanskje tror at det vil gi deg 694 00:36:03,180 --> 00:36:05,200 0,6 og så ville du runde opp til en. 695 00:36:05,200 --> 00:36:10,520 Men egentlig, hva skjer når det skriver oppgaver er det at det faller det som er 696 00:36:10,520 --> 00:36:11,470 etter desimaltegnet. 697 00:36:11,470 --> 00:36:13,020 Så 0.6 gjør det blir 0. 698 00:36:13,020 --> 00:36:13,370 >> ROB: Yeah. 699 00:36:13,370 --> 00:36:15,160 Og vi vil si avkorte for det. 700 00:36:15,160 --> 00:36:21,760 Så når du kastet til en int, desimalen er avkortet. 701 00:36:21,760 --> 00:36:23,980 Så fiks for det - det er faktisk to. 702 00:36:23,980 --> 00:36:27,890 Og jeg kommer til å gjøre det andre, fordi dette er en mye enklere løsning. 703 00:36:27,890 --> 00:36:32,670 >> Så en fix er å bruke flyter i divisjonen. 704 00:36:32,670 --> 00:36:34,720 Og egentlig, trenger du bare å gjøre en av dem en flåte. 705 00:36:34,720 --> 00:36:37,400 Men det er noe klarere bare å gjøre både av dem flyter. 706 00:36:37,400 --> 00:36:41,170 Så 1,0 delt på 10,0 er dividere to flyter. 707 00:36:41,170 --> 00:36:43,970 Så svaret vil ende opp med å bli en dupp, og så vil du 708 00:36:43,970 --> 00:36:48,050 riktig ut 0.10 her. 709 00:36:48,050 --> 00:36:52,220 >> Noe som ikke fungerer så godt om det er, vel, sikker, det var lett 710 00:36:52,220 --> 00:36:56,240 nok til å konvertere en til en flyte ved å gjøre det 1,0. 711 00:36:56,240 --> 00:37:02,180 Men hva om stedet vi hadde to heltall som int x er lik 1 og int y 712 00:37:02,180 --> 00:37:05,660 lik 10, og da vi ønsket å gjøre x delt på y? 713 00:37:05,660 --> 00:37:10,420 Derfor er det ikke lett å bare gjøre X.0 eller noe. 714 00:37:10,420 --> 00:37:12,790 >> Så at reparasjonen som skal kaste. 715 00:37:12,790 --> 00:37:19,780 Så støping er en måte C for å omdanne fra en type til en annen variabel. 716 00:37:19,780 --> 00:37:22,320 Så her, 1 er et helt tall. 717 00:37:22,320 --> 00:37:27,050 Og ved å sette denne flyte foran det, blir vi kastet en til en flåte. 718 00:37:27,050 --> 00:37:30,350 Og så dette vil konvertere den en til en 1,0. 719 00:37:30,350 --> 00:37:33,380 Og dette vil konvertere 10 til 10.0. 720 00:37:33,380 --> 00:37:36,790 >> Og så ting oppfører seg på samme måte som forrige versjonen vi bare viste 721 00:37:36,790 --> 00:37:42,190 der, som forventet, får vi 0,10 og det vil skrive ut som. 722 00:37:42,190 --> 00:37:44,120 Og vi kan gjøre dette med variabler, også. 723 00:37:44,120 --> 00:37:47,376 Så vi kan si, float x delt på float y. 724 00:37:47,376 --> 00:37:48,626 >> JOSEPH: Noen spørsmål? 725 00:37:48,626 --> 00:37:54,182 726 00:37:54,182 --> 00:38:00,090 >> ROB: Så akkurat som i vanlig matte, vi har operatør forrang. 727 00:38:00,090 --> 00:38:06,960 Så i matte klasse, er det mer sannsynlig å kalle det rekkefølgen på operasjonene. 728 00:38:06,960 --> 00:38:09,890 Her er den offisielle betegnelsen operatør forrang. 729 00:38:09,890 --> 00:38:15,230 Men operatørstyrer, eller de fleste operatører, er som du forventer. 730 00:38:15,230 --> 00:38:22,660 >> Så akkurat som i matte, er to ganger ti kommer til å bli gruppert tettere enn 731 00:38:22,660 --> 00:38:25,410 dette 10 delt på to og deretter to. 732 00:38:25,410 --> 00:38:29,745 Rekkefølgen av operasjonene, vil det gjøre to ganger 10, 10 delt på to, og deretter 733 00:38:29,745 --> 00:38:32,720 det vil gjøre 20 pluss fem pluss to. 734 00:38:32,720 --> 00:38:37,020 Så det er som forventet, og du kan bruke parenteser til å gruppere uttrykk. 735 00:38:37,020 --> 00:38:41,063 Du kan ikke bruke hakeparenteser å gruppere uttrykk. 736 00:38:41,063 --> 00:38:41,544 Yeah? 737 00:38:41,544 --> 00:38:43,468 >> SPEAKER 5: Kan du faktisk bare gå tilbake ett sekund? 738 00:38:43,468 --> 00:38:47,316 Kan du kaste en int til en streng? 739 00:38:47,316 --> 00:38:53,330 >> ROB: Så i C, du kan kaste noe du vil alt du vil. 740 00:38:53,330 --> 00:38:55,600 Det betyr ikke at det er en god ting å gjøre. 741 00:38:55,600 --> 00:38:59,760 Så når du kaster en int til en streng, betyr at - 742 00:38:59,760 --> 00:39:03,240 og vi skal gå inn på dette mye mer grundig - 743 00:39:03,240 --> 00:39:03,720 >> JOSEPH: Mye senere. 744 00:39:03,720 --> 00:39:06,840 >> ROB: Jeg ønsker ikke å si mye senere, så jeg prøvde å endre min setning. 745 00:39:06,840 --> 00:39:13,370 Vi skal gå inn på det mye mer grundig senere der egentlig når du har en 746 00:39:13,370 --> 00:39:14,810 string variabel - 747 00:39:14,810 --> 00:39:17,160 så en streng kan være vilkårlig lang, ikke sant? 748 00:39:17,160 --> 00:39:21,850 Og vi har sagt at en int er fire byte og lang lang er åtte 749 00:39:21,850 --> 00:39:23,620 byte og en float er fire byte. 750 00:39:23,620 --> 00:39:29,520 Så en streng, akkurat som en int, har bare et visst antall byte til det. 751 00:39:29,520 --> 00:39:31,800 Og det vil være fire byte. 752 00:39:31,800 --> 00:39:34,750 >> Men en streng kan være ganske vilkårlig lange, ikke sant? 753 00:39:34,750 --> 00:39:40,190 Så hallo verden allerede, hvis det er 10 tegn eller hva, det er allerede 754 00:39:40,190 --> 00:39:42,670 kommer til å bli i løpet av de fire byte Jeg kan passe inn i en streng. 755 00:39:42,670 --> 00:39:51,140 Og så hvordan strenger virkelig fungerer er at de er der i minne at strengen 756 00:39:51,140 --> 00:39:52,380 blir holdt. 757 00:39:52,380 --> 00:39:57,290 >> Og så over her, når jeg sier streng x lik hello world, innsiden av x er 758 00:39:57,290 --> 00:40:01,840 bare si, oh, hello world lagres på dette spesielle sted i minnet. 759 00:40:01,840 --> 00:40:07,060 Så hvis vi prøver å kaste et heltall til et streng, så vi prøver å tolke 760 00:40:07,060 --> 00:40:10,500 noen tilfeldig del av minne som en streng. 761 00:40:10,500 --> 00:40:14,465 Og som nesten alltid bryter ting. 762 00:40:14,465 --> 00:40:17,040 >> JOSEPH: Men hvis det forvirrer deg, vil vi dekke det 763 00:40:17,040 --> 00:40:17,550 mer i dybden senere. 764 00:40:17,550 --> 00:40:17,850 >> ROB: Yeah. 765 00:40:17,850 --> 00:40:20,540 Det er her du kommer å komme inn i pekere. 766 00:40:20,540 --> 00:40:25,485 Og det er en betydelig del av to uker med dette kurset. 767 00:40:25,485 --> 00:40:28,275 >> SPEAKER 6: Fungerer det like gjenstander i andre språk eller ikke egentlig? 768 00:40:28,275 --> 00:40:34,050 >> ROB: Så med andre språk, gjenstander ville bli representert ved hjelp av pekere. 769 00:40:34,050 --> 00:40:37,070 770 00:40:37,070 --> 00:40:38,793 Det er ikke det samme, skjønt. 771 00:40:38,793 --> 00:40:42,110 772 00:40:42,110 --> 00:40:42,910 Noen tanker? 773 00:40:42,910 --> 00:40:43,760 >> JOSEPH: Nei. 774 00:40:43,760 --> 00:40:44,185 Ingen tanker. 775 00:40:44,185 --> 00:40:44,980 >> ROB: OK. 776 00:40:44,980 --> 00:40:46,994 >> JOSEPH: Neste. 777 00:40:46,994 --> 00:40:48,255 >> ROB: Bare gå med det. 778 00:40:48,255 --> 00:40:48,670 OK. 779 00:40:48,670 --> 00:40:51,120 Så modulo. 780 00:40:51,120 --> 00:40:53,900 Akkurat som vi har pluss, minus, dele, og formere seg. 781 00:40:53,900 --> 00:40:56,720 Så modulo er en du kan ikke har sett før. 782 00:40:56,720 --> 00:40:59,540 Og det bare sier, gi me resten av. 783 00:40:59,540 --> 00:41:02,850 Så 55% 10. 784 00:41:02,850 --> 00:41:06,840 Resten av å gjøre 55 delt av 10 ville være fem. 785 00:41:06,840 --> 00:41:09,630 Så 55% 10 er fem. 786 00:41:09,630 --> 00:41:12,260 Og 3% 5 ville være tre. 787 00:41:12,260 --> 00:41:14,180 8% 8 vil være 0. 788 00:41:14,180 --> 00:41:15,903 16% 15 vil være 1. 789 00:41:15,903 --> 00:41:20,670 >> JOSEPH: En ting å merke seg med dette, også, er det kanskje ikke fungerer som forventet 790 00:41:20,670 --> 00:41:22,700 hvis du bruker et negativt tall. 791 00:41:22,700 --> 00:41:26,215 Så negativ 5% 4, noen mennesker kanskje tror det er - 792 00:41:26,215 --> 00:41:28,890 793 00:41:28,890 --> 00:41:33,808 hva ville du tenke negativt 5% 4 ville bli? 794 00:41:33,808 --> 00:41:34,792 >> SPEAKER 5: One. 795 00:41:34,792 --> 00:41:37,920 >> JOSEPH: Så noen sier én, noen folk sier negativt. 796 00:41:37,920 --> 00:41:38,450 Men hva - 797 00:41:38,450 --> 00:41:40,820 >> ROB: Jeg ville ikke engang ha sa en av dem. 798 00:41:40,820 --> 00:41:42,370 >> JOSEPH: To, beklager. 799 00:41:42,370 --> 00:41:43,240 Noen folk sier - 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 hva var det - negative fem - 804 00:41:45,950 --> 00:41:47,100 >> JOSEPH: Tre, tre, tre. 805 00:41:47,100 --> 00:41:48,450 Unnskyld. 806 00:41:48,450 --> 00:41:51,910 Fordi modulo, generelt, når du har sett det andre steder, vanligvis betyr det 807 00:41:51,910 --> 00:41:54,000 returnere et positivt tall, ikke sant? 808 00:41:54,000 --> 00:42:01,160 >> ROB: Så når vi sier i matematikk,% 10-tallet, de har en tendens til å ønske å gi deg - 809 00:42:01,160 --> 00:42:05,980 hvis vi mod med 10, så forventer vi å få et tall mellom 0 og 9.. 810 00:42:05,980 --> 00:42:09,860 I her, er det ikke tilfelle at du vil få negative tall returnert. 811 00:42:09,860 --> 00:42:15,898 >> JOSEPH: Så negativ 5% 4 ville være negativ en. 812 00:42:15,898 --> 00:42:19,325 >> ROB: Men det er sjelden at du er mod-ing negative tall til å begynne med. 813 00:42:19,325 --> 00:42:25,490 814 00:42:25,490 --> 00:42:25,970 Hopp over dette. 815 00:42:25,970 --> 00:42:27,314 >> JOSEPH: Yeah. 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 siste ting å påpeke om flyter er det er en farlig atferd, 819 00:42:36,400 --> 00:42:39,850 men flyter er ikke en eksakt representasjon. 820 00:42:39,850 --> 00:42:46,190 Så kommer tilbake til byte igjen, husk at en int er alltid fire byte og en 821 00:42:46,190 --> 00:42:47,830 float er alltid fire byte. 822 00:42:47,830 --> 00:42:51,340 Så Lucas 'eksempel er ganske bra. 823 00:42:51,340 --> 00:42:55,730 >> Så tenk på en delt på tre. 824 00:42:55,730 --> 00:42:57,800 Så 0,3333333. 825 00:42:57,800 --> 00:43:03,540 Hvis jeg bare har 32 bits, hvordan kan Jeg lagrer 0,33333 egentlig? 826 00:43:03,540 --> 00:43:07,250 Og kanskje, uansett grunn, sier du, all right, vel, la oss bare si 827 00:43:07,250 --> 00:43:13,210 at denne 1011001, la oss bare si at bør være 0,333333. 828 00:43:13,210 --> 00:43:16,960 Vel, du har bare et begrenset antall de biter, så det er umulig å 829 00:43:16,960 --> 00:43:22,550 representerer hver eneste flyttall verdi gitt bare 32 bits. 830 00:43:22,550 --> 00:43:25,580 >> Vel, det er umulig å representere noen floating point verdi gitt uendelig - 831 00:43:25,580 --> 00:43:28,480 også, gis en hvilken som helst endelig antall biter. 832 00:43:28,480 --> 00:43:38,265 Så spørsmålet her er, vel, når vi brukte å skrive ut til to desimaler, 833 00:43:38,265 --> 00:43:42,000 vi gjorde riktig får svaret 0,10. 834 00:43:42,000 --> 00:43:47,510 Men under panseret, er det virkelig blir lagret så nært som mulig til 835 00:43:47,510 --> 00:43:51,790 0,10 som de bitene kan representere. 836 00:43:51,790 --> 00:43:53,200 Er dette på neste lysbilde? 837 00:43:53,200 --> 00:43:53,830 Eller er det ikke? 838 00:43:53,830 --> 00:43:54,660 >> JOSEPH: Ja, det er 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 bare trekke notene opp litt. 841 00:43:57,760 --> 00:43:59,700 >> ROB: Jeg skal bare zoome in på den siste som. 842 00:43:59,700 --> 00:44:00,950 Oh my gosh, det er [uhørbart]. 843 00:44:00,950 --> 00:44:06,089 844 00:44:06,089 --> 00:44:08,300 Så det nummeret. 845 00:44:08,300 --> 00:44:12,300 Det er det som vil bli skrevet ut hvis vi kjøre dette programmet. 846 00:44:12,300 --> 00:44:20,340 Og legg merke til det er egentlig ikke en stor avtale hvis vi bare bry seg om som 847 00:44:20,340 --> 00:44:21,920 02:58 desimaler. 848 00:44:21,920 --> 00:44:26,700 Som vi bare opprinnelig trykt 0,10, og det er derfor vi så ingenting galt. 849 00:44:26,700 --> 00:44:31,380 Men når vi begynner å komme inn i eksakt, eksakt antall at det er 850 00:44:31,380 --> 00:44:35,660 representerer, ser vi at det ikke kan nøyaktig representerer 0,1. 851 00:44:35,660 --> 00:44:40,900 >> Og en del av problemet her er like, all right, det er fint, men, vel, 852 00:44:40,900 --> 00:44:46,120 første, hva om vi prøvde å gjøre, Svaret er lik lik 0,1? 853 00:44:46,120 --> 00:44:49,200 Er det kommer til å returnere sant eller usant? 854 00:44:49,200 --> 00:44:51,850 Og så det er vanskelig å si. 855 00:44:51,850 --> 00:44:53,330 Jeg tror det faktisk kan returnere true. 856 00:44:53,330 --> 00:44:55,265 Vil det første - 857 00:44:55,265 --> 00:44:56,180 Jeg vet ikke. 858 00:44:56,180 --> 00:45:00,090 Svaret er når du begynner å håndtere med flyttall verdier, du ganske 859 00:45:00,090 --> 00:45:05,150 mye bør ikke bruke likestilling på grunn av dette imprecision. 860 00:45:05,150 --> 00:45:09,470 >> Og for alt du vet, det er hundre desimal at 861 00:45:09,470 --> 00:45:13,670 flyttall var ikke i stand å gi korrekt behandling. 862 00:45:13,670 --> 00:45:18,180 Og så likestilling vil bare mislykkes selv om antallet - hvis du hadde vært 863 00:45:18,180 --> 00:45:24,450 med nøyaktige tall, tallene bør har vært den samme. 864 00:45:24,450 --> 00:45:27,790 Det er i løpet av like 50 beregninger ved hjelp av disse flytende 865 00:45:27,790 --> 00:45:30,270 punkt verdier, kan feilen bygge opp og opp og opp, og 866 00:45:30,270 --> 00:45:31,125 ting bare blir feil. 867 00:45:31,125 --> 00:45:33,870 >> JOSEPH: Og det har vært veldig kjente eksempler på at dette skjer. 868 00:45:33,870 --> 00:45:37,190 Som NASA ingeniører har fått denne feil, forårsaker raketter å eksplodere 869 00:45:37,190 --> 00:45:38,665 luften etter at de har blitt lansert. 870 00:45:38,665 --> 00:45:41,490 Og massevis av saker som dette. 871 00:45:41,490 --> 00:45:41,956 Så ja. 872 00:45:41,956 --> 00:45:45,218 >> SPEAKER 6: Når du sier 0,3 f, betyr det avkorte resten? 873 00:45:45,218 --> 00:45:46,468 Eller gjør avrunde den opp eller ned? 874 00:45:46,468 --> 00:45:48,800 875 00:45:48,800 --> 00:45:50,200 >> ROB: Vil printf rundt det? 876 00:45:50,200 --> 00:45:52,180 >> JOSEPH: Jeg tror printf avkorter. 877 00:45:52,180 --> 00:45:52,640 >> ROB: OK. 878 00:45:52,640 --> 00:45:59,890 Så kan likeledes gå i motsatt retning av denne, hvor, i dette tilfellet 879 00:45:59,890 --> 00:46:03,320 det nærmeste det kunne representere 0,1 var med dette nummeret. 880 00:46:03,320 --> 00:46:06,820 Den nærmest det kan være i stand til å utgjøre 0,2 er i den motsatte 881 00:46:06,820 --> 00:46:11,420 retning, 0,199999996356 eller noe. 882 00:46:11,420 --> 00:46:17,480 Så hvis vi gikk i den retningen av ting, så printf 0,3 f vil returnere 883 00:46:17,480 --> 00:46:20,866 1,99 i stedet for 2,00. 884 00:46:20,866 --> 00:46:22,960 >> JOSEPH: Og jeg er ikke helt sikker på det. 885 00:46:22,960 --> 00:46:25,430 Det kan være lurt å skrive en liten, liten program for å bare sjekke det. 886 00:46:25,430 --> 00:46:29,370 >> ROB: Skjønt, hva vi er sikker på er at hvis du prøvde å kaste det til en 887 00:46:29,370 --> 00:46:33,660 int, og støping til en int skal få den til å avkorte desimal, hvis 888 00:46:33,660 --> 00:46:38,140 du prøve å kaste 1.9999999 til en int, vil du få en. 889 00:46:38,140 --> 00:46:41,440 Og så bør du generelt bruke runde funksjon i regnestykket biblioteket. 890 00:46:41,440 --> 00:46:44,190 891 00:46:44,190 --> 00:46:45,440 Spørsmål? 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 videre til forholdene og boolske uttrykk. 895 00:46:54,000 --> 00:46:58,120 Så du har sett dette før. 896 00:46:58,120 --> 00:47:07,420 Og faktisk, la meg forsikre meg Datamaskinen er i riktig format her. 897 00:47:07,420 --> 00:47:08,670 Plass. 898 00:47:08,670 --> 00:47:10,630 899 00:47:10,630 --> 00:47:13,870 Beklager, vi nødt til å håndtere en litt med cut-off på kantene. 900 00:47:13,870 --> 00:47:15,830 >> Men ja, har dere sett dette før i Scratch. 901 00:47:15,830 --> 00:47:19,930 Så dette her er et uttrykk som brukes i 902 00:47:19,930 --> 00:47:21,250 et betinget utsagn. 903 00:47:21,250 --> 00:47:23,930 Så svare større enn null vilje fortelle deg ekte eller falsk. 904 00:47:23,930 --> 00:47:26,530 Og dette er veldig viktig, fordi de tillater oss å presentere 905 00:47:26,530 --> 00:47:28,670 logikken i koden vår. 906 00:47:28,670 --> 00:47:32,820 >> Slik at for eksempel, er dette et program skrevet i spillene som ber brukeren 907 00:47:32,820 --> 00:47:36,980 for et helt tall og forteller dem enten heltallet at de ga deg var en 908 00:47:36,980 --> 00:47:38,690 positivt eller negativt tall. 909 00:47:38,690 --> 00:47:42,980 Og konverteringen over her for å se er du først skrive ut erklæringen, 910 00:47:42,980 --> 00:47:43,870 gi meg et heltall. 911 00:47:43,870 --> 00:47:45,980 Og så spør dem for et heltall. 912 00:47:45,980 --> 00:47:49,870 >> Og så bruker du betinget logikk enn her for å sjekke om dette tallet 913 00:47:49,870 --> 00:47:52,030 var faktisk større enn null eller ikke. 914 00:47:52,030 --> 00:47:58,960 Så her har vi en boolsk uttrykk innsiden av en betinget Hvis uttalelse. 915 00:47:58,960 --> 00:48:00,660 Er det noen spørsmål? 916 00:48:00,660 --> 00:48:03,030 Er det noen spørsmål om det? 917 00:48:03,030 --> 00:48:03,950 OK. 918 00:48:03,950 --> 00:48:06,140 >> Så det er mer enn bare større enn, selvfølgelig. 919 00:48:06,140 --> 00:48:10,385 Du kan konstruere boolske uttrykk bruker det meste av den slags ting du 920 00:48:10,385 --> 00:48:11,150 ville tenke på i matematikk. 921 00:48:11,150 --> 00:48:12,370 Så større enn. 922 00:48:12,370 --> 00:48:13,740 Det burde være en mindre enn. 923 00:48:13,740 --> 00:48:14,990 Unnskyld. 924 00:48:14,990 --> 00:48:18,520 925 00:48:18,520 --> 00:48:19,760 Og avstanden. 926 00:48:19,760 --> 00:48:22,971 >> ROB: Gud forby du forlater den. 927 00:48:22,971 --> 00:48:23,620 >> JOSEPH: Greit. 928 00:48:23,620 --> 00:48:25,950 Så større enn, mindre enn, større enn, eller lik, mindre 929 00:48:25,950 --> 00:48:27,070 enn, eller lik. 930 00:48:27,070 --> 00:48:31,980 Vi bruker doble likemenn for å se etter likestilling, fordi enkelt tilsvarer midler 931 00:48:31,980 --> 00:48:32,810 oppdrag, ikke sant? 932 00:48:32,810 --> 00:48:33,140 Ja. 933 00:48:33,140 --> 00:48:37,130 Og da kan vi heller ikke lik ved bruker utropstegn, er lik. 934 00:48:37,130 --> 00:48:41,530 >> Og dette utropstegnet kan også utvides slik at hvis du vil ha 935 00:48:41,530 --> 00:48:44,050 å invertere noen form for boolsk uttrykk, kan du gjøre det. 936 00:48:44,050 --> 00:48:48,530 Så dette vil vurdere å true hvis svaret er mindre 937 00:48:48,530 --> 00:48:51,240 enn eller lik null. 938 00:48:51,240 --> 00:48:53,950 Eventuelle spørsmål om det? 939 00:48:53,950 --> 00:48:55,180 OK. 940 00:48:55,180 --> 00:48:58,840 >> Så du kan også kombinere disse uttrykk ved hjelp av logisk Og og 941 00:48:58,840 --> 00:48:59,790 logisk Or. 942 00:48:59,790 --> 00:49:03,530 Så dette er bare Og symbolet, som bør være Shift, 7. 943 00:49:03,530 --> 00:49:07,720 Og dette er røret symbol, noe som er ikke en lavere tilfelle L. Det er den ene 944 00:49:07,720 --> 00:49:09,440 det er rett ovenfor din Enter-tasten. 945 00:49:09,440 --> 00:49:12,870 Så du bruke to av disse for å symbolisere logisk Og den logiske Or. 946 00:49:12,870 --> 00:49:18,180 >> Så dette vil bare returnere true hvis svaret er en, to, tre eller fire. 947 00:49:18,180 --> 00:49:23,030 Og dette vil bare returnere true hvis svaret er utenfor det på hver side. 948 00:49:23,030 --> 00:49:26,190 Så det er ikke bare én, to, tre, eller fire. 949 00:49:26,190 --> 00:49:28,385 Og måten du vil bruke at i et uttrykk - 950 00:49:28,385 --> 00:49:29,990 >> ROB: Eller en null eller en fem. 951 00:49:29,990 --> 00:49:32,200 >> JOSEPH: Null eller en fem. 952 00:49:32,200 --> 00:49:32,380 Unnskyld. 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 Og over her nå, på samme måte som du ville bruke det uttrykket, en mindre 956 00:49:38,980 --> 00:49:42,000 uttrykk side av en If betinget uttalelse, vil du også bruke den til 957 00:49:42,000 --> 00:49:47,800 samme måte ved bare å sette den på innsiden av parentes i hvis setningen. 958 00:49:47,800 --> 00:49:54,020 Så dette printf vil bare fyre hvis svaret er en, to, tre eller fire. 959 00:49:54,020 --> 00:49:56,002 Eventuelle spørsmål om å kombinere uttrykk? 960 00:49:56,002 --> 00:50:00,450 961 00:50:00,450 --> 00:50:04,240 >> Så det er en annen betinget konstruere vi kaller en If / Else. 962 00:50:04,240 --> 00:50:08,120 Så i utgangspunktet, betyr dette nå, OK, hvis noe jeg ønsket å sjekke var ikke 963 00:50:08,120 --> 00:50:11,600 sant, så gå til Else og utføre det andre tiltak. 964 00:50:11,600 --> 00:50:15,570 Så i dette tilfellet, spurte jeg brukeren for et heltall. 965 00:50:15,570 --> 00:50:17,790 Er det hele tall større enn null? 966 00:50:17,790 --> 00:50:18,310 Ja? 967 00:50:18,310 --> 00:50:20,100 Vel, da de plukket et positivt tall. 968 00:50:20,100 --> 00:50:22,320 Hvis ikke, så det må ha vært negativ eller null. 969 00:50:22,320 --> 00:50:27,530 Så du plukket et negativt tall eller en null i dette tilfelle. 970 00:50:27,530 --> 00:50:29,235 Ja. 971 00:50:29,235 --> 00:50:30,485 Eller en null. 972 00:50:30,485 --> 00:50:36,320 973 00:50:36,320 --> 00:50:39,300 >> Og så har vi også Hvis / Else, Hvis og Else. 974 00:50:39,300 --> 00:50:45,640 Så dette lar oss utføre en sekvens av ting bare hvis de første som mislykkes. 975 00:50:45,640 --> 00:50:49,540 Så i dette tilfellet, nå vi gjør den siste du plukke null. 976 00:50:49,540 --> 00:50:53,080 Så hvis de verken plukket en positiv eller et negativt tall, så de må 977 00:50:53,080 --> 00:50:53,640 har plukket null. 978 00:50:53,640 --> 00:50:56,720 Så går det bare nedover kjede som dette. 979 00:50:56,720 --> 00:50:59,960 >> Så et eksempel på hvordan en Hvis er forskjellig fra - 980 00:50:59,960 --> 00:51:02,590 en If / Else er forskjellig fra bare en sekvens av Ifs. 981 00:51:02,590 --> 00:51:07,680 Og dette er et vanlig spørsmål som folk spør er, vel, hvis du kommer som en 982 00:51:07,680 --> 00:51:11,265 95 i CS50, hva vil dette Programmet forteller deg? 983 00:51:11,265 --> 00:51:12,600 >> SPEAKER 5: Du fikk en A. 984 00:51:12,600 --> 00:51:13,490 >> JOSEPH: Ja. 985 00:51:13,490 --> 00:51:14,960 Du fikk hver enkelt en av dem riktig. 986 00:51:14,960 --> 00:51:17,130 Du fikk en A, du fikk en B, du fikk en C og en D, ikke sant? 987 00:51:17,130 --> 00:51:19,770 Så alle disse bli evaluert i orden. 988 00:51:19,770 --> 00:51:23,570 Så lenge en 95 er større enn 90, er det også større enn 80, er det også 989 00:51:23,570 --> 00:51:25,790 større enn 70, og den er også større enn 60.. 990 00:51:25,790 --> 00:51:27,620 Så du fikk alle disse karakterene. 991 00:51:27,620 --> 00:51:31,630 Og jeg antar at du ville bare vil at A. 992 00:51:31,630 --> 00:51:34,060 >> Den måten å fikse det på er å erstatte de med Else / If 's. 993 00:51:34,060 --> 00:51:37,540 Så i dette scenariet, ser det ut til at 95 er større enn 90, og den gjør 994 00:51:37,540 --> 00:51:38,885 ikke vurdere resten av uttalelsene. 995 00:51:38,885 --> 00:51:41,900 996 00:51:41,900 --> 00:51:43,150 Eventuelle spørsmål om det? 997 00:51:43,150 --> 00:51:48,580 998 00:51:48,580 --> 00:51:52,470 >> Så det er en annen betinget slags struktur som vi har her som vi 999 00:51:52,470 --> 00:51:53,390 kaller en bryter uttalelse. 1000 00:51:53,390 --> 00:51:57,390 Så dette kan du i utgangspunktet sjekke hva verdien av et tall du putter 1001 00:51:57,390 --> 00:51:59,000 inn i bryteren uttalelse er. 1002 00:51:59,000 --> 00:52:03,200 Så i dette scenariet, vi bytter på n, og vi sier, oh, hvis n er 1003 00:52:03,200 --> 00:52:04,710 en, deretter skrive den uttalelsen. 1004 00:52:04,710 --> 00:52:07,910 Og deretter bryte, noe som betyr exit ut av bryteroppstillingen. 1005 00:52:07,910 --> 00:52:12,670 >> Hvis det ikke var en, så, vel, bare til slutt sjekke alle disse tilfellene. 1006 00:52:12,670 --> 00:52:16,280 Og så den sjekker om det er en eller to eller tre, og det skrives deretter. 1007 00:52:16,280 --> 00:52:19,780 Og hva denne standard søkeord ned her måte er hvis de ikke oppgi noen 1008 00:52:19,780 --> 00:52:21,690 av dem, så si Ugyldig. 1009 00:52:21,690 --> 00:52:25,910 Så la oss si at jeg ber for n og brukeren gir meg fire. 1010 00:52:25,910 --> 00:52:29,470 Vel, matcher det ingen av disse tilfellene, så det vil skrive ut hva som er i den 1011 00:52:29,470 --> 00:52:30,540 Standard delen. 1012 00:52:30,540 --> 00:52:31,180 Ja, spørsmålet? 1013 00:52:31,180 --> 00:52:32,614 >> SPEAKER 5: Kan du bruke boolsk uttrykkene istedenfor 1014 00:52:32,614 --> 00:52:33,570 en, to, eller tre? 1015 00:52:33,570 --> 00:52:36,940 >> JOSEPH: Så spørsmålet er kan du bruke Boolske uttrykk i stedet for én, 1016 00:52:36,940 --> 00:52:37,940 to og tre? 1017 00:52:37,940 --> 00:52:40,520 Og i C, jeg tror deg kan ikke gjøre det. 1018 00:52:40,520 --> 00:52:44,320 Men i andre språk, som du kanskje støter ved enden av 1019 00:52:44,320 --> 00:52:46,460 semester som Javascript, du kan. 1020 00:52:46,460 --> 00:52:50,050 Vel, ville du må beregne første at verdien og deretter bruke den i 1021 00:52:50,050 --> 00:52:50,650 bryter uttalelse. 1022 00:52:50,650 --> 00:52:50,930 Yeah? 1023 00:52:50,930 --> 00:52:54,760 >> ROB: Så en del av fordelen av bryteren uttalelser er å tenke på hvis du gjorde dette 1024 00:52:54,760 --> 00:52:58,680 som en If / Else, slik som hvis n er lik tilsvarer én eller hva. 1025 00:52:58,680 --> 00:53:00,300 Else / Hvis n er lik lik to, uansett. 1026 00:53:00,300 --> 00:53:01,960 Else / Hvis n er lik lik tre. 1027 00:53:01,960 --> 00:53:05,930 Så hvordan programmet ville kjøre er det ville sekvensielt gå ned den listen 1028 00:53:05,930 --> 00:53:07,500 og sjekke, er n en? 1029 00:53:07,500 --> 00:53:08,040 Nope. 1030 00:53:08,040 --> 00:53:09,070 Er n to? 1031 00:53:09,070 --> 00:53:09,490 Nope. 1032 00:53:09,490 --> 00:53:10,940 Er n tre? 1033 00:53:10,940 --> 00:53:11,710 Yeah. 1034 00:53:11,710 --> 00:53:12,610 Gjør dette. 1035 00:53:12,610 --> 00:53:15,270 >> Mens med bryter uttalelser, er det faktisk i stand til å kompilere det å være 1036 00:53:15,270 --> 00:53:16,360 veldig fort. 1037 00:53:16,360 --> 00:53:19,550 Og så snart det står bryteren, det sier, all right, n er to, er jeg 1038 00:53:19,550 --> 00:53:23,060 umiddelbart kommer til å hoppe til der Jeg skal begynne å kjøre. 1039 00:53:23,060 --> 00:53:26,080 Jeg kommer ikke til å først sjekke, n er en, er n to? 1040 00:53:26,080 --> 00:53:28,860 Det kan umiddelbart begynne å gjøre hva det er ment å gjøre. 1041 00:53:28,860 --> 00:53:33,830 >> Og på grunn av at det ikke kan ta boolske forhold. 1042 00:53:33,830 --> 00:53:36,480 Ellers ville det ha å gjøre sekvensiell, som, all right, er n 1043 00:53:36,480 --> 00:53:37,820 større enn null? 1044 00:53:37,820 --> 00:53:41,140 Else er n større enn 10 eller hva. 1045 00:53:41,140 --> 00:53:44,780 >> JOSEPH: I dette tilfellet, hvis du har brukt Hvis / Else, If, da bryteren ville 1046 00:53:44,780 --> 00:53:47,792 kjøre ca tre ganger raskere enn If / Else, If. 1047 00:53:47,792 --> 00:53:53,060 1048 00:53:53,060 --> 00:53:56,040 Vi kan organisere bryteren i en slik en slik måte at vi ikke bryter 1049 00:53:56,040 --> 00:53:57,520 etter hver av tilfellene. 1050 00:53:57,520 --> 00:54:00,960 Så i dette tilfellet, jeg partisjonere tall som vi velger til én og 1051 00:54:00,960 --> 00:54:04,250 to er ikke høye tall og tre er et høyt tall. 1052 00:54:04,250 --> 00:54:08,290 >> Så i dette tilfellet, dersom n er en eller to, det vil treffe saken og deretter vil det 1053 00:54:08,290 --> 00:54:10,640 falle gjennom, fordi Det er ingen pause. 1054 00:54:10,640 --> 00:54:11,610 Og det vil ende opp her. 1055 00:54:11,610 --> 00:54:15,360 Så hvis vi plukke en, vil den gjøre printf og deretter bryte slik at ingen av 1056 00:54:15,360 --> 00:54:17,610 Dette blir utført. 1057 00:54:17,610 --> 00:54:21,870 Og selvfølgelig, hvis de kommer inn i tre eller noe annet, så det vil hoppe 1058 00:54:21,870 --> 00:54:25,320 de og ikke gå dit, og det vil utføre i stedet 1059 00:54:25,320 --> 00:54:27,490 tilsvarende linje. 1060 00:54:27,490 --> 00:54:29,390 Er det noen spørsmål om det? 1061 00:54:29,390 --> 00:54:29,780 Ja? 1062 00:54:29,780 --> 00:54:32,642 >> SPEAKER 4: Vil du få en feilmelding hvis du hadde en pause etter sak en, men det 1063 00:54:32,642 --> 00:54:34,550 hadde ikke noe for det å gjøre? 1064 00:54:34,550 --> 00:54:37,820 >> JOSEPH: Så spørsmålet er vil du få en feil hvis du har en pause etter 1065 00:54:37,820 --> 00:54:39,730 sak en, men det er ingenting å gjøre? 1066 00:54:39,730 --> 00:54:41,520 Og svaret er nei. 1067 00:54:41,520 --> 00:54:43,172 Du vil faktisk ikke får en feilmelding. 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 endring her, Jeg kommer til å sette en printf her. 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å hva ville dette ut hvis Jeg satte en i som innspill? 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 ville fortelle deg det tok ikke et høyt antall ganger, ikke sant? 1076 00:55:10,360 --> 00:55:13,500 Fordi det ville treffe det første tilfellet, det vil ikke gå i stykker, og det ville falle 1077 00:55:13,500 --> 00:55:15,730 gjennom til det andre tilfellet. 1078 00:55:15,730 --> 00:55:16,950 Eventuelle spørsmål om det? 1079 00:55:16,950 --> 00:55:18,280 >> ROB: Hadde du et annet spørsmål? 1080 00:55:18,280 --> 00:55:20,840 >> JOSEPH: OK, avkjøles. 1081 00:55:20,840 --> 00:55:22,400 OK. 1082 00:55:22,400 --> 00:55:25,780 Så det er noe annet vi kaller en trefoldig operatøren som er utgangspunktet en 1083 00:55:25,780 --> 00:55:29,010 alternativ syntaks å gjøre Hvis og deretter Else. 1084 00:55:29,010 --> 00:55:30,470 Og det kan du gjøre alt på én linje. 1085 00:55:30,470 --> 00:55:34,110 Så i dette spesielle program, Jeg ber brukeren om n.. 1086 00:55:34,110 --> 00:55:37,190 Og hvis n er større enn 100, sier jeg dem de plukket et høyt antall. 1087 00:55:37,190 --> 00:55:39,560 Else jeg fortelle dem at de plukket et lavt tall. 1088 00:55:39,560 --> 00:55:43,030 >> Så vi kan bruke dette veldig lang syntaks, streng, S, og deretter sjekke om n er 1089 00:55:43,030 --> 00:55:45,260 større enn 100 og tilordne det tilsvarende. 1090 00:55:45,260 --> 00:55:49,450 Men vi kan gjøre dette mye mer konsis ved hjelp av denne trefoldig operatør syntaks 1091 00:55:49,450 --> 00:55:52,090 som omfatter et spørsmål mark og et kolon. 1092 00:55:52,090 --> 00:55:55,070 Så spørsmålstegnet er i hovedsak stiller et spørsmål, ikke sant? 1093 00:55:55,070 --> 00:55:56,625 >> ROB: Kanskje zoome inn på det. 1094 00:55:56,625 --> 00:55:57,372 >> JOSEPH: Ja. 1095 00:55:57,372 --> 00:56:00,210 Godt poeng. 1096 00:56:00,210 --> 00:56:02,550 Så dette er det ternære operatør. 1097 00:56:02,550 --> 00:56:06,100 Første gang jeg stiller spørsmålet, er n større enn 100? 1098 00:56:06,100 --> 00:56:09,770 Hvis det er, så jeg utføre den første del før tykktarmen. 1099 00:56:09,770 --> 00:56:13,360 Hvis det ikke er det, så jeg utføre andre del etter kolon. 1100 00:56:13,360 --> 00:56:16,640 Så hvis n er større enn 100, da den plukker høyt og setter 1101 00:56:16,640 --> 00:56:18,360 at i streng s. 1102 00:56:18,360 --> 00:56:22,170 Hvis n er mindre enn 100, plukker den lave og deretter setter det inn strengen s. 1103 00:56:22,170 --> 00:56:30,186 Så det vil kondensere dette stor del ned i bare den ene setningen. 1104 00:56:30,186 --> 00:56:32,010 >> SPEAKER 5: Er det populært? 1105 00:56:32,010 --> 00:56:36,070 >> JOSEPH: Ja, det er ganske populært for ting der egentlig du ønsker å 1106 00:56:36,070 --> 00:56:38,700 gjør en oppgave basert på en slags tilstand. 1107 00:56:38,700 --> 00:56:43,110 Og i dette tilfellet, vi prøvde å tilordne en verdi til strengen s. 1108 00:56:43,110 --> 00:56:44,840 Det er ikke slik - 1109 00:56:44,840 --> 00:56:47,670 Jeg trenger vel egentlig ikke foretrekker det i andre tilfeller. 1110 00:56:47,670 --> 00:56:49,390 Men det er spesielt nyttig for dette oppdraget. 1111 00:56:49,390 --> 00:56:54,490 >> ROB: Det er en ganske vanlig mønster der du har litt variabel som 1112 00:56:54,490 --> 00:56:58,200 du kommer til å si, hvis noe, satt denne variabelen til én verdi, ellers, satt 1113 00:56:58,200 --> 00:56:59,810 denne variabelen til en annen verdi. 1114 00:56:59,810 --> 00:57:03,360 Og det er scenariet der bruker en trefoldig. 1115 00:57:03,360 --> 00:57:05,220 >> JOSEPH: Og du sparer massevis av linjer, ikke sant? 1116 00:57:05,220 --> 00:57:08,090 Og det gjør bare koden uten tvil en litt mer lesbar. 1117 00:57:08,090 --> 00:57:08,635 Ja, spørsmålet? 1118 00:57:08,635 --> 00:57:12,384 >> SPEAKER 6: For et trefoldig, kan du gå, string s lik s, spørsmålstegn? 1119 00:57:12,384 --> 00:57:15,280 Og så kan du ha, sier, fem forskjellige alternativer. 1120 00:57:15,280 --> 00:57:18,310 Og avhengig av hva antallet n var, ville du velge en av dem? 1121 00:57:18,310 --> 00:57:22,210 >> JOSEPH: Så spørsmålet er, er det en slags syntaks hvor du kan gjøre string 1122 00:57:22,210 --> 00:57:25,910 s lik n, og deretter ha mer enn to alternativer etter at spørsmålstegnet? 1123 00:57:25,910 --> 00:57:29,740 Og et enkelt svar er nei, det er ikke virkelig en god måte å gjøre det med mindre 1124 00:57:29,740 --> 00:57:33,850 du ønsker å hekke flere trefoldig operatørene inne i hverandre. 1125 00:57:33,850 --> 00:57:38,050 >> Du kan gjøre som n større enn 100, spørsmålstegn, og deretter en annen 1126 00:57:38,050 --> 00:57:41,850 ternært operatør, n er større enn 50, spørsmålstegn, og hekker det på den måten. 1127 00:57:41,850 --> 00:57:45,240 Men i den situasjonen, er koden får slags uleselig og rotete, 1128 00:57:45,240 --> 00:57:47,920 og det kan være bedre å bare gå til en If / Else uttalelse på dette punktet. 1129 00:57:47,920 --> 00:57:54,530 >> ROB: Og også, som en side note, PHP feilaktig implementerer trefoldig 1130 00:57:54,530 --> 00:57:58,053 operatør slik at nestet ternaries ikke engang fungerer som de skal. 1131 00:57:58,053 --> 00:57:58,840 >> JOSEPH: Yeah. 1132 00:57:58,840 --> 00:58:01,170 Så det blir litt forvirrende, spesielt når du går 1133 00:58:01,170 --> 00:58:02,145 til forskjellige språk. 1134 00:58:02,145 --> 00:58:04,810 >> ROB: Det er forvirrende nok at språk er galt med det. 1135 00:58:04,810 --> 00:58:08,030 1136 00:58:08,030 --> 00:58:11,510 >> JOSEPH: Så egentlig, bare for å avklare, vet alle hva som 1137 00:58:11,510 --> 00:58:13,900 % S gjør over her? 1138 00:58:13,900 --> 00:58:15,650 Eventuelle spørsmål om det? 1139 00:58:15,650 --> 00:58:19,760 Jeg antar bare for kameraet, den% s utgangspunktet lar oss sette en plassholder 1140 00:58:19,760 --> 00:58:20,790 for en streng. 1141 00:58:20,790 --> 00:58:23,920 Og så på slutten, vi spesifisere at variabel vi ønsker å sette inn i dette 1142 00:58:23,920 --> 00:58:25,500 plassholder er s. 1143 00:58:25,500 --> 00:58:27,730 Så som i utgangspunktet tar s og det setter det inn her. 1144 00:58:27,730 --> 00:58:32,130 Og så skrives det ut, du plukket en høy eller du plukket et lavt tall. 1145 00:58:32,130 --> 00:58:33,770 OK. 1146 00:58:33,770 --> 00:58:36,970 >> Så looper tillate deg å utføre ting i sirkulære bevegelser, ikke sant? 1147 00:58:36,970 --> 00:58:40,300 Du har kanskje støtt på dette i Ripe i form av Alltid looper 1148 00:58:40,300 --> 00:58:45,650 eller gjenta til eller gjenta en bestemt antall ganger. 1149 00:58:45,650 --> 00:58:47,540 Så hvorfor er dette bra for oss? 1150 00:58:47,540 --> 00:58:51,500 Vel, i C, la oss si at vi har dette sang implementert i Scratch at 1151 00:58:51,500 --> 00:58:53,450 synger, er dette sangen som aldri slutter. 1152 00:58:53,450 --> 00:58:55,710 Det går bare videre og videre og på for evig og alltid. 1153 00:58:55,710 --> 00:58:59,395 Vel, kan du egentlig ikke lage et program som har et uendelig antall printf 1154 00:58:59,395 --> 00:59:00,850 uttalelser i det, ikke sant? 1155 00:59:00,850 --> 00:59:04,900 >> Så i dette scenariet, en måte at du kan gjøre dette arbeidet og 1156 00:59:04,900 --> 00:59:09,330 å gjøre det ut for alltid er å i stedet bruke en while-loop. 1157 00:59:09,330 --> 00:59:13,640 Så en while-loop vil utføre hva som er i kroppen av de to tannregulering som 1158 00:59:13,640 --> 00:59:17,250 tilhører det basert på hva tilstanden er. 1159 00:59:17,250 --> 00:59:21,170 Så i dette spesielle eksempel før, hvis vi ønsker å skrive ut dette for alltid, hva 1160 00:59:21,170 --> 00:59:23,590 kan vi gjøre? 1161 00:59:23,590 --> 00:59:25,190 Vel, sikker, ikke sant? 1162 00:59:25,190 --> 00:59:32,290 >> Så denne typen kombinerer ideen av noen boolsk uttrykk 1163 00:59:32,290 --> 00:59:33,610 sammen med en løkke. 1164 00:59:33,610 --> 00:59:35,780 Og vi har lært om boolsk uttrykk tidligere. 1165 00:59:35,780 --> 00:59:39,650 Så når tilstanden innsiden av at mens fortsatt sant, denne sløyfen 1166 00:59:39,650 --> 00:59:41,480 vil kjøre på og av og på. 1167 00:59:41,480 --> 00:59:44,640 Og i dette tilfellet, hvis vi bare levere det med sann, dette fører til en uendelig 1168 00:59:44,640 --> 00:59:49,310 løkke som skriver ut sangen av og på og på som vi ønsket før uten 1169 00:59:49,310 --> 00:59:52,410 ha et program som har en uendelig antall printf-setninger, som er 1170 00:59:52,410 --> 00:59:55,220 ikke mulig. 1171 00:59:55,220 --> 00:59:57,810 >> Så mer overbevisende, skjønt, du kan bruke denne med en 1172 00:59:57,810 --> 00:59:59,710 variabel og en tilstand. 1173 00:59:59,710 --> 01:00:04,420 Så la oss si at vi ønsker å gjenta frase, helt sprø, 10 ganger. 1174 01:00:04,420 --> 01:00:08,380 Så hva kan du gjøre med en while-loop er kan du først klargjøre en teller 1175 01:00:08,380 --> 01:00:10,860 variable utenfor Mens sløyfe til 10 år. 1176 01:00:10,860 --> 01:00:14,360 Og så i utgangspunktet, hver gang du går gjennom Mens loop, du skriver ut 1177 01:00:14,360 --> 01:00:19,090 erklæringen og deretter redusere telleren variable inntil på slutten, 1178 01:00:19,090 --> 01:00:23,020 på et tidspunkt, når vi trekker jeg nok ganger, en fra jeg nok ganger - 1179 01:00:23,020 --> 01:00:27,290 og bare for å avklare, jeg minus minus betyr at jeg er lik jeg minus en. 1180 01:00:27,290 --> 01:00:31,280 >> Dette vil i utgangspunktet bringe I ned i punkt der en gang jeg traff null, dette 1181 01:00:31,280 --> 01:00:35,260 tilstand ikke lenger er oppfylt, og slik at de kommer ut av sløyfen. 1182 01:00:35,260 --> 01:00:37,045 Så helt sprø bare skriver ut 10 ganger. 1183 01:00:37,045 --> 01:00:39,550 1184 01:00:39,550 --> 01:00:41,080 Eventuelle spørsmål om en while-loop? 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 er en måte vi kan gjøre det vi bare gjorde i en mer kortfattet måte med 1188 01:00:50,550 --> 01:00:51,715 det vi kaller en for løkke. 1189 01:00:51,715 --> 01:00:55,750 Så en for løkke består av en initialisering, en tilstand, og en 1190 01:00:55,750 --> 01:00:58,950 oppdatering, akkurat som vi hadde før i denne Mens sløyfe. 1191 01:00:58,950 --> 01:00:59,890 Så la oss ta en titt. 1192 01:00:59,890 --> 01:01:02,900 I denne Mens sløyfe, hadde vi en initialisering, da vi hadde en 1193 01:01:02,900 --> 01:01:04,260 betinger at vi sjekket. 1194 01:01:04,260 --> 01:01:06,450 Og så hadde vi en oppdatering trinn på toppen. 1195 01:01:06,450 --> 01:01:10,060 >> Med en for løkke, tar dette utgangspunktet disse tre tingene og kondenserer det 1196 01:01:10,060 --> 01:01:11,370 ned i en linje. 1197 01:01:11,370 --> 01:01:15,130 Så det første som det gjør i For sløyfe er initialisering. 1198 01:01:15,130 --> 01:01:19,090 Og så gjør du et semikolon, og deretter du gjør tilstanden, som er jeg 1199 01:01:19,090 --> 01:01:22,200 større enn null, går der, og deretter oppdateringstrinnet. 1200 01:01:22,200 --> 01:01:26,470 Så dette blir utført på enden av sløyfen kroppen. 1201 01:01:26,470 --> 01:01:28,790 Så disse to programmene er i det vesentlige ekvivalente. 1202 01:01:28,790 --> 01:01:31,960 1203 01:01:31,960 --> 01:01:33,870 >> Eventuelle spørsmål? 1204 01:01:33,870 --> 01:01:37,000 Så hva er en forskjell mellom disse to? 1205 01:01:37,000 --> 01:01:38,000 Kan noen peke det ut? 1206 01:01:38,000 --> 01:01:40,480 Det kan være litt subtil. 1207 01:01:40,480 --> 01:01:41,930 Det er bare en svært liten forskjell. 1208 01:01:41,930 --> 01:01:42,330 Ja? 1209 01:01:42,330 --> 01:01:49,008 >> SPEAKER 5: Du ville ikke være i stand til å bruke I variable utenfor For sløyfen 1210 01:01:49,008 --> 01:01:49,962 [Uhørbart]? 1211 01:01:49,962 --> 01:01:50,900 >> JOSEPH: Nettopp. 1212 01:01:50,900 --> 01:01:53,550 Så dette er noe vi skal få til senere kalt variabel omfang. 1213 01:01:53,550 --> 01:01:56,610 Men egentlig, dette int i livet utenfor denne Mens sløyfe. 1214 01:01:56,610 --> 01:01:59,800 Så når denne Mens sløyfe er gjort gjennomføring, vil jeg kunne bruke jeg senere 1215 01:01:59,800 --> 01:02:00,880 on i programmet. 1216 01:02:00,880 --> 01:02:05,430 >> Mens med dette For loop, dette int jeg er omfangs innsiden av denne For loop. 1217 01:02:05,430 --> 01:02:10,240 Og fordi det er på innsiden av dette parti av For-løkke, som starter 1218 01:02:10,240 --> 01:02:13,200 på parenteser og ender med krøllete brace der borte. 1219 01:02:13,200 --> 01:02:16,120 Alt som er erklært innsiden av her kan ikke brukes utenfor. 1220 01:02:16,120 --> 01:02:20,420 Så hvis jeg prøver å bruke jeg utenfor, det vil fortell meg, undeclared symbol. 1221 01:02:20,420 --> 01:02:22,420 Og egentlig, ville jeg ikke være i stand til å bruke den. 1222 01:02:22,420 --> 01:02:28,460 >> ROB: Og vel, for 10 år siden, i bokstavelig talt alle tilfeller, klammeparentes er 1223 01:02:28,460 --> 01:02:31,140 hva du brukte til å bestemme omfanget av en variabel. 1224 01:02:31,140 --> 01:02:37,240 Så i det, int jeg tilsvarer 10 er erklært innsiden av denne 1225 01:02:37,240 --> 01:02:38,520 satt av klammeparentes. 1226 01:02:38,520 --> 01:02:42,530 Og så så så lenge du prøver å bruke jeg før denne klammeparentes, det er greit. 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 gjør, du se dash, dash, std, lik, c99. 1229 01:02:51,460 --> 01:02:57,100 >> Så det er en nyere versjon av C som GCC har implementert som også gir 1230 01:02:57,100 --> 01:02:58,740 denne snarveien. 1231 01:02:58,740 --> 01:03:03,505 Så dette pleide å ikke være tillatt i C. Og du kan se hvorfor, fordi dette int 1232 01:03:03,505 --> 01:03:07,600 Jeg er ute av denne klammeparentes, men det er fortsatt anses å være i 1233 01:03:07,600 --> 01:03:09,750 Omfanget av disse klammeparentes. 1234 01:03:09,750 --> 01:03:14,120 Men dette er en veldig praktisk ting, og så er det en god forlengelse. 1235 01:03:14,120 --> 01:03:15,370 >> JOSEPH: Noen spørsmål? 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å hva er mer nyttig er at noen ganger du ønsker slags dynamikk i 1239 01:03:22,820 --> 01:03:23,410 loop, ikke sant? 1240 01:03:23,410 --> 01:03:26,350 Du ønsker ikke å bare nødvendigvis ut helt sprø hele tiden, du 1241 01:03:26,350 --> 01:03:28,650 vil telle ned fra 10 eller noe. 1242 01:03:28,650 --> 01:03:32,010 Og så du kan bruke tellervariabelen innsiden av det sløyfe også. 1243 01:03:32,010 --> 01:03:35,530 Og i dette tilfellet, er dette program bare teller ned fra 10 hele veien ned. 1244 01:03:35,530 --> 01:03:39,260 Og hva betyr det ikke ut? 1245 01:03:39,260 --> 01:03:42,790 Det skrives ikke ut null, riktig, fordi når - 1246 01:03:42,790 --> 01:03:45,460 Ja, det også ikke skrives ut 11. 1247 01:03:45,460 --> 01:03:49,200 >> Så det ikke skrives ut null, fordi når Jeg er null, husk, det evaluerer 1248 01:03:49,200 --> 01:03:52,170 tilstanden før det går videre å utføre sløyfen kroppen. 1249 01:03:52,170 --> 01:03:56,820 Og når jeg er null, er dette falsk, så det trenger ikke skrive ut teller ned 1250 01:03:56,820 --> 01:04:00,200 null, det skrives bare ut telling ned 10 hele veien ned til en. 1251 01:04:00,200 --> 01:04:03,420 Hvis vi faktisk ønsket det å skrive ut null, Da ville vi sette et likhetstegn 1252 01:04:03,420 --> 01:04:04,750 etter dette større enn-tegn. 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å en måte å gjøre validering av inndata som er når du ber brukeren om å gjøre 1256 01:04:16,410 --> 01:04:18,620 noe, vil du sørge for at de følge dine instruksjoner, er å bruke 1257 01:04:18,620 --> 01:04:19,400 While løkke, ikke sant? 1258 01:04:19,400 --> 01:04:22,990 Så i dette tilfellet, ber jeg for et positivt tall, og da er jeg 1259 01:04:22,990 --> 01:04:23,810 venter på innspill. 1260 01:04:23,810 --> 01:04:28,210 >> Og da jeg sjekket Mens inngangen er mindre enn null, fortsette å spørre dem. 1261 01:04:28,210 --> 01:04:32,100 Så så lenge de gir meg et nummer som ikke er positiv, fortsette å spørre, 1262 01:04:32,100 --> 01:04:33,600 fortsette å spørre, fortsette å spørre. 1263 01:04:33,600 --> 01:04:35,860 Men hva er slags merkelig om dette? 1264 01:04:35,860 --> 01:04:38,570 Eller hva synes ikke optimal om denne strukturen akkurat her? 1265 01:04:38,570 --> 01:04:44,282 1266 01:04:44,282 --> 01:04:44,758 Anyone? 1267 01:04:44,758 --> 01:04:45,234 Ja? 1268 01:04:45,234 --> 01:04:47,614 >> SPEAKER 6: Du gjentar instruksjonen to ganger. 1269 01:04:47,614 --> 01:04:48,100 >> JOSEPH: Høyre. 1270 01:04:48,100 --> 01:04:50,090 Så vi har to printf uttalelser her, ikke sant? 1271 01:04:50,090 --> 01:04:53,440 Så det er en måte vi kan få dette bare ned til en som ville gjøre 1272 01:04:53,440 --> 01:04:57,170 koden lettere å lese og en litt mer ren. 1273 01:04:57,170 --> 01:05:00,180 Og så ville vi ikke å har Get i dobbelt så godt. 1274 01:05:00,180 --> 01:05:03,740 Og en måte du kan gjøre dette på er ved hjelp av en Do-while-loop. 1275 01:05:03,740 --> 01:05:07,670 >> Og en Do-while-loop er i utgangspunktet en annen form for a While løkke der 1276 01:05:07,670 --> 01:05:11,460 alt innenfor klammeparentes blir utført minst en gang. 1277 01:05:11,460 --> 01:05:14,840 Så her, erklærer jeg, int input, utenfor først. 1278 01:05:14,840 --> 01:05:18,100 Og så jeg bare sier, gjør dette instruksjon mens inngang 1279 01:05:18,100 --> 01:05:19,140 er mindre enn null. 1280 01:05:19,140 --> 01:05:20,530 Så det treffer Do først. 1281 01:05:20,530 --> 01:05:24,190 Det vil alltid utføre dette minst en gang, så det vil alltid spørre brukeren 1282 01:05:24,190 --> 01:05:25,960 om inndata minst én gang. 1283 01:05:25,960 --> 01:05:29,390 Og så vurderer den inngangen, og det foregår i en sirkel. 1284 01:05:29,390 --> 01:05:30,135 Ja, spørsmålet? 1285 01:05:30,135 --> 01:05:32,602 >> SPEAKER 6: Er det en måte å gjøre det [Uhørbart] typer, som hvis du sier, 1286 01:05:32,602 --> 01:05:34,268 GetString, og noen [uhørbart] 1287 01:05:34,268 --> 01:05:35,220 er det en måte å [uhørbart] 1288 01:05:35,220 --> 01:05:40,060 >> JOSEPH: Så spørsmålet er, er det en måte å gjøre validering av inndata hvis brukeren 1289 01:05:40,060 --> 01:05:41,850 setter ikke i riktig type variabel? 1290 01:05:41,850 --> 01:05:44,460 Så hvis vi ber om en int og de gi oss en streng i stedet. 1291 01:05:44,460 --> 01:05:49,110 Og i de funksjonene som vi implementerer for deg, GetInt, GetString i alle 1292 01:05:49,110 --> 01:05:52,680 disse funksjonene, de faktisk allerede gjøre den slags grunnleggende type innspill 1293 01:05:52,680 --> 01:05:54,120 validering under panseret. 1294 01:05:54,120 --> 01:05:57,390 Så hvis du bruker funksjonene som vi ga deg, trenger du egentlig ikke må. 1295 01:05:57,390 --> 01:06:01,380 >> Men hvis du ønsker å se mer på hvordan du kan faktisk gjøre det, kan du se 1296 01:06:01,380 --> 01:06:03,360 under panseret på filen I/O-- 1297 01:06:03,360 --> 01:06:07,990 Ikke fil, standard I / O-funksjoner som en leser fra standard input og 1298 01:06:07,990 --> 01:06:08,580 standard ut. 1299 01:06:08,580 --> 01:06:10,630 Og du kan få en bedre følelse på hvordan du kan gjøre det. 1300 01:06:10,630 --> 01:06:13,670 >> ROB: Ett problem, skjønt, er spesielt med eksempelet du 1301 01:06:13,670 --> 01:06:17,070 sa, forventer du en streng og jeg legger inn en int. 1302 01:06:17,070 --> 01:06:20,110 Hvordan ville du fortelle forskjellen mellom forsettlig ønsker det 1303 01:06:20,110 --> 01:06:23,130 string 123 versus ønsker den int 123? 1304 01:06:23,130 --> 01:06:29,230 Så streng, det er ganske mye det er ingen validering, det er bare hva de 1305 01:06:29,230 --> 01:06:31,600 tastet du vil tolke som en streng. 1306 01:06:31,600 --> 01:06:35,790 >> Int er enklere, fordi uansett innspill du tar fra brukeren, er du 1307 01:06:35,790 --> 01:06:37,470 alltid å ta en streng. 1308 01:06:37,470 --> 01:06:40,650 Og slik at strengen kan du da sjekk, er alle disse 1309 01:06:40,650 --> 01:06:44,218 faktisk sifre? 1310 01:06:44,218 --> 01:06:45,170 >> JOSEPH: OK. 1311 01:06:45,170 --> 01:06:46,420 Eventuelle spørsmål om en Do-while-loop? 1312 01:06:46,420 --> 01:06:49,170 >> ROB: Oh, og dette er også - 1313 01:06:49,170 --> 01:06:55,130 går tilbake til omfang, noe vanlig feil er å prøve å bruke noen lokale 1314 01:06:55,130 --> 01:06:59,540 variabel fra denne Do-Mens sløyfe inne i denne tilstanden. 1315 01:06:59,540 --> 01:07:02,850 Og faktisk, hvis vi bare ble kvitt dette og sa, int innspill lik 1316 01:07:02,850 --> 01:07:06,990 GetInt, da kompilatoren vil kjefte på oss, fordi inngangs ikke eksisterer 1317 01:07:06,990 --> 01:07:08,900 utenfor rammen av disse klammeparentes. 1318 01:07:08,900 --> 01:07:10,792 >> JOSEPH: Og det er derfor vi trenger denne lineup her. 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å du kan også bryte ut av en løkke tidlig hvis du vil. 1322 01:07:17,530 --> 01:07:21,240 Så dette er en annerledes måte å gjennomføre det vi nettopp gjennomført. 1323 01:07:21,240 --> 01:07:24,340 Og i stedet for å bruke tilstanden innenfor parenteser, bruker vi en 1324 01:07:24,340 --> 01:07:26,920 Hvis uttalelsen innsiden av kroppen av Do-Mens sløyfe. 1325 01:07:26,920 --> 01:07:30,000 >> Og i utgangspunktet, når inngangen er endelig større enn null, vil vi 1326 01:07:30,000 --> 01:07:31,000 bryte ut av sløyfen. 1327 01:07:31,000 --> 01:07:33,420 Og så skal vi gå hele veien ned her. 1328 01:07:33,420 --> 01:07:37,920 Og du kan se at dette ville sannsynligvis være å foretrekke i denne 1329 01:07:37,920 --> 01:07:39,870 scenario, fordi det er litt litt renere og litt 1330 01:07:39,870 --> 01:07:41,380 litt lettere å lese. 1331 01:07:41,380 --> 01:07:45,210 Mens dette, du liksom har ekstra linjer i det. 1332 01:07:45,210 --> 01:07:47,890 Det er bare litt styggere, Jeg antar, på en måte. 1333 01:07:47,890 --> 01:07:48,530 Ja, spørsmålet? 1334 01:07:48,530 --> 01:07:52,178 >> SPEAKER 4: Vil bryte bare få deg ut av ett sett med tannregulering? 1335 01:07:52,178 --> 01:07:53,080 >> JOSEPH: Høyre. 1336 01:07:53,080 --> 01:07:58,100 Så spørsmålet er vil bryte bare komme deg ut av en sløyfe? 1337 01:07:58,100 --> 01:07:59,280 Og svaret er ja. 1338 01:07:59,280 --> 01:08:04,290 Så hvis du har nestet For looper, for eksempel, hvis jeg har for int jeg er lik 0 1339 01:08:04,290 --> 01:08:09,040 inntil 10 og deretter For int J er lik 0 inntil 10, hvis jeg bryter ut av det indre 1340 01:08:09,040 --> 01:08:12,310 loop, vil jeg fortsatt gå til den ytre sløyfe. 1341 01:08:12,310 --> 01:08:15,760 Så det vil holde utfører operasjoner på utsiden. 1342 01:08:15,760 --> 01:08:17,640 Eventuelle spørsmål om det? 1343 01:08:17,640 --> 01:08:18,000 Ja? 1344 01:08:18,000 --> 01:08:21,760 >> SPEAKER 5: Men bryte bare funksjoner for klammeparentes, ikke for andre 1345 01:08:21,760 --> 01:08:22,230 uttalelser? 1346 01:08:22,230 --> 01:08:22,700 [Uhørbart] 1347 01:08:22,700 --> 01:08:27,620 >> JOSEPH: Så spørsmålet er vil bryte kun virker i sløyfer i motsetning til 1348 01:08:27,620 --> 01:08:29,014 andre utsagn som Hvis? 1349 01:08:29,014 --> 01:08:32,950 Og ja, det er tilfelle, fordi du bryte ut av en loop, ikke sant, 1350 01:08:32,950 --> 01:08:33,630 på en måte. 1351 01:08:33,630 --> 01:08:37,215 >> ROB: I de aller fleste tilfeller er det dette er den slags Hvis noe, 1352 01:08:37,215 --> 01:08:37,660 deretter bryte. 1353 01:08:37,660 --> 01:08:41,580 Så du trenger ikke å bryte å gjelde If som innpakning rundt det. 1354 01:08:41,580 --> 01:08:45,250 Og også, er dette ikke mye av en loop, men husk at bryterne er også 1355 01:08:45,250 --> 01:08:46,340 brutt ut av ved pauser. 1356 01:08:46,340 --> 01:08:48,390 Vi så pauser blir brukt med brytere før. 1357 01:08:48,390 --> 01:08:52,189 >> JOSEPH: Og du kan også bruke dem i mens looper og looper. 1358 01:08:52,189 --> 01:08:54,560 Eventuelle spørsmål? 1359 01:08:54,560 --> 01:08:55,830 OK. 1360 01:08:55,830 --> 01:08:57,779 Så neste opp er funksjoner. 1361 01:08:57,779 --> 01:09:01,500 Så du kan ha brukt en av disse BYOB blokker i Lotteri-prosjektet. 1362 01:09:01,500 --> 01:09:04,569 Og dette gir i utgangspunktet du kan definere et sett av 1363 01:09:04,569 --> 01:09:05,680 instruksjoner som skal følges. 1364 01:09:05,680 --> 01:09:09,569 >> Og hva jeg mener med det er la oss tenke tilbake til matematikk, høyre, algebra. 1365 01:09:09,569 --> 01:09:13,370 Du har det vi kaller en funksjon av x, noen variable, og la oss si dette 1366 01:09:13,370 --> 01:09:16,080 Funksjonen er f av x er lik x pluss fem. 1367 01:09:16,080 --> 01:09:20,410 Så du kan tenke på f av x som dette svart boks som tar 15 inn og deretter 1368 01:09:20,410 --> 01:09:22,590 produserer 20. 1369 01:09:22,590 --> 01:09:26,630 >> Så mer generelt, er en funksjon noe som tar noen innganger og 1370 01:09:26,630 --> 01:09:27,880 da produserer noen utganger. 1371 01:09:27,880 --> 01:09:31,920 1372 01:09:31,920 --> 01:09:32,960 Og hvorfor er funksjoner god? 1373 01:09:32,960 --> 01:09:35,189 De er bra for en rekke årsaker. 1374 01:09:35,189 --> 01:09:40,470 Så ønsker noen til å ta et stikk til hvilken organisasjon betyr? 1375 01:09:40,470 --> 01:09:42,630 Når det gjelder hvorfor funksjonene er nyttige? 1376 01:09:42,630 --> 01:09:43,090 Ja? 1377 01:09:43,090 --> 01:09:44,735 >> SPEAKER 4: Det gjør koden mer lesbar. 1378 01:09:44,735 --> 01:09:45,399 >> JOSEPH: Høyre. 1379 01:09:45,399 --> 01:09:47,670 Så en av de tingene er det som gjør koden mer lesbar, ikke sant? 1380 01:09:47,670 --> 01:09:53,710 I stedet for å ha lignende int x er lik x ganger x ganger x, kan jeg ha kube av x, 1381 01:09:53,710 --> 01:09:57,190 som er lettere å lese og mer forståelig for en leser. 1382 01:09:57,190 --> 01:10:01,150 >> Organisasjonen er også i form av splitte opp koden din inn i håndterbare 1383 01:10:01,150 --> 01:10:05,610 porsjoner, slik at i stedet for å prøve å implementere dette i ett lang seksjon 1384 01:10:05,610 --> 01:10:09,070 i hoved, kan du liksom dele den opp inn som, OK, la oss skrive en funksjon 1385 01:10:09,070 --> 01:10:11,910 i Cube noe, la oss skrive et fungere til torget noe. 1386 01:10:11,910 --> 01:10:15,950 På den måten kan du dele den opp i bittesmå, små deler som du kan takle 1387 01:10:15,950 --> 01:10:18,944 i motsetning til forsøk på å takle et stort problem på en gang. 1388 01:10:18,944 --> 01:10:21,806 >> ROB: Eller til og med små, små deler som du og en partner kan takle. 1389 01:10:21,806 --> 01:10:22,283 >> JOSEPH: Yeah. 1390 01:10:22,283 --> 01:10:23,855 >> ROB: Så i stedet for begge du prøver å implantere en 1391 01:10:23,855 --> 01:10:27,170 fungere samtidig. 1392 01:10:27,170 --> 01:10:28,800 >> JOSEPH: Forenkling. 1393 01:10:28,800 --> 01:10:30,050 Alle som ønsker å ta en gjetning? 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 repetisjon. 1397 01:10:34,675 --> 01:10:35,260 >> JOSEPH: Høyre. 1398 01:10:35,260 --> 01:10:39,210 Så en ting som du kan gjøre med forenkling er at det er liksom på 1399 01:10:39,210 --> 01:10:42,520 de samme linjene som re-brukervennlighet er at når jeg skriver en kube funksjon, kan jeg 1400 01:10:42,520 --> 01:10:45,410 bare bruke den om og om igjen og om igjen igjen i mitt program i stedet for å skrive 1401 01:10:45,410 --> 01:10:49,610 x ganger x ganger x om og om og om igjen. 1402 01:10:49,610 --> 01:10:52,980 Og forenkling her også bare betyr det gjør koden slags 1403 01:10:52,980 --> 01:10:55,900 lettere å feilsøke når du splitte dette opp i funksjoner. 1404 01:10:55,900 --> 01:10:58,250 Fordi da kan du lokalisere hvor dine problemer liksom er. 1405 01:10:58,250 --> 01:11:00,910 1406 01:11:00,910 --> 01:11:02,160 Eventuelle spørsmål? 1407 01:11:02,160 --> 01:11:04,200 1408 01:11:04,200 --> 01:11:06,540 >> Så en annen idé er abstraksjon, ikke sant? 1409 01:11:06,540 --> 01:11:07,390 Denne svarte boksen. 1410 01:11:07,390 --> 01:11:11,360 Som vet du hva GetInt gjør å motta innspill fra brukeren? 1411 01:11:11,360 --> 01:11:12,510 Vi har egentlig ikke fortalt deg, ikke sant? 1412 01:11:12,510 --> 01:11:15,670 Alt vi har fortalt deg er GetInt gjør akkurat det den sier den gjør. 1413 01:11:15,670 --> 01:11:18,440 Så selv om vi ikke fortelle deg hvordan det fungerer, du fortsatt kjenner. 1414 01:11:18,440 --> 01:11:21,670 >> Så i dette tilfellet, er dette et firemannsrom funksjon som gjør 1415 01:11:21,670 --> 01:11:24,520 forskjellige ting for en inngang for å produsere et utgangssignal. 1416 01:11:24,520 --> 01:11:28,050 Og du kan firedoble en rekke ved å multiplisere det med fire. 1417 01:11:28,050 --> 01:11:30,790 Eller du kan det vi kaller bit skifte det med to. 1418 01:11:30,790 --> 01:11:32,960 Og vi vil dekke dette litt senere. 1419 01:11:32,960 --> 01:11:36,570 Og det er ikke nødvendig å vite hvordan dette funksjonen fungerer faktisk så lenge det 1420 01:11:36,570 --> 01:11:37,640 fungerer som oppgitt. 1421 01:11:37,640 --> 01:11:40,740 >> Så under panseret, kan jeg være lignende, returnere inngangs ganger 1422 01:11:40,740 --> 01:11:41,690 åtte dividert med to. 1423 01:11:41,690 --> 01:11:42,510 Og du ville ikke vite, ikke sant? 1424 01:11:42,510 --> 01:11:44,970 Alt du trenger å vite er den gjør det den sier. 1425 01:11:44,970 --> 01:11:48,070 Så det er nyttig ting om abstraksjon. 1426 01:11:48,070 --> 01:11:52,910 >> Og en annen ting er liksom denne ideen av lokalisering koden din til en 1427 01:11:52,910 --> 01:11:54,280 bestemt del. 1428 01:11:54,280 --> 01:11:57,450 Så hvis du har et problem, gjør du ikke må gå over koden din prøver 1429 01:11:57,450 --> 01:11:58,730 å fikse der problemet var. 1430 01:11:58,730 --> 01:12:00,990 Så i dette tilfellet, implementert jeg kube galt. 1431 01:12:00,990 --> 01:12:02,820 Jeg trodde kube ble multiplisere av tre. 1432 01:12:02,820 --> 01:12:05,760 >> Så i dette tilfelle, er dette en program som nettopp har multiplisere med tre 1433 01:12:05,760 --> 01:12:06,750 overalt. 1434 01:12:06,750 --> 01:12:10,910 Og det er et annet program som har priset kube ut i en funksjon. 1435 01:12:10,910 --> 01:12:14,040 Og så nå hvis jeg ønsker å fikse min feil her, må jeg fikse hver enkelt linje 1436 01:12:14,040 --> 01:12:15,620 av koden i dette programmet. 1437 01:12:15,620 --> 01:12:19,190 Mens på den annen side, hvis jeg benytte funksjon, jeg trenger bare å endre 1438 01:12:19,190 --> 01:12:20,650 hva som var galt på ett sted. 1439 01:12:20,650 --> 01:12:25,330 1440 01:12:25,330 --> 01:12:28,730 >> Så i informatikk, vi kaller inn-og utganger. 1441 01:12:28,730 --> 01:12:31,640 Innganger kalles parametere eller argumenter, og utganger er kalt 1442 01:12:31,640 --> 01:12:32,950 returnere verdier. 1443 01:12:32,950 --> 01:12:39,000 Og vi vil se hvordan dette hjelper oss med å sortere for å definere en funksjon i et andre. 1444 01:12:39,000 --> 01:12:41,430 Så dette er en funksjon definisjon for cubing. 1445 01:12:41,430 --> 01:12:45,110 Så det tar en inngang, og deretter den returnerer at antall ganger 1446 01:12:45,110 --> 01:12:47,020 seg selv tre ganger. 1447 01:12:47,020 --> 01:12:48,020 Så la oss bryte dette ned. 1448 01:12:48,020 --> 01:12:53,090 >> Så vi har en funksjon header, som egentlig består av tre ting. 1449 01:12:53,090 --> 01:12:56,050 Så vi har parameterne, som er, som jeg sa tidligere, det 1450 01:12:56,050 --> 01:12:57,680 input i denne funksjonen. 1451 01:12:57,680 --> 01:12:59,300 Og så gir vi funksjonen et navn. 1452 01:12:59,300 --> 01:13:00,740 I dette tilfellet, det heter kube. 1453 01:13:00,740 --> 01:13:03,860 Og da vi spesifisere hva den type av returverdien er. 1454 01:13:03,860 --> 01:13:06,760 >> Så i dette tilfellet, min kube funksjon foregår i et heltall, og det er også 1455 01:13:06,760 --> 01:13:07,890 returnerer et heltall. 1456 01:13:07,890 --> 01:13:11,510 Så hvis jeg passerer i to, er to et heltall, den returnerer åtte til meg, som 1457 01:13:11,510 --> 01:13:13,250 er et helt tall. 1458 01:13:13,250 --> 01:13:15,420 Så tilbake typenavn parametere. 1459 01:13:15,420 --> 01:13:16,670 Spørsmål om det? 1460 01:13:16,670 --> 01:13:19,440 1461 01:13:19,440 --> 01:13:24,230 >> Og deretter returverdien er faktisk spesifisert på slutten ved å si retur 1462 01:13:24,230 --> 01:13:27,540 og deretter tilbake uansett inneholder returverdi. 1463 01:13:27,540 --> 01:13:30,940 Så i dette tilfellet, hvis vi setter det hele sammen, tar en funksjon 1464 01:13:30,940 --> 01:13:35,100 parametere, det heter noe, og den returnerer noe som er den typen 1465 01:13:35,100 --> 01:13:36,350 at vi sier det skulle være. 1466 01:13:36,350 --> 01:13:39,830 1467 01:13:39,830 --> 01:13:41,080 Eventuelle spørsmål? 1468 01:13:41,080 --> 01:13:43,710 1469 01:13:43,710 --> 01:13:45,080 >> Så hvordan skal vi bruke en funksjon? 1470 01:13:45,080 --> 01:13:49,230 Vel, vi skriver en funksjon, og deretter vi bruker det i programmet vårt, ikke sant? 1471 01:13:49,230 --> 01:13:51,565 Så jeg kalte det kube, og Da kan jeg bruke kuben. 1472 01:13:51,565 --> 01:13:54,200 >> Men det som er viktig å merke seg Er det en ordre saker. 1473 01:13:54,200 --> 01:13:58,100 Hvis jeg har kube under hoved, er det kommer til å kjøre inn i kuben. 1474 01:13:58,100 --> 01:14:00,360 Og på dette punktet, er det ingenting kalt kube i programmet, og det er 1475 01:14:00,360 --> 01:14:02,550 bare kommer til å være som, jeg har ingen anelse om hva kube er. 1476 01:14:02,550 --> 01:14:05,060 >> Så det vil si deg, implisitt erklæring funksjon. 1477 01:14:05,060 --> 01:14:06,690 Det er feil som dukker opp. 1478 01:14:06,690 --> 01:14:10,230 Og så i dette tilfellet, er kuben under viktigste, så er det ikke til 1479 01:14:10,230 --> 01:14:12,006 å vite om det. 1480 01:14:12,006 --> 01:14:14,724 >> SPEAKER 5: Så viktigste er vanligvis den siste funksjonen definert? 1481 01:14:14,724 --> 01:14:17,290 >> JOSEPH: Så spørsmålet er, er hoved vanligvis den siste 1482 01:14:17,290 --> 01:14:18,170 ting som du vil definere? 1483 01:14:18,170 --> 01:14:19,730 Og nei. 1484 01:14:19,730 --> 01:14:22,280 Det er fordi vi vanligvis liker hoved å være på toppen, hva? 1485 01:14:22,280 --> 01:14:24,640 Fordi det er det første du ønsker programmereren åpne 1486 01:14:24,640 --> 01:14:25,640 program for å se. 1487 01:14:25,640 --> 01:14:29,950 Og så hvordan skal vi løse dette problemet av vi ønsker viktigste å være på toppen, men den 1488 01:14:29,950 --> 01:14:33,750 funksjoner som vi ønsker, vi vil ha dem å være under hoved men likevel være i stand til å bruke 1489 01:14:33,750 --> 01:14:34,930 dem innsiden av hoved? 1490 01:14:34,930 --> 01:14:36,870 >> Vel, vi bruker det vi kaller en funksjon prototype. 1491 01:14:36,870 --> 01:14:40,830 Så hva en funksjon prototype hovedsak er er det første tar det 1492 01:14:40,830 --> 01:14:45,060 signaturen eller funksjonen header av hva vi ønsker å implementere ned 1493 01:14:45,060 --> 01:14:47,420 her, og vi setter det på toppen av et program. 1494 01:14:47,420 --> 01:14:51,400 >> Så i dette tilfellet, sier vi at, vel, senere i programmet vårt, vi skal 1495 01:14:51,400 --> 01:14:55,010 å lage et løfte om å gjennomføre dette funksjon kalt int kube, som tar 1496 01:14:55,010 --> 01:14:56,260 et heltall innspill. 1497 01:14:56,260 --> 01:15:00,870 Så nå, fordi det er over hoved, viktigste, det kommer til å si, oh, vel, 1498 01:15:00,870 --> 01:15:03,910 senere i programmet, som kommer til å være det slik at jeg kan referere til det, så jeg vil 1499 01:15:03,910 --> 01:15:05,230 bare la det gå gjennom for nå. 1500 01:15:05,230 --> 01:15:07,660 >> Og så i bunnen, vi implementere kube. 1501 01:15:07,660 --> 01:15:11,180 Og da hoved vil bare si, vel, vil det liksom kobling 1502 01:15:11,180 --> 01:15:12,250 disse to symbolene sammen. 1503 01:15:12,250 --> 01:15:14,320 Og vi vil dekke hva som betyr senere. 1504 01:15:14,320 --> 01:15:17,090 Og så det skal vite at dette er den kube funksjon som den skal brukes. 1505 01:15:17,090 --> 01:15:19,630 1506 01:15:19,630 --> 01:15:23,383 >> ROB: The [uhørbart] om å ville Hoved nederst eller 1507 01:15:23,383 --> 01:15:24,880 topp, jeg har sett begge deler. 1508 01:15:24,880 --> 01:15:28,630 Det er ting som bare liker for å sette hoved nederst. 1509 01:15:28,630 --> 01:15:32,520 Men når et prosjekt blir spesielt stort, vanligvis hoved er i en 1510 01:15:32,520 --> 01:15:34,290 fil alle sine egne. 1511 01:15:34,290 --> 01:15:38,170 Og på det punktet, som int kube linjen ville - 1512 01:15:38,170 --> 01:15:42,460 innsiden av stdio.h er en gjeng linjer akkurat som at int 1513 01:15:42,460 --> 01:15:44,010 kube int linjeinngang. 1514 01:15:44,010 --> 01:15:50,170 >> Og så disse prototypene er ting du en tendens til å sette inn header-filer, på 1515 01:15:50,170 --> 01:15:52,140 hvilket tidspunkt, spiller det ingen rolle. 1516 01:15:52,140 --> 01:15:54,700 Vel, det spiller ingen rolle. 1517 01:15:54,700 --> 01:15:56,070 De som alltid går på toppen. 1518 01:15:56,070 --> 01:15:59,490 Og hvis viktigste er ikke en fil alle sine egne, du trenger ikke å bekymre deg om å sette 1519 01:15:59,490 --> 01:16:02,360 individuelle funksjons prototyper i filen. 1520 01:16:02,360 --> 01:16:05,370 >> JOSEPH: Og vi får til det litt litt senere når Rob begynner å snakke 1521 01:16:05,370 --> 01:16:06,380 om kompilering. 1522 01:16:06,380 --> 01:16:09,480 Og så er det også en forskjell mellom parameter og argument. 1523 01:16:09,480 --> 01:16:12,500 Og parameter er akkurat det vi kaller disse inngangene når 1524 01:16:12,500 --> 01:16:13,820 Vi definerer funksjonen. 1525 01:16:13,820 --> 01:16:16,950 Og vi kaller det et argument når vi faktisk passere den inn i funksjonen. 1526 01:16:16,950 --> 01:16:19,600 >> Så i dette tilfelle, er dette en parameter, som vi sa før. 1527 01:16:19,600 --> 01:16:24,130 Og når vi faktisk bruker det over det, kube av x, så x selv er 1528 01:16:24,130 --> 01:16:25,910 hva vi kaller et argument til funksjonen kuben. 1529 01:16:25,910 --> 01:16:28,150 >> ROB: Så parameter argumenter er - 1530 01:16:28,150 --> 01:16:33,270 Det er dette skillet, veldig forvirret om hverandre. 1531 01:16:33,270 --> 01:16:37,090 På dette punktet, for meg, er det som en av de ordene som når jeg ser det ut i 1532 01:16:37,090 --> 01:16:41,190 vill, jeg kan ikke hjelpe, men umiddelbart spørsmål om de bruker det i 1533 01:16:41,190 --> 01:16:44,120 den riktige sammenheng, fordi Forskjellen er subtil nok til at bare 1534 01:16:44,120 --> 01:16:45,500 alle har en tendens - 1535 01:16:45,500 --> 01:16:48,530 Jeg nesten alltid si argument uavhengig av hva jeg mener. 1536 01:16:48,530 --> 01:16:51,230 1537 01:16:51,230 --> 01:16:54,630 >> Joseph: Og funksjoner er også nyttig for det vi kaller bivirkninger. 1538 01:16:54,630 --> 01:16:59,230 Så en funksjon kan ta ingen innganger, og det kan også produsere ingen utganger. 1539 01:16:59,230 --> 01:17:03,280 Så i dette tilfellet, er jeg å definere en subrutine som ikke har noen 1540 01:17:03,280 --> 01:17:03,970 returnere verdien. 1541 01:17:03,970 --> 01:17:07,730 Og for å spesifisere det, bruker vi hva vi kaller et tomrom over her. 1542 01:17:07,730 --> 01:17:10,890 Og slik bivirkning av denne funksjonen er at det skrives bare ting 1543 01:17:10,890 --> 01:17:11,920 ut til siden. 1544 01:17:11,920 --> 01:17:13,840 Det trenger faktisk ikke ta noen inngangene, og den ikke gjør 1545 01:17:13,840 --> 01:17:15,360 faktisk gi noen utganger. 1546 01:17:15,360 --> 01:17:18,230 >> Men dette kan være nyttig i den forstand hvis du vil, for eksempel, debug 1547 01:17:18,230 --> 01:17:21,530 noe i programmet, hvis du vil ha å skrive litt subrutine som 1548 01:17:21,530 --> 01:17:25,160 skrives ut, la oss si, innholdet minne eller noe. 1549 01:17:25,160 --> 01:17:29,800 Og så disse bivirkningene er noen ganger nyttig utenfor rammen 1550 01:17:29,800 --> 01:17:33,010 av bare liker innganger og utganger. 1551 01:17:33,010 --> 01:17:34,260 Eventuelle spørsmål? 1552 01:17:34,260 --> 01:17:37,270 1553 01:17:37,270 --> 01:17:44,240 >> Og for å avslutte dette segmentet, hva betyr dette programmet gjøre? 1554 01:17:44,240 --> 01:17:47,420 Jeg skal gi dere et par sekunder til å lese gjennom det. 1555 01:17:47,420 --> 01:17:52,720 1556 01:17:52,720 --> 01:17:56,880 På et helt grunnleggende nivå, hva vi ønsker å si er at den bytter x og y, ikke sant? 1557 01:17:56,880 --> 01:18:00,090 >> Så hvor mange av dere faktisk tror Dette vil bytte x og y? 1558 01:18:00,090 --> 01:18:02,160 Rekk opp hånden. 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 Som mener at det vil ikke bytte x og y? 1562 01:18:06,720 --> 01:18:09,120 Og summen av den var ikke hele rommet. 1563 01:18:09,120 --> 01:18:10,440 Så noen mennesker er ikke sikker. 1564 01:18:10,440 --> 01:18:10,920 OK. 1565 01:18:10,920 --> 01:18:11,630 Det er rimelig. 1566 01:18:11,630 --> 01:18:16,450 >> Så la oss gå gjennom hva som skjer når du faktisk ringe funksjoner først i 1567 01:18:16,450 --> 01:18:18,320 For å besvare dette spørsmålet. 1568 01:18:18,320 --> 01:18:21,430 Så dette er hva minne liksom ser ut. 1569 01:18:21,430 --> 01:18:23,860 Dette er liksom som en forenklet modell av hva minne ser ut når 1570 01:18:23,860 --> 01:18:24,800 du kjører et program. 1571 01:18:24,800 --> 01:18:27,270 Så er det noe som heter stabelen her nede og 1572 01:18:27,270 --> 01:18:28,330 noe som kalles haugen. 1573 01:18:28,330 --> 01:18:30,950 Og disse vokser mot midt i minnet. 1574 01:18:30,950 --> 01:18:33,860 >> Så i dette tilfellet, da du kaller en funksjon, det 1575 01:18:33,860 --> 01:18:35,680 blir satt på stakken. 1576 01:18:35,680 --> 01:18:38,900 Og da alt som er inneholdt i denne funksjonen forblir i det vi kaller det 1577 01:18:38,900 --> 01:18:40,550 funksjonens stack ramme. 1578 01:18:40,550 --> 01:18:44,500 Og så for å få en fin visualisering av dette, let's - for eksempel, hadde vi 1579 01:18:44,500 --> 01:18:45,960 -programmet tidligere. 1580 01:18:45,960 --> 01:18:47,820 Og innsiden av hoved, vi kalte kube. 1581 01:18:47,820 --> 01:18:50,650 Så hoved ville først gå på stakken ramme, fordi det er den første funksjonen 1582 01:18:50,650 --> 01:18:51,640 som heter. 1583 01:18:51,640 --> 01:18:55,740 >> Og så når kube kalles innsiden av Hoved, blir det satt på toppen av hoved 1584 01:18:55,740 --> 01:18:57,790 innsiden av minne. 1585 01:18:57,790 --> 01:19:02,090 Så hva vil du legge merke til her er at kuben har sine egne parametere og dens 1586 01:19:02,090 --> 01:19:02,950 egne lokalbefolkningen. 1587 01:19:02,950 --> 01:19:06,720 Så når du faktisk passere noe å en funksjon av parameterne som det 1588 01:19:06,720 --> 01:19:09,910 blir er kopier av det som var gått inn fra hoved. 1589 01:19:09,910 --> 01:19:14,140 >> Og for å liksom forklare dette, la oss går gjennom et program. 1590 01:19:14,140 --> 01:19:16,960 Så vi har bunken, og dette er bare stabelparti. 1591 01:19:16,960 --> 01:19:21,240 Og det vi gjør er vi først initial x og y til en og to. 1592 01:19:21,240 --> 01:19:22,400 Så vi har disse små boksene. 1593 01:19:22,400 --> 01:19:25,310 De sitter i hoved stack ramme på stakken. 1594 01:19:25,310 --> 01:19:26,580 De inneholder en og to. 1595 01:19:26,580 --> 01:19:28,820 >> Nå kaller vi swap. 1596 01:19:28,820 --> 01:19:33,940 Hva som skjer er vi passere x og y inn swap, og swap skaper sine egne kopier 1597 01:19:33,940 --> 01:19:36,520 av disse variablene å bruke inne av sin stabel rammen. 1598 01:19:36,520 --> 01:19:39,920 Så nå over det, har vi en som med verdien x hadde, og b, 1599 01:19:39,920 --> 01:19:41,620 som inneholder verdien y hadde. 1600 01:19:41,620 --> 01:19:42,670 Så en, to. 1601 01:19:42,670 --> 01:19:47,130 >> Og du vil merke at dette er separate fra x-og y innsiden av hoved. 1602 01:19:47,130 --> 01:19:51,390 Så vi nå opprette en midlertidig variabel til å inneholde en. 1603 01:19:51,390 --> 01:19:56,100 Vi satt en lik b, så det endringer fra en til to. 1604 01:19:56,100 --> 01:19:59,340 Og da vi satt b lik temp, som er en. 1605 01:19:59,340 --> 01:20:01,640 >> Og så nå avslutter vi ut av denne funksjonen. 1606 01:20:01,640 --> 01:20:04,310 1607 01:20:04,310 --> 01:20:07,410 Når du avslutter ut av funksjon, den stack ramme blir popped av stabelen. 1608 01:20:07,410 --> 01:20:08,270 Vi kaller det push. 1609 01:20:08,270 --> 01:20:12,750 Du trykker på en stabel ramme på stakken og du pop hvis av stabelen. 1610 01:20:12,750 --> 01:20:16,080 Og så det som skjer er alt som var i den bunken ramme liksom bare 1611 01:20:16,080 --> 01:20:17,280 går opp i flammer. 1612 01:20:17,280 --> 01:20:19,180 Og slik som ikke lenger eksisterer. 1613 01:20:19,180 --> 01:20:20,470 >> Men hva ser vi ikke? 1614 01:20:20,470 --> 01:20:23,690 Vi har aldri egentlig endret Verdiene av x og y, rette? 1615 01:20:23,690 --> 01:20:26,530 Så de bodde lokale til hoved. 1616 01:20:26,530 --> 01:20:29,900 Og ved å sende ting til swap, vi faktisk aldri endret disse verdiene. 1617 01:20:29,900 --> 01:20:31,260 Og hva kaller vi dette? 1618 01:20:31,260 --> 01:20:33,040 Vi kaller dette bestått av verdi. 1619 01:20:33,040 --> 01:20:36,860 >> Så i C, når du passerer ting inn funksjoner, det går dem etter verdi og 1620 01:20:36,860 --> 01:20:40,160 lager en kopi av dem for den funksjon som skal brukes. 1621 01:20:40,160 --> 01:20:43,980 Og vi vil lære om noe som kalles passerer ved henvisning senere, men det er 1622 01:20:43,980 --> 01:20:45,390 en måte du kan løse dette problemet. 1623 01:20:45,390 --> 01:20:47,080 Men vi vil ikke bekymre deg at før senere. 1624 01:20:47,080 --> 01:20:52,200 >> ROB: Og faktisk, det uttrykket, bestått ved henvisning, betyr så C ikke engang 1625 01:20:52,200 --> 01:20:54,270 passerer ved å referere. 1626 01:20:54,270 --> 01:20:56,760 C utelukkende har bestått av verdi. 1627 01:20:56,760 --> 01:20:59,630 Uansett hva du gjør, er du alltid passerer en kopi av noe. 1628 01:20:59,630 --> 01:21:03,395 Det er bare det at, som jeg liksom nevnt som før med pekere 1629 01:21:03,395 --> 01:21:07,690 og at en streng er egentlig bare fire bytes peker til et sted i minnet. 1630 01:21:07,690 --> 01:21:11,890 >> Vel, hvis jeg har denne strengen, og det er forteller meg at er der strengen - 1631 01:21:11,890 --> 01:21:15,470 vel, hvis jeg har denne pekeren til dette plasser i minnet, så jeg kan passere en 1632 01:21:15,470 --> 01:21:19,160 kopi av pekeren til en funksjon, og at funksjonen fortsatt vet hvor i 1633 01:21:19,160 --> 01:21:19,780 memory det er. 1634 01:21:19,780 --> 01:21:22,950 Så begge disse pekere peker til det samme sted i hukommelsen, og 1635 01:21:22,950 --> 01:21:26,460 det er hvordan vi kommer til å være i stand å endre ting utover 1636 01:21:26,460 --> 01:21:29,852 nåværende stack ramme. 1637 01:21:29,852 --> 01:21:31,040 >> JOSEPH: Ønsker du å gjøre kompilering? 1638 01:21:31,040 --> 01:21:31,820 >> ROB: Nei, det er 05:30. 1639 01:21:31,820 --> 01:21:32,910 >> JOSEPH: OK. 1640 01:21:32,910 --> 01:21:35,040 Det er 05:30. 1641 01:21:35,040 --> 01:21:35,360 OK. 1642 01:21:35,360 --> 01:21:39,280 Så vi vil dekke kompilering Jeg antar i neste avsnitt, eller din seksjon 1643 01:21:39,280 --> 01:21:42,795 lederen vil på det tidspunktet. 1644 01:21:42,795 --> 01:21:43,272 Og - 1645 01:21:43,272 --> 01:21:44,630 >> ROB: Noen spørsmål? 1646 01:21:44,630 --> 01:21:46,760 >> JOSEPH: Noen spørsmål? 1647 01:21:46,760 --> 01:21:47,150 Ja? 1648 01:21:47,150 --> 01:21:52,469 >> SPEAKER 5: Bruke strenger fra CS50, noe funksjoner som vi ønsker å bruke for 1649 01:21:52,469 --> 01:21:53,880 de, som vil være som C-funksjoner. 1650 01:21:53,880 --> 01:21:59,050 CS50 har ikke gått inn og gjort noe ekstra. 1651 01:21:59,050 --> 01:22:01,850 >> ROB: Riktig. 1652 01:22:01,850 --> 01:22:08,155 Enhver av C som [uhørbart], du ville bruke de på våre strenger. 1653 01:22:08,155 --> 01:22:12,400 >> JOSEPH: Og en siste ting jeg vil nevne er at vi har en stilguide 1654 01:22:12,400 --> 01:22:13,130 for denne klassen. 1655 01:22:13,130 --> 01:22:13,360 >> ROB: Å, ja. 1656 01:22:13,360 --> 01:22:15,270 >> JOSEPH: Så hvis du har kommet fra en programmering bakgrunn før, du 1657 01:22:15,270 --> 01:22:17,750 kan ha visse konvensjoner når du skriver kode som å sette 1658 01:22:17,750 --> 01:22:20,950 bukseseler på samme linje eller bestemt måter innrykk 1659 01:22:20,950 --> 01:22:22,240 eller navngi variablene. 1660 01:22:22,240 --> 01:22:26,870 I denne klassen, ønsker vi å følge en bestemt stil guide bare fordi, 1661 01:22:26,870 --> 01:22:31,100 vel, hvis du går ut og jobbe i industri, du kommer til å bli forventet 1662 01:22:31,100 --> 01:22:34,780 å følge stilen guide av selskap som du går til. 1663 01:22:34,780 --> 01:22:38,040 >> Som for eksempel Facebook Jeg tror har en bestemt form for navngiving 1664 01:22:38,040 --> 01:22:38,760 konvensjonen. 1665 01:22:38,760 --> 01:22:42,570 Og det er forskjeller mellom kamel casing variabler og akkurat som 1666 01:22:42,570 --> 01:22:44,610 skille dem med understrek. 1667 01:22:44,610 --> 01:22:52,170 Og også, tror jeg det viktigste, som for eksempel innrykk, ikke sant? 1668 01:22:52,170 --> 01:22:56,440 >> Vi klammeparentes starte der tilstanden er, og de 1669 01:22:56,440 --> 01:22:57,730 er på den neste linje. 1670 01:22:57,730 --> 01:23:01,230 Og vi har også satt klammeparentes i selv om det er bare én linje. 1671 01:23:01,230 --> 01:23:06,100 Og mange ganger, det finnes måter å gjøre det der du kan la disse bukseseler 1672 01:23:06,100 --> 01:23:08,380 av hvis det er bare én linje under Hvis uttalelsen. 1673 01:23:08,380 --> 01:23:12,070 Men i denne klassen, ønsker vi å følge en bestemt stil guide bare slik at du får 1674 01:23:12,070 --> 01:23:13,550 brukes til den slags ting. 1675 01:23:13,550 --> 01:23:16,410 >> ROB: Yeah, and Style 50 kommer til å håndheve denne stilen guide, og vi er 1676 01:23:16,410 --> 01:23:18,080 kommer til å bruke stil 50 til grad koden din. 1677 01:23:18,080 --> 01:23:25,150 Så det gjør ting enklere for oss og forhåpentligvis bør ikke gjøre ting som 1678 01:23:25,150 --> 01:23:30,120 mye verre for deg gitt standardisert type bør ikke være så 1679 01:23:30,120 --> 01:23:31,460 urealistisk. 1680 01:23:31,460 --> 01:23:36,000 >> JOSEPH: Og til slutt, for å finne stilen Guide, gå til manual.cs50.net/style. 1681 01:23:36,000 --> 01:23:37,725 Og ja. 1682 01:23:37,725 --> 01:23:40,575 >> SPEAKER 4: Skal du håndheve noen tegn per linje? 1683 01:23:40,575 --> 01:23:42,480 >> ROB: Ja. 1684 01:23:42,480 --> 01:23:45,405 >> JOSEPH: Sorry, folkens. 1685 01:23:45,405 --> 01:23:47,680 >> ROB: Det er som en av de eneste. 1686 01:23:47,680 --> 01:23:50,420 På dette punktet, jeg er OK med 120. 1687 01:23:50,420 --> 01:23:52,460 Jeg er OK med å si 120 tegn per linje. 1688 01:23:52,460 --> 01:23:53,830 Jeg forstår at det er en grense. 1689 01:23:53,830 --> 01:23:57,130 Jeg tror 80 er så liten, men vi håndheve det. 1690 01:23:57,130 --> 01:24:00,260 >> JOSEPH: Personlig synes jeg med C, 80 tegn er mer OK. 1691 01:24:00,260 --> 01:24:04,160 Når du begynner å få til andre språk som Javascript og PHP, ikke 1692 01:24:04,160 --> 01:24:08,860 så rimelig å bare begrense det til 80 tegn. 1693 01:24:08,860 --> 01:24:09,260 OK. 1694 01:24:09,260 --> 01:24:12,780 Vel, det var super-delen. 1695 01:24:12,780 --> 01:24:14,750 Er det noen som vil ha godteri? 1696 01:24:14,750 --> 01:24:16,000 >> SPEAKER 4: Ja. 1697 01:24:16,000 --> 01:24:18,667