Scala基础教程(二):数据类型、变量
基礎語法
關于Scala程序,這是非常要注意以下幾點。
·????????區分大小寫 - ?Scala是大小寫敏感的,這意味著標識Hello 和 hello在Scala中會有不同的含義。
·????????類名 -?對于所有的類名的第一個字母要大寫。
如果需要使用幾個單詞來構成一個類的名稱,每個單詞的第一個字母要大寫。
示例:classMyFirstScalaClass
·????????方法名稱 - 所有的方法名稱的第一個字母用小寫。
如果若干單詞被用于構成方法的名稱,則每個單詞的第一個字母應大寫。
示例:defmyMethodName()
·????????程序文件名 - 程序文件的名稱應該與對象名稱完全匹配。
保存文件時,應該保存它使用的對象名稱(記住Scala是區分大小寫),并追加“.scala”為文件擴展名。 (如果文件名和對象名稱不匹配,程序將無法編譯)。
示例:?假設“HelloWorld”是對象的名稱。那么該文件應保存為'HelloWorld.scala“
·????????def main(args: Array[String]) -?Scala程序從main()方法開始處理,這是每一個Scala程序的強制程序入口部分。
Scala修飾符:
所有的Scala的組件需要名稱。使用對象,類,變量和方法名被稱為標識符。關鍵字不能用作標識符和標識是區分大小寫的。Scala支持以下四種類型標識符:
文字標識符
字母數字標識符開始以字母或下劃線,可以使用字母,數字或下劃線。“$”字符在Scala中是保留關鍵字,標識符不能使用。以下是合法的字母標識符:
age, salary, _value,? __1_value以下是非法標識符:
$salary, 123abc, -salary運算符標識
運算符識別符由一個或多個運算符字符。操作字符是可打印的ASCII字符,如+, :, ?, ~ 或#。以下是合法的運算符標識:
+ ++ ::: <?> :>Scala編譯器將在內部“軋”操作符標識符使它們成為合法的Java標識符,并嵌入$字符。例如,所述標識符:->將內部表示為$colon$minus$greater。
混合標識符
混合標識符由一個字母數字識別符,隨后是一個下劃線和運算符標識。以下是合法的混合標識符:
unary_+,? myvar_=在這里,作為一個方法名unary_+定義了一個一元+運算符和myvar_=用來作為方法名稱定義了一個賦值運算符。
立即數標識符
一個文字標識是包含在反引號(` . . . `)的任意字符串。以下是合法的文字標識:
`x` `<clinit>` `yield`Scala關鍵字:
下面的列表顯示在Scala中的保留字。這些保留關鍵字不可以被用作常量或變量,或任何其他的標識符名稱。
| abstract | case | catch | class |
| def | do | else | extends |
| false | final | finally | for |
| forSome | if | implicit | import |
| lazy | match | new | null |
| object | override | package | private |
| protected | return | sealed | super |
| this | throw | trait | try |
| true | type | val | var |
| while | with | yield | ? |
| - | : | = | => |
| <- | <: | <% | >: |
| # | @ | ? | ? |
Scala中的注釋
Scala支持單行和多行注釋非常類似于Java。多行注釋可以嵌套,但必須正確嵌套。可用的任何注釋和所有字符都將被Scala編譯器忽略。
object HelloWorld { ?? /* This is my first java program.? ????* This will print 'Hello World' as the output ??? * This is an example of multi-line comments. ??? */ ?? def main(args: Array[String]) { ????? // Prints Hello World ????? // This is also an example of single line comment. ????? println("Hello, world!") ???} }空行和空格:
僅包含空格,可能帶有注釋行,被稱為一個空行,并且Scala將會完全忽略它。標記可以通過空格和/或注釋分開。
換行符:
Scala是面向行的語言,語句可以用分號(;)結束或換行符。分號在聲明的結尾通常是可選的。可以鍵入一個想要的,如果語句出現其本身在一行。在另一方面,如果寫在一行多個語句分號是必需的:
val s = "hello"; println(s)Scala包:
包是一個代碼命名的模塊。例如,Lift 實用包net.liftweb.util。包聲明是在源文件中的第一個非注釋行,如下所示:
package com.liftcode.stuffScala的包可以被導入,使他們能夠在當前編譯范圍內被引用。下面的語句是導入scala.xml包的內容:
import scala.xml._可以導入封裝的類和對象,例如,從scala.collection.mutable導入HashMap:
import scala.collection.mutable.HashMap可以從一個單一封裝的scala.collection.immutable包導入多個類或對象,例如,TreeMap和TreeSet:
import scala.collection.immutable.{TreeMap, TreeSet}?
?
Scala的數據類型全部相同于Java中,具有相同的內存占用和精度。以下表是有關可在Scala中所有的數據類型的細節:
| 數據類型 | 描述 |
| Byte | 8位有符號值。范圍從-128到127 |
| Short | 16位有符號值。范圍從-32768至32767 |
| Int | 32?位有符號值。范圍從?-2147483648 to 2147483647 |
| Long | 64位有符號值。從-9223372036854775808到9223372036854775807 |
| Float | 32位IEEE754單精度浮點數 |
| Double | 64位IEEE754雙精度浮點數 |
| Char | 16位無符號Unicode字符。范圍由U+0000至U+FFFF |
| String | 字符序列 |
| Boolean | 無論是字面true或false字面 |
| Unit | 對應于沒有值 |
| Null | 空或空引用 |
| Nothing | 每一個其他類型的子類型;?包括無值 |
| Any | Any類型的超類型;任何對象是任何類型 |
| AnyRef | 任何引用類型的超類型 |
上面列出的所有的數據類型是對象。沒有原始的類型,如Java中。這意味著可以調用int,long等上的方法
Scala基本字面值:
Scala中使用的文字規則是簡單和直觀的。這部分解釋了所有Scala中的基本文字。
整數值
整數文字通常是int類型,或類型龍其次是L或l后綴的時候。下面是一些整數文字:
0 035 21 0xFFFFFFFF 0777L浮點型
浮點文字是Float類型后跟一個浮點類型后綴F或f時,否則是Double類型。下面是一些浮點文字:
0.0 1e30f 3.14159f 1.0e100 .1布爾類型
布爾字面值true和false是Boolean類型的成員。
符號字面值
符號常量'x是簡寫的表達scala.Symbol(“X”)。Symbol是一個類,它的定義如下。
package scala final case class Symbol private (name: String) { ?? override def toString: String = "'" + name }字符
字符文字是用引號括起來的單個字符。該字符是一個可打印的Unicode字符或轉義序列描述。這里有一些字符文字:
'a' 'u0041' ' ' '???????? '字符串常量
字符串常量是在雙引號中的字符序列。字符或者是可打印Unicode字符或轉義序列描述。下面是一些字符串:
"Hello, World!" "This string contains a " character."多行字符串
多行字符串是包含在三重引號“”字符序列“...”“”。字符序列是任意的,不同之處在于它可以包含三個或更多個連續引號字符僅在未尾。
字符未必是可打印;新的一行或其他控制字符也是允許的。這里是一個多行字符串:
"""the present string spans three lines."""NULL值
null是scala.Null類型一個值,因此這個引用類型兼容。它表示參考值是指一種特殊的“空”的對象。
轉義序列:
以下轉義序列在字符和字符串。
| 轉義序列 | Unicode | 描述 |
| ? | ? u0008 | 退格BS |
| ? | u0009 | 水平制表符HT |
| ? | u000c | 換頁FF |
| f | u000c | 換頁FF |
| ? | u000d | 回車CR |
| " | u0022 | 雙引用 " |
| ' | u0027 | 單引用?. |
| \ | u005c | 反斜線? |
介于0和255字符使用Unicode也可以通過一個八進制轉義,也就是說,一個反斜杠“”之后的最多三個八進制字符的序列表示。以下為例子來說明一些轉義字符序列:
object Test { ?? def main(args: Array[String]) { ????? println("Hello World ? " ); ?? } }當上述代碼被編譯和執行時,它產生了以下結果:
Hello?? World?
?
變量是只不過是保留內存位置來存儲值。這意味著,當創建一個變量,會在內存中保留一些空間。
基于變量的數據類型,所述編譯器分配存儲器,并決定什么可以被存儲在保留存儲器。因此,通過分配不同的數據類型的變量,可以存儲整數,小數,或字符在這些變量。
變量聲明
Scala的變量聲明有不同的語法,它們可以被定義為值,即,常量或變量。下面是使用var關鍵字來定義一個變量的語法:
var myVar : String = "Foo"在這里,myVar使用關鍵字var聲明。這意味著它是一個可以改變值的變量,被稱為可變變量。下面是使用val關鍵字來定義變量的語法:
val myVal : String = "Foo"這里,myVal是使用關鍵字val聲明。這意味著,它是不能改變的變量,這是所謂的不可變變量。
變量數據類型:
變量類型在變量名后面指定,前在equals之前簽署。可以通過它的數據類型定義任何類型的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為字符串類型變量。
多重任務:
Scala支持多任務。如果一個代碼塊或方法返回一個元組,該元組可被分配給一個val變量。 [注:元組在以后的章節中學習。]
val (myVar1: Int, myVar2: String) = Pair(40, "Foo")類型推斷得到正確類型:
val (myVar1, myVar2) = Pair(40, "Foo")變量類型:
Scala變量可以有三種不同的范圍,這取決于它們正在使用的地方。它們可以存在于字段,方法參數和局部變量。下面是關于每種類型的適用范圍的詳細信息:
字段:
字段是屬于一個對象的變量。該字段是從對象中的所有方法中訪問。字段也可以是具體取決于訪問修飾符字段與聲明的對象外訪問。對象字段既可以是可變的或不可變的類型,可以使用var 或 val兩種定義。
方法參數:
方法的參數是變量,其用于傳遞方法內的值在方法被調用時。方法參數被從方法唯一傳入,但傳遞的對象可從外面,如果從外面的方法有一個引用對象。方法參數始終是可變的并由val關鍵字定義。
局部變量:
局部變量是在方法內聲明的變量。局部變量只能在方法中訪問,但可以訪問創建方法的對象(如果從方法中返回它們)。局部變量既可以是可變的或不可變的類型,可以使用var或val兩個關鍵字定義。
from: http://www.yiibai.com/scala/scala_basic_syntax.html
總結
以上是生活随笔為你收集整理的Scala基础教程(二):数据类型、变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scala基础教程(一):简介、环境安装
- 下一篇: Scala基础教程(三):访问修饰符、运