0Pricing
Kotlin Academy · Lektion

expect und actual

Plattformspezifische Implementierungen

expect und actual ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Der Bedarf an plattformspezifischem Code

Manche Funktionen haben keine gemeinsame Implementierung – etwa das Ermitteln des Betriebssystemnamens, einer UUID oder der aktuellen Plattform. KMM löst dies mit dem Mechanismus expect/actual.

expect-Deklarationen

In commonMain deklarieren Sie eine expect-Funktion oder -Klasse – einen Vertrag ohne Implementierung. Gemeinsamer Code kann sie aufrufen.

// commonMain
expect fun platformName(): String

actual unter Android

Jede Plattform stellt eine actual-Implementierung bereit, die der Signatur entspricht.

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

actual unter iOS

Das iOS-Source-Set stellt eine eigene Version bereit, die native APIs verwendet.

// iosMain
import platform.UIKit.UIDevice

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

Verwendung im gemeinsamen Code

Gemeinsamer Code ruft die erwartete Funktion auf, als wäre sie vorhanden; der Compiler verknüpft für jedes Target das passende actual.

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

expect-Klassen

Sie können eine vollständige Klasse als expect deklarieren. Jede Plattform stellt eine actual-Klasse mit passenden Membern bereit.

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

Implementierungen von actual-Klassen

Die Plattformen implementieren die erwartete Klasse mit nativen Datei-APIs (z. B. Java IO unter Android und Foundation unter iOS).

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

expect mit typealias

Ein actual kann ein typealias für einen vorhandenen Plattformtyp sein, sodass kein Wrapper erforderlich ist.

// commonMain
expect class Uuid

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

Regeln für die Übereinstimmung von Signaturen

Das actual muss exakt mit dem expect übereinstimmen: gleicher Name, gleiche Parameter und gleicher Rückgabetyp. Eine Abweichung führt zu einem Kompilierungsfehler und garantiert so Konsistenz zwischen den Plattformen.

Wann expect/actual nicht verwendet werden sollte

Bevorzugen Sie einfache Schnittstellen mit zur Laufzeit injizierten Plattformimplementierungen, wenn die Abstraktion flexibler sein soll. Verwenden Sie expect/actual nur für kleine, unveränderliche plattformspezifische Grundfunktionen.

Eine Veranschaulichung mit gemeinsamem Code

Außerhalb von KMM besteht dieselbe Idee einfach darin, eine Abstraktion aufzurufen. Hier steht eine einfache Funktion stellvertretend für den Plattformaufruf.

fun platformName(): String = "Demo Platform"

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

Kurztest

Wo wird eine expect-Deklaration geschrieben, und wo befinden sich ihre actual-Implementierungen?

Zusammenfassung

expect/actual überbrückt Unterschiede zwischen Plattformen:

  • expect deklariert den Vertrag in commonMain
  • actual implementiert ihn pro Plattform (oder über typealias)
  • Signaturen müssen exakt übereinstimmen
  • Für flexible Abstraktionen sollten Sie Schnittstellen bevorzugen

Als Nächstes: Geschäftslogik teilen.

Häufig gestellte Fragen

Ist die Lektion „expect und actual“ kostenlos?

Ja — der vollständige Text von „expect und actual“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „expect und actual“?

Plattformspezifische Implementierungen Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „expect und actual“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. KMM-Projektstruktur
  2. expect und actual
  3. Geschäftslogik gemeinsam nutzen
  4. Plattform-APIs
← Zurück zu Kotlin Academy