У меня есть интересная мысль.Часто вы хотите использовать свойства языка.Если у вас есть логическое выражение в нормальной форме, где основным оператором в польском дереве логических операций является AND (&&), а первый операнд равен false, язык не будет вычислять значение других операндов.Точно так же, если основным оператором в польском дереве логических операций является ИЛИ (||), а первый оператор - «истина», остальные операнды вычисляться не будут.Давайте рассмотрим несколько примеров
//...
// Position is a class
private bool checkMate(ref int numberOfPlies, ref ChessPosition position, int maxNumberOfPlies, List<Move> moves)
{
if (numberOfPlies > maxNumberOfPlies)
return false;
position.makeMove(moves[numberOfPlies]);
if (!(position.getSuccessOfLastMove())))
return false;
numberOfPlies++;
return ((
((isCheckMate()) ||
((checkMate(ref numberOfPlies, ref position, maxNumberOfPlies, moves)))
));
}
//...
Приведенный выше метод проверяет, приводит ли вариация к мату с заданной шахматной позиции, и мат дается в определенном количестве слоев.Position - это класс, его метод makeMove () выполняет перемещение в заданную позицию, его метод getSuccessOfLastMove () имеет значение true, если последний шаг был действительным, и false, если последний шаг был недействительным.Move это другой класс.Ply - это половина хода в шахматах (Move = ходы белых и черных ходов, Ply = ход белых или черных).isCheckMate проверяет, является ли данная позиция матом.
Мы не хотим вызывать checkMate, если isCheckMate () имеет значение true, поэтому нам здесь не нужна другая операция, кроме обычной ||.
Однако здесь мы хотим оценить все операнды:
// ... bool isThisFlowerYellowOrYellowish (Flower flower) {return (((flower.flowerColor == flower.yellow) ИЛИ (flower.FlowerColor == flower.yellowish)) AND (flower.setColorToYellowIfTheColorIsYellowish ()));} //...
Приведенный выше код не является допустимым кодом C #, но давайте посмотрим, почему нам нужно ИЛИ в C #.В приведенном выше примере мы хотим запустить setColorToYellowIfTheCollorIsYellowish (), даже если мы знаем результат полной оценки до оценки функции, но код не работает, потому что у нас нет операции ИЛИ, которая вычисляет все операнды, даже если мымогу знать результат.Если бы это было возможно, мы бы не могли написать функцию альтернативным способом.
//...
bool isThisFlowerYellowOrYellowish(Flower flower)
{
if (flower.FlowerColor == flower.yellowish)
return flower.setColorToYellowIfTheColorIsYellowish();
return (flower.flowerColor == flower.yellow);
}
// ...
Это отвратительно по сравнению со вторым примером, на мой взгляд,Если бы у нас были операторы «ИЛИ» и «И», которые не оптимизированы и оценивают все операнды, независимо от того, что, то язык был бы более богатым с помощью функции, но мы могли бы выжить без этих операторов, потому что у нас есть альтернативные решениякогда это необходимо, и это очень редкий случай.
По моему мнению, нам не нужен оператор "НЕ", потому что это унарный оператор, и он будет похож на!оператор.
По моему мнению, мы не должны изменять!, ||, &&, & и |операторы, потому что все программисты привыкли к ним.Если они будут изменены в C #, язык не будет иметь обратной совместимости.
EDIT:
Если подумать, язык будет иметь обратную совместимость, если значение старых операторов будет неизменным,независимо от того, будут ли введены ключевые слова или нет, и будет введен.