Kotlinのvarとvalの違いとは?変数宣言の使い分けをわかりやすく解説
Kotlinでは、変数を宣言する際に2種類のキーワードを使い分けることができます。1つはvar、もう1つはvalです。この記事では、具体的なコード例をもとに、両者の違いと正しい使い分けのポイントを詳しく解説します。
| 属性 | var | val |
|---|---|---|
| 宣言方法 | var varName = "hello World" | val sName = "tutorialspoint.com" |
| 可変性 | 可変(ミュータブル) | 不変(イミュータブル) |
| 代入できる回数 | 何度でも代入可能 | 一度しか代入できない |
| 再代入 | 再代入できる | 再代入できない |
varで宣言した場合の例
以下の例では、「val」と「var」を使ってそれぞれ変数を宣言しています。varで宣言した変数は後から自由に値を変更できます。一方、valで宣言した変数は再代入しようとするとエラーになり、「Val cannot be reassigned.」というメッセージが表示されます。
val sName = "tutorialspoint";
var varName = "hello World"
fun main() {
println("Example of val--->"+sName);
println("Example of Var--->"+varName);
// varで宣言した変数は可変(ミュータブル)
varName = "new value";
println("New value of the variable declared using Var: " +varName);
}
出力結果
上記のコードを実行すると、次のような出力が得られます。
Example of val--->tutorialspoint Example of Var--->hello World New value of the variable declared using Var: new value
valで宣言した変数を変更しようとした場合の例
次に、valで宣言した変数の値を変更しようとするとどうなるかを見てみましょう。
val sName = "tutorialspoint";
var varName = "hello World"
fun main() {
println("Example of val--->"+sName);
println("Example of Var--->"+varName);
// valで宣言した変数は不変(イミュータブル)
sName = "new value";
println("New value of the variable declared using Var: " +sName);
}
出力結果(エラー)
このコードはコンパイル時にエラーとなります。valで宣言された変数への再代入は許されていないためです。
main.kt:9:5: error: val cannot be reassigned sName = "new value"; ^
まとめ:varとvalの使い分けのポイント
varは値を後から書き換えたい場面に適しており、valは一度代入したら変更しない変数に適しています。Kotlinの公式コーディング規約でも、特別な理由がない限りvalを使用することが推奨されています。不変な変数を積極的に使うことで、コードの予測可能性が高まり、意図しない値の書き換えによるバグを防ぐことができます。まずはvalで宣言し、どうしても変更が必要な場合だけvarを使う、という方針が良いでしょう。
-
DirectX11とDirectX12の違いを徹底解説!ゲーマーが知っておくべきポイント
DirectXは、ソフトウェアがマルチメディアコンテンツを描画し、グラフィックハードウェアと通信するために使用されるAPI(アプリケーションプログラミングインターフェース)のコレクションです。DirectXの主要な構成要素であるDirect3Dは、ソフトウェアとグラフィックスハードウェア間の通信を担っています。ハードウェアは製品ごとに異なるため、標準化された関数や呼び出しのライブラリを通じてグラフィックカードと通信することで、ゲーム開発を大幅にスピードアップできます。これは「ハードウェア抽象化」と呼ばれ、APIの最も重要な役割となっています。車に例えてみましょう。1台の車の運転ができれば、ほぼ
-
C#のListとDictionaryの違いとは?使い分けのポイントを解説
C#におけるListとDictionaryの基本的な違いC#にはさまざまなコレクションクラスが用意されていますが、その中でも特によく使われるのが「List」と「Dictionary」です。両者はいずれもSystem.Collections.Generic名前空間に属するジェネリック型のコレクションですが、データの格納方法やアクセス方法が大きく異なります。Dictionary(ディクショナリ)とはDictionaryは、キーと値のペアを管理するコレクションです。Dictionary<TKey, TValue>の形式で宣言され、System.Collections.Generic名前空