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?
- ===
- ?. (correct)
- ?:
- ==
Operator ?:
w Kotlinie, nazywany operatorem Elvisa, służy do:
Operator ?:
w Kotlinie, nazywany operatorem Elvisa, służy do:
- Wyboru wartości domyślnej, gdy obiekt po lewej stronie jest nullem. (correct)
- Porównywania równości strukturalnej dwóch obiektów.
- Bezpiecznego dostępu do elementu kolekcji z potencjalnym indeksem poza zakresem.
- Porównywania równości referencyjnej dwóch obiektów.
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?
- Równość strukturalna używa `equals()`, a referencyjna sprawdza, czy obiekty zajmują to samo miejsce w pamięci. (correct)
- Równość strukturalna to `===`, a referencyjna to `==`.
- Równość strukturalna porównuje referencje, a referencyjna wartości.
- Równość strukturalna dotyczy tylko typów prostych, a referencyjna obiektów.
Które stwierdzenie najlepiej opisuje interfejsy kolekcji w Kotlinie?
Które stwierdzenie najlepiej opisuje interfejsy kolekcji w Kotlinie?
Co oznacza, że kolekcje tylko do odczytu są kowariantne w Kotlinie?
Co oznacza, że kolekcje tylko do odczytu są kowariantne w Kotlinie?
Do czego służy adnotacja @HtmlTagMarker
?
Do czego służy adnotacja @HtmlTagMarker
?
Które z poniższych zdań najlepiej opisuje zachowanie funkcji lazy()
?
Które z poniższych zdań najlepiej opisuje zachowanie funkcji lazy()
?
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ę?
Jaki jest cel metody renderAttributes
?
Jaki jest cel metody renderAttributes
?
W jaki sposób dodawane są nowe elementy potomne do obiektu Tag
?
W jaki sposób dodawane są nowe elementy potomne do obiektu Tag
?
Jaką wartość zwraca metoda toString
klasy Tag
?
Jaką wartość zwraca metoda toString
klasy Tag
?
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.)?
Jaki jest efekt działania builder.append("$indent\n")
w metodzie render
?
Jaki jest efekt działania builder.append("$indent\n")
w metodzie render
?
W kodzie a(href = "https://kotlinlang.org") {+"link"}
, jaka jest funkcja a
?
W kodzie a(href = "https://kotlinlang.org") {+"link"}
, jaka jest funkcja a
?
Jak w kodzie HTML DSL dodawany jest tekst do elementu Tag
?
Jak w kodzie HTML DSL dodawany jest tekst do elementu Tag
?
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
?
Które stwierdzenie dotyczące konstruktorów w Kotlinie jest prawdziwe?
Które stwierdzenie dotyczące konstruktorów w Kotlinie jest prawdziwe?
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"?
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?
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?
Składowa klasy z modyfikatorem protected
jest widoczna:
Składowa klasy z modyfikatorem protected
jest widoczna:
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?
Jak zadeklarować metodę, którą można nadpisać w klasach pochodnych?
Jak zadeklarować metodę, którą można nadpisać w klasach pochodnych?
Jak uniemożliwić nadpisanie metody w klasie potomnej?
Jak uniemożliwić nadpisanie metody w klasie potomnej?
Która klasa niejawnie dziedziczy po Any
?
Która klasa niejawnie dziedziczy po Any
?
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?
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)?
Jakie metody są automatycznie generowane dla klas danych w Kotlinie?
Jakie metody są automatycznie generowane dla klas danych w Kotlinie?
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?
W jaki sposób wywoływane są funkcje rozszerzające w Kotlinie?
W jaki sposób wywoływane są funkcje rozszerzające w Kotlinie?
Jakie jest zastosowanie słowa kluczowego this
w funkcji rozszerzającej?
Jakie jest zastosowanie słowa kluczowego this
w funkcji rozszerzającej?
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?
Jakie są ograniczenia obiektów singleton w Kotlinie?
Jakie są ograniczenia obiektów singleton w Kotlinie?
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)?
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?
Flashcards
?.
?.
Operator bezpiecznego odwoływania się do właściwości, który zwraca null, jeśli obiekt jest null. Nie próbuje odwoływać się do właściwości, jeśli obiekt jest null.
?:
?:
Operator Elvisa, który pozwala przypisać wartość domyślną, jeśli obiekt jest null. Zwraca wartość po prawej stronie operacji, jeśli obiekt po lewej jest null.
=== (i !==)
=== (i !==)
Porównanie referencji, które sprawdza, czy dwie zmienne wskazują na ten sam obiekt.
== (i !=)
== (i !=)
Signup and view all the flashcards
Interfejs zmienny (mutable)
Interfejs zmienny (mutable)
Signup and view all the flashcards
Klasa Shape
Klasa Shape
Signup and view all the flashcards
Klasa Rectangle
Klasa Rectangle
Signup and view all the flashcards
Klasa Polygon
Klasa Polygon
Signup and view all the flashcards
Klasy danych
Klasy danych
Signup and view all the flashcards
Funkcje rozszerzające
Funkcje rozszerzające
Signup and view all the flashcards
Klasy zagnieżdżone
Klasy zagnieżdżone
Signup and view all the flashcards
Klasy wewnętrzne
Klasy wewnętrzne
Signup and view all the flashcards
Interfejsy
Interfejsy
Signup and view all the flashcards
Singleton
Singleton
Signup and view all the flashcards
Obiekt towarzyszący
Obiekt towarzyszący
Signup and view all the flashcards
Klasa z parametrami
Klasa z parametrami
Signup and view all the flashcards
Blok init
Blok init
Signup and view all the flashcards
Właściwości w klasie
Właściwości w klasie
Signup and view all the flashcards
Właściwość tylko do odczytu
Właściwość tylko do odczytu
Signup and view all the flashcards
Właściwość zapisywalna
Właściwość zapisywalna
Signup and view all the flashcards
Specyfikatory dostępu
Specyfikatory dostępu
Signup and view all the flashcards
Specyfikator dostępu private
Specyfikator dostępu private
Signup and view all the flashcards
Specyfikator dostępu protected
Specyfikator dostępu protected
Signup and view all the flashcards
Specyfikator dostępu internal
Specyfikator dostępu internal
Signup and view all the flashcards
Specyfikator dostępu public
Specyfikator dostępu public
Signup and view all the flashcards
Factory
Factory
Signup and view all the flashcards
Delegowanie interfejsów
Delegowanie interfejsów
Signup and view all the flashcards
Delegacja właściwości
Delegacja właściwości
Signup and view all the flashcards
Operator by
w delegacji
Operator by
w delegacji
Signup and view all the flashcards
Nadpisywanie metod zdelegowanych
Nadpisywanie metod zdelegowanych
Signup and view all the flashcards
Funkcja lazy()
Funkcja lazy()
Signup and view all the flashcards
Funkcja observable()
Funkcja observable()
Signup and view all the flashcards
children.add(tag)
children.add(tag)
Signup and view all the flashcards
render(builder: StringBuilder, indent: String)
render(builder: StringBuilder, indent: String)
Signup and view all the flashcards
renderAttributes(): String
renderAttributes(): String
Signup and view all the flashcards
toString(): String
toString(): String
Signup and view all the flashcards
Klasa Tag
Klasa Tag
Signup and view all the flashcards
Metoda set(value)
w Tag
Metoda set(value)
w Tag
Signup and view all the flashcards
Klasa BodyTag
Klasa BodyTag
Signup and view all the flashcards
Operator unaryPlus()
Operator unaryPlus()
Signup and view all the flashcards
Adnotacja @DslMarker
Adnotacja @DslMarker
Signup and view all the flashcards
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ść dziedziczeniaclass 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.