聊聊JavaScript和Scala的表示式 Expression
我們先看下面這段簡單的JavaScript程式碼。
我在第10行呼叫了函式f,其中傳入的第二個和第三個引數都是一個逗號表示式。
函式f的實現,會檢查這兩個引數的型別,如果是函式,則執行函式呼叫,再列印其返回值,否則直接列印傳入的表示式的值。
執行上面這段程式碼,列印輸出如下:
我們可以看出,雖然傳入的第一個引數為true,導致函式f內部只會列印第二個引數y代表的表示式的值,5,但是第三個引數代表的表示式在函式f呼叫時,也進行了表示式求值,所以最後console也輸出了Big calculation2。
如果我們想實現所謂的“惰性求值”,有時候也稱”惰性計算“,那麼只需要將原本寫在表示式位置的邏輯用一個JavaScript函式包裹起來,如下:
再次呼叫f,此時傳入的引數y和z的型別為函式,因此在f進行呼叫時,同之前傳入的表示式不同,這裡並不會即時呼叫y和z代表的函式。列印輸出:
我們再來看看Scala關於表示式的處理是否和JavaScript一致。
Scala 是一門多正規化(multi-paradigm)的程式語言,設計初衷是要整合物件導向程式設計和函數語言程式設計的各種特性。
Scala 執行在Java虛擬機器上,併相容現有的Java程式。
Scala 原始碼被編譯成Java位元組碼,所以它可以執行於JVM之上,並可以呼叫現有的Java類庫。
下圖第5行和第12行我分別定義了兩個Scala函式exp_test1和exp_test2, 邏輯和之前的JavaScript函式f類似。
exp_test1接受的第二個和第三個引數型別為exp1 :=> Unit,意思是需要傳入一個表示式,這個表示式的返回型別是Unit。
exp_test2接收的第二個和第三個引數型別為exp1() :=> Unit,意思是需要傳入一個函式,這個函式沒有任何輸入引數,函式的返回型別是Unit。
第19行到第25行是對這兩個函式的各種測試,列印輸出:
可以看到,即使傳入兩個函式exp_test1和exp_test2的第二個和第三個引數都是表示式,Scala也能做到對錶達式的惰性求值:
第19行和第20行的函式呼叫,第三個引數位置的表示式和函式都沒有即時求值,而是惰性求值。
第22行和第23行的函式呼叫,第二個引數位置的表示式和函式都沒有即時求值,而是惰性求值。
這個小例子說明了不同的程式語言,對於函式呼叫的表示式求值方式可能採取了不同的實現:惰性求值或者即時求值。
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2213441/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ABAP mesh表示式, JavaScript和Scala的 expressionJavaScriptExpress
- 動態拼接表示式——ExpressionExpress
- 【c#表示式樹】最完善的表示式樹Expression.Dynamic的玩法C#Express
- 05.表示式目錄樹ExpressionExpress
- [C# Expression] 之動態建立表示式C#Express
- JavaScript 表示式JavaScript
- 聊聊 scala 的模式匹配模式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- JavaScript短路表示式JavaScript
- javascript-函式表示式JavaScript函式
- JavaScript權威指南(4)——表示式和運算子JavaScript
- 【JavaScript】正規表示式JavaScript
- javascript正規表示式JavaScript
- JavaScript 正規表示式JavaScript
- 你不知道的JavaScript--Item7 函式和(命名)函式表示式JavaScript函式
- javascript 的函式宣告與表示式對比JavaScript函式
- JavaScript正規表示式(2)JavaScript
- JavaScript建立正規表示式JavaScript
- C#動態查詢:巧用Expression組合多條件表示式C#Express
- JavaScript, ABAP和Scala裡的尾遞迴(Tail Recursion)JavaScript遞迴AI
- 20個稀奇古怪的 JavaScript 表示式JavaScript
- 聊聊我們那些年用過的表示式引擎元件元件
- JavaScript匹配中文正規表示式JavaScript
- JavaScript正規表示式 手冊JavaScript
- JavaScript RegExp(正規表示式) 物件JavaScript物件
- 淺談JavaScript正規表示式JavaScript
- javascript正規表示式 | 知識梳理JavaScript
- JavaScript正規表示式進階指南JavaScript
- kotlin 函式和 Lambda 表示式Kotlin函式
- JavaScript學習系列部落格_35_JavaScript 正規表示式的使用JavaScript
- Scala 的方法與函式函式
- JavaScript正規表示式迷你書-筆記JavaScript筆記
- JavaScript基礎-06-正規表示式JavaScript
- 系統認識JavaScript正規表示式JavaScript
- 《JavaScript 闖關記》之正規表示式JavaScript
- [LeetCode Python3]10. Regular Expression Matching手把手詳解——正規表示式(一)LeetCodePythonExpress
- 密碼強度的正規表示式(JavaScript)總結密碼JavaScript
- JavaScript權威指南(10)——正規表示式的模式匹配JavaScript模式