こんにちは!リンコですピヨ!この記事では自分の勉強の復習もかねて、Kotlinでのローカル変数とスコープについて解説するピヨ!
この第29章では、プログラミング言語であるKotlinのローカル変数とスコープについて、一緒に勉強していきましょう。
この記事を読めばプログラミング未経験の方も、Kotlinのローカル変数とスコープについて1つ1つ理解しながら勉強できると思うので、是非最後まで読んで頂ければと思います。
※この記事で出てくる「サンプルコード」は、記述が長く画面からはみ出ている場合がありますが、横にスライドすると表示されるのでご安心ください。
【Kotlin】ローカル変数について
ではまず、ローカル変数がどんなものかざっくり勉強していきます。
ローカル変数とは?
Kotlinでは、関数内で記述された変数のことをローカル関数と呼びます。ローカル変数は、定義された関数などの範囲内でしか、変更や参照ができません。
またプロパティ変数などとは別物として扱われるため、変数名が同じになってもエラーにはなりません。
ローカル変数はどんな時に使う?
よく使う変数などを、どこからでも参照できてしまうようなオープンな場所に定義してしまうと、意図せず変更されてしまう可能性もあるため危険です。
ですのでローカル変数を使うことによって、他の関数などからの参照や変更を受け付けなくし、安全性を保つことができます。
関数内に定義された変数をローカル変数と呼ぶピヨ!
【Kotlin】スコープについて
続いて、スコープについて簡単に理解していきましょう。
スコープとは?
スコープは一言で簡単に言うと、とある変数を読み書きできる範囲のことを言い、スコープの範囲はその変数がどこで定義されたかによって決まります。
変数は定義されたブロックの中、ようするに「{}」の間の中だけで有効となるのですが、この有効な範囲を「スコープ」と言います。
変数が定義されているブロック内、変数の有効範囲をスコープと呼ぶピヨ!
【Kotlin】コードを見てローカル変数やスコープを理解しよう
ローカル変数とスコープについてなんとなくわかったと思います。
スコープは、対象の変数がどこで定義されたかによって決まるので、最後にコードを見てスコープの範囲やローカル変数についてしっかり理解していきましょう。
変数がmain関数の外で定義されている場合
このコードでは、main関数の外側で定義した変数を、main関数で使用しています。
var test = 1 fun main(){ println(test) }
1
この変数はどの関数にも属していないため、このファイル内であればどこからでも参照、変更ができてしまいます。
どこからでも参照や変更ができるというのは便利でもありますが、逆に簡単に変更できてしまうので気づかないうちに変更してしまったり、どこで変更されているかわからないというデメリットもあります。
どの関数やクラスにも属していない変数の有効範囲はファイル全体になるピヨ!
var test = 1 fun main(){ println(test) add() println(test) } fun add() { test++ }
1 2
このようにmain関数の下にadd関数を定義して、add関数からmain関数にアクセスして変数testの値を変更することができました。
このコードでは関数が2つしかないのでどこで変数testの値が変更されたかわかりますが、いくつもの関数があったらわからなくなってしまいますよね。
変数をmain関数内に定義されている場合
このコードでは先程の変数testをmain関数内に定義しています。
fun main(){ var test = 1 println(test) add() println(test) } fun add() { test++ }
Unresolved reference: test Variable expected
先程のコードでmain関数外にあった変数testをmain関数内に記述するとエラーが起きましたね。
これは変数testの記述場所を変えることで、変数testのスコープの範囲がファイル全体から、main関数内に絞られたためです。
またこのように関数内に定義された変数のことを、ローカル変数と呼びます。
同じ名前の変数が関数の内外に定義されたら内側の変数が優先される
関数の中やスコープ内だと同じ名前の変数は定義できませんが、関数の外や別のスコープであれば同じ名前の変数が定義できます。
ということで、同じ名前の変数が定義されていたらどちらの変数が優先されるのか見てみましょう。
var test =1 fun main(){ var test = 10 println(test) }
10
関数の外側には変数testに1が代入、関数の内側には変数testに10が代入されるように変数定義をしましたが、結果は10が変数testには代入されましたね。
このように、まったく同じ名前の変数が存在している場合は、より内側のスコープにある変数が優先されます。
まったく同じ名前の変数がある場合は、内側のスコープに存在している変数が優先されるピヨ!
まとめ
この記事では、プログラミング言語であるKotlinのローカル変数とスコープについて勉強していきましたが、いかがでしたでしょうか?今回の記事をまとめると以下のようになります。
- 関数内に定義された変数をローカル変数と呼ぶ
- 変数の有効範囲内のことをスコープと呼ぶ
- 同じ変数名が存在している時は、内側のスコープの変数が優先される
今回勉強した「ローカル変数」や「スコープ」はKotlinの入門レベルの知識になるので、何回も読み直してしっかり覚えておきましょう。
次回の記事では「高階関数と匿名関数」について勉強していくピヨ!
プログラミング未経験の方や入門レベルの方、Kotlinについて詳しくなりたい方は、また一緒に勉強するピヨ!
コメント