如何評價王垠的《Kotlin和Checked Exception》?

時間 2021-05-30 15:04:44

1樓:中國夢

CE最大的問題就是,菜鳥程式設計師容易濫用亂用,高手又不需要。

乙個面向新手的工具,然而新手又很難合適地用好,所以這個東西就沒有了存在價值。

2樓:

最近寫Go,用的乙個基礎庫,光返回error介面,文件裡也不說錯誤型別是啥,每次用它的API都要看原始碼人肉深度優先遍歷一下。

看了這個問題下很多回答對CE的批判,恍然大悟。

錯誤處理個錘子,管它什麼錯誤型別,包一層往上丟,頂層打個log就完事了。

let it crash, yes!

clean code, yes!

PS: 千萬別說這是寫庫的人水平低,Go標準庫大部分是谷歌的神仙們寫的吧?沒文件的API貌似也不少見。

PPS: 千萬別說寫文件就完事了,連try catch都懶得寫的人去寫文件,你不開玩笑嗎?

3樓:Krys

剛開始看還覺得有點道理,後來我又去了解了一下kotlin發現完全是王垠沒搞清楚。

那個CE是用來山寨Union Type的,你如果把CE去了相當於你就沒有乙個靜態的Union Type 的山寨工具了。

但是Kotlin裡面有另外的東西可以搞Union Type啊,而且還搞得比CE好,Kotlin的arrow-kt就可以幹這個

arrow-kt/arrow

也就是說 Kotlin 裡面也有 Option 和Either這樣的東西,用起來不比CE爽多了麼。

我就覺得奇怪,文章裡說Union Type好,然後其實Kotlin的sealed class應該是對Union Type的更好支援,為啥這個可以成為說Kotlin不好的理由。

4樓:

「 因為程式設計師沒有仔細思考,沒有處理本來該自己處理的異常,而只是簡單的把下層的異常加到自己函式型別裡面。在多層呼叫之後,你就會發現最上面的函式累積起很多種異常,讓呼叫者不知所措,只好傳遞這些異常,造成惡性迴圈。終於有人煩得不行,把它改成了『throws Exception』 」,這句話說的很形象,深有體會

5樓:賈明宇

ce對於工作了七八年的程式設計師來說有沒有用還這麼大爭議,就足夠說明它有多麼的失敗。ce有用嗎?有用,但是沒有ce比有ce更有用,因為ce的存在,被程式設計師濫用的還不夠多嗎?

好的程式設計師能catch然後包裝成runtime exception扔出去就不錯了,你問問你自己,見到最多的就是catch住然後記個log就完事兒的吧?有的log都不記!還有的就是在方法宣告重新throw出去,把皮球扔給呼叫的人,結果方法宣告了一路有沒有!

最上層的程式設計師心想wtf?我馬上就要把結果返回給使用者介面了,結果這方法居然有乙個不知道哪兒來的ce來讓我處理,我哪兒知道怎麼處理呀!

我的結論就是,對系統不熟悉的人,你加再多的ce他也出一堆的bug。

你有責任對你負責的部分進行處理,並把你能處理的業務問題消化解決,那些不可抗力的異常直接拋成runtime exception,由最上層統一處理。

6樓:楊洋

哎我tm從微軟話題轉到這kotlin話題,這王x又來了,還行不行了???

這小子在軟體業做出什麼成果還是什麼? 這不是那什麼?

「我幹什麼成什麼,我什麼都沒乾,所以我什麼都沒成。「

7樓:

各種語言都有最佳實踐

50行就讓kotlin工程跑起來了

Kotlin起步之doSomething project - 知乎專欄

做沉溺茴字八種寫法的孔乙己不好

8樓:

看到 @vczh 提到有的函式的異常由於呼叫方式決定了不會出現,但是沒辦法表達。我覺得這個其實就是動態和靜態的問題了,現在搞的型別系統想要盡可能地提高表達能力,就是想讓很多邏輯能在執行前就表現出來,但是我總覺得這裡面有陷阱,很多東西肯定是必須在執行時出來的,即使那些號稱when it compiles it works的語言,我也持懷疑態度

9樓:貝斯特爾

很多人搞不清楚,ce是提供方宣告出來需要呼叫方處理的異常,否則re就行了。ce一般是try後需要做一些處理的,而不是只打個log就結束的,所以io和多執行緒庫里ce特別多。

error是程式處理不了的。

個別答主明顯不清楚區別。

10樓:周維

我只能認為ce是理論上有意義,實際使用中混亂不堪,絕大部分情況下,毫無價值。

事實上說明了c#設計師並非只會打嘴炮的語言理論家,同時兼顧了工程上的妥協

11樓:大妖精

en.cppreference.com/w/cpp/language/except_spec舉幾個例子,我們應該怎麼處理ExceptionNullReferenceException:

把函式作者拉出來揍一頓InvalidArgumentException:把呼叫者拉出來揍一頓

DivideByZeroException:把不檢查使用者輸入的函式作者拉出來揍一頓

OutOfMemoryException:把運維拉出來揍一頓OperationCancelledException:你猜啊

12樓:品雪

難得贊同他一回。我持相同的論調,十多年前還在寫 Delphi 的時候就跟人說,Delphi 的 Exception 為啥沒什麼人用,就是因為不強制申明,然後你不看文件(如果有)或原始碼就不知道呼叫的東西會不會拋異常,也就無從用起,然後自己的也就不寫了,即使知道會拋,反正不捕獲也能過,能懶就懶唄。

至於 Anders Hejlsberg,人在折騰 Delphi 的時候就選了這個方式,在安全和方便之間選後者也不奇怪吧。

13樓:Ryou ikonn

王垠說的應該是異常機制是乙個很好的模組化處理的機制,它不是完美的,但是為我們提供了極大的便利。比如我要寫乙個去水果店購買蘋果的事件,可能會出現蘋果被賣完了,可能買蘋果的時候地球毀滅了,可能蘋果店老闆愛上你不給蘋果了,有可能買蘋果的時候穿越到大明朝當太監了,等等異常觸發了買不到蘋果的結果,你不用反覆的去寫if else then去判斷,僅此而已。作為程式設計者,你沒有必要捕獲所有的異常,僅僅將異常機制當作乙個工具,捕獲有可能會出現的情況即可。

14樓:艾斯尼勒

kotlin不了解。

CE最少可以讓呼叫者知道你丟擲了什麼異常,至於呼叫者要不要處理要怎麼處理是呼叫者的事兒。

關於他對Hejlsberg的攻擊,我本來沒看過Hejlsberg的言論,不能聽一面之詞也不知道他是不是尋章摘句斷章取義了。但即使如此,我也不認為他批駁的那個語言設計沒有CE的理由是荒謬的。這就跟「明明三個底部操作鍵更方便,iPhone設計成乙個鍵是荒謬的「一樣沒道理。

最後:php是最好的語言。

15樓:徐辰

王同學沒搞清乙個基本概念,exception不是拿來做「錯誤」處理的,否則就應該叫error了。

CE之所以沒什麼用,最根本的原因是,你不應該去捕獲其它函式丟擲的異常,而應該去捕獲你需要處理的異常,在函式簽名裡寫或者不寫某個東西對這一目標毫無幫助。

需要捕獲的異常僅僅包括執行時才會產生的、事先可以預料到的、並且可以恢復的異常,比如磁碟滿網路斷了之類,其它所有的異常只意味著程式錯誤,掩蓋它們是沒用的。

王同學的文章一直清楚的表明他缺乏實際的工程經驗,這一篇也不例外。

如何評價 C 與 Kotlin?

包子 我覺得C 更強大!pinvoke,com互操作,很強大!更有用的是,C 的unsafe,stackalloc等,能允許指標和棧記憶體操作,我可以把它當C語言用,來提高演算法效率! Scott Huang 模擬關係 C F Kotlin Scala C Kotlin更工程化 實用化一點 F Sc...

如何評價王垠的 A 計畫?

kevin chen 這種說話的語氣不像對技術有敬畏之心的人,而且他的目標已經實現了,mysql不就是?而且他說的東西感覺像江湖郎中那包治百病的藥。 乾貨滿滿張雜湊 一直覺得垠神是所有技術大牛中最會營銷的,自身的知名度本來就很高,先提乙個巨集偉計畫提高知名度後做,本來就是一件穩賺不虧的事 希望盡早能...

如何評價王垠的《Sum types and union types》?

slaveoftime 之所以喜歡用F ML系語言 有乙個原因就是union type啊 當然還有很多其他原因 type SupportedPayment1 CreditCard ofstring Cash Wechat ofstring 可選,目的解釋如下 type SupportedPaymen...