В дальнейшем, анализируя сегменты кода, мы также должны учитывать это неопределенное значение.
Для логических выражений это означает, что у нас есть три возможных случая – true, false и undefined.
И это отличается от традиционной математики, где мы обычно имеем только истину и ложь.
Теперь, давайте немного вспомним о возможностях, которые мы видели.
Здесь, слева, у нас есть условное утверждение, где, в зависимости от значения булевой переменной b, мы присваиваем m или n переменной x.
С другой стороны, у нас есть тройной оператор, который позволяет писать логические выражения.
Оба сегмента кода эквивалентны.
Теперь рассмотрим этот пример.
Представьте, что у нас есть булево значение b и что выражение сравнивает b с true.
Это может быть явно упрощено до b, так как если b истинно, b == true, вычисляется как true.
И если b является ложным, b == true, вычисляется как false.
И если b не определено, выражение b == true также не определено.
Так почему бы не написать более простую версию, просто b как условие?
Аналогично вы можете поступить, если мы имеем выражение b == false.
Вы можете выбрать более простую версию, не b.
И еще вы можете написать b как условие, и поменять операторы S1 и S2.
Здесь у нас есть другое выражение.
Давайте проанализируем его.
Здесь, если b не определено, результат не определен.
Если b истинно, результат будет истинным.
И если b является ложным, результат будет ложным.
Мы рассмотрели все возможные значения b и всего выражения
И мы видим, что они имеют одинаковые значения, что они эквивалентны.
Поэтому вместо всего этого выражения мы можем написать только b.
Та же самая ситуация будет с выражением не b.
Теперь, давайте посмотрим выражение b? c: false.
Если b не определено, все выражение не определено.
Если b истинно, результат равен c.
Однако, если b является ложным, результат будет ложным.
Результат будет истина, только если b и с истина, во всех других случаях результат будет ложным.
Это эквивалентно логическому оператору и.
И наоборот, выражение b? true: c эквивалентно логическому оператору или.
Циклы while и for
Давайте представим, что мы хотим разделить целое число m на другое целое число n.
И мы хотим получить результат целочисленного деления, то есть самое большое количество раз, которое n вписывается в m.
Например, целочисленное деление 7 на 2, равно 3, потому что 2 по 3 раза, это 6.
Остаток равен 1.
И представьте себе, что у нас нет встроенной операции, которая выполняет эту операцию для нас.
Поэтому нам нужно сделать повторяемые вычитания.
И если нам удастся вычесть 2 из 7 три раза, это означает, что целочисленное деление равно 3.
Целочисленное деление y и целочисленный остаток x соответствуют формуле, m равно y умножить на n плюс x.
Предположим, что нам даны целые числа m и n.
А в x сохраняется оставшееся значение после вычитаний.
Итак, давайте начнем с x равно m.
y содержит результат целочисленного деления.
Мы инициализируем y 0 и приращиваем y на 1 каждый раз, когда мы вычитаем n из x.
И мы продолжаем вычитать n из x, пока x не меньше n.
Если x больше или равно n, мы вычитаем n из x и увеличим y на 1.
Таким образом, эта программа делает то, что мы хотим, но тут есть проблема.
Мы не знаем, сколько операторов if мы должны добавить.