DataCamp 最近推出的 Scala 課程:Scala 简介。
Scala 是一種在个大數據領域中,與 Apache Spark 一起使用大量數據時广受數據科學家歡迎的語言。它是一種既是面向對象又是函数式 programming language,並具有許多其他基本特點,列表如下:
- Scala 是一種靜態類型的語言,其中變量的數據類型在使用的時候被定義。類型檢查是在编译時進行,而不是在運行時。
- 它也是一種「強類型」語言,其中變量在進行操作之前會被檢查。
- 它還支持類型推導,其中编译器從表達式或字面量中推導出類型,因此声明變量的類型是可选的。
在這個教程中,你將涵蓋以下主題:
- 變量
- Scala 中定義變量的規則
- 可變變量
- 不可變變量
- 多次声明和賦值
- 變量的範圍
變量
變量是記憶體中的命名空間,編譯器會根據對應變量的數據類型分配保留的位置。在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中存在的任何數據類型,如下所列。
- Int:是一個32位元簽名(正或負值),範圍從2−31到231−1。
- Byte:它是一個8位元簽名值,範圍從2−7到27−1。
- Short:它是一個16位元簽名值,範圍從2−15到215−1。
- Float:它可以是32位元或64位元。
同樣地,其他資料型態如 Long、Char、Boolean、Char、String、Boolean、Null 自有其範圍,並且在 Scala 初学者指南 教学中给予了详盡的解释。另外,’variable_datatype’ 應該從大寫字母開始,即 Int 包含了 ‘I’,這表示上面所有的資料型態在 Scala 都是物件。
Scala 變量定義規則
Scala 定義變量的規則和慣例如下:
- 變量名稱以小驼峰命名法開始。例如,在變量名稱 ‘nameOfGirl’ 中,包含了 ‘n’ 作為小寫字母。之後,將所有單詞的首字母大寫,如 ‘O’ 和 ‘G’。
- 變量名稱不應該包含 Scala 中定義的保留詞或關鍵詞。
- 變量名稱可以包含美元符號 (‘$’) 和下劃線 (‘_’)。然而,其他特殊字符如 ‘#’,’&’ 等是不允許的。此外,也不鼓勵使用下劃線。
- 變量名稱不允許有空格(制表符,空格)。
- 變量名稱必須從字母開始,不能以數字或其他字符開始。
可變變量
可變變量容許在變量宣告後更改變量的值。
可變變量的語法如下所示:
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- 變數):
- 本地變數
- 字段
- 方法參數
本地變數
本地變數是宣告在方法內的可變或不可變變數,只能訪問方法內而不能在外部。
你可以看下面的簡單例子來了解本地變數:
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