Kotlin dla programistów Androida
55 Questions
3 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Który z wymienionych opisuje Kotlina najdokładniej?

  • Jest to język obiektowy, dynamicznie typowany, używany głównie do tworzenia interfejsów webowych.
  • Jest to język skryptowy, dynamicznie typowany, działający tylko na JVM.
  • Jest to język niskiego poziomu, kompilowany bezpośrednio do kodu maszynowego, niezależny od JVM.
  • Jest to język wieloplatformowy, statycznie typowany z wnioskowaniem typów, zaprojektowany do współpracy z Javą. (correct)
  • Co oznacza, że Kotlin jest językiem 'wieloplatformowym'?

  • Jest zoptymalizowany tylko dla jednej konkretnej platformy, JVM.
  • Może być kompilowany do różnych platform i systemów docelowych, np. JVM, JavaScript, kod natywny. (correct)
  • Może być używany tylko na systemach operacyjnych Android i iOS.
  • Może być używany na dowolnym komputerze niezależnie od systemu operacyjnego.
  • Która z poniższych opcji nie jest powodem, dla którego Kotlin stał się popularny wśród programistów Androida?

  • Pełna kompatybilność z kodem napisanym w języku Java.
  • Możliwość pisania programów w sposób bardziej zwięzły i bezpieczny niż w języku Java.
  • Wbudowane mechanizmy do tworzenia interfejsów graficznych bez użycia bibliotek zewnętrznych. (correct)
  • Wsparcie ze strony Google jako preferowany język do tworzenia aplikacji na Androida.
  • Kiedy firma Google oficjalnie ogłosiła, że Kotlin jest preferowanym językiem dla twórców aplikacji na Androida?

    <p>7 maja 2019 roku. (C)</p> Signup and view all the answers

    Która z wymienionych cech charakteryzuje statyczne typowanie w języku Kotlin?

    <p>Typy zmiennych są ustalane podczas kompilacji, co pozwala na wychwycenie błędów typów już na etapie kompilacji. (B)</p> Signup and view all the answers

    Która wersja Android Studio wprowadziła Kotlina jako alternatywę dla kompilatora Java?

    <p>Android Studio 3.0 (C)</p> Signup and view all the answers

    Jaką licencję posiada projekt Kotlin od momentu udostępnienia go jako open source?

    <p>Licencja Apache 2 (C)</p> Signup and view all the answers

    Która funkcja została dodana do Kotlina w wersji 1.3?

    <p>Współprogramy do programowania asynchronicznego. (A)</p> Signup and view all the answers

    Które z poniższych stwierdzeń najlepiej opisuje działanie wyrażenia when w Kotlinie?

    <p>Jest to instrukcja warunkowa, która pozwala na wybór jednego z wielu bloków kodu do wykonania na podstawie wartości zmiennej lub wyrażenia. (D)</p> Signup and view all the answers

    Jak utworzyć tablicę typu IntArray o rozmiarze 5, w której każdy element ma wartość 42?

    <p><code>val arr = IntArray(5) { 42 }</code> (A)</p> Signup and view all the answers

    Co zostanie wypisane na konsoli po wykonaniu następującego fragmentu kodu: val arr = Array(3) { i -> (i * 2).toString() }; println(Arrays.toString(arr))?

    <p>[0, 2, 4] (B)</p> Signup and view all the answers

    Która pętla służy do iterowania po elementach kolekcji w Kotlinie?

    <p>pętla <code>for</code> z kolekcją (A)</p> Signup and view all the answers

    Jak sprawdzić, czy zmienna obj jest typu String i, jeśli tak, wypisać długość tego stringa?

    <p><code>if (obj is String) println(obj.length)</code> (B)</p> Signup and view all the answers

    Które z poniższych wyrażeń prawidłowo rzutuje zmienną obj2 typu Any na typ Int, zakładając, że obj2 jest liczbą całkowitą?

    <p><code>val int1 = obj2 as Int</code> (A)</p> Signup and view all the answers

    Jaki będzie wynik wyrażenia 4 in 1..4?

    <p>true (C)</p> Signup and view all the answers

    Jak można zdefiniować tablicę wartości typu Int, w której każdy element ma wartość równą swojemu indeksowi pomnożonemu przez 1?

    <p><code>val arr = IntArray(5) { it * 1 }</code> (C)</p> Signup and view all the answers

    Która z poniższych opcji najlepiej opisuje cel interfejsu Factory w kontekście przedstawionego kodu?

    <p>Umożliwienie tworzenia instancji klasy <code>MyClass3</code> za pomocą metody <code>create()</code>, której implementacja jest dostarczana przez <code>companion object</code>. (D)</p> Signup and view all the answers

    W kontekście delegacji interfejsów, jak zachowa się wywołanie Derived(b).print()?

    <p>Wyświetli &quot;10 15&quot;, ponieważ <code>Derived</code> deleguje implementację <code>print()</code> do <code>BaseImpl</code>. (D)</p> Signup and view all the answers

    Jak zadziała wywołanie Derived(b).print2() w przedstawionym przykładzie delegowania interfejsu?

    <p>Wyświetli &quot;2 override&quot;, ponieważ implementacja z <code>Derived</code> nadpisuje delegowaną metodę. (A)</p> Signup and view all the answers

    Co charakteryzuje delegację właściwości w klasie Example z użyciem Delegate?

    <p>Delegat <code>Delegate</code> przechwytuje operacje odczytu i zapisu do <code>p</code>, wykonując własną logikę. (B)</p> Signup and view all the answers

    Jaki jest główny efekt użycia lazy() przy delegowaniu właściwości?

    <p>Wartość właściwości jest obliczana dopiero przy pierwszym dostępie do niej. (B)</p> Signup and view all the answers

    Jak działa Delegates.observable() w kontekście delegacji właściwości?

    <p>Wykonuje wskazaną funkcję (lambdę) po przypisaniu nowej wartości do właściwości. (D)</p> Signup and view all the answers

    Co jest nieprawidłowe w kontekście działania delegata Delegate przedstawionego w kodzie?

    <p>Delegat musi implementować interfejs. (D)</p> Signup and view all the answers

    Które z poniższych stwierdzeń najlepiej opisuje delegację interfejsów?

    <p>Jest to sposób na współdzielenie implementacji interfejsu poprzez przekazanie go innemu obiektowi. (C)</p> Signup and view all the answers

    Jaka jest prawidłowa kolejność stosowania logiki w potoku produkcji stanu interfejsu użytkownika?

    <p>Najpierw logika biznesowa, potem logika UI. (B)</p> Signup and view all the answers

    Jaką rolę pełni posiadacz stanu w kontekście logiki?

    <p>Posiadacz stanu deleguje logikę do odpowiedniego źródła danych. (A)</p> Signup and view all the answers

    Która z poniższych korzyści wynika z używania posiadaczy stanu?

    <p>Prosty UI, łatwość konserwacji i testowalność. (A)</p> Signup and view all the answers

    Jak relacja między elementem UI a jego posiadaczem stanu jest zdefiniowana?

    <p>Relacja 1:1, gdzie każdy element UI ma swojego unikalnego posiadacza stanu. (C)</p> Signup and view all the answers

    Która z poniższych opcji nie jest rolą posiadacza stanu logiki biznesowej?

    <p>Wyświetlanie danych bezpośrednio na ekranie bez transformacji. (D)</p> Signup and view all the answers

    Jaki typ obiektu jest zwykle używany do implementacji posiadacza stanu logiki biznesowej?

    <p>ViewModel. (D)</p> Signup and view all the answers

    Jaka kluczowa właściwość opisuje odpowiedzialność posiadacza stanu logiki biznesowej?

    <p>Tworzenie stanu UI dla interfejsów. (A)</p> Signup and view all the answers

    Które zdanie najlepiej opisuje relacje pomiędzy poszczególnymi elementami: logika biznesowa, UI i posiadacz stanu interfejsu użytkownika?

    <p>Logika biznesowa tworzy stan UI, który jest następnie odczytywany przez UI, a wszystkim zarządza posiadacz stanu. (A)</p> Signup and view all the answers

    Jaką główną rolę pełnią klasy repozytorium w architekturze aplikacji?

    <p>Udostępnianie danych pozostałej części aplikacji, centralizowanie zmian, rozwiązywanie konfliktów i abstrakcja źródeł danych. (B)</p> Signup and view all the answers

    Które z poniższych zadań NIE jest odpowiedzialnością klasy repozytorium?

    <p>Kontrola interfejsu użytkownika i jego aktualizacja. (D)</p> Signup and view all the answers

    Jak powinny być udostępniane dane przez warstwę danych, aby zapewnić ich bezpieczeństwo i spójność?

    <p>Dane powinny być niezmienne, co zapewnia bezpieczeństwo wątkowe i uniemożliwia przypadkowe modyfikacje. (C)</p> Signup and view all the answers

    W jaki sposób klasy w warstwie danych zazwyczaj udostępniają operacje jednorazowe?

    <p>Używając funkcji <code>suspend</code> w Kotlinie lub wywołań zwrotnych oraz typów RxJava takich jak Single, Maybe, lub Completable w Javie. (B)</p> Signup and view all the answers

    Co to są klasy źródeł danych w warstwie danych?

    <p>Klasy, które stanowią pomost między aplikacją a faktycznym źródłem danych (plik, sieć, baza lokalna). (B)</p> Signup and view all the answers

    Dlaczego inne warstwy aplikacji nie powinny mieć bezpośredniego dostępu do źródeł danych?

    <p>Bezpośredni dostęp do źródeł danych by spowodował, że warstwy były by uzależnione od logiki dostępu do danych, co blokuje niezależne skalowanie poszczególnych warstw. (C)</p> Signup and view all the answers

    Jak klasy w warstwie danych obsługują dane zmieniające się w czasie (np. aktualizacje z serwera)?

    <p>Poprzez przepływy (Flow) w Kotlinie lub wywołania zwrotne oraz typy RxJava Observable lub Flowable w Javie. (A)</p> Signup and view all the answers

    W jakich scenariuszach repozytorium może potrzebować zależności od innego repozytorium?

    <p>W przypadkach obejmujących bardziej złożone wymagania biznesowe, gdzie jedno repozytorium może agregować dane z kilku innych. (B)</p> Signup and view all the answers

    Która z poniższych opcji najlepiej opisuje rolę warstwy interfejsu użytkownika?

    <p>Pobieranie danych, tworzenie elementów interfejsu i reagowanie na zdarzenia użytkownika. (B)</p> Signup and view all the answers

    Jaka jest główna korzyść zdefiniowania stanu interfejsu użytkownika jako niezmiennego obiektu?

    <p>Zapewnienie gwarancji stanu aplikacji w danym momencie. (D)</p> Signup and view all the answers

    Dlaczego nie powinno się umieszczać logiki obsługi zdarzeń w samym interfejsie użytkownika?

    <p>Ponieważ interfejs użytkownika staje się odpowiedzialny za zbyt wiele: posiadanie, produkcję i transformację danych. (C)</p> Signup and view all the answers

    Czym jest ViewModel w kontekście architektury warstwy UI?

    <p>Klasą odpowiedzialną za zarządzanie stanem interfejsu użytkownika na poziomie ekranu z dostępem do warstwy danych. (D)</p> Signup and view all the answers

    Jak opisać jednokierunkowy przepływ danych (UDF)?

    <p>Stan płynie 'w dół', a zdarzenia 'w górę'. (A)</p> Signup and view all the answers

    W kontekście UDF, jaka jest rola ViewMode'lu?

    <p>Przechowywanie, udostępnianie stanu dla UI oraz obsługa zdarzeń użytkownika. (D)</p> Signup and view all the answers

    W modelu UDF, gdzie powstają zmiany stanu?

    <p>W ViewModelu na podstawie działań użytkownika. (D)</p> Signup and view all the answers

    Która z poniższych definicji najlepiej opisuje 'logikę biznesową' w aplikacji?

    <p>Implementacja wymagań produktu dotyczących danych aplikacji, np. walidacja danych. (D)</p> Signup and view all the answers

    Co oznacza, że stan interfejsu użytkownika jest niezmienną migawką?

    <p>Stan reprezentuje dane do wyświetlenia w danym momencie i nie może być modyfikowany. (A)</p> Signup and view all the answers

    Jaką główną role pełni mediator w kontekście zarządzania stanem UI?

    <p>Przetwarza zdarzenia, definiuje logikę i wykonuje transformacje danych. (B)</p> Signup and view all the answers

    Które stwierdzenie najlepiej opisuje, jak UI korzysta ze stanu interfejsu użytkownika?

    <p>Interfejs użytkownika tylko odczytuje i wyświetla stan UI. (C)</p> Signup and view all the answers

    W kontekście jednokierunkowego przepływu danych, jak interfejs użytkownika informuje ViewModel o zdarzeniach użytkownika?

    <p>Poprzez wywołanie funkcji w ViewModelu, które inicjują zmiany stanu (C)</p> Signup and view all the answers

    Co jest głównym celem rozdzielenia miejsca, gdzie powstają zmiany stanu, od miejsca jego konsumpcji w UDF?

    <p>Ułatwienie śledzenia przepływu danych i separowania odpowiedzialności. (A)</p> Signup and view all the answers

    Jakie elementy, poza aktywnościami i fragmentami, mogą pełnić funkcję interfejsu użytkownika?

    <p>Dowolne elementy wyświetlające dane. np: Views oraz Jetpack Compose. (B)</p> Signup and view all the answers

    Która z poniższych opcji najlepiej oddaje istotę jednokierunkowego przepływu danych?

    <p>Dane płyną w dół, zdarzenia w górę. (C)</p> Signup and view all the answers

    Flashcards

    Kotlin

    Wieloplatformowy, statycznie typowany język programowania wysokiego poziomu, który w pełni współdziała z Javą. Został zaprojektowany do kompilacji do JVM, JavaScript i kodu natywnego.

    Początki Kotlina

    Firma JetBrains stworzyła Kotlin jako projekt w 2011 roku.

    Wydajność Kotlina 1.0

    Wersja 1.0 Kotlina została wydana 15 lutego 2016 roku, co oznaczało zobowiązanie firmy JetBrains do zapewnienia długotrwałej kompatybilności.

    Wsparcie Google dla Kotlina na Androida

    Google ogłosiło preferencyjne wsparcie dla Kotlina na Androida podczas Google I/O 2017.

    Signup and view all the flashcards

    Kotlin w Android Studio

    Od wersji Android Studio 3.0 (październik 2017 roku) Kotlin jest dostępny jako alternatywa dla standardowego kompilatora Java.

    Signup and view all the flashcards

    Generowanie bajtkodu w Kotlinie

    Kompilator Android Kotlin domyślnie generuje bajtkod Java 8.

    Signup and view all the flashcards

    Optymalizacja wersji Javy w Kotlinie

    Kotlin pozwala programistom wybrać wersję Java od 9 do 20 dla optymalizacji.

    Signup and view all the flashcards

    Współdzielenie kodu w Kotlinie 1.2

    Kotlin 1.2 (listopad 2017) zawiera funkcję współdzielenia kodu między JVM i JavaScript.

    Signup and view all the flashcards

    Wyrażenie when

    Wyrażenie when jest używane do wyboru jednego z wielu bloków kodu do wykonania na podstawie wartości wyrażenia.

    Signup and view all the flashcards

    Jak działa when?

    Wyrażenie when może być użyte do porównania wartości z wieloma opcjami i wykonania odpowiedniego bloku kodu.

    Signup and view all the flashcards

    Wyrażenia logiczne w when

    Możliwe jest użycie wyrażeń logicznych w when, aby określić warunki wykonania danego bloku kodu.

    Signup and view all the flashcards

    Funkcja arrayOf

    Funkcja arrayOf tworzy tablicę o podanych elementach.

    Signup and view all the flashcards

    Funkcja arrayOfNulls

    Funkcja arrayOfNulls tworzy tablicę o danej ilości elementów, z których każdy jest równy null.

    Signup and view all the flashcards

    Tworzenie tablicy z Array

    Zastosowanie klasy Array i konstruktora pozwala stworzyć tablicę z elementami o określonych wartościach.

    Signup and view all the flashcards

    Pętla for z zakresem

    Pętla for może być użyta do iterowania po numerach z zakresu.

    Signup and view all the flashcards

    Pętla for po kolekcji

    Pętla for może być użyta do iterowania po elementach kolekcji

    Signup and view all the flashcards

    Tworzenie obiektu przez interfejs

    Funkcja tworząca obiekt, która jest częścią interfejsu.

    Signup and view all the flashcards

    Interfejs Factory

    Interfejs, który definiuje metodę tworzącą obiekt.

    Signup and view all the flashcards

    Implementacja Factory w MyClass3

    Implementacja interfejsu Factory w klasie MyClass3 korzystająca z obiektu towarzyszącego.

    Signup and view all the flashcards

    Delegacja interfejsu

    Przeniesienie implementacji interfejsu do składowych innego obiektu.

    Signup and view all the flashcards

    Klasa BaseImpl

    Klasa BaseImpl implementuje interfejs Base i ma własne pole x.

    Signup and view all the flashcards

    Klasa Derived

    Klasa Derived delegowana do obiektu klasy Base.

    Signup and view all the flashcards

    Funkcja lazy()

    Funkcja zapewniająca leniwe inicjalizowanie zmiennej. Wykonywana tylko raz przy pierwszym dostępie do zmiennej.

    Signup and view all the flashcards

    Funkcja observable()

    Funkcja tworząca delegata, który wywołuje funkcję podczas modyfikacji zmiennej.

    Signup and view all the flashcards

    Element UI profilu użytkownika

    Element UI wyświetlający zdjęcie bieżącego użytkownika.

    Signup and view all the flashcards

    Potok UI: logika biznesowa vs UI

    Potok produkcyjny stanu UI, w którym logika biznesowa musi być stosowana przed logiką UI.

    Signup and view all the flashcards

    Posiadacz stanu

    Posiadacz stanu odczytuje i przechowuje stan, delegując logikę do odpowiedniego źródła.

    Signup and view all the flashcards

    Posiadacz stanu logiki biznesowej

    Typ posiadacza stanu odpowiedzialny za przetwarzanie zdarzeń użytkownika i przekształcanie danych w UI.

    Signup and view all the flashcards

    Posiadacz stanu logiki UI

    Typ posiadacza stanu, który odpowiada za logikę wyświetlania UI.

    Signup and view all the flashcards

    ViewModel jako posiadacz stanu

    Obiekty ViewModel, które zapewniają funkcje do zarządzania stanem logiki biznesowej.

    Signup and view all the flashcards

    Tworzenie stanu UI

    Posiadacze stanu logiki biznesowej tworzą stan UI dla swoich interfejsów.

    Signup and view all the flashcards

    Przetwarzanie danych w posiadaczu stanu

    Posiadacze stanu logiki biznesowej są odpowiedzialni za przetwarzanie zdarzeń użytkownika, danych i domeny.

    Signup and view all the flashcards

    Rola klas repozytoriów

    Klasy repozytoriów są odpowiedzialne za udostępnianie danych innym częściom aplikacji, centralizację zmian w danych, rozwiązywanie konfliktów między wieloma źródłami danych, abstrakcyjne źródła danych od reszty aplikacji oraz realizację logiki biznesowej.

    Signup and view all the flashcards

    Odpowiedzialność klasy źródła danych

    Każda klasa źródła danych powinna być odpowiedzialna za pracę tylko z jednym źródłem danych, np. plikiem, siecią lub lokalną bazą danych.

    Signup and view all the flashcards

    Rola klas źródeł danych

    Klasy źródeł danych pełnią rolę pośrednika między aplikacją a faktycznym źródłem danych.

    Signup and view all the flashcards

    Bezpośredni dostęp do źródeł danych

    Inne warstwy aplikacji nigdy nie powinny mieć bezpośredniego dostępu do źródeł danych. Do warstwy danych należy zawsze uzyskać dostęp poprzez klasy repozytoriów.

    Signup and view all the flashcards

    Zależność od źródła danych

    Posiadacze stanów lub klasy przypadków użycia (warstwa domenowa) nigdy nie powinny mieć źródła danych jako bezpośredniej zależności.

    Signup and view all the flashcards

    Skalowanie warstw architektury

    Użycie klas repozytoriów jako punktów wejścia umożliwia niezależne skalowanie różnych warstw architektury.

    Signup and view all the flashcards

    Niezmienność danych

    Dane udostępniane przez warstwę danych powinny być niezmienne, co zapobiega manipulowaniu nimi przez inne klasy i pozwala na bezpieczne obsługę przez wiele wątków.

    Signup and view all the flashcards

    Funkcje API warstwy danych

    Klasy w warstwie danych zazwyczaj udostępniają funkcje umożliwiające wykonywanie jednorazowych wywołań CRUD (Create, Read, Update, Delete) lub otrzymywanie powiadomień o zmianach danych w czasie.

    Signup and view all the flashcards

    ViewModel

    Klasy, które przechowują dane, udostępniają je interfejsowi użytkownika i zarządzają logiką biznesową.

    Signup and view all the flashcards

    Interfejs użytkownika (UI)

    Elementy interfejsu użytkownika, takie jak aktywności i fragmenty, które wyświetlają dane.

    Signup and view all the flashcards

    Warstwa danych

    Warstwa aplikacji odpowiedzialna za przechowywanie i zarządzanie danymi.

    Signup and view all the flashcards

    Pobieranie i przekształcanie danych

    Proces pobierania danych aplikacji i przetwarzania ich do postaci nadającej się do wyświetlenia w interfejsie użytkownika.

    Signup and view all the flashcards

    Tworzenie elementów UI

    Tworzenie elementów interfejsu użytkownika w oparciu o dane przystosowane do wyświetlenia.

    Signup and view all the flashcards

    Obsługa zdarzeń użytkownika

    Reagowanie na zdarzenia użytkownika, takie jak kliknięcia, wpisywanie tekstu, itp. i aktualizowanie stanu interfejsu użytkownika.

    Signup and view all the flashcards

    Stan UI

    Opis stanu interfejsu użytkownika, który jest niezmienny (np. definiowany za pomocą val i List).

    Signup and view all the flashcards

    Niezmienne obiekty w stanie UI

    Gwarancja, że ​​stan aplikacji w danym momencie jest stabilny i spójny.

    Signup and view all the flashcards

    Rola UI

    Skupienie się interfejsu użytkownika wyłącznie na odczytywaniu stanu i odpowiedniej aktualizacji elementów UI.

    Signup and view all the flashcards

    Zakaz modyfikacji stanu UI w UI

    Zakaz modyfikowania stanu interfejsu użytkownika bezpośrednio w UI.

    Signup and view all the flashcards

    Mediator stanu UI

    Mediator odpowiedzialny za przetwarzanie zdarzeń, definiowanie logiki i generowanie stanu UI.

    Signup and view all the flashcards

    Logika obsługi zdarzeń poza UI

    Logika obsługi zdarzeń nie powinna być umieszczona w interfejsie użytkownika.

    Signup and view all the flashcards

    Jednokierunkowy przepływ danych (UDF)

    Wzorzec architektoniczny, gdzie strumień danych płynie w jednym kierunku - od stanu do UI, a zdarzenia w przeciwnym.

    Signup and view all the flashcards

    Właściciele stanu UI

    Klasy odpowiedzialne za tworzenie i zarządzanie stanem UI.

    Signup and view all the flashcards

    Typ ViewModel

    Zalecany typ klasy do zarządzania stanem UI na poziomie ekranu.

    Signup and view all the flashcards

    Study Notes

    Wprowadzenie do języka Kotlin

    • Język programowania Kotlin jest wieloplatformowy, statycznie typowany i uniwersalny.
    • Statyczne typowanie zwiększa bezpieczeństwo kodu.
    • Język Kotlin został zaprojektowany tak, aby w pełni współpracował z Javą.
    • Biblioteka Kotlina w wersji JVM zależy od biblioteki klas Java.
    • Kotlin działa na maszynie wirtualnej Java (JVM), ale również kompiluje się do kodu JavaScript lub kodu natywnego.

    Cele przedmiotu i wymagania wstępne

    • Poznanie języka Kotlin.
    • Poznanie współczesnych metod tworzenia interfejsów użytkownika.
    • Poznanie zalecanych zasad architektury aplikacji mobilnej.
    • Znajomość programowania obiektowego.
    • Znajomość języka angielskiego – podstawowy stopień.
    • Znajomość budowania struktur danych i sieci komputerowych.
    • Zaliczenie testu pisemnego.

    Efekty uczenia się

    • W zakresie wiedzy: poznać najważniejsze elementy języka Kotlin i architekturę współczesnych aplikacji mobilnych; poznać współczesne metody tworzenia interfejsu użytkownika.
    • W zakresie umiejętności: potrafić projektować i implementować aplikacje mobilne; potrafić tworzyć interfejsy użytkownika.
    • W zakresie kompetencji społecznych: rozumieć potrzeby rozwijania i aktualizowania wiedzy w dynamicznie rozwijających się technologiach mobilnych.

    Tematyka wykładów

    • Wprowadzenie do języka Kotlin (składnia, system typów, wyrażenia, operatory, funkcje).
    • Klasy i interfejsy w języku Kotlin (składnia, dziedziczenie, metody rozszerzające).
    • Metody tworzenia interfejsu użytkownika w systemie Android.
    • Nawigacja w aplikacji (graf nawigacji, przechodzenie po grafie, przekazywanie parametrów).
    • Programowanie asynchroniczne w języku Kotlin (współprogramy).
    • Architektura aplikacji (wprowadzenie, zarządzanie stanem, obsługa cyklu życia, wiązanie widoków i danych, przechowywanie danych, zarządzanie zadaniami w tle).
    • Wstrzykiwanie zależności w systemie Android.
    • Tworzenie testów aplikacji mobilnych.

    Zalecana literatura

    • Efektywny Kotlin: najlepsze praktyki
    • Kickstart Modern Android Development with Jetpack and Kotlin
    • Kotlin language specification

    Język Kotlin

    • Język wieloplatformowy, statycznie typowany, uniwersalny język programowania wysokiego poziomu z wnioskowaniem typów.
    • Zaprojektowany tak, aby w pełni współdziałał z Javą.
    • Działa na JVM, ale także kompiluje się do JavaScript lub kodu natywnego.
    • Kompilator Kotlin domyślnie generuje kod bajtowy Java 8, ale pozwala programiście wybrać docelową wersję Java 9 do 20 w celu optymalizacji.
    • Wspiera statyczne typowanie, wnioskowanie typów i funkcje rozszerzające.

    Historia języka Kotlin

    • Kotlin został stworzony w lipcu 2011 r. przez firmę JetBrains.
    • Projekt Kotlin był rozwijany od roku.
    • Udostępniono projekt jako open source w lutym 2012 roku z wykorzystaniem licencji Apache.

    Podstawowe typy danych

    • Całkowite ze znakiem: Byte, Short, Int, Long
    • Całkowite bez znaku: UByte, UShort, UInt, ULong
    • Zmiennoprzecinkowe: Float, Double
    • Logiczne: Boolean
    • Znaki: Char
    • Ciągi znaków: String
    • Any: Korzeń hierarchii klas w Kotlinie, wszystkie klasy dziedziczą po Any (podobnie jak w Javie po Object)
    • Unit: Typ z jedną wartością – obiektem Unit (odpowiednik void z Javy)
    • Nothing: Nie ma instancji; służy do reprezentowania wartości, która nigdy nie istnieje.

    Podstawy składni

    •  Tworzenie zmiennych: var a: Int = 1 (z typowaniem) lub var b = 1 (wnioskowanie typu).
    •  Typy niezmienne: val d = 1
    • Konwersja między typami (np. b = c.toInt()).
    •  Tablice.
    • Wyrażenia (if, when).
    •  Szablony łańcuchów.

    Zakresy

    • for z zakresem (1..3)
    • for po kolekcji.
    • while()
    • do while

    Sprawdzanie typów i rzutowanie

    • Sprawdzenie typu if (obj is String) { ... }
    • Rzutowanie val int1: Int = obj2 as Int (musi nastąpić prawidłowe rzutowanie) lub str2=obj2 as? String (może zwrócić null)

    Funkcje

    • Typy funkcji.
    • Funkcje z pojedynczym wyrażeniem.
    • Parametry domyślne.
    • Zwracanie Unit.
    • Nazwane parametry.

    Wyrażenia lambda

    • Konwersje między lambda a zwykłymi funkcjami.
    • Wykorzystanie lambd jako parametrów funkcji.

    Klasy – konstruktor i inicjalizacja

    • Główny konstruktor.
    • Konstruktor z parametrami.
    • Inicjalizacja – blok init.
    • Niejawna delegacja w konstruktorach.

    Klasy danych

    • Automatyczne metody: ToString, Equals, HashCode, Copy, Component
    • Przykład użycia, data class User (val name: String, val id: Int)

    Klasy zagnieżdżone i wewnętrzne

    • Klasy zagnieżdżone nie mają dostępu do zmiennych klasy zewnętrznej.
    • Klasy wewnętrzne mają dostęp do zmiennych klasy zewnętrznej.

    Funkcje rozszerzające

    • Cechy funkcji rozszerzających.
    • Przykład użycia, fun <T MutableList<T>> .swap (uwaga na <T>)

    Interfejsy

    • Interfejs może zawierać tylko abstrakcję (interfejs).
    • Przykład użycia, interface MyInterface { fun foo() }

    Singleton

    • Klasa singleton ma tylko jedną instancję, jest obiektem.
    • Przykład użycia, object Singleton { val a = 1}

    Obiekty towarzyszące

    • Klasa towarzysząca to statyczny obiekt klasy, służy do udostępnienia funkcjonalności.
    • Przykład użycia, companion object Factory { fun create(): MyClass = MyClass() }

    Delegacja interfejsów

    • Przykłady użycia.

    Delegacja właściwości

    • Użycie Delegates.

    Null safety

    • Bezpieczeństwo w kodzie.
    • Operatory.

    Kolekcje – interfejsy kolekcji

    • MutableIterable, Iterable, MutableCollection, Collection, List, Set, Map, MutableList, MutableSet, MutableMap.

    Listy – tworzenie, przeglądanie, kopiowanie, porównywanie, modyfikacja

    • Zastosowanie, listOf, mutableListOf, listof, LinkedList
    • ListIterator, przechodzenie po liści w przód i wstecz.
    • Kopiowanie, toMutableList, toSet, toMutableSet.
    • Metody porównania, równe/nie równe.

    Zbiory – tworzenie, użycie

    Mapy – tworzenie, użycie

    • mapOf(), mutableMapOf()
    • Operacje na mapie.

    Operacje na kolekcjach

    • filtrowanie, transformacje, operacje agregujące, grupowanie, pobieranie elementów, porządkowanie.
    • any(), none(), all(), partition(), groupBy(), map(), zip().

    Scope functions

    Klasy - podstawowy i dodatkowe konstruktory

    Klasy – właściwości

    • Domyślne wartości właściwości.
    • Gettery i settery
    • Inicjalizacja.

    Klasy - widoczność

    • Jakie są zasady widoczności w klasach Kotlin.
    • Widoczność prywatna, publiczna, wewnętrzna, chroniona.

    Klasy - dziedziczenie

    • Dziedziczenie w języku Kotlin.

    Architektura aplikacji z Android Jetpack

    • Elementy charakterystyczne dla architektury Android Jetpack.

    Działanie aplikacji mobilnej

    • Zasady tworzenia aplikacji mobilnych.

    Podstawowe zasady architektoniczne

    • Zasady dobrego projektowania aplikacji mobilnych.

    Zalecana architektura aplikacji

    • Architektura aplikacji z Android Jetpack.

    Współczesna architektura aplikacji

    • Nowoczesne techniki używane w aplikacjach mobilnych.

    Zarządzanie zależnościami między komponentami

    • Wstrzykiwanie zależności, lokalizator usług

    Ogólne najlepsze praktyki

    • Zasady projektowania, testowania, konserwacji aplikacji

    Warstwa UI

    • Rola i elementy warstwy UI.

    Definiowanie stanu UI

    • Kluczowe koncepcje dotyczące stanu interfejsu użytkownika.

    Jednokierunkowy przepływ danych - UDF

    • Jednokierunkowy przepływ danych w aplikacjach mobilnych.

    Udostępnianie stanu UI

    • Sposób udostępniania stanu UI.

    Obsługa zdarzeń ViewModel

    • Obsługa zdarzeń przez ViewModel.

    Zawartość obiektu stanu UI

    • Jak przechowywać dane w UiState.

    Wiele czy jeden strumienie stanu UI?

    • Obsługa wielu strumieni w UI.

    Konsumowanie stanu UI

    Rodzaje stanu UI

    • Dostępne metody przedstawiania stanu UI.

    Cykl życia elementów aplikacji oraz typów stanu i logiki interfejsu użytkownika

    • Cykl życia komponentów UI.

    Potok produkcji stanu UI

    • Etapy przetwarzania stanu.

    API używane w tworzeniu stanu

    • API używane do produkowania stanu.

    Jednorazowe API jako źródła zmiany stanu

    Modyfikacja stanu z wywołań asynchronicznych

    Modyfikacja stanu z wątku działającego w tle

    Strumienie jako źródła zmiany stanu

    • Użycie strumieni do tworzenia stanu.

    Jednorazowe i strumieniowe API jako źródła zmiany stanu

    Inicjalizacja potoku produkującego stan

    Warstwa danych

    • Rola i elementy warstwy danych.

    Klasy repozytorium

    • Obowiązki i funkcje klas repozytoriów.

    API udostępniania danych

    Wiele poziomów repozytoriów

    Wielowątkowość

    Reprezentowanie modeli biznesowych

    Rodzaje operacji na danych

    Layout w Compose

    • Ogólne koncepcje i elementy layoutu w Compose.

    Column

    • Metody rozmieszczania elementów w układzie pionowym.

    Row

    • Metody rozmieszczania elementów w układzie poziomym

    Box

    • Metody rozmieszczania elementów w układzie pudełkowym

    Modyfikatory

    • Podstawowe modyfikatory w Compose dla zarządzania formatowaniem layoutu.

    Modyfikatory - size, fillMaxSize, width, height, padding, offset,

    matchParentSize

    • Rozmaite modyfikatory, ich przeznaczenie i zastosowanie.

    Ogólne najlepsze praktyki

    Imperatywne tworzenie GUI w XML

    • Metody implementacji interfejsów użytkownika.

    Deklaratywne podejście do tworzenia interfejsu użytkownika w Jetpack Compose

    Jetpack Compose – prosty przykład

    Funkcje komponowalne (Composables)

    Rekompozycja

    • Mechanizmy rekompozycji w Jetpack Compose.

    Rekompozycja – kolejność

    Rekompozycja – wykonanie równoległe

    • Funkcje uruchamiające animacje.

    Rekompozycja – pomija ile się da

    Cykl życia elementów komponowalnych- Podstawowe Informacje

    • Cykl życia - podstawowe informacje i zasady.

    Cykl życia – zachowanie elementów w kompozycji

    Stan elementu i logika UI – stan w osobnej (zwykłej) klasie

    Logika biznesowa i jej posiadacz stanu

    Właściciel stanu na poziomie ekranu

    ViewModel jako posiadacz stanu logiki biznesowej

    Metody udostępniania stanu

    Zachowywanie stanu UI (związanego z logiką UI)

    • Zasady zachowania stanu UI.

    Adnotacja @Parcelize

    Funkcja mapSaver()

    Funkcja listSaver()

    Zachowywanie stanu - podsumowanie

    • Podsumowanie różnych sposobów zachowania stanu w Android Compose.

    SaveStateHandle - najlepsze praktyki

    SaveStateHandle - StateFlow

    Potok produkujący stan UI

    API udostępniania danych

    • API dla danych (do wysyłania/przechowywania danych).

    Wiele poziomów repozytoriów

    • Zasady tworzenia wiele poziomów w repozytoriach.

    Wielowątkowość

    • Zasady wielowątkowości w Android Compose.

    Pasy aplikacji (App bars)

    Górne paski aplikacji – typy, parametry, zachowanie przewijania

    Dolny pasek aplikacji

    Szuflada nawigacji ([Drawer])

    Modalny dolny arkusz

    Typowe komponenty Material Design i ich zastosowanie

    Przyciski - rodzaje

    Pływający przycisk akcji (Floating Action Button)

    Karta (Card)

    Przełączniki ('Switch')

    Suwaki ('Slider')

    Wskaźniki postępu (Progress Indicators)

    Okna dialogowe (Dialogs)

    Studying That Suits You

    Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

    Quiz Team

    Related Documents

    Description

    Sprawdź swoją wiedzę na temat języka Kotlin oraz jego zastosowania w programowaniu aplikacji na Androida. Quiz obejmuje podstawowe informacje o Kotlinie, jego cechach i popularności wśród programistów. Odpowiedz na pytania dotyczące jego wersji oraz charakterystyki statycznego typowania.

    More Like This

    Android App Development with Kotlin
    14 questions
    Android Development Overview
    8 questions
    Android Kotlin Development Overview
    45 questions
    Use Quizgecko on...
    Browser
    Browser