Я видел приведенное ниже выражение в задаче обедающих философов и не понял его. Как называется этот стиль кодирования (если для него есть особое название)? Что делает выражение? Пожалуйста, помогите мне это объяснить.
int right = i;
int left = (i - 1 == -1) ? NO_OF_PHILOSOPHERS - 1 : (i - 1);
int locked;``
Ниже ссылка на программу:
Проблема обедающих философов с мьютексами
1 ответ
Строка эквивалентна следующему:
int left;
if (i - 1 == -1) {
left = NO_OF_PHILOSOPHERS - 1;
} else {
left = i - 1;
}
Что упрощает:
int left = i - 1;
if (left == -1) {
left = NO_OF_PHILOSOPHERS - 1;
}
Что также можно выразить с помощью оператора по модулю:
int left = (i - 1 + NO_OF_PHILOSOPHERS) % NO_OF_PHILOSOPHERS;
Синтаксис со знаком вопроса называется синтаксис тернарного оператора. Какой способ выразить код — дело предпочтений. Я бы не стал использовать здесь тернарный оператор, потому что считаю, что он чрезмерно усложняет код, помещая много логики в одну и ту же строку.
Пожалуйста, воздержитесь от ответов на некачественные вопросы, которые могут быть закрыты. После того, как вы ответили, это ограничивает то, что можно сделать для улучшения вопроса, повышая вероятность того, что ваши усилия будут потрачены впустую. Лучше подождать, пока вопрос будет правильно готов, прежде чем отвечать!
— Тоби Спейт
Теперь это имеет смысл. Спасибо!
— Феликс Мбикогбиа