Brug løkker til at gentage sætninger

Fuldført

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: Den for...in konstruktion forudsætter, at du har en optællingssamling, du kan gentage. Den gentager hver værdi i en samling.
  • for...to: Den for...to løkke starter og slutter, hvor denne løkke gentages. Gentages, indtil den når værdien af en løkkevariabel.
  • while...do: Den while...do lø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. for gentager listen over list og udskriver derefter hver værdi i samlingen:

    let list = [1; 2; 3; 4; 5]
    for i in list do
       printf "%d " i
    
  • Enumerable-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. to betyder, at løkken gentages til dette tal. Hvis du bruger downto, 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.