Это звучит как простой запрос (и, очевидно, он достаточно прост, чтобы Python реализовал его), но это не обязательно так просто в использовании. Это фактически открывает возможность для множества ошибок, которые будут вызваны.
В частности, в любое время, когда вы используете функции (или свойства в случае C #, Getters for Java)
So
public int GetX()
{
return 4;
}
(2 < GetX() < 5);
(2 < GetX() > 5);
(5 < GetX() < 2);
Кажется, это было бы действительно просто. Но проблемы возникают, если GetX () имеет побочные эффекты.
private int val = 10;
public int GetCountdown()
{
return val--;
}
(2 < GetCountdown() < 5);
(2 < GetCountdown() > 5);
(5 < GetCountdown() < 2);
В этой ситуации "GetCountdown ()" уменьшается в два раза или только один раз?
Будет ли «цепочка-если-утверждение» когда-либо ярлык?
Рассмотрим последние определения, которые приблизительно оценивают (на английском языке) в «На 5 меньше некоторого значения, которое меньше 2), что должно быть невозможным, но в зависимости от реализации и побочных эффектов, возможно, что некоторая функция ( Random.NextInt ()) может пройти оба этих теста.
Таким образом, по этой причине требуется, чтобы каждый из элементов оценивался только один раз, сохраняя его в локальной переменной для следующего сравнения. Но затем вы попадаете в проблемы с ярлыками.
public int GetOne()
{
return 1;
}
public int GetVar()
{
return -1;
}
(GetOne() < GetVar() < GetDBVal() < GetUserInput())
Как правило, вам нужно сначала проверить константы и переменные, прежде чем выполнять попадание в базу данных. Но если мы сказали (как мы говорили ранее), что все значения должны быть сохранены в локальные переменные заблаговременно, это означает, что это может вызвать обращение к базе данных и запросить информацию у пользователя, даже если «GetVar ()» - 1 и первое сравнение не удается)
Как я говорил ранее, ясно, что Python допускает этот синтаксис, так что это вполне возможно. Но, независимо от технических последствий, которые я изложил (все из которых легко спроектировать), это означает, что ваш код менее понятен , потому что следующий человек, который его читает, не знает, действительно ли вы рассмотрел все это. Принимая во внимание, что if(x > 2 && x < 5) { }
мне кажется ясным, я знаю, что он делает, и я знаю, что намерен кодер.