実際のコードで使う安全呼び出し?.とElvis ?:
安全呼び出しをチェーンし、Elvis演算子でフォールバック値を指定します。
「実際のコードで使う安全呼び出し?.とElvis ?:」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
大きな効果をもたらす2つの演算子
セーフコール ?. は、レシーバーが非 null の場合にだけメンバーを呼び出します。Elvis 演算子 ?: は、左辺が null の場合にフォールバック値を提供します。
セーフコールの基本
x?.member は、x が null の場合は null に評価され、それ以外の場合は通常どおり member にアクセスします。
fun main() {
val name: String? = "Kotlin"
val len: Int? = name?.length
println(len) // 6
val nope: String? = null
println(nope?.length) // null
}Elvis 演算子の基本
x ?: default は、x が非 null なら x を返し、それ以外の場合は右辺の default を返します。
fun main() {
val name: String? = null
val display = name ?: "Anonymous"
println(display) // Anonymous
}セーフコールと Elvis の組み合わせ
よく使われる書き方は obj?.member ?: default です。値を読み取り、なければフォールバックします。
fun main() {
val name: String? = null
val length = name?.length ?: 0
println("length = $length") // 0
}セーフコールの連結
複数の階層にわたって ?. を連結できます。どこか1つのリンクが null になると、式全体が null に短絡評価されます。
class Address(val city: String?)
class User(val address: Address?)
fun main() {
val u: User? = User(Address(null))
val city = u?.address?.city ?: "Unknown"
println(city) // Unknown
}右辺での Elvis による例外送出
Elvis の右辺には throw を含め、任意の式を置けます。必須値のチェックに便利です。
fun loadConfig(path: String?): String {
val p = path ?: throw IllegalArgumentException("path required")
return "loaded $p"
}
fun main() {
println(loadConfig("/etc/app"))
// loadConfig(null) // throws
}メソッドでのセーフコール
セーフコールは、プロパティへのアクセスだけでなく、任意のメソッドにも使用できます。
fun main() {
val raw: String? = " hello "
val cleaned = raw?.trim()?.uppercase() ?: ""
println(cleaned) // HELLO
}条件式でのセーフコール
条件式の中でもセーフコールを使用できます。Elvis と組み合わせると、Boolean のデフォルト値を指定できます。
fun main() {
val name: String? = "Alice"
if (name?.startsWith("A") == true) {
println("Starts with A")
}
}return と Elvis
ガード節では Elvis と return を使用し、必須値が null の場合に早期に処理を抜けます。
fun process(input: String?) {
val safe = input ?: return
println("processing $safe")
}
fun main() {
process("abc")
process(null) // returns silently
}continue/break と Elvis
ループ内では、Elvis から continue または break に短絡させることで、null の処理を簡潔に記述できます。
fun main() {
val items: List<String?> = listOf("a", null, "b", null, "c")
for (item in items) {
val v = item ?: continue
print("$v ")
}
println() // a b c
}実践:設定の検索
セーフコールと Elvis を組み合わせると、任意の設定をデフォルト値付きで読み取る処理を1行で記述できます。
class Config(val timeoutMs: Int?, val host: String?)
fun main() {
val cfg: Config? = Config(null, "prod.example.com")
val timeout = cfg?.timeoutMs ?: 5000
val host = cfg?.host ?: "localhost"
println("$host @ $timeout ms")
}簡単な確認
user が null の場合、user?.email ?: "unknown" は何に評価されますか?
まとめ
セーフコール(?.)と Elvis(?:)を組み合わせると、簡潔で null 安全なコードを記述できます。throw や return と Elvis を組み合わせると、データがない場合に早期に処理を抜けるガード節を作成できます。
よくある質問
「実際のコードで使う安全呼び出し?.とElvis ?:」レッスンは無料ですか?
はい。「実際のコードで使う安全呼び出し?.とElvis ?:」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「実際のコードで使う安全呼び出し?.とElvis ?:」で何を学びますか?
安全呼び出しをチェーンし、Elvis演算子でフォールバック値を指定します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「実際のコードで使う安全呼び出し?.とElvis ?:」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Nullable型と?修飾子
- 実際のコードで使う安全呼び出し?.とElvis ?:
- Nullableレシーバーで使うlet、also、run
- !!演算子:避けるべき場面と理由