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。
沒有留言:
張貼留言