Używanie pętli do iterować po instrukcjach

Ukończone

Doszliśmy do punktu w programie, w którym trzeba wykonać grupę instrukcji więcej niż jeden raz. Przyczyną jest to, że masz do czynienia ze strukturą typu listy lub masz ogólną potrzebę powtarzania czegoś do momentu, gdy zostanie spełniony określony warunek. W tym scenariuszu można używać pętli.

Pętle

Pętla iteruje po zakresie wartości. Dla każdej wartości kod robi coś takiego jak drukowanie wyników na ekranie lub używanie wartości w operacji. F# ma trzy typy pętli, których można użyć:

  • for...in: W for...in konstrukcji założono, że masz kolekcję, w przypadku których można iterować. Iteruje po każdej wartości w kolekcji.
  • for...to: pętla for...to jest uruchamiana i kończy się w miejscu, w którym ta pętla iteruje. Iteruje do momentu osiągnięcia wartości zmiennej pętli.
  • while...do: Pętla while...do nie jest wyśrodkowana na kolekcji wyśrodkowalnej jak dwie pierwsze konstrukcje, ale zamiast tego działa w pętli do momentu, gdy warunek zostanie spełniony.

Użyj dla... in loop for every value in a collection (pętla in dla każdej wartości w kolekcji)

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

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

Ważne jest zrozumienie niektórych słów kluczowych:

  • Wzorzec: wzorcem może być bieżący element lub krotka. Przykładem jest iterowanie po sekwencji. Poniższy kod jest przykładem sytuacji, w których wzorzec jest bieżącą wartością i. Iteruje for po liście list , 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, przez co iterujesz. Może to być lista lub sekwencja.

  • Wyrażenie-treści: Wyrażenie treści to miejsce, w którym wykonuje się zadanie, takie jak drukowanie lub wykonywanie obliczeń.

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

Konstrukcja for...to jest nieco inna niż pętla for...in . Zmienna for...to pętli stanowi granicę miejsca, w którym należy zatrzymać iterowanie. 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 przypisaną. Zazwyczaj decydujesz, którą zmienną chcesz śledzić w ramach iteracji i od jakiej wartości powinna zacząć.
  • [to | downto]: możesz wybrać jeden z dwóch różnych słów kluczowych. to oznacza, że pętla iteruje do tej liczby. W przypadku użycia downtofunkcji wartość identyfikatora zmniejsza się do momentu osiągnięcia tej liczby.

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

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 zakresie od 1 do 10, w tym 10. Przyjrzyjmy się przykładowi, który również używa konstrukcji downto . Ta konstrukcja działa podobnie do to, ale w odwrotnej kolejności. Poniższy kod pokazuje, jak zamiast tego można drukować liczby od 10 do 1:

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

Użyj chwilę... pętla "do" do momentu, gdy warunek zostanie spełniony

Konstrukcja while...do różni się od konstrukcji for...in i for...to . while...do nie iteruje po kolekcji. Zamiast tego należy użyć pętli while...do , jeśli masz logikę, która musi pętlować do momentu, gdy warunek zostanie spełniony. Przykładem jest akceptowanie argumentów wiersza polecenia do momentu zamknięcia aplikacji przez użytkownika.

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

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

Gra zgadywanie jest przykładem użycia konstrukcji while...do :

  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 nie quit ma wartości true. Po ustawieniu wartości dla na quittrue, gdy użytkownik zgadnie poprawnie, pętla kończy się.