Scala 中的變數

DataCamp 最近推出的 Scala 課程:Scala 简介

Scala 是一種在个大數據領域中,與 Apache Spark 一起使用大量數據時广受數據科學家歡迎的語言。它是一種既是面向對象又是函数式 programming language,並具有許多其他基本特點,列表如下:

  1. Scala 是一種靜態類型的語言,其中變量的數據類型在使用的時候被定義。類型檢查是在编译時進行,而不是在運行時。
  2. 它也是一種「強類型」語言,其中變量在進行操作之前會被檢查。
  3. 它還支持類型推導,其中编译器從表達式或字面量中推導出類型,因此声明變量的類型是可选的。

在這個教程中,你將涵蓋以下主題:

變量

變量是記憶體中的命名空間,編譯器會根據對應變量的數據類型分配保留的位置。在Scala中,變量的聲明語法如下:

val or val variable_name: variable_datatype = value;

在上述語法中,變量可以通過使用’var’或’val’關鍵字以兩種方式之一來定義。它包括’variable_name’作為您的新變量,後跟一個冒號。變量的數據類型為’variable_datatype.’,可以是任何有效的數據類型。之後是賦值給’variable_name.’

例如:

val varValue: Byte = 8;

‘val’是用於定義變量的關鍵字,’varValue’是變量名稱。它是’Byte’數據類型,並包含值8。’Byte’是一個8位元簽名值,範圍從2−7到27−1。

上述的’variable_datatype’可以是Scala中存在的任何數據類型,如下所列。

  1. Int:是一個32位元簽名(正或負值),範圍從2−31到231−1。
  2. Byte:它是一個8位元簽名值,範圍從2−7到27−1。
  3. Short:它是一個16位元簽名值,範圍從2−15到215−1。
  4. Float:它可以是32位元或64位元。

同樣地,其他資料型態如 LongCharBooleanCharStringBooleanNull 自有其範圍,並且在 Scala 初学者指南 教学中给予了详盡的解释。另外,’variable_datatype’ 應該從大寫字母開始,即 Int 包含了 ‘I’,這表示上面所有的資料型態在 Scala 都是物件。

Scala 變量定義規則

Scala 定義變量的規則和慣例如下:

  1. 變量名稱以小驼峰命名法開始。例如,在變量名稱 ‘nameOfGirl’ 中,包含了 ‘n’ 作為小寫字母。之後,將所有單詞的首字母大寫,如 ‘O’ 和 ‘G’。
  2. 變量名稱不應該包含 Scala 中定義的保留詞或關鍵詞。
  3. 變量名稱可以包含美元符號 (‘$’) 和下劃線 (‘_’)。然而,其他特殊字符如 ‘#’,’&’ 等是不允許的。此外,也不鼓勵使用下劃線。
  4. 變量名稱不允許有空格(制表符,空格)。
  5. 變量名稱必須從字母開始,不能以數字或其他字符開始。

可變變量

可變變量容許在變量宣告後更改變量的值。

可變變量的語法如下所示:

var variable_name : variable_datatype = value;

變數的語法也可以定義如下:

var variable_name = value;

以下是可以變更變數的例子:

var nameOfThing: String = "Car";

上述例子中包含 var 關鍵字,用於定義可變變數。變數的名稱是 ‘nameOfThing’。後面跟著冒號與變數的資料型態 ‘String’。它儲存在記憶體中的值將是 ‘Car’。

以下是可以變更變數的不同語法例子:

var nameOfThing = "Car";

你可以像上述例子中這樣不指定變數的資料型態來定義變數,Scala編譯器會自動推斷它為 ‘String’ 這種資料型態,這稱為型別推斷

你可以像下面這樣輕鬆改變變數的值:

nameOfThing = "Bike"; print(nameOfThing)

變數的值將從 “Car” 變成 “Bike”。輸出將會是 “Bike”,因為 ‘var’ 關鍵字讓你能够改變變數的值(來源:Scala中的變數)。

不可變變數

不可變變數是指一旦創建後其值就不能更改的變數,它使用 ‘val’ 關鍵字聲明。

以下是不可變變數的語法:

val variable_name : variable_data type = value;

不可變變數的語法也可以這樣定義:

val variable_name = value;

以下是不可變變數的例子:

val numberOfThing: Int = 2;

上述示例中使用了val作為定義不可變變量的關鍵字,變量名稱為’numberOfThing’。它後面跟了一個冒號以及變量的數據類型為’Int’,存儲在記憶體中的值為2。

上述的不可變變量示例可以用不同的語法進行定義,如下所示:

val numberOfThing = 2;

您可以在上面示例中不指定變量的數據類型,Scala編譯器會自動判定為’Int’數據類型。這個過程稱為類型推論(來源:Scala中的變量)。

您不能像以下示例一樣更改變量的值:

numberOfThing = 7;

上述示例將導致一個錯誤,如”error: not found: value numberOfThing”,這表明所示的重賦值是不可能的:

多次宣告和賦值

在Scala中,可以使用’var’關鍵詞進行多次宣告,變量名稱用逗號分隔,並用等號與變量的值相對於。

var (x, y, z) = (5, 4.5, "Sit")

在上述示例中,您可以看到所有變量x、y和z都被賦予了值5、4.5和”Sit”。

在Scala中,可以在同一行通過使用’val’關鍵詞進行多次賦值,變量名稱用逗號分隔,並用等號與變量的值相對於。

val a, b, c = 1;

在上述示例中,您可以看到所有變量a、b和c都被賦予以1的值。

變量的範圍

變數的生命週期限制在代碼中指定的區塊 visibility 內。變數可以定義在本地或全局範圍。例如:

var globalVar = 10 def sub(){ var difference = 9-4; } print(difference)//錯誤 print(globalVar)//有效

在上述代碼中,’difference’變數在本地範圍內,宣告在’sub’方法內,減法操作將給出有效結果,但打印值在方法’sub’外將導致錯誤。还存在一個全局範圍,其中變數’globalVar’可以在程序的任何位置存取,對其進行任何操作。

Scala中變數有三種範圍(來源:Scala- 變數):

  1. 本地變數
  2. 字段
  3. 方法參數

本地變數

本地變數是宣告在方法內的可變或不可變變數,只能訪問方法內而不能在外部。

你可以看下面的簡單例子來了解本地變數:

class Perimeter { def triangle() { var side1 = 10; var side2 = 20; var side3 = 30; var total = side1+side2+side3; print("Perimeter of the triangle is: " + total); } } object Test { def main(args:Array[String]) { val p1 = new Perimeter() p1.triangle() } }
defined class Perimeter defined object Test

上述代碼給出結果:

三角形的周長是:60

上面 program 包含一個名叫 ‘Perimeter’ 的類別和一個 ‘Test’ 物件,其中有一個稱為三角形的方法,具有三個可變變數 side1、side2、side3。計算和打印結果將是在方法內完成,將給出正確結果。

欄位

在類別內定義的變量稱為欄位變量,可以是任何類型,無論是可變還是不可變變量。如果變量在類別內聲明,則存取修飾符會自動為公開(public),但不應該在任何方法內定義,這樣變量在程式的任何地方都可以被存取。然而,私有(private)變量可以在定義的類別內被存取,但不能在類別範圍之外或甚至在物件中被存取。

class FieldExample { var value1 = 10; private var value2 = 30; def operation() { println("Value of value1:"+value1) } println("Value of value2: "+value2); } object Demo { def Main(args:Array[String]) { val obj = new FieldExample() obj.operation() print(obj.value1)//Valid print(obj.value2) } }
defined class FieldExample defined object Demo

上述代碼的結果為:

value2的值:30
value1的值:10
10

上述程式包含一個名為’FieldExample’的類別,物件為’Demo’,以及一個名為’operation’的方法。公開變量value1可以使用點表示法進行存取,並被列印為10。私有變量value2為30,當存取該變量並列印時會導致錯誤。

方法參數

方法參數是在調用方法時接受值的變量,該變量必須是可變的,使用’val’關鍵字定義。此外,當對其進行參考時,變量可以在方法外部被存取。

以下是了解方法參數的簡單範例:

class Triangle { def calculate(height: Int, width: Int) { var result = 0.5*(height+width); println("Area of triangle is: " + result); } } object Area { def main(args:Array[String]) { val a = new Triangle() a.calculate(4,5); } }
defined class Triangle defined object Area

上述代碼的結果為:

三角形的面積為:4.5

上述程式包含了一個名為 ‘Triangle’ 的類別。它包含了一個名為 ‘calculate’ 的方法,該方法有兩個方法參數:高度和寬度。

當使用物件實例 a 呼叫 ‘calculate’ 時,會傳遞整數值 4 和 5。

結論

恭喜您,您已經完成了本教程的學習!

在本教程中,您學習了 Scala 的變量、定義變量的規則、多重聲明和賦值的不同類型變量,以及變量的作用域。如果您想進一步學習 Scala,請參加 DataCamp 的Scala 入門課程。

Source:
https://www.datacamp.com/tutorial/variables-in-scala