実践的な拡張:Context、View、Stringヘルパー
一般的なパターンに対応する、実用的なAndroidスタイルのユーティリティ拡張を構築します。
「実践的な拡張:Context、View、Stringヘルパー」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
実践的な拡張
変更できないフレームワーク型に対して、拡張は特に威力を発揮します。対象は Context、View、String、コレクションなどです。以下では、実際の Android コードベースで使われている実践的なパターンを紹介します。
Context.toast ヘルパー
冗長な Toast.makeText(...).show() を、1 行の拡張でラップします。
import android.content.Context
import android.widget.Toast
fun Context.toast(message: String, long: Boolean = false) {
val duration = if (long) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
Toast.makeText(this, message, duration).show()
}
// Usage: context.toast("Saved!")Context のリソースヘルパー
リソース検索でのキャストを避けられます。拡張によって、可読性と型安全性が向上します。
import android.content.Context
import androidx.core.content.ContextCompat
fun Context.color(res: Int) = ContextCompat.getColor(this, res)
fun Context.string(res: Int) = getString(res)
fun Context.dp(value: Int) = (value * resources.displayMetrics.density).toInt()
// Usage: val red = context.color(R.color.error)View.show / View.hide
特別な記述をせずに View.VISIBLE / View.GONE を切り替えます。
import android.view.View
fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }
// Usage: progressBar.show(); button.hide()View.setVisible(boolean)
条件に応じて切り替える 1 行の処理です。if-else による表示状態のコードを置き換えられます。
import android.view.View
fun View.setVisible(visible: Boolean) {
visibility = if (visible) View.VISIBLE else View.GONE
}
// Usage: errorLabel.setVisible(state.hasError)View.onClick ラムダ
匿名の OnClickListener ではなくラムダを渡すことで、クリックリスナーをより簡潔に記述できます。
import android.view.View
fun View.onClick(action: (View) -> Unit) {
setOnClickListener(action)
}
// Usage:
// button.onClick { view -> println("clicked") }String.isValidEmail
String にドメイン固有の検証用拡張を追加すると、ビジネスロジックが読みやすくなります。
fun String.isValidEmail(): Boolean {
val regex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")
return regex.matches(this)
}
fun main() {
println("ada@example.com".isValidEmail()) // true
println("nope".isValidEmail()) // false
}String.truncate
長い文字列を省略記号付きで切り詰めます。UI でよく使うヘルパーです。
fun String.truncate(max: Int, ellipsis: String = "..."): String =
if (length <= max) this else substring(0, max - ellipsis.length) + ellipsis
fun main() {
println("The quick brown fox".truncate(10)) // The qui...
println("short".truncate(10)) // short
}String.toTitleCase
各単語の先頭を大文字にします。よく使われる書式設定用ヘルパーです。
fun String.toTitleCase(): String = split(" ").joinToString(" ") {
if (it.isEmpty()) it
else it[0].uppercaseChar() + it.substring(1).lowercase()
}
fun main() {
println("hello WORLD from kotlin".toTitleCase())
}List の拡張: chunkedBy
連続する要素をキーごとにグループ化します。UI のセクション分けに便利です。
fun <T, K> List<T>.chunkedBy(keySelector: (T) -> K): List<List<T>> {
val result = mutableListOf<MutableList<T>>()
var lastKey: K? = null
for (item in this) {
val key = keySelector(item)
if (key == lastKey) result.last().add(item)
else { result.add(mutableListOf(item)); lastKey = key }
}
return result
}
fun main() {
val data = listOf(1, 1, 2, 2, 2, 3, 1)
println(data.chunkedBy { it }) // [[1, 1], [2, 2, 2], [3], [1]]
}Activity ヘルパー
reified ジェネリクスを使用して、ナビゲーションを型安全かつ簡潔にします。
import android.content.Context
import android.content.Intent
inline fun <reified T> Context.startActivity() {
startActivity(Intent(this, T::class.java))
}
// Usage: context.startActivity<MainActivity>()使いすぎに注意
拡張はグローバル名前空間に追加されます。目的を絞り、スコープ(private/internal)を限定し、ドメインごとにまとめてください(レシーバー型ごとに 1 ファイルにすると扱いやすくなります)。
fun String.shout() = uppercase() + "!"
fun String.whisper() = lowercase() + "..."
fun main() {
println("hello".shout())
println("HELLO".whisper())
}クイックチェック
Context や View のような Android フレームワーク型に、拡張が適しているのはなぜですか?
まとめ
拡張は、フレームワーク型(Context、View、String、List)に使いやすいヘルパーを追加するのに最適です。よくあるパターンには、表示状態の切り替え、クリックリスナー、リソース検索、検証、書式設定があります。拡張の目的を絞り、スコープを限定し、レシーバー型ごとにまとめてください。
よくある質問
「実践的な拡張:Context、View、Stringヘルパー」レッスンは無料ですか?
はい。「実践的な拡張:Context、View、Stringヘルパー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「実践的な拡張:Context、View、Stringヘルパー」で何を学びますか?
一般的なパターンに対応する、実用的なAndroidスタイルのユーティリティ拡張を構築します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「実践的な拡張:Context、View、Stringヘルパー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 拡張関数:構文とディスパッチ規則
- 拡張プロパティと計算拡張
- スコープ付き拡張とcompanion拡張
- 実践的な拡張:Context、View、Stringヘルパー