2010-05-14 76 views
3

我忙於深入研究諸如多線程和死鎖等問題。本書針對的是僞代碼和C代碼,而且我正在忙於尋找諸如Mutex鎖和監視器。語法糖的使用/內置功能

這讓人想起以下;在C#中,事實上.NET我們有很多用於處理事務的語法糖。 For instance(.NET 3.5):

lock(obj) 
{ 
    body 
} 

是相同的:

var temp = obj; 

Monitor.Enter(temp); 

try 
{ 
    body 
} 
finally 
{ 
    Monitor.Exit(temp); 
} 

當然還有其他例子,如using() {}結構等我的問題是當它更適用於「去它本身「並且自己編寫代碼而不是在語言中使用」語法糖「?一個人是否應該用自己的方式,而不是那些在編碼語言方面更有經驗的人?

我記得不要在using塊中使用Process對象來幫助解決一些多線程問題和無限循環。我仍然感到骯髒,因爲沒有在那裏使用的構造。

感謝,

凱爾

回答

12

儘可能地堅持語法糖。它簡潔,易於維護,不易出錯,易於理解,而且他們創造它是有原因的。

如果您必須手動控制某些內容(例如,操縱IEnumerator<T>而不是使用foreach),那麼是的,請丟棄語法糖。否則,習慣是一件好事。

2

在C#中,此LINQ聲明:

var filteredCities = 
    from city in cities 
    where city.StartsWith("L") && city.Length < 15 
    orderby city 
    select city; 

是語法糖(和等同於):

var filteredCities = 
    cities.Where(c => c.StartsWith("L") && c.Length < 15)) 
    .OrderBy(c => c) 
    .Select(c => c); 

如果你知道C#好吧,後者的版本比前者更容易分開;你可以清楚地看到它正在做什麼。

但是,對於典型的日常使用,大多數人會發現加糖版本的清潔劑可以查看,並且更易於閱讀。

+1

在第二個例子中,你仍然有「語法糖」。想象一下,如果你不得不做'Enumerable.Where(城市,匿名認識方法)'的東西。 – 2010-08-31 19:30:50

7

軟件開發的最大成本是長期維護,所以答案總是如此,能爲您提供最簡單和最具成本效益的維護路徑(所有可能證明規則的例外情況,perf例如)。如果你可以使用語法糖來使你的代碼更具可讀性,那麼這是你的答案,如果語法糖阻礙你的話,那就不要使用它。

1

您不能使用using構造的例子是我在.NET語言和框架中提供的新方法中最常見的偏差。只有很多情況下,IDisposable對象的作用域稍微超出了單個函數的範圍。

但是,瞭解這些快捷方式的功能仍然與以往一樣重要。我確實認爲許多人如果不能將它包裝在using中,就不會處理對象,因爲他們不明白它的作用以及它變得更容易。

所以我確實希望有一些工具提示helptext用於這些精彩的快捷方式,這表明正在發生一些重要的事情 - 甚至可能是不同的關鍵字着色。

編輯:

我一直在想這個,我已經決定,我相信using僅僅是選擇了一個誤導性的關鍵字。 foreach確實聽起來像,而using並不意味着,對我來說,實際上發生了什麼。任何人對此有任何想法?如果他們的關鍵字是disposing而不是;你認爲它會更清楚嗎?