1 00:00:07,210 --> 00:00:10,250 [Powered by Google Translate] I denne videoen vil vi diskutere kode stil, som er noe 2 00:00:10,250 --> 00:00:12,240 som er nære og kjære til mitt hjerte. 3 00:00:12,240 --> 00:00:15,190 Stil beskriver hvordan koden er formatert, som er 4 00:00:15,190 --> 00:00:18,030 uavhengig av hva koden faktisk gjør. 5 00:00:18,030 --> 00:00:21,470 Ikke bare vil god stil får du en bedre karakter i CS50, 6 00:00:21,470 --> 00:00:23,830 men det vil også hjelpe deg med å skrive kode som er mye mer 7 00:00:23,830 --> 00:00:26,680 lesbart og vedlikeholdsvennlig, som på slutten av dagen, 8 00:00:26,680 --> 00:00:29,200 kommer til å gjøre livet mye enklere. 9 00:00:29,200 --> 00:00:31,810 >> De tre viktigste komponentene i koden stil som vi vil diskutere 10 00:00:31,810 --> 00:00:34,500 denne videoen er kommentarer, formatering, 11 00:00:34,500 --> 00:00:35,750 og variabel navn. 12 00:00:35,750 --> 00:00:37,350 La oss starte med kommentarer. 13 00:00:37,350 --> 00:00:40,020 Husk kommentarene har ingen effekt på 14 00:00:40,020 --> 00:00:41,770 funksjonalitet av koden din. 15 00:00:41,770 --> 00:00:45,650 De bare tjene som nyttige tips til oss som programmerere. 16 00:00:45,650 --> 00:00:48,680 Gode ​​kommentarer bør svare på ett av to spørsmål. 17 00:00:48,680 --> 00:00:52,140 >> Først, hva denne blokken med kode gjør? 18 00:00:52,140 --> 00:00:54,890 Dette er en kort og konsis beskrivelse av hensikten med 19 00:00:54,890 --> 00:00:56,500 linjene som følger. 20 00:00:56,500 --> 00:00:59,330 For eksempel må du kanskje finne stedet hvor du 21 00:00:59,330 --> 00:01:01,450 implementert en bestemt funksjon for å fikse en 22 00:01:01,450 --> 00:01:02,990 bug eller endre noe. 23 00:01:02,990 --> 00:01:06,060 Uten kommentarer, må du kanskje pore over mange linjer 24 00:01:06,060 --> 00:01:09,550 kode prøver å finne ut nøyaktig hvor denne funksjonen er. 25 00:01:09,550 --> 00:01:11,990 Eller hvis det har vært et par dager siden du har sett på en av 26 00:01:11,990 --> 00:01:14,820 programmene, kan du ikke huske hva en bestemt 27 00:01:14,820 --> 00:01:16,580 funksjon eller sløyfe gjør. 28 00:01:16,580 --> 00:01:18,840 Så kommentarer vil gjøre reacquainting selv med 29 00:01:18,840 --> 00:01:21,530 gamle koden, eller acquainting deg selv med en annens 30 00:01:21,530 --> 00:01:23,700 kode, mye jevnere. 31 00:01:23,700 --> 00:01:26,640 Det andre spørsmålet en god kommentar svar er hvorfor jeg 32 00:01:26,640 --> 00:01:29,100 implementere denne blokken på denne måten? 33 00:01:29,100 --> 00:01:30,960 Som du skriver kode, vil du ofte trenger 34 00:01:30,960 --> 00:01:32,650 å ta raske beslutninger. 35 00:01:32,650 --> 00:01:35,210 Bør jeg bruke en stund løkke eller en for loop her? 36 00:01:35,210 --> 00:01:38,080 Bør jeg gjøre denne blokken med kode i en egen funksjon? 37 00:01:38,080 --> 00:01:40,650 Ved hjelp av kommentarer, kan du dokumentere din design 38 00:01:40,650 --> 00:01:43,650 beslutninger, som vil gjøre koden lettere å forstå 39 00:01:43,650 --> 00:01:46,390 for andre, som kanskje spørre seg selv nøyaktig samme 40 00:01:46,390 --> 00:01:48,690 utforming spørsmål mens de leser koden. 41 00:01:48,690 --> 00:01:51,430 Eller deg selv, hvis du kommer tilbake til en blokk med kode etter 42 00:01:51,430 --> 00:01:53,200 viss periode. 43 00:01:53,200 --> 00:01:56,110 >> I C, og de andre språkene vi ser i CS50, er 44 00:01:56,110 --> 00:01:59,660 to måter å legge til kommentarer i koden, in-line kommentarer 45 00:01:59,660 --> 00:02:01,970 og flere linjer kommentarer. 46 00:02:01,970 --> 00:02:05,300 In-line kommentarer er stor for å dokumentere deler av koden 47 00:02:05,300 --> 00:02:06,680 innenfor funksjoner. 48 00:02:06,680 --> 00:02:09,250 For eksempel, kan en in-line kommentar beskrive 49 00:02:09,250 --> 00:02:12,680 Formålet med en for løkke eller et hjørne sak som nødvendiggjør 50 00:02:12,680 --> 00:02:14,030 en betingelse. 51 00:02:14,030 --> 00:02:17,450 Multi-line kommentarer er stor for å dokumentere funksjoner. 52 00:02:17,450 --> 00:02:19,830 Når du skriver en funksjon, bør du alltid, alltid, 53 00:02:19,830 --> 00:02:23,190 alltid dokumentere hva det gjør med en kommentar. 54 00:02:23,190 --> 00:02:25,980 Dette inkluderer det innganger til funksjonen er, hva de 55 00:02:25,980 --> 00:02:28,740 utgang av funksjonen er, og kanskje derfor funksjonen er 56 00:02:28,740 --> 00:02:31,100 implementert på den måten som det er. 57 00:02:31,100 --> 00:02:33,540 Når du endrer en funksjon underskrift, tilbake 58 00:02:33,540 --> 00:02:36,840 verdi, eller gjennomføring, er det viktig å også oppdatere 59 00:02:36,840 --> 00:02:39,420 tilsvarende dokumentasjon kommentar. 60 00:02:39,420 --> 00:02:41,650 En mismatch mellom en funksjons kommentar og 61 00:02:41,650 --> 00:02:45,360 gjennomføring kan være veldig forvirrende for leserne. 62 00:02:45,360 --> 00:02:48,670 Tilsvarende, og skaper en flerlinjet kommentar øverst 63 00:02:48,670 --> 00:02:52,180 av hver. c eller. h fil du skriver, beskrive hva 64 00:02:52,180 --> 00:02:55,090 Filen er også en veldig god idé. 65 00:02:55,090 --> 00:02:58,000 >> Som du kommenterer koden, en av de første spørsmålene du 66 00:02:58,000 --> 00:03:01,800 kan ha er, vel, hvor mye skal jeg kommentere min kode? 67 00:03:01,800 --> 00:03:04,260 Det er ofte unødvendig å dokumentere hver 68 00:03:04,260 --> 00:03:06,040 eneste linje med kode. 69 00:03:06,040 --> 00:03:09,850 For eksempel, en linje som sier int x = 5 trenger ikke en 70 00:03:09,850 --> 00:03:13,110 kommentere om det som sier "satt x to 5". 71 00:03:13,110 --> 00:03:16,260 Ikke kommenterer nok, men som vi har sett, kan gjøre 72 00:03:16,260 --> 00:03:18,840 forstå koden svært vanskelig. 73 00:03:18,840 --> 00:03:21,860 Så en god tommelfingerregel er å kommentere interessante blokker av 74 00:03:21,860 --> 00:03:25,700 kode, hvor en blokk består av et fåtall relaterte linjer. 75 00:03:25,700 --> 00:03:27,610 >> Så la oss ta en titt på et eksempel. 76 00:03:27,610 --> 00:03:29,695 Her er en uncommented C funksjonen. 77 00:03:32,670 --> 00:03:36,070 Ok, siden dette er en funksjon, er det første vi må legge 78 00:03:36,070 --> 00:03:38,560 er en kommentar som forklarer hva funksjonens innganger 79 00:03:38,560 --> 00:03:40,440 er og hva den gjør. 80 00:03:40,440 --> 00:03:43,800 Så la oss legge til et multi-line kommentar. 81 00:03:43,800 --> 00:03:44,500 Flott. 82 00:03:44,500 --> 00:03:47,220 Nå vet vi nøyaktig hva vår funksjon gjør. 83 00:03:47,220 --> 00:03:49,530 La oss legge til noen in-line kommentarer nå. 84 00:03:49,530 --> 00:03:53,260 Vi kan dele vår kode i to blokker av samme linjer. 85 00:03:53,260 --> 00:03:56,850 Linje 4 og 5 Konstruer strenger basert på innspill og 86 00:03:56,850 --> 00:03:58,690 linje 6 til 9 utgang disse 87 00:03:58,690 --> 00:04:00,660 strenger i sangtekster. 88 00:04:00,660 --> 00:04:03,860 Så la oss dokumentere at med kommentarer. 89 00:04:03,860 --> 00:04:04,470 Awesome. 90 00:04:04,470 --> 00:04:06,440 Nå vår funksjon er kommentert. 91 00:04:06,440 --> 00:04:09,270 >> Legg merke til at våre in-line kommentarer ikke trenger å bruke hele 92 00:04:09,270 --> 00:04:11,270 setninger eller avslutte med en periode. 93 00:04:11,270 --> 00:04:14,780 Det er viktig at det er et mellomrom mellom andre skråstrek 94 00:04:14,780 --> 00:04:16,680 og starten av kommentaren. 95 00:04:16,680 --> 00:04:19,010 Dette er frekvensen av kommentarer i programmene dine 96 00:04:19,010 --> 00:04:21,810 at du bør skyte for. 97 00:04:21,810 --> 00:04:25,180 Legg merke her hvordan vi skilt de to blokkene av relatert kode 98 00:04:25,180 --> 00:04:28,560 Innsiden av våre kor funksjon med en ekstra linjeskift. 99 00:04:28,560 --> 00:04:31,260 >> Dette bringer oss til neste del av koden stil, 100 00:04:31,260 --> 00:04:32,350 formatering. 101 00:04:32,350 --> 00:04:34,410 Da jeg først begynte programmering, traff jeg på Enter 102 00:04:34,410 --> 00:04:37,970 nøkkel svært sjelden, resulterte som gigantiske, uleselig 103 00:04:37,970 --> 00:04:39,250 blobs av koden. 104 00:04:39,250 --> 00:04:41,890 Jeg tror jeg faktisk fornærmet min undervisning kar, siden hun 105 00:04:41,890 --> 00:04:43,610 var ikke så fornøyd med meg. 106 00:04:43,610 --> 00:04:46,620 Visuelt gruppering blokker av relaterte kode, ved hjelp av vogn 107 00:04:46,620 --> 00:04:50,310 avkastning, kan gjøre koden enklere å skumme og tydelig 108 00:04:50,310 --> 00:04:54,020 avgrense hvilke linjer med kode kommentarene dine forklare. 109 00:04:54,020 --> 00:04:57,100 Som blir sagt, spre ut din kode for mye, som med 110 00:04:57,100 --> 00:05:00,020 to eller flere linjer mellom kodeblokker eller funksjoner, kan 111 00:05:00,020 --> 00:05:02,470 også gjøre det mye mindre lesbar. 112 00:05:02,470 --> 00:05:04,230 >> Innrykk er en annen viktig 113 00:05:04,230 --> 00:05:06,150 aspekt av kode format. 114 00:05:06,150 --> 00:05:09,410 Alltid, alltid, alltid rykke i kroppen til en funksjon, loop, 115 00:05:09,410 --> 00:05:10,620 eller tilstand. 116 00:05:10,620 --> 00:05:13,410 Dette gjør det klart hvilke linjer med kode er inne i en 117 00:05:13,410 --> 00:05:15,650 løkke, for eksempel, og hvilke linjer med kode 118 00:05:15,650 --> 00:05:17,980 er utenfor det. 119 00:05:17,980 --> 00:05:21,290 CS50 anbefaler at du innrykk med fire plasser, men 120 00:05:21,290 --> 00:05:24,040 hvis du velger noe annet, må du være konsekvent 121 00:05:24,040 --> 00:05:25,550 hele koden din. 122 00:05:25,550 --> 00:05:28,640 På dette notatet, anbefaler CS50 at du plasserer bukseseler 123 00:05:28,640 --> 00:05:30,100 på sin egen linje. 124 00:05:30,100 --> 00:05:32,930 På den måten vil bukseseler stille opp visuelt på samme venstre 125 00:05:32,930 --> 00:05:37,200 margin, så det er krystallklart hvor en blokk begynner og slutter. 126 00:05:37,200 --> 00:05:40,760 Men det er også greit å plassere bukseseler på samme linje som en 127 00:05:40,760 --> 00:05:43,910 tilstand, for eksempel for å spare plass. 128 00:05:43,910 --> 00:05:46,720 Hvis du gjør dette, men husk å ta en plass 129 00:05:46,720 --> 00:05:50,200 før den krøllete brace så det er ikke smooshed ved siden av en avsluttende 130 00:05:50,200 --> 00:05:51,780 paren eller et ord. 131 00:05:51,780 --> 00:05:54,370 >> Uansett hvilken du velger, er det viktigste å være 132 00:05:54,370 --> 00:05:57,130 konsekvent gjennom koden din. 133 00:05:57,130 --> 00:05:58,700 Hva vi ikke ønsker å se, selv om det er 134 00:05:58,700 --> 00:06:00,680 innrykket klammeparentes. 135 00:06:00,680 --> 00:06:03,120 Gjør du det gjør klammeparentesene vises koblet fra 136 00:06:03,120 --> 00:06:06,100 tilstand, loop, eller funksjon de demarcating, noe som gjør 137 00:06:06,100 --> 00:06:08,150 koden vanskelig å lese. 138 00:06:08,150 --> 00:06:11,190 I C og andre språk vil vi se, klammeparentes er 139 00:06:11,190 --> 00:06:14,150 valgfritt for enslige linjeforholdene eller løkker. 140 00:06:14,150 --> 00:06:16,790 Det er greit å utelate klammeparentes i dette tilfellet, men hvis 141 00:06:16,790 --> 00:06:19,200 du gjør det, sørg for å være konsekvent 142 00:06:19,200 --> 00:06:21,350 hele koden din. 143 00:06:21,350 --> 00:06:24,280 >> Når du definerer funksjoner, anbefaler CS50 du skriver 144 00:06:24,280 --> 00:06:27,440 returnere type funksjon på samme linje som navnet 145 00:06:27,440 --> 00:06:28,930 funksjonen. 146 00:06:28,930 --> 00:06:31,900 Men det er også OK å skrive returtypen på egen hånd 147 00:06:31,900 --> 00:06:35,160 linje, som kan gjøre funksjonsdefinisjoner lettere å finne i 148 00:06:35,160 --> 00:06:36,880 noen tekstredigeringsprogrammer. 149 00:06:36,880 --> 00:06:39,550 >> Til slutt, sørg for å inkludere områder rundt 150 00:06:39,550 --> 00:06:41,330 søkeord og operatører. 151 00:06:41,330 --> 00:06:45,580 For eksempel, en linje som sier int x = 5 er mye lettere å 152 00:06:45,580 --> 00:06:48,590 lese hvis det er mellomrom rundt likhetstegnet. 153 00:06:48,590 --> 00:06:52,070 Tilsvarende må du ha et mellomrom etter søkeord som om, 154 00:06:52,070 --> 00:06:53,460 for, og mens. 155 00:06:53,460 --> 00:06:56,270 Uten en plass, kan disse se ut som funksjonskall, 156 00:06:56,270 --> 00:06:57,850 som de ikke er. 157 00:06:57,850 --> 00:07:00,600 >> Så la oss ta en titt på et eksempel på bruk av god stil 158 00:07:00,600 --> 00:07:02,760 til en feilformatert blokk med kode. 159 00:07:08,260 --> 00:07:10,660 Ok, la oss starte fra toppen. 160 00:07:10,660 --> 00:07:13,670 Vi kan se at åpningen spenne av main er på samme 161 00:07:13,670 --> 00:07:15,900 linje som funksjonens navn. 162 00:07:15,900 --> 00:07:18,700 Hvis vi skal gjøre dette, må det være et mellomrom mellom 163 00:07:18,700 --> 00:07:22,020 den avsluttende paren og spenne, som dette. 164 00:07:22,020 --> 00:07:24,960 Men anbefaler CS50 at bukseseler stå 165 00:07:24,960 --> 00:07:26,080 på sin egen linje. 166 00:07:26,080 --> 00:07:28,500 Så la oss gjøre det. 167 00:07:28,500 --> 00:07:30,830 Nå som vi er i kroppen av den viktigste funksjonen, må vi 168 00:07:30,830 --> 00:07:33,070 å starte innrykk kode, vil vi bruke 169 00:07:33,070 --> 00:07:34,500 anbefales fire mellomrom. 170 00:07:45,980 --> 00:07:48,990 Deretter ser vi at det ikke er plass rundt likhetstegnet 171 00:07:48,990 --> 00:07:50,510 her, så la oss legge til at. 172 00:07:53,270 --> 00:07:56,420 Her ser vi at det ikke er noe mellomrom mellom hvis og 173 00:07:56,420 --> 00:07:59,740 åpen paren, så la oss legge til at, sammen med litt plass rundt 174 00:07:59,740 --> 00:08:01,710 større enn-tegn. 175 00:08:01,710 --> 00:08:04,750 Igjen ser vi det ikke er plass mellom den avsluttende parentes og 176 00:08:04,750 --> 00:08:06,430 åpningen spenne her. 177 00:08:06,430 --> 00:08:08,970 Hvis vi kommer til å sette disse på samme linje, det må 178 00:08:08,970 --> 00:08:11,630 være et mellomrom før krøllete brace. 179 00:08:11,630 --> 00:08:13,540 Imidlertid ser det ut til at kroppen vår 180 00:08:13,540 --> 00:08:15,220 tilstand er bare en linje. 181 00:08:15,220 --> 00:08:18,300 Slik at vi ikke trenger å ta med klammene i det hele tatt. 182 00:08:18,300 --> 00:08:21,200 Vi trenger nå å være sikker på å rykke på kroppen hver av 183 00:08:21,200 --> 00:08:24,340 våre forhold. 184 00:08:24,340 --> 00:08:27,080 Vi definitivt ikke ønsker dette siste linjen til å være på samme 185 00:08:27,080 --> 00:08:30,860 linje som andre, så la oss hit Enter og innrykk. 186 00:08:30,860 --> 00:08:34,250 Til slutt, til den avsluttende curly brace for viktigste behovene være på 187 00:08:34,250 --> 00:08:35,760 en egen linje. 188 00:08:35,760 --> 00:08:38,049 >> Vi kan se her har vi to forskjellige 189 00:08:38,049 --> 00:08:40,000 blokker av relaterte kode. 190 00:08:40,000 --> 00:08:43,070 Linjene 4 til 6 be brukeren om innspill og 191 00:08:43,070 --> 00:08:45,990 gjenværende linjer viser at input til brukeren. 192 00:08:45,990 --> 00:08:49,230 Så det er fornuftig å sette noen plass mellom disse to blokkene 193 00:08:49,230 --> 00:08:50,440 for klarhet. 194 00:08:50,440 --> 00:08:54,020 Og der vi går, nå denne koden er mye lettere å lese med 195 00:08:54,020 --> 00:08:56,010 god stil. 196 00:08:56,010 --> 00:08:59,430 >> Til slutt, la oss snakke om vår tredje del av god stil: 197 00:08:59,430 --> 00:09:00,880 variabelnavn. 198 00:09:00,880 --> 00:09:02,660 Dine variabelnavn skal beskrive 199 00:09:02,660 --> 00:09:04,730 verdi som de representerer. 200 00:09:04,730 --> 00:09:07,150 La oss se våre tidligere eksempel. 201 00:09:07,150 --> 00:09:10,470 Flasker er et beskrivende navn for variabelen som 202 00:09:10,470 --> 00:09:13,680 representerer hvor mange flasker som er igjen på veggen. 203 00:09:13,680 --> 00:09:21,010 Navn som x eller numBots er ikke veldig beskrivende og er 204 00:09:21,010 --> 00:09:24,020 ikke bra for lesbarheten av koden din. 205 00:09:24,020 --> 00:09:26,860 Mens variabler navngitt av en enkelt bokstav er vanlig i 206 00:09:26,860 --> 00:09:30,100 matematikk og andre felt, kan de gjøre koden veldig hardt 207 00:09:30,100 --> 00:09:31,380 å forstå. 208 00:09:31,380 --> 00:09:33,660 Unntaket fra denne regelen er iterator 209 00:09:33,660 --> 00:09:35,800 variabler inne i løkker. 210 00:09:35,800 --> 00:09:38,260 I for looper, for eksempel, er det greit å bruke variabel 211 00:09:38,260 --> 00:09:42,100 navn som i, j, og k for gjentakelse. 212 00:09:42,100 --> 00:09:44,900 Når du oppretter iterator variabler innenfor looper, er det 213 00:09:44,900 --> 00:09:48,200 anbefales det at du gjør dette innen sløyfen selv, heller 214 00:09:48,200 --> 00:09:51,150 enn utenfor loopen, slik at vi kan holde variabler som 215 00:09:51,150 --> 00:09:53,860 tett scoped som mulig. 216 00:09:53,860 --> 00:10:02,660 >> På den annen side, en variabel navn som antall flasker 217 00:10:02,660 --> 00:10:10,710 igjen på veggen er, mens beskrivende, altfor ordrik 218 00:10:10,710 --> 00:10:12,780 og ikke nødvendig. 219 00:10:12,780 --> 00:10:15,150 I tilfelle vil du opprette en variabel med 220 00:10:15,150 --> 00:10:18,990 flere ord, skiller disse ordene med understrek. 221 00:10:18,990 --> 00:10:28,920 For eksempel er is_ready mye mer lesbart enn isReady. 222 00:10:28,920 --> 00:10:32,240 Det er greit å erklære flere variabler på samme linje. 223 00:10:32,240 --> 00:10:36,350 Men hvis du gjør det, ikke initialisere noen variabler, men 224 00:10:36,350 --> 00:10:37,610 ikke andre. 225 00:10:37,610 --> 00:10:45,840 Det betyr noe sånt som int dimes, pennies 226 00:10:45,840 --> 00:10:48,080 semikolon, er OK. 227 00:10:48,080 --> 00:10:57,610 Men int dimes = 0, pennies 228 00:10:57,610 --> 00:11:00,120 semikolon er det ikke. 229 00:11:00,120 --> 00:11:02,830 >> Til slutt, når erklære pekere, anbefales det 230 00:11:02,830 --> 00:11:06,430 at du plasserer stjerne ved siden av pekeren er typen, ikke 231 00:11:06,430 --> 00:11:07,990 navnet på variabelen. 232 00:11:07,990 --> 00:11:16,050 Så int * p anbefales fremfor int 233 00:11:16,050 --> 00:11:19,730 plass * p. 234 00:11:19,730 --> 00:11:20,400 Whoo! 235 00:11:20,400 --> 00:11:21,800 Så det virker som mange regler til 236 00:11:21,800 --> 00:11:23,440 huske, men ikke bekymre deg. 237 00:11:23,440 --> 00:11:26,540 Hvis noen gang i tvil, ikke nøl med å henvise til CS50 er 238 00:11:26,540 --> 00:11:28,450 online stil guide. 239 00:11:28,450 --> 00:11:30,100 >> La oss raskt oppsummere de viktige 240 00:11:30,100 --> 00:11:31,510 poeng med kode-stil. 241 00:11:31,510 --> 00:11:33,960 Først kommentere koden din. 242 00:11:33,960 --> 00:11:36,570 Alltid, alltid, alltid beskrive hvilke funksjoner gjør 243 00:11:36,570 --> 00:11:39,530 med en multi-line kommentar og kommentere noen få linjer av 244 00:11:39,530 --> 00:11:41,280 kode in-line. 245 00:11:41,280 --> 00:11:42,060 Sekund. 246 00:11:42,060 --> 00:11:44,560 Være i samsvar med koden formatering. 247 00:11:44,560 --> 00:11:47,800 Ta hensyn til plassering og bruk av bukseseler 248 00:11:47,800 --> 00:11:51,370 samt avstand rundt søkeord og operatører. 249 00:11:51,370 --> 00:11:54,440 Til slutt velger beskrivende variabelnavn. 250 00:11:54,440 --> 00:11:57,600 Variabler skal beskrive verdien de representerer, men 251 00:11:57,600 --> 00:11:59,680 bør ikke ta deg for alltid å skrive. 252 00:11:59,680 --> 00:12:00,790 >> Og det er det. 253 00:12:00,790 --> 00:12:03,080 Alt dette vil raskt bli andre naturen som du 254 00:12:03,080 --> 00:12:05,030 skrive mer og mer kode, og du vil bli koding 255 00:12:05,030 --> 00:12:06,690 med stil på et blunk. 256 00:12:06,690 --> 00:12:09,710 Mitt navn er Tommy, og dette er CS50.