Да, во он ? :, давайте разберемся почему он именно такой, а не другой. Единственное питонщикам не будет столь интересно это читать ибо у нас них он выглядит так:
print True if 1 > 2 else False
Четко и понятно «в лоб», с появлением его в python читал в блогах много рассуждений почему он такой, где же стандартный ? : подобный.
Давайте разберемся…
Вообщем-то суть всем ясна, сокращает рутинные условия на 1 действие, хотя писать так:
$var = $a > $n ? $b < $a ? 1 : 0 : null;
я бы не стал, ибо не читабельно сразу…
Почему я об этом рассказываю?
Однажды, на лабе по теории алгоритмов я впервые столкнулся с машинами Тьюринга и Поста, что придя домой, я начал страстно поглощать инфу по этой теме (ну так меня задело не знаю почему), и хочу поделится этим со всеми.
Сама запись? : в компьютерном мире появилась в начале 20-ого века, предложил её Эмиль Леон Пост (машина Поста, алгебра Поста это все его труды) как запись условной операции в своей машине.
Машина Поста
Абстрактная машина, которая умеет устанавливать и удалять значения ячеек(переменных), передвигаться к нужной ячейке, самое обычное goto, тут же на основе передвижения можно организовать цикл (подобие while), и условная операция. Есть еще машина Тьюринга, аналогия Поста, но вариант Поста настолько прост и гениален что я хочу рассказать именно про него.
Для тех кто не понял, это не какая не программа, не реальная машина размером со шкаф, как думают многие, это абстракция — и это здорово.
Представьте какие-то ящики построенные в ряд (лента), при чем у ящиков есть свой адрес(массив), например мы смотрим на ящик с индексом 0. Так вот, по обе стороны этих ящиков бесконечно. Мы продолжаем смотреть на этот ящик(мы каретка) и на подобии seek мы можем перемещаться на одну итерацию влево или вправо(а там этих ящиков бесконечность).
В ящике может быть 0 или 1. По умолчанию там везде 0, но мы заранее можем поставить 1 в те ящики которые нам нужны. Если фантазии хватило это все представить в голове, идем дальше…
Программирование
Да, это вполне обычное программирование, да же без компьютера, синтаксис простой:
i c n
i — номер команды
c — команда
n — следующая команда (можно указывать любую по счету)
Например:
Катерку ставим на позицию 1 в ленте, все секции стоят в «0». В секцию 10 сносим «1». Пишем программу:
1. V 2 // ставим метку, и переходим ко второй команде
2 . → 3 // сдвигаемся вправо, и переходим к команде 3
3. ? 1:4 // если метка пуста переходим к 1, иначе 4
4. ! // завершение программы
Грубо говоря было
0000000001
Мы изначально стояли на первом нуле… теперь посмотрите еще раз код, поняли что произошло?
В конце получим 1111111111
Это самый простой пример, «Hello, world» на машине поста!
А вот и он наш тернарный оператор в действии, и та самая запись которая сохранилась до сих пор.
Вот список команд
Y — поставить метку
X — удалить метку
стрелочки перехода естественно
? x: y — если ячейка пуста, перейти к х, иначе y.
Попробуйте написать несложные программы… например ставить метки вот так 10101010, по умолчанию стоим на 0.
Автор: johniek_comp