Wprowadzenie do języka Kotlin
35 Questions
2 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 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:

  • 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?

  • 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?

    <p>Interfejsy zmienne rozszerzają interfejsy tylko do odczytu o operacje dodawania, usuwania i aktualizowania elementów. (D)</p> Signup and view all the answers

    Co oznacza, że kolekcje tylko do odczytu są kowariantne w Kotlinie?

    <p>Można przypisać kolekcję typu <code>List&lt;Rectangle&gt;</code> do zmiennej typu <code>List&lt;Shape&gt;</code> jeśli <code>Rectangle</code> dziedziczy po <code>Shape</code>. (D)</p> Signup and view all the answers

    Do czego służy adnotacja @HtmlTagMarker?

    <p>Do oznaczania klas reprezentujących elementy DSL i określania receivera dla lambd. (B)</p> Signup and view all the answers

    Które z poniższych zdań najlepiej opisuje zachowanie funkcji lazy()?

    <p>Funkcja <code>lazy()</code> wykonuje lambdę tylko raz i zapamiętuje jej wynik. (C)</p> Signup and view all the answers

    W kontekście funkcji Delegates.observable(), kiedy jest wywoływana funkcja obsługująca modyfikację?

    <p>Po każdej modyfikacji właściwości. (D)</p> Signup and view all the answers

    Jaki jest cel metody renderAttributes?

    <p>Konwertowanie mapy atrybutów elementu na tekstową reprezentację. (B)</p> Signup and view all the answers

    W jaki sposób dodawane są nowe elementy potomne do obiektu Tag?

    <p>Poprzez metodę <code>addChild</code> w klasie <code>Tag</code>. (C)</p> Signup and view all the answers

    Jaką wartość zwraca metoda toString klasy Tag?

    <p>Pełną reprezentację HTML elementu wraz z jego potomkami jako <code>String</code>. (B)</p> Signup and view all the answers

    Która część kodu definiuje strukturę HTML strony (np. html, head, body itp.)?

    <p>Funkcje rozszerzające klasy <code>Tag</code>, takie jak <code>html</code>, <code>head</code>, <code>body</code> (B)</p> Signup and view all the answers

    Jaki jest efekt działania builder.append("$indent\n") w metodzie render?

    <p>Dodaje wcięcie i znak nowej linii. (A)</p> Signup and view all the answers

    W kodzie a(href = "https://kotlinlang.org") {+"link"}, jaka jest funkcja a?

    <p>Funkcja tworząca element hiperłącza. (D)</p> Signup and view all the answers

    Jak w kodzie HTML DSL dodawany jest tekst do elementu Tag?

    <p>Używając operatora <code>+</code> wewnątrz bloku lambda. (C)</p> Signup and view all the answers

    W jakiej kolejności wykonają się bloki inicjalizacyjne i przypisania właściwości w klasie Customer3?

    <p>Najpierw przypisanie <code>firstNameProp</code>, potem <code>init#1</code>, potem <code>lastNameProp</code>, na końcu <code>init#2</code>. (C)</p> Signup and view all the answers

    Które stwierdzenie dotyczące konstruktorów w Kotlinie jest prawdziwe?

    <p>Jeśli konstruktor podstawowy nie ma parametrów, delegacja w konstruktorze dodatkowym jest niejawna. (A)</p> Signup and view all the answers

    Jak zainicjalizować właściwość klasy Contact o nazwie category, aby miała wartość "private"?

    <p>Ustawić <code>val category: String = &quot;private&quot;</code>. (C)</p> Signup and view all the answers

    Jak odwołać się do pola (backing field) właściwości w setterze w Kotlinie?

    <p>Używając słowa kluczowego <code>field</code>. (D)</p> Signup and view all the answers

    Który modyfikator widoczności sprawia, że deklaracja jest widoczna tylko w tym samym pliku?

    <p><code>private</code> (D)</p> Signup and view all the answers

    Składowa klasy z modyfikatorem protected jest widoczna:

    <p>Wewnątrz tej klasy i w jej podklasach. (B)</p> Signup and view all the answers

    Które słowo kluczowe jest używane, aby umożliwić dziedziczenie po klasie?

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

    Jak zadeklarować metodę, którą można nadpisać w klasach pochodnych?

    <p>Używając słowa kluczowego <code>open</code>. (B)</p> Signup and view all the answers

    Jak uniemożliwić nadpisanie metody w klasie potomnej?

    <p>Używając słowa kluczowego <code>final</code> przy definicji metody klasy pochodnej. (D)</p> Signup and view all the answers

    Która klasa niejawnie dziedziczy po Any?

    <p>Każda klasa w Kotlinie. (C)</p> 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?

    <p>Właściwość <code>val</code> może być nadpisana przez właściwość <code>var</code>, ale nie na odwrót. (D)</p> Signup and view all the answers

    Które z wymienionych cech nie są dozwolone dla klas danych (data class)?

    <p>Klasy danych mogą być otwarte (open). (C)</p> Signup and view all the answers

    Jakie metody są automatycznie generowane dla klas danych w Kotlinie?

    <p><code>toString()</code>, <code>equals()</code>, <code>copy()</code>, <code>hashCode()</code> i <code>componentN()</code> (D)</p> 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?

    <p>Klasa wewnętrzna ma dostęp do składowych klasy zewnętrznej, a zagnieżdżona nie. (B)</p> Signup and view all the answers

    W jaki sposób wywoływane są funkcje rozszerzające w Kotlinie?

    <p>Statycznie, w zależności od typu zmiennej, na której jest wywoływana funkcja. (D)</p> Signup and view all the answers

    Jakie jest zastosowanie słowa kluczowego this w funkcji rozszerzającej?

    <p><code>this</code> odnosi się do instancji klasy, na której funkcja rozszerzająca jest wywoływana. (A)</p> Signup and view all the answers

    Które z poniższych stwierdzeń poprawnie opisuje domyślną implementację metody w interfejsie?

    <p>Metoda z domyślną implementacją może być opcjonalnie nadpisana przez klasy implementujące interfejs. (A)</p> Signup and view all the answers

    Jakie są ograniczenia obiektów singleton w Kotlinie?

    <p>Obiekty singleton nie mogą mieć konstruktorów. (B)</p> Signup and view all the answers

    Które z poniższych opisuje cel obiektów towarzyszących (companion object)?

    <p>Obiekty towarzyszące są używane do przechowywania ogólnych właściwości i metod, które są powiązane z klasą, a nie z instancją. (A)</p> 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?

    <p>Używając nazwy klasy, w której obiekt towarzyszący jest zdefiniowany. (A)</p> 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 (odpowiednik switch)
    • 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 do equals) 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.

    Quiz Team

    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ę?

    More Like This

    Android Development Overview
    8 questions
    Overview of Kotlin Programming Language
    10 questions
    Android Kotlin Development Overview
    45 questions
    Android Uygulaması Projesi
    15 questions

    Android Uygulaması Projesi

    DistinctiveCognition4899 avatar
    DistinctiveCognition4899
    Use Quizgecko on...
    Browser
    Browser