比如我們要Parse一個string的yourvalue到boolean,這個時候C#的語法糖就可以組合出神奇的作用了
換作其他語言,可能只能這樣寫:
或者是
是
後三種怎麼看都有多多少少的多餘:為什麼轉換和取值不能放在同一步?這裡就體現了C#的優雅了。
在做型別轉換的時候,也可以結合出神奇的效果。有的時候,你的型別是來自於其他地方,可能想根據子型別不同來做一點其他的事情:
這個不得不黑一下Java,在IDEA中甚至還有專門的code snippet來生成變數的型別檢查和cast,最後Java寫出來的程式碼通常這樣
你可能覺得寫兩三次這種程式碼無所謂,但是它的數量在不多也不少的時候就非常噁心(數量多了就考慮其他的實現方法了)。
再舉個例子,Linq的關鍵字,是可以自己重寫的(不是嚴格意義上的重寫),也就是說你可以用Linq那一套from/where/select... 關鍵字,搞很多事情,比如:
雖然我不知道Python能不能這麼幹,但是我知道Java一定不能。
有的答案說優雅一般等同於慢,這裡就能體現微軟在語言和庫方面的厲害之處了,可能你覺得Linq這些關鍵字預設的實現不能滿足你的應用場景,好!我給你自己override的機會,你只需要顯式的實現一個static的關鍵字對應的方法,就可以完成重寫了。
再比如說C#預設的Task實現不能滿足你想要的Task粒度,你完全可以自己控制Task是怎麼排程,背後用的什麼來跑這個Task等等...
所以說,不一定優雅的就慢,不優雅也不一定快(特指上面Parse是否成功還要用異常或者是變數裝箱來搞的語言)。
有人用異常來舉例子,其實在C#裡封裝異常也是非常容易的事情
這些事情都是最基本的OOP封裝吧,我認為非常多的語言都能做到
比如我們要Parse一個string的yourvalue到boolean,這個時候C#的語法糖就可以組合出神奇的作用了
換作其他語言,可能只能這樣寫:
或者是
是
後三種怎麼看都有多多少少的多餘:為什麼轉換和取值不能放在同一步?這裡就體現了C#的優雅了。
在做型別轉換的時候,也可以結合出神奇的效果。有的時候,你的型別是來自於其他地方,可能想根據子型別不同來做一點其他的事情:
這個不得不黑一下Java,在IDEA中甚至還有專門的code snippet來生成變數的型別檢查和cast,最後Java寫出來的程式碼通常這樣
你可能覺得寫兩三次這種程式碼無所謂,但是它的數量在不多也不少的時候就非常噁心(數量多了就考慮其他的實現方法了)。
再舉個例子,Linq的關鍵字,是可以自己重寫的(不是嚴格意義上的重寫),也就是說你可以用Linq那一套from/where/select... 關鍵字,搞很多事情,比如:
Monadic Parser Combinators using C# 3.0雖然我不知道Python能不能這麼幹,但是我知道Java一定不能。
有的答案說優雅一般等同於慢,這裡就能體現微軟在語言和庫方面的厲害之處了,可能你覺得Linq這些關鍵字預設的實現不能滿足你的應用場景,好!我給你自己override的機會,你只需要顯式的實現一個static的關鍵字對應的方法,就可以完成重寫了。
再比如說C#預設的Task實現不能滿足你想要的Task粒度,你完全可以自己控制Task是怎麼排程,背後用的什麼來跑這個Task等等...
所以說,不一定優雅的就慢,不優雅也不一定快(特指上面Parse是否成功還要用異常或者是變數裝箱來搞的語言)。
有人用異常來舉例子,其實在C#裡封裝異常也是非常容易的事情
這些事情都是最基本的OOP封裝吧,我認為非常多的語言都能做到