Улучшение читаемости короткого фрагмента, сохраняя стиль StyleCop счастливым - PullRequest
2 голосов
/ 27 июля 2010

Код ниже выглядел хорошо для меня, когда я писал его, но когда я вернулся к нему снова, было довольно трудно понять, что происходит. Вокруг value == ... были круглые скобки, но я должен был удалить их после того, как StyleCop стал обязательным (я не могу это контролировать). Итак, как я могу улучшить этот раздел кода? Я думал: x = value == y ? true : false;, но это, вероятно, еще более запутанно, плюс глупо, хотя компилятор это оптимизирует.

set
{
    Debug.Assert(value == ConfigType.DATABASE || value == ConfigType.FILE,
        "Configuration type must be either 'File-based' or 'Database-based'; it was: "
        + value.ToString());

    // HG TODO: The following is concise but confusing.
    this.fileBasedRadioButton.Checked = value == ConfigType.FILE;
    this.databaseBasedRadioButton.Checked = value == ConfigType.DATABASE;
}

Ответы [ 3 ]

3 голосов
/ 27 июля 2010
bool isFile = value == ConfigType.FILE;
bool isDatabase = value == ConfigType.DATABASE; // or isDatabase = !isFile

Debug.Assert(isFile || isDatabase, 
"Configuration type must be either 'File-based' or 'Database-based'; it was: " 
+ value.ToString()); 

this.fileBasedRadioButton.Checked = isFile;
this.databaseBasedRadioButton.Checked = isDatabase; 

Это делает его немного более читабельным (явно декларирующим bool), вы знаете, что оно должно быть истинным или ложным.

И, таким образом, если вам нужно (возможно, в будущем) изменить настройки на основе файла / базы данных тем же способом, у вас уже есть удобный инструмент bool вместо проверки каждый раз

1 голос
/ 27 июля 2010

Отступ во второй и третьей строке метода Debug.Assert().Затем он должен выглядеть следующим образом:

Debug.Assert(value == ConfigType.DATABASE || value == ConfigType.FILE,
    "Configuration type must be either 'File-based' or 'Database-based'; it was: "
    + value.ToString());

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

. Он не дает Debug.Assert() выглядеть как 3 строки.

Что касается value==, я согласен с предыдущимпостер.Вы должны сделать bool isDatabase и isFile, чтобы предотвратить вызов поля с ConfigType дважды в вашем первом аргументе.

1 голос
/ 27 июля 2010

Если вы не хотите использовать оператор ?:, используйте if..else. Конечно, это немного более многословно, но вы не потратите больше нескольких секунд, чтобы понять это.

Через несколько месяцев, когда вы вернетесь к этому коду, вы будете рады, что взяли дополнительные 5 строк.

Обеспечение простоты обслуживания кода должно быть вашим приоритетом № 1 .

if (value == ConfigType.FILE)
   this.fileBasedRadioButton.Checked = true;
else
   this.fileBasedRadioButton.Checked = false;


if (value == ConfigType.DATABASE)
   this.databaseBasedRadioButton.Checked = true;
else
   this.databaseBasedRadioButton.Checked = false;
...