第一章 基礎(chǔ)
聲明和變量
-
在Scala中,我們鼓勵你使用val--除非你真的需要修改它的內(nèi)容。注意:你不需要給出值或者變量的類型左冬,這個信息可以從初始化它的表達式推斷出來,聲明值或者變量但不做初始化會報錯范抓。
- val name="jacklee"http://name值不可變骄恶,為String類型
- var age =18 //age值可變,根據(jù)初始化的值自動判定為Int
- var greeting:String =null //在必要的時候可以在聲明變量時指定類型匕垫,初始化為null僧鲁。
在scala中,變量或函數(shù)的類型總是寫在變量或函數(shù)的后面象泵,這有別于Java寞秃。
在Scala中,僅當同一行代碼中存在多條語句時才需要用分號分開偶惠。
-
可以將多個值或者變量放在一起聲明:
- val xmax,ymax =100 //將xmax 和ymax設(shè)為100
- var greeting,message:String=null //greeting和message都是字符串蜕该,被初始化為null。
常用類型
- 和Java一樣洲鸠,Scala也有7種數(shù)值類型:Byte,Char,Short,Int,Long,Float,Double 和一個布爾類型:Boolean堂淡。和Java不同的是,這些類型都是類扒腕,Scala沒有區(qū)分基本類型和引用類绢淀。
- 在Scala中,我們不需要包裝類型瘾腰,在基本類型和包裝類型的轉(zhuǎn)換時Scala編譯器的工作皆的,比如我們創(chuàng)建一個Int型數(shù)組,最終在虛擬機得到的是int[]數(shù)組蹋盆。
- Scala用底層的Java.lang.String類來表示字符串费薄,不過它通過StringOps類給字符串追加了上百種操作.
- 比如:"Hello".intersect("world") //輸出為"lo"
- 在這個例子中,String類型的"Hello"先被隱式轉(zhuǎn)換為StringOps類型栖雾,然后調(diào)用intersect()方法楞抡。
- 在Scala中我們用方法而不是強制類型轉(zhuǎn)換,來做數(shù)值類型之間的轉(zhuǎn)換析藕。比如:99.66.toInt輸出99召廷。99.toChar輸出'c',toString輸出字符串账胧。
算法和操作符重載
- Scala的算術(shù)操作符和你在Java和C++預(yù)期的效果是一樣的:val answer=88+6 得到answer為70.+-/%等操作都是正常的工作竞慢,位操作符也是一樣的工作,但是在Scala中這些操作符實際上是方法治泥。如:a+b實際是:a.+(b)的簡寫筹煮。這里的+是方法名。
- 通常來說居夹,你可以用 a 方法 b 來作為 a.方法(b)的簡寫败潦。
- 比如:1.to(10)可以簡寫為1 to 10本冲。
- 和Java和C++相比,Scala有一個顯著的不同变屁,Scala并沒有提供++和--操作眼俊,我們需要使用+=1或者-=1意狠,比如 counter +=1 //將counter+1
調(diào)用函數(shù)和方法
- import Scala.math._ //在Scala中粟关,_是通配符,相當于Java中的*
- 注意:使用以scala.開頭的包是环戈,我們可以省去scala前綴闷板,比如 import scala.math._ 等同于 import math._。
- 不帶參數(shù)的Scala方法通常不帶括號院塞,如:"Hello".distinct //輸出為Helo遮晚。
- apply方法:比如:"Hello"(4) //將輸出'o'實際上是:"Hello".apply(4)的簡寫。你可以把這種用法當做是()操作符的重載拦止,它背后的原理是名為apply的方法县遣。
- 再比如:Array(1,4,9,16)返回一個數(shù)組,用的就是Array伴隨對象的apply方法汹族。