E-book details

Programowanie w języku Kotlin. The Big Nerd Ranch Guide

Programowanie w języku Kotlin. The Big Nerd Ranch Guide

Josh Skeen, David Greenhalgh

Ebook

Gdy w 2017 roku na konferencji Google ogłoszono, że Kotlin jest jednym z oficjalnie wspieranych języków programowania aplikacji dla Androida, język ten błyskawicznie stał się popularny. Najpoważniejsze firmy technologiczne doceniają jego zalety, takie jak zwarta składnia i integracja z kodem Javy. Co ważne, twórcy Kotlina czerpali z doświadczeń projektantów Javy i zapewnili, że te dwa języki są ze sobą ściśle powiązane. W ten sposób świeżość rozwiązań i nowoczesne mechanizmy zostały znakomicie połączone z najlepszymi cechami Javy, a Kotlin stał się wszechstronnym wieloplatformowym językiem programowania.

Ta książka jest przeznaczona dla programistów, którzy chcą poznać język o możliwościach wykraczających poza Javę i pisać solidne aplikacje dla różnych platform. Pozwala w praktyczny sposób zapoznać się z unikalnymi możliwościami Kotlina i - na podstawie licznych przykładowych projektów - stopniowo zgłębiać złożone zagadnienia. Znakomitym uzupełnieniem prezentowanych treści są informacje o wewnętrznych mechanizmach działania języka wraz z ćwiczeniami do samodzielnego wykonania. Dzięki tej książce nawet początkujący programista szybko zacznie pisać efektywne i solidne aplikacje, które będą służyć użytkownikom różnych platform.

W tej książce między innymi:

  • wprowadzenie do Kotlina
  • funkcje w Kotlinie, w tym funkcje anonimowe
  • praca na obiektach: dziedziczenie, klasy, klasy abstrakcyjne
  • programowanie funkcyjne w Kotlinie
  • najciekawsze biblioteki i współdziałanie z Javą

Big Nerd Ranch mieści się w Atlancie w USA. Firma została założona w 2001 roku przez Aarona Hillegassa, znakomitego programistę i trenera programowania. Jej misją jest krzewienie wiedzy o rozwijających się technologiach mobilnych. Słynie ze świetnych szkoleń i znakomitych trenerów.

Kotlin: najlepsze rozwiązania nie tylko dla Androida!


Podziękowania 13

Przedstawienie Kotlina 15

  • Dlaczego Kotlin? 15
  • Dla kogo jest przeznaczona ta książka? 16
  • Jak korzystać z tej książki? 16
    • Dla ciekawskich 17
    • Wyzwania 17
    • Konwencje typograficzne 17
  • Patrząc w przyszłość 17

1. Pierwsza aplikacja w Kotlinie 19

  • Instalowanie IntelliJ IDEA 19
  • Pierwszy projekt programu w Kotlinie 20
    • Tworzenie pierwszego pliku źródłowego w Kotlinie 25
    • Wykonywanie pliku źródłowego 27
  • Kotlin REPL 29
  • Dla ciekawskich: Dlaczego warto używać właśnie IntelliJ? 30
  • Dla ciekawskich: Pisanie kodu przeznaczonego na JVM 31
  • Wyzwanie: Arytmetyka REPL 32

2. Zmienne, stałe i typy 33

  • Typy 33
  • Deklarowanie zmiennych 34
  • Wbudowane typy języka Kotlin 36
  • Zmienne tylko do odczytu 37
  • Wnioskowanie typów 40
  • Stałe czasu kompilacji 41
  • Oglądanie kodów bajtowych 42
  • Dla ciekawskich: Podstawowe typy danych Javy w Kotlinie 45
  • Wyzwanie: hasSteed 46
  • Wyzwanie: Szynk Hipolit'a 46
  • Wyzwanie: Magiczne lustro 46

3. Instrukcje warunkowe 47

  • Instrukcje if/else 47
    • Dodawanie kolejnych warunków 50
    • Zagnieżdżone instrukcje if/else 52
    • Bardziej eleganckie wyrażenia warunkowe 53
  • Zakresy 59
  • Wyrażenia when 60
  • Szablony łańcuchowe 62
  • Wyzwanie: Eksperymenty z zakresami 64
  • Wyzwanie: Rozbudowa aury 64
  • Wyzwanie: Konfigurowalny format statusu 65

4. Funkcje 67

  • Wyodrębnianie kodu do funkcji 67
  • Anatomia funkcji 69
    • Nagłówek funkcji 70
    • Ciało funkcji 72
    • Zasięg funkcji 73
  • Wywoływanie funkcji 74
  • Refaktoryzacja funkcji 75
  • Pisanie własnych funkcji 76
  • Argumenty domyślne 78
  • Funkcje jednowyrażeniowe 79
  • Funkcje typu Unit 80
  • Nazwane argumenty funkcji 81
  • Dla ciekawskich: Typ Nothing 82
  • Dla ciekawskich: Funkcje plikowe w Javie 83
  • Dla ciekawskich: Przeciążanie funkcji 84
  • Dla ciekawskich: Nazwy funkcji w odwrotnych apostrofach 85
  • Wyzwanie: Funkcje jednowyrażeniowe 87
  • Wyzwanie: Poziom upojenia magicznego 87
  • Wyzwanie: Status upojenia magicznego 87

5. Funkcje anonimowe i typ funkcyjny 89

  • Funkcje anonimowe 89
    • Typ funkcyjny 91
    • Niejawne instrukcje return 92
    • Argumenty funkcyjne 92
    • Słowo kluczowe it 93
    • Akceptowanie wielu argumentów 94
  • Wsparcie dla wnioskowania typów 95
  • Definiowanie funkcji akceptujących inne funkcje 96
    • Składnia skrócona 97
  • Wpisywanie funkcji 98
  • Referencje funkcji 99
  • Typ funkcyjny jako typ wyniku 100
  • Dla ciekawskich: Funkcje lambda w Kotlinie są domknięciami 102
  • Dla ciekawskich: Funkcje lambda a anonimowe klasy wewnętrzne 102

6. Bezpieczeństwo wartości pustych i wyjątki 105

  • Akceptowanie wartości pustych 105
  • Jawny typ null w Kotlinie 107
  • W czasie kompilacji czy w czasie wykonywania? 108
  • Bezpieczeństwo wartości pustych 109
    • Opcja pierwsza: bezpieczny operator wywołania 110
    • Opcja druga: operator podwójnego wykrzyknika 111
    • Opcja trzecia: użycie if do sprawdzania, czy wartość jest równa null 112
  • Wyjątki 115
    • Zgłaszanie wyjątków 116
    • Niestandardowe wyjątki 117
    • Obsługa wyjątków 118
  • Warunki wstępne 120
  • Null: do czego się przydaje? 122
  • Dla ciekawskich: Wyjątki sprawdzane i niesprawdzane 123
  • Dla ciekawskich: Jak wymuszana jest możliwość stosowania wartości null? 123

7. Łańcuchy 125

  • Pobieranie fragmentów łańcuchów 125
    • Funkcja substring 125
    • Funkcja split 127
  • Operacje na łańcuchach 129
    • Łańcuchy są niezmienne 131
  • Porównywanie łańcuchów 131
  • Dla ciekawskich: Unicode 133
  • Dla ciekawskich: Przeglądanie znaków w łańcuchu 133
  • Wyzwanie: Usprawnianie smoczej mowy 134

8. Liczby 135

  • Typy liczbowe 135
  • Liczby całkowite 136
  • Liczby dziesiętne 138
  • Konwersja łańcuchów na typy liczbowe 138
  • Konwersja typu Int na Double 139
  • Formatowanie wartości typu Double 141
  • Konwertowanie wartości typu Double na Int 142
  • Dla ciekawskich: Operacje bitowe 143
  • Wyzwanie: Pozostałe kwaterki 144
  • Wyzwanie: Obsługa ujemnego stanu sakiewki 144
  • Wyzwanie: Smoczykojn 145

9. Funkcje standardowe 147

  • Funkcja apply 147
  • Funkcja let 148
  • Funkcja run 149
  • Funkcja with 150
  • Funkcja also 151
  • Funkcja takeIf 151
    • Funkcja takeUnless 152
  • Stosowanie funkcji standardowych 152

10. Listy i zbiory 155

  • Listy 155
    • Dostęp do elementów listy 157
    • Zmienianie zawartości listy 159
  • Iteracja 163
  • Wczytywanie pliku do listy 167
  • Destrukturyzacja 169
  • Zbiory 169
    • Tworzenie zbiorów 169
    • Dodawanie elementów do zbioru 171
  • Pętle while 173
  • Wyrażenie break 175
  • Konwersje kolekcji 175
  • Dla ciekawskich: Typy tablicowe 176
  • Dla ciekawskich: Tylko do odczytu a niezmienny 177
  • Wyzwanie: Formatowanie menu gospody 178
  • Wyzwanie: Zaawansowane formatowanie menu 179

11. Mapy 181

  • Tworzenie map 181
  • Dostęp do wartości mapy 183
  • Dodawanie elementów do map 183
  • Modyfikowanie wartości mapy 186
  • Wyzwanie: Wykidajło 190

12. Definiowanie klas 191

  • Definiowanie klasy 191
  • Tworzenie instancji 191
  • Funkcje klasowe 192
  • Widoczność i hermetyzacja 194
  • Właściwości klas 195
    • Akcesory get i set i ich właściwości 197
    • Widoczność właściwości 200
    • Właściwości obliczane 200
  • Refaktoryzacja kodu projektu NyetHack 201
  • Stosowanie pakietów 209
  • Dla ciekawskich: Bliższe spojrzenie na właściwości var i val 210
  • Dla ciekawskich: Zapobieganie występowaniu wyścigu 213
  • Dla ciekawskich: prywatny w pakiecie 214

13. Inicjalizacja 217

  • Konstruktory 218
    • Konstruktory podstawowe 218
    • Definiowanie właściwości w konstruktorze podstawowym 219
    • Konstruktory dodatkowe 220
    • Argumenty domyślne 221
    • Argumenty nazwane 222
  • Blok inicjalizatora 223
  • Inicjalizacja właściwości 224
  • Kolejność inicjalizacji 227
  • Odraczanie inicjalizacji 228
    • Inicjalizacja opóźniona 228
    • Inicjalizacja leniwa 229
  • Dla ciekawskich: Kruczki inicjalizacji 231
  • Wyzwanie: Zagadka Excalibura 233

14. Dziedziczenie 235

  • Definiowanie klasy Room 235
  • Tworzenie klas pochodnych 236
  • Sprawdzanie typów 242
  • Hierarchia typów w języku Kotlin 244
    • Rzutowanie typów 245
    • Inteligentne rzutowanie 246
  • Dla ciekawskich: Klasa Any 247

15. Obiekty 249

  • Słowo kluczowe object 249
    • Deklaracje obiektów 250
    • Wyrażenie obiektowe 255
    • Obiekty uzupełniające 255
  • Klasy zagnieżdżone 256
  • Klasy danych 259
    • Funkcja toString 260
    • Funkcja equals 261
    • Funkcja copy 261
    • Deklaracje destrukturyzujące 261
  • Klasy wyliczeniowe 263
  • Przeciążanie operatorów 264
  • Eksplorowanie świata NyetHack 266
  • Dla ciekawskich: Definiowanie porównań strukturalnych 269
  • Dla ciekawskich: Algebraiczne typy danych 271
  • Wyzwanie: Polecenie "Wyjdź" 273
  • Wyzwanie: Implementacja mapy świata 274
  • Wyzwanie: Dzwonimy 274

16. Interfejsy i klasy abstrakcyjne 275

  • Definiowanie interfejsów 275
  • Implementacja interfejsu 276
  • Domyślne implementacje 279
  • Klasy abstrakcyjne 279
  • Walka w świecie NyetHack 282

17. Typy sparametryzowane 287

  • Definiowanie typów sparametryzowanych 287
  • Funkcje sparametryzowane 289
  • Wiele parametrów typów sparametryzowanych 290
  • Ograniczenia typów sparametryzowanych 291
  • vararg i get 293
  • in i out 295
  • Dla ciekawskich: Słowo kluczowe reified 299

18. Rozszerzenia 303

  • Definiowanie funkcji rozszerzenia 303
    • Definiowanie rozszerzenia dla klasy bazowej 304
  • Sparametryzowane funkcje rozszerzeń 305
  • Właściwości rozszerzające 307
  • Rozszerzenia dla typów akceptujących wartości puste 308
  • Funkcje rozszerzeń - za kulisami 309
  • Wyodrębnianie kodu do rozszerzeń 310
  • Definiowanie plików rozszerzeń 311
  • Zmiana nazwy rozszerzenia 313
  • Rozszerzenia w standardowej bibliotece Kotlina 314
  • Dla ciekawskich: Literały funkcyjne z odbiorcami 315
  • Wyzwanie: Funkcja rozszerzenia toDragonSpeak 316
  • Wyzwanie: Funkcja rozszerzenia frame 316

19. Podstawy programowania funkcyjnego 319

  • Kategorie funkcji 319
    • Przekształcenia 319
    • Filtry 321
    • Złączenia 323
  • Dlaczego programowanie funkcyjne? 324
  • Sekwencje 325
  • Dla ciekawskich: Profilowanie 326
  • Dla ciekawskich: Arrow.kt 327
  • Wyzwanie: Odwracanie wartości w mapie 328
  • Wyzwanie: Zastosowanie programowania funkcyjnego w pliku Tavern.kt 328
  • Wyzwanie: Ruchome okno 329

20. Współdziałanie z Javą 331

  • Współdziałanie z klasami Javy 331
  • Współdziałanie a stosowanie wartości pustych 332
  • Odwzorowywanie typów 335
  • Akcesory get, set i współdziałanie 337
  • Więcej niż tylko klasy 339
  • Wyjątki a współdziałanie 347
  • Typy funkcyjne w Javie 350

21. Tworzenie w Kotlinie pierwszej aplikacji na Androida 353

  • Android Studio 353
    • Konfiguracja Gradle 356
    • Organizacja projektu 359
  • Definiowanie interfejsu użytkownika 359
  • Uruchamianie aplikacji w emulatorze 362
  • Generowanie postaci 363
  • Klasa aktywności 365
  • Podłączanie widoków 366
  • Syntetyczne właściwości rozszerzeń Kotlina dla Androida 368
  • Tworzenie obiektu nasłuchującego kliknięć 370
  • Zapisany stan instancji 371
    • Odczyt zapisanego stanu instancji 374
  • Refaktoryzacja do postaci rozszerzeń 374
  • Dla ciekawskich: Biblioteki Kotlin KTX i Anko 377

22. Wprowadzenie do Kotlin Coroutines 379

  • Parsowanie danych postaci 379
  • Pobieranie rzeczywistych danych 381
  • Główny wątek aplikacji na Androida 384
  • Włączanie koprocedur 385
  • Tworzenie koprocedur przy użyciu funkcji async 385
  • Funkcje launch a async i await 387
  • Funkcje zawieszające 387
  • Wyzwanie: Rzeczywiste dane 388
  • Wyzwanie: Minimalna siła 388

23. Posłowie 389

  • Co dalej? 389
  • Bezwstydna reklama 389
  • Dziękujemy! 390

A. Więcej wyzwań 393

  • Korzystanie z Exercism 393

Skorowidz 401

  • Title: Programowanie w języku Kotlin. The Big Nerd Ranch Guide
  • Author: Josh Skeen, David Greenhalgh
  • Original title: Kotlin Programming: The Big Nerd Ranch Guide
  • Translation: Piotr Rajca
  • ISBN: 978-83-283-5537-8, 9788328355378
  • Date of issue: 2019-10-11
  • Format: Ebook
  • Item ID: prokot
  • Publisher: Helion