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