17.1. Wyrażenie return

Wyrażenie return służy do kończenia działania metody. Po słowie kluczowym return może opcjonalnie pojawić się wyrażenie. Wartość tego wyrażenia staje się rezultatem metody (wyjątkiem może być sytuacja wywołania metody return w wyrażeniu try z klauzulą finally, co zostanie opisane dalej). Jeśli po słowie kluczowym return nie ma wyrażenia, to wynikiem metody jest ().

Plik Return1.scala:
def div10(a: Int, b: Int): Int = {
  var result = 0
  var j = a
  while(j < b) {
    if (j % 10 == 0) return j 
    j = j + 1
  }
  return 0 
}

Metoda div10, z pliku Return1.scala, szuka pierwszej z liczb podzielnych przez 10 z podanego przedziału. Jeśli takiej liczby nie znajdzie, to zwraca liczbę 0. Szukanie zaimplementowane jest przy pomocy pętli while. W przypadku znalezienia liczby podzielnej przez 10, zakończenie działania metody następuje poprzez wywołanie wyrażenia return w wierszu . Jeśli taka liczba nie zostanie znaleziona, to wynikiem metody staje się liczba 0 zwrócona za pomocą wyrażenia return z wiersza .

scala> :load Return1.scala
Loading Return1.scala...
div10: (a: Int, b: Int)Int

scala> div10(4,7)
res0: Int = 0

scala> div10(14, 34)
res1: Int = 20

Użycie wyrażenia return jest możliwe tylko w ciele metody. Poniższa próba użycia go poza ciałem metody powoduje błąd.

scala> return 1
<console>:11: error: return outside method definition
       return 1
       ^

Metoda, w której jest używana instrukcja return, musi mieć jawnie określony typ rezultatu. W definicji poniższej metody tego brakuje.

scala> def f = return 1
<console>:10: error: method f has return statement; needs result type
       def f = return 1
               ^

Po dodaniu jawnej deklaracji typu metoda może być prawidłowo zdefiniowana.

scala> def f:Int = return 1
f: Int

Metody zadeklarowane jako procedury uznaje się za metody z zadeklarowanym typem rezultatu. W takich metodach można użyć instrukcji return.

Plik Return2.scala:
def hello(name: String) {
  if (name == null) return
  println("Hello " + name + "!")
}

Przykładem takiej metody jest metoda hello z pliku Return2.scala.

scala> :load Return2.scala
Loading Return2.scala...
hello: (name: String)Unit

scala> hello(null)

scala> hello("Peter")
Hello Peter!

Oczywiście typ wyrażenia użytego w instrukcji return musi być kompatybilny z zadeklarowanym typem rezultatu metody lub funkcji. W poniższej definicji typ jej wyniku nie zgadza się z typem wyrażenia w instrukcji return, co powoduje błąd.

scala> def f:Int = return true
<console>:10: error: type mismatch;
 found   : Boolean(true)
 required: Int
       def f:Int = return true
                          ^

Specyfikacja języka Scala opisuje wyrażenie return w punkcie 6.20.

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.