版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
11.Scala的變量及函數(shù)一、Scala變量定義二、Scala的基本類型三、函數(shù)及其幾種形式目
錄22一、Scala變量定義31.2如何定義一個變量定義一個變量時,需要在變量名前面添加關(guān)鍵字“var”或者“val”;“var”定義的變量,可以重新賦予新的值,并且重新賦值時不需要加“var”;“val”定義的變量,則禁止被重新賦值。一、Scala變量定義41.1變量名的形式Scala推薦使用“駝峰命名法”變量名可以是任意的字母、數(shù)字和下劃線的組合,但是不能以數(shù)字開頭例如,“valisOne”,“classMyClass”一、Scala變量定義51.2.1合法變量定義在首次定義變量時,就必須賦予具體的值來初始化。一、Scala變量定義scala>valx
x=1
scala>varx
x=1scala>valx=1
x:Int=1
scala>valmsg="Hello,world!"
msg:String=Hello,world!錯誤定義!??!正確定義形式61.2.2“var”和“val”定義案例一、Scala變量定義val類型的變量則直接禁止重新賦值。var類型的變量在重新賦值時,新值必須和舊值是同一個類型,否則會發(fā)生類型匹配錯誤。scala>valx=1
valx:Int=1
scala>x=10scala>varx=1
x:Int=1
scala>x=10
scala>x="abc"71.2.3其余變量定義案例一、Scala變量定義賦給多個變量相同的值,在一條語句里用逗號間隔的變量名即可,不必逐條定義。Scala變量定義具有覆蓋性。scala>vala,b,c=1
a:Int=1
b:Int=1
c:Int=1scala>valx=1
valx:Int=1
scala>valx=10
valx:Int=10
scala>x
valres0:Int=10
81.3注意事項賦給變量的對象存在可變與不可變之分。即分清楚是變量指向的對象本身發(fā)生了改變,還是變量指向了新的對象。Scala提倡定義val類型的變量,因為它是函數(shù)式編程,而函數(shù)式編程的思想之一就是傳入函數(shù)的參數(shù)不應(yīng)該被改變。Scala也允許指令式編程,因而預(yù)留了var類型的變量,盡管并不推薦使用。一、Scala變量定義9二、Scala的基本類型102.1基本類型二、Scala的基本類型Scala標準庫定義了九種基本類型,如下表所示。除了“String”類型在java.lang包之外,其余都在Scala的包里。Scala的基本類型Byte8-bit有符號整數(shù),補碼表示,范圍是-27到27-1Short16-bit有符號整數(shù),補碼表示,范圍是-215到215-1Int32-bit有符號整數(shù),補碼表示,范圍是-231到-231-1Long64-bit有符號整數(shù),補碼表示,范圍是-263到-263-1Char16-bit無符號字符,Unicode編碼,范圍是0到216-1String字符串Float32-bit單精度浮點數(shù),符合IEEE754標準Double64-bit雙精度浮點數(shù),符合IEEE754標準Boolean布爾值,其值為true或者false112.2定義變量類型二、Scala的基本類型Scala的編譯器具有自動推斷變量類型的功能。如果要顯式聲明變量的類型,或者無法推斷時,則只需在變量名后面加上一個冒號“:”,然后在等號與冒號之間寫出類型名即可。scala>valx:Int=123
valx:Int=123
scala>valy:String="123"
valy:String=12312二、Scala的基本類型2.3三種字面量整數(shù)字面量整數(shù)默認情況下推斷為Int類型。而Byte和Short則需要定義變量時顯式聲明。結(jié)尾有l(wèi)或者L為Long類型。默認是十進制,若以“0x”或者“0X”開頭,則被認為是十六進制。scala>vala=100
a:Int=100scala>vald=200L
d:Long=200scala>valb=0X123Abc
b:Int=1194684valc:Byte=15
c:Byte=15不能超過類型的表示范圍!13二、Scala的基本類型2.3三種字面量浮點數(shù)字面量都是十進制的,類型默認是Double類型。在末尾添加E和整數(shù)來表示10的N次冪。在變量末尾加大小寫的D或者F來表示是哪種類型。scala>vala=1.2E3
a:Double=1200.0scala>valb=-3.2f
b:Float=-3.2注意:Double類型的字面量不能賦給Float類型的變量!!!14二、Scala的基本類型2.3三種字面量字符與字符串字面量字符字面量:以單引號包起來的一個字符。可以用‘\u編碼號’的方式來構(gòu)造一個字符。支持轉(zhuǎn)義字符。scala>vala=‘D’
a:Char=Dscala>valb=‘\u0041'
b:Char=Ascala>vald=‘\\’
d:Char=\15二、Scala的基本類型2.3三種字面量字符與字符串字面量字符串字面量:用雙引號“
”包起來的字符序列,長度任意。允許摻雜轉(zhuǎn)義字符。scala>vala="\\\\\\"
a:String=\\\162.4字符串插值二、Scala的基本類型字符串插值使表達式可以被嵌入字符串字面量中并被求值。第一種形式是s插值器,即在字符串的雙引號前加一個s,形如s“…${表達式}…”。識別轉(zhuǎn)義字符。scala>valname="ABC"
name:String=ABC
scala>println(s"$nameDEFG")
ABCDEFGscala>s"Sum=${1+10}"
res0:String=Sum=11scala>s"\\\\"
res1:String=\\172.4字符串插值二、Scala的基本類型第二種形式是raw插值器,與s插值器類似,不識別轉(zhuǎn)義字符。第三種形式是f插值器,允許給內(nèi)嵌的表達式加上printf風(fēng)格的指令,指令放在表達式之后并以百分號開始。scala>raw"\\\\"
res2:String=\\\\scala>printf(f"${math.Pi}%.5f")
3.1415918三、函數(shù)及其幾種形式193.1定義函數(shù)三、函數(shù)及其幾種形式defmax(x:Int,y:Int):Int={
if(x>y)
x
else
y}用“def”開始函數(shù)定義函數(shù)名參數(shù)名及參數(shù)類型函數(shù)返回結(jié)果的類型等號花括號里定義函數(shù)體20分號推斷代碼中語句末尾分號是可選的,編譯器會自動推斷分號。不會推斷出分號的情況:①句末以非法結(jié)尾字符結(jié)尾;②下一行的句首是以非法起始字符開始;③跨行出現(xiàn)的圓括號對“()”或者方括號對“[]”。建議一行只寫一條完整的語句,句末分號省略,讓編譯器自動推斷。3.1定義函數(shù)三、函數(shù)及其幾種形式21函數(shù)的返回結(jié)果“return”關(guān)鍵字也是可選的。編譯器會自動為函數(shù)體里的最后一個表達式加上“return”,將其作為返回結(jié)果。返回結(jié)果的類型根據(jù)參數(shù)類型和返回的表達式來自動推斷。返回結(jié)果為Unit,表示沒有值返回。如果顯式聲明為Unit類型的函數(shù),無論如何也不會把表達式的結(jié)果返回。3.1定義函數(shù)三、函數(shù)及其幾種形式22等號與函數(shù)體函數(shù)體是用花括號包起來,包括多條語句,并自動推斷分號、返回最后一個表達式。Scala的函數(shù)定義還有一個等號,返回類型沒有聲明時,等號甚至也可以省略。但建議不要省略等號,避免產(chǎn)生不必要的錯誤,返回類型最好也顯式聲明。3.1定義函數(shù)三、函數(shù)及其幾種形式23無參函數(shù)如果一個函數(shù)沒有參數(shù),那么可以寫一個空括號作參數(shù)列表,也可以不寫。原則上,無副作用的無參函數(shù)省略括號,有副作用的無參函數(shù)添加括號,使用時需要注意。3.1定義函數(shù)三、函數(shù)及其幾種形式243.2方法方法其實就是定義在類、對象、特質(zhì)里面的函數(shù),這種函數(shù)叫做“成員函數(shù)”或者“方法”,與多數(shù)oop(object-orientedprogramming)語言一樣。三、函數(shù)及其幾種形式253.3嵌套函數(shù)即在函數(shù)內(nèi)部定義別的函數(shù)。這種函數(shù)是其外層函數(shù)獨有,不能被外部調(diào)用。參數(shù)與外層函數(shù)公用。三、函數(shù)及其幾種形式scala>defaddSub(x:Int,y:Int)={
|defsub(z:Int)=z-10
|if(x>y)sub(x-y)elsesub(y-x)
|}
defaddSub:(x:Int,y:Int)Int
scala>addSub(100,20)
valres0:Int=70263.4函數(shù)字面量函數(shù)是一等值,也存在字面量。其定義形式為:(參數(shù)1:參數(shù)1類型,參數(shù)2:參數(shù)2類型,...)=>{函數(shù)體}。其形式為了精簡,只保留函數(shù)體,并用下劃線“_”作為占位符來代替參數(shù)。而當(dāng)函數(shù)字面量入?yún)r,其形式為冒號后面加“(參數(shù)1類型,參數(shù)2類型,...)=>返回結(jié)果的類型”。三、函數(shù)及其幾種形式273.4函數(shù)字面量三、函數(shù)及其幾種形式scala>defaFunc(f:Int=>Int)=f(1)+1
aFunc:(f:Int=>Int)Int
scala>aFunc(x=>x+1)
res1:Int=3舉例:283.5部分應(yīng)用函數(shù)“def”定義的函數(shù)也有一等值的功能,只不過需要借助部分應(yīng)用函數(shù)的形式來實現(xiàn)。部分應(yīng)用函數(shù),就是把def函數(shù)打包到一個函數(shù)值里,使它可以賦給變量,或當(dāng)作函數(shù)參數(shù)進行傳遞。三、函數(shù)及其幾種形式293.5部分應(yīng)用函數(shù)舉例:三、函數(shù)及其幾種形式scala>defsum(x:Int,y:Int,z:Int)=x+y+z
defsum:(x:Int,y:Int,z:Int)Int
scala>vala1=sum(4,5,6)
vala:Int=15
scala>vala2=sum(4,_:Int,6)
vala2:Int=>Int=$$Lambda$1124/31807844@cc5a39
scala>a2(5)
valres0:Int=15
scala>vala3=sum_
vala3:(Int,Int,Int)=>Int=$$Lambda$1125/7905168@d10d40
scala>a3(4,5,6)
valres1:Int=15303.6閉包一個函數(shù)除了可以使用它的參數(shù)外,還能使用定義在函數(shù)以外的其他變量。函數(shù)的參數(shù)稱為綁定變量,函數(shù)以外的變量稱為自由變量。函數(shù)在運行期間捕獲自由變量,讓函數(shù)閉合,定義明確。這種函數(shù)叫閉包。自由變量必須在函數(shù)前面定義,否則編譯器就找不到,會報錯。三、函數(shù)及其幾種形式313.6閉包三、函數(shù)及其幾種形式如果捕獲了某一變量,后續(xù)同名定義,則無法改變已經(jīng)捕獲的值。但是如果是var變量,則閉包會隨著改變。varmore=1
valaddMore=(x:Int)=>x+more//addMore=x+1
more=2//addMore=x+2
varmore=10//addMore=x+2
more=-100//addMore=x+2323.7函數(shù)的特殊調(diào)用形式普通函數(shù)調(diào)用形式是按參數(shù)的先后順序逐個傳遞的,但如果調(diào)用時顯式聲明參數(shù)名并給其賦值,則可以無視參數(shù)順序。具名參數(shù)三、函數(shù)及其幾種形式scala>defmax(x:Int,y:Int,z:Int)={
|if(x>y&&x>z)println("xismaximum")
|elseif(y>x&&y>z)println("yismaximum")
|elseprintln("zismaximum")
|}
defmax:(x:Int,y:Int,z:Int)Unit
scala>max(1,z=10,y=100)
yismaximum無視參數(shù)順序333.7特殊函數(shù)調(diào)用形式函數(shù)定義時參數(shù)一個默認值,如果調(diào)用函數(shù)時缺省了這個參數(shù),那么就會使用定義時給的默認值。通常和具名參數(shù)結(jié)合使用。默認參數(shù)值三、函數(shù)及其幾種形式scala>defmax(x:Int=10,y:Int,z:Int)={
|if(x>y&&x>z)println("xismaximum")
|elseif(y>x&&y>z)println("yismaximum")
|elseprintln("zismaximum")
|}
defmax:(x:Int,y:Int,z:Int)Unit
scala>max(y=3,z=5)
xismaximum省略了x參數(shù)343.7特殊函數(shù)調(diào)用形式Scala允許把函數(shù)的最后一個參數(shù)標記為重復(fù)參數(shù),其形式為在最后一個參數(shù)的類型后面加上星號“*”。意思是可以在運行時傳入任意個相同類型的元素,包括零個。類型為“T*”的參數(shù)的實際類型是“Array[T]”。盡管是T類型的數(shù)組,但要求傳入?yún)?shù)的類型仍然是T。重復(fù)參數(shù)三、函數(shù)及其幾種形式353.7特殊函數(shù)調(diào)用形式重復(fù)參數(shù)三、函數(shù)及其幾種形式scala>defaddMany(msg:String,num:Int*)={
varsum=0
for(x<-num)sum+=x
println(msg+sum)
}
defaddMany:(msg:String,num:Int*)Unit
scala>addMany("sum=",1,2,3)
sum=6
scala>addMany("sum=",Array(1,2,3))
error:typemismatch;
found:Array[Int]
required:Int
scala>addMany("sum=",Array(1,2,3):_*)
sum=6舉例:363.8柯里化一個函數(shù)可以有任意個參數(shù)列表。在使用時,當(dāng)參數(shù)列表里只有一個參數(shù)時,在調(diào)用該函數(shù)時允許參數(shù)的圓括號改為花括號。三、函數(shù)及其幾種形式scala>defadd(x:Int,y:Int,z:Int)=x+y+z
defadd:(x:Int,y:Int,z:Int)Int
scala>add(1,2,3)
valres0:Int=6
scala>defaddCurry(x:Int)(y:Int)(z:Int)=x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政爭議調(diào)解協(xié)議書效力
- 2025 年高職服裝設(shè)計與工藝(服裝工藝設(shè)計)試題及答案
- 2025 年高職電子信息工程技術(shù)(視頻維修)試題及答案
- 2025 年高職房地產(chǎn)經(jīng)營與管理(房地產(chǎn)策劃)試題及答案
- 安全課件繪畫
- 承包施工協(xié)議利潤保證合同范本
- 安全課件目錄
- 換牙小知識大班課件
- 英山交通安全培訓(xùn)課件
- 苗族服飾介紹
- 2025年秋季第一學(xué)期學(xué)校語文教研組工作總結(jié)(二):攜手教研之舟漫溯語文之河【課件】
- 初中歷史區(qū)域國別研究教學(xué)與跨學(xué)科整合課題報告教學(xué)研究課題報告
- 檔案工作責(zé)任追責(zé)制度
- 2024-2025學(xué)年重慶市南開中學(xué)七年級(上)期末道德與法治試卷(含答案)
- 2025年中國儲備糧管理集團有限公司招聘筆試考點考試題庫及答案
- ADCOLE+操作手冊模版
- 八年級期末考試多項細目表語文
- 綜合管廊城市地下管廊專項施工方案
- GB/T 25974.3-2010煤礦用液壓支架第3部分:液壓控制系統(tǒng)及閥
- 中職升學(xué)考試 高職單招語文必考知識點
- 維修大隊采氣樹維護保養(yǎng)手冊
評論
0/150
提交評論