четверг, 30 апреля 2009 г.

Скобочки для if в одну строчку

(DRAFT)

Здесь расскажу про такое заблуждение как обрамление фигурными скобочками оператор if с одним простым действием.

if(condition)
{
        return 0;
}


вместо
if(condition)
        return 0;


Мифическая причина идущая от Стива Макконнела (Code Complete). К ней все обращаются, когда начинают мне её называть. Такое ощущение, что это единственная книга, которую горячие стороники скобочек читали :) Кстати, советую тогда заглянуть на http://agileconsulting.ru/wiki/Books - тут множество книг о качестве кода.
1. Защита от дурака, что кто-то в будущем добавит строчку и сделает баг в программе.

А теперь демистификация скобок. Итак, почему скобки это пережиток:
1. Отступы явно указывают на логический блок из одной строки.
2. Отступы проставляются автоматически средой разработки.
3. Тесты не дадут написать код неправильно. У вас нету тестов? Тогда улучшать качество кода начали не от туда :)
4. Скобки кушают 2 линии
5. Мы бизнес-разработчики, и должны свести к минимум все инженерные ухищрения. Ведь в любом языке фраза: "если наступит утро, то я проснусь" не содержит скобок.

А теперь мой аргумент за скобочки:
1. Визуально видно разделение условия от действия. Строка между условием и действием способствует отличию. Но минус в том, что такая конструкция нагружает, когда идёт проверка входных параметров. В таком случаем мне нужно локаничное полотно проверок, а не скобочки :) Поэтому вначале функции проверки без скобочек очень удобны, а вот чуть глубже в тело функции - нужно подумать.

Если вы используете современную IDE и TDD и утверждаете, что скобки полезны по названой мифической причине - просьба дайте конкретный пример. Иначе рассуждаем о коне в ваккууме.

14 комментариев:

  1. на мой взгляд, скобочки помогаюти делать код проще. Это ты написал "return 0;", а часто тело бывает очень даже не тривиальным, и понять с помощью скобок гораздо проще. И если код Java-style, потеряешь всего одну строку под скобки. Вобщем, я не согласен, что скобки в данном случае зло.

    if (condition) {
    return new XMLObject();
    }

    ОтветитьУдалить
  2. if(condition)
    return 0;

    if(!condition)
    return 1;

    Гы

    ОтветитьУдалить
  3. было круто!
    if(condition) return !condition;
    else return condition;

    ОтветитьУдалить
  4. Вот такая реальность жизни...

    http://www.govnokod.ru/872

    ОтветитьУдалить
  5. Анонимный4 мая 2009 г., 16:46

    Денис, прошу прощенья, что не в тему немного. Вы родом не из Хабаровска?

    ОтветитьУдалить
  6. В любом языке фраза: "если наступит утро, то я проснусь,пойду пить кофе и читать газету" также не содержит скобок. Вывод: скобки вообще не нужны, даже если операторов много :)

    ОтветитьУдалить
  7. Юля, ну зачем тузом бить? :)

    Анонимный, да из Хабаровска.

    ОтветитьУдалить
  8. Анонимный14 мая 2009 г., 17:41

    По-моему, вы занимаетесь хренотой в этом посте. Без обид. Если в этом и состоит ваша работа как тренера, то я удивлен и раздосадован.

    -- meowth.

    P.S. Мне помнится, что вы упоминали, что сильны в применении ценностей и принципов написания хоршего кода. Предлагаю чеклист этих принципов в качестве темы след. поста -- надеюсь, что не только мне будет интересно.

    ОтветитьУдалить
  9. Этот комментарий был удален автором.

    ОтветитьУдалить
  10. Анонимный16 мая 2009 г., 19:19

    >> материал этого сообщения

    Не материал. Удивляет то, что целый пост посвящен достаточно второстепенному вопросу, а в качестве аргументов приведены субъективные ощущения, не подкрепленные практикой.
    Это хорошо, что вы над ними задумываетесь, однако.. Есть такое выражение -- "писАть в стол", т.е. размышлять и делать выводы исключительно для себя, никому не показывая. Если они подтверждаются -- тогда делиться ими, если нет -- оставлять их выводами для себя. Есть ощущение, что вам этого не хватает.

    И завязывайте уже с психоанализом :)

    -- meowth

    ОтветитьУдалить
  11. > не подкрепленные практикой.
    Ты любишь читать чужие мысли похвально. Но в данном случае огорчу тебя. Ты промазал.

    > И завязывайте уже с психоанализом :)
    Это не психоанализ. Это одна из составляющих динамики развития команд. Если ты владеешь таким инструментом - можно построить команду мечты.

    Жаль, что ты защищаешься.

    Чтобы развеять, что это не психоанализ, а реальность обратись к книге "Программируем командный дух" и послушай наши подкасты, где мы обсуждаем проблематику эмоционально интеллекта.

    ОтветитьУдалить
  12. И перестань обсуждать, начни проверять через собственный опыт. Только опыт ответит на вопрос - что правда, а что нет.

    И ещё раз отправлю тебя к практике - Shu-ha-ri. Обсуждают только на уровне ri, но ты не прошёл даже ни shu, ни ri. А пытаешься вставить свои пять копеек. Но без опыта, твои пять копеек подтверждены гиперинфляции.

    ОтветитьУдалить
  13. А так, прикольно, что ты свои заметки оставляешь, заставляешь задуматься :)

    ОтветитьУдалить