Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop. 2016 Spis treści Przedmowa 1 Stosowana notacja 1 1. Wprowadzenie 3 1.1. Konsola interaktywna języka Scala 3 1.2. Zmienne 5 1.3. Wartości niezmienne 6 1.4. Metody 7 1.5. Klasy i obiekty 8 1.6. Kompilacja 9 2. Podstawy składni 11 2.1. Identyfikatory 11 2.2. Znaki końca wiersza 13 2.3. Komentarze 16 3. Podstawowe typy danych 19 3.1. Liczby całkowite 19 3.2. Liczby zmiennoprzecinkowe 21 3.3. Konwersje liczbowych typów danych 22 3.4. Wartości logiczne 23 3.5. Typ Unit 23 3.6. Klasa Any 24 3.7. Klasa AnyVal 25 3.8. Klasa AnyRef 25 3.9. Typ Nothing 26 3.10. Typ Null 27 3.11. Łańcuchy znakowe 28 3.12. Symbole 30 4. Wyrażenia sterujące 33 4.1. Wyrażenie warunkowe 33 4.2. Słaba zgodność i typ wyrażenia warunkowego 33 4.3. Bloki 35 4.4. Instrukcje pętli 36 5. Klasy 39 5.1. Definiowanie klas 39
5.2. Wartości, zmienne, metody i typy 39 5.3. Przestrzenie nazw 41 5.4. Zmienne i wartości publiczne 42 5.5. Parametry klasy 43 5.6. Definiowanie kilku wartości lub zmiennych 46 5.7. Wartości domyślne zmiennych składowych klas 47 5.8. Konstruktory 48 5.9. Wartości leniwe 50 5.10. Klasy wewnątrz klas 52 5.11. Dziedziczenie 54 5.12. Przedrostek super 57 5.13. Nadpisywanie różnych rodzajów składowych 57 5.14. Klasy abstrakcyjne 59 5.15. Klasy i składowe finalne 61 5.16. Pieczętowanie klas 62 5.17. Klasy wartości 62 6. Cechy 65 6.1. Definiowanie cech 65 6.2. Typ złożony 68 6.3. Linearyzacja 69 6.4. Przedrostek super 71 6.5. Modyfikatory abstract override 72 6.6. Parametry 74 6.7. Typ własny 76 7. Metody 79 7.1. Definiowanie metod 79 7.2. Parametry metod 80 7.3. Typ rezultatu metody 80 7.4. Procedury 82 7.5. Argumenty pozycyjne i nazwane 82 7.6. Argumenty domyślne 83 7.7. Parametry powtórzone 84 7.8. Parametry przekazywane przez nazwę 85 7.9. Metody bezparametrowe 87 7.10. Metody z kilkoma listami parametrów 90 7.11. Przeciążanie metod 91 7.12. Metody apply i update 92 7.13. Operacje prefiksowe 93 7.14. Operacje postfiksowe 94 7.15. Operacje infiksowe 95 7.16. Specjalne traktowanie operatorów przypisania 98 7.17. Cecha Dynamic 99 7.18. Rekurencja ogonowa 101
8. Obiekty 105 8.1. Definiowanie obiektów 105 8.2. Klasy i obiekty towarzyszące 106 8.3. Dziedziczenie 109 8.4. Typy singletonowe 109 9. Typy ogólne 111 9.1. Typy zawierające parametry 111 9.2. Ograniczenia górne 112 9.3. Ograniczenia dolne 114 9.4. Niezmienniczość 115 9.5. Kowariantne parametry typu 118 9.6. Kontrawariantne parametry typu 119 9.7. Ograniczenia typów kowariantnych i kontrawariantnych 121 9.8. Typy egzystencjalne 122 9.9. Więcej o nadpisywaniu składowych 126 9.10. Przykłady typów ogólnych 127 9.11. Typy wyższego rzędu 134 10. Programy i skrypty 137 10.1. Metoda main 137 10.2. Cecha App 138 10.3. Skrypty 138 10.4. Polecenie fsc 139 10.5. Inne sposoby uruchamiania programów 140 11. Funkcje 143 11.1. Funkcje są obiektami 143 11.2. Funkcje anonimowe 144 11.3. Funkcja jako argument 146 11.4. Przekształcanie metod w funkcje 147 11.5. Częściowe wywołanie metody lub funkcji 149 11.6. Domknięcia 150 11.7. Przekształcanie parametrów przekazywanych przez nazwę w funkcje 151 11.8. Funkcje częściowe 152 11.9. Przekształcanie i składanie funkcji 153 12. Pakiety 157 12.1. Definiowanie pakietów 157 12.2. Obiekt pakietowy 159 12.3. Konflikty nazw 160 13. Klauzule importu 163 13.1. Używanie klauzul importu 163 13.2. Umieszczanie w kodzie klauzul importu 166
13.3. Przedrostek _root_ 168 13.4. Standardowe importy 169 13.5. Flagi funkcjonalności 170 13.6. Wiązania 172 14. Dopasowywanie wzorców 177 14.1. Wyrażenie match 177 14.2. Literały i identyfikatory we wzorcach 178 14.3. Znak podkreślenia we wzorcach 179 14.4. Zmienne we wzorcach 180 14.5. Typy we wzorcach 181 14.6. Krotki we wzorcach 184 14.7. Klasy przypadku we wzorcach 185 14.8. Dopasowywanie sekwencji wartości we wzorcach klas przypadku 186 14.9. Wiązanie zmiennej za pomocą znaku @ 187 14.10. Alternatywa wzorców 188 14.11. Dozory 189 14.12. Ekstraktory 190 14.13. Wzorce w postaci operacji infiksowych 194 14.14. Użycie wzorców przy definiowaniu zmiennych i wartości niezmiennych 194 14.15. Definiowanie funkcji za pomocą ciągu klauzul case 195 15. Klasy i obiektu przypadku 197 15.1. Definiowanie klas przypadku 197 15.2. Metody equals, hashcode, tostring 198 15.3. Kopiowanie instancji klas przypadku 199 15.4. Metody apply, unapply i unapplyseq 200 15.5. Obiekty przypadku 202 15.6. Klasy przypadku a dziedziczenie 202 16. Uprawnienia 203 16.1. Uprawnienia publiczne 203 16.2. Uprawnienia prywatne 203 16.3. Uprawnienia prywatne w ramach obiektu 205 16.4. Kwalifikowany dostęp prywatny 206 16.5. Dostęp chroniony 207 16.6. Kwalifikowany dostęp chroniony 209 17. Wyjątki i wyrażenie return 213 17.1. Wyrażenie return 213 17.2. Wyrzucanie wyjątków 214 17.3. Wyrażenie try 216 17.4. Klauzula catch 217 17.5. Klauzula finally 219 17.6. Wyrażenie try z klauzulami catch i finally 220
17.7. Wyrażenie return w anonimowych funkcjach 221 17.8. Zamiana wyjątków na wartości 222 18. Kolekcje 225 18.1. Polimorfizm kolekcji 225 18.2. Sekwencje, mapy i zbiory 226 18.3. Kolekcje zmienne i niezmienne 228 18.4. Metody kolekcji 230 18.5. Klasa Source 242 18.6. Inne obiekty 243 18.7. Konwersje 244 19. Pętla for 249 19.1. Pętla for 249 19.2. Wyrażenie for 251 19.3. Przekształcenia pętli i wyrażenia for 251 19.4. Własne typy w pętli i wyrażeniu for 252 20. Modyfikator implicit 255 20.1. Lista parametrów przekazywanych niejawnie 255 20.2. Modyfikator implicit w funkcjach anonimowych 259 20.3. Odnajdywanie wartości przekazywanych niejawnie 260 20.4. Niejawne konwersje 263 20.5. Konflikty w definicjach konwersji 266 20.6. Ograniczenia widoku 268 20.7. Ograniczenia kontekstu 270 20.8. Klasa StringContext 271 21. XML 275 21.1. Tworzenie struktur XML-owych 275 21.2. Klasa scala.xml.node 276 21.3. Klasa scala.xml.nodeseq 277 21.4. Tworzenie struktur XML bez pomocy specjalnej składni 278 21.5. Wzorce XML 278 21.6. Słownik 281 22. Programowanie współbieżne 285 22.1. Obliczenia asynchroniczne 285 22.2. Aktorzy przykład 1 288 22.3. Aktorzy przykład 2 290 22.4. Synchronizacja 292 23. Adnotacje 295 23.1. Tworzenie adnotacji 295 23.2. Umieszczanie adnotacji w kodzie 296 23.3. Adnotacja deprecated 297
23.4. Adnotacja throws 298 23.5. Adnotacja tailrec 299 23.6. Adnotacja unchecked 300 23.7. Adnotacja volatile 300 23.8. Adnotacja implicitnotfound 302 24. Języki dostosowane do dziedziny 303 24.1. Wewnętrzne DSL 303 24.2. Metoda unless 304 24.3. Wyrażenie either/or 304 24.4. Język służący do tworzenia dat 305 24.5. Przekształcanie obrazków 306 25. Studium przypadku program grający w szachy 313 25.1. sbt 313 25.2. Kolory, figury i pola 314 25.3. Reguły poruszania się figur 318 25.4. Rodzaje ruchów 321 25.5. Plansza 321 25.6. Partia 324 25.7. Ocena sytuacji na planszy 329 25.8. Ruchy komputera 331 25.9. Interfejs użytkownika 333 Tłumaczenia wybranych terminów 343 oprac. BPK