>> DOUG LLOYD: Okej, så låt oss tala om loopar.
Så slingor är ganska coolt eftersom de tillåter ditt program
att exekvera kodrader om och om och om igen.
Upprepade gånger, utan att behöva kopiera och klistra eller på annat sätt upprepa dem.
Det finns tre stora typer av loopar får du se.
Du kommer förmodligen få tillfälle att använda var och en som du framsteg genom CS50.
Vissa av dessa slingor är ganska bekant för dig från Scratch,
så igen, som vi gjorde med villkors, Vi kommer att sätta upp dem sida vid sida
om det finns en analogi kan vi dra.
>> Först är alltid från Scratch, vilket kan jämföras med while (true).
Detta är vad vi kallar en oändlig loop.
De kodrader mellan lockigt hängslen, ungefär som pusselbitar
som får plats i det C av evigt blockera
kommer upprepade gånger köra uppifrån till botten, om och om och om igen,
evigt.
Trots allt, om ni minns vår diskussion om booleska uttryck,
sant är alltid sant.
Så om vi gör något så länge som sann
är true-- det verkar lite Silly-- sann är alltid sant, så det kommer alltid köra.
Det kommer att köra för evigt och evigheternas evigheter tills vi
hitta ett sätt att bryta sig ur det med ett break, som återigen,
Vi såg en liten stund sedan vi talade om switch.
>> Eller annars bara döda vår programmet, som för övrigt,
om du någonsin befinner dig i en Situationen med en oändlig loop
och du inte vet hur man stoppar ditt program från att köras.
Slå precis kontroll och C och som dödar ditt program för dig.
Men detta, återigen, är kallas en oändlig slinga.
Det är en loop som körs alltid.
Nu, medan slingor är inte alltid oändligt, eftersom också
Vi kan ersätta Boolean uttryck med något
lite mer användbar än bara sant.
Så här är ett annat exempel.
Medan och några booleska uttryck och sedan klammerparenteserna.
Det är ganska mycket analogt upprepa tills från scratch.
Även i en andra, jag förklara skillnaden.
>> Så i C, om det booleska uttryck insidan av while-slingan
utvärderas till true, i linje med kod mellan klammerparenteserna
kommer att utföra flera gånger om och om igen och om igen tills Booleskt uttryck
utvärderas till false.
Så till exempel, kanske du har någon form av disk.
Så säger du i början av denna slinga säga int x är lika med noll.
Medan x är mindre än 100, gör ett par saker inuti att klammerparenteser,
sedan i slutet av din loop, säger du x plus plus, du uppräkning x.
Så småningom x kommer att få till 100 och du kommer
sluta eftersom villkoret x är mindre än 100
kommer inte längre att vara sant som snart x är lika med 100.
100 är inte mindre än 100.
>> Nu något förvirrande, beteendet av scratch blocket reverseras.
Så var riktigt försiktig om detta är din första razzia i att använda loopar.
I grund och botten, det upprepade tills blocket i Scratch
kommer att upprepa något om och om och om igen,
tills uttrycket, Boolean uttryck i Hexagon är sant.
Så det kommer att fortsätta göra tills det är sant.
Samtidigt kommer while-slingan fortsätta att göra det tills den är falsk.
Så de är ganska lika, men det är det liten skillnad bara
att vara försiktig med, särskilt när du gör din första razzia från övergången
att Scratch i c.
Nästa typ av slinga är faktiskt ganska likartade.
Det heter do while.
Denna slinga kommer att utföra alla linjer kod mellan klammerparenteserna en gång,
och så kommer det att kontrollera Boolean uttryck.
Om det booleska uttryck utvärderas till true
Det ska gå tillbaka och repetera denna process om och om igen
och om igen tills Boolean uttryck utvärderas till false.
Så denna slinga, till skillnad från en while-slinga, är garanterat att köra åtminstone en gång.
Detta kan vara ganska användbart.
>> Slutligen har vi en for-loop.
För loopar är typ av syntaktiskt oattraktiv
och det finns en hel del att gå här, så bär med mig
som vi försöker bryta dessa bitar isär.
Generellt användningsfallet av en for-loop är dig
vill upprepa något visst antal gånger.
I detta exempel här, Jag har upprepningsblocket
från Scratch, som är analogt med for-slingan
i C, upprepa något 10 gånger.
Och för slingan på vänster där, vilket
är en fyra loop som skulle göra samma sak.
Detta skulle gå 10 gånger.
Räknat från noll, vi inkrementera varje passage i slingan.
Och vi fortsätta att göra det tills jag är mindre än 10.
>> Så vad händer?
Det finns en hel del kod där.
Låt oss bryta ner det till vad som händer steg
steg när vi gräver genom en for-loop.
Det första som hände är räknarvariabeln är centrum.
Allt till vänster om det första semikolon inom parentes
exekveras.
I det här fallet är vi säger int i lika med 0.
Deklarera en ny variabel som kallas i, att variabler är en typ heltal
och vi säger värdet inuti den variabeln kommer att vara noll.
>> Den andra saken som vi gör är vi sedan omedelbart utvärdera
Boolean uttryck.
Booleskt uttryck är i mitten av de två semikolon.
I är mindre än 10.
Det är sant här, eller hur?
Vi sade bara att jag är lika med noll, och så 0 är mindre än 10,
och så detta villkor är sant och vi kommer nu
fortsätta att utföra kroppen av slingan.
Om det var falskt.
Om till exempel, sa jag i stället för Jag är lika med 0 där jag sade att jag är lika 15,
int i lika 15.
Väl 15 inte är mindre än 10, så vi skulle aldrig kommer in i kroppen av slingan
eftersom Boolean uttryck skulle bedöma att vara falsk.
>> När vi går igenom från topp till botten, vi möter att stänga klammerparentes,
en tredje sak händer.
Räknarvariabeln är ökas, eller rättare sagt, linjerna
kod i ett uttalande efter andra semikolon insidan av
för slingor parenteser utförs.
Så vi börjar med säger int i lika med 0.
Sedan kollar vi om eller inte det booleska uttrycket är sant.
0 är mindre än 10, så det är sant.
Så vi kommer att gå vidare in i kroppen slingan.
Saker kommer att hända innanför slingan, och när vi möter att stänga lockigt
stag, nästa sak vi göra är att vi säger i plus, plus.
Jag var noll nu jag är en.
Sedan återigen kontrollerar vi värdet av Boolean uttryck i mitten.
En är mindre än 10.
Så vi ska gå igenom denna bearbeta och om igen.
Vi kommer till stängning klammerparentes igen.
Vi kommer att öka i från Ett till två och från två till tre.
Och så vidare och så vidare och så vidare, tills småningom i värde blir 10.
Är 10 mindre än 10?
Nej.
Räknat från 0, har vi gått genom 10 iterationer av slingan.
Vi har upprepades 10 gånger, bara som vi gjorde i Scratch blocket.
Och så det är i princip förfarande för en fyra slinga.
>> Nu tar bort faktiska koden och sätta det
på bara några grundläggande allmänna uttalanden.
Här är vad som händer.
Alla uttalanden i börja utförs först.
Du kanske har mer än en.
Därefter Boolean uttryck kontrolleras.
Om uttrycket utvärderas till true, exekvera kroppen slingan en gång.
Om uttrycket utvärderas false vi gjort.
Vi inte verkställa kropp av slingan alls.
Efter att vi har utfört kropp slingan en gång,
vi sedan göra vad som finns i inkrementet delen där.
Som vanligtvis kommer att vara något som jag plus, plus
eller något liknande, att modifierar en räknarvariabeln.
Sedan, när vi öka, vi kontrollera expressionen igen
och upprepa dessa steg om och om igen och om igen tills uttrycket är
inte längre sant.
>> Så vad är användningsfall för en loop?
Använd du använder en while-slinga när du vill ha en slinga för att upprepa
ett okänt antal gånger, men det möjligen kan inte köra alls.
En riktigt vanligt exempel på en stund looping används
är att köra styrflödet för ett spel.
Du kanske inte vet hur länge användaren kommer att spela,
men du vill behålla gör samma sak.
Uppdatering positionerna för olika sprites på tavlan.
Du vill hålla saker i rörelse hela tiden,
men du vet inte när användaren kommer att sluta spela
eller när de är på väg få slut på liv.
Så en while-slinga är verkligen bra för något liknande.
Det är en bra användningsfall.
>> För en gör while-slinga, det är ganska likartade.
Vill du ha en slinga för att upprepa en okänd antal gånger, men åtminstone en gång.
Du kan använda detta för ett spel också, men en riktigt vanlig användningsfall
är som uppmanar användaren för inmatning.
Generellt kan man säga något liksom, ge mig ett positivt heltal,
och du kan sätta det insidan av en gör while-slinga.
Så det kommer alltid att be dem på minst en gång för ett positivt heltal.
Om de ger dig ett positivt heltal, du kan bryta ut ur loopen.
Du kan göras.
Boolean uttryck i do medan kan vara falsk.
>> Och du kommer inte att be dem igen.
Om de ger dig ett negativt tal där de skriver något ord eller något som är
inte riktigt bra att dig, kan du använda den
gör medan slinga för att gå tillbaka och göra det igen och igen och igen.
Du vill absolut be dem att ge dig ett nummer en gång,
men du vet inte hur många gånger efter att de kan vara skadedjur.
Och så en gör samtidigt som det är en stor användning fodral för att meddela användaren för inmatning.
Och för slingor använder fall är vanligtvis när
du vill upprepa en slinga ett diskret antal gånger,
men du kanske inte veta hur många gånger
det ögonblick programmet kompileras.
>> Så till exempel, kanske du har ett program där du fråga användaren om ett nummer.
Och de går in 100.
Och sedan ditt för loop kommer i så fall köra 100 gånger.
Eller kanske de anger 1000 i ditt program
och kör sedan loopen 1000 gånger.
Det är ett visst antal gånger.
De gör inte nödvändigtvis vet vad det numret
är det ögonblick programmet kompileras.
Det är inte som en while-slinga där det kan vara oändlig.
Det är snarare ett antal att du bara inte vet.
Nu trots att jag har beskrivs alla dessa användningsfall,
ska du veta att i pretty mycket varje omständighet,
du kan byta alla tre av dessa slingor.
Du kan använda en for-loop där du annars skulle använda en while-slinga.
Du kan använda en for-loop varhelst du skulle använda en gör while-slinga och så vidare.
Det kan vara lite knepigt ibland, så generellt är det en god praxis
att ansluta sig till ett typiskt användningsfall.
Använd en gör while-slinga om du ville ha något en gång, åtminstone.
Använd en for-loop om du vill göra något ett visst antal gånger.
När allt kommer omkring, det är därför det finns tre olika typer av slingor.
>> Så att de kan användas i rätt sammanhang.
Men du kan byta dem om du vill.
Om du känner dig bekväm med while-slingor och du alltid vill använda medan slingor.
Det är något som du kan göra, även om det
kan vara lite syntaktiskt knepigt, där en for-loop
skulle vara mycket enklare.
>> Mitt namn är Doug Lloyd och det är CS50.