0Pricing
Kotlin Academy · レッスン

要素へのアクセス:get、first、last、getOrNull

インデックスベースおよび関数型のアクセサーを使って要素を取得します。

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

要素にアクセスするさまざまな方法

Kotlinでは、要素を読み取る方法がいくつか用意されています。インデックスによる方法([]、get)、位置による方法(first、last)、安全にアクセスする方法(getOrNull、firstOrNull)です。

[]によるインデックスアクセス

角かっこ構文はget(index)の省略記法です。インデックスが無効な場合はIndexOutOfBoundsExceptionをスローします。

fun main() {
    val items = listOf("a", "b", "c")
    println(items[0]) // a
    println(items[2]) // c
}

getと[]の違い

list.get(i)はlist[i]と同じです。構文が異なるだけで、動作は変わりません。

fun main() {
    val items = listOf(10, 20, 30)
    println(items.get(1)) // 20
    println(items[1])     // 20
}

安全なアクセスのためのgetOrNull

getOrNull(i)は、インデックスが範囲外の場合に例外をスローせずnullを返します。

fun main() {
    val items = listOf("x", "y")
    println(items.getOrNull(0)) // x
    println(items.getOrNull(5)) // null
}

デフォルト値を指定するgetOrElse

getOrElse(i) { default }は、インデックスが無効な場合にデフォルト値を遅延評価して計算します。

fun main() {
    val items = listOf(1, 2, 3)
    println(items.getOrElse(10) { -1 }) // -1
    println(items.getOrElse(1) { -1 })  // 2
}

firstとlast

first()とlast()は対応する要素を返します。リストが空の場合は、どちらも例外をスローします。

fun main() {
    val nums = listOf(5, 8, 12)
    println(nums.first()) // 5
    println(nums.last())  // 12
}

firstOrNull/lastOrNull

...OrNullバリエーションは、空のリストに対して例外をスローせずnullを返すため、より安全です。

fun main() {
    val empty: List<Int> = emptyList()
    println(empty.firstOrNull()) // null
    println(empty.lastOrNull())  // null
}

述語を使うバリエーション

first { predicate }は最初に一致した要素を返します。find { predicate }はfirstOrNull { predicate }のnull許容エイリアスです。

fun main() {
    val nums = listOf(3, 7, 8, 11)
    println(nums.first { it > 5 })       // 7
    println(nums.firstOrNull { it > 100 }) // null
    println(nums.find { it > 100 })       // null (same)
}

Mapの値へのアクセス

Mapでも同じ[]構文を使用しますが、戻り値はnull許容です。キーが存在しない場合、getValue(key)は例外をスローし、getOrDefaultは代替値を提供します。

fun main() {
    val ages = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"])             // 30
    println(ages["Charlie"])           // null
    println(ages.getOrDefault("Z", 0)) // 0
}

elementAtとelementAtOrNull

セットなど、インデックスをサポートしないコレクションにもelementAt(i)とそのOrNullバリエーションが用意されています。

fun main() {
    val s = setOf("a", "b", "c")
    println(s.elementAt(1))          // b
    println(s.elementAtOrNull(10))   // null
}

適切なアクセサーの選択

インデックスが有効だと証明できる場合を除き、安全なバリエーション(getOrNull、firstOrNull、getOrDefault)を優先してください。例外はコストが高く、処理を忘れやすいためです。

fun headOf(list: List<Int>): Int? = list.firstOrNull()
fun main() {
    println(headOf(listOf(1, 2, 3))) // 1
    println(headOf(emptyList()))      // null
}

確認問題

インデックスが範囲外のとき、例外をスローせずnullを返すアクセサーはどれですか。

まとめ

直接アクセスには[]/getを使用します(エラー時には例外をスローします)。範囲が無効になる可能性がある場合は、getOrNull、firstOrNull、lastOrNull、getOrDefault、getOrElseを優先してください。Mapでは、null許容のアクセスには[]を、例外をスローするアクセスにはgetValueを使用します。

よくある質問

「要素へのアクセス:get、first、last、getOrNull」レッスンは無料ですか?

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

「要素へのアクセス:get、first、last、getOrNull」で何を学びますか?

インデックスベースおよび関数型のアクセサーを使って要素を取得します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「要素へのアクセス:get、first、last、getOrNull」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. listOf、setOf、mapOf:読み取り専用コレクション
  2. mutableListOf、mutableMapOf:可変コレクションの構築
  3. 要素へのアクセス:get、first、last、getOrNull
  4. 標準ライブラリでコレクションを反復・変換する
← Kotlin Academyに戻る