拡張プロパティと計算拡張
サブクラス化せずに、既存のクラスへ計算プロパティを追加します。
「拡張プロパティと計算拡張」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
拡張プロパティ
読み取り専用の拡張プロパティ
val String.wordCount: Int
get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount) // 3可変の拡張プロパティ
var MutableList<Int>.first: Int
get() = this[0]
set(value) { this[0] = value }
val list = mutableListOf(1, 2, 3)
list.first = 10
println(list) // [10, 2, 3]バッキングフィールドなし
// ERROR: extension property cannot have backing field
// var String.cache: String = "" // NOT allowed!
// OK: computed only:
val String.isPalindrome: Boolean
get() = this == this.reversed()コレクションの拡張プロパティ
val <T> List<T>.secondOrNull: T?
get() = if (size >= 2) this[1] else null
val <T> List<T>.isNotNullOrEmpty: Boolean
get() = isNotEmpty()
println(listOf(1, 2, 3).secondOrNull) // 2Boolean 拡張プロパティ
val Any.isString: Boolean get() = this is String
val String.hasDigits: Boolean get() = any { it.isDigit() }
val Int.isPositive: Boolean get() = this > 0
println(42.isPositive) // true
println("abc123".hasDigits) // true拡張プロパティと拡張関数
// Property: stateless, simple characteristic
val String.isEmail: Boolean get() = '@' in this
// Function: has parameters
fun String.padCenter(width: Int) = padStart((length + width) / 2)Companion Object の拡張
data class Color(val r: Int, val g: Int, val b: Int) {
companion object
}
val Color.Companion.RED get() = Color(255, 0, 0)
val Color.Companion.WHITE get() = Color(255, 255, 255)
println(Color.RED) // Color(r=255, g=0, b=0)コンテキスト依存の拡張プロパティ
class Formatter {
val Int.formatted: String
get() = "%,d".format(this)
fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000)) // 1,000,000DSL での拡張関数の利用
val Int.dp: Float get() = this * 2.5f
val Float.sp: Float get() = this * 1.0f
// In DSL context:
view.setPadding(16.dp.toInt())ジェネリックな拡張プロパティ
val <T> List<T>.head: T?
get() = firstOrNull()
val <T> List<T>.tail: List<T>
get() = drop(1)
println(listOf(1,2,3).head) // 1
println(listOf(1,2,3).tail) // [2, 3]クイックチェック
まとめ
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「拡張プロパティと計算拡張」レッスンは無料ですか?
はい。「拡張プロパティと計算拡張」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「拡張プロパティと計算拡張」で何を学びますか?
サブクラス化せずに、既存のクラスへ計算プロパティを追加します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「拡張プロパティと計算拡張」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。