是該放棄loop語句的時候了嗎?

2021-09-16 18:07:09 字數 1320 閱讀 9496

隨著linq、擴充套件方法和增強後的匿名**的加入,許多演算法已不再需要進行顯式的迴圈了。在一篇名為「如果你正在使用loop語句,那你就做得不正確」的發貼中,chuck jazdzewski**了c#的一些可能未來。

\u0026#xd;\n

chuck jazdzewski引用了他的大學教授在講apl時的一句話作為貼子的開頭。apl是60年代主要面向向量和矩陣操作的語言,儘管loop語句也存在於其中,但通常是用不著的。chuck寫到:

\u0026#xd;\n

\u0026#xd;\n

它與linq相似,如果你正在使用loop語句,那你就做得不正確。我後來做了許多原型開發,我強迫自己使用linq,不是我不喜歡它,相反,我真的很喜歡linq,但對loop語句的使用習慣已經在我的心裡扎了根,所以我不得不想辦法讓自己停止這種習慣,強迫自己用linq的方式去思考。每次當我試圖使用loop語句去處理乙個collection或乙個array時,我就會問自己:能不能在這裡使用linq來替代呢?那些擁有資料庫背景知識的程式設計師們在使用linq時,就像鴨子下水一樣自在,他們就是以結果集和向量計算的方式來思考,而我還不是,但我也差不多快達到那種境界了。

\u0026#xd;\n

\u0026#xd;\n

儘管chuck非常依賴於linq表示式和那些擴充套件方法,但他並沒有徹底放棄loop語句。例如,他在ienumerable擴充套件方法中就使用loop語句來隱藏呼叫函式的複雜性。在示例函式reduce中就是這麼做的,這一函式將乙個成員列表和與其相匹配的鄰近成員進行組合,而匹配的標準和如何對它們進行組合,則是由傳入的乙個匿名函式來完成的。經過這樣的實現,其它人就無須再來編寫相似的函式了。

\u0026#xd;\n

chuck例舉的**是想建立乙個函式,獲取乙個具有名為「whitespace」或「keyword」的文字的序列,然後對它們應用某些風格。最後,他的函式就簡化到只有三條查詢語句:

\u0026#xd;\n

\u0026#xd;\n

我認為標題應該改為「如果你正在使用loop,那當別人讀到你的**時就不用去分析就可以讀懂」:)

\u0026#xd;\n

\u0026#xd;\n

別誤會我的意思,我是經常使用linq的,也很喜歡它。然而,在這種情況下要想領會**的意思很困難,更別說要使用它!恕我直言,我寧可寫乙個多行的 if 語句來代替一行的實現方法。

\u0026#xd;\n

未來的c#程式設計會徹底放棄使用loop嗎?如果真是那樣的話,它會是件好事嗎?\u0026#xd;\n

檢視英文原文:is it time to abandon loops?

是該放棄loop語句的時候了嗎?

隨著linq 擴充套件方法和增強後的匿名 的加入,許多演算法已不再需要進行顯式的迴圈了。在一篇名為 如果你正在使用loop語句,那你就做得不正確 的發貼中,chuck jazdzewski 了c 的一些可能未來。chuck jazdzewski引用了他的大學教授在講apl時的一句話作為貼子的開頭。a...

是時候放棄sublime了

今天下午在忍無可忍之下終於解除安裝了sublime,最為乙個在gui下最順手的編輯器,放棄是需要非常充足的理由的。放棄sublime無非是因為以下幾點原因 外掛程式管理。sublime的外掛程式管理好像不是官方的,最近可能是網路原因吧,sublime的包管理器一直無法使用,有點心累 莫名無響應。不知...

是時候該考慮自己的生活方式了

乙個人立身於世,總是要靠自己的雙手去創造美好,創造幸福。或許路會崎嶇,然而也只有經歷了這些,跨越了這些,甚或踏平了這些,才能曰其為完整的人生了。兩個月前,很久沒見面的s君路過上海,因為是高中同學,而且也有很久沒見面了,於是就發給了我簡訊,問我最近的狀況如何,我只如實告他,把大學堂裡的頹廢生活委婉地描...