0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Kotlin】Kotlin のスコープ

Last updated at Posted at 2025-10-03

はじめに

スコープ (Scope) とは、変数や関数が「どこから参照できるか」を決める有効範囲のことです。
Kotlinでは以下のスコープが存在します。

  • トップレベルスコープ
  • ローカルスコープ(関数・ブロック内)
  • クラススコープ
  • オブジェクトスコープ(object / companion object)
  • 拡張関数やスコープ関数による限定スコープ

1. トップレベルスコープ

Kotlinではクラス外(ファイル直下)に変数や関数を定義できます。

val appName = "MyApp"   // トップレベル変数

fun greet() {           // トップレベル関数
    println("Hello from $appName")
}

Javaにはない特徴で、ユーティリティ関数をクラスに入れなくてもOKです。


2. ローカルスコープ(関数・ブロック内)

関数やブロック { ... } 内で宣言された変数は、そのブロック内だけ有効です。

fun main() {
    val x = 10  // main 関数スコープ

    if (x > 5) {
        val y = 20  // if スコープ
        println(x + y)
    }

    // println(y) // ❌ エラー:yは if ブロックの外から参照できない
}

3. クラススコープ

クラスのプロパティやメソッドは、インスタンスを通してアクセスします。

class Person(val name: String) {
    fun introduce() {
        println("I am $name")
    }
}

val p = Person("Anna")
p.introduce()

4. オブジェクトスコープ

objectcompanion object 内に宣言した変数や関数は、シングルトン的に使えます。

class Config {
    companion object {
        const val VERSION = "1.0"
        fun printVersion() = println("Version: $VERSION")
    }
}

Config.printVersion() // Version: 1.0

5. ローカル関数

関数の中に関数を定義すると、その関数のスコープに限定されます。

fun validateUser(name: String, age: Int): Boolean {
    fun isValidName(n: String) = n.isNotEmpty()
    fun isValidAge(a: Int) = a in 0..120

    return isValidName(name) && isValidAge(age)
}

6. スコープ関数(let / run / apply / also / with)

Kotlinには「スコープ関数」と呼ばれる便利な関数群があります。
対象オブジェクトを一時的にスコープ内に閉じ込めて操作できます。

let

val name: String? = "Anna"
name?.let {
    println("Length: ${it.length}")
}

apply

val list = mutableListOf<Int>().apply {
    add(1)
    add(2)
    add(3)
}
println(list) // [1, 2, 3]

スコープ関数は「変数の有効範囲を限定する」「チェーン処理をシンプルにする」目的で多用されます。


まとめ

  • スコープは変数や関数の有効範囲を決める
  • トップレベルスコープ: ファイル直下で宣言可能
  • ローカルスコープ: 関数やブロック内の変数は外から参照不可
  • クラススコープ: プロパティやメソッドはインスタンスに属する
  • オブジェクトスコープ: companion object でクラス単位の定数や関数を提供
  • ローカル関数でスコープを限定できる
  • スコープ関数(let, run, apply, also, with) で一時的なスコープを作れる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?