Соглашение об оставлении тела поля if / else пустым - PullRequest
0 голосов
/ 29 марта 2019

Отказ

Я не совсем уверен, что это правильный SE для этого, но я все равно начну здесь.

Фон

Я читал этот вопрос ранее и просматривал этот фрагмент кода в одном из ответов

auto z = [&](){ static auto cache_x = x; 
    static auto cache_y = y; 
    static auto cache_result = x + y;
    if (x == cache_x && y == cache_y)
       return cache_result;
    else
    {
        cache_x = x; 
        cache_y = y; 
        cache_result = x + y;
        return cache_result;
    }
};

Лично я был бы склонен переписать это следующим образом, с одним оператором возврата

auto z = [&](){ static auto cache_x = x; 
    static auto cache_y = y; 
    static auto cache_result = x + y;
    if (x == cache_x && y == cache_y)
    {
    }
    else
    {
        cache_x = x; 
        cache_y = y; 
        cache_result = x + y;
    }
    return cache_result;
};

но для части if остается пустое тело.

Мы могли бы переписать if/else так, чтобы оно было if(!(x == cache_x && y == cache_y)), но это рискует быть неправильно понятым (и может стать грязным).

Мой вопрос

Какой самый приемлемый способ написать что-то подобное, если мы

  • имеют несколько операторов возврата
  • оставить тело if пустым
  • переписать условие if в отрицательную версию
  • что-то еще

Обратите внимание, я обычно пишу на Java, тогда как пример кода на C ++. Меня интересует общепринятый способ работы, а не конкретные конструкции / методы C ++.

1 Ответ

1 голос
/ 23 апреля 2019

Я был бы склонен переписать его […] с помощью одного оператора return

Это тоже мои предпочтения.Вы можете сделать это более четко, изменив условие для ветви:

auto z = [&](){
    static auto cache_x = x; 
    static auto cache_y = y; 
    static auto cache_result = x + y;
    if (!(x == cache_x && y == cache_y)) {
        cache_x = x; 
        cache_y = y; 
        cache_result = x + y;
    }
    return cache_result;
};

В общем, если есть логика ветвления (в данном случае if ... else ...) с одной пустой веткой, попробуйте переписать еебез этой пустой ветки вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...