Это на самом деле игра в кодирование, в которую я люблю играть с языками программирования. Он называется «если бы у нас не было if», который берет свое начало в: http://wiki.tcl.tk/4821
По сути, если мы запрещаем использование условных конструкций в языке: нет, если, нет, пока, нет, для, если нет, без переключателя и т. Д., Мы можем воссоздать нашу собственную функцию IF. Ответ зависит от языка и от того, какие языковые особенности мы можем использовать (помните, что использование обычных условных конструкций обманывает без троичных операторов!)
Например, в tcl имя функции - это просто строка, и любая строка (включая пустую строку) разрешена для чего угодно (имена функций, имена переменных и т. Д.). Итак, используя это, мы можем сделать:
proc 0 {true false} {uplevel 1 $false; # execute false code block, ignore true}
proc 1 {true false} {uplevel 1 $true; # execute true code block, ignore flase}
proc _IF {boolean true false} {
$boolean $true $false
}
#usage:
_IF [expr {1<2}] {
puts "this is true"
} {
#else:
puts "this is false"
}
или в javascript мы можем злоупотреблять свободным набором текста и тем фактом, что почти все может быть преобразовано в строку, и объединить это с его функциональной природой:
function fail (discard,execute) {execute()}
function pass (execute,discard) {execute()}
var truth_table = {
'false' : fail,
'true' : pass
}
function _IF (expr) {
return truth_table[!!expr];
}
//usage:
_IF(3==2)(
function(){alert('this is true')},
//else
function(){alert('this is false')}
);
Не все языки могут делать подобные вещи. Но языки, которые мне нравятся, как правило, способны.