>> DOUG LLOYD: Greit, så la oss snakke om sløyfer.
Så sløyfer er litt kult fordi de lar programmet
å utføre kodelinjer om og om igjen og om igjen.
Gjentatte ganger, uten å måtte kopiere og lime eller på annen måte gjenta dem.
Det er tre store typer looper du vil se.
Du vil sannsynligvis ha anledning til å bruke hver og en som du avanserer gjennom CS50.
Noen av disse løkkene er ganske kjent for deg fra bunnen av,
så igjen, slik vi gjorde med conditionals, vi vil sette dem opp ved siden av hverandre
hvis det er en analogi kan vi tegne.
>> Først ut er alltid fra Scratch, som kan sammenlignes med while (true).
Dette er hva vi kaller en uendelig loop.
Linjene med kode mellom krøllete bukseseler, mye som brikkene
som passer inne i C av evig blokkere,
vil utføre gjentatte ganger fra toppen til bunn, om og om igjen og om igjen,
alltid.
Tross alt, hvis du husker vår drøfting av boolske uttrykk,
sant er alltid sant.
Så hvis vi gjør noe så lenge sant
er true-- det virker litt silly-- sant er alltid sant, så det vil alltid kjøre.
Det vil kjøre for evig og evighet før vi
finne en måte å bryte ut av det med en pause uttalelse, som igjen,
vi så en liten stund siden vi snakket om bryteren.
>> Eller på annen måte bare drepe vår program, som for øvrig,
hvis du skulle finne deg selv i en situasjon med en uendelig løkke
og du ikke vet hvordan å stoppe programmet fra å kjøre.
Bare trykk kontroll og C og som dreper programmet for deg.
Men dette, igjen, er kalles en uendelig loop.
Det er en løkke som vil kjøre for alltid.
Nå, mens sløyfer er ikke alltid uendelig, fordi også
vi kan erstatte boolsk uttrykk med noe
litt mer nyttig enn bare sant.
Så her er et annet eksempel.
Mens og noen boolsk uttrykk og deretter klammeparentes.
Det er ganske mye analogt å gjenta til, fra bunnen av.
Selv i et sekund, vil jeg forklare forskjellen.
>> Så i C, hvis boolsk uttrykk Innsiden av mens sløyfen
evaluerer til sann, linjene kode mellom klammeparentes
vil utføre gjentatte ganger om og om igjen og om igjen til boolsk uttrykk
evalueres til false.
Så for eksempel, kan du har noen form for telleren.
Så sier du i begynnelsen av denne sløyfen si int x er lik null.
Mens x er mindre enn 100, gjøre et par ting inni at klammeparentes,
deretter i slutten av loopen, sier du x pluss pluss, du økes x.
Omsider x vil få til 100, og du vil
stoppe fordi tilstanden x er mindre enn 100
vil ikke lenger være sant som Når x er lik 100.
100 ikke er mindre enn 100.
>> Nå litt forvirrende, oppførselen av scratch blokken er reversert.
Så vær veldig forsiktig hvis dette er ditt første steg inn ved hjelp av sløyfer.
I utgangspunktet gjentakelses inntil blokken i Scratch
vil gjenta noe om og om igjen og om igjen,
til uttrykk, den boolske uttrykk i sekskanten er sant.
Så det vil fortsette å gjøre det før det er sant.
I mellomtiden vil den mens loop fortsette å gjøre det før det er falsk.
Så de er ganske like, men det er det liten forskjell bare
å være forsiktig med spesielt som du gjør første gang du spiller fra overgangen
til Scratch inn c.
Den neste slags løkke er faktisk ganske lik.
Den kalles do mens loop.
Denne sløyfen vil henrette alle linjene kode mellom klammeparentes gang,
og da vil det bli kontrollert boolsk uttrykk.
Hvis den boolske uttrykk evaluerer til sann,
det kommer til å gå tilbake og gjenta at prosessen om og om igjen
og om igjen til den boolske uttrykk evalueres til false.
Så dette loop, i motsetning til en stund loop, er garantert å kjøre minst en gang.
Dette kan være ganske nyttig.
>> Endelig har vi en for loop.
For løkker er slags syntaktisk skjemmende
og det er mye som skjer på her, så bærer med meg
som vi prøver og bryte disse brikkene fra hverandre.
Generelt er bruken saken av en for loop er du
ønsker å gjenta noe bestemt antall ganger.
I dette eksempel her, Jeg har gjentakelsesblokk
fra Scratch, som er analogt med den for loop
i C, gjentatt 10 ganger noe.
Og for loop på venstre der, som
er en fire løkke som ville gjøre det samme.
Dette ville gå 10 ganger.
Telle fra null, vi øke hver passering av sløyfen.
Og vi fortsette med det før jeg er mindre enn 10.
>> Så hva skjer?
Det finnes en hel masse kode der.
La oss bryte det ned til hva som skjer trinn
trinn som vi grave gjennom en for loop.
Det første som skjedde er tellervariabelen er sentrum.
Alt til venstre for det første semikolon i parentes
utføres.
I dette tilfellet, er vi sier int i lik 0.
Erklære en ny variabel kalt i, at variablene er en type heltall
og vi sier verdien inne at variabelen skal være null.
>> Den andre tingen vi gjør er vi deretter umiddelbart evaluere
boolsk uttrykk.
Boolsk uttrykk er i midten av de to semikolon.
I er mindre enn 10.
Det er sant her, ikke sant?
Vi sa bare jeg er lik null, og slik at 0 er mindre enn 10,
og slik at betingelsen er sant, og vi vil nå
videre å utføre hoveddelen av løkken.
Hvis det var falsk.
Hvis, for eksempel, sa jeg i stedet for jeg er lik 0 der sa jeg jeg er lik 15,
int i lik 15.
Brønn 15 er ikke mindre enn 10, så vi ville aldri inn i kroppen av løkken
fordi boolsk uttrykk det ville vurdere å være falsk.
>> Etter at vi går gjennom fra topp til bunn, vi møter at lukke klammeparentes,
en tredje ting skjer.
Tellervariabelen er økes, eller rettere sagt, linjene
av koden til en uttalelse etter andre semikolon innside
for sløyfer parentes utføres.
Så vi starter ut ved sier int i lik 0.
Så vi sjekke hvorvidt boolsk uttrykk er sant.
0 er mindre enn 10, så det er sant.
Så vi kommer til å fortsette inn i kroppen sløyfen.
Ting vil skje inne i loop, og når vi møter som lukker krøllete
brace, neste ting vi gjøre er å si at vi i pluss, pluss.
Jeg var null nå jeg er en.
Deretter vi igjen sjekke verdien boolsk uttrykk i midten.
Den ene er mindre enn 10.
Så vil vi gå gjennom dette behandle igjen og igjen.
Vi vil komme til den avsluttende curly brace igjen.
Vi vil øke i fra 1 til 2 og fra 2 til 3.
Og så videre og så videre og så videre, helt til slutt i verdi blir 10.
Er 10 mindre enn 10?
Nei.
Telle fra 0, har vi gått gjennom 10 gjentakelser av loop.
Vi har gjentatt 10 ganger, bare som vi gjorde i Scratch blokken.
Og så det er i utgangspunktet Fremgangsmåte for en fire-sløyfe.
>> Nå tar bort faktiske koden og la ballen
på bare noen grunnleggende generelle uttalelser.
Her er hva som skjer.
Alle utsagnene i starte utføres først.
Du kan ha mer enn én.
Deretter blir det boolske uttrykk kontrollert.
Hvis uttrykket evaluerer til sann, utføre legemet sløyfen en gang.
Hvis uttrykket evaluerer til falsk, er vi ferdige.
Vi vil ikke kjøre legeme av sløyfen i det hele tatt.
Etter at vi har utført legeme sløyfen en gang
vi da gjøre det som er i tilveksten del der.
Som vanligvis kommer til å være noe som jeg pluss, pluss
eller noe sånt, som modifiserer en teller variabel.
Deretter, etter at vi øke, vi sjekk uttrykket igjen
og gjenta disse trinn om og om igjen og om igjen til uttrykket er
ikke lenger sant.
>> Så hva er de bruksmåter for en loop?
Bruker du bruke en stund loop når du ønsker en løkke til å gjenta
et ukjent antall ganger, men det muligens ikke kan kjøre alt.
En veldig vanlig eksempel på en stund looping blir brukt
er å kjøre kontrollflyt for et spill.
Du vet kanskje ikke hvor lenge brukeren skal spille,
men du vil beholde gjør det samme.
Oppdatering posisjonene ulike sprites på tavlen.
Du ønsker å holde ting bevegelse hele tiden,
men du vet ikke når den brukeren kommer til å slutte å spille
eller når de kommer å gå tom for liv.
Så en stund loop er virkelig god for noe sånt.
Det er en god brukstilfelle.
>> For en gjør mens loop, det er ganske lik.
Du vil ha en sløyfe for å gjenta en ukjent rekke ganger, men minst en gang.
Du kan bruke dette for et spill også, men en virkelig felles use case
er å spørre brukeren om innspill.
Generelt kan du si noe lignende, gi meg et positivt heltall,
og du kan sette det innsiden av en gjør mens loop.
Så det vil alltid spørre dem på minst en gang for et positivt heltall.
Hvis de gir deg et positivt heltall, du kan bryte ut av loopen.
Du kan bli gjort.
Den boolske uttrykk den gjøre mens kan være falsk.
>> Og du vil ikke be dem igjen.
Hvis de gir deg et negativt tall der de skriver noen ord eller noe som er
ikke veldig nyttig å deg, kan du bruke
trenger mens loop for å gå tilbake og gjøre det igjen og igjen og igjen.
Du definitivt ønsker å spørre dem til å gi deg et tall en gang,
men du vet ikke hvor mange ganger etter at de kan være skadedyr.
Og så en gjør mens det er en stor bruk case for å spørre brukeren om innspill.
Og en etter looper bruke Saken er typisk når
du ønsker å gjenta en sløyfe et diskret antall ganger,
selv om du kanskje ikke vet hvor mange ganger
øyeblikket programmet er kompilert.
>> Så for eksempel, kanskje du har et program der du spør brukeren om et tall.
Og de kommer inn 100.
Og deretter din for loop vil i så fall kjøres 100 ganger.
Eller kanskje de kommer inn 1000 i programmet
og deretter kjøre løkken 1000 ganger.
Det er et bestemt antall ganger.
De gjør ikke nødvendigvis vet hva det tallet
er øyeblikket programmet er kompilert.
Det er ikke som en stund løkke hvor det kunne være uendelig.
Det er snarere et nummer som du vet bare ikke.
Nå selv om jeg har skissert alle disse bruksmåter,
bør du vite at i ganske mye hver omstendighet,
du kan utveksle all tre av disse sløyfer.
Du kan bruke en for loop der du ellers ville bruke en stund loop.
Du kan bruke en for loop hvor du vil bruke en gjør mens loop og så videre.
Det kan være litt vanskelig noen ganger, så generelt det er en god praksis
å følge en vanlig brukstilfelle.
Bruk en gjør mens loop hvis du ønsket noe en gang, i alle fall.
Bruk en for loop hvis du ønsker å gjøre noe bestemt antall ganger.
Tross alt, det er derfor det er tre forskjellige typer loops.
>> Slik at de kan brukes i riktig sammenheng.
Men du kan utveksle dem hvis du vil.
Hvis du føler deg komfortabel med, mens sløyfer og du alltid vil bruke mens sløyfer.
Det er noe som du kan gjøre, selv om det
kan være litt syntaktisk vanskelig, hvor en for loop
ville være mye mer direkte.
>> Mitt navn er Doug Lloyd og dette er CS50.