# \$iiff()

### By Degausser on Nov 13, 2016

It's probably been done, but here's a varient of the \$iif identifier which helps keep everything cleaner and easier

\$iiff(1 > 2 || 1 > 3, \$true, 2 > 5 && 2 > 1, \$true, \$abs(-5) > 6, \$true) <-- returns \$false
\$iiff(1 == 1 && 2 > 3, \$false, 4 isnum, \$true) <-- returns \$true
\$iiff(1 < 0 || 1 > 3, \$true, \$abs(-6) > 7, \$true, findme) <-- returns findme
var %var = 5
\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2 || 1 < %var, %var, \$false) <-- returns 5

You can also utilise booleon comparison

\$iiff(7 isnum 6-8).bool <-- returns \$true
\$iiff(1 > 2, \$true, cat == cat).bool <-- returns \$true
\$iiff(1 > 2 && 1 < 3 && 1 < 4, \$true, 1 > 2 || word !isalpha, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2 || 1 < 5, 5, \$false).bool <-- returns 5

Operations with a one return value are more consistant

\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 < 2, thereturn).bool <-- returns thereturn
\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 < 2, thereturn) <-- returns thereturn
\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, thereturn).bool <-- returns \$false
\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, thereturn) <-- returns \$false

However, these lines return different things

\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 < 2).bool <-- returns \$true
\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 < 2) <-- returns 1 < 2
\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2).bool <-- returns \$false
\$iiff(1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2, \$true, 1 > 2) <-- returns 1 > 2

Limitations:

Does not support text containing multiple words
\$iiff(i walk the dog isalpha, \$true)
Does not support || and && operators in a return value when using .bool
Does not support encapsulation with brackets, such as
((1 == 1 && 1 < 2) && 5 > 7)
Does not support the mixed use of || and && in a single comparison, such as
(1 == 1 && 1 < 2 || 5 < 7)

``````iiff {
if (\$isid) {
if (\$prop == ev) { if (\$1 \$2) return \$true | return \$false }
var %i = 1 , %n = \$0
while (%i < %n) {
if (\$eilifbreak(\$eval(\$+(\$,%i),2),%a)) return \$eval(\$+(\$,\$calc(%i + 1)),2)
inc %i 2
}
return \$iif(\$prop == bool,\$eilifbreak(\$eval(\$+(\$,%i),2)).ev,\$iif(\$eval(\$+(\$,%i),2),\$ifmatch,\$false))
}
}
eilifbreak {
if (\$prop == ev) {
tokenize 32 \$1-
if (\$0 == 3 && (\$1 \$2 \$3)) return \$true
if (\$0 == 2 && (\$1 \$2)) return \$true
if (\$0 == 1 && (\$1)) return \$true
return \$false
}
var %c = \$1 , %x = 1 , %n = \$numtok(\$1-, 32), %q , %t, %t2, %u, %o, %y , %v = \$true , %% = \$str(|,2) , %& = \$str(&,2)
while (%x <= %n) {
%o = \$gettok(%c,%x,32) | %t = \$gettok(%c,\$calc(%x + 1),32) | %t2 = \$gettok(%c,\$calc(%x + 3),32) | %u = \$gettok(%c,\$calc(%x + 2),32)
%q = \$iif(\$istok(\$+(%%,.,%&),%t,46) || !%t, \$eval(%o), \$iif(\$istok(\$+(%%,.,%&),%u,46) || !%u, \$iiff(\$eval(%o), %t).ev, \$iif(\$eval(%o) %t \$eval(%u),\$true,\$false))))
%y = \$iif(%t == %% || %u == %%,%%, \$iif(%t == %& || %u == %&,%&, \$iif(%t2 == %%,%%, \$iif(%t2 == %&,%&,%y))))
if (%y == %%) && (%q) return \$true
elseif (%y == %&) && (%q != %v) return \$false
inc %x 4
if (\$istok(\$+(%%,.,%&),%t,46)) dec %x 2
elseif (\$istok(\$+(%%,.,%&),%u,46)) dec %x
%v = %q
}
return \$iif(%y == %%,\$false,\$iif(%y == %&, \$true, %v))
}
``````