code

2016年10月20日 星期四

Scala 筆記 3 - conditionals以及value definition

Conditionals

scala中的條件式if-else語法和Java一樣,但是"then part"只能是expression (某個符合function return type的value),不能是一個statement(不一定有return value)。

所以在寫作邏輯上會和imperative programming很不一樣。


如果利用if-else來實作&&和|| operator:

def and(x:Boolean, y => Boolean): Boolean = if (!x) false else y

def or(x:Boolean, y => Boolean): Boolean = if (x) true else y

注意y不一定需要evaluate,所以我們pass y by name。


Value definition

之前說value和function沒有什麼不同,可以把value看成是常數函式,也就是substitution model中最後的產物。

既然value是一個常數函式,那一但定義了,應該只要在定義時被evaluate一次就好,也就是強制它擁有call by value的特性。Scala提供了宣告value的語法:


y在之後使用到時,不需要再從square(2) evaluate起,而是直接以4代入參數。
所以要注意如果利用val宣告一個infinite loop,會在當下就進入無窮迴圈!!!!


一般的function可以視作為call by name的特性,因為只有在expression/statement中使用到才會被evaluate,而且可以被evaluate多次即便可能有相同的input。








沒有留言:

張貼留言