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. |
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 
