Brug løkker til at gentage sætninger
Du er kommet til et punkt i dit program, hvor du skal udføre en gruppe udsagn mere end én gang. Du arbejder muligvis med en listetypestruktur, som du skal gentage. Eller du har et generelt behov for at gentage en handling, indtil en bestemt betingelse er opfyldt. I disse scenarier kan du bruge løkker.
Sløjfer
En løkke gentager et interval af værdier. For hver værdi gør koden noget, f.eks. udskrivning af resultater på en skærm eller brug af værdien i en handling. F# har tre typer løkker, du kan bruge:
-
for...in: Denfor...inkonstruktion forudsætter, at du har en optællingssamling, du kan gentage. Den gentager hver værdi i en samling. -
for...to: Denfor...toløkke starter og slutter, hvor denne løkke gentages. Gentages, indtil den når værdien af en løkkevariabel. -
while...do: Denwhile...doløkke er ikke centreret om en optællingssamling som de første to konstruktioner. Den løkker i stedet, indtil en betingelse er opfyldt.
Brug en til... i løkke for hver værdi i en samling
Den for...in konstruktør arbejder på en optællingssamling. Den implementerer System.Collections.IEnumerable og indeholder lister, sekvenser, matrixer og andre typer. Her er syntaksen for en for...in-løkke:
for <pattern> in <enumerable-expression> do
<body-expression>
Det er vigtigt at forstå nogle nøgleord:
mønster: Mønsteret kan være det aktuelle element eller en tupel. Et eksempel er gentagelse over en sekvens. Følgende kode er et eksempel på, hvornår mønsteret er den aktuelle værdi
i.forgentager listen overlistog udskriver derefter hver værdi i samlingen:let list = [1; 2; 3; 4; 5] for i in list do printf "%d " iEnumerable-expression: Det optællingsbare udtryk er det, du itererer igennem. Det kan være en liste eller en sekvens.
Brødtekstudtryk: Brødtekstudtrykket er det punkt, hvor du udfører den opgave, du vil udføre, f.eks. udskrivning eller udførelse af en beregning.
Brug en til... til løkke, indtil der forekommer en løkkevariabel
Den for...to konstruktion adskiller sig en smule fra en for...in løkke. Den for...to løkkevariabel udgør en grænse for, hvor gentagelsen skal stoppes. Sådan ser syntaksen ud:
for <identifier = start> [ to | downto ] <finish> do
<body-expression>
Det er vigtigt at forstå syntakskomponenterne:
-
identifier = start: Denne syntaks er en tildeling. Du bestemmer typisk, hvilken variabel du vil spore som en del af gentagelsen, og hvilken værdi den skal starte på. -
[to | downto]: Du kan vælge mellem to forskellige nøgleord.tobetyder, at løkken gentages til dette tal. Hvis du brugerdownto, reduceres værdien af dit id, indtil det når dette tal.
Her er et eksempel på brug af en for...to-løkke:
for i = 1 to 10 do
printfn "%i " i // prints 1 2 3 4 5 6 7 8 9 10
Denne løkke udskriver alle værdier mellem 1 og 10, herunder 10. Lad os også se på et eksempel, der bruger for...downto-konstruktionen. Denne konstruktion fungerer på samme måde som for...to, men omvendt. Følgende kode viser, hvordan du kan udskrive værdierne fra 10 ned til 1, herunder 1:
for i = 10 downto 1 do
printfn "%i" i // prints 10 9 8 7 6 5 4 3 2 1
Brug et stykke tid... gør løkke, indtil en betingelse er opfyldt
Den while...do konstruktion adskiller sig fra de for...in og for...to konstruktioner.
while...do gentager ikke en samling. Brug i stedet en while...do løkke, hvis du har logik, der skal løkke, indtil en betingelse er opfyldt. Et eksempel er accept af kommandolinjeargumenter, indtil en bruger angiver afslutter.
Denne kode viser syntaksen for en while...do konstruktion:
while <test-expression> do
<body-expression>
Et gætspil er et eksempel på brug af en while...do konstruktion:
open System
let mutable quit = false
let no = 11
while not quit do
printf "Guess a number: "
let guess = Console.ReadLine()
let guessNo = int guess
if guessNo = no then
quit <- true
printfn "You guessed correctly %i is the secret number" no
else
printfn "%i is incorrect" guessNo
Koden udfører et sæt sætninger, indtil variablen quit har værdien true. Når du angiver værdien for quit til true, slutter løkken, når en bruger gætter korrekt.