Оптимизировать условия - PullRequest
3 голосов
/ 26 апреля 2020

У меня простой вопрос об условиях в циклах if и for или while. Есть ли способ, который позволяет мне проверить это состояние с меньшим количеством строк кода?

if (are_you_sure != "Si" && are_you_sure != "si"
 && are_you_sure != "No" && are_you_sure != "no")

Я не думаю, что смогу минимизировать код выше, но я хотел бы быть уверен.

****** РЕДАКТИРОВАТЬ ******

Спасибо за ответы! Я свернул код выше с помощью кода ниже:

int main()
{
    string choice;
    string list[4] = {"No", "no", "Yes", "yes"};

    cin >> choice;

    for (int i = 0; i < 4; ++i)
    {
        if (choice == list[i])
        {
            cout << "Is Here!";
            break;
        }
        else
        {
            cout << "\nNot found";
            cout << "\n" << i;
        }
    }
}

Это помогает мне понять, как это работает.

1 Ответ

7 голосов
/ 27 апреля 2020

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

if (none_of( are_you_sure, "Si", "si", "No", "no"))
  // ...

Конечно, эта функция должна быть написана, но это не так слишком много кода с выражениями c ++ 17:

template<typename T, typename ...Opts>
auto none_of(T val, Opts ...opts)
{
    return (... && (val != opts));
}  

У этого есть несколько приятных свойств; он может принимать любое количество аргументов, а также использоваться с типами, отличными от строк:

int n = 42;
if (none_of( n, 1, 2, 3))
  // ...

Убедитесь, что имя функции написано правильно, поскольку это сильно влияет на читабельность.

...