7.1. Definiowanie metod

Metody są składowymi klas i obiektów definiowanymi za pomocą słowa kluczowego def. Definicja prostej metody bezparametrowej może wyglądać podobnie do definicji wartości lub zmiennej.

Plik Methods1.scala:
class Methods1 {
  val a = 1
  def b = 1
}

W klasie Methods1, z pliku Methods1.scala, zdefiniowana jest wartość a oraz metoda b. Definicja obu składowych różni się użytym słowem kluczowym.

scala> val m = new Methods1
m: Methods1 = Methods1@833051

scala> m.a
res0: Int = 1

scala> m.b
res1: Int = 1

Obie składowe — a i b — są wywoływane w ten sam sposób i zwracają ten sam wynik. Przykład z pliku Methods2.scala ilustruje różnice w sposobie obliczania wyniku dla wartości i metod. Definicje składowych a i b są uzupełnione o wywołania metody println, dzięki którym można się przekonać, w którym momencie kod jest uruchamiany.

Plik Methods2.scala:
class Methods2 {
  val a = { println("a!"); 1 }
  def b = { println("b!"); 1 }
}

W przypadku definicji wartości a, wyrażenie po prawej stronie znaku = jest wykonywane tylko raz, w czasie tworzenia instancji. Natomiast w przypadku definicji metody b, wyrażenie po prawej stronie jest ewaluowane nie w czasie tworzenia obiektu, a za każdym razem podczas wykonywania metody.

scala> val m = new Methods2
a!
m: Methods2 = Methods2@b06251

scala> m.a
res2: Int = 1

scala> m.b
b!
res3: Int = 1

Komunikat „a!” jest wyświetlany przy tworzeniu instancji klasy Methods2, ale nie jest wyświetlany przy odwoływaniu się do składowej a. Komunikat „b!” — odwrotnie — jest wyświetlany przy uzyskiwaniu dostępu do składowej b, ale nie jest wyświetlany przy tworzeniu instancji.

Specyfikacja języka Scala opisuje definiowanie i deklarowanie metod w punkcie 4.6.

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.