Scala基礎教程(二):資料類型、變數_Scala

來源:互聯網
上載者:User
基礎文法

關於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.stuff

Scala的包可以被匯入,使他們能夠在當前編譯範圍內被引用。下面的語句是匯入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

空或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聲明。這意味著,它是不能改變的變數,這是所謂的不可變變數。 VARIANT 資料型別:

變數類型在變數名後面指定,前在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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.