0Pricing
Kotlin Academy · Lekcja

expect i actual

Implementacje zależne od platformy

expect i actual to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Potrzeba kodu platformowego

Niektóre funkcje nie mają wspólnej implementacji — na przykład pobieranie nazwy systemu operacyjnego, identyfikatora UUID lub bieżącej platformy. KMM rozwiązuje ten problem za pomocą mechanizmu expect/actual.

Deklaracje expect

W commonMain deklaruje się funkcję lub klasę expect — kontrakt bez treści. Wspólny kod może ją wywoływać.

// commonMain
expect fun platformName(): String

actual na Androidzie

Każda platforma udostępnia implementację actual zgodną z sygnaturą deklaracji.

// androidMain
actual fun platformName(): String = "Android " + android.os.Build.VERSION.SDK_INT

actual na iOS

Zbiór źródeł iOS udostępnia własną wersję, korzystającą z natywnych interfejsów API.

// iosMain
import platform.UIKit.UIDevice

actual fun platformName(): String =
    UIDevice.currentDevice.systemName + " " + UIDevice.currentDevice.systemVersion

Używanie w kodzie wspólnym

Wspólny kod wywołuje oczekiwaną funkcję tak, jakby już istniała; kompilator łączy właściwą implementację actual dla każdego targetu.

// commonMain
class Platform {
    val name: String get() = platformName()
}

Klasy expect

Można zadeklarować całą klasę jako expect. Każda platforma udostępnia klasę actual z pasującymi elementami.

// commonMain
expect class FileReader(path: String) {
    fun read(): String
}

Implementacje klas actual

Platformy implementują oczekiwaną klasę za pomocą natywnych interfejsów API plików (np. Java IO na Androidzie i Foundation na iOS).

// androidMain
actual class FileReader actual constructor(private val path: String) {
    actual fun read(): String = java.io.File(path).readText()
}

expect z typealias

Implementacją actual może być typealias wskazujący istniejący typ platformy, co pozwala uniknąć warstwy opakowującej.

// commonMain
expect class Uuid

// jvm/androidMain
actual typealias Uuid = java.util.UUID

Zasady dopasowywania sygnatur

Implementacja actual musi dokładnie odpowiadać deklaracji expect: mieć tę samą nazwę, parametry i typ zwracany. Niezgodność powoduje błąd kompilacji, gwarantując spójność między platformami.

Kiedy nie używać expect/actual

Jeśli abstrakcja ma być bardziej elastyczna, należy preferować proste interfejsy z implementacjami platformowymi wstrzykiwanymi w czasie działania. Mechanizm expect/actual warto rezerwować dla małych, stałych elementów specyficznych dla platformy.

Ilustracja kodu wspólnego

Poza KMM ta sama idea sprowadza się po prostu do wywołania abstrakcji. Zwykła funkcja pełni tutaj rolę wywołania platformowego.

fun platformName(): String = "Demo Platform"

fun main() {
    println("Running on " + platformName())
}

Szybki test

Gdzie zapisuje się deklarację expect, a gdzie znajdują się jej implementacje actual?

Podsumowanie

Mechanizm expect/actual wypełnia luki między platformami:

  • expect deklaruje kontrakt w commonMain
  • actual implementuje go dla konkretnej platformy (lub za pomocą typealias)
  • Sygnatury muszą być dokładnie zgodne
  • W przypadku elastycznych abstrakcji należy preferować interfejsy

Następnie: współdzielenie logiki biznesowej.

Często zadawane pytania

Czy lekcja „expect i actual” jest bezpłatna?

Tak — pełny tekst „expect i actual” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „expect i actual”?

Implementacje zależne od platformy Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „expect i actual”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Struktura projektu KMM
  2. expect i actual
  3. Współdzielenie logiki biznesowej
  4. API platformy
← Powrót do Kotlin Academy