Я просто хотел бы быть уверен, что смогу написать компактный if с условием or следующим образом:

const ST c_is = ((kg==0) || (kg==nktot)) ? 0 : 10;

Цель состоит в том, чтобы установить c_is в 0, если kg равно 0 или nktot и 10 в противном случае.

Не могли бы вы подтвердить мне, что это нормально?

-3
Martin7 4 Фев 2022 в 10:46
(!kg || (kg==nktot)) ? 0 : 10 -> (kg && (kg!=nktot)) ? 10 : 0 -> (kg && (kg!=nktot)) * 10
 – 
273K
4 Фев 2022 в 10:54
5
Когда вы не уверены на 100%, что делает какой-либо код, вы должны написать тест для подтверждения. (Когда вы уверены на 100%, то скорее всего вы ошибаетесь и тест нужен тем более)
 – 
463035818_is_not_a_number
4 Фев 2022 в 10:59
Определенно можно ответить, написав тесты. И вы бы узнали больше таким образом.
 – 
SKCoder
4 Фев 2022 в 12:03

3 ответа

Да, все в порядке.

От самого читаемого до самого непонятного:

// give more meaningful names, as it is only you know what these ids mean
constexpr ST set_is(ST kg) 
{
    if (kg == 0 || kg == nktot)
        return 0;
    return 10;
}

constexpr ST c_is = set_is(kg);
constexpr ST c_is = ((kg==0) || (kg==nktot)) ? 0 : 10;
constexpr ST c_is = [=] {
    if (kg == 0 || kg == nktot)
        return 0;
    return 10;
}();
constexpr ST c_is = (kg !=0 && kg !=nktot) * 10;
2
bolov 4 Фев 2022 в 11:01
Извините, я понял, что по существу продублировал ваше последнее выражение. Голосуйте за хорошие чувства.
 – 
Bathsheba
4 Фев 2022 в 13:35
1
Абсолютно не беспокойтесь. И я понял, что продублировал комментарий своим последним выражением. Проголосуйте и за хорошее настроение 😁
 – 
bolov
4 Фев 2022 в 13:47

Вы можете сделать это без ветки с помощью

10 * !!kg * (kg != nktot)

Хотя в выражении, которое вы представляете, нет ничего плохого, и мой способ можно считать преждевременной оптимизацией или лишь немного более легким для чтения, чем «Поминки по Финнегану» Джеймса Джойса.

1
Bathsheba 4 Фев 2022 в 13:32

Цель состоит в том, чтобы установить c_is в 0, если kg равно 0 или nktot и 10 в противном случае.

Не могли бы вы подтвердить мне, что это нормально?

Это нормально.

0
KamilCuk 4 Фев 2022 в 10:57