Używanie pętli do iterowania instrukcji
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
: Wfor...in
konstrukcji założono, że masz kolekcję wyliczalną, którą można iterować. Iteruje każdą wartość w kolekcji.for...to
: pętlafor...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ętlawhile...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
. Iterujefor
list
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żywaszdownto
metody , 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.