Scala 函式的定義 遞迴 惰性函式 異常處理

2021-10-11 21:48:56 字數 3288 閱讀 8257

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的同學初看之時難免被搞得暈頭轉向。這裡,我試圖按照函式是否有返回值來總結一下函式定義的規律,僅供參考...