我聽說過幾個關於現代編程語言如scala(以及其他幾種我現在不記得名字的語言)的談話,並且當發言者說話時經常會感到興奮:「如果是我們的編程語言中的表達式,它會返回值WOW「。所以問題是,爲什麼當if
是一個表達式而不是像C
這樣的語句更好?爲什麼「如果表達不說明」很酷?
1
A
回答
3
它與處理值有關,而不是處理(重新)分配。值很簡單,(重新)分配很難; 考慮的java其中如果構建是一個語句,也塊{}也排序語句,嘗試是一種說法也和他們都沒有能返回值:
Object someObject = null; // you'll have to scan through all
// of the scope below to find out where `someObject` got assigned from
try {
// ... and now imagine this if statements nested with try statements like
// 20 times, and it's hard to refactor them into multiple mehtods,
// because they are not logically connected
if (someCondition) {
someObject = <someValue>;
} else {
someObject = <anotherValue>;
}
} catch (Exception e) { ....};
使用Scala,所有這些聲明實際上是表達比較,並且可以返回值:
val someObject = try {
if (someCondition) {
"someResult"
} else {
{ "something else" }
}
} catch { case Exception e => "someDefaultValue"; }
現在我認爲,斯卡拉版本是理解)))顯然更簡單是值所以它被分配了一次,我並不覺得它下面的某個地方被重新分配了。我不必將if
和try
塊之外的變量移動到外部,以便將它們保持可見。如果我有很多嵌套的塊,我仍然可以通過查看它推導出每個級別的結果值,而在java中,我需要保留整個方法,並且實際上在我的頭部執行它以便能夠推導什麼頂級變量被更新以及什麼時候被更新。 順便說一句java有?: operator
但與scala的if表達式相比是非常有限的(主要是因爲你不能使用brakets)。
1
有些人可能會感到驚訝,但有些語言根本沒有「聲明」。 Haskell就是一個例子。在這種情況下,除了有if
表達式之外別無選擇。
請注意,任何像樣的命令式語言也有if
表達式。它只是稱爲和寫入不同,如,例如:
cond ? "yes" : "no"
順便提及,命令式語言短路這樣的表達,其是用於所述第二的懶惰評估和第三表達(就像Haskell中確實俚語它無論如何)。
相關問題
- 1. 它爲什麼說無效表達?
- 2. 我的正則表達式不是很酷
- 3. 爲什麼是2打印爲主要時,如果聲明說,它不應該
- 4. 如果我自然地加入這兩張表,爲什麼結果是什麼? (基本上,請說明)
- 5. 需要說明的表達
- 6. 爲什麼XCode會說下列表達式不可分配?
- 7. 爲什麼我的正則表達式不工作? (很簡單)
- 8. clang爲什麼說_Imaginary_I沒有聲明?
- 9. 否可用Objective-C說明 - 爲什麼?
- 10. ORA-00979:不是GROUP BY表達式;不明白爲什麼
- 11. 說明「國家」是什麼
- 12. 爲什麼java的最終變量表示不可達聲明
- 13. 這個表達式爲什麼不明確?
- 14. 您聽說過的最酷的AI項目是什麼?
- 15. 如何設計一個很酷的半透明閃屏?
- 16. 預期說明符限定符列表 - 爲什麼?
- 17. 什麼是一個很酷的天青應用程序?
- 18. 如果聲明(什麼都不做)
- 19. PHP如果說明問題
- 20. PDO如果說明驗證
- 21. Twisted有什麼好酷的?
- 22. 爲什麼這是Date()。說明不起作用?
- 23. 爲什麼scikitlearn說FN大於0的F1分數不明確?
- 24. 爲什麼這兩個說明的大小有所不同?
- 25. 我不明白爲什麼說到這個
- 26. 表達式結果未使用(有數組說明)
- 27. 很酷的調試對象
- 28. 這個表達式爲什麼不給我預期的結果?
- 29. 爲什麼matche的結果與表達式有所不同?
- 30. 爲什麼我的正則表達式找不到結果?
您的意思是? 'foo = x == 1? x:y;' –
因爲它返回一個值,所以你可以用它做一些事情(或者更確切地說:任何事情)? – Bergi
這就是爲什麼它不是很酷:http://stackoverflow.com/q/4038741/1296806 –