Scala - 變數



變數只不過是保留的記憶體位置,用於儲存值。這意味著當您建立變數時,您會在記憶體中保留一些空間。

根據變數的資料型別,編譯器分配記憶體並決定可以在保留的記憶體中儲存什麼。因此,透過為變數分配不同的資料型別,您可以在這些變數中儲存整數、小數或字元。

變數宣告

Scala 宣告變數的語法不同。它們可以定義為值,即常量或變數。這裡,myVar 使用關鍵字 var 宣告。它是一個可以更改值的變數,這稱為**可變變數**。以下是使用**var**關鍵字定義變數的語法:

語法

var myVar : String = "Foo"

這裡,myVal 使用關鍵字 val 宣告。這意味著它是一個不能更改值的變數,這稱為**不可變變數**。以下是使用 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 中宣告變數的過程。此程式聲明瞭四個變數——兩個變數帶有型別宣告,其餘兩個沒有型別宣告。

示例

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 中的變數可以根據其使用位置具有三種不同的作用域。它們可以作為欄位、方法引數和區域性變數存在。以下是每種作用域的詳細資訊。

欄位

欄位是屬於物件的變數。欄位可以從物件的每個方法內部訪問。欄位也可以根據宣告欄位的訪問修飾符從物件外部訪問。物件欄位可以是可變型別和不可變型別,並且可以使用**var**或**val**定義。

方法引數

方法引數是變數,用於在呼叫方法時將值傳遞到方法中。方法引數只能從方法內部訪問,但是如果您從方法外部引用物件,則傳遞的物件可能可以從外部訪問。方法引數始終是不可變的,由**val**關鍵字定義。

區域性變數

區域性變數是在方法內部宣告的變數。區域性變數只能從方法內部訪問,但是如果您從方法中返回它們,則建立的物件可能會逃離方法。區域性變數可以是可變型別和不可變型別,並且可以使用**var**或**val**定義。

廣告