expectとactual
プラットフォーム固有の実装を学びます
「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(): StringAndroidでのactual
各プラットフォームが、シグネチャに一致する actual 実装を提供します。
// androidMain
actual fun platformName(): String = "Android " + android.os.Build.VERSION.SDK_INTiOSでの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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- KMMプロジェクト構成
- expectとactual
- ビジネスロジックの共有
- プラットフォームAPI