4 函式的注意事項和細節討論
5 過程
6 惰性函式
7 異常處理
8 練習題
在scala中,方法和函式幾乎可以等同,函式的使用方式更加的靈活多樣
方法轉函式:
object testscala
}class dog
}
函式式程式設計是從程式設計方式(正規化)的角度來談的,可以這樣理解:函式式程式設計是把函式當作一等公民,充分利用函式、支援的函式多種使用方式
物件導向程式設計是以物件為基礎的程式設計方式
在scala中函式式程式設計和物件導向程式設計融合在一起了
基本語法
def 函式名 (
[引數名:引數型別],.
..)[
[:返回值型別]=]
說明
函式宣告關鍵字def
[引數名:引數型別]
表示函式的輸入,可以沒有
函式中的語句:表示為了實現某一功能模組
函式可以有返回值,也可以沒有
返回值形式1::返回值型別=
返回值形式2:=
表示返回值型別不確定
返回值形式3:表示沒有返回值,return不生效
如果沒有return,預設以最後一行的結果為返回值
1、基本介紹
乙個函式在函式體內又呼叫了本身,稱為遞迴呼叫
2、遞迴呼叫快速入門
object testscala
def test(n:
int)
:unit
= print(n)
}}
輸出:2 3 4
3、遞迴需要遵守的重要原則
object testscala
def fbn(n:
int)
:int
=else
if(n==2)
else
}}
1、函式的形參列表可以是多個,如果函式沒有形參,呼叫時可以不帶括號
2、形參列表和返回值列表可以是值型別和引用型別
3、scala中的函式可以根據函式體最後一行**自行推斷函式返回值,那麼在這種情況下return關鍵字可以省略
def
(n1:
int,n2:
int)
:int
=
4、因為scala可以自行推斷,所以在省略return關鍵字的場合,返回值型別也可以省略
def
(n1:
int,n2:
int)
=
5、如果函式明確使用return關鍵字,那麼函式返回就不能使用自行推斷了,需要明確返回值型別
def
(n1:
int,n2:
int)
:int
=
def
(n1:
int,n2:
int)
6、如果函式明確無返回值(unit),那麼return也無效
7、如果明確函式無返回值或不確定返回值型別,那麼返回值型別可以省略(或者宣告為any)
def f3(s:
string)=
def f3(s:
string
):any=
8、scala語法中任何的語法結構都可以巢狀其他語法結構(靈活),即:函式中可以再宣告/定義函式,類中可以再宣告類,方法中可以再宣告/定義方法
9、scala函式的形參,在宣告引數時,直接賦初始值,這時呼叫函式時,如果沒有指定實參,則會使用預設值。
基本介紹
將函式的返回值型別為unit的函式稱之為過程,如果明確函式沒有返回值,那麼等號可以省略
惰性計算是許多函式式程式語言的特性。惰性集合在需要時提供其元素,無需計算他們,這帶來了一些好處。
首先,您可以將耗時的計算推遲到絕對需要的時候;其次,您可以創造無限個集合,只要他們繼續接受請求就會繼續提供元素
當函式返回值被宣告為lazy時,函式的執行將被推遲,直到我們首次對此取值,該函式才會執行。這種函式我們稱為惰性函式
def main(args: array[
string])
:unit
=def sum(n1:
int,n2:
int)
:int
=
這種情況下不會列印2
def main(args: array[
string])
:unit
=def sum(n1:
int,n2:
int)
:int
=
這種情況輸出:2 30
lazy 不能修飾 var變數
不但在呼叫函式時加lazy會導致函式的執行被推遲,我們在宣告乙個變數時,如果給宣告了lazy,那麼變數值得分配也會推遲
例如:lazy val i =10
介紹
scala提供try和catch塊來處理異常 ,try塊用於包含可能出錯的**,catch用來處理try塊中發生的異常
例子
try
catch
finally
小結
import scala.io.stdin
object testscala
def printjin(s:
int)
=for
(k <-
1.to(i + i -1)
) println(
)//換行}}
}
import scala.io.stdin
object testscala
def print99(n:
int)
:unit
= println()}
}}
Scala之惰性函式(二)
基礎概念 當val被宣告為lazy時,它的初始化將會被推遲 直到我們首次對此進行取值時,函式才會執行,這種函式我們稱之為惰性函式。案例使用object lazydemo01 def sum n1 int,n2 int int 列印 在res沒有輸出的時候,sum函式是不會執行的 在進行取值時,sum...
Scala 的巢狀方法的定義與遞迴
在scala中,方法是可以巢狀的,及可以在乙個方法的方法體中定義其他方法。當我們將乙個很長的方法重構成為幾個更小的方法時,並且這些方法只在該方法中呼叫,就可以使用巢狀方法。這樣的好處是定義的小的輔助方法對外界是不可見的。以下 實現了乙個階乘演算法,採用了切套方法完成計算 def factorial ...
scala定義函式的幾種方式
scala是物件導向的語言,同時也是函式式程式語言。函式在scala中是一等公民,它和變數一樣,既可以作為其他函式的引數,也可以將函式賦值給乙個變數。在scala中定義函式有很多方式,不熟悉scala的同學初看之時難免被搞得暈頭轉向。這裡,我試圖按照函式是否有返回值來總結一下函式定義的規律,僅供參考...