2.1. Identyfikatory

Identyfikatory mogą być tworzone na kilka sposobów. Po pierwsze, mogą składać się z ciągu liter i cyfr, przy czym pierwszym znakiem takiego ciągu musi być litera, a nie cyfra. Do liter zaliczane są również znaki $ oraz _. Znak $ jest zarezerwowany dla identyfikatorów tworzonych przez kompilator i nie powinien być używany w zwykłych programach. Przykłady: c, PI, charA, abc_123, pięćdziesiąt_pięć, Δ, Πint.

Po drugie, identyfikatorem może być ciąg operatorów, to znaczy ciąg znaków należących do kategorii symboli matematycznych lub innych symboli w kodzie Unicode, a także drukowalnych znaków ASCII z przedziału 21–7F (szesnastkowo), z wyjątkiem:

Przykłady: +, -, ::, !, ?, ++++----!!!!, , -∞.

Po trzecie, identyfikatorem może być ciąg złożony z identyfikatora pierwszego rodzaju, złożonego z liter i cyfr, po którym następuje znak podkreślenia oraz identyfikator drugiego rodzaju — złożony z operatorów. Przykłady: Hello_+, Dużo_!!!!, min_℃.

Wreszcie po czwarte, identyfikatorem może być ciąg znaków ujętych w odwrotne apostrofy `. Przykłady: `c++`, `Jak leci?`.

W pliku Identifiers.scala znajduje się plik, w którym zdefiniowane zostały wartości mające różne identyfikatory. Dodatkowo, plik zawiera polecenia println wyświetlające wartości przypisane identyfikatorom.

Plik Identifiers.scala:
val c = 1
val PI = 3.14159
val charA = 'A'
val abc_123 = "abc_123"
val pięćdziesiąt_pięć = 55
val Δ = 0.05
val Πint = 3
val ++++****!!!! = "++++****!!!!"
val ∞ = java.lang.Long.MAX_VALUE
val -∞ = java.lang.Long.MIN_VALUE
val Dużo_!!!! = 99999999
val min_℃ = -273
val `Jak leci?` = "Jak leci?"
val `c++` = 2

println(c)
println(PI)
println(charA)
println(abc_123)
println(pięćdziesiąt_pięć)
println(Δ)
println(Πint)
println(++++****!!!!)
println(∞)
println(-∞)
println(Dużo_!!!!)
println(min_℃)
println(`Jak leci?`)
println(`c++`)

Tak zdefiniowany plik możemy uruchomić jako skrypt za pomocą polecenia scala. Oto wynik wykonania skryptu. W poleceniu uruchamiającym użyta została dodatkowo opcja -encoding określająca sposób zakodowania znaków.

$ scala -encoding utf-8 Identifiers.scala
1
3.14159
A
abc_123
55
0.05
3
++++****!!!!
9223372036854775807
-9223372036854775808
99999999
-273
Jak leci?
2

Kompilator zastępuje identyfikatory zawierające znaki operatorów identyfikatorami, w których te znaki są reprezentowane nazwami poprzedzonymi znakiem dolara. W przykładzie z pliku HelloIds.scala użyte są identyfikatory Hello_+, ! oraz ?.

Plik HelloIds.scala:
class Hello_+(name: String) {
  def ! = println("Hello "+name+"!")
  def ? = println("How are you "+name+"?")
}

Nazwa utworzonej klasy to Hello_$plus. Nazwy metod utworzone przez kompilator w tej klasie to $bang (odpowiednik metody !) oraz $qmark (odpowiednik metody ?). Z programów pisanych w języku Scala można się odwoływać do tych identyfikatorów w sposób taki, w jaki są zdefiniowane w pliku źródłowym lub za pomocą identyfikatorów wygenerowanych przez kompilator.

scala> val h = new Hello_+("Peter")
h: Hello_+ = Hello_$plus@6374ef

scala> val h2 = new Hello_$plus("Peter")
h2: Hello_+ = Hello_$plus@47b187

scala> h.!
Hello Peter!

scala> h.$bang
Hello Peter!

scala> h.?
How are you Peter?

scala> h.$qmark
How are you Peter?

Odwołując się z programów pisanych w języku Java do identyfikatorów zawierających znaki operatorów należy używać takich postaci tych identyfikatorów, jakie występują w skompilowanej klasie.

Plik HelloIdsTest.java:
class HelloIdsTest {
  public static void main(String[] args) {
    Hello_$plus h = new Hello_$plus(args[0]);
    h.$bang();
    h.$qmark();
  }
}

Plik HelloIdsTest.java przedstawia program napisany w języku Java, korzystający z klasy Hello_+ oraz z jej metod.

$ java -cp .;L:/scala-2.11.7/lib/scala-library.jar HelloIdsTest Peter
Hello Peter!
How are you Peter?

Użyta opcja -cp .;S:/lib/scala-library.jar ustawia ścieżkę klas uwzględniając w niej jeden z plików jar biblioteki standardowej języka Scala.

Specyfikacja języka Scala opisuje identyfikatory w punkcie 1.1.

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.