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.

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.