1 00:00:00,000 --> 00:00:05,410 2 00:00:05,410 --> 00:00:07,640 >> DOUG LLOYD: Okay, så lad os tale om sløjfer. 3 00:00:07,640 --> 00:00:10,015 Så loops er slags cool fordi de tillader dit program 4 00:00:10,015 --> 00:00:12,050 at udføre linjer kode igen og igen og igen. 5 00:00:12,050 --> 00:00:15,600 Gentagne gange, uden at skulle kopiere og indsæt eller på anden måde gentage dem. 6 00:00:15,600 --> 00:00:17,630 Der er tre store former for løkker, du vil se. 7 00:00:17,630 --> 00:00:21,010 Du vil sandsynligvis have lejlighed til at bruge hver enkelt som du fremskridt gennem CS50. 8 00:00:21,010 --> 00:00:22,940 Nogle af disse sløjfer er temmelig velkendt for dig fra bunden, 9 00:00:22,940 --> 00:00:25,814 så igen, som vi gjorde med betingede, vi vil sætte dem op ved siden af ​​hinanden 10 00:00:25,814 --> 00:00:28,930 hvis der er en analogi, vi kan tegne. 11 00:00:28,930 --> 00:00:33,600 >> Først er for evigt fra bunden, der sammenlignes med, mens (sand). 12 00:00:33,600 --> 00:00:35,390 Dette er, hvad vi kalder en uendelig løkke. 13 00:00:35,390 --> 00:00:38,560 De linjer kode mellem krøllede seler, ligesom puslespilsbrikker 14 00:00:38,560 --> 00:00:41,190 der passer inde i C af evigt blokere, 15 00:00:41,190 --> 00:00:45,290 vil udføre gentagne gange fra top til bund, igen og igen og igen, 16 00:00:45,290 --> 00:00:46,085 evigt. 17 00:00:46,085 --> 00:00:48,710 Efter alt, hvis du husker vores diskussion af Boolske udtryk, 18 00:00:48,710 --> 00:00:51,060 sandt, er altid sandt. 19 00:00:51,060 --> 00:00:53,250 Så hvis vi laver noget, så længe sand 20 00:00:53,250 --> 00:00:58,227 er true-- det virker lidt Silly-- sandt er altid sandt, så det vil altid køre. 21 00:00:58,227 --> 00:01:00,060 Det vil køre for evigt og evigt og altid, indtil vi 22 00:01:00,060 --> 00:01:02,900 finde en måde at bryde ud af det med en pause erklæring, som igen, 23 00:01:02,900 --> 00:01:06,350 vi så for lidt siden vi talte om kontakten. 24 00:01:06,350 --> 00:01:08,725 >> Eller på anden måde bare dræbe vores program, som i øvrigt, 25 00:01:08,725 --> 00:01:11,110 hvis du nogensinde finde dig selv i en Situationen med en uendelig løkke 26 00:01:11,110 --> 00:01:13,484 og du ved ikke, hvordan at stoppe dit program fra at køre. 27 00:01:13,484 --> 00:01:16,527 Bare hit kontrol og C, og der vil dræbe din program for dig. 28 00:01:16,527 --> 00:01:18,360 Men dette er igen kaldes en uendelig løkke. 29 00:01:18,360 --> 00:01:19,818 Det er en løkke, der løber evigt. 30 00:01:19,818 --> 00:01:22,570 31 00:01:22,570 --> 00:01:25,610 Nu, mens loops er ikke altid uendelig, fordi også 32 00:01:25,610 --> 00:01:27,880 vi kan erstatte den booleske ekspression med noget 33 00:01:27,880 --> 00:01:29,867 lidt mere nyttigt end blot sandt. 34 00:01:29,867 --> 00:01:30,950 Så her er et andet eksempel. 35 00:01:30,950 --> 00:01:34,600 Mens nogle boolesk og udtryk og derefter krøllede parenteser. 36 00:01:34,600 --> 00:01:38,310 Det er temmelig meget analog gentage indtil, fra bunden. 37 00:01:38,310 --> 00:01:40,700 Selv i en anden, vil jeg forklare forskellen. 38 00:01:40,700 --> 00:01:44,310 >> Så i C, hvis Boolsk udtryk indersiden af ​​while-løkke 39 00:01:44,310 --> 00:01:47,980 evaluerer til sand, i retning af kode mellem de krøllede parenteser 40 00:01:47,980 --> 00:01:51,900 vil udføre gentagne gange over og over og igen, indtil Boolsk udtryk 41 00:01:51,900 --> 00:01:55,174 evalueres til falsk. 42 00:01:55,174 --> 00:01:57,340 Så for eksempel kan du har en slags tæller. 43 00:01:57,340 --> 00:02:01,440 Så siger du i starten af denne løkke sige int x er lig med nul. 44 00:02:01,440 --> 00:02:06,370 Mens x er mindre end 100, skal du gøre et par ting inde at krøllede parenteser, 45 00:02:06,370 --> 00:02:10,570 så i slutningen af ​​din løkke, siger du x plus plus, er du forøge x. 46 00:02:10,570 --> 00:02:13,360 Til sidst x får til 100, og du vil 47 00:02:13,360 --> 00:02:15,760 stopper fordi betingelsen x er mindre end 100 48 00:02:15,760 --> 00:02:19,416 vil ikke længere være sandt som snart x er lig med 100. 49 00:02:19,416 --> 00:02:21,820 100 ikke er mindre end 100. 50 00:02:21,820 --> 00:02:25,870 >> Nu noget forvirrende, adfærd af bunden blokken er vendt. 51 00:02:25,870 --> 00:02:29,110 Så være virkelig forsigtig, hvis dette er din første strejftog i at bruge sløjfer. 52 00:02:29,110 --> 00:02:33,630 Dybest set, gentagelse indtil blok i Scratch 53 00:02:33,630 --> 00:02:35,970 vil gentage noget igen og igen og igen, 54 00:02:35,970 --> 00:02:40,460 indtil udtrykket, den booleske udtryk i sekskant er sandt. 55 00:02:40,460 --> 00:02:43,860 Så det vil holde gør det, indtil det er sandt. 56 00:02:43,860 --> 00:02:48,881 I mellemtiden, mens sløjfen fortsætte med at gøre det, indtil det er falsk. 57 00:02:48,881 --> 00:02:51,630 Så de er helt ens, men der er den lille forskel bare 58 00:02:51,630 --> 00:02:55,140 at være forsigtig med, især som du gør din første strejftog fra overgangen 59 00:02:55,140 --> 00:02:58,149 at ridse i c. 60 00:02:58,149 --> 00:03:00,190 Den næste slags løkke er faktisk temmelig ens. 61 00:03:00,190 --> 00:03:02,860 Det hedder gøre, mens løkken. 62 00:03:02,860 --> 00:03:07,060 Denne løkke vil udføre alle linjer kode mellem de krøllede parenteser én gang, 63 00:03:07,060 --> 00:03:09,530 og så vil det kontrollere den boolsk udtryk. 64 00:03:09,530 --> 00:03:11,700 Hvis Boolsk udtryk evalueres til sand, 65 00:03:11,700 --> 00:03:14,340 Det vil gå tilbage og gentage denne proces igen og igen 66 00:03:14,340 --> 00:03:17,690 og igen, indtil den booleske udtryk evalueres til falsk. 67 00:03:17,690 --> 00:03:23,370 Så denne løkke, i modsætning til en while-løkke, er garanteret at køre mindst én gang. 68 00:03:23,370 --> 00:03:26,080 Dette kan være temmelig nyttig. 69 00:03:26,080 --> 00:03:28,011 >> Endelig har vi en for-løkke. 70 00:03:28,011 --> 00:03:30,010 For loops er slags syntaktisk utiltrækkende 71 00:03:30,010 --> 00:03:32,330 og der er en masse i gang på her, så bær over med mig 72 00:03:32,330 --> 00:03:34,640 som vi forsøger og bryde disse stykker fra hinanden. 73 00:03:34,640 --> 00:03:36,810 Generelt brugstilfældet af en for-løkke er dig 74 00:03:36,810 --> 00:03:40,136 ønsker at gentage noget bestemt antal gange. 75 00:03:40,136 --> 00:03:42,010 I dette eksempel her, Jeg har den gentage blok 76 00:03:42,010 --> 00:03:44,010 fra bunden, hvilket er analog til for-løkken 77 00:03:44,010 --> 00:03:47,340 i C, gentage noget 10 gange. 78 00:03:47,340 --> 00:03:49,250 Og for-løkken om venstre der, som 79 00:03:49,250 --> 00:03:51,410 er en fire løkke, ville gøre det samme. 80 00:03:51,410 --> 00:03:52,570 Dette ville gå 10 gange. 81 00:03:52,570 --> 00:03:56,720 Tælle fra nul, vi tilvækst hvert gennemløb af løkken. 82 00:03:56,720 --> 00:03:59,220 Og vi holde gør, at indtil jeg er mindre end 10. 83 00:03:59,220 --> 00:04:00,134 >> Så hvad sker der? 84 00:04:00,134 --> 00:04:01,550 Der er en hel masse kode der. 85 00:04:01,550 --> 00:04:03,424 Lad os bryde det ned til hvad der sker trin 86 00:04:03,424 --> 00:04:05,684 trin som vi grave gennem en for-løkke. 87 00:04:05,684 --> 00:04:08,350 Det første, der skete, er tællervariablen er centrum. 88 00:04:08,350 --> 00:04:11,970 Alt til venstre for den første semikolon i parentes 89 00:04:11,970 --> 00:04:12,970 udføres. 90 00:04:12,970 --> 00:04:15,180 I dette tilfælde er vi siger int i er lig med 0. 91 00:04:15,180 --> 00:04:18,709 Erklære en ny variabel kaldet i, at variabler er en type heltal 92 00:04:18,709 --> 00:04:22,570 og vi siger værdien inde variablen bliver nul. 93 00:04:22,570 --> 00:04:25,480 >> Den anden ting, vi gør, er vi derefter straks evaluere 94 00:04:25,480 --> 00:04:26,750 den boolsk udtryk. 95 00:04:26,750 --> 00:04:30,100 Boolsk udtryk er i midt mellem de to semikoloner. 96 00:04:30,100 --> 00:04:31,360 I er mindre end 10. 97 00:04:31,360 --> 00:04:32,410 Det er sandt her, ikke? 98 00:04:32,410 --> 00:04:36,030 Vi har lige sagt i er lig med nul, og så 0 er mindre end 10, 99 00:04:36,030 --> 00:04:38,040 og således at betingelsen er sandt, og vi vil nu 100 00:04:38,040 --> 00:04:40,640 Fortsæt at udføre kroppen af ​​løkken. 101 00:04:40,640 --> 00:04:41,480 Hvis det var falske. 102 00:04:41,480 --> 00:04:46,380 Hvis, for eksempel, sagde jeg i stedet for Jeg er lig med 0 der jeg sagde, jeg er lig 15, 103 00:04:46,380 --> 00:04:47,820 int i lig 15. 104 00:04:47,820 --> 00:04:51,450 Nå 15 ikke er mindre end 10, så vi ville aldrig ind i kroppen af ​​løkken 105 00:04:51,450 --> 00:04:55,450 fordi Boolsk udtryk der ville vurdere at være falsk. 106 00:04:55,450 --> 00:04:59,060 >> Efter at vi går igennem fra top til bund, vi støder på, at lukke krøllet tandbøjle, 107 00:04:59,060 --> 00:05:00,830 en tredje ting sker. 108 00:05:00,830 --> 00:05:03,840 Tælleren variabel er øges, eller rettere, linjerne 109 00:05:03,840 --> 00:05:07,790 kode af en erklæring efter andet semikolon indersiden af 110 00:05:07,790 --> 00:05:10,500 efter sløjfer parenteser udføres. 111 00:05:10,500 --> 00:05:13,250 Så vi starter ud ved siger int i er lig med 0. 112 00:05:13,250 --> 00:05:15,770 Så tjekker vi, om den booleske udtryk er sandt. 113 00:05:15,770 --> 00:05:17,469 0 er mindre end 10, så det er sandt. 114 00:05:17,469 --> 00:05:19,510 Så vi kommer til at fortsætte i kroppen løkken. 115 00:05:19,510 --> 00:05:22,676 Ting vil ske inde i løkken, og når vi støder på, at lukning krøllet 116 00:05:22,676 --> 00:05:25,660 tandbøjle, den næste ting, vi gøre, er vi siger jeg plus, plus. 117 00:05:25,660 --> 00:05:28,860 Jeg var nul nu jeg er en. 118 00:05:28,860 --> 00:05:33,100 Derefter har vi igen kontrollere værdien af den boolsk udtryk i midten. 119 00:05:33,100 --> 00:05:34,900 Den ene er mindre end 10. 120 00:05:34,900 --> 00:05:38,325 Så vi vil gå gennem denne behandle igen og igen. 121 00:05:38,325 --> 00:05:40,590 Vi vil komme til lukning krøllet klammeparentes igen. 122 00:05:40,590 --> 00:05:44,090 Vi vil forøge i fra 1 til 2 og fra 2 til 3. 123 00:05:44,090 --> 00:05:48,290 Og så videre og så videre og så videre, indtil sidst jeg værdi bliver 10. 124 00:05:48,290 --> 00:05:49,950 Er 10 mindre end 10? 125 00:05:49,950 --> 00:05:51,200 Nej. 126 00:05:51,200 --> 00:05:53,800 Tælle fra 0, har vi gået gennem 10 iterationer af loop. 127 00:05:53,800 --> 00:05:57,204 Vi har gentaget 10 gange, bare som vi gjorde i Scratch blokken. 128 00:05:57,204 --> 00:05:59,370 Og så det er dybest set den fremgangsmåde til en fire sløjfe. 129 00:05:59,370 --> 00:06:01,630 >> Nu tager væk faktiske kode og sætte det 130 00:06:01,630 --> 00:06:05,120 på bare nogle grundlæggende generelle udsagn. 131 00:06:05,120 --> 00:06:06,550 Her er hvad der sker. 132 00:06:06,550 --> 00:06:09,290 Alle udsagn i starte udføres først. 133 00:06:09,290 --> 00:06:11,260 Du har måske mere end én. 134 00:06:11,260 --> 00:06:13,440 Derefter Boolsk udtryk kontrolleret. 135 00:06:13,440 --> 00:06:17,850 Hvis udtrykket evalueres til sand, udføre kroppen løkken én gang. 136 00:06:17,850 --> 00:06:21,060 Hvis udtrykket evalueres til falsk, vi gjort. 137 00:06:21,060 --> 00:06:23,040 Vi har ikke udføre krop af løkken på alle. 138 00:06:23,040 --> 00:06:25,530 Efter at vi har gennemført den organ løkken én gang, 139 00:06:25,530 --> 00:06:29,487 vi så gør, hvad der er i tilvækst del der. 140 00:06:29,487 --> 00:06:31,820 Som normalt vil være noget som jeg plus, plus 141 00:06:31,820 --> 00:06:34,510 eller sådan noget, at modificerer en tæller variabel. 142 00:06:34,510 --> 00:06:37,390 Så efter vi tilvækst, vi kontrollere ekspressionen igen 143 00:06:37,390 --> 00:06:41,120 og gentag disse trin igen og igen og igen, indtil udtrykket er 144 00:06:41,120 --> 00:06:42,890 ikke længere tilfældet. 145 00:06:42,890 --> 00:06:44,469 >> Så hvad er tilfælde for en løkke brug? 146 00:06:44,469 --> 00:06:46,760 Brug du bruger en while-løkke, når du vil have en løkke til at gentage 147 00:06:46,760 --> 00:06:51,200 et ukendt antal gange, men det eventuelt kan ikke køre alle. 148 00:06:51,200 --> 00:06:53,940 En rigtig almindeligt eksempel på et stykke looping anvendes 149 00:06:53,940 --> 00:06:56,480 er at køre flow for et spil kontrol. 150 00:06:56,480 --> 00:06:59,040 Du kan ikke vide, hvor længe bruger vil være at spille, 151 00:06:59,040 --> 00:07:01,440 men du ønsker at holde gøre det samme. 152 00:07:01,440 --> 00:07:04,970 Opdatering holdninger forskellige sprites på brættet. 153 00:07:04,970 --> 00:07:07,490 Du ønsker at holde tingene i konstant bevægelse, 154 00:07:07,490 --> 00:07:09,110 men du ved ikke, hvornår det bruger kommer til at stoppe med at spille 155 00:07:09,110 --> 00:07:10,450 eller når de kommer at løbe tør for liv. 156 00:07:10,450 --> 00:07:12,741 Så en while-løkke er virkelig god til sådan noget. 157 00:07:12,741 --> 00:07:14,130 Det er en god brug sag. 158 00:07:14,130 --> 00:07:16,230 >> For en gør while-løkke, det er ret ens. 159 00:07:16,230 --> 00:07:19,746 Du ønsker en løkke til at gentage en ukendt antal gange, men mindst én gang. 160 00:07:19,746 --> 00:07:22,370 Du kan bruge dette til et spil også, men en virkelig fælles brug tilfælde 161 00:07:22,370 --> 00:07:24,420 er at spørge brugeren om input. 162 00:07:24,420 --> 00:07:28,609 Generelt kan man sige noget lignende, giv mig et positivt heltal, 163 00:07:28,609 --> 00:07:30,650 og du kan sætte det indersiden af ​​en gør while-løkke. 164 00:07:30,650 --> 00:07:33,900 Så det vil altid spørge dem på mindst én gang for et positivt heltal. 165 00:07:33,900 --> 00:07:36,850 Hvis de giver dig et positivt heltal, du kan bryde ud af løkken. 166 00:07:36,850 --> 00:07:37,599 Du kan blive gjort. 167 00:07:37,599 --> 00:07:39,900 Den boolesk udtryk i den gøre, mens kan være falske. 168 00:07:39,900 --> 00:07:41,137 >> Og du vil ikke bede dem igen. 169 00:07:41,137 --> 00:07:44,470 Hvis de giver dig et negativt tal, hvor de skrive nogle ord eller noget, der er 170 00:07:44,470 --> 00:07:46,630 ikke rigtig nyttigt at dig, kan du bruge 171 00:07:46,630 --> 00:07:49,770 gøre, mens løkke til at gå tilbage og gøre det igen og igen og igen. 172 00:07:49,770 --> 00:07:52,410 Du helt sikkert vil spørge dem til at give dig en række én gang, 173 00:07:52,410 --> 00:07:56,350 men du ved ikke, hvor mange gange efter at de kunne være skadedyr. 174 00:07:56,350 --> 00:08:00,540 Og så en gør, mens det er en stor brug tilfældet for at spørge brugeren om input. 175 00:08:00,540 --> 00:08:03,060 Og en efter sløjfer bruger tilfælde typisk er, når 176 00:08:03,060 --> 00:08:06,230 du ønsker at gentage en løkke et diskret antal gange, 177 00:08:06,230 --> 00:08:08,230 selvom du måske ikke kender antallet af gange 178 00:08:08,230 --> 00:08:10,040 det tidspunkt, hvor programmet kompileres. 179 00:08:10,040 --> 00:08:15,510 >> Så for eksempel, måske du har et program hvor du bede brugeren om et nummer. 180 00:08:15,510 --> 00:08:17,660 Og de kommer ind 100. 181 00:08:17,660 --> 00:08:20,510 Og så din for sløjfen i så fald køre 100 gange. 182 00:08:20,510 --> 00:08:22,480 Eller måske de ind 1.000 i dit program 183 00:08:22,480 --> 00:08:24,570 og derefter køre løkken 1.000 gange. 184 00:08:24,570 --> 00:08:26,987 Det er et bestemt antal gange. 185 00:08:26,987 --> 00:08:28,820 De gør ikke nødvendigvis ved, hvad det nummer 186 00:08:28,820 --> 00:08:31,010 er det øjeblik programmet er kompileret. 187 00:08:31,010 --> 00:08:35,010 Det er ikke som en while-løkke hvor det kunne være uendelig. 188 00:08:35,010 --> 00:08:37,127 Det er snarere en række at du bare ikke kender. 189 00:08:37,127 --> 00:08:39,210 Nu selvom jeg har skitseret alle disse use cases, 190 00:08:39,210 --> 00:08:41,501 du skal vide, at i smuk meget hver omstændighed, 191 00:08:41,501 --> 00:08:44,110 du kan udveksle alle tre af disse sløjfer. 192 00:08:44,110 --> 00:08:46,890 Du kan bruge en for-løkke, hvor du ellers ville bruge en while-løkke. 193 00:08:46,890 --> 00:08:49,860 Du kan bruge en for-løkke, hvor det du ville bruge en gør while-løkke og så videre. 194 00:08:49,860 --> 00:08:53,680 Det kan være lidt tricky til tider, så generelt er det en god praksis 195 00:08:53,680 --> 00:08:55,140 at holde sig til en typisk brug sag. 196 00:08:55,140 --> 00:08:57,599 Brug en gør mens løkke, hvis du ønskede noget én gang, i hvert fald. 197 00:08:57,599 --> 00:09:00,514 Brug en for-løkke, hvis du ønsker at gøre noget et bestemt antal gange. 198 00:09:00,514 --> 00:09:03,730 Efter alt, det er derfor der er tre forskellige slags løkker. 199 00:09:03,730 --> 00:09:06,172 >> Så de kan bruges i den rette kontekst. 200 00:09:06,172 --> 00:09:07,880 Men du kan udveksle dem, hvis du ønsker. 201 00:09:07,880 --> 00:09:10,790 Hvis du føler dig tryg med, mens sløjfer og du altid ønsker at bruge, mens sløjfer. 202 00:09:10,790 --> 00:09:12,623 Det er noget, du kan gøre, selv om det 203 00:09:12,623 --> 00:09:15,590 kan være lidt syntaktisk tricky, hvor en for-løkke 204 00:09:15,590 --> 00:09:17,850 ville være meget mere ligetil. 205 00:09:17,850 --> 00:09:21,100 >> Mit navn er Doug Lloyd og det er CS50. 206 00:09:21,100 --> 00:09:22,688