1 00:00:00,000 --> 00:00:11,050 2 00:00:11,050 --> 00:00:13,351 >> ROB Bowden: Dette er den mer komfortabel delen, 3 00:00:13,351 --> 00:00:16,309 men det betyr ikke at hvis du føler at du ikke er mer komfortabel 4 00:00:16,309 --> 00:00:18,420 du vil ikke lære ting her. 5 00:00:18,420 --> 00:00:20,600 Så la oss komme i gang. 6 00:00:20,600 --> 00:00:22,819 Har du lysbilder går rett inn i ting. 7 00:00:22,819 --> 00:00:24,360 Er jeg i ferd med å bare ta det akkurat nå? 8 00:00:24,360 --> 00:00:25,680 9 00:00:25,680 --> 00:00:26,450 Bytte bærbare datamaskiner. 10 00:00:26,450 --> 00:00:30,470 11 00:00:30,470 --> 00:00:32,950 >> ALLISON: Du ønsker ikke å introdusere deg selv, Rob? 12 00:00:32,950 --> 00:00:34,090 >> ROB Bowden: Åh, jeg er Rob. 13 00:00:34,090 --> 00:00:35,182 14 00:00:35,182 --> 00:00:37,470 Dette er mitt femte år TF-ing CS50. 15 00:00:37,470 --> 00:00:38,760 16 00:00:38,760 --> 00:00:39,650 >> GABRIEL: Jeg er Gabriel. 17 00:00:39,650 --> 00:00:41,610 Jeg er head TF av CS50. 18 00:00:41,610 --> 00:00:44,009 Jeg var TF i fjor og i år. 19 00:00:44,009 --> 00:00:46,675 ALLISON: Og jeg er Alison, og dette er mitt andre år TF-ing CS50. 20 00:00:46,675 --> 00:00:48,510 21 00:00:48,510 --> 00:00:50,825 >> ROB Bowden: All right, så denne tingen til venstre, 22 00:00:50,825 --> 00:00:52,250 forhåpentligvis du har sett det før. 23 00:00:52,250 --> 00:00:54,112 Hvis ikke fordi du laste det ned selv, 24 00:00:54,112 --> 00:00:55,570 du burde ha sett det på forelesning. 25 00:00:55,570 --> 00:00:56,590 26 00:00:56,590 --> 00:01:01,320 Så dette er CS50 apparatet, og han hadde en litt av en beskrivelse av det 27 00:01:01,320 --> 00:01:01,880 på forelesning. 28 00:01:01,880 --> 00:01:06,890 Men i utgangspunktet er det bare deg kjører et operativsystem 29 00:01:06,890 --> 00:01:10,550 system innenfor drifts systemet slik at vi kan gi deg 30 00:01:10,550 --> 00:01:12,540 programmer uten behov å bekymre deg, oh er dette 31 00:01:12,540 --> 00:01:15,989 kommer til å jobbe på både Windows og Mac, eller hvis noen av dere 32 00:01:15,989 --> 00:01:17,280 er allerede bruker Linux, Linux. 33 00:01:17,280 --> 00:01:18,532 34 00:01:18,532 --> 00:01:20,240 Det er bare ment å være en vanlig spiller 35 00:01:20,240 --> 00:01:23,010 feltet slik at alle har det nøyaktig samme miljø. 36 00:01:23,010 --> 00:01:25,344 >> Så hvis du ikke har lastet ned dette allerede, 37 00:01:25,344 --> 00:01:28,510 du bør laste den ned, fordi du er kommer til å trenge det for problemet sett. 38 00:01:28,510 --> 00:01:32,335 Og det er en to gigabyte laste ned, så det kan ta litt tid. 39 00:01:32,335 --> 00:01:33,780 På Harvard vil det gå fort. 40 00:01:33,780 --> 00:01:35,870 41 00:01:35,870 --> 00:01:37,440 Så CS50 apparatet. 42 00:01:37,440 --> 00:01:41,980 >> Nå i begynnelsen, skal vi snakke om bare en haug med kommandolinje 43 00:01:41,980 --> 00:01:46,880 ting, og så ved at jeg mener å jobbe i denne lille miljøet her borte. 44 00:01:46,880 --> 00:01:53,230 Og legg merke til alle ting Jeg sier akkurat her akkurat nå 45 00:01:53,230 --> 00:01:56,900 kommer til å fungere hvis du er inne i en terminal inne i apparatet, 46 00:01:56,900 --> 00:02:00,790 eller hvis du er inne i den gedit terminalvindu 47 00:02:00,790 --> 00:02:02,090 innsiden av apparatet. 48 00:02:02,090 --> 00:02:03,770 Så disse miljøene er identiske. 49 00:02:03,770 --> 00:02:04,940 50 00:02:04,940 --> 00:02:07,270 >> Men jeg kommer til å gå en tredje rute. 51 00:02:07,270 --> 00:02:12,200 Og legg merke til her nede denne lille IP-adresse her. 52 00:02:12,200 --> 00:02:15,940 Så du trenger ikke å gjøre dette, men denne IP 53 00:02:15,940 --> 00:02:19,700 address-- nå hvis I-- unntatt det er blokkert av denne tingen. 54 00:02:19,700 --> 00:02:22,790 55 00:02:22,790 --> 00:02:27,000 OK, slik at IP-adressen Over i en terminal 56 00:02:27,000 --> 00:02:31,090 her-- så denne terminalen i løpet her er en terminal i min Mac. 57 00:02:31,090 --> 00:02:34,540 Så dette er på ingen måte i dag i forbindelse med apparatet i det hele tatt. 58 00:02:34,540 --> 00:02:39,360 Og hvis du er på Windows, så du er kommer til å trenge å laste ned noe 59 00:02:39,360 --> 00:02:44,430 spesielt for dette, særlig folk har en tendens til å bruke Putty, P-U-T-T-Y. 60 00:02:44,430 --> 00:02:50,700 >> Så hva jeg skal gjøre er å skrive SSH og deretter den IP-adressen. 61 00:02:50,700 --> 00:02:54,030 Vel, jharvard på den IP-adressen. 62 00:02:54,030 --> 00:03:00,150 Så 192.168.24.220. 63 00:03:00,150 --> 00:03:02,127 Denne skremmende melding, ignorere det. 64 00:03:02,127 --> 00:03:02,710 Bare skriv ja. 65 00:03:02,710 --> 00:03:04,550 66 00:03:04,550 --> 00:03:06,030 Dette er CS50 i en boks. 67 00:03:06,030 --> 00:03:07,460 Det spør etter passordet ditt. 68 00:03:07,460 --> 00:03:11,910 >> Og så i mange av disse sammenhenger der den ber om passord, [uhørbart]. 69 00:03:11,910 --> 00:03:15,670 Vi har fått mange spørsmål der det står at det er faktisk ikke å skrive. 70 00:03:15,670 --> 00:03:20,011 Det betyr ikke vise deg tegnene passordet mens du skriver, om noe, 71 00:03:20,011 --> 00:03:23,010 for en sikkerhetsfunksjon, fordi hvis noen ser over skulderen din 72 00:03:23,010 --> 00:03:25,870 og de ser star star star star, så de 73 00:03:25,870 --> 00:03:28,640 vet at passordet ditt er fire tegn. 74 00:03:28,640 --> 00:03:32,660 Så ideen er det vil be deg om passord, type. 75 00:03:32,660 --> 00:03:34,490 Det kommer ikke til å vise du tegnene, 76 00:03:34,490 --> 00:03:36,090 men det er faktisk akseptere dem. 77 00:03:36,090 --> 00:03:39,210 I dette tilfellet, helst du gang se en passordforespørsel 78 00:03:39,210 --> 00:03:42,280 arbeider med maskinen, Passordet skal være rød. 79 00:03:42,280 --> 00:03:43,270 Så crimson. 80 00:03:43,270 --> 00:03:44,730 81 00:03:44,730 --> 00:03:50,550 >> Og nå her inne i dette vindu som er i min Mac, 82 00:03:50,550 --> 00:03:54,120 Jeg er i utgangspunktet ha nøyaktig samme syn 83 00:03:54,120 --> 00:03:57,040 som innsiden av en terminal i apparatet. 84 00:03:57,040 --> 00:03:58,470 Så du trenger ikke å gjøre dette. 85 00:03:58,470 --> 00:04:01,300 Du kan gjøre alt du ønsker inne i apparatet. 86 00:04:01,300 --> 00:04:05,140 Jeg nesten aldri faktisk gjør noe i apparatet. 87 00:04:05,140 --> 00:04:09,440 Jeg nesten alltid minimere det, og nå Jeg jobber SSH inn i apparatet. 88 00:04:09,440 --> 00:04:11,480 89 00:04:11,480 --> 00:04:14,180 >> Hvis noe, hvis du har en tregere datamaskin, 90 00:04:14,180 --> 00:04:15,820 du kanskje merke en forskjell. 91 00:04:15,820 --> 00:04:18,839 Jeg gjør dette fordi jeg foretrekker dette terminalvindu. 92 00:04:18,839 --> 00:04:20,881 Det har noen funksjoner som Jeg kan splitte vinduet, 93 00:04:20,881 --> 00:04:22,672 og nå kan jeg SSH i gjennom apparatet. 94 00:04:22,672 --> 00:04:24,105 Jeg fikk to SSH som skjer på en gang. 95 00:04:24,105 --> 00:04:28,030 96 00:04:28,030 --> 00:04:32,250 Hvis datamaskinen er spesielt treg og du jobber i apparatet, 97 00:04:32,250 --> 00:04:35,200 og du skjønner at dette er virkelig laggy, uansett. 98 00:04:35,200 --> 00:04:38,220 Har en tendens til å være mye raskere hvis du er SSH-ed i. 99 00:04:38,220 --> 00:04:40,960 Men ellers kan du jobbe uansett. 100 00:04:40,960 --> 00:04:42,388 >> PUBLIKUM: Hva betyr SSH? 101 00:04:42,388 --> 00:04:43,820 102 00:04:43,820 --> 00:04:47,479 >> ROB Bowden: Sikre skjell, noe sånt? 103 00:04:47,479 --> 00:04:48,270 Hva betyr SSH mener? 104 00:04:48,270 --> 00:04:54,214 105 00:04:54,214 --> 00:04:55,130 GABRIEL: Secure shell. 106 00:04:55,130 --> 00:04:56,463 ALLISON: Det er bare sikkert skall. 107 00:04:56,463 --> 00:04:57,720 ROB Bowden: Secure shell. 108 00:04:57,720 --> 00:05:03,700 Det er en protokoll som you-- det er en sikker protokoll, så kryptert. 109 00:05:03,700 --> 00:05:06,850 Folk kan ikke Snoop nettverket og se hva du sier til noe 110 00:05:06,850 --> 00:05:08,120 du er SSH-ed til. 111 00:05:08,120 --> 00:05:12,900 Og faktisk, i olden dager CS50, så i 2009 112 00:05:12,900 --> 00:05:19,300 da jeg var førsteårsstudent, slik at du jobbet på CS50 oppgavesett, 113 00:05:19,300 --> 00:05:22,490 var du SSH-ed til noen server at vi ga deg tilgang til, 114 00:05:22,490 --> 00:05:23,497 og du jobbet med det. 115 00:05:23,497 --> 00:05:25,330 Så du ikke har dette grafisk apparatet. 116 00:05:25,330 --> 00:05:26,160 Du hadde ikke gedit. 117 00:05:26,160 --> 00:05:28,930 Du hadde ikke alle disse tingene som du kunne visuelt pek og klikk. 118 00:05:28,930 --> 00:05:30,346 Du måtte jobbe i dette grensesnittet. 119 00:05:30,346 --> 00:05:31,580 120 00:05:31,580 --> 00:05:33,716 Jeg foretrekker å jobbe i dette grensesnittet. 121 00:05:33,716 --> 00:05:36,090 Så en del av det vi skal å gå til over akkurat nå 122 00:05:36,090 --> 00:05:39,560 er en haug av kommandoer som du bør 123 00:05:39,560 --> 00:05:42,095 begynner å bli kjent med så du går på kurset. 124 00:05:42,095 --> 00:05:43,190 125 00:05:43,190 --> 00:05:45,790 Og ærlig talt, når du blir vant til dem, det 126 00:05:45,790 --> 00:05:48,220 er så mye raskere å arbeide i dette miljøet 127 00:05:48,220 --> 00:05:53,690 enn det er å jobbe med finder, dra og klikke ting. 128 00:05:53,690 --> 00:05:55,340 129 00:05:55,340 --> 00:05:57,210 >> Så her er vi. 130 00:05:57,210 --> 00:06:01,779 Nå er jeg bare SSH-ed i, og så standard beliggenhet-- deg 131 00:06:01,779 --> 00:06:04,820 så noen av disse kommandoene i klassen, men vi vil gå over alle dem igjen. 132 00:06:04,820 --> 00:06:08,060 Standardplassering vi er i er hjemmekatalog. 133 00:06:08,060 --> 00:06:11,520 Og katalog, bare et annet ord for mappe. 134 00:06:11,520 --> 00:06:13,310 Så vi er i hjemmekatalogen. 135 00:06:13,310 --> 00:06:15,889 Skriv inn ls, liste filene i denne katalogen. 136 00:06:15,889 --> 00:06:17,430 Tydeligvis jeg laget en blah.c tidligere. 137 00:06:17,430 --> 00:06:19,120 138 00:06:19,120 --> 00:06:20,472 Så vi har en stasjonær katalog. 139 00:06:20,472 --> 00:06:21,930 Du merker det syntax highlighting? 140 00:06:21,930 --> 00:06:27,400 141 00:06:27,400 --> 00:06:32,900 Den lyseblå utheving indikerer en katalog og den rette hvite 142 00:06:32,900 --> 00:06:34,380 indikerer bare en vanlig fil. 143 00:06:34,380 --> 00:06:35,410 144 00:06:35,410 --> 00:06:37,690 Så det kommer til å være noen andre fargene du ser. 145 00:06:37,690 --> 00:06:41,240 En kjørbar fil er trolig kommer å være grønn eller noe sånt. 146 00:06:41,240 --> 00:06:44,820 OK, så vi er i hjemmekatalogen. 147 00:06:44,820 --> 00:06:48,970 >> Nå hvis jeg ønsker å gå inn i en annen katalog, er cd kommandoen jeg vil. 148 00:06:48,970 --> 00:06:52,720 Så endre katalog, og deretter passere navnet på katalogen 149 00:06:52,720 --> 00:06:54,020 at du ønsker å gå inn. 150 00:06:54,020 --> 00:06:55,780 Så her har vi fire alternativer. 151 00:06:55,780 --> 00:07:03,397 Jeg kan gå inn i nedlastinger, og nå ser vi her har det oppdatert denne parentes 152 00:07:03,397 --> 00:07:04,480 å si jeg er i ~ / nedlastinger. 153 00:07:04,480 --> 00:07:05,620 154 00:07:05,620 --> 00:07:06,800 >> Så hva er tilde? 155 00:07:06,800 --> 00:07:10,640 Det er en forkortelse for hjemmekatalogen. 156 00:07:10,640 --> 00:07:15,260 Så nesten alt du gjør er å gå til være med hensyn til hjemmekatalogen, 157 00:07:15,260 --> 00:07:20,620 og pwd er bare en kommando Jeg bruker en gang i året at 158 00:07:20,620 --> 00:07:22,420 bare skriver ut den gjeldende katalogen. 159 00:07:22,420 --> 00:07:25,730 Og så du ser her at ~ / Nedlastinger virkelig løser 160 00:07:25,730 --> 00:07:26,896 til / home / jharvard / nedlastinger. 161 00:07:26,896 --> 00:07:29,320 162 00:07:29,320 --> 00:07:32,230 Så / home / jharvard er min hjemmekatalog. 163 00:07:32,230 --> 00:07:33,700 164 00:07:33,700 --> 00:07:39,400 >> Så vi kan cd dot dot. 165 00:07:39,400 --> 00:07:47,800 Nå dot dot er en spesiell katalog som alltid refererer til en katalog opp. 166 00:07:47,800 --> 00:07:51,730 Så hvis jeg er i ~ / nedlastinger, deretter cd dot prikk kommer til å bringe meg til Tilde. 167 00:07:51,730 --> 00:07:52,950 168 00:07:52,950 --> 00:07:55,490 Hva gjør vi tror cd dot dot kommer til å bringe meg til nå? 169 00:07:55,490 --> 00:07:58,740 170 00:07:58,740 --> 00:08:00,570 Det vil bringe meg til / home. 171 00:08:00,570 --> 00:08:04,450 Så Tilde av utskriftsarbeidskatalog, Jeg er i nå / home / jharvard. 172 00:08:04,450 --> 00:08:06,060 173 00:08:06,060 --> 00:08:08,820 en katalog opp fra det, nå står det her / home. 174 00:08:08,820 --> 00:08:12,330 175 00:08:12,330 --> 00:08:17,180 >> Nå cd dot dot. 176 00:08:17,180 --> 00:08:20,910 Nå er jeg i rotkatalogen, og du kan ikke gjøre det igjen. 177 00:08:20,910 --> 00:08:23,340 Du vil bare bo i rotkatalogen alltid. 178 00:08:23,340 --> 00:08:26,700 Rotkatalogen har en hel haug med ting som, hvis du ønsker å se nærmere på, 179 00:08:26,700 --> 00:08:27,410 du kan. 180 00:08:27,410 --> 00:08:29,700 For eksempel, hvis jeg går i bin, som inneholder 181 00:08:29,700 --> 00:08:35,789 alle disse binærfiler, for eksempel ls, og cd, og alle disse tingene. 182 00:08:35,789 --> 00:08:38,630 Så disse kommandoene må eksisterer et eller annet sted i systemet, 183 00:08:38,630 --> 00:08:40,820 og det er i / bin. 184 00:08:40,820 --> 00:08:44,530 Men nesten alt du gjør er kommer til å være fra hjemmekatalogen. 185 00:08:44,530 --> 00:08:49,490 Og cd uten noen argumenter overhodet, du kan si cd ~, trenger ikke å. 186 00:08:49,490 --> 00:08:51,810 cd kommer til å bringe deg tilbake til hjemmekatalogen. 187 00:08:51,810 --> 00:08:53,170 188 00:08:53,170 --> 00:08:54,230 >> En siste. 189 00:08:54,230 --> 00:09:00,200 cd - kommer til å bringe deg tilbake til siste katalog som du var i. 190 00:09:00,200 --> 00:09:04,080 Så jeg bare cd'd to ganger på rad, så min forrige katalogen var hjemmekatalogen. 191 00:09:04,080 --> 00:09:11,520 Hvis jeg går å kutte bin, og nå la oss gå opp og inn bruker. 192 00:09:11,520 --> 00:09:12,550 193 00:09:12,550 --> 00:09:13,280 Bruker aksje. 194 00:09:13,280 --> 00:09:14,840 195 00:09:14,840 --> 00:09:15,940 La oss gå til bruker aksje. 196 00:09:15,940 --> 00:09:17,140 Nå er jeg nå i brukerdeling. 197 00:09:17,140 --> 00:09:19,320 cd -, tilbake i hyllen. 198 00:09:19,320 --> 00:09:22,980 Så dette blir spesielt nyttig når du have-- og det vil veksle. 199 00:09:22,980 --> 00:09:25,660 Så brukerdeling, tilbake bin, dele bin. 200 00:09:25,660 --> 00:09:27,250 >> Så dette blir nyttig. 201 00:09:27,250 --> 00:09:33,150 Du kan finne deg selv å ha mange, mange, mange nestede kataloger. 202 00:09:33,150 --> 00:09:37,370 Og du ønsker å gjøre noe virkelig rask i en øvre katalogen. 203 00:09:37,370 --> 00:09:40,330 Du går til denne katalogen, gjør endringer og sånt, 204 00:09:40,330 --> 00:09:42,400 og nå ønsker du å gå tilbake til der du var. 205 00:09:42,400 --> 00:09:43,660 cd -. 206 00:09:43,660 --> 00:09:47,320 Jeg er alltid frustrert når jeg måtte gå 207 00:09:47,320 --> 00:09:49,630 til at katalogen jeg ønsket å gjøre arbeidet. 208 00:09:49,630 --> 00:09:52,670 Jeg får alltid frustrert når jeg gjorde den i to trinn i stedet for ett trinn, 209 00:09:52,670 --> 00:09:55,715 fordi det betyr at cd - kommer å bringe inn i den mellomliggende sted 210 00:09:55,715 --> 00:09:57,010 i stedet for hvor jeg vil hen. 211 00:09:57,010 --> 00:09:59,350 212 00:09:59,350 --> 00:10:01,450 >> Så vi ser alle listefiler. 213 00:10:01,450 --> 00:10:03,300 Vi vet hvordan å komme seg rundt så langt. 214 00:10:03,300 --> 00:10:09,900 Så nå la oss snakke om redigering av filer. 215 00:10:09,900 --> 00:10:18,790 Så i dette kurset, er du nesten alltid forventet å bruke gedit. 216 00:10:18,790 --> 00:10:24,410 Hvis du vil, kan du ta det neste steget og begynne å lære en kommandolinje tekst 217 00:10:24,410 --> 00:10:25,240 editor. 218 00:10:25,240 --> 00:10:27,560 Så ulike alternativer finnes. 219 00:10:27,560 --> 00:10:31,760 >> Og de som er trolig kommer til å være relevant for deg, 220 00:10:31,760 --> 00:10:35,340 vi har Nano, Vim, og Emacs. 221 00:10:35,340 --> 00:10:40,196 Så Nano er nybegynnere kommandolinje tekst editor. 222 00:10:40,196 --> 00:10:42,985 Så Nano la oss gå på blah.c jeg opprettet tidligere. 223 00:10:42,985 --> 00:10:44,030 224 00:10:44,030 --> 00:10:46,480 Det er bare denne standarden C-fil. 225 00:10:46,480 --> 00:10:51,540 Og du ser en hel haug med ting skjer ved bunnen av skjermen, 226 00:10:51,540 --> 00:10:54,100 og tilsynelatende blah.c inneholder denne C-kode. 227 00:10:54,100 --> 00:10:55,420 228 00:10:55,420 --> 00:11:00,330 >> Så i denne spesielle redaktør, hva det er å si på bottom-- 229 00:11:00,330 --> 00:11:06,290 nå dette cirkumflekstegnet symbol, vi ser dette ^ G, ^ X ^ O. 230 00:11:06,290 --> 00:11:10,310 Slik at i nesten alle kontekst som du ser, 231 00:11:10,310 --> 00:11:13,530 du kan se at caret symbol i andre steder på nettet, på Stack Overflow, 232 00:11:13,530 --> 00:11:14,450 noe sånt. 233 00:11:14,450 --> 00:11:16,970 Det refererer nesten alltid å kontrollere. 234 00:11:16,970 --> 00:11:21,590 Så for å avslutte jeg ønsker å gjøre Kontroll X. Kontroll X, kommer ut. 235 00:11:21,590 --> 00:11:22,750 236 00:11:22,750 --> 00:11:26,855 Og jeg kan bruke min pil tastene for å bevege deg rundt. 237 00:11:26,855 --> 00:11:28,010 238 00:11:28,010 --> 00:11:31,015 Merker jeg kan ikke peke og klikke lett. 239 00:11:31,015 --> 00:11:33,000 240 00:11:33,000 --> 00:11:35,010 Du må bruke pil tastene for å bevege deg rundt. 241 00:11:35,010 --> 00:11:36,950 Det kan være en innstilling å peke og klikke. 242 00:11:36,950 --> 00:11:40,000 >> Men la oss gjøre noen endringer. 243 00:11:40,000 --> 00:11:42,100 Nå Kontroll X for å gå exit. 244 00:11:42,100 --> 00:11:44,120 Det kommer til å si redning endret buffer. 245 00:11:44,120 --> 00:11:47,900 Nå teksten, y for ja, n for no. 246 00:11:47,900 --> 00:11:49,900 Kontroll C for å avbryte. 247 00:11:49,900 --> 00:11:50,780 Jeg vil bare si ja. 248 00:11:50,780 --> 00:11:51,709 Filnavnet til å skrive. 249 00:11:51,709 --> 00:11:53,500 Standard er filen at det allerede er. 250 00:11:53,500 --> 00:11:54,230 Trykk Enter. 251 00:11:54,230 --> 00:11:54,740 OK. 252 00:11:54,740 --> 00:11:58,580 Nå har jeg nettopp redigert denne filen, lagret det, og det blir endret. 253 00:11:58,580 --> 00:11:59,770 254 00:11:59,770 --> 00:12:03,000 >> Så Nano er den enkleste teksteditor venne seg til. 255 00:12:03,000 --> 00:12:05,520 Alternativene er Vim og Emacs. 256 00:12:05,520 --> 00:12:11,250 De er høyere nivå tekstredigerings som har en veldig bratt læringskurve. 257 00:12:11,250 --> 00:12:13,740 Så min personlige preferanse er Vim. 258 00:12:13,740 --> 00:12:17,175 Og den har et bredt utvalg av alternativer. 259 00:12:17,175 --> 00:12:18,210 260 00:12:18,210 --> 00:12:24,070 Og når du blir vant til det, vil du aldri 261 00:12:24,070 --> 00:12:26,900 ønsker å gå til noen andre tekstredigeringsprogram fordi du bare 262 00:12:26,900 --> 00:12:29,590 har så mange ting tilgjengelig for deg i disse, 263 00:12:29,590 --> 00:12:31,690 men det tar en virkelig lang tid å lære. 264 00:12:31,690 --> 00:12:36,000 Så kanskje du bare ønsker å tvinge selv akkurat nå for å bli vant til det, 265 00:12:36,000 --> 00:12:38,130 men jeg vil si det er verdt det. 266 00:12:38,130 --> 00:12:39,660 Men det er hardt. 267 00:12:39,660 --> 00:12:41,220 >> Og så Emacs. 268 00:12:41,220 --> 00:12:44,940 Jeg har alltid slite i Emacs fordi Jeg vet hvordan du gjør absolutt ingenting. 269 00:12:44,940 --> 00:12:47,755 Tilsynelatende Emacs er ikke som standard installert på maskinen. 270 00:12:47,755 --> 00:12:49,210 271 00:12:49,210 --> 00:12:51,720 Vi vil nok legge til at som en standardinstallasjoner. 272 00:12:51,720 --> 00:12:59,620 273 00:12:59,620 --> 00:13:02,390 Når du lære en av Vim eller Emacs, det er 274 00:13:02,390 --> 00:13:04,810 ingen overbevisende grunn til å lære noen gang den andre, 275 00:13:04,810 --> 00:13:07,570 men det er en helt annen stil. 276 00:13:07,570 --> 00:13:10,460 OK så det er redigering av tekstfiler. 277 00:13:10,460 --> 00:13:13,374 >> PUBLIKUM: Hvis du ble sittende fast i Vim akkurat nå, hvordan we-- 278 00:13:13,374 --> 00:13:18,840 279 00:13:18,840 --> 00:13:20,800 >> ROB Bowden: Det er flere moduser i Vim, 280 00:13:20,800 --> 00:13:23,770 og det er hele tutorials på læring Vim. 281 00:13:23,770 --> 00:13:27,390 Så hvis du tilfeldigvis være i innsettingsmodus for 282 00:13:27,390 --> 00:13:29,930 å skrive inn tekst, som du kan skriv som på ulike måter, 283 00:13:29,930 --> 00:13:31,610 men jeg er hvordan du kommer inn i innsettingsmodus. 284 00:13:31,610 --> 00:13:34,780 I eller komme seg ut av noen spesiell modus du er i, bare flykte. 285 00:13:34,780 --> 00:13:37,640 Og du bare bash Escape for å få ut av eventuelle nestede moduser din i. 286 00:13:37,640 --> 00:13:40,360 Bare OK, nå er jeg tilbake i normal modus. 287 00:13:40,360 --> 00:13:43,790 >> Og så i normal modus, et kolon. 288 00:13:43,790 --> 00:13:45,160 Du ser det vises nederst. 289 00:13:45,160 --> 00:13:46,240 Og så q. 290 00:13:46,240 --> 00:13:52,600 Så q vil slutte hvis du har gjort endringer, som I-- har jeg gjort endringer? 291 00:13:52,600 --> 00:13:54,180 Jeg har gjort endringer tilsynelatende. 292 00:13:54,180 --> 00:13:57,264 Så hvis du har gjort endringer, det vil si at du kan sette et utropstegn. 293 00:13:57,264 --> 00:13:58,430 Jeg kommer til å kalle det et smell. 294 00:13:58,430 --> 00:14:02,040 Så du kan sette et forbud til bare avslutte uten å gjøre noe, 295 00:14:02,040 --> 00:14:04,520 eller kolon wq vil lagre og avslutte. 296 00:14:04,520 --> 00:14:06,580 Så w generelt er skrive. 297 00:14:06,580 --> 00:14:08,300 Så skrive filen. 298 00:14:08,300 --> 00:14:09,810 Jeg kan skrive og sluttet. 299 00:14:09,810 --> 00:14:13,606 Eller du kunne bare ha qx slam, q bang bare 300 00:14:13,606 --> 00:14:16,230 å komme ut av det uansett om eventuelle endringer som du har gjort. 301 00:14:16,230 --> 00:14:21,310 302 00:14:21,310 --> 00:14:28,940 >> Greit, så la oss nå Vær så god vi kan opprette filer. 303 00:14:28,940 --> 00:14:30,890 La oss begynne å fjerne filer. 304 00:14:30,890 --> 00:14:35,450 Og jeg vil bare kaste i en rask ny kommando, touch. 305 00:14:35,450 --> 00:14:38,200 Så ta på foo. 306 00:14:38,200 --> 00:14:39,340 Touch bar. 307 00:14:39,340 --> 00:14:40,220 Trykk baz. 308 00:14:40,220 --> 00:14:42,810 Hvis jeg ls, nå ser vi at disse filene finnes. 309 00:14:42,810 --> 00:14:44,315 De er helt tom. 310 00:14:44,315 --> 00:14:47,178 Så touch er bare en enkel måte en, [uhørbart]. 311 00:14:47,178 --> 00:14:50,850 312 00:14:50,850 --> 00:14:54,640 To, teknisk sett bare til stat det, oppdaterer den tidsstempler. 313 00:14:54,640 --> 00:14:58,470 Så alle andre filer du oppretter har et tidsstempel assosiert med det. 314 00:14:58,470 --> 00:15:01,330 Så baz ble opprettet på 14 september på 16:21. 315 00:15:01,330 --> 00:15:02,570 316 00:15:02,570 --> 00:15:06,670 Det er nå 16:22, så hvis Jeg berører baz igjen, vi 317 00:15:06,670 --> 00:15:11,420 se at baz var mest nylig blitt endret på 16:22. 318 00:15:11,420 --> 00:15:17,680 Men ellers jeg nesten aldri se på de tidsstempler på filene. 319 00:15:17,680 --> 00:15:20,490 Så touch, her jeg bare bruker den til å lage noen raske filer. 320 00:15:20,490 --> 00:15:21,620 321 00:15:21,620 --> 00:15:27,400 >> All right, så nå rm er den kommando som vi bryr oss om her. 322 00:15:27,400 --> 00:15:28,665 Og vi kan rm boo. 323 00:15:28,665 --> 00:15:31,000 Si fjerne vanlig tom fil boo. 324 00:15:31,000 --> 00:15:34,070 Og vi kan skrive y, og nå er det fjerner. 325 00:15:34,070 --> 00:15:34,850 rm baz. 326 00:15:34,850 --> 00:15:35,910 327 00:15:35,910 --> 00:15:38,620 Fjern regelmessig tom fil baz og type n for no. 328 00:15:38,620 --> 00:15:40,060 Nå er det ikke fjernes. 329 00:15:40,060 --> 00:15:41,240 Så bar og baz fortsatt eksisterer. 330 00:15:41,240 --> 00:15:42,232 Foo er borte. 331 00:15:42,232 --> 00:15:43,148 GABRIEL: Fortsett å snakke. 332 00:15:43,148 --> 00:15:43,970 333 00:15:43,970 --> 00:15:44,720 ROB Bowden: Great. 334 00:15:44,720 --> 00:15:45,800 335 00:15:45,800 --> 00:15:50,370 Så irriterende melding her, fjern regelmessig empty-- 336 00:15:50,370 --> 00:15:52,390 hva gjør du der nede? 337 00:15:52,390 --> 00:15:54,030 Fjern regelmessig tom fil. 338 00:15:54,030 --> 00:15:58,840 339 00:15:58,840 --> 00:16:01,610 Så hvis vi ikke ønsker å være plaget av denne meldingen, 340 00:16:01,610 --> 00:16:05,340 vi kan kaste i denne -f flagg, og så det er kraft. 341 00:16:05,340 --> 00:16:11,330 Og nå hvis jeg rm -f, det er ikke til å si det du vil fjerne denne filen. 342 00:16:11,330 --> 00:16:12,040 Det vil bare gjøre det. 343 00:16:12,040 --> 00:16:13,720 Og ls, ser jeg ikke bar der lenger. 344 00:16:13,720 --> 00:16:14,810 345 00:16:14,810 --> 00:16:18,021 >> Nå som er en potensielt farlig kommando. 346 00:16:18,021 --> 00:16:19,020 Det pleier ikke å så ille. 347 00:16:19,020 --> 00:16:22,240 Vi vil komme tilbake på et sekund hvordan det kan bli veldig farlig. 348 00:16:22,240 --> 00:16:28,740 Og la oss lage litt temp katalogen. 349 00:16:28,740 --> 00:16:30,880 mkdir, en annen kommando. 350 00:16:30,880 --> 00:16:34,880 Så mkdir er en kommando som gjør en katalog. 351 00:16:34,880 --> 00:16:40,650 Og nå ved ls ser vi denne fine lys blå uthevet temp katalogen. 352 00:16:40,650 --> 00:16:42,295 Jeg kan cd inn temp. 353 00:16:42,295 --> 00:16:44,590 Og jeg kan mkdir foo. 354 00:16:44,590 --> 00:16:46,330 cd til foo. mkdir bar. 355 00:16:46,330 --> 00:16:46,860 cd i baren. 356 00:16:46,860 --> 00:16:49,400 357 00:16:49,400 --> 00:16:54,300 >> Så vi ser at vi kan enkelt få inn i noen ganske dypt hekkende. 358 00:16:54,300 --> 00:16:56,385 Nå hvordan fjerner jeg en katalog? 359 00:16:56,385 --> 00:16:57,020 360 00:16:57,020 --> 00:16:57,520 rmdir. 361 00:16:57,520 --> 00:16:59,030 362 00:16:59,030 --> 00:17:03,540 Så hvis jeg bare rett prøve å rm, som vi gjorde med en vanlig fil, 363 00:17:03,540 --> 00:17:06,420 rm bar kommer til å sier kan ikke fjerne bar. 364 00:17:06,420 --> 00:17:07,569 Det er en katalog. 365 00:17:07,569 --> 00:17:10,619 Det er en spesiell kommando for fjerne kataloger, liksom. 366 00:17:10,619 --> 00:17:12,900 Så rmdir bar. 367 00:17:12,900 --> 00:17:13,710 Nå bar er borte. 368 00:17:13,710 --> 00:17:14,980 369 00:17:14,980 --> 00:17:22,680 >> OK, så rmdir jeg ganske mye aldri bruker. 370 00:17:22,680 --> 00:17:32,220 Grunnen being-- la oss nå gjøre en vanlig fil bar her. 371 00:17:32,220 --> 00:17:34,780 Så rmdir boo. 372 00:17:34,780 --> 00:17:35,760 rmdir. 373 00:17:35,760 --> 00:17:36,900 Kunne ikke fjerne foo. 374 00:17:36,900 --> 00:17:38,420 Katalogen ikke er tom. 375 00:17:38,420 --> 00:17:43,420 Så du kan ikke bruke fjerne dir på en katalog som har ting i den. 376 00:17:43,420 --> 00:17:44,830 >> Så har du noen alternativer. 377 00:17:44,830 --> 00:17:49,780 Du kan gå inn i den katalogen, fjern alt manuelt, og deretter komme ut 378 00:17:49,780 --> 00:17:51,759 og rmdir katalogen. 379 00:17:51,759 --> 00:17:53,050 Som åpenbart høres irriterende. 380 00:17:53,050 --> 00:17:55,000 Hva om det er tusenvis av filer i det? 381 00:17:55,000 --> 00:17:58,119 Vel, du kan rm *. 382 00:17:58,119 --> 00:17:59,410 Vi skal snakke om * i et sekund. 383 00:17:59,410 --> 00:18:00,870 Det betyr i utgangspunktet alle de tingene. 384 00:18:00,870 --> 00:18:02,030 385 00:18:02,030 --> 00:18:05,470 Men enda bedre, så rm -r. 386 00:18:05,470 --> 00:18:10,220 Så rm -r-- i mange sammenhenger, betyr -r rekursive, 387 00:18:10,220 --> 00:18:13,810 som vi skal snakke om hva rekursive midler i flere uker. 388 00:18:13,810 --> 00:18:18,630 Men det betyr i utgangspunktet travers helheten i denne katalogen 389 00:18:18,630 --> 00:18:20,190 og fjerne alt. 390 00:18:20,190 --> 00:18:24,420 >> Så rm -r foo kommer til å si ned i katalogen foo? 391 00:18:24,420 --> 00:18:25,210 Ja. 392 00:18:25,210 --> 00:18:26,800 Fjern regelmessig tom fil foo / bar? 393 00:18:26,800 --> 00:18:27,880 394 00:18:27,880 --> 00:18:28,540 Ja. 395 00:18:28,540 --> 00:18:29,760 Fjern katalogen foo? 396 00:18:29,760 --> 00:18:30,260 Ja. 397 00:18:30,260 --> 00:18:31,470 398 00:18:31,470 --> 00:18:35,020 Så nå foo og alt innen den har blitt fjernet. 399 00:18:35,020 --> 00:18:42,370 >> Nå som kan få spesielt irriterende when-- la oss berøre en, trykker du 2, trykker du 3. 400 00:18:42,370 --> 00:18:44,400 Kunne ha en hel haug med filer. 401 00:18:44,400 --> 00:18:49,060 Hvis jeg ville, kunne jeg lage tusenvis av filer i her. 402 00:18:49,060 --> 00:18:53,340 Og rm -r foo kommer å være ganske irriterende. 403 00:18:53,340 --> 00:18:55,374 Ja, ja, ja, ja, ja, ja. 404 00:18:55,374 --> 00:18:57,540 Med mange flere filer du raskt se hvor mange ganger 405 00:18:57,540 --> 00:18:58,581 Jeg måtte skrive ja. 406 00:18:58,581 --> 00:19:02,265 Vel, vi bare har sett før hvordan vi kan kvitte seg med å måtte taste inn ja, -f. 407 00:19:02,265 --> 00:19:03,330 408 00:19:03,330 --> 00:19:07,020 Så mkdir foo cd foo touch 1 2 3. 409 00:19:07,020 --> 00:19:08,380 410 00:19:08,380 --> 00:19:17,190 OK, er så rm -rf foo kommer til å blindt fjerne foo helt. 411 00:19:17,190 --> 00:19:17,960 Ingen teksten. 412 00:19:17,960 --> 00:19:18,650 Ingen noe. 413 00:19:18,650 --> 00:19:20,040 Foo er borte. 414 00:19:20,040 --> 00:19:23,830 >> Så jeg pleier å bruke denne komman hele tiden. 415 00:19:23,830 --> 00:19:25,120 416 00:19:25,120 --> 00:19:27,830 Når det er sagt, det er en svært farlig kommando, 417 00:19:27,830 --> 00:19:33,240 fordi hvis jeg gjør noe sånt dette, vil det ikke be deg. 418 00:19:33,240 --> 00:19:34,730 Det vil bli borte. 419 00:19:34,730 --> 00:19:40,140 Og det skjer ganske ofte, og selv i høyere nivå CS kurs. 420 00:19:40,140 --> 00:19:42,070 Noen ganger får vi se noe der noen 421 00:19:42,070 --> 00:19:48,360 sier jeg tilfeldigvis vår rm rf-ed mitt hjem katalog og alle mine P sett er borte. 422 00:19:48,360 --> 00:19:52,422 Og det er ødeleggende, men det er ingen søppelbøtta. 423 00:19:52,422 --> 00:19:54,380 Det er ingen det er ingenting for deg å hente. 424 00:19:54,380 --> 00:19:55,330 Det er bare borte. 425 00:19:55,330 --> 00:19:56,529 426 00:19:56,529 --> 00:19:58,320 Enda verre ville være noe som rm -rf /. 427 00:19:58,320 --> 00:19:59,432 428 00:19:59,432 --> 00:20:01,140 Så vi bare diskutert at rotkatalogen. 429 00:20:01,140 --> 00:20:03,095 Den har alt av filer på systemet ditt. 430 00:20:03,095 --> 00:20:04,120 431 00:20:04,120 --> 00:20:07,380 Ting har en tendens til å bli ganske rotete når du fjerner ting som ls, 432 00:20:07,380 --> 00:20:10,280 og cd, og alle disse. 433 00:20:10,280 --> 00:20:15,467 >> PUBLIKUM: Hva er forskjellen mellom rm, rf, og rm * 434 00:20:15,467 --> 00:20:16,300 ROB Bowden: Så rm * - 435 00:20:16,300 --> 00:20:17,700 436 00:20:17,700 --> 00:20:22,300 >> ALLISON: Question var hva er Forskjellen mellom rm, rf, og rm *. 437 00:20:22,300 --> 00:20:23,750 438 00:20:23,750 --> 00:20:25,950 >> ROB Bowden: Så rm *. 439 00:20:25,950 --> 00:20:31,910 Stjerners generelt middel alle innholdet i denne katalogen. 440 00:20:31,910 --> 00:20:33,540 441 00:20:33,540 --> 00:20:35,540 Prøver å tenke på andre måter å vise stjerne. 442 00:20:35,540 --> 00:20:38,280 443 00:20:38,280 --> 00:20:44,780 Vel, stjerne faktisk generelt betyr matche ethvert mønster. 444 00:20:44,780 --> 00:20:54,930 Så hvis jeg har en fil som heter dog1, røre dog2, berører cat1, berører cat2. 445 00:20:54,930 --> 00:20:56,050 446 00:20:56,050 --> 00:21:02,110 Så ls * en kommer til å skrive ut cat1 og dog1, fordi den stjernen kan fylles 447 00:21:02,110 --> 00:21:06,270 i with-- det man trenger å være der, men stjerne kan være enten katt eller hund. 448 00:21:06,270 --> 00:21:07,247 Det er et wild card. 449 00:21:07,247 --> 00:21:08,580 Det er ordet jeg leter etter. 450 00:21:08,580 --> 00:21:09,120 Wild card. 451 00:21:09,120 --> 00:21:10,180 452 00:21:10,180 --> 00:21:13,960 Eller jeg kunne ls hund *, og Jeg fikk se dog1, dog2. 453 00:21:13,960 --> 00:21:16,870 Så de er notering filene som samsvarer med den aktuelle mønsteret. 454 00:21:16,870 --> 00:21:18,150 Du kan bruke ls på denne måten. 455 00:21:18,150 --> 00:21:19,350 456 00:21:19,350 --> 00:21:22,020 >> Ls * stjerners samsvarer med alt. 457 00:21:22,020 --> 00:21:25,710 Så det kommer til å skrive ut alle innholdet i denne katalogen 458 00:21:25,710 --> 00:21:27,290 siden alle av dem passer til. 459 00:21:27,290 --> 00:21:30,130 Det kommer ikke til å skrive noe i øvre nivå kataloger. 460 00:21:30,130 --> 00:21:38,680 Hvis jeg har en sub-katalog, foo, og berører 1 2 3-- så nå hvis rm * stjerne, 461 00:21:38,680 --> 00:21:41,450 fjerne cat1, cat2, dog1, dog2. 462 00:21:41,450 --> 00:21:42,340 Kan ikke fjerne foo. 463 00:21:42,340 --> 00:21:43,090 Det er en katalog. 464 00:21:43,090 --> 00:21:43,920 465 00:21:43,920 --> 00:21:50,340 >> Så stjerners utvides til alle filene i katalogen. 466 00:21:50,340 --> 00:21:55,210 Så teknisk sett rm * er som å si rm cat1, cat2, dog1, dog2, foo. 467 00:21:55,210 --> 00:22:03,630 Mens rm -rf, teknisk stjerne ville oppnå det vi ønsker, men rm -rf-- 468 00:22:03,630 --> 00:22:06,090 hvis jeg går ut av dette katalog, rm -rf temp, 469 00:22:06,090 --> 00:22:08,890 som kommer til å gå inn i temp og rekursivt fjerne alt. 470 00:22:08,890 --> 00:22:11,260 471 00:22:11,260 --> 00:22:21,060 >> Så stjerne er atskilt i at det er forstått by-- så denne tingen 472 00:22:21,060 --> 00:22:25,090 at jeg kjører i, denne tingen som ber meg for kommandoer 473 00:22:25,090 --> 00:22:28,770 og deretter gjennomføre og gjøre dem, jeg kaller dette skallet mitt. 474 00:22:28,770 --> 00:22:31,930 Og så dette skall er i seg selv et program. 475 00:22:31,930 --> 00:22:35,010 Og hvis jeg ville, jeg kunne kjøre i / bin / bash. 476 00:22:35,010 --> 00:22:36,930 Skallet kalles bash. 477 00:22:36,930 --> 00:22:39,340 Og nå merker vi noe er litt endret, 478 00:22:39,340 --> 00:22:42,200 og det er fordi mine innstillinger for skallet er noe annerledes. 479 00:22:42,200 --> 00:22:45,415 >> Men nå er jeg teknisk sett kjører et skall innenfor mitt opprinnelige skall, 480 00:22:45,415 --> 00:22:49,570 og jeg kan gå ut av skallet, og nå Jeg er tilbake til mitt toppnivå skall. 481 00:22:49,570 --> 00:22:55,240 Hensikten med å si som er-- stjernen. 482 00:22:55,240 --> 00:22:59,020 Så stjernen er noe forstått av bash. 483 00:22:59,020 --> 00:23:04,260 Så rm -rf, er -rf flagg forstått av bare rm. 484 00:23:04,260 --> 00:23:06,380 Det vet at når du passere en rf som du 485 00:23:06,380 --> 00:23:09,520 vil ha det til rekursivt fjerne alle filer uten å spørre. 486 00:23:09,520 --> 00:23:13,960 Stjernen er noe forstått ved bash at når du sier rm *, 487 00:23:13,960 --> 00:23:16,890 bash er ikke til å si hei rm *, fjern stjerne. 488 00:23:16,890 --> 00:23:21,010 Bash kommer til å si rm * fjerne cat1, cat2, dog1, dog2. 489 00:23:21,010 --> 00:23:24,305 Det er automatisk kommer til å utvide alle filene i katalogen. 490 00:23:24,305 --> 00:23:29,100 491 00:23:29,100 --> 00:23:33,140 >> Og på samme måte tilde er en annen symbol som bash forstår. 492 00:23:33,140 --> 00:23:37,130 Når du sier cd ~, utvider bash som til hjemmekatalogen. 493 00:23:37,130 --> 00:23:38,910 494 00:23:38,910 --> 00:23:40,210 Andre spørsmål så langt? 495 00:23:40,210 --> 00:23:42,760 496 00:23:42,760 --> 00:23:46,060 OK, så vi kommer til å begynne å gå raskt. 497 00:23:46,060 --> 00:23:47,700 498 00:23:47,700 --> 00:23:48,545 >> Tab ferdigstillelse. 499 00:23:48,545 --> 00:23:49,670 Bare for å kaste den ut der. 500 00:23:49,670 --> 00:23:51,530 Mange mennesker gjør ikke realisere dette finnes. 501 00:23:51,530 --> 00:23:55,060 Så hvis jeg skriver cd dow, jeg ønsker å gå inn i nedlastinger. 502 00:23:55,060 --> 00:23:56,700 Jeg trenger ikke å skrive nloads. 503 00:23:56,700 --> 00:23:57,960 504 00:23:57,960 --> 00:24:00,770 Jeg kan bare trykke Tab. 505 00:24:00,770 --> 00:24:03,794 Så det anerkjenner at dow er et prefiks som 506 00:24:03,794 --> 00:24:05,710 samsvarer ikke noe annet i denne katalogen, 507 00:24:05,710 --> 00:24:07,520 så det vil fullføre det for deg. 508 00:24:07,520 --> 00:24:08,610 Nå kan jeg gå inn. 509 00:24:08,610 --> 00:24:10,110 >> Jeg også gjøre det rekursivt. 510 00:24:10,110 --> 00:24:11,205 Så mkdir foo. 511 00:24:11,205 --> 00:24:12,480 512 00:24:12,480 --> 00:24:13,300 La oss gå inn foo. 513 00:24:13,300 --> 00:24:14,830 mkdir bar. 514 00:24:14,830 --> 00:24:17,345 Så gå tilbake til mitt hjem katalog, kan jeg se nedlastinger. 515 00:24:17,345 --> 00:24:19,040 516 00:24:19,040 --> 00:24:21,860 Nå treffer fanen igjen, automatisk kommer til å fylle i foo. 517 00:24:21,860 --> 00:24:22,880 Det er den eneste katalogen. 518 00:24:22,880 --> 00:24:25,340 Treffer fanen igjen, automatisk kommer til å fylle i baren. 519 00:24:25,340 --> 00:24:26,798 Så nå er jeg i (~ Downloads / foo / bar). 520 00:24:26,798 --> 00:24:27,310 521 00:24:27,310 --> 00:24:31,692 >> Så denne kategorien ferdigstillelse, når jeg kom til kontortiden, 522 00:24:31,692 --> 00:24:33,400 og jeg står over noens skulder, 523 00:24:33,400 --> 00:24:40,470 og de kommer rm D-O-W-N-L-O-A-D-S, jeg er døende. 524 00:24:40,470 --> 00:24:41,990 Bare fanen, tab, tab, tab. 525 00:24:41,990 --> 00:24:44,550 526 00:24:44,550 --> 00:24:45,630 Så definitivt brukt kategorien. 527 00:24:45,630 --> 00:24:47,890 528 00:24:47,890 --> 00:24:49,840 Og tilsvarende opp og ned, mye folk 529 00:24:49,840 --> 00:24:51,930 nettopp det som skjedde med aldri har truffet opp og ned. 530 00:24:51,930 --> 00:24:54,870 Det kommer til å gå gjennom den forrige kommandoer, så hvis du bare løp noe, 531 00:24:54,870 --> 00:24:58,300 og du ønsker å kjøre den på nytt, bare holde opp til du kommer til den. 532 00:24:58,300 --> 00:24:59,870 533 00:24:59,870 --> 00:25:00,370 OK. 534 00:25:00,370 --> 00:25:01,460 535 00:25:01,460 --> 00:25:03,585 >> Så hurtig, noen andre ting. 536 00:25:03,585 --> 00:25:04,800 537 00:25:04,800 --> 00:25:05,930 La oss gå tilbake til temp. 538 00:25:05,930 --> 00:25:06,976 539 00:25:06,976 --> 00:25:08,125 La oss lage noen filer. 540 00:25:08,125 --> 00:25:10,480 541 00:25:10,480 --> 00:25:15,215 Så her inne, jeg er bare kommer til å liste noen ord. 542 00:25:15,215 --> 00:25:18,460 543 00:25:18,460 --> 00:25:21,035 hund, katt, meow. 544 00:25:21,035 --> 00:25:23,940 545 00:25:23,940 --> 00:25:26,040 La oss gjøre hund, fisk. 546 00:25:26,040 --> 00:25:27,500 547 00:25:27,500 --> 00:25:32,320 Så nå rep er en veldig nyttige kommandoer som du 548 00:25:32,320 --> 00:25:37,820 bruke til å søke gjennom filer for en bestemt tekst, 549 00:25:37,820 --> 00:25:40,910 og teknisk kan du gjøre virkelig komplekse uttrykk for det å matche. 550 00:25:40,910 --> 00:25:44,830 >> Så her, hvis jeg grep, og hva ønsker jeg å søke etter? 551 00:25:44,830 --> 00:25:49,130 La oss si at jeg søker etter katter, og Jeg ønsker å søke alle disse filene. 552 00:25:49,130 --> 00:25:50,650 Så hvordan gjør jeg alle disse filene? 553 00:25:50,650 --> 00:25:51,900 Star. 554 00:25:51,900 --> 00:25:54,939 Så i filen én, jeg har katt. 555 00:25:54,939 --> 00:25:56,980 Jeg kunne sannsynligvis ha kalte det noe bedre, 556 00:25:56,980 --> 00:25:59,063 fordi det ser ut som linjenummer eller noe. 557 00:25:59,063 --> 00:26:01,590 Men i filen jeg har en linje med katten. 558 00:26:01,590 --> 00:26:04,160 I filen to har jeg en linje med katt. 559 00:26:04,160 --> 00:26:07,280 Så nå kan jeg se inni filen ett og se oh yeah, gjorde at filen har katt. 560 00:26:07,280 --> 00:26:10,210 Notice fil tre var ikke samsvarer fordi katten ikke er der. 561 00:26:10,210 --> 00:26:13,882 Jeg kan grep'e for meow. 562 00:26:13,882 --> 00:26:14,840 Bare fil to har meow. 563 00:26:14,840 --> 00:26:16,120 564 00:26:16,120 --> 00:26:20,640 >> Så dette kan du kombinere, igjen, med -r, som 565 00:26:20,640 --> 00:26:23,580 som jeg sa før ofte betyr rekursiv. 566 00:26:23,580 --> 00:26:29,800 Og så jeg kan komme opp her, grep -r for enhver forekomst of-- la oss redigere 567 00:26:29,800 --> 00:26:32,010 dette bare å kaste en katt i det. 568 00:26:32,010 --> 00:26:38,800 Så grep -r for enhver forekomst av katt hele denne katalogen. 569 00:26:38,800 --> 00:26:41,600 Og det vil rekursivt søke eventuelle underkataloger. 570 00:26:41,600 --> 00:26:43,940 Så i baz, det er katten. 571 00:26:43,940 --> 00:26:45,570 I temp / 2, det er katten. 572 00:26:45,570 --> 00:26:47,960 Og i temp / 1 er det katt. 573 00:26:47,960 --> 00:26:50,045 Så det er å søke i filer. 574 00:26:50,045 --> 00:26:51,250 575 00:26:51,250 --> 00:26:55,090 >> Nå kan du også bruke en finne. 576 00:26:55,090 --> 00:26:59,640 Og så finner er spesifikt om leter etter filer med et gitt navn. 577 00:26:59,640 --> 00:27:02,490 Så la oss gjøre litt mer. 578 00:27:02,490 --> 00:27:03,660 La oss gå inn nedlastinger. 579 00:27:03,660 --> 00:27:04,680 580 00:27:04,680 --> 00:27:05,380 Trykk dog1. 581 00:27:05,380 --> 00:27:06,840 582 00:27:06,840 --> 00:27:07,770 Trykk cat2. 583 00:27:07,770 --> 00:27:09,290 584 00:27:09,290 --> 00:27:10,760 Trykk cat_dog. 585 00:27:10,760 --> 00:27:14,550 586 00:27:14,550 --> 00:27:15,975 Trykk catcat. 587 00:27:15,975 --> 00:27:18,270 588 00:27:18,270 --> 00:27:23,810 >> Så jeg ønsker å finne alle filer med hund i navnet. 589 00:27:23,810 --> 00:27:28,060 Så finne, og for den lengste tid jeg aldri husket 590 00:27:28,060 --> 00:27:33,760 hvordan finner jobbet, før jeg endelig lese noe som gjorde det så klart. 591 00:27:33,760 --> 00:27:35,784 Så finn, automatisk rekursiv. 592 00:27:35,784 --> 00:27:36,950 Du trenger ikke å passere en -r. 593 00:27:36,950 --> 00:27:38,090 594 00:27:38,090 --> 00:27:39,110 Så finn dot. 595 00:27:39,110 --> 00:27:40,750 Vi har ikke snakket om dot ennå. 596 00:27:40,750 --> 00:27:44,800 Mens dot dot alltid betyr en katalog opp. 597 00:27:44,800 --> 00:27:46,960 Prikk betyr alltid gjeldende katalog. 598 00:27:46,960 --> 00:27:51,390 Så jeg kunne rm -r prikk i samme måte som jeg kan rm -rf *. 599 00:27:51,390 --> 00:27:53,140 Til syvende og sist de oppnå det samme. 600 00:27:53,140 --> 00:27:56,040 rm -rf prikk kommer til å fjerne hele gjeldende katalog. 601 00:27:56,040 --> 00:27:57,440 602 00:27:57,440 --> 00:27:59,680 >> OK, som jeg ikke ønsker å gjøre det. 603 00:27:59,680 --> 00:28:01,490 604 00:28:01,490 --> 00:28:04,320 Men finn dot. 605 00:28:04,320 --> 00:28:07,920 Så rekursivt søke gjeldende katalog, og nå er alt 606 00:28:07,920 --> 00:28:14,125 etter dette er en haug med flagg som du bruke til å utelukke ting fra avkastningen. 607 00:28:14,125 --> 00:28:17,250 Så finn dot returnerer alt som det kan finne fra gjeldende katalog. 608 00:28:17,250 --> 00:28:19,700 De er alle filene rekursivt søke. 609 00:28:19,700 --> 00:28:21,250 Vi får se noen av dem i et sekund. 610 00:28:21,250 --> 00:28:23,150 611 00:28:23,150 --> 00:28:27,140 >> Men i tilfelle du lurer på hvordan jeg gjør det, så Command K, i det minste 612 00:28:27,140 --> 00:28:29,660 i min terminal i Mac klarner det. 613 00:28:29,660 --> 00:28:34,660 Kontroll L vanligvis klarner det for noen form for terminal. 614 00:28:34,660 --> 00:28:36,480 Du kan også skrive klart. 615 00:28:36,480 --> 00:28:38,410 Og hvis du noen gang får inn i en merkelig scenario-- 616 00:28:38,410 --> 00:28:42,790 det har skjedd med meg et par tid-- hvor fargene dine ledetekster 617 00:28:42,790 --> 00:28:46,590 er alle messed opp, eller du ikke er i stand til å se noe 618 00:28:46,590 --> 00:28:51,232 blir skrevet når du skriver, fordi noen ganger som bakgrunnsfarge er satt 619 00:28:51,232 --> 00:28:53,940 den samme som den Forgrunnsfargen og nå kan du ikke se skriftene. 620 00:28:53,940 --> 00:28:55,110 621 00:28:55,110 --> 00:28:59,830 Reset er noe som bare nullstiller du til standard svart bakgrunn, 622 00:28:59,830 --> 00:29:01,840 hvit front, eller hva du setter dem til. 623 00:29:01,840 --> 00:29:03,390 624 00:29:03,390 --> 00:29:04,790 >> Så hvor var vi? 625 00:29:04,790 --> 00:29:05,930 Finn prikk. 626 00:29:05,930 --> 00:29:09,360 Så nå er alt forbi dette punkt begrenser resultatene 627 00:29:09,360 --> 00:29:11,450 til noe som samsvarer gitt mønster. 628 00:29:11,450 --> 00:29:16,110 Så her jeg ønsker å søke alt med navnet katten. 629 00:29:16,110 --> 00:29:17,300 Jeg fikk ingenting. 630 00:29:17,300 --> 00:29:18,390 Hvorfor er det slik? 631 00:29:18,390 --> 00:29:21,230 Vel, jeg er bare å søke etter noe med nøyaktig navnet katt. 632 00:29:21,230 --> 00:29:25,150 Hvis jeg ønsker å søke noe som har noen mønster, og cat-- 633 00:29:25,150 --> 00:29:28,890 sitatene teknisk ikke er nødvendig, men jeg kaster dem der. 634 00:29:28,890 --> 00:29:32,720 Så nå finner det catcat fordi det er det eneste som 635 00:29:32,720 --> 00:29:36,040 har noen vilkårlig mønster fulgt av katt. 636 00:29:36,040 --> 00:29:41,950 Jeg kan sette katten *, og nå finne catcat, cat_dog, cat2, 637 00:29:41,950 --> 00:29:45,245 fordi de er alle ting med katt i begynnelsen, etterfulgt av hva som helst. 638 00:29:45,245 --> 00:29:46,120 Du kan kombinere dette. 639 00:29:46,120 --> 00:29:50,480 Hvis du ønsker å søke etter alle C-filer som du har, kan du gjøre * .c. 640 00:29:50,480 --> 00:29:51,960 Vi har blah.c her. 641 00:29:51,960 --> 00:29:53,000 642 00:29:53,000 --> 00:29:55,020 Så det er en finner fungerer. 643 00:29:55,020 --> 00:29:55,770 Du kan søke. 644 00:29:55,770 --> 00:29:58,270 Den har en hel haug med flagg for ytterligere restriksjoner. 645 00:29:58,270 --> 00:30:00,960 Og en på dem, la oss si -d. 646 00:30:00,960 --> 00:30:02,110 647 00:30:02,110 --> 00:30:04,435 Så foreldet. 648 00:30:04,435 --> 00:30:05,425 649 00:30:05,425 --> 00:30:06,550 Å, det er ikke det jeg ønsker. 650 00:30:06,550 --> 00:30:07,730 Ikke -d. 651 00:30:07,730 --> 00:30:08,860 Type d. 652 00:30:08,860 --> 00:30:13,820 Så finn dot - typen d. 653 00:30:13,820 --> 00:30:17,760 Så hva som nettopp gjorde er jeg søker for alle filer i gjeldende katalog 654 00:30:17,760 --> 00:30:21,680 med a-- d står for directory-- katalog type. 655 00:30:21,680 --> 00:30:24,430 Dette setter alle kataloger i gjeldende katalog. 656 00:30:24,430 --> 00:30:27,670 Og type F er alt vanlig filer, alle ikke kataloger. 657 00:30:27,670 --> 00:30:29,809 Så det er bare en eksempel på andre måter du 658 00:30:29,809 --> 00:30:32,350 kan begrense den andre søk enn bare navnet på filen. 659 00:30:32,350 --> 00:30:34,126 660 00:30:34,126 --> 00:30:35,570 >> Det har vært 30 minutter. 661 00:30:35,570 --> 00:30:36,848 Still going. 662 00:30:36,848 --> 00:30:38,132 >> ALLISON: Jeg skal bris gjennom. 663 00:30:38,132 --> 00:30:39,670 Det blir bra. 664 00:30:39,670 --> 00:30:41,460 >> ROB Bowden: Så noen andre ting. 665 00:30:41,460 --> 00:30:45,700 Nå bang, utropstegn. 666 00:30:45,700 --> 00:30:50,530 Så det generelt means-- vel, la oss se et eksempel. 667 00:30:50,530 --> 00:30:52,230 Så f!, Hva som kommer til å gjøre? 668 00:30:52,230 --> 00:30:53,520 669 00:30:53,520 --> 00:30:57,810 Vel det ser ut til å ha gjentatte funn dot -type f. 670 00:30:57,810 --> 00:30:59,240 Hva om! G? 671 00:30:59,240 --> 00:31:00,760 Som bare grep -r katt *. 672 00:31:00,760 --> 00:31:02,010 673 00:31:02,010 --> 00:31:05,720 Så bang du kan bruke til å gjenta en nylig utført kommando. 674 00:31:05,720 --> 00:31:13,280 Så hvis jeg skriver! Gre, det kommer til å re-run kommandoene som begynte med gre mest 675 00:31:13,280 --> 00:31:14,060 nylig. 676 00:31:14,060 --> 00:31:17,090 >> Og du kan se alle disse kommandoer med historie. 677 00:31:17,090 --> 00:31:17,880 Så historie. 678 00:31:17,880 --> 00:31:19,630 Disse er alle kommandoer jeg har kjørt i dag. 679 00:31:19,630 --> 00:31:21,089 680 00:31:21,089 --> 00:31:23,130 Og vel, det er ikke bokstavelig talt begrenset til i dag, 681 00:31:23,130 --> 00:31:25,180 men jeg har bare brukt dette apparatet som i dag. 682 00:31:25,180 --> 00:31:28,730 Det er din helheten av historien din bash shell, 683 00:31:28,730 --> 00:31:30,433 bortsett fra det kutt av på et tidspunkt. 684 00:31:30,433 --> 00:31:33,474 PUBLIKUM: Hva skjer hvis du gjør historie [uhørbart] kommando og en feil 685 00:31:33,474 --> 00:31:35,430 i resultatet vil fortsatt skrive ut the-- 686 00:31:35,430 --> 00:31:44,110 >> ROB Bowden: Ja, hvis det er en feil i en av disse commands-- 687 00:31:44,110 --> 00:31:48,090 så la oss si, er at en error kommandoen ikke funnet. 688 00:31:48,090 --> 00:31:49,312 689 00:31:49,312 --> 00:31:50,520 Fortsatt vises i historien. 690 00:31:50,520 --> 00:31:52,620 691 00:31:52,620 --> 00:31:53,170 OK. 692 00:31:53,170 --> 00:31:54,750 693 00:31:54,750 --> 00:31:56,040 Andre spørsmål om noe? 694 00:31:56,040 --> 00:31:58,760 695 00:31:58,760 --> 00:32:00,300 Så det er bang. 696 00:32:00,300 --> 00:32:04,230 >> Nå, virkelig nyttig kommando, mann. 697 00:32:04,230 --> 00:32:07,750 Slik som gir deg den manual for en gitt kommando. 698 00:32:07,750 --> 00:32:11,640 Så la oss si man ls, så Dette viser meg ls. 699 00:32:11,640 --> 00:32:13,400 Det viser katalogen innholdet. 700 00:32:13,400 --> 00:32:17,150 Og det er her jeg ser at det er disse forskjellige flagg som eksisterer. 701 00:32:17,150 --> 00:32:21,340 Så vi ser at ls -l finnes hvis vi skulle lese det. ls -l 702 00:32:21,340 --> 00:32:26,150 gir meg denne fullstendig oversikt over de katalog med hvem som eier filen, 703 00:32:26,150 --> 00:32:29,750 størrelsen på filen, den modifiserte tidsstempel. 704 00:32:29,750 --> 00:32:31,130 705 00:32:31,130 --> 00:32:34,980 Så ls -a er en annen som du kanskje faktisk bruke litt ofte. 706 00:32:34,980 --> 00:32:38,130 -Al er min vanligste flagg denne siste ls. 707 00:32:38,130 --> 00:32:42,520 >> Så -a, merker det er mye flere filer enn bare ls. 708 00:32:42,520 --> 00:32:44,170 ls -a. 709 00:32:44,170 --> 00:32:46,170 Hva er felles med alle disse filene? 710 00:32:46,170 --> 00:32:47,790 De starter med en prikk. 711 00:32:47,790 --> 00:32:54,710 Så dette er en konvensjon i Linux som filer som begynner med en prikk er skjult. 712 00:32:54,710 --> 00:32:58,330 Så det betyr bare at når vi bare rette ls, 713 00:32:58,330 --> 00:33:04,170 eller vi leter etter denne katalogen ved hjelp finneren tilsvarende, eller Windows 714 00:33:04,170 --> 00:33:07,250 Explorer tilsvarende, at vi ønsker ikke å se disse dot-filer. 715 00:33:07,250 --> 00:33:09,680 De bare forurenser syn på ting. 716 00:33:09,680 --> 00:33:11,790 Så de er skjult med mindre du spesifikt 717 00:33:11,790 --> 00:33:14,250 be dem med noe sånt som -a. 718 00:33:14,250 --> 00:33:18,920 Så jeg kan cd inn .local, og jeg ser at det er i seg selv en katalog med 719 00:33:18,920 --> 00:33:22,220 en felles katalog, og applikasjoner, og blah blah blah. 720 00:33:22,220 --> 00:33:24,520 Så prikk, filer de er bare skjult. 721 00:33:24,520 --> 00:33:26,250 722 00:33:26,250 --> 00:33:29,355 >> OK, så andre viktige. 723 00:33:29,355 --> 00:33:30,490 724 00:33:30,490 --> 00:33:32,000 Jeg har et par jeg kan hoppe over. 725 00:33:32,000 --> 00:33:38,160 La oss bare virkelig rask snakk om filutskriftsvalgene omdirigering ting. 726 00:33:38,160 --> 00:33:43,020 Så det er et helt kompleks serie ting du kan gjøre med disse, 727 00:33:43,020 --> 00:33:47,204 men bare for å se dem, la oss si, ekko. 728 00:33:47,204 --> 00:33:47,870 En annen kommando. 729 00:33:47,870 --> 00:33:48,920 Virkelig dum kommando. 730 00:33:48,920 --> 00:33:50,710 Alt den gjør er å skrive ut hva jeg forteller det til. 731 00:33:50,710 --> 00:33:52,070 Så ekko hei. 732 00:33:52,070 --> 00:33:53,850 Det bare ekko hei til skjermen. 733 00:33:53,850 --> 00:33:55,170 734 00:33:55,170 --> 00:33:56,390 Hei verden. 735 00:33:56,390 --> 00:33:57,890 Echoes hello world. 736 00:33:57,890 --> 00:34:02,650 >> Så en kommando eller en symbol som bash forstår 737 00:34:02,650 --> 00:34:07,620 Dette større enn symbol, og som er det utgang til en fil symbol. 738 00:34:07,620 --> 00:34:10,940 Så hvis jeg utgang dette til foo, det er nå en fil 739 00:34:10,940 --> 00:34:15,100 kalt foo, innsiden av som er hello world. 740 00:34:15,100 --> 00:34:18,489 Så merker at når jeg ekko hello world rør inn foo, 741 00:34:18,489 --> 00:34:19,980 det gjorde ikke ekko hello world. 742 00:34:19,980 --> 00:34:22,630 I stedet ble det satt i filen foo. 743 00:34:22,630 --> 00:34:25,340 Og en annen kommando bare å kaste den på deg, katten. 744 00:34:25,340 --> 00:34:29,191 Det er en enkel måte å bare helt vise innholdet i filen 745 00:34:29,191 --> 00:34:31,440 slik at jeg ikke trenger å åpne en tekst editor for å kunne se den. 746 00:34:31,440 --> 00:34:34,159 Slik at innholdet av foo filen er hello world. 747 00:34:34,159 --> 00:34:38,460 Og jeg kunne cat blah.c, innholdet er dette. 748 00:34:38,460 --> 00:34:42,123 >> Igjen, dette er kommandoer som, ikke gjør det forventer at du har dem alle i minnet. 749 00:34:42,123 --> 00:34:43,860 Ideen er at du har sett dem. 750 00:34:43,860 --> 00:34:45,735 Kanskje du jobber med noe, og du er 751 00:34:45,735 --> 00:34:47,230 som jeg er lei av å åpne denne filen. 752 00:34:47,230 --> 00:34:50,120 Jeg skulle ønske jeg kunne bare se på innholdet virkelig rask. 753 00:34:50,120 --> 00:34:52,320 Du kan gjøre det, så se tilbake og si oh jeg 754 00:34:52,320 --> 00:34:55,250 husker noe sånt som eksisterer, og det er katten. 755 00:34:55,250 --> 00:35:00,630 >> Så det kommer til en fil. 756 00:35:00,630 --> 00:35:06,639 Nå er det egentlig ikke noe bra eksempel på å lese fra en fil ennå. 757 00:35:06,639 --> 00:35:08,930 Hva er noe som tar noe fra standard i? 758 00:35:08,930 --> 00:35:10,010 759 00:35:10,010 --> 00:35:11,544 Noen enkel Linux-kommando? 760 00:35:11,544 --> 00:35:13,480 761 00:35:13,480 --> 00:35:16,970 Når vi kommer til den, i et par uker alle de piece-- godt, 762 00:35:16,970 --> 00:35:20,470 denne uken har du et stykke der du begynne å ta input fra brukeren. 763 00:35:20,470 --> 00:35:23,696 Og så vanligvis du skriver som innspill ved tastaturet. 764 00:35:23,696 --> 00:35:25,570 I stedet for å skrive at innspill på tastaturet, 765 00:35:25,570 --> 00:35:30,950 du kan i stedet pipe i fra en fil slik at når du gjør Mario, ./mario, 766 00:35:30,950 --> 00:35:35,200 røret inn fra en hvilken som helst gitt fil, og som kommer til å kjøre mario programmet. 767 00:35:35,200 --> 00:35:37,300 Ikke ventet inngang på tastaturet, i stedet er det 768 00:35:37,300 --> 00:35:39,650 bare kommer til å lese linjer fra foo fil. 769 00:35:39,650 --> 00:35:45,230 >> Så større enn foo setter den inn foo-filen, og mindre enn foo 770 00:35:45,230 --> 00:35:50,170 tar ting fra foo filen og bruker det som innspill til dette programmet. 771 00:35:50,170 --> 00:35:51,520 772 00:35:51,520 --> 00:36:00,630 Og bare for å se det, kunne vi også ekko foo bar baz, og da i stedet for en 773 00:36:00,630 --> 00:36:03,850 større enn, la oss gjøre to til foo. 774 00:36:03,850 --> 00:36:05,610 Hva gjør det gjøre? 775 00:36:05,610 --> 00:36:07,180 Det legger bare til filen. 776 00:36:07,180 --> 00:36:15,360 Så i stedet merke hvis jeg ekko blah inn foo og deretter katt foo, det er bare blah. 777 00:36:15,360 --> 00:36:18,285 Så når du utgang til en fil, det helt overskriver den filen. 778 00:36:18,285 --> 00:36:19,330 779 00:36:19,330 --> 00:36:22,740 Hvis du bare ønsker å legge til, double [? klassing. ?] 780 00:36:22,740 --> 00:36:24,080 >> Og sist er rør. 781 00:36:24,080 --> 00:36:29,590 Pipe Gets mye mer komplisert, der det tar for utgangssignalet fra en kommando 782 00:36:29,590 --> 00:36:32,320 og mater den inn neste kommando. 783 00:36:32,320 --> 00:36:36,140 Så noen felles ting, historie. 784 00:36:36,140 --> 00:36:37,920 Så, ugh, jeg ønsker ikke å se på dette. 785 00:36:37,920 --> 00:36:40,680 786 00:36:40,680 --> 00:36:44,485 Vis meg alle kommandoer i min historie hvor jeg grep'e-ed for noe. 787 00:36:44,485 --> 00:36:45,360 Nei, det er forvirrende. 788 00:36:45,360 --> 00:36:50,360 Vis meg alle kommandoer hvor finner jeg. 789 00:36:50,360 --> 00:36:52,360 Alle finne kommandoer jeg noensinne kjørte. 790 00:36:52,360 --> 00:36:55,050 >> Så historie. 791 00:36:55,050 --> 00:36:59,017 Nå historie utganger til skjerme denne listen over kommandoer, 792 00:36:59,017 --> 00:37:00,850 men jeg ønsker ikke å utgang den til skjermen. 793 00:37:00,850 --> 00:37:03,445 I stedet kommer jeg til å rør den inn grep. 794 00:37:03,445 --> 00:37:04,790 795 00:37:04,790 --> 00:37:07,830 Så la oss grep for alle forekomster av funn. 796 00:37:07,830 --> 00:37:09,550 797 00:37:09,550 --> 00:37:17,000 Så nå i stedet for grep taking input, i stedet of-- 798 00:37:17,000 --> 00:37:24,360 grep er i stand til å håndtere så input-- vi er ved hjelp av grep litt annerledes her. 799 00:37:24,360 --> 00:37:29,550 Så i stedet for å skrive en liste over ting vi ønsket å søke etter 800 00:37:29,550 --> 00:37:31,070 og sa grep tar som input. 801 00:37:31,070 --> 00:37:34,810 Så hvis jeg bare grep finne, det venter for meg å skrive ting. 802 00:37:34,810 --> 00:37:37,661 Så katten hallo finne. 803 00:37:37,661 --> 00:37:38,160 Hei. 804 00:37:38,160 --> 00:37:40,430 805 00:37:40,430 --> 00:37:40,930 Finn. 806 00:37:40,930 --> 00:37:43,670 Legg merke til hver gang jeg skriver finner den anerkjenner at jeg skrev finne. 807 00:37:43,670 --> 00:37:44,880 808 00:37:44,880 --> 00:37:49,540 Så i stedet for dette, vil Søk Filer for funn. 809 00:37:49,540 --> 00:37:53,930 >> Så historien er nå kommer til å ut en liste over alle kommandoer. 810 00:37:53,930 --> 00:37:55,200 811 00:37:55,200 --> 00:37:58,100 Vi setter som utgang, og vi mater den til grep, 812 00:37:58,100 --> 00:38:00,180 og så er det spytter ut alle forekomster av funn. 813 00:38:00,180 --> 00:38:02,170 814 00:38:02,170 --> 00:38:05,570 Grunnen til at jeg sa det ville være forvirrende er hvis I-- det er fortsatt forvirrende. 815 00:38:05,570 --> 00:38:07,030 Hvis jeg grep for grep. 816 00:38:07,030 --> 00:38:08,755 817 00:38:08,755 --> 00:38:11,130 Legg merke til det er stort sett alltid viser kommandoen jeg bare 818 00:38:11,130 --> 00:38:15,280 løp fordi den kommandoen selv har grep på innsiden av det. 819 00:38:15,280 --> 00:38:16,580 820 00:38:16,580 --> 00:38:20,674 >> OK, så noen spørsmål om noe? 821 00:38:20,674 --> 00:38:22,340 Og jeg skal overføre det over på dette punktet. 822 00:38:22,340 --> 00:38:24,690 Forhåpentligvis er dette en fin oversikt over alle kommandoer 823 00:38:24,690 --> 00:38:30,100 at du ikke trenger å ha utenat, men disse utgjør 824 00:38:30,100 --> 00:38:32,950 et faststoff 95% av hva jeg gjøre på kommandolinjen. 825 00:38:32,950 --> 00:38:34,310 826 00:38:34,310 --> 00:38:39,140 Også huske på at kommandolinjen seg selv, er bash et programmeringsspråk, 827 00:38:39,140 --> 00:38:43,070 og så når du kommer ned til det, du kanskje ønsker å gjøre virkelig kompliserte ting. 828 00:38:43,070 --> 00:38:47,522 Og så det har ting som looper, og IFS, og alle de 829 00:38:47,522 --> 00:38:50,230 at du kommer til å bli vant til med programmeringsspråk. 830 00:38:50,230 --> 00:38:53,660 Men det er utenfor omfanget av denne delen. 831 00:38:53,660 --> 00:38:55,520 832 00:38:55,520 --> 00:38:56,985 OK, så ingen spørsmål? 833 00:38:56,985 --> 00:38:57,940 834 00:38:57,940 --> 00:38:58,523 ALLISON: Ingen? 835 00:38:58,523 --> 00:38:59,450 GABRIEL: Skal du to-- 836 00:38:59,450 --> 00:39:01,158 ALLISON: Jeg kan gjøre det på min hvis du vil. 837 00:39:01,158 --> 00:39:02,626 Vi kan se hva som skjer. 838 00:39:02,626 --> 00:39:03,750 ROB Bowden: Off to Allison. 839 00:39:03,750 --> 00:39:05,090 ALLISON: Woo. 840 00:39:05,090 --> 00:39:07,504 Du er en vanskelig å følge, Rob. 841 00:39:07,504 --> 00:39:08,920 Ønsker du meg å bytte med deg? 842 00:39:08,920 --> 00:39:10,246 Eller du fikk, OK. 843 00:39:10,246 --> 00:39:13,590 844 00:39:13,590 --> 00:39:16,990 Jeg kommer til å prøve og ikke ganske være så lang der. 845 00:39:16,990 --> 00:39:20,619 846 00:39:20,619 --> 00:39:22,660 La oss se om dette vil fungere slik jeg vil ha det til. 847 00:39:22,660 --> 00:39:26,170 848 00:39:26,170 --> 00:39:26,670 Kanskje? 849 00:39:26,670 --> 00:39:27,760 850 00:39:27,760 --> 00:39:28,296 Haha! 851 00:39:28,296 --> 00:39:28,796 Ja. 852 00:39:28,796 --> 00:39:30,460 853 00:39:30,460 --> 00:39:34,066 >> Så jeg skal bare veldig raskt gå gjennom variabler, løkker, conditionals, 854 00:39:34,066 --> 00:39:35,440 og litt på kompilatoren. 855 00:39:35,440 --> 00:39:38,570 Hvis du har spørsmål i enhver tid, kan du stoppe meg. 856 00:39:38,570 --> 00:39:42,750 Disse gutta vil minne meg om å gjenta spørsmålet ditt i tilfelle jeg glemmer, 857 00:39:42,750 --> 00:39:44,210 men bør ikke være så ille. 858 00:39:44,210 --> 00:39:45,850 >> Så variabler, ja. 859 00:39:45,850 --> 00:39:48,060 Vi har ingen av dine Skrape stykker her. 860 00:39:48,060 --> 00:39:50,440 Jeg er sikker på at de fleste av dere, hvis du hadde noen form for spill 861 00:39:50,440 --> 00:39:53,810 som du opprettet med Scratch, hadde du å holde styr på noe sånt score, 862 00:39:53,810 --> 00:39:55,870 eller tid, eller noe sånt. 863 00:39:55,870 --> 00:39:58,080 Så de lyse oransje stykker som vi ser det 864 00:39:58,080 --> 00:40:02,630 er bare Scratch form av variabler, og du vil definitivt 865 00:40:02,630 --> 00:40:04,640 være med variabler gjennom programmene dine. 866 00:40:04,640 --> 00:40:07,350 Hvis du ikke, jeg er egentlig ikke sikker på hva du gjør. 867 00:40:07,350 --> 00:40:09,000 868 00:40:09,000 --> 00:40:12,215 >> Men uansett, store ting, definere variabler. 869 00:40:12,215 --> 00:40:13,630 870 00:40:13,630 --> 00:40:16,970 Med C hver variabel har å ha en type erklært, 871 00:40:16,970 --> 00:40:22,090 så jeg ga deg en veldig generelt en på toppen. 872 00:40:22,090 --> 00:40:24,045 Så vil du ha din skriver og deretter hva 873 00:40:24,045 --> 00:40:25,420 du bestemmer deg for å ringe til variabel. 874 00:40:25,420 --> 00:40:27,500 875 00:40:27,500 --> 00:40:29,680 Så i dette tilfellet, skriver i variabellisten. 876 00:40:29,680 --> 00:40:31,400 >> Vi har tre eksempler. 877 00:40:31,400 --> 00:40:34,439 Char av noen klasse, av en A, som er hva 878 00:40:34,439 --> 00:40:36,230 Jeg er sikker på at dere alle vil ha å få i denne klassen. 879 00:40:36,230 --> 00:40:37,380 880 00:40:37,380 --> 00:40:40,670 Du kan definere flere variabler på én linje 881 00:40:40,670 --> 00:40:43,880 så lenge de er av samme type, som er vår andre eksemplet er det 882 00:40:43,880 --> 00:40:46,409 der du har tre variabler, x, y og z. 883 00:40:46,409 --> 00:40:47,200 De er alle flyter. 884 00:40:47,200 --> 00:40:49,160 885 00:40:49,160 --> 00:40:53,250 Og så kan du også, i denne siste eksempel med int poengsum og antall 886 00:40:53,250 --> 00:40:56,510 lag, kan du initial dem rett der. 887 00:40:56,510 --> 00:41:01,270 >> Så i midten eksempel der vi bare ha flyte av x, y og z, 888 00:41:01,270 --> 00:41:02,730 de blir ikke nullstilt ennå. 889 00:41:02,730 --> 00:41:04,140 De har ingen verdi. 890 00:41:04,140 --> 00:41:05,600 Eller de har søppel verdier. 891 00:41:05,600 --> 00:41:07,370 892 00:41:07,370 --> 00:41:10,790 Og hvis du prøver og bruke dem, kompilatoren vil kjefte på deg. 893 00:41:10,790 --> 00:41:14,727 Du må både erklære og initial variabler. 894 00:41:14,727 --> 00:41:16,310 Så i dette siste, vi gjør begge deler. 895 00:41:16,310 --> 00:41:19,320 Vi er erklære variabler av score og antall lag, 896 00:41:19,320 --> 00:41:24,134 og vi er initial dem, gi dem deres initielle verdier av 7 og 4 897 00:41:24,134 --> 00:41:24,675 hhv. 898 00:41:24,675 --> 00:41:26,310 899 00:41:26,310 --> 00:41:27,190 Cool. 900 00:41:27,190 --> 00:41:28,550 Alle gode? 901 00:41:28,550 --> 00:41:29,470 Awesome. 902 00:41:29,470 --> 00:41:31,690 >> OK, så noen konvensjoner. 903 00:41:31,690 --> 00:41:35,965 Hvis dere har lest gjennom style 50, disse 904 00:41:35,965 --> 00:41:39,510 er bare ting som vi ønsker for du kan implementere i din stil. 905 00:41:39,510 --> 00:41:41,230 Så meningsfulle navn. 906 00:41:41,230 --> 00:41:45,700 Hvis du begynne å kalle ting bare x, y, og z, særlig 907 00:41:45,700 --> 00:41:47,902 som du kommer inn omstendelig programmer, er du 908 00:41:47,902 --> 00:41:49,610 sannsynligvis kommer til å forvirre deg selv og være 909 00:41:49,610 --> 00:41:52,930 som hva er denne variabelen refererer til. 910 00:41:52,930 --> 00:41:55,880 Jeg aner ikke hva dette betyr. 911 00:41:55,880 --> 00:41:59,280 >> Så hvis det er ment for å holde en score, kall det score. 912 00:41:59,280 --> 00:42:05,720 Hvis det er ment å holde noen svar eller resultat, gi det et navn som det. 913 00:42:05,720 --> 00:42:09,920 For looper, som vi vil komme inn i neste lysbilde, 914 00:42:09,920 --> 00:42:12,985 enkelt brev variabler er fine. 915 00:42:12,985 --> 00:42:16,033 916 00:42:16,033 --> 00:42:18,449 ROB Bowden: I, j og k er bare konvensjoner for etter looper 917 00:42:18,449 --> 00:42:22,050 at alle forventer dem å bli kalt i, j, og k. 918 00:42:22,050 --> 00:42:26,890 Du kan ringe them-- jeg ser rad kolonne eller rad samtale noen ganger 919 00:42:26,890 --> 00:42:29,450 for to nestede løkker, og det er også slags standard. 920 00:42:29,450 --> 00:42:31,450 Men i og j er helt forstått. 921 00:42:31,450 --> 00:42:33,670 >> ALLISON: Ja, jeg og j du er helt fine. 922 00:42:33,670 --> 00:42:36,250 For ordens skyld som i noen av dine P-apparater, 923 00:42:36,250 --> 00:42:39,745 det kan være fornuftig å ha mer beskrivende ting der bare 924 00:42:39,745 --> 00:42:40,920 å holde styr på det. 925 00:42:40,920 --> 00:42:45,100 Men jeg tror i, j og k jeg tror de aller fleste av oss all bruk. 926 00:42:45,100 --> 00:42:46,890 927 00:42:46,890 --> 00:42:50,340 >> ROB Bowden: Med disse konvensjoner, slik stil er viktig. 928 00:42:50,340 --> 00:42:53,520 Det er en av de fire akser der du gradert, 929 00:42:53,520 --> 00:42:58,110 og det er så lett å bare gå over P satt på slutten og sørg 930 00:42:58,110 --> 00:42:59,770 at det ikke er stilistiske feil. 931 00:42:59,770 --> 00:43:01,742 Så sørg for at du tabbe riktig. 932 00:43:01,742 --> 00:43:03,200 Sørg for at variablene er navngitt. 933 00:43:03,200 --> 00:43:04,450 Legg igjen noen kommentarer. 934 00:43:04,450 --> 00:43:06,677 Det er veldig lett å få disse punktene. 935 00:43:06,677 --> 00:43:09,510 Du trenger ikke å tenke på noe for å få disse punktene. 936 00:43:09,510 --> 00:43:11,093 Du trenger ikke å finne noe ut. 937 00:43:11,093 --> 00:43:12,640 Det er bare slik at det ser pen. 938 00:43:12,640 --> 00:43:14,850 >> ALLISON: Faktisk har vi har style 50, som 939 00:43:14,850 --> 00:43:17,920 vil fortelle deg hvor du får opp hvis du får opp på stil 940 00:43:17,920 --> 00:43:21,180 og vil fortelle deg nøyaktig hva du trenger å fikse, og hvordan du trenger for å fikse det. 941 00:43:21,180 --> 00:43:23,900 Det er også bare bra å nevne at det er kurspolitikk 942 00:43:23,900 --> 00:43:27,200 at hvis du er på kontoret timer og koden din er et rot, 943 00:43:27,200 --> 00:43:30,200 Vi kan avslå å hjelpe du til det ser finere. 944 00:43:30,200 --> 00:43:34,310 Så starter ut til høyre, holde konsekvent stil, 945 00:43:34,310 --> 00:43:37,100 du også bare kommer til å gjøre livet mye enklere når 946 00:43:37,100 --> 00:43:38,730 du prøver å gå gjennom feilsøke. 947 00:43:38,730 --> 00:43:41,510 Hvis du prøver å finne ut der du mangler en klammeparentes 948 00:43:41,510 --> 00:43:44,890 og de er over alt, du er bare å lage ditt eget liv vanskeligere. 949 00:43:44,890 --> 00:43:47,217 Så vær konsekvent med stil. 950 00:43:47,217 --> 00:43:48,800 Jeg lover det vil gjøre livet ditt enklere. 951 00:43:48,800 --> 00:43:50,330 Det vil gjøre livet enklere. 952 00:43:50,330 --> 00:43:51,869 Alle vil bli mye lykkeligere. 953 00:43:51,869 --> 00:43:52,910 Og det er det du ønsker. 954 00:43:52,910 --> 00:43:54,192 955 00:43:54,192 --> 00:43:55,650 GABRIEL: Din karakter vil bli høyere. 956 00:43:55,650 --> 00:43:56,858 ALLISON: Ja, og din klasse. 957 00:43:56,858 --> 00:43:58,410 958 00:43:58,410 --> 00:44:01,930 Hvis TF er som deg, har en tendens til å være gunstig. 959 00:44:01,930 --> 00:44:02,940 960 00:44:02,940 --> 00:44:05,010 All right, og så bare det andre punktet her. 961 00:44:05,010 --> 00:44:06,300 Konsistente initializations. 962 00:44:06,300 --> 00:44:09,605 Så som vi så, kan du erklære og initial ting. 963 00:44:09,605 --> 00:44:10,750 964 00:44:10,750 --> 00:44:13,180 Flere variabler på samme linje. 965 00:44:13,180 --> 00:44:17,930 En ting vi ønsker deg ikke å gjøre er å erklære noen variabler 966 00:44:17,930 --> 00:44:21,360 og ikke initial dem på samme linje som du initialisering andre. 967 00:44:21,360 --> 00:44:23,960 >> Så i tilfelle som gjorde ingen mening overhodet, 968 00:44:23,960 --> 00:44:29,050 Vi har eksempel her hvor vi erklære ints 969 00:44:29,050 --> 00:44:31,180 i variabler av kvartalene dimes og pennies, 970 00:44:31,180 --> 00:44:34,214 men kvartalene og pennies har ingen innledende verdi. 971 00:44:34,214 --> 00:44:36,630 Vi har ikke initialisert dem, men midt i det 972 00:44:36,630 --> 00:44:38,600 vi allerede initialisert dimes til 0. 973 00:44:38,600 --> 00:44:41,650 Så enten gjøre kvartalene, dimes, pennies. 974 00:44:41,650 --> 00:44:43,170 Eller gjør kvartalene lik 0. 975 00:44:43,170 --> 00:44:43,930 Dimes lik 0. 976 00:44:43,930 --> 00:44:46,810 Pennies lik 0, eller hva de opprinnelige verdiene er. 977 00:44:46,810 --> 00:44:49,800 >> Store ting med stil, være konsekvent. 978 00:44:49,800 --> 00:44:51,050 Når du er i tvil, må du være konsekvent. 979 00:44:51,050 --> 00:44:52,129 980 00:44:52,129 --> 00:44:53,420 Men følg vår stil guide også. 981 00:44:53,420 --> 00:44:54,710 982 00:44:54,710 --> 00:44:55,317 Cool. 983 00:44:55,317 --> 00:44:56,150 Alle bra det? 984 00:44:56,150 --> 00:44:57,566 >> PUBLIKUM: Hvor er stilguide? 985 00:44:57,566 --> 00:45:00,800 ALLISON: Stilen guide er on-- hva er nettsiden? 986 00:45:00,800 --> 00:45:03,950 >> GABRIEL: Jeg tror det er manual.cs50.net/-- 987 00:45:03,950 --> 00:45:04,575 ALLISON: Style? 988 00:45:04,575 --> 00:45:05,610 989 00:45:05,610 --> 00:45:06,390 >> GABRIEL: Style. 990 00:45:06,390 --> 00:45:06,920 Jepp. 991 00:45:06,920 --> 00:45:07,520 >> ALLISON: Ja. 992 00:45:07,520 --> 00:45:10,150 Så spørsmålet, hvor er stilen 50. 993 00:45:10,150 --> 00:45:12,250 manual.cs50.net/style. 994 00:45:12,250 --> 00:45:13,639 Ja? 995 00:45:13,639 --> 00:45:16,880 >> PUBLIKUM: Hvis vi definerer variabler, er det OK 996 00:45:16,880 --> 00:45:28,145 hvis vi legger ut [uhørbart] liker int score og deretter int mål. 997 00:45:28,145 --> 00:45:29,873 998 00:45:29,873 --> 00:45:35,100 Så vil du si at nå har vi fikk til å definere dem sammen? 999 00:45:35,100 --> 00:45:37,640 >> ALLISON: Så spørsmålet, bør du har overflødig kode 1000 00:45:37,640 --> 00:45:40,940 når du definerer variabler som int score og 1001 00:45:40,940 --> 00:45:43,239 på neste linje int spillet? 1002 00:45:43,239 --> 00:45:46,030 ROB Bowden: Det er definitivt tilfeller der overflødig kode er dårlig. 1003 00:45:46,030 --> 00:45:47,738 Jeg ville ikke vurdere som overflødig kode. 1004 00:45:47,738 --> 00:45:50,970 Jeg nesten aldri erklære flere variabler på samme linje noensinne. 1005 00:45:50,970 --> 00:45:53,736 Og hvis noe, er det fordi vanligvis jeg forlater en slags kommentar 1006 00:45:53,736 --> 00:45:55,235 forklare hva variabelen er for. 1007 00:45:55,235 --> 00:45:57,582 Så jeg vil si int poengsum slash slash. 1008 00:45:57,582 --> 00:45:59,350 Holder styr på hva som helst. 1009 00:45:59,350 --> 00:46:00,710 Totalt slash slash. 1010 00:46:00,710 --> 00:46:01,790 1011 00:46:01,790 --> 00:46:06,455 Så det er mye grovere på den måten å sette dem alle på samme linje. 1012 00:46:06,455 --> 00:46:08,080 Jeg har bare aldri satt dem på samme linje. 1013 00:46:08,080 --> 00:46:10,580 >> ALLISON: Jeg føler at det er personlige preferanser på dette punktet. 1014 00:46:10,580 --> 00:46:14,900 >> PUBLIKUM: Betyr det gå for etter looper og sånt også? 1015 00:46:14,900 --> 00:46:15,900 ROB Bowden: Som inni? 1016 00:46:15,900 --> 00:46:18,282 Som int i lik 0 komma Lengden tilsvarer noe? 1017 00:46:18,282 --> 00:46:19,490 At du ikke har et valg. 1018 00:46:19,490 --> 00:46:21,850 1019 00:46:21,850 --> 00:46:25,910 Med for løkker initialisering part-- så kanskje du bare har sett 1020 00:46:25,910 --> 00:46:31,520 int i lik 0 semikolon i mindre enn hva semikolon i pluss pluss. 1021 00:46:31,520 --> 00:46:33,820 At int i er lik 0, teknisk kan du også 1022 00:46:33,820 --> 00:46:35,770 gjøre hva vi så før med komma syntaks. 1023 00:46:35,770 --> 00:46:39,790 int i lik 0 komma j tilsvarer tre komma k lik 5. 1024 00:46:39,790 --> 00:46:41,610 1025 00:46:41,610 --> 00:46:44,320 Du har ikke et valg for å splitte det opp i flere linjer, 1026 00:46:44,320 --> 00:46:46,530 og det er standard. 1027 00:46:46,530 --> 00:46:47,780 Å se det der er greit. 1028 00:46:47,780 --> 00:46:49,182 1029 00:46:49,182 --> 00:46:49,890 ALLISON: Awesome. 1030 00:46:49,890 --> 00:46:52,120 Vel, praktisk naturlig overgang til sløyfer. 1031 00:46:52,120 --> 00:46:54,860 1032 00:46:54,860 --> 00:46:58,980 Så ja, her har vi noen eksempler av løkker som dere så i Scratch. 1033 00:46:58,980 --> 00:47:01,550 Og selvfølgelig alle disse kan bare bli gjenskapt i C. 1034 00:47:01,550 --> 00:47:04,610 Og de i utgangspunktet tillate deg å gjenta noen del av koden 1035 00:47:04,610 --> 00:47:06,740 inntil en bestemt betingelse er oppfylt, noe som vi vil 1036 00:47:06,740 --> 00:47:09,198 komme inn i retten etter å ha snakket om looper med conditionals. 1037 00:47:09,198 --> 00:47:11,150 1038 00:47:11,150 --> 00:47:12,570 >> Så vi har tre hovedtyper. 1039 00:47:12,570 --> 00:47:17,500 For, mens, og gjøre mens, som vi vil alle gå gjennom akkurat nå. 1040 00:47:17,500 --> 00:47:18,860 Så første er for sløyfer. 1041 00:47:18,860 --> 00:47:20,490 1042 00:47:20,490 --> 00:47:25,034 Så for noen tilstand, utføre denne blokken med kode. 1043 00:47:25,034 --> 00:47:27,200 Vi har denne kule liten diagram her nederst. 1044 00:47:27,200 --> 00:47:28,230 1045 00:47:28,230 --> 00:47:32,310 Men i utgangspunktet har du i din for at første linje, 1046 00:47:32,310 --> 00:47:34,240 du kommer til å initial variabler. 1047 00:47:34,240 --> 00:47:38,260 >> Så som vi snakket om, er jeg lik 0 eller I er lik 10. 1048 00:47:38,260 --> 00:47:40,010 Uansett hva du trenger det variabel for å være det er 1049 00:47:40,010 --> 00:47:43,970 kommer til å bli initialisert der, deklarert og initialisert til en viss verdi. 1050 00:47:43,970 --> 00:47:46,760 Så da har vi noen tilstand som kommer 1051 00:47:46,760 --> 00:47:48,900 å være sjekke vår variable mot noe. 1052 00:47:48,900 --> 00:47:55,220 Slik at i tilfelle det typiske tilfellet der kanskje du vil at denne delen av koden 1053 00:47:55,220 --> 00:47:56,620 å utføre fem ganger. 1054 00:47:56,620 --> 00:48:02,380 Slik vi ville ha int i er lik 0, og vi vil den skal være når jeg er mindre enn fem. 1055 00:48:02,380 --> 00:48:04,940 Slik at tilstanden er bare kommer til å sjekke at hver gang. 1056 00:48:04,940 --> 00:48:07,120 Hvis denne betingelsen evalueres til sant, er det 1057 00:48:07,120 --> 00:48:11,162 kommer til å kjøre koden, som er nøyaktig hva denne lille diagrammet viser. 1058 00:48:11,162 --> 00:48:12,370 1059 00:48:12,370 --> 00:48:13,639 >> Og så det utfører det. 1060 00:48:13,639 --> 00:48:15,430 Den oppdaterer en variabel, som er det vi ser 1061 00:48:15,430 --> 00:48:21,020 i siste del av vår for sløyfe initialisering der. 1062 00:48:21,020 --> 00:48:22,370 1063 00:48:22,370 --> 00:48:26,030 Så det vil bare fortsette å gjøre dette til at vilkåret ikke er oppfylt, 1064 00:48:26,030 --> 00:48:28,010 og da vil det gå ut sløyfen og fortsette 1065 00:48:28,010 --> 00:48:29,960 går videre med resten av programmet. 1066 00:48:29,960 --> 00:48:31,320 1067 00:48:31,320 --> 00:48:33,620 Alle bra det? 1068 00:48:33,620 --> 00:48:34,440 Cool. 1069 00:48:34,440 --> 00:48:37,780 >> Så her er et eksempel, veldig lik til noe jeg nettopp har snakket om. 1070 00:48:37,780 --> 00:48:42,030 Så vi bare ønsker å skrive ut dette er CS50 10 ganger. 1071 00:48:42,030 --> 00:48:44,540 Så du ser her har vi vår for, og da er vi 1072 00:48:44,540 --> 00:48:47,450 initialisere variable Jeg skal være lik 0. 1073 00:48:47,450 --> 00:48:50,610 Vår tilstand er sjekket at det er mindre enn 10. 1074 00:48:50,610 --> 00:48:55,210 Så vurdere å true når vi først starte, og oppdaterer deretter vår variabel 1075 00:48:55,210 --> 00:48:58,985 hver gang at det faktisk utfører og skriver ut dette er CS50. 1076 00:48:58,985 --> 00:49:00,510 1077 00:49:00,510 --> 00:49:02,180 Og vil opphøre etter 10 ganger. 1078 00:49:02,180 --> 00:49:03,190 1079 00:49:03,190 --> 00:49:04,070 Cool. 1080 00:49:04,070 --> 00:49:07,130 >> Så mens sløyfer er opp neste. 1081 00:49:07,130 --> 00:49:12,400 Og som du ser her, vi må bare noen mens dette condition-- spørsmålet? 1082 00:49:12,400 --> 00:49:15,238 >> PUBLIKUM: Hvordan kan jeg hoppe faktisk bare ikke ett nummer, 1083 00:49:15,238 --> 00:49:19,030 men to tall [uhørbart] Jeg pluss pluss pluss? 1084 00:49:19,030 --> 00:49:23,390 >> ALLISON: Så spørsmålet var hvordan kan du oppdatere variabel med mer enn én 1085 00:49:23,390 --> 00:49:24,070 på en gang. 1086 00:49:24,070 --> 00:49:26,860 Så jeg pluss pluss vil oppdatering av en hver tid. 1087 00:49:26,860 --> 00:49:32,310 Hvis du ønsket å oppdatere den ved to, kan du gjøre i pluss er lik to. 1088 00:49:32,310 --> 00:49:34,526 >> ROB Bowden: Har du sett pluss lik i forelesning ennå? 1089 00:49:34,526 --> 00:49:35,442 >> PUBLIKUM: [uhørlig]. 1090 00:49:35,442 --> 00:49:37,440 1091 00:49:37,440 --> 00:49:42,110 >> ALLISON: Det er effektivt samme som jeg lik jeg pluss to. 1092 00:49:42,110 --> 00:49:46,130 Så det kommer til å ta det, og oppdatere den ved to hver gang. 1093 00:49:46,130 --> 00:49:49,432 Plus er lik er bare noe vi kaller syntaktisk sukker. 1094 00:49:49,432 --> 00:49:52,390 ROB Bowden: Ja, de finnes for ganske mye alle aritmetiske operatører. 1095 00:49:52,390 --> 00:49:55,830 Så jeg alltid lik ville doble antallet. 1096 00:49:55,830 --> 00:50:02,590 j skillet er lik 3 er den samme som j er lik j delt på tre. 1097 00:50:02,590 --> 00:50:07,399 >> ALLISON: Eller minus er lik to ville dekrementere I ved to hver gang. 1098 00:50:07,399 --> 00:50:08,565 ROB Bowden: Selv mod lik. 1099 00:50:08,565 --> 00:50:09,690 1100 00:50:09,690 --> 00:50:13,270 Du har ikke sett bitvis operatører, men cirkumflekstegnet lik og-tegn er lik, 1101 00:50:13,270 --> 00:50:14,560 alle de eksisterer. 1102 00:50:14,560 --> 00:50:19,480 >> ALLISON: Så mange ganger, spesielt med ditt første par P-apparater, 1103 00:50:19,480 --> 00:50:22,527 du vil bli trolig økes ved en, så jeg pluss pluss, j pluss pluss 1104 00:50:22,527 --> 00:50:24,610 er alle ting du skal typisk å være bruker. 1105 00:50:24,610 --> 00:50:28,240 Men den oppdateringen tilstanden er fullt innenfor din kontroll. 1106 00:50:28,240 --> 00:50:32,310 Du kan oppdatere den uansett med hvilke intervaller eller på den måten du bestemmer deg for. 1107 00:50:32,310 --> 00:50:33,389 1108 00:50:33,389 --> 00:50:35,680 Kanskje du vil den skal være et tilfeldig tall noen ganger. 1109 00:50:35,680 --> 00:50:37,180 1110 00:50:37,180 --> 00:50:39,580 Men ja, det er mange ting du kan gjøre med det. 1111 00:50:39,580 --> 00:50:41,280 Du er ikke begrenset til jeg pluss pluss. 1112 00:50:41,280 --> 00:50:44,400 >> ROB Bowden: Bare så du vet den finnes, det også 1113 00:50:44,400 --> 00:50:46,960 eksisterer i en annen form, pluss pluss jeg. 1114 00:50:46,960 --> 00:50:51,410 Så hvis du noen gang søker på nettet og tilfeldigvis se pluss pluss jeg, 1115 00:50:51,410 --> 00:50:52,870 ganske mye betyr det samme. 1116 00:50:52,870 --> 00:50:54,377 1117 00:50:54,377 --> 00:50:54,960 ALLISON: Cool. 1118 00:50:54,960 --> 00:50:56,070 1119 00:50:56,070 --> 00:50:56,740 Bra? 1120 00:50:56,740 --> 00:50:57,240 Awesome. 1121 00:50:57,240 --> 00:50:59,190 1122 00:50:59,190 --> 00:50:59,990 Så mens sløyfer. 1123 00:50:59,990 --> 00:51:01,160 1124 00:51:01,160 --> 00:51:02,570 Svært like. 1125 00:51:02,570 --> 00:51:03,737 Du har noen tilstand. 1126 00:51:03,737 --> 00:51:05,820 Det viktigste å legge merke til her er i stedet for å måtte 1127 00:51:05,820 --> 00:51:08,540 tre forskjellige deler å sette opp, har vi en. 1128 00:51:08,540 --> 00:51:11,090 Vi har bare noen tilstand som blir kontrollert. 1129 00:51:11,090 --> 00:51:14,920 Og på samme måte, så lenge at betingelsen har verdien true, 1130 00:51:14,920 --> 00:51:16,840 koden din kommer til å kjøre. 1131 00:51:16,840 --> 00:51:18,870 Og hvis det er usant, det opphører, flytte 1132 00:51:18,870 --> 00:51:21,930 til neste del av programmet. 1133 00:51:21,930 --> 00:51:25,780 Så dette er slags like-- hva som er et godt eksempel på å sjekke 1134 00:51:25,780 --> 00:51:27,215 for noen normal tilstand? 1135 00:51:27,215 --> 00:51:29,402 1136 00:51:29,402 --> 00:51:30,235 GABRIEL: Mens sant. 1137 00:51:30,235 --> 00:51:32,110 ALLISON: Du kan gjøre mens sant. 1138 00:51:32,110 --> 00:51:33,510 Vel, er en lik 1. 1139 00:51:33,510 --> 00:51:34,970 1140 00:51:34,970 --> 00:51:37,642 >> ROB Bowden: Du kan gjøre while-- bare i stedet for ved hjelp av en løkke for, 1141 00:51:37,642 --> 00:51:39,600 du kan alltid kode en for loop på en stund loop, 1142 00:51:39,600 --> 00:51:42,600 så jeg større enn 0 eller mens jeg er mindre enn 10. 1143 00:51:42,600 --> 00:51:45,200 1144 00:51:45,200 --> 00:51:46,010 >> ALLISON: Awesome. 1145 00:51:46,010 --> 00:51:50,640 Og da har vi gjøre mens looper, som er stor for bruker validering, der 1146 00:51:50,640 --> 00:51:55,370 Ønsker du å få noe fra din bruker, se om det er gyldig, 1147 00:51:55,370 --> 00:51:57,060 og deretter fortsette derfra. 1148 00:51:57,060 --> 00:52:04,000 Så en av de tingene å vite er med en gjøre mens er at det kommer til å utføre, 1149 00:52:04,000 --> 00:52:08,000 og deretter vil det re-utføre Hvis denne betingelsen er oppfylt. 1150 00:52:08,000 --> 00:52:11,240 >> Så sannsynligvis den beste måten å gjøre dette er bare for å se et eksempel her. 1151 00:52:11,240 --> 00:52:14,620 Så som jeg nettopp nevnte, bruker validering er virkelig useful-- 1152 00:52:14,620 --> 00:52:17,520 eller gjøre Mellem er virkelig nyttig med brukervalidering. 1153 00:52:17,520 --> 00:52:19,730 Så dette er bare kommer å re-spørre noen bruker 1154 00:52:19,730 --> 00:52:23,640 før de går inn i et positivt tall, som kan være nyttig for din P sett 1155 00:52:23,640 --> 00:52:24,190 denne uken. 1156 00:52:24,190 --> 00:52:25,850 1157 00:52:25,850 --> 00:52:29,480 Og så i dette tilfelle, når vi utgangspunktet kjøre dette programmet, 1158 00:52:29,480 --> 00:52:32,260 det kommer til å skrive ut angi et positivt tall. 1159 00:52:32,260 --> 00:52:34,810 Det kommer til å få noen input fra brukeren, 1160 00:52:34,810 --> 00:52:38,320 og så kommer det til å sjekke at innspill mot tilstanden 1161 00:52:38,320 --> 00:52:39,500 at du har satt for det. 1162 00:52:39,500 --> 00:52:41,030 >> Så i dette tilfellet kommer det til å sjekke. 1163 00:52:41,030 --> 00:52:44,190 Det kommer til å si, OK, er vårt innspill negativ, 1164 00:52:44,190 --> 00:52:47,175 eller det er 0 eller negativ, som vil være ugyldig. 1165 00:52:47,175 --> 00:52:48,300 Så da ville re-prompt. 1166 00:52:48,300 --> 00:52:50,280 1167 00:52:50,280 --> 00:52:50,780 Spørsmål? 1168 00:52:50,780 --> 00:52:54,720 >> PUBLIKUM: Er dette den samme da som en mens loop hvis du bare kopiert koden 1169 00:52:54,720 --> 00:52:56,680 og sette den [uhørbart] mens loop? 1170 00:52:56,680 --> 00:52:59,620 1171 00:52:59,620 --> 00:53:05,160 >> ALLISON: Så spørsmålet var ville dette være den samme som nettopp en stund 1172 00:53:05,160 --> 00:53:08,570 sløyfe hvis vi skulle bare kopiere mens loop over. 1173 00:53:08,570 --> 00:53:12,440 Så i dette tilfellet, er din mens loop kommer til å sjekke tilstanden først. 1174 00:53:12,440 --> 00:53:15,300 Slik at i dette tilfellet, hvis vi forsøkt å skrive så bare en stund loop, 1175 00:53:15,300 --> 00:53:18,010 det vil si mens -inngangen er mindre enn en. 1176 00:53:18,010 --> 00:53:20,801 Men vi ikke har en inngang for det. 1177 00:53:20,801 --> 00:53:24,238 >> PUBLIKUM: Hvis du [uhørbart] mens loop inkludert denne koden, 1178 00:53:24,238 --> 00:53:28,166 men da du taklet koden over mens loop også. 1179 00:53:28,166 --> 00:53:31,052 Du hadde bare denne koden [Uhørbart] mens loop. 1180 00:53:31,052 --> 00:53:32,760 ALLISON: Det ville være det samme, ja. 1181 00:53:32,760 --> 00:53:37,110 Så du kan bare write-- stedet for å ha en do-- ja. 1182 00:53:37,110 --> 00:53:37,976 1183 00:53:37,976 --> 00:53:39,350 GABRIEL: Men det er mer elegant. 1184 00:53:39,350 --> 00:53:41,020 ALLISON: Ja, det er mer elegant. 1185 00:53:41,020 --> 00:53:44,560 Du kan komme inn i design og whatnot, men ja, du kan helt gjøre det. 1186 00:53:44,560 --> 00:53:45,850 1187 00:53:45,850 --> 00:53:47,072 Eventuelle andre spørsmål? 1188 00:53:47,072 --> 00:53:49,240 1189 00:53:49,240 --> 00:53:50,250 OK, kult. 1190 00:53:50,250 --> 00:53:55,540 >> Så vi har snakket mye om forholdene med alle disse løkkene som vi har, 1191 00:53:55,540 --> 00:53:58,615 slik at vi faktisk får inn forholdene i boolske uttrykk. 1192 00:53:58,615 --> 00:53:59,990 1193 00:53:59,990 --> 00:54:03,440 Igjen, bruker du disse i C, så bare slags overgang 1194 00:54:03,440 --> 00:54:06,050 fra mer grafisk grensesnitt å faktisk koding. 1195 00:54:06,050 --> 00:54:07,480 1196 00:54:07,480 --> 00:54:09,100 >> Cool, så stor en, hvis. 1197 00:54:09,100 --> 00:54:11,130 1198 00:54:11,130 --> 00:54:17,070 I utgangspunktet bare tillater oss å introdusere noen logikk i vårt program og sjekk 1199 00:54:17,070 --> 00:54:17,790 sys forhold. 1200 00:54:17,790 --> 00:54:22,150 Så i dette tilfellet, OK, er n større enn 0? 1201 00:54:22,150 --> 00:54:24,070 Ja, det er, slik at du kan utføre dette. 1202 00:54:24,070 --> 00:54:28,060 Det er bare å sjekke litt betingelse at du har 1203 00:54:28,060 --> 00:54:33,565 satt, som jeg tror vi alle komfortabel med å sjekke forholdene. 1204 00:54:33,565 --> 00:54:35,975 1205 00:54:35,975 --> 00:54:36,475 Cool. 1206 00:54:36,475 --> 00:54:38,760 1207 00:54:38,760 --> 00:54:44,530 Så hvis annet er den andre en, du kan si OK, hvis dette er sant, 1208 00:54:44,530 --> 00:54:46,150 gjøre dette først. 1209 00:54:46,150 --> 00:54:48,720 Ellers vil jeg du skal standard og gjøre noe annet. 1210 00:54:48,720 --> 00:54:51,977 1211 00:54:51,977 --> 00:54:55,060 Som i dette tilfellet, du enten velge en positivt tall eller et negativt tall. 1212 00:54:55,060 --> 00:54:56,500 Du har bare to alternativer. 1213 00:54:56,500 --> 00:54:59,550 Du trenger det for å utføre uansett av hva brukerinnganger. 1214 00:54:59,550 --> 00:55:02,920 Så du kan si vel, Er dette tall større enn 0? 1215 00:55:02,920 --> 00:55:03,480 Cool. 1216 00:55:03,480 --> 00:55:04,480 Skriv ut et positivt tall. 1217 00:55:04,480 --> 00:55:06,153 Hvis det ikke er det, skriver du ut en negativ. 1218 00:55:06,153 --> 00:55:06,960 Alle gode? 1219 00:55:06,960 --> 00:55:14,920 >> Og så en ting til å gjenkjenne er at dersom dersom betingelsen er oppfylt, 1220 00:55:14,920 --> 00:55:16,650 den andre vil aldri også utføre. 1221 00:55:16,650 --> 00:55:19,210 Bare én av disse vil utføre på en gang. 1222 00:55:19,210 --> 00:55:20,410 Så det er en trade off. 1223 00:55:20,410 --> 00:55:21,720 Du får ikke til å ha begge deler. 1224 00:55:21,720 --> 00:55:23,566 Du har enten den første betingelsen. 1225 00:55:23,566 --> 00:55:25,440 Du har enten if eller annet, ikke begge deler. 1226 00:55:25,440 --> 00:55:26,849 1227 00:55:26,849 --> 00:55:28,890 Som deretter kan gjøre ting enda mer komplisert, 1228 00:55:28,890 --> 00:55:31,060 fordi du kan gjøre hvis, annet det, og deretter annet. 1229 00:55:31,060 --> 00:55:32,810 Så i dette tilfelle vi har tre forhold. 1230 00:55:32,810 --> 00:55:34,830 1231 00:55:34,830 --> 00:55:38,370 Og igjen, er bare én av disse kommer til å ende opp med å bli henrettet. 1232 00:55:38,370 --> 00:55:41,030 Så du kanskje lurer på vel, hva om du 1233 00:55:41,030 --> 00:55:45,510 har noe som kan møte to av disse. 1234 00:55:45,510 --> 00:55:49,520 Kanskje uansett hva du taster inn møter både tilstanden 1235 00:55:49,520 --> 00:55:51,811 for hvis og annet hvis. 1236 00:55:51,811 --> 00:55:53,060 Eneste som kommer til å kjøre 1237 00:55:53,060 --> 00:55:56,240 >> ALLISON: Så snart den finner noe at det oppfyller betingelsen for at 1238 00:55:56,240 --> 00:55:59,790 evalueres til sant, det er det det kommer til å kjøre og ingenting annet. 1239 00:55:59,790 --> 00:56:04,440 Så hvis du hadde dette nummeret mellom 0 og 5 for din første, 1240 00:56:04,440 --> 00:56:10,530 eller er dette tall mellom 3 og 5 for den andre hvis en del, 1241 00:56:10,530 --> 00:56:15,550 og du innspill number-- Jeg sa 0 og 5 og-- 4. 1242 00:56:15,550 --> 00:56:18,110 Det kommer til å treffe den første. 1243 00:56:18,110 --> 00:56:20,960 Det kommer til å si OK, dette nummer ligger mellom 0 og 5. 1244 00:56:20,960 --> 00:56:22,480 Gjennomføre og forlate. 1245 00:56:22,480 --> 00:56:25,340 Det vil aldri treffe det andre alternativet. 1246 00:56:25,340 --> 00:56:26,394 Cool? 1247 00:56:26,394 --> 00:56:27,250 Awesome. 1248 00:56:27,250 --> 00:56:31,300 >> OK vi har også bryter uttalelser hvis Ønsker du å få enda mer-- eller sorry, 1249 00:56:31,300 --> 00:56:31,965 bryteren er neste. 1250 00:56:31,965 --> 00:56:33,540 1251 00:56:33,540 --> 00:56:34,990 Jeg får foran meg selv her. 1252 00:56:34,990 --> 00:56:36,370 1253 00:56:36,370 --> 00:56:39,210 Igjen, flere hvis blokker der som jeg nettopp sa 1254 00:56:39,210 --> 00:56:45,600 er så snart du finner en betingelse som er oppfylt og en if else if annet, 1255 00:56:45,600 --> 00:56:46,630 det etterlater. 1256 00:56:46,630 --> 00:56:49,560 Hvis du trenger å sjekke flere ting, du er 1257 00:56:49,560 --> 00:56:53,000 kommer til å ønske å bruke dette fordi det vil sjekke hver gang her. 1258 00:56:53,000 --> 00:56:58,060 Så dette vil gå gjennom, og hvis den er større enn eller lik 90, 1259 00:56:58,060 --> 00:56:59,160 det kommer til å skrive det. 1260 00:56:59,160 --> 00:57:00,530 1261 00:57:00,530 --> 00:57:03,600 Og det vil kjøre gjennom og sjekke hver eneste en av disse. 1262 00:57:03,600 --> 00:57:06,444 >> PUBLIKUM: Så dette ville være mer buggy enn [uhørbart]. 1263 00:57:06,444 --> 00:57:07,735 Vil dette være som [uhørbart]? 1264 00:57:07,735 --> 00:57:10,990 1265 00:57:10,990 --> 00:57:15,740 >> ALLISON: Spørsmålet er ville dette være buggy eller gjør dette gjøre hva du vil. 1266 00:57:15,740 --> 00:57:19,830 Det er egentlig avhengig av hva du ønsker fra programmet. 1267 00:57:19,830 --> 00:57:22,291 >> PUBLIKUM: Jeg mener som hvis du setter 90 i. 1268 00:57:22,291 --> 00:57:23,290 ALLISON: Hvis du putter 90-- 1269 00:57:23,290 --> 00:57:24,206 PUBLIKUM: [uhørlig]. 1270 00:57:24,206 --> 00:57:25,584 1271 00:57:25,584 --> 00:57:27,250 GABRIEL: Du kommer til å få to ting. 1272 00:57:27,250 --> 00:57:28,916 ALLISON: Du kommer til å få to ting. 1273 00:57:28,916 --> 00:57:29,420 Ja, to. 1274 00:57:29,420 --> 00:57:32,420 1275 00:57:32,420 --> 00:57:33,920 >> ROB Bowden: Two? 1276 00:57:33,920 --> 00:57:34,580 >> ALLISON: Nei. 1277 00:57:34,580 --> 00:57:35,288 >> ROB Bowden: Four. 1278 00:57:35,288 --> 00:57:37,070 1279 00:57:37,070 --> 00:57:40,070 Hvis du putter 90, kommer det til å si at du fikk en A, du fikk en B, du fikk en C, 1280 00:57:40,070 --> 00:57:40,545 du fikk en D. 1281 00:57:40,545 --> 00:57:41,461 >> PUBLIKUM: [uhørlig]. 1282 00:57:41,461 --> 00:57:42,196 1283 00:57:42,196 --> 00:57:42,820 ALLISON: Høyre. 1284 00:57:42,820 --> 00:57:44,778 Så jeg er avhengig av hva du ønsker fra deg program. 1285 00:57:44,778 --> 00:57:47,050 Noen ganger må du sjekke flere ting. 1286 00:57:47,050 --> 00:57:49,970 1287 00:57:49,970 --> 00:57:55,270 Du får mye dypere inn i hva god design er som du går fremover. 1288 00:57:55,270 --> 00:57:57,090 Det er viktig å vet er at dette 1289 00:57:57,090 --> 00:58:01,090 vil sjekke alle fire forholdene her. 1290 00:58:01,090 --> 00:58:05,860 Mens hvis dette var en if else if annet Hvis annet, ville det rammet det første tilfellet, 1291 00:58:05,860 --> 00:58:07,950 det ville skrive du fikk en A og gjøres. 1292 00:58:07,950 --> 00:58:10,250 >> ROB Bowden: Selv om vi besluttet å endre dette til hvis 1293 00:58:10,250 --> 00:58:13,880 og større enn eller lik 90, hvis og større enn eller lik til 80, 1294 00:58:13,880 --> 00:58:19,710 og mindre enn eller lik 89, dersom n er større enn eller lik 70, 1295 00:58:19,710 --> 00:58:23,830 og n er mindre enn eller lik 79, slik at det vil være korrekt. 1296 00:58:23,830 --> 00:58:27,190 Som vil gjøre hva vi vil, men det fortsatt sjekker hver enkelt det. 1297 00:58:27,190 --> 00:58:34,050 >> Så mens det i den første scenario, hvis vi inn 90 med bare hvis annet hvis annet hvis, 1298 00:58:34,050 --> 00:58:37,300 og vi går inn i 90, da det kommer til å korrigere. 1299 00:58:37,300 --> 00:58:39,615 Det vil sjekke først en, print du fikk en A, 1300 00:58:39,615 --> 00:58:42,590 hoppe over alt, fordi det allerede funnet en som fungerer. 1301 00:58:42,590 --> 00:58:46,360 Alle saker er gjensidig utelukkende basert på hvis annet hvis annet hvis. 1302 00:58:46,360 --> 00:58:48,630 Så det vil utføre først hvis, så er det gjort. 1303 00:58:48,630 --> 00:58:49,790 Det vil gå til slutten. 1304 00:58:49,790 --> 00:58:52,400 >> Mens hvis vi endrer dette er hva jeg var 1305 00:58:52,400 --> 00:58:54,204 si med mindre enn eller lik 89. 1306 00:58:54,204 --> 00:58:55,620 Det kommer til å sjekke den første. 1307 00:58:55,620 --> 00:58:56,560 Det vil skrive ut. 1308 00:58:56,560 --> 00:58:58,010 Det skal sjekke den andre. 1309 00:58:58,010 --> 00:58:59,010 Det kommer ikke til å skrive ut. 1310 00:58:59,010 --> 00:58:59,910 Sjekk den tredje. 1311 00:58:59,910 --> 00:59:00,620 Ikke kommer til å skrive ut. 1312 00:59:00,620 --> 00:59:01,495 Sjekk den fjerde. 1313 00:59:01,495 --> 00:59:02,420 Nå kommer til å skrive ut. 1314 00:59:02,420 --> 00:59:05,380 Så i så fall den andre hvis versjon, siden disse sakene 1315 00:59:05,380 --> 00:59:09,120 er gjensidig utelukkende, er det bedre bruk hvis annet hvis annet hvis, 1316 00:59:09,120 --> 00:59:12,970 fordi det kommer til å ha færre kontroller av forholdene 1317 00:59:12,970 --> 00:59:14,750 enn denne versjonen. 1318 00:59:14,750 --> 00:59:17,692 1319 00:59:17,692 --> 00:59:18,400 ALLISON: Awesome. 1320 00:59:18,400 --> 00:59:20,580 Så en annen ting vi kan gjøre er bryter uttalelser. 1321 00:59:20,580 --> 00:59:23,104 1322 00:59:23,104 --> 00:59:25,270 I utgangspunktet en bryter uttalelse tar i noen variable, 1323 00:59:25,270 --> 00:59:28,780 i dette tilfellet er det n og bestemmer hvilken sak å gjennomføre. 1324 00:59:28,780 --> 00:59:33,106 Så dette er også en der dine saker bør være slags gjensidig utelukkende. 1325 00:59:33,106 --> 00:59:35,210 1326 00:59:35,210 --> 00:59:37,940 Så i dette tilfelle, hvis vi at vi får en, er det 1327 00:59:37,940 --> 00:59:42,270 kommer til å matche hva som variable-- uansett verdien av n 1328 00:59:42,270 --> 00:59:48,700 er i ett av disse tilfeller, slik at en, to, eller 3, og skrive ut den tilsvarende linjen. 1329 00:59:48,700 --> 00:59:51,870 >> Og så hvis du merker her, vi har også en standard 1330 00:59:51,870 --> 00:59:54,670 som du kan av å tenke på som annet. 1331 00:59:54,670 --> 00:59:58,510 Så hvis du velger et annet nummer foruten 1, 2 og 3 i dette tilfellet 1332 00:59:58,510 --> 00:59:59,885 det bare kommer til å skrive ut ugyldig. 1333 00:59:59,885 --> 01:00:03,690 1334 01:00:03,690 --> 01:00:08,390 Bestemme når man skal bruke ifs versus hvis andens versus brytere kommer 1335 01:00:08,390 --> 01:00:12,590 å være noe som dere vil se designe klok som du begynner å skrive 1336 01:00:12,590 --> 01:00:15,270 mer kompliserte programmer, og det er ingen harde og raske regler 1337 01:00:15,270 --> 01:00:16,330 om når du skal bruke dem. 1338 01:00:16,330 --> 01:00:17,890 Det er egentlig avhengig av konteksten. 1339 01:00:17,890 --> 01:00:18,590 >> ROB Bowden: Og bare å kaste det der ute 1340 01:00:18,590 --> 01:00:20,131 siden det er mer behagelig delen. 1341 01:00:20,131 --> 01:00:20,920 1342 01:00:20,920 --> 01:00:25,053 Brytere, har de en tendens til å be-- så du er begrenset 1343 01:00:25,053 --> 01:00:27,430 i antall måter du kan bruke dem, fordi IFS, 1344 01:00:27,430 --> 01:00:30,100 tilstanden kan være ganske sett alt du vil. 1345 01:00:30,100 --> 01:00:33,410 Med brytere sakene må være tall, 1346 01:00:33,410 --> 01:00:37,770 eller teknisk de kan være tegn, men chars, som vi skal se, er bare tall. 1347 01:00:37,770 --> 01:00:44,250 Så de må være tall, men brytere virkelig er mer effektiv enn hvis 1348 01:00:44,250 --> 01:00:50,060 else if annet hvis, fordi selv ta eksempelet before-- godt, 1349 01:00:50,060 --> 01:00:51,486 eksempelet karakteren virker bra. 1350 01:00:51,486 --> 01:00:52,550 1351 01:00:52,550 --> 01:00:57,080 >> Vel la oss si her, vi i stedet gjøre dette som en if else if else if scenario. 1352 01:00:57,080 --> 01:01:00,930 Slik at hvis n er lik lik 1, skriver du plukket et lavt tall. 1353 01:01:00,930 --> 01:01:04,490 Dersom annet hvis n er lik lik 2, du plukket en medium nummer. 1354 01:01:04,490 --> 01:01:06,550 Else om likeverdige er lik 3, høy. 1355 01:01:06,550 --> 01:01:08,060 Else ugyldig. 1356 01:01:08,060 --> 01:01:09,820 >> Så la oss si det var vårt scenario. 1357 01:01:09,820 --> 01:01:14,060 Så la oss si vi går inn 4, så vi forventer ugyldig. 1358 01:01:14,060 --> 01:01:17,410 Måten at hvis annet hvis annet hvis tilnærming kommer til å fungere er 1359 01:01:17,410 --> 01:01:18,740 kontrollerer den første tilstand. 1360 01:01:18,740 --> 01:01:19,776 Det er ikke fornøyd. 1361 01:01:19,776 --> 01:01:21,150 Så vi sjekke den andre betingelsen. 1362 01:01:21,150 --> 01:01:21,940 Det er ikke fornøyd. 1363 01:01:21,940 --> 01:01:23,023 Sjekk det tredje vilkåret. 1364 01:01:23,023 --> 01:01:23,640 Ikke fornøyd. 1365 01:01:23,640 --> 01:01:26,650 Så vi går til andre og skrive ugyldig. 1366 01:01:26,650 --> 01:01:30,169 >> Måten bryter verk er det kompilerer ned 1367 01:01:30,169 --> 01:01:31,960 inn i hva vi skal å kalle et hopp bord. 1368 01:01:31,960 --> 01:01:33,180 1369 01:01:33,180 --> 01:01:37,120 Hovedsaken var at når du skriver inn 4, 1370 01:01:37,120 --> 01:01:39,090 Det kan umiddelbart gå til standard. 1371 01:01:39,090 --> 01:01:41,460 Det trenger ikke å sjekke am I tilfelle en? 1372 01:01:41,460 --> 01:01:42,350 Nope det er det ikke. 1373 01:01:42,350 --> 01:01:42,850 Tilfelle 2? 1374 01:01:42,850 --> 01:01:43,240 Nope. 1375 01:01:43,240 --> 01:01:43,770 Sak 3? 1376 01:01:43,770 --> 01:01:44,270 Nope. 1377 01:01:44,270 --> 01:01:45,090 Standard. 1378 01:01:45,090 --> 01:01:47,610 OK, dette må være der jeg ønsker, og deretter utføre det. 1379 01:01:47,610 --> 01:01:49,590 Nei, det umiddelbart hopper til standard. 1380 01:01:49,590 --> 01:01:51,900 Eller det jeg skriver 2, er det umiddelbart kommer til å gå til to 1381 01:01:51,900 --> 01:01:54,060 uten å måtte gå gjennom en sak. 1382 01:01:54,060 --> 01:01:57,820 >> Så på den måten, realistisk i dag som er 1383 01:01:57,820 --> 01:02:00,250 ikke så mye av en effektivitetsgevinst. 1384 01:02:00,250 --> 01:02:02,880 Vanligvis datamaskiner er ganske fort, og det er ikke så stor. 1385 01:02:02,880 --> 01:02:07,270 Men det er tilfelle at brytere er raskere. 1386 01:02:07,270 --> 01:02:10,380 Hvis du virkelig prøver å optimalisere, bruke en switch. 1387 01:02:10,380 --> 01:02:11,980 1388 01:02:11,980 --> 01:02:12,710 >> ALLISON: Cool. 1389 01:02:12,710 --> 01:02:15,270 Og så har vi trefoldig operatør. 1390 01:02:15,270 --> 01:02:19,470 Så jeg vet jeg nevnte tidligere ordet syntaktisk sukker. 1391 01:02:19,470 --> 01:02:24,160 Så det er bare ting som gjør koden mye mer konsis. 1392 01:02:24,160 --> 01:02:25,590 Så dette er en av disse sakene. 1393 01:02:25,590 --> 01:02:31,430 >> Så trefoldig operatøren er spørsmålstegn kolon som vi ser i linje streng 1394 01:02:31,430 --> 01:02:35,810 s n er lik større enn 100 spørsmålstegn høy kolon lav. 1395 01:02:35,810 --> 01:02:41,800 Så i utgangspunktet hvordan dette fungerer er det er n er større enn 100 er en betingelse. 1396 01:02:41,800 --> 01:02:43,674 Så jeg tror det kan være fornuftig. 1397 01:02:43,674 --> 01:02:44,840 Det er som å spørre et spørsmål. 1398 01:02:44,840 --> 01:02:47,320 Det er å si oh, er n større enn 100. 1399 01:02:47,320 --> 01:02:48,340 Hvem vet? 1400 01:02:48,340 --> 01:02:50,750 Og hvis det evalueres til sant, det kommer til å gi deg 1401 01:02:50,750 --> 01:02:54,270 det første som er oppført der, som er høy. 1402 01:02:54,270 --> 01:02:55,840 Ellers kommer det til å gi deg lavt. 1403 01:02:55,840 --> 01:03:01,210 Så dette er bare en veldig enkel og effektiv måte å gjøre som en if annet. 1404 01:03:01,210 --> 01:03:02,780 Det er alt dette er. 1405 01:03:02,780 --> 01:03:07,450 >> Og hvis vi skulle skrive denne som en if annet betinget, 1406 01:03:07,450 --> 01:03:12,480 det ville være hvis n er større enn 100, returnerer høy. 1407 01:03:12,480 --> 01:03:14,220 Else, returnere lav. 1408 01:03:14,220 --> 01:03:17,570 Dette er bare en mye mer konsis måte å skrive det. 1409 01:03:17,570 --> 01:03:27,090 >> ROB Bowden: Så dette eksempelet er når du gjør noe 1410 01:03:27,090 --> 01:03:30,190 som dette, er dette mønsteret hvor jeg bruker trefoldig veldig ofte. 1411 01:03:30,190 --> 01:03:31,540 1412 01:03:31,540 --> 01:03:35,460 Så vi har ikke snakket om omfanget ennå, men jeg hater å se streng s semikolon. 1413 01:03:35,460 --> 01:03:39,150 Hvis n er større enn 100, s lik høy. 1414 01:03:39,150 --> 01:03:40,660 Else, er lik s lav. 1415 01:03:40,660 --> 01:03:45,070 Så dette mønsteret, de fem linjer av koden bokstavelig talt 100% av tiden 1416 01:03:45,070 --> 01:03:49,800 kan overføres inn i hva var oppe med en trefoldig. 1417 01:03:49,800 --> 01:03:52,340 Slik at det ternære, en kodelinje. 1418 01:03:52,340 --> 01:03:54,640 If annet, fem. 1419 01:03:54,640 --> 01:03:56,910 Det er et eksempel jeg peker ut hver eneste gang. 1420 01:03:56,910 --> 01:03:59,250 Dette ville flott sted for en trefoldig operatør. 1421 01:03:59,250 --> 01:04:00,647 Det er så rent. 1422 01:04:00,647 --> 01:04:01,980 Men folk har en tendens til å aldri bruke det. 1423 01:04:01,980 --> 01:04:06,140 1424 01:04:06,140 --> 01:04:08,030 >> ALLISON: Ta det bort Gabe. 1425 01:04:08,030 --> 01:04:11,110 >> GABRIEL: Så nå dere alle lærte på forelesning denne uken 1426 01:04:11,110 --> 01:04:13,420 at alt i en Datamaskinen er binært, ikke sant? 1427 01:04:13,420 --> 01:04:14,570 Akkurat som lampene her. 1428 01:04:14,570 --> 01:04:16,492 Du kan enten slås av og på. 1429 01:04:16,492 --> 01:04:18,450 Og etter alt, mener jeg bokstavelig talt alt. 1430 01:04:18,450 --> 01:04:24,272 Noen tall og tegn og strenger, og selv koden som du skriver når 1431 01:04:24,272 --> 01:04:26,480 det blir kompilert til maskin kode og sånt, 1432 01:04:26,480 --> 01:04:29,230 så det hele koker ned til 0 og 1 '. 1433 01:04:29,230 --> 01:04:34,540 >> Og så når vi har å gjøre med heltall, som 1434 01:04:34,540 --> 01:04:38,000 er noe som er teknisk veldig enkel, bør vi være i stand til å gjøre ting 1435 01:04:38,000 --> 01:04:40,630 som å legge dem, som er trolig en av de enkleste tingene 1436 01:04:40,630 --> 01:04:42,300 du kan gjøre for å to heltall, ikke sant? 1437 01:04:42,300 --> 01:04:47,410 Så addisjon og subtraksjon fungerer akkurat som det fungerer i titallssystemet, 1438 01:04:47,410 --> 01:04:50,780 bortsett fra her er det binære, ikke sant? 1439 01:04:50,780 --> 01:04:52,090 Så det er i bunnen to. 1440 01:04:52,090 --> 01:04:54,070 Så legge en pluss en. 1441 01:04:54,070 --> 01:04:57,020 Som gir 0, og en bærer over. 1442 01:04:57,020 --> 01:05:01,335 Og bare fortsette å gjøre det, så nå kommer det mer interessant spørsmål. 1443 01:05:01,335 --> 01:05:03,730 1444 01:05:03,730 --> 01:05:07,710 >> Vi vet hvordan de skal representere alle positive heltall i datamaskinen, 1445 01:05:07,710 --> 01:05:09,870 men la oss gjøre dette til en øvelse. 1446 01:05:09,870 --> 01:05:15,240 Lat som dere er alle i 1960 eller noe forsøk på å opprette en datamaskin, 1447 01:05:15,240 --> 01:05:19,950 og du må komme opp av en måte å lagre minus 1, 1448 01:05:19,950 --> 01:05:22,554 for eksempel, eller en hvilken som helst minus heltall for den saks skyld. 1449 01:05:22,554 --> 01:05:23,470 Hvordan vil du gjøre det? 1450 01:05:23,470 --> 01:05:27,820 1451 01:05:27,820 --> 01:05:29,220 Noen ideer? 1452 01:05:29,220 --> 01:05:31,302 Bare kaste noe på meg. 1453 01:05:31,302 --> 01:05:32,264 Ja? 1454 01:05:32,264 --> 01:05:39,480 >> PUBLIKUM: [uhørlig] utpeke en spesiell hvis [uhørbart]. 1455 01:05:39,480 --> 01:05:42,590 >> GABRIEL: Du kan utpeke en spesiell bit, som vil være 0 eller 1. 1456 01:05:42,590 --> 01:05:45,590 La oss si at en hvis det er positivt og 0 hvis den er negativ. 1457 01:05:45,590 --> 01:05:48,171 Og deretter resten av borkronen er bare å lagre nummeret. 1458 01:05:48,171 --> 01:05:48,670 Cool. 1459 01:05:48,670 --> 01:05:49,990 Så det er en veldig god idé. 1460 01:05:49,990 --> 01:05:51,550 Vi har, jeg vet ikke, 200. 1461 01:05:51,550 --> 01:05:54,720 Og hvis den første biten er slått på, så er det pluss 200. 1462 01:05:54,720 --> 01:05:57,270 Hvis det er slått av, er det minus 200. 1463 01:05:57,270 --> 01:05:58,380 Cool. 1464 01:05:58,380 --> 01:06:01,350 >> Det er bare én liten Problemet med dette, 1465 01:06:01,350 --> 01:06:05,370 som er hvis vi prøver å summere opp ting. 1466 01:06:05,370 --> 01:06:18,910 Så forestille vi har 11111 her, og vi summere dette med 00100 uansett. 1467 01:06:18,910 --> 01:06:21,630 Hvis disse to er positive, er det helt greit. 1468 01:06:21,630 --> 01:06:24,470 Men så hvis en av dem er negativ, i likhet 1469 01:06:24,470 --> 01:06:27,410 la oss si at denne biten her er den som er ansvarlig 1470 01:06:27,410 --> 01:06:31,390 for-- Jeg kommer til å gjøre en separate-- så dette betyr at dette tallet her 1471 01:06:31,390 --> 01:06:31,970 er positiv. 1472 01:06:31,970 --> 01:06:34,450 Dette betyr at denne tall her er negativ, ikke sant? 1473 01:06:34,450 --> 01:06:37,010 >> Men så når du er kommer til å summere dem, du 1474 01:06:37,010 --> 01:06:40,180 trenger en hvis setningen sier oh hvis dette er 0, 1475 01:06:40,180 --> 01:06:43,479 så mitt summen vil være noe annet, ikke sant? 1476 01:06:43,479 --> 01:06:45,270 Så det er en litt mer smart måte å gjøre 1477 01:06:45,270 --> 01:06:48,520 at, som kalles to-komplement. 1478 01:06:48,520 --> 01:06:52,350 Så i utgangspunktet det vi gjøre er vi definerer minus 1 1479 01:06:52,350 --> 01:06:57,250 å være tingen at hvis Vi legger opp til en gir oss 0. 1480 01:06:57,250 --> 01:06:59,470 1481 01:06:59,470 --> 01:07:00,860 La meg gjenta det. 1482 01:07:00,860 --> 01:07:03,280 Så la oss si at dette her er 1. 1483 01:07:03,280 --> 01:07:08,110 1484 01:07:08,110 --> 01:07:13,570 Hva er det som naturlig i positive heltall 1485 01:07:13,570 --> 01:07:15,570 lagt til som gir oss 0? 1486 01:07:15,570 --> 01:07:19,150 1487 01:07:19,150 --> 01:07:21,030 Hva om vi prøver å legge den til dette nummeret? 1488 01:07:21,030 --> 01:07:22,830 1489 01:07:22,830 --> 01:07:28,032 Vi kommer til å have-- OK, så la oss legge til. 1490 01:07:28,032 --> 01:07:32,820 1491 01:07:32,820 --> 01:07:38,065 Vi kommer til å ha en pluss en er 0, og deretter bærer det over. 1492 01:07:38,065 --> 01:07:40,160 1493 01:07:40,160 --> 01:07:45,490 Og så kommer vi til å få 0 igjen. 1494 01:07:45,490 --> 01:07:47,730 1495 01:07:47,730 --> 01:07:48,820 Jeg blir forvirret. 1496 01:07:48,820 --> 01:07:51,670 Og du kommer til å få 0 og 0 og 0 og 0 og 0 og 0. 1497 01:07:51,670 --> 01:07:52,450 Massevis av 0-tallet. 1498 01:07:52,450 --> 01:07:56,240 >> I det siste, er vi ikke kommer til å være i stand til å bære det over, 1499 01:07:56,240 --> 01:07:59,614 fordi la oss si at vi bare håndtere med én byte, så bare 8 bits. 1500 01:07:59,614 --> 01:08:02,780 Så hva maskinen gjør som standard er bare glemmer om at [uhørbart], 1501 01:08:02,780 --> 01:08:03,279 OK? 1502 01:08:03,279 --> 01:08:04,530 1503 01:08:04,530 --> 01:08:06,880 Så dette er det som kalles komplementet for to. 1504 01:08:06,880 --> 01:08:15,180 Vi definerer rett og slett minus 1 å være ting her at hvis du legge det til en 1505 01:08:15,180 --> 01:08:15,995 vil gi deg 0. 1506 01:08:15,995 --> 01:08:17,609 1507 01:08:17,609 --> 01:08:20,180 Og det er ganske kult fordi vi ikke egentlig 1508 01:08:20,180 --> 01:08:24,090 trenger sent å implementere en annen type sum 1509 01:08:24,090 --> 01:08:26,590 avhengig av om det er en negativt eller et positivt tall. 1510 01:08:26,590 --> 01:08:27,465 Betyr det fornuftig? 1511 01:08:27,465 --> 01:08:28,740 1512 01:08:28,740 --> 01:08:32,370 >> Så en ting som vi gjør her for å omdanne 1513 01:08:32,370 --> 01:08:38,550 mellom en positiv og en negativ heltall er da vi kaster alt, 1514 01:08:38,550 --> 01:08:40,930 og da vi legge 1 til det nummeret. 1515 01:08:40,930 --> 01:08:43,140 Hvis du prøver å gjøre det selv på et stykke papir, 1516 01:08:43,140 --> 01:08:44,681 du kommer til å se at er fornuftig. 1517 01:08:44,681 --> 01:08:51,000 Men hvis jeg tar dette nummeret her, dette er fem. 1518 01:08:51,000 --> 01:08:54,859 Så hvis jeg snur alt her, så 1, 1, 1, 1, 1. 1519 01:08:54,859 --> 01:08:55,880 1520 01:08:55,880 --> 01:08:57,830 Flip, flip, flip. 1521 01:08:57,830 --> 01:09:00,130 Og så jeg legger en til det. 1522 01:09:00,130 --> 01:09:02,750 Jeg kommer til å ha nøyaktig minus fem. 1523 01:09:02,750 --> 01:09:03,250 OK? 1524 01:09:03,250 --> 01:09:06,220 >> Dette gjør slags følelse fordi hvis du prøver å oppsummere dette med antall 1525 01:09:06,220 --> 01:09:10,229 som vi hadde før, som var-- la oss snu dette igjen. 1526 01:09:10,229 --> 01:09:12,999 Det var 101 og massevis av 0-tallet. 1527 01:09:12,999 --> 01:09:13,795 1528 01:09:13,795 --> 01:09:15,670 Hvis du prøver å legge disse to tallene sammen, 1529 01:09:15,670 --> 01:09:16,961 du kommer til å ha nøyaktig 0. 1530 01:09:16,961 --> 01:09:18,920 1531 01:09:18,920 --> 01:09:19,460 OK. 1532 01:09:19,460 --> 01:09:19,884 Eventuelle spørsmål? 1533 01:09:19,884 --> 01:09:20,759 >> PUBLIKUM: [uhørbart] 1534 01:09:20,759 --> 01:09:25,790 1535 01:09:25,790 --> 01:09:27,280 >> GABRIEL: Hva mener du? 1536 01:09:27,280 --> 01:09:29,240 >> PUBLIKUM: Negativ til positive [uhørbart]. 1537 01:09:29,240 --> 01:09:33,215 >> GABRIEL: Nei, du snur og du legger en alltid. 1538 01:09:33,215 --> 01:09:34,081 1539 01:09:34,081 --> 01:09:34,580 Yeah. 1540 01:09:34,580 --> 01:09:36,910 1541 01:09:36,910 --> 01:09:39,680 OK, så tegnene også kodet binærfiler. 1542 01:09:39,680 --> 01:09:42,649 Vi har ASCII-tabellen, som du så også på forelesning, ikke sant? 1543 01:09:42,649 --> 01:09:45,040 Så det er i utgangspunktet en kartlegging av ting. 1544 01:09:45,040 --> 01:09:50,960 Og her kan jeg ikke understreke nok at for en datamaskin, og en 65 1545 01:09:50,960 --> 01:09:52,770 er bokstavelig talt det samme. 1546 01:09:52,770 --> 01:10:03,430 Så hvis jeg skriver noe sånt som char c er lik en, kunne på samme tid 1547 01:10:03,430 --> 01:10:06,890 bare skrive 65 her, og det ville være nøyaktig det samme, OK? 1548 01:10:06,890 --> 01:10:08,470 Det er ingen forskjell overhodet. 1549 01:10:08,470 --> 01:10:12,420 >> Vi vanligvis pleier å sette tegn i variabler av type. 1550 01:10:12,420 --> 01:10:16,770 Char, ikke fordi de er i hovedsak laget for det, men på grunn 1551 01:10:16,770 --> 01:10:18,050 av menneskelig konvensjonen. 1552 01:10:18,050 --> 01:10:22,410 Men du kan bare håndtere heltall i stedet for variabler av typen char, 1553 01:10:22,410 --> 01:10:23,490 og du blir fin. 1554 01:10:23,490 --> 01:10:28,410 Den eneste virkelige forskjellen mellom en char c og en int i 1555 01:10:28,410 --> 01:10:31,960 er at en int har fire byte i de fleste systemer, mens en røye har én byte. 1556 01:10:31,960 --> 01:10:33,070 1557 01:10:33,070 --> 01:10:35,460 De er i hovedsak de samme gjelder data. 1558 01:10:35,460 --> 01:10:36,990 1559 01:10:36,990 --> 01:10:37,990 Så hva vil skrive her? 1560 01:10:37,990 --> 01:10:43,780 Her skal vi skrive et siffer ved hjelp av printf med en pluss 1, og på samme måte som heltall, 1561 01:10:43,780 --> 01:10:46,240 chars kan oppsummeres slik tegn kan også bli summert. 1562 01:10:46,240 --> 01:10:47,890 Så dette er nøyaktig 65. 1563 01:10:47,890 --> 01:10:49,950 Så det kommer til å bli 66, og her har vi 1564 01:10:49,950 --> 01:10:56,860 65 pluss lite minus stor A, som vil være, vet jeg ikke egentlig vet. 1565 01:10:56,860 --> 01:11:00,900 Men det vil være nøyaktig den gapet mellom de store bokstavene 1566 01:11:00,900 --> 01:11:07,800 og og de mindre bokstaver, så vi kommer til å få liten en, ikke sant? 1567 01:11:07,800 --> 01:11:08,300 Yeah. 1568 01:11:08,300 --> 01:11:11,740 Så dette kommer til å skrive ut en tegn som er nøyaktig denne. 1569 01:11:11,740 --> 01:11:12,260 Bra? 1570 01:11:12,260 --> 01:11:12,860 Eventuelle spørsmål? 1571 01:11:12,860 --> 01:11:16,320 1572 01:11:16,320 --> 01:11:19,430 >> Her har vi en haug med forskjellig typer for numeriske variabler. 1573 01:11:19,430 --> 01:11:20,620 Vi allerede snakker om int. 1574 01:11:20,620 --> 01:11:21,740 1575 01:11:21,740 --> 01:11:27,760 Float er bare en måte to-- dette er virkelig morsomt, fordi når jeg først lærte 1576 01:11:27,760 --> 01:11:32,320 å programmere tilbake i dag med Python, det første programmet jeg noensinne 1577 01:11:32,320 --> 01:11:37,480 prøvde å skrive, så jeg at det var en typen kalt inn, og en type som heter float. 1578 01:11:37,480 --> 01:11:39,800 Og flottøren var for alle reelle tall. 1579 01:11:39,800 --> 01:11:43,290 Så da spurte jeg hvorfor skal Jeg noen gang bruke en int da? 1580 01:11:43,290 --> 01:11:45,590 Fordi hvis jeg kan bruke all reelle tall med en dupp, 1581 01:11:45,590 --> 01:11:47,120 Jeg ville bare slutte å bruke ints, ikke sant? 1582 01:11:47,120 --> 01:11:49,550 Fordi reelle tall er mye som mer generisk. 1583 01:11:49,550 --> 01:11:51,820 1584 01:11:51,820 --> 01:11:54,060 >> Det viser seg at dette er ikke tilfelle i datamaskiner 1585 01:11:54,060 --> 01:11:58,480 fordi de er i hovedsak forskjellige ting. 1586 01:11:58,480 --> 01:12:01,470 Så heltall og flyter, den operasjoner som du gjør med dem 1587 01:12:01,470 --> 01:12:04,739 er vesensforskjellige fordi av måten de er lagret, OK? 1588 01:12:04,739 --> 01:12:07,280 Vi kommer til å snakke litt litt mer om det i et sekund. 1589 01:12:07,280 --> 01:12:09,110 >> Så dobbel er bare en større flåte. 1590 01:12:09,110 --> 01:12:12,830 Vanligvis i de fleste systemer, en flottør er fire byte, akkurat som en int. 1591 01:12:12,830 --> 01:12:15,440 Og en dobbel er åtte byte. 1592 01:12:15,440 --> 01:12:21,450 En lang lang er egentlig bare et symbol at du føyer til en type som int. 1593 01:12:21,450 --> 01:12:24,040 Du sier lang lang int som dette. 1594 01:12:24,040 --> 01:12:28,550 Lang lang int x å gjøre det lenger. 1595 01:12:28,550 --> 01:12:32,310 Så i de fleste systemer, vil det gi åtte byter i stedet for den vanlige fire. 1596 01:12:32,310 --> 01:12:35,620 Og du kan faktisk slippe i, så det kan bare si lang lang, 1597 01:12:35,620 --> 01:12:37,240 og som fungerer også, OK? 1598 01:12:37,240 --> 01:12:42,850 Du kan også gjøre andre ting som unsigned int, eller igjen bare usignert 1599 01:12:42,850 --> 01:12:43,680 vil også fungere. 1600 01:12:43,680 --> 01:12:49,370 Og det ville gjøre x være en variabel som alt er positivt, 1601 01:12:49,370 --> 01:12:53,231 så du kan egentlig ikke ha negativ tallene på den måten at vi så opp her. 1602 01:12:53,231 --> 01:12:56,484 1603 01:12:56,484 --> 01:12:58,650 Så etter fantastisk flyttall og presisjon. 1604 01:12:58,650 --> 01:13:01,890 Det er en av grunnene til at du ønsker å bruke ints i stedet for flyter, 1605 01:13:01,890 --> 01:13:04,370 fordi ints er 100% nøyaktige, ikke sant? 1606 01:13:04,370 --> 01:13:06,170 Det er akkurat det nummeret. 1607 01:13:06,170 --> 01:13:11,910 For flytende poeng, hvis du si svaret er lik 1 over 10-- 1608 01:13:11,910 --> 01:13:14,690 Jeg måtte ha denne eksakte programmet her, float.c. 1609 01:13:14,690 --> 01:13:16,390 1610 01:13:16,390 --> 01:13:19,420 Som skriver ut til 20 desimaler. 1611 01:13:19,420 --> 01:13:23,270 1 dividert med 10, og at vanligvis er 0,1, ikke sant? 1612 01:13:23,270 --> 01:13:27,910 Men her hvis vi gjør flyte, og vi kjører det, 1613 01:13:27,910 --> 01:13:30,320 Vi ser at det er ikke akkurat 0,1. 1614 01:13:30,320 --> 01:13:33,570 Det er 0,149 noe. 1615 01:13:33,570 --> 01:13:35,570 >> Og hvorfor er det? 1616 01:13:35,570 --> 01:13:40,390 Fordi du ikke kan egentlig representerer hver eneste mulige reelt tall i minnet 1617 01:13:40,390 --> 01:13:42,730 fordi det finnes uncountably mange av dem. 1618 01:13:42,730 --> 01:13:48,360 Så vi er teknisk sett bare i stand til å representerer en begrenset mengde av disse 1619 01:13:48,360 --> 01:13:50,470 med en begrenset mengde av data. 1620 01:13:50,470 --> 01:13:52,050 Men det er veldig interessant. 1621 01:13:52,050 --> 01:13:54,920 Nå er dette begs Spørsmålet om hvordan du ville 1622 01:13:54,920 --> 01:13:59,299 gå om å representere dette med bits, ikke sant? 1623 01:13:59,299 --> 01:14:00,340 Så hvordan blir flyter lagret? 1624 01:14:00,340 --> 01:14:01,970 1625 01:14:01,970 --> 01:14:03,730 Med heltall var det enkelt. 1626 01:14:03,730 --> 01:14:06,690 Men med flottører du vil å maksimere størrelsen, 1627 01:14:06,690 --> 01:14:10,530 og du vil være i stand til å representere store tall og svært små tall som 1628 01:14:10,530 --> 01:14:14,210 0.000001 på samme tid. 1629 01:14:14,210 --> 01:14:15,180 Så igjen, samme spillet. 1630 01:14:15,180 --> 01:14:20,470 Er det noen som har noen anelse om hvordan vi kunne gå om å representere flyte i minnet? 1631 01:14:20,470 --> 01:14:26,820 1632 01:14:26,820 --> 01:14:27,970 Bare kaste noe. 1633 01:14:27,970 --> 01:14:29,930 1634 01:14:29,930 --> 01:14:30,856 Ja, takk. 1635 01:14:30,856 --> 01:14:33,552 >> PUBLIKUM: [uhørlig] som Hvis det var to ints og ett 1636 01:14:33,552 --> 01:14:36,890 å være den [uhørbart] og et vesen alt etter desimaltegnet. 1637 01:14:36,890 --> 01:14:37,640 GABRIEL: OK, kult. 1638 01:14:37,640 --> 01:14:40,300 Så to forskjellige heltall. 1639 01:14:40,300 --> 01:14:45,260 Du kan ha 12.45, så det er 12 og 45. 1640 01:14:45,260 --> 01:14:45,890 Nice. 1641 01:14:45,890 --> 01:14:46,973 Hva ere du kommer til å si? 1642 01:14:46,973 --> 01:14:48,420 1643 01:14:48,420 --> 01:14:49,430 Det samme? 1644 01:14:49,430 --> 01:14:49,930 Yeah? 1645 01:14:49,930 --> 01:14:55,630 >> PUBLIKUM: [uhørlig] notasjon hvor du skille basen. 1646 01:14:55,630 --> 01:14:58,910 >> GABRIEL: Vitenskapelig notasjon, ja det er som regel det som skjer. 1647 01:14:58,910 --> 01:15:01,350 Så dette er det som kalles mantissen. 1648 01:15:01,350 --> 01:15:06,490 Det er det som er faktisk nummer, og deretter eksponenten 1649 01:15:06,490 --> 01:15:08,780 er bare der komma er, ikke sant? 1650 01:15:08,780 --> 01:15:13,720 Så dette kommer til å være noe av formen 1, 2, 3, 4, 5 ganger 10 1651 01:15:13,720 --> 01:15:15,000 4 til minus. 1652 01:15:15,000 --> 01:15:17,800 Jeg innså at-- ja, akkurat. 1653 01:15:17,800 --> 01:15:23,372 Og da dette 10 til minus 4 er kommer til å definere hvor komma er, OK? 1654 01:15:23,372 --> 01:15:24,330 I Brasil bruker vi komma. 1655 01:15:24,330 --> 01:15:26,795 Her dere bruke en prikk. 1656 01:15:26,795 --> 01:15:27,640 Så en prikk. 1657 01:15:27,640 --> 01:15:28,860 1658 01:15:28,860 --> 01:15:34,840 >> Og dette er kult, for da kan du fokusere mange av dine biter på denne fyren 1659 01:15:34,840 --> 01:15:40,863 her, på mantisse, og så det er kommer til å være din faktiske presisjon. 1660 01:15:40,863 --> 01:15:41,920 1661 01:15:41,920 --> 01:15:47,175 Og du kan gjøre dette enten i desimal eller i den binære basert system. 1662 01:15:47,175 --> 01:15:49,781 Det finnes forskjellige måter å gjennomføre dette. 1663 01:15:49,781 --> 01:15:50,280 Spørsmål? 1664 01:15:50,280 --> 01:15:55,918 1665 01:15:55,918 --> 01:15:56,418 Ja? 1666 01:15:56,418 --> 01:15:57,508 1667 01:15:57,508 --> 01:15:59,841 PUBLIKUM: Hvor mange steder etter desimal [uhørbart]? 1668 01:15:59,841 --> 01:16:05,240 1669 01:16:05,240 --> 01:16:12,610 >> GABRIEL: Det er et komplisert spørsmål, fordi det er egentlig aldri 100% nøyaktig, 1670 01:16:12,610 --> 01:16:15,680 fordi som du ser her, for noen tall det er 100% nøyaktige. 1671 01:16:15,680 --> 01:16:20,350 Jeg tror at dersom vi setter 0.5 her, det kommer til å være 100% nøyaktige. 1672 01:16:20,350 --> 01:16:22,220 Det kommer til å være 0,500000. 1673 01:16:22,220 --> 01:16:24,170 Så i dette tilfellet, er det perfekt. 1674 01:16:24,170 --> 01:16:27,330 Men i andre tilfeller det er mye mindre perfekt. 1675 01:16:27,330 --> 01:16:35,010 I min erfaring, som opp til fire, fem desimaler er ganske presis. 1676 01:16:35,010 --> 01:16:38,300 Hvis du bruker en dobbel, kommer det til å være langt mer presis enn det, OK? 1677 01:16:38,300 --> 01:16:42,750 >> ROB Bowden: Så bare for å kaste litt mer kontekst på flottører, 1678 01:16:42,750 --> 01:16:46,320 Jeg husker aldri 100% hvordan spec av flyter faktisk fungerer, 1679 01:16:46,320 --> 01:16:52,660 men jeg tror du alltid huske som flyter begynner å få rotete. 1680 01:16:52,660 --> 01:16:55,460 1681 01:16:55,460 --> 01:17:00,930 Så ideen er at når du får veldig, virkelig store tall eller virkelig, virkelig 1682 01:17:00,930 --> 01:17:03,470 små tall, starter vi blir verre og verre 1683 01:17:03,470 --> 01:17:05,860 til å differensiere mellom to nære flyter. 1684 01:17:05,860 --> 01:17:09,180 >> Så hvordan jeg liker å tenke på er med flyttall unøyaktighet, 1685 01:17:09,180 --> 01:17:11,890 er det to flottører som hvis jeg prøver å oppgi dem 1686 01:17:11,890 --> 01:17:15,150 i C, til tross for at de er forskjellige tall, 1687 01:17:15,150 --> 01:17:17,340 de kommer til å være tolkes som samme tall, 1688 01:17:17,340 --> 01:17:19,006 fordi vi kan ikke lagre dem annerledes. 1689 01:17:19,006 --> 01:17:20,540 Vi må bruke de samme bitene. 1690 01:17:20,540 --> 01:17:23,220 Og så når vi kommer til virkelig, virkelig store tall, 1691 01:17:23,220 --> 01:17:28,460 snakker som 10 til 300 eller noe, er det på det punktet 1692 01:17:28,460 --> 01:17:33,240 at 10 til 300 eller 5 ganger 10 til 300 1693 01:17:33,240 --> 01:17:37,020 kan ikke bli differensiert fra 7 ganger 10 til 300. 1694 01:17:37,020 --> 01:17:39,660 Så det er en ganske stor forskjell mellom de to tall. 1695 01:17:39,660 --> 01:17:43,830 >> Men så når du kommer ned til normalområdet ting, 1696 01:17:43,830 --> 01:17:45,770 du har en tendens til å være ganske flinke til å differensiere. 1697 01:17:45,770 --> 01:17:49,020 Og så når du kommer ned veldig liten, du også får ganske dårlig igjen. 1698 01:17:49,020 --> 01:17:52,529 Så ut som en hel haug med 0,0000, det blir ganske ille. 1699 01:17:52,529 --> 01:17:53,820 GABRIEL: Ja, så en rask kommentar. 1700 01:17:53,820 --> 01:17:54,670 Gjør aldri dette. 1701 01:17:54,670 --> 01:17:57,590 Prøv aldri å sammenligne flyter ved hjelp av likemenn er lik, 1702 01:17:57,590 --> 01:18:02,800 fordi selv om de er nesten det samme, nesten det samme er ikke det samme. 1703 01:18:02,800 --> 01:18:06,360 Så det du vanligvis gjør er at du trekker dem, ta den absolutte verdien av det, 1704 01:18:06,360 --> 01:18:12,380 og se om det er mindre enn 0,0001 eller noe sånt, OK? 1705 01:18:12,380 --> 01:18:12,880 Og kjølig. 1706 01:18:12,880 --> 01:18:16,630 Jeg vet at mange mennesker har noe bakgrunn i Java, 1707 01:18:16,630 --> 01:18:19,700 spesielt de som gjorde AP informatikk, ikke sant? 1708 01:18:19,700 --> 01:18:23,630 Og Java er et språk som for det meste basert på C, 1709 01:18:23,630 --> 01:18:26,570 den har et par veldig store forskjeller. 1710 01:18:26,570 --> 01:18:31,430 Men for looper, og IFS, og sånt det, er de alle samme syntaks. 1711 01:18:31,430 --> 01:18:35,240 Jeg har noen programmer her for å vise dette. 1712 01:18:35,240 --> 01:18:37,050 >> Så for eksempel en enkel hello world. 1713 01:18:37,050 --> 01:18:43,140 1714 01:18:43,140 --> 01:18:46,600 Dette er hello world i C, som du gutta er definitivt kjent med, 1715 01:18:46,600 --> 01:18:49,100 og dette, og dette er i Java. 1716 01:18:49,100 --> 01:18:53,100 Så i Java har vi denne public class, hello world, 1717 01:18:53,100 --> 01:18:57,050 og public static void viktigste, og streng args. 1718 01:18:57,050 --> 01:18:59,665 Strengen args går skal vises i C svært kort tid. 1719 01:18:59,665 --> 01:19:00,740 1720 01:19:00,740 --> 01:19:01,990 Men la oss ikke gå dit enda. 1721 01:19:01,990 --> 01:19:06,060 Akkurat nå har vi tomrom her, noe som betyr at hoved er ikke ta noen argumenter. 1722 01:19:06,060 --> 01:19:09,220 Og så har vi System.out.println, er det og at 1723 01:19:09,220 --> 01:19:11,140 slags tilsvarende for printf. 1724 01:19:11,140 --> 01:19:17,150 Her har vi ikke virkelig trenger backslash n fordi print ln gjør det for deg. 1725 01:19:17,150 --> 01:19:19,680 Det føyer backslash n ved enden av linjen. 1726 01:19:19,680 --> 01:19:22,540 1727 01:19:22,540 --> 01:19:30,415 >> Men hvis du går inn noe som en for, du 1728 01:19:30,415 --> 01:19:32,590 kan se at de er ganske mye det samme. 1729 01:19:32,590 --> 01:19:37,390 Så initialisering, og tilstand, og oppdateringen 1730 01:19:37,390 --> 01:19:42,050 er-- jeg savnet en plass her-- de er ganske mye det samme, bortsett fra Java 1731 01:19:42,050 --> 01:19:44,430 har som noen flere høyt nivå ting. 1732 01:19:44,430 --> 01:19:46,010 1733 01:19:46,010 --> 01:19:49,610 Her kan vi gjøre pluss jeg og Java vil automatisk 1734 01:19:49,610 --> 01:19:52,730 gjør dette jeg her, som er et helt tall, til en streng, 1735 01:19:52,730 --> 01:19:55,200 og deretter legge den to strenger sammen. 1736 01:19:55,200 --> 01:19:57,570 Her i C må vi gjøre den &% d. 1737 01:19:57,570 --> 01:20:15,310 1738 01:20:15,310 --> 01:20:18,170 Linjen her, for ser nøyaktig det samme. 1739 01:20:18,170 --> 01:20:37,760 >> Og hvis vi ser på hvis de ifs også ser akkurat det samme, ikke sant? 1740 01:20:37,760 --> 01:20:39,290 1741 01:20:39,290 --> 01:20:44,650 Så den virkelige store forskjellene er i de tingene som du ser her. 1742 01:20:44,650 --> 01:20:47,530 Public static, ugyldig, og Da public class hvis. 1743 01:20:47,530 --> 01:20:48,990 1744 01:20:48,990 --> 01:20:52,360 Så Java har hva som er kalles en virtuell maskin. 1745 01:20:52,360 --> 01:20:53,560 1746 01:20:53,560 --> 01:21:00,150 Og det er veldig tungt basert på hva kalles objektorientert programmering, 1747 01:21:00,150 --> 01:21:04,120 som er en veldig, veldig vanlig paradigme for programmering i dag. 1748 01:21:04,120 --> 01:21:10,870 Og denne klassen ting er det du ser, noe fra objektorientering, 1749 01:21:10,870 --> 01:21:14,214 er du oppretter en klasse og deretter kan utlede fra den klassen objekter. 1750 01:21:14,214 --> 01:21:16,380 Vi kommer ikke til å snakke for mye om det i CS50, 1751 01:21:16,380 --> 01:21:18,213 men det er definitivt noe kult, 1752 01:21:18,213 --> 01:21:21,440 spesielt hvis du ønsker å gå inn mer sofistikert webutvikling 1753 01:21:21,440 --> 01:21:24,050 på slutten av kurset, som sender inn det endelige prosjektet 1754 01:21:24,050 --> 01:21:26,430 og noen fine rammer og sånt. 1755 01:21:26,430 --> 01:21:31,250 >> Så i utgangspunktet ideen er at du ønsker ikke å re-implementere noe, 1756 01:21:31,250 --> 01:21:36,330 så du skape noe som er svært generisk, som form, 1757 01:21:36,330 --> 01:21:38,310 og deretter oppretter ulike former fra det, 1758 01:21:38,310 --> 01:21:40,240 og deretter fra hver av disse formene, oppretter du 1759 01:21:40,240 --> 01:21:45,110 noen mer spesifikke former i tre dimensjoner eller noe sånt. 1760 01:21:45,110 --> 01:21:48,799 Og de har dette hierarkiet de arve fra de andre, så 1761 01:21:48,799 --> 01:21:51,840 alle funksjoner og variabler som spiller den store formen her har, alle disse 1762 01:21:51,840 --> 01:21:54,110 kommer til å ha, og alle disse er skal ha, og så videre og så videre. 1763 01:21:54,110 --> 01:21:55,640 Så det er den grunnleggende ideen. 1764 01:21:55,640 --> 01:21:59,170 >> Har C ikke det, men C ++ har den slags funksjon. 1765 01:21:59,170 --> 01:22:02,710 Og Java er sterkt påvirket av objektorientering, 1766 01:22:02,710 --> 01:22:05,310 så det er derfor du ser klasse her hele tiden. 1767 01:22:05,310 --> 01:22:10,790 Og den andre tingen er Dette Java virtuell maskin. 1768 01:22:10,790 --> 01:22:13,790 Så dette, tror jeg, er en veldig smart idé. 1769 01:22:13,790 --> 01:22:17,020 Så hva folk som oppfunnet java gjorde er 1770 01:22:17,020 --> 01:22:19,630 de ønsker ikke å kompilere koden sin to ganger 1771 01:22:19,630 --> 01:22:23,990 hvis de måtte kjøre den i et Windows, eller en Mac eller Linux, så hva de gjør 1772 01:22:23,990 --> 01:22:26,740 er de bokstavelig talt kjøre noe sånt apparatet, 1773 01:22:26,740 --> 01:22:29,630 men du forstår ikke helt se at det skjer. 1774 01:22:29,630 --> 01:22:32,430 Så de kjører en virtuell maskin innsiden av datamaskinen, noe som 1775 01:22:32,430 --> 01:22:34,940 er i utgangspunktet som en mini operativsystem. 1776 01:22:34,940 --> 01:22:37,920 Og at drifts systemets formål i livet 1777 01:22:37,920 --> 01:22:41,430 er bare å kjøre det som kalles byte kode. 1778 01:22:41,430 --> 01:22:47,411 >> Så i stedet for i C, måten vi ville kompilere dette er at hvis, og deretter kjøre 1779 01:22:47,411 --> 01:22:47,910 ./if. 1780 01:22:47,910 --> 01:22:53,510 1781 01:22:53,510 --> 01:22:55,290 Jeg glemte backslash i. 1782 01:22:55,290 --> 01:23:00,240 I Java, ville du gjøre først Java C for å kompilere den, if.c. 1783 01:23:00,240 --> 01:23:06,440 1784 01:23:06,440 --> 01:23:08,252 Det er ikke C. Det er dot java. 1785 01:23:08,252 --> 01:23:09,460 1786 01:23:09,460 --> 01:23:12,140 Og så må man kjøre ikke ./. 1787 01:23:12,140 --> 01:23:15,440 Du får denne nye filen if.class, men du kan egentlig ikke 1788 01:23:15,440 --> 01:23:17,980 kjøre if.class nå bare som vi gjorde før. 1789 01:23:17,980 --> 01:23:19,440 Dette er ikke en kjørbar. 1790 01:23:19,440 --> 01:23:20,630 Du må løpe. 1791 01:23:20,630 --> 01:23:23,410 Du må mate den inn et program som heter Java, 1792 01:23:23,410 --> 01:23:28,260 og at programmet er den virtuelle maskinen, og deretter du gjør if.class, eller hvis. 1793 01:23:28,260 --> 01:23:28,760 Ja. 1794 01:23:28,760 --> 01:23:30,890 Og så fungerer det. 1795 01:23:30,890 --> 01:23:33,740 OK, så dette er slags virtuell maskin skjer. 1796 01:23:33,740 --> 01:23:37,700 Har ikke C det, så hvis jeg skulle sette dette programmet i en Windows-maskin, 1797 01:23:37,700 --> 01:23:40,516 det ville ikke fungere i C. I Java den gjør. 1798 01:23:40,516 --> 01:23:41,015 Spørsmål? 1799 01:23:41,015 --> 01:23:43,430 1800 01:23:43,430 --> 01:23:44,030 Cool. 1801 01:23:44,030 --> 01:23:47,160 Det er hvis for super-delen for i dag. 1802 01:23:47,160 --> 01:23:49,462