Codekana for Visual Studio
Нашел на днях отличный плагин для Visual Studio - Codekana. Основная функция - покраска кода. Очень удобно. Я вообще считаю, что такие вещи должны поддерживаться изначально самим редактором.
Нашел на днях отличный плагин для Visual Studio - Codekana. Основная функция - покраска кода. Очень удобно. Я вообще считаю, что такие вещи должны поддерживаться изначально самим редактором.
Source Analysis, also known as StyleCop, analyzes C# source code to enforce a set of best practice style and consistency rules.
Одно из важнейших качеств "хорошего" кода - "хорошее" форматирование. Компилятор способен прочесть любую корректную программу, не важно какой кашей (точнее, кем) она написана. С людьми дело обстоит иначе. Способность быстро понимать чужой код особенно важна, когда над проэктом работают десятки и более разработчиков, находящихся териториально далеко друг от друга. Хорошее Форматирование позволяет единообразно и точно показывать логическую структуру кода, визуально разбивать код на удобные для понимания человеком абстракции.
Основная теорема форматирования гласит, что хорошее визуальное форматирование показывает логическую структуру программы. Демонстративность структуры кода должна преобладать над его красотой, а правила форматирования должны помогать хорошему коду выглядеть хорошо, а плохому - плохо.
Основное влияние на стиль форматирования имеет семантика языка программирования. Например, в языке Python с форматированием особо не повоюешь - язык его строго определяет сам. Блоки кода и подчинение блоков определяются исключительно отступами, т.е. форматированием:
if (x ==
0):
SomeOperator
SomeOperator
SomeOperator
Здесь if (x ==
0):
является единственной частью управляющей структуры, а подчиненные операторы должны иметь положительный от ее
начала отступ.
Управляющие структуры могут иметь вид:
if (x ==
0) [then]
<--then
может быть опущен
SomeOperator
SomeOperator
SomeOperator
end
if;
if (x ==
0) {
<-- начало блока является частью управляющей конструкции
SomeOperator
SomeOperator
SomeOperator
}
<--
конец блока говорит об окончании управляющей конструкции и является эквивалентом end
if;
begin
- end
или {
-
}
)
if (x ==
0)
{
<--
начало блока не является частью управляющей конструкции
SomeOperator
SomeOperator
SomeOperator
}
<--
конец блока
if (x ==
0):
SomeOperator
SomeOperator
SomeOperator
Из всех вариантов хуже всего смотрится вариант 3 (а в HTML - намного хуже :), причем некоторые энтузиасты умудряются делать его еще уродливей:
if (x ==
0)
{
<--
начало блока не является частью управляющей конструкции и визуально ей не подчиняется
SomeOperator
<-- Этот блок на самом деле не подчиняется {
,
хотя визуально выглядит иначе
SomeOperator
SomeOperator
}
<--
конец блока на уровне управляющей конструкции
Или:
if (x ==
0)
{
<-- начало блока не является частью управляющей конструкции
SomeOperator
SomeOperator
SomeOperator
<-- Этот блок на самом деле не подчиняется {
,
хотя визуально выглядит иначе
}
<-- конец блока
Поубивал бы.
Продолжение следует...