5.2. Wartości, zmienne, metody i typy

W ciele klasy można definiować lub deklarować:

W pliku ClassMembers1.scala znajduje się definicja klasy zawierająca wszystkie cztery wymienione elementy.

Plik ClassMembers1.scala:
class Hello {
  type T = String
  val hello: String = "Hello"
  var name: T = "John"
  def greet: String =
    hello + " " + name
}

Instrukcja type definiuje T jako alias typu String. Instrukcja val definiuje wartość niezmienną o nazwie hello i typie String oraz przypisuje jej napis „Hello”. Instrukcja var definiuje zmienną name typu T i przypisuje jej napis „John”. Instrukcja def definiuje metodę o nazwie greet, zwracającą rezultat typu String.

Do składowych instancji klasy odwołujemy się podając po odwołaniu do instancji kropkę i nazwę składowej. Do składowej klasy będącej typem odwołujemy się dodając do nazwy klasy znak # i nazwę typu.

scala> val a = new Hello
a: Hello = Hello@6374ef

scala> a.hello
res0: String = Hello

scala> a.name
res1: a.T = John

scala> a.name = "Peter"
a.name: a.T = Peter

scala> a.name
res2: a.T = Peter

scala> a.greet
res3: String = Hello Peter

scala> val x: a.T = "X"
x: a.T = X

scala> val y: Hello#T = "Y"
y: String = Y

Specyfikacja języka Scala opisuje odwołania do typów będących składowymi w punkcie 3.2.2.

Definicje wartości i zmiennych mogą zawierać jawne określenie ich typu. Definicje metod mogą zawierać jawne określenie typu rezultatu. W wielu przypadkach jawne deklaracje typu można pominąć i pozwolić kompilatorowi samodzielnie wywnioskować typ. W pliku ClassMembers2.scala znajduje się definicja klasy Hello2, w której — w porównaniu z definicją klasy Hello — usunięte zostały jawne deklaracje typów definiowanej metody, zmiennej i wartości niezmiennej. Mimo to klasa kompiluje się poprawnie.

Plik ClassMembers2.scala:
class Hello2 {
  type T = String
  val hello = "Hello"
  var name = "John"
  def greet =
    hello + " " + name
}

Klasa Hello2 może być używana w sposób podobny do klasy Hello.

scala> val b = new Hello2
b: Hello2 = Hello2@1010bf0

scala> b.hello
res4: String = Hello

scala> b.name
res5: String = John

scala> b.name = "Peter"
b.name: String = Peter

scala> b.name
res6: String = Peter

scala> b.greet
res7: String = Hello Peter

scala> val x: b.T = "X"
x: b.T = X

scala> val y: Hello2#T = "Y"
y: String = Y

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.