В чем разница между expect/actual и обычным интерфейсом

«В чем разница между expect/actual и обычным интерфейсом» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

expect/actual — это механизм Kotlin Multiplatform для объявления платформо-зависимой реализации, где expect определяет сигнатуру, а actual — реализацию для конкретной платформы. Обычный интерфейс — это абстракция, не привязанная к платформе.

Пример:

// Общее для всех платформ
expect fun getPlatformName(): String

// Android реализация
actual fun getPlatformName(): String = "Android"

// iOS реализация
actual fun getPlatformName(): String = "iOS"

Ключевые отличия:

  1. expect/actual компилируется в разные реализации для каждой платформы
  2. Обычный интерфейс требует ручной реализации в каждом модуле
  3. actual функции/классы должны точно соответствовать expect (включая модификаторы)