4.3. Bloki
Jednym z wyrażeń, które mogą być używane w języku Scala, jest blok. Blok jest sekwencją instrukcji objętą nawiasami klamrowymi. Jeśli ostatnią instrukcją bloku jest wyrażenie, to jego wartość definiuje rezultat całego bloku. Jeśli na końcu bloku jest instrukcja nie będąca wyrażeniem, na przykład definicja, to rezultatem bloku jest wartość ().
scala> { val a = 10; a+5 } res0: Int = 15 scala> { hello; def hello = println("Hello") } Hello scala> { println("calculating sum"); 1+2+3+4 } calculating sum res2: Int = 10
W poniższym przykładzie metoda println jest wywoływana dwa razy w przypadku niespełnienia warunku wyrażenia warunkowego. Oba wywołania są zgrupowane przez umieszczenie ich w jednym bloku.
scala> val a = 0 a: Int = 0 scala> if (a < 0) println("negative") else { | println("positive ") | println("or 0") | } positive or 0
Blok może zawierać definicje, na przykład definicje metod, co może służyć to definiowania jednej metody w ciele innej. W pliku MethodInBlock.scala zdefiniowana jest metoda hello3, której definicja składa się z bloku, w którym zdefiniowana jest inna metoda — hello_! — a następnie ta metoda zostaje trzy razy wywołana.
Plik MethodInBlock.scala: def hello3(name: String) = { def hello_! = println("Hello "+name+"!") hello_! hello_! hello_! }
Zwróćmy uwagę, że definicja metody hello_! nie potrzebuje parametrów, gdyż z tej definicji można odwołać się do parametru metody hello3.
scala> :load MethodInBlock.scala Loading MethodInBlock.scala... hello3: (name: String)Unit scala> hello3("Paul") Hello Paul! Hello Paul! Hello Paul!
Specyfikacja języka Scala opisuje bloki w punkcie 6.11. |