Używanie pętli do iterowania instrukcji

Ukończone

Doszedłeś do punktu w programie, w którym musisz wykonać grupę instrukcji więcej niż jeden raz. Możesz pracować z strukturą typu listy, którą musisz wykonać iteracja. Możesz też mieć ogólną potrzebę powtarzania operacji do momentu spełnienia określonego warunku. W tych scenariuszach można używać pętli.

Pętle

Pętla iteruje zakres wartości. Dla każdej wartości kod wykonuje coś, na przykład drukowanie wyników na ekranie lub użycie wartości w operacji. Język F# ma trzy typy pętli, których można użyć:

  • for...in: W for...in konstrukcji założono, że masz kolekcję wyliczalną, którą można iterować. Iteruje każdą wartość w kolekcji.
  • for...to: pętla for...to rozpoczyna się i kończy się, gdzie ta pętla iteruje. Iteruje, dopóki nie osiągnie wartości zmiennej pętli.
  • while...do: Pętla while...do nie jest wyśrodkowana na kolekcji wyliczalnej, takiej jak dwie pierwsze konstrukcje. Zamiast tego wykonuje pętlę do momentu spełnienia warunku.

Użyj elementu dla... w pętli dla każdej wartości w kolekcji

Konstrukcja for...in działa na kolekcji wyliczalnej. Implementuje System.Collections.IEnumerable i zawiera listy, sekwencje, tablice i inne typy. Oto składnia for...in pętli:

for <pattern> in <enumerable-expression> do
  <body-expression>

Ważne jest, aby zrozumieć niektóre słowa kluczowe:

  • Wzorzec: wzorzec może być bieżącym elementem lub krotką. Przykładem jest iteracja w sekwencji. Poniższy kod jest przykładem sytuacji, w których wzorzec jest bieżącą wartością i. Iteruje forlist na liście, a następnie drukuje każdą wartość w kolekcji:

    let list = [1; 2; 3; 4; 5]
    for i in list do
       printf "%d " i
    
  • Wyrażenie-wyliczalne: wyrażenie wyliczalne jest tym, za pomocą którego wykonujesz iterację. Może to być lista lub sekwencja.

  • Wyrażenie-treść: wyrażenie treści to miejsce, w którym wykonujesz zadanie, które chcesz wykonać, na przykład drukowanie lub wykonywanie obliczeń.

Użyj elementu dla... pętla do momentu wystąpienia zmiennej pętli

Konstrukcja for...to różni się nieco od for...in pętli. Zmienna for...to pętli stanowi granicę miejsca, w którym należy zatrzymać iterację. Oto jak wygląda składnia:

for <identifier = start> [ to | downto ] <finish> do
    <body-expression>

Ważne jest, aby zrozumieć składniki składni:

  • identifier = start: Ta składnia jest przypisaniem. Zazwyczaj decydujesz, jaka zmienna ma być śledzone w ramach iteracji i jaka wartość powinna zostać uruchomiona.
  • [to | downto]: Możesz wybrać między dwoma różnymi słowami kluczowymi. to oznacza, że pętla iteruje do tej liczby. Jeśli używasz downtometody , wartość identyfikatora spadnie do momentu osiągnięcia tej liczby.

Oto przykład użycia for...to pętli:

for i = 1 to 10 do
  printfn "%i " i  // prints 1 2 3 4 5 6 7 8 9 10

Ta pętla drukuje wszystkie wartości z zakresu od 1 do 10, w tym 10. Przyjrzyjmy się również przykładowi for...downto , który używa konstrukcji. Ta konstrukcja działa podobnie do for...to, ale odwrotnie. Poniższy kod pokazuje, jak można wydrukować wartości z zakresu od 10 do 1, w tym 1:

for i = 10 downto 1 do
  printfn "%i" i  // prints 10 9 8 7 6 5 4 3 2 1

Użyj chwilę... wykonaj pętlę, dopóki warunek nie zostanie spełniony

Konstrukcja while...do różni się od for...in konstrukcji i for...to . while...do nie iteruje kolekcji. Zamiast tego należy użyć pętli, jeśli masz logikę while...do , która musi pętli, dopóki warunek nie zostanie spełniony. Przykładem jest akceptowanie argumentów wiersza polecenia do momentu zakończenia działania użytkownika.

Ten kod przedstawia składnię while...do konstrukcji:

while <test-expression> do
  <body-expression>

Zgadywanie gry jest przykładem użycia while...do konstrukcji:

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

Kod wykonuje zestaw instrukcji, dopóki zmienna quit nie ma wartości true. Ustawiając wartość parametru quit na true, gdy użytkownik poprawnie odgadnie, kończy się pętla.