Kotlin Academy · レッスン

expectとactual

プラットフォーム固有の実装を学びます

レッスン 2/413 ステップ

「expectとactual」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

プラットフォームコードの必要性

OS名、UUID、現在のプラットフォームの取得など、共通の実装を持たない機能があります。KMMではexpect/actualの仕組みでこれを解決します。

expect 宣言

commonMain では、expect 関数またはクラスを宣言します。これは本体を持たない契約であり、共通コードから呼び出せます。

// commonMain
expect fun platformName(): String

Androidでのactual

各プラットフォームが、シグネチャに一致する actual 実装を提供します。

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

iOSでのactual

iOSのソースセットでは、ネイティブAPIを使って独自の実装を提供します。

// iosMain
import platform.UIKit.UIDevice

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

共通コードでの利用

共通コードでは、期待される関数が存在するかのように呼び出します。コンパイラーがターゲットごとに正しいactualをリンクします。

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

expect クラス

クラス全体をexpectとして宣言できます。各プラットフォームが、メンバーの一致するactualクラスを提供します。

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

actual クラスの実装

各プラットフォームは、ネイティブのファイルAPIを使ってexpectされたクラスを実装します(AndroidではJava IO、iOSではFoundationなど)。

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

expect with typealias

actualには、既存のプラットフォーム型へのtypealiasを指定できるため、ラッパーを避けられます。

// commonMain
expect class Uuid

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

シグネチャ一致のルール

actualはexpectと完全に一致していなければなりません。名前、パラメーター、戻り値の型が同じである必要があります。一致しない場合はコンパイルエラーになるため、プラットフォーム間の一貫性が保証されます。

expect/actualを使わない場合

抽象化に柔軟性が必要な場合は、実行時に注入するプラットフォーム実装付きの単純なインターフェースを優先します。expect/actualは、小さく固定的なプラットフォームプリミティブに限定してください。

共通コードの例

KMMの外では、同じ考え方は単に抽象化を呼び出すことです。ここでは、通常の関数がプラットフォーム呼び出しの代わりになります。

fun platformName(): String = "Demo Platform"

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

クイックチェック

expect 宣言はどこに記述し、その actual 実装はどこに記述しますか。

まとめ

expect/actualによってプラットフォーム間の差異を橋渡しできます。

  • expect で commonMain に契約を宣言する
  • プラットフォームごとに actual で実装する(または typealias を使う)
  • シグネチャは完全に一致させる必要がある
  • 柔軟な抽象化にはインターフェースを優先する

次はビジネスロジックの共有です。

無料で開始

AI チューターと学ぶ Kotlin — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「expectとactual」レッスンは無料ですか?

はい。「expectとactual」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「expectとactual」で何を学びますか?

プラットフォーム固有の実装を学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「expectとactual」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. KMMプロジェクト構成
  2. expectとactual
  3. ビジネスロジックの共有
  4. プラットフォームAPI
← Kotlin Academyに戻る