Podcast
Questions and Answers
Który operator w Kotlinie umożliwia bezpieczne wywołanie metody na obiekcie, który może być null?
Który operator w Kotlinie umożliwia bezpieczne wywołanie metody na obiekcie, który może być null?
Operator ?:
w Kotlinie, nazywany operatorem Elvisa, służy do:
Operator ?:
w Kotlinie, nazywany operatorem Elvisa, służy do:
Czym różni się równość strukturalna od równości referencyjnej w Kotlinie?
Czym różni się równość strukturalna od równości referencyjnej w Kotlinie?
Które stwierdzenie najlepiej opisuje interfejsy kolekcji w Kotlinie?
Które stwierdzenie najlepiej opisuje interfejsy kolekcji w Kotlinie?
Signup and view all the answers
Co oznacza, że kolekcje tylko do odczytu są kowariantne w Kotlinie?
Co oznacza, że kolekcje tylko do odczytu są kowariantne w Kotlinie?
Signup and view all the answers
Do czego służy adnotacja @HtmlTagMarker
?
Do czego służy adnotacja @HtmlTagMarker
?
Signup and view all the answers
Które z poniższych zdań najlepiej opisuje zachowanie funkcji lazy()
?
Które z poniższych zdań najlepiej opisuje zachowanie funkcji lazy()
?
Signup and view all the answers
W kontekście funkcji Delegates.observable()
, kiedy jest wywoływana funkcja obsługująca modyfikację?
W kontekście funkcji Delegates.observable()
, kiedy jest wywoływana funkcja obsługująca modyfikację?
Signup and view all the answers
Jaki jest cel metody renderAttributes
?
Jaki jest cel metody renderAttributes
?
Signup and view all the answers
W jaki sposób dodawane są nowe elementy potomne do obiektu Tag
?
W jaki sposób dodawane są nowe elementy potomne do obiektu Tag
?
Signup and view all the answers
Jaką wartość zwraca metoda toString
klasy Tag
?
Jaką wartość zwraca metoda toString
klasy Tag
?
Signup and view all the answers
Która część kodu definiuje strukturę HTML strony (np. html
, head
, body
itp.)?
Która część kodu definiuje strukturę HTML strony (np. html
, head
, body
itp.)?
Signup and view all the answers
Jaki jest efekt działania builder.append("$indent\n")
w metodzie render
?
Jaki jest efekt działania builder.append("$indent\n")
w metodzie render
?
Signup and view all the answers
W kodzie a(href = "https://kotlinlang.org") {+"link"}
, jaka jest funkcja a
?
W kodzie a(href = "https://kotlinlang.org") {+"link"}
, jaka jest funkcja a
?
Signup and view all the answers
Jak w kodzie HTML DSL dodawany jest tekst do elementu Tag
?
Jak w kodzie HTML DSL dodawany jest tekst do elementu Tag
?
Signup and view all the answers
W jakiej kolejności wykonają się bloki inicjalizacyjne i przypisania właściwości w klasie Customer3
?
W jakiej kolejności wykonają się bloki inicjalizacyjne i przypisania właściwości w klasie Customer3
?
Signup and view all the answers
Które stwierdzenie dotyczące konstruktorów w Kotlinie jest prawdziwe?
Które stwierdzenie dotyczące konstruktorów w Kotlinie jest prawdziwe?
Signup and view all the answers
Jak zainicjalizować właściwość klasy Contact
o nazwie category
, aby miała wartość "private"?
Jak zainicjalizować właściwość klasy Contact
o nazwie category
, aby miała wartość "private"?
Signup and view all the answers
Jak odwołać się do pola (backing field) właściwości w setterze w Kotlinie?
Jak odwołać się do pola (backing field) właściwości w setterze w Kotlinie?
Signup and view all the answers
Który modyfikator widoczności sprawia, że deklaracja jest widoczna tylko w tym samym pliku?
Który modyfikator widoczności sprawia, że deklaracja jest widoczna tylko w tym samym pliku?
Signup and view all the answers
Składowa klasy z modyfikatorem protected
jest widoczna:
Składowa klasy z modyfikatorem protected
jest widoczna:
Signup and view all the answers
Które słowo kluczowe jest używane, aby umożliwić dziedziczenie po klasie?
Które słowo kluczowe jest używane, aby umożliwić dziedziczenie po klasie?
Signup and view all the answers
Jak zadeklarować metodę, którą można nadpisać w klasach pochodnych?
Jak zadeklarować metodę, którą można nadpisać w klasach pochodnych?
Signup and view all the answers
Jak uniemożliwić nadpisanie metody w klasie potomnej?
Jak uniemożliwić nadpisanie metody w klasie potomnej?
Signup and view all the answers
Która klasa niejawnie dziedziczy po Any
?
Która klasa niejawnie dziedziczy po Any
?
Signup and view all the answers
Która z poniższych opcji poprawnie opisuje relację między właściwością val
a var
w kontekście nadpisywania w klasach?
Która z poniższych opcji poprawnie opisuje relację między właściwością val
a var
w kontekście nadpisywania w klasach?
Signup and view all the answers
Które z wymienionych cech nie są dozwolone dla klas danych (data class)?
Które z wymienionych cech nie są dozwolone dla klas danych (data class)?
Signup and view all the answers
Jakie metody są automatycznie generowane dla klas danych w Kotlinie?
Jakie metody są automatycznie generowane dla klas danych w Kotlinie?
Signup and view all the answers
Jaka jest główna różnica między zagnieżdżoną (nested) a wewnętrzną (inner) klasą w Kotlinie?
Jaka jest główna różnica między zagnieżdżoną (nested) a wewnętrzną (inner) klasą w Kotlinie?
Signup and view all the answers
W jaki sposób wywoływane są funkcje rozszerzające w Kotlinie?
W jaki sposób wywoływane są funkcje rozszerzające w Kotlinie?
Signup and view all the answers
Jakie jest zastosowanie słowa kluczowego this
w funkcji rozszerzającej?
Jakie jest zastosowanie słowa kluczowego this
w funkcji rozszerzającej?
Signup and view all the answers
Które z poniższych stwierdzeń poprawnie opisuje domyślną implementację metody w interfejsie?
Które z poniższych stwierdzeń poprawnie opisuje domyślną implementację metody w interfejsie?
Signup and view all the answers
Jakie są ograniczenia obiektów singleton w Kotlinie?
Jakie są ograniczenia obiektów singleton w Kotlinie?
Signup and view all the answers
Które z poniższych opisuje cel obiektów towarzyszących (companion object)?
Które z poniższych opisuje cel obiektów towarzyszących (companion object)?
Signup and view all the answers
W jaki sposób odwołujemy się do obiektu towarzyszącego (companion object) niezależnie od tego, czy jest on nazwany czy nie?
W jaki sposób odwołujemy się do obiektu towarzyszącego (companion object) niezależnie od tego, czy jest on nazwany czy nie?
Signup and view all the answers
Study Notes
Wprowadzenie do języka Kotlin
- Język programowania Kotlin jest wieloplatformowy, statycznie typowany i uniwersalny
- Zaprojektowany do pełnego współdziałania z językiem Java
- Działa na platformie JVM, kompiluje się do JavaScript lub kodu natywnego (LLVM)
- Standardowy kompilator Kotlin generuje kod bajtowy Java 8, ale umożliwia wybór docelowej wersji Java (9–20) dla optymalizacji
Cele przedmiotu i wymagania wstępne
- Poznanie języka Kotlin
- Podstawy tworzenia interfejsu użytkownika
- Zasady projektowania architektury aplikacji mobilnej
- Znajomość programowania obiektowego
- Język angielski na poziomie podstawowym
- Znajomość zagadnień z zakresu struktur danych i sieci komputerowych
- Zaliczenie pisemne (test z pytaniami zamkniętymi)
Efekty uczenia się
- Wiedza: Student zna najważniejsze elementy języka Kotlin, architekturę aplikacji mobilnej i metody tworzenia interfejsu użytkownika.
- Umiejętności: Student potrafi projektować i implementować aplikacje mobilne o dobrej architekturze, pozwalającej na łatwe utrzymanie i rozbudowę, wykorzystując różne metody tworzenia interfejsów użytkownika.
- Kompetencje społeczne: Student rozumie dynamiczny rozwój technologii mobilnych oraz konieczność ciągłego aktualizowania wiedzy w tym obszarze.
Tematyka wykładów
- Wprowadzenie do składni, system typów, wyrażeń, operatorów i funkcji języka Kotlin
- 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)
- Asynchroniczne programowanie w Kotlinie (współprogramy)
- Architektura aplikacji (zarządzanie stanem, obsługa cyklu życia, wiązanie widoków i danych)
- Przechowywanie danych
- Zarządzanie działaniem zadań w tle
- Wstrzykiwanie zależności w systemie Android
- Tworzenie testów aplikacji mobilnych
Zalecana literatura
- Efektywny Kotlin: najlepsze praktyki, Marcin Moskała, przekład: Tomasz Walczak, Gliwice, Helion, 2021
- Kickstart Modern Android Development with Jetpack and Kotlin, Catalin Ghita, Packt Publishing, 2022
- Inne materiały dostępne na stronach internetowych kotlinlang.org/ i developer.android.com
Język Kotlin
- Kotlin to wieloplatformowy, statycznie typowany język programowania wysokiego poziomu, z wnioskowaniem typów
- Ma możliwość pełnego współdziałania z Javą
- Działa na JVM, kompiluje się do JavaScript lub kodu natywnego poprzez LLVM
- Od Android Studio 3.0 (10/2017) jest alternatywą dla standardowego kompilatora Java
Historia
- Kotlin został zaprezentowany przez firmę JetBrains w lipcu 2011 r.
- W lutym 2012 r. projekt Kotlin został udostępniony jako open source na licencji Apache 2
- Długotrwałą kompatybilność zapewniają wersje od Kotlina 1.0
- Wsparcie przez Google dla Kotlina na Androidzie ogłoszono podczas Google I/O 2017
- 2019 r. Kotlin stał się preferowanym językiem dla twórców aplikacji Androidowych
- Wydane wersje: Kotlin 1.0, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9
Podstawowe typy danych
Kategoria | Typy |
---|---|
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 |
Podstawowe typy danych (kontynuacja)
- Any: korzeń hierarchii klas w Kotlinie (wszystkie klasy dziedziczą po Any, podobnie jak w Javie po Object)
- Unit: typ o pojedynczej wartości - odpowiednik void z Javy.
- Nothing: typ nie ma instanci; używany do reprezentowania wartości, która nigdy nie istnieje (funkcja zawsze zgłasza wyjątek)
Podstawy składni
-
Zmienna:
var a: Int = 1
(typ podaje się po dwukropku, typowanie) -
Stała:
val d = 1
(immutable) -
Konwersja typów:
b=c.toInt()
-
Szablony łańcuchów:
"e is $e"
(wyrażenia muszą być w klamrach{}
po znaku$
) -
Instrukcje sterujące:
if
,when
(odpowiednikswitch
) -
Tablice:
val arr1 = arrayOf(1, 2, 3)
,val arr2 = arrayOfNulls<String>(4)
,val arr3 = Array(5){i->(i*i).toString()}
-
Zakresy:
for (number in 1..3)
,for (i in 4 downto 1)
,for (i in 0..8 step 2)
Funkcje
- Funkcje z pojedynczym wyrażeniem (wypisanie wyrażenia jest powrotem z funkcji)
fun sum2(x: Int, y: Int) = x + y
- Parametry domyślne
fun printMessageWithPrefix(message: String, prefix: String = "Info")
- Lambda
({ text: String -> text.uppercase() }("hello"))
- Wyrażenia lambda z parametrami i bez, przypisywanie lambd do zmiennych
Wyrażenia lambda
- Sposób definiowania funkcji anonimowych w języku Kotlin
- Możemy je używać do przekazywania funkcji jako parametrów do innych funkcji.
- W Kotlinie lambdy są często używane w połączeniu z operacjami na kolekcjach (np. filtrowanie, mapowanie)
Klasy
- Konstruktor główny:
class Customer
- Konstruktory dodatkowe (instrukcje
init
):class Customer2
- Inicjalizacja właściwości:
val firstNameProp: String = firstName.also(::println)
- Właściwości z domyślnymi wartościami:
var email: String = "[email protected]"
- Inny typ konstruktorów (główny i dodatkowe)
class Person(val name: String)
Klasy - widoczność
- public: widoczne wszędzie
- private: widoczne tylko w pliku zawierającym deklarację
- internal: widoczne w całym module
- protected: widoczne w klasie i jej podklasach
Klasy - dziedziczenie
-
open class Base
: możliwość dziedziczenia -
class Derived(p: Int) : Base(p)
: dziedziczenie z definicją bazowego konstruktora
Klasy danych
-
data class User(val name: String, val id: Int)
: automatyczne generowanie metod toString(), equals(), hashCode(), copy(), componentN()
Obiekty towarzyszące
-
companion object Factory
(klasa towarzysząca)
Delegacja interfejsów
- Umożliwia użycie składowych innego obiektu w klasie
-
class Derived(b: Base) : Base by b
Delegacja właściwości
- Służy do implementacji właściwości w inny sposób niż za pomocą pól
- Umożliwia użycie metody getValue() i setValue().
Null safety
- Unikanie wartości null w zmiennych typu String?
- Operator ?. (safe call)
- Operator ?: (Elvis operator)
Operatory porównania
- Równość strukturalna
==
(analogiczny doequals
) i!=
Kolekcje
- Typy kolekcji (zbiory, listy, mapy)
- Operacje na kolekcjach
- Interfejsy kolekcji
Listy
- Tworzenie list
- Przejrzywanie list
- Porównywanie list
- Modyfikacja list
Zbiory
- Tworzenie zbiorów
- Operacje na zbiorach
Mapy
- Tworzenie map
- Operacje na mapach (dodawanie, usuwanie, szukanie)
Operacje na kolekcjach (kontynuacja)
- filtrowanie, transformacje, operacje agregujące
- mapowanie, zip, asocjacje, spłaszczanie
- sprawdzanie spełniania warunków (
any()
,none()
,all()
) - podział (
partition
), grupowanie (groupBy
) - wycinanie (
slice
,take
,drop
) - agregacja (
minOrNull
,maxOrNull
,average
,sum
,count
)
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Related Documents
Description
Ten quiz testuje wiedzę na temat języka programowania Kotlin, jego zastosowań oraz podstawowych zasad projektowania aplikacji mobilnych. Sprawdzi również umiejętności związane z tworzeniem interfejsu użytkownika oraz znajomością programowania obiektowego. Czy jesteś gotowy, aby sprawdzić swoją wiedzę?