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(): Stringactual na Androidzie
Każda platforma udostępnia implementację actual zgodną z sygnaturą deklaracji.
// androidMain
actual fun platformName(): String = "Android " + android.os.Build.VERSION.SDK_INTactual 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.systemVersionUż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.UUIDZasady 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:
expectdeklaruje kontrakt wcommonMainactualimplementuje 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.