4.4. Instrukcje pętli

Scala posiada instrukcję pętli while oraz instrukcję pętli do. Obie zawierają słowo kluczowe while. Składnia obu instrukcji jest następująca:

Obie konstrukcje są wyrażeniami zwracającymi wartość typu Unit. W obu z nich, naprzemiennie, dokonywana jest ewaluacja warunku logicznego i wyrażenia. Wyrażenie jest wykonywane cyklicznie tak długo, jak długo warunek będący wyrażeniem logicznym przyjmuje wartość true. Różnią się tym, że pierwsza konstrukcja rozpoczyna swoje wykonywanie od sprawdzenia warunku, a druga rozpoczyna od ewaluacji wyrażenia. W konsekwencji jest możliwe, że w przypadku pierwszej konstrukcji wyrażenie nie zostanie w ogóle wykonane, natomiast w drugim przypadku będzie zawsze wykonane przynajmniej raz.

Pętla while jest użyta w metodzie hello1, zdefiniowanej w pliku While1.scala.

Plik While1.scala:
def hello1(n: Int) {
  var j = 0
  while(j < n) {
    println("Hello!")
    j = j + 1
  }
}

W przypadku wywołania hello1 z wartością 0 lub mniejszą, metoda nie wypisuje żadnego komunikatu.

scala> :load While1.scala
Loading While1.scala...
hello1: (n: Int)Unit

scala> hello1(-1)

scala> hello1(0)

scala> hello1(1)
Hello!

scala> hello1(2)
Hello!
Hello!

W pliku While2.scala zdefiniowana jest metoda hello2, w której treści użyta jest pętla do.

Plik While2.scala:
def hello2(n: Int) {
  var j = 0
  do {
    println("Hello!")
    j = j + 1
  } while(j < n)
}

Metoda hello2 wypisuje przynajmniej jeden komunikat niezależnie od wartości przekazanego argumentu.

scala> :load While2.scala
Loading While2.scala...
hello2: (n: Int)Unit

scala> hello2(-1)
Hello!

scala> hello2(0)
Hello!

scala> hello2(1)
Hello!

scala> hello2(2)
Hello!
Hello!

Specyfikacja języka Scala opisuje pętlę while w punkcie 6.17, a pętlę do w punkcie 6.18.

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.