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:
- liter i cyfr (w tym znaków $ oraz _ zaliczanych do liter)
- nawiasów, czyli znaków: ( ) { } [ ]
- znaków rozdzielających, czyli znaków: ' ` " ; , .
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 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. |
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++`)


