Scala od podszewki.pdf

(929 KB) Pobierz
994412916.001.png
Tytuł oryginału: Scala in Depth
Tłumaczenie: Justyna Walkowska
Projekt okładki: Anna Mitka
Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock Images LLC.
ISBN: 978-83-246-5188-7
Original edition copyright 2012 by Manning Publications, Co.
All rights reserved.
Polish edition copyright 2013 by HELION SA.
All rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani
za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich.
Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne
szkody wynikłe z wykorzystania informacji zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/scalao
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
Kup książkę
Poleć książkę
Oceń książkę
Księgarnia internetowa
994412916.002.png
Spis treci
Sowo wstpne ............................................................................................................................................ 7
Przedmowa ................................................................................................................................................. 9
Podzikowania .......................................................................................................................................... 11
O ksice ................................................................................................................................................... 13
Rozdzia 1. Scala: jzyk mieszany
17
1.1.
Programowanie funkcyjne i obiektowe w jednym .................................................................... 18
1.1.1.
Koncepty funkcyjne ......................................................................................................20
1.1.2.
Analiza konceptów funkcyjnych w Google Collections .............................................. 22
1.2.
Statyczne typowanie a ekspresywno kodu ............................................................................. 23
1.2.1.
Zamiana stron ................................................................................................................ 24
1.2.2.
Wnioskowanie na temat typów ..................................................................................... 24
1.2.3.
Uproszczona skadnia ....................................................................................................25
1.2.4.
Wartoci i konwersje domniemane .............................................................................. 26
1.2.5.
Sowo kluczowe implicit ............................................................................................... 27
1.3.
Wygodna wspópraca z JVM ....................................................................................................... 28
1.3.1.
Java w Scali .................................................................................................................... 28
1.3.2.
Scala w Javie .................................................................................................................. 29
1.3.3.
Zalety JVM ..................................................................................................................... 30
1.4.
Podsumowanie .............................................................................................................................. 31
Rozdzia 2. Podstawowe zasady
33
2.1.
Eksperymenty w rodowisku REPL ........................................................................................... 33
2.1.1.
Programowanie sterowane eksperymentami ............................................................... 34
2.1.2.
Obejcie zachannego parsowania ................................................................................ 36
2.1.3.
Elementy jzyka niedostpne w REPL ....................................................................... 37
2.2.
Mylenie wyraeniami ................................................................................................................. 38
2.2.1.
Unikanie instrukcji return ............................................................................................ 39
2.2.2.
Modyfikowalno ........................................................................................................... 41
2.3.
Obiekty niemodyfikowalne ......................................................................................................... 43
2.3.1.
Równowano obiektów .............................................................................................. 44
2.3.2.
Wspóbieno ............................................................................................................... 48
2.4.
None zamiast null ......................................................................................................................... 51
2.4.1.
Zaawansowane techniki wykorzystania klasy Option ................................................. 52
2.5.
Równowano polimorficzna ..................................................................................................... 55
2.5.1.
Przykad: biblioteka obsugujca kalendarz ................................................................. 55
2.5.2.
Polimorficzna implementacja metody equals .............................................................. 57
2.6.
Podsumowanie .............................................................................................................................. 59
4
Spis treci
Rozdzia 3. Par sów na temat konwencji kodowania
61
3.1.
Unikanie konwencji pochodzcych z innych jzyków .............................................................. 62
3.1.1.
Poraka z blokami kodu ................................................................................................ 63
3.2.
Wiszce operatory i wyraenia w nawiasach ............................................................................ 66
3.3.
Znaczce nazwy zmiennych ........................................................................................................ 67
3.3.1.
Unikanie w nazwach znaku $ ....................................................................................... 68
3.3.2.
Parametry nazwane i wartoci domylne ..................................................................... 71
3.4.
Oznaczanie przesaniania metod ................................................................................................ 73
3.5.
Adnotacje optymalizacyjne ......................................................................................................... 78
3.5.1.
Optymalizacja tableswitch ............................................................................................ 79
3.5.2.
Optymalizacja wywoa ogonowych ............................................................................ 81
3.6.
Podsumowanie .............................................................................................................................. 84
Rozdzia 4. Obiektowo
85
4.1.
W ciele obiektu lub cechy — tylko kod inicjalizujcy ............................................................. 86
4.1.1.
Opóniona inicjalizacja .................................................................................................86
4.1.2.
Wielokrotne dziedziczenie ........................................................................................... 87
4.2.
Puste implementacje metod abstrakcyjnych w cechach .......................................................... 89
4.3.
Kompozycja moe obejmowa dziedziczenie ............................................................................ 93
4.3.1.
Kompozycja i dziedziczenie razem .............................................................................. 96
4.3.2.
Klasyczne konstruktory… z niespodziank ................................................................. 97
4.4.
Wydzielenie interfejsu abstrakcyjnego do postaci osobnej cechy .......................................... 99
4.4.1.
Interfejsy, z którymi mona porozmawia ................................................................. 101
4.4.2.
Nauka pynca z przeszoci ....................................................................................... 102
4.5.
Okrelanie typów zwracanych przez publiczne API .............................................................. 103
4.6.
Podsumowanie ............................................................................................................................ 105
Rozdzia 5. Domniemane wartoci i widoki podstaw ekspresywnego kodu
107
5.1.
Sowo kluczowe implicit ............................................................................................................ 108
5.1.1.
Identyfikatory (dygresja) ............................................................................................. 109
5.1.2.
Zakres i wizania ......................................................................................................... 111
5.1.3.
Wyszukiwanie wartoci domniemanych .................................................................... 115
5.2.
Wzmacnianie klas za pomoc domniemanych widoków ....................................................... 119
5.3.
Parametry domniemane i domylne ........................................................................................ 124
5.4.
Ograniczanie zakresu encji domniemanych ........................................................................... 130
5.4.1.
Przygotowywanie encji domniemanych do zaimportowania .................................... 131
5.4.2.
Parametry i widoki domniemane bez podatku od importu ...................................... 133
5.5.
Podsumowanie ............................................................................................................................ 137
Rozdzia 6. System typów
139
6.1.
Typy ............................................................................................................................................. 140
6.1.1.
Typy i cieki ............................................................................................................... 141
6.1.2.
Sowo kluczowe type ................................................................................................... 143
6.1.3.
Typy strukturalne ........................................................................................................ 144
6.2.
Ograniczenia typów ................................................................................................................... 151
6.3.
Parametry typu i typy wyszego rzdu .................................................................................... 153
6.3.1.
Ograniczenia parametrów typu .................................................................................. 153
6.3.2.
Typy wyszego rzdu .................................................................................................. 155
Spis treci
5
6.4.
Wariancja .................................................................................................................................... 156
6.4.1.
Zaawansowane adnotacje wariancji ........................................................................... 160
6.5.
Typy egzystencjalne ................................................................................................................... 163
6.5.1.
Formalna skadnia typów egzystencjalnych .............................................................. 165
6.6.
Podsumowanie ............................................................................................................................ 167
Rozdzia 7. czenie typów z wartociami i widokami domniemanymi
169
7.1.
Ograniczenia kontekstu i ograniczenia widoku ...................................................................... 170
7.1.1.
Kiedy stosowa domniemane ograniczenia typu? ..................................................... 171
7.2.
Dodawanie typów do parametrów domniemanych ................................................................ 172
7.2.1.
Manifesty ..................................................................................................................... 172
7.2.2.
Korzystanie z manifestów ........................................................................................... 173
7.2.3.
Ograniczenia typu ....................................................................................................... 175
7.2.4.
Wyspecjalizowane metody ......................................................................................... 177
7.3.
Klasy typu .................................................................................................................................... 178
7.3.1.
FileLike jako klasa typu .............................................................................................. 181
7.3.2.
Zalety klas typu ............................................................................................................ 184
7.4.
Egzekucja warunkowa z uyciem systemu typów ................................................................... 185
7.4.1.
Heterogeniczne listy typowane .................................................................................. 187
7.4.2.
Cecha IndexedView .................................................................................................... 190
7.5.
Podsumowanie ............................................................................................................................ 196
Rozdzia 8. Wybór odpowiedniej kolekcji
197
8.1.
Wybór odpowiedniego rodzaju kolekcji .................................................................................. 198
8.1.1.
Hierarchia kolekcji ...................................................................................................... 198
8.1.2.
Traversable .................................................................................................................. 200
8.1.3.
Iterable ......................................................................................................................... 203
8.1.4.
Seq ............................................................................................................................... 204
8.1.5.
LinearSeq .................................................................................................................... 205
8.1.6.
IndexedSeq .................................................................................................................. 207
8.1.7.
Set ................................................................................................................................ 208
8.1.8.
Map .............................................................................................................................. 208
8.2.
Kolekcje niemodyfikowalne ...................................................................................................... 210
8.2.1.
Vector ........................................................................................................................... 210
8.2.2.
List ............................................................................................................................... 212
8.2.3.
Stream .......................................................................................................................... 213
8.3.
Kolekcje modyfikowalne ........................................................................................................... 216
8.3.1.
ArrayBuffer .................................................................................................................. 217
8.3.2.
Nasuchiwanie zdarze zmiany kolekcji za pomoc domieszek ............................... 217
8.3.3.
Synchronizacja z uyciem domieszek ........................................................................ 218
8.4.
Zmiana czasu ewaluacji za pomoc widoków i kolekcji równolegych ................................. 218
8.4.1.
Widoki .......................................................................................................................... 219
8.4.2.
Kolekcje równolege ................................................................................................... 221
8.5.
Pisanie metod, które mona wykorzysta na wszystkich typach kolekcji ............................ 223
8.5.1.
Optymalizacja algorytmów dla rónych typów kolekcji ............................................ 226
8.6.
Podsumowanie ............................................................................................................................ 229
Zgłoś jeśli naruszono regulamin