Scala-variables

提供:Dev Guides
移動先:案内検索

Scala-変数

変数は、値を保存するために予約されたメモリの場所に他なりません。 これは、変数を作成するときに、メモリ内にスペースを確保することを意味します。

変数のデータ型に基づいて、コンパイラはメモリを割り当て、予約メモリに格納できるものを決定します。 したがって、異なるデータ型を変数に割り当てることにより、これらの変数に整数、小数、または文字を格納できます。

可変宣言

Scalaには、変数を宣言するための異なる構文があります。 値、つまり定数または変数として定義できます。 ここでは、キーワードvarを使用してmyVarが宣言されています。 値を変更できる変数であり、これは*可変変数*と呼ばれます。 以下は、 var キーワードを使用して変数を定義する構文です-

構文

var myVar : String = "Foo"

ここでは、キーワードvalを使用してmyValが宣言されています。 これは、変更できない変数であり、*不変変数*と呼ばれることを意味します。 以下は、valキーワードを使用して変数を定義する構文です-

構文

val myVal : String = "Foo"

可変データ型

変数のタイプは、変数名の後、等号の前に指定されます。 次のようにデータ型に言及することにより、Scala変数の任意の型を定義できます-

構文

val or val VariableName : DataType = [Initial Value]

あなたが変数に初期値を割り当てない場合、それは次のように有効です-

構文

var myVar :Int;
val myVal :String;

可変型推論

初期値を変数に割り当てると、Scalaコンパイラーは、割り当てられた値に基づいて変数のタイプを判別できます。 これは、変数型推論と呼ばれます。 したがって、次のようにこれらの変数宣言を書くことができます-

構文

var myVar = 10;
val myVal = "Hello, Scala!";

ここで、デフォルトでは、myVarはInt型になり、myValはString型変数になります。

複数の割り当て

Scalaは複数の割り当てをサポートしています。 コードブロックまたはメソッドがタプル(タプル-さまざまなタイプのオブジェクトのコレクションを保持する)を返す場合、タプルをval変数に割り当てることができます。 [-後続の章でタプルを学習します。]

構文

val (myVar1: Int, myVar2: String) = Pair(40, "Foo")

そして、型推論はそれを正しくします-

構文

val (myVar1, myVar2) = Pair(40, "Foo")

サンプルプログラム

以下は、Scalaでの変数宣言のプロセスを説明するサンプルプログラムです。 このプログラムは4つの変数を宣言します。2つの変数は型宣言で定義され、残りの2つは型宣言なしで定義されます。

object Demo {
   def main(args: Array[String]) {
      var myVar :Int = 10;
      val myVal :String = "Hello Scala with datatype declaration.";
      var myVar1 = 20;
      val myVal1 = "Hello Scala new without datatype declaration.";

      println(myVar); println(myVal); println(myVar1);
      println(myVal1);
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

10
Hello Scala with datatype declaration.
20
Hello Scala without datatype declaration.

可変スコープ

Scalaの変数は、使用される場所に応じて3つの異なるスコープを持つことができます。 フィールド、メソッドのパラメーター、ローカル変数として存在できます。 以下は、各タイプのスコープに関する詳細です。

フィールド

フィールドは、オブジェクトに属する変数です。 フィールドは、オブジェクト内のすべてのメソッド内からアクセスできます。 フィールドは、フィールドが宣言されているアクセス修飾子に応じて、オブジェクトの外部からもアクセスできます。 オブジェクトフィールドは、可変型と不変型の両方にすることができ、 var または val のいずれかを使用して定義できます。

メソッドのパラメーター

メソッドパラメータは変数であり、メソッドが呼び出されたときにメソッド内で値を渡すために使用されます。 メソッドのパラメーターはメソッドの内部からのみアクセスできますが、メソッドの外部からオブジェクトへの参照がある場合、渡されたオブジェクトは外部からアクセスできます。 val キーワードで定義されるメソッドパラメータは常に不変です。

ローカル変数

ローカル変数は、メソッド内で宣言された変数です。 ローカル変数はメソッド内からのみアクセスできますが、作成したオブジェクトは、メソッドから返されるとメソッドをエスケープする場合があります。 ローカル変数は、可変型と不変型の両方にすることができ、 var または val を使用して定義できます。