2010-05-14 1 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() {} конструкции и т.д. Мой вопрос, когда это более применимо к «идти это один »и буквально кодировать вещи, а не использовать« синтаксический сахар »на языке? Должны ли вы когда-либо использовать свои собственные способы, а не люди, которые более опытны на языке, который вы кодируете?

Я помню, что мне не нужно использовать объект Process в блоке using, чтобы помочь с некоторыми многопоточными проблемами и бесконечным циклом. Я все еще чувствую себя грязным, потому что у меня нет встроенной конструкции.

Спасибо,

Kyle

ответ

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 (city, AnonymousPredicateMethod)». –

7

Самая большая стоимость разработки программного обеспечения - это обслуживание в долгосрочной перспективе, поэтому ответ всегда, сделайте то, что даст вам самый простой и экономичный путь обслуживания (со всеми исключениями, которые могут доказать правило, perf например). Если вы можете использовать синтаксический сахар, чтобы сделать ваш код более читабельным, тогда это ваш ответ, если синтаксический сахар встает на пути, а затем не использует его.

1

Ваш пример неспособности использовать конструкцию using - это самое распространенное отклонение от новых подходов, сделанных на языках .NET и в среде. Существует только много случаев, когда область объекта IDisposable немного отличается от одной функции.

Однако, зная о том, что делают эти ярлыки, по-прежнему так же важно, как и прежде. Я действительно думаю, что многие люди просто не будут уничтожать объект, если они не могут обернуть его в using, потому что они не понимают, что он делает и что он делает легче.

Так что я хотел бы, чтобы что-то вроде подсказки подсказки для некоторых из этих замечательных ярлыков, в которых указывалось, что что-то важное происходит - возможно, даже другое раскраска ключевого слова.

Edit:

Я думал об этом, и я решил, что я считаю, using просто вводит в заблуждение ключевое слово выбрали. foreach делает именно то, на что это похоже, тогда как using не означает, для меня, что на самом деле происходит. У кого-нибудь есть мысли по этому поводу? Что, если у них ключевое слово было disposing; как вы думаете, было бы лучше?