Created
February 7, 2013 15:46
-
-
Save jackfranklin/4731766 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*** | |
* | |
* I want to execute someFunc() if the variable x is greater than 5 | |
* how would you rewrite the below to NOT use a conditional? (EG no "if" used) | |
* | |
* **/ | |
if(x > 5) { | |
someFunc(): | |
} |
I would have used jamie's approach (no need to rewrite it :) )
I'm slow to seeing the tweet, but I'll comment anyway. x > 5 && someFunc()
Man, I could come up with these all day, much fun 😄
This one's pretty useless, though an interesting exercise in getting it to actually work. Relies on you not caring about the return value of someFunc.
var self = function() {
return self;
}
var first = function(fn) {
return function() {
fn();
return self;
}
}
var wrap = function(fn) {
return function() { return fn }
}
var wrapped = wrap(wrap(wrap(wrap(first(someFunc)))));
var limit = Math.max(x,1);
while(limit--) { wrapped = wrapped(); }
var foo = setTimeout(someFunc, 5); setTimeout(function() { clearTimeout(foo) }, x);
HEY JACK WHAT ABOUT x > 5 && someFunc();
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How about without using any (explicit) boolean operators:
This ain't as complicated as it looks (not that you would ever do it). Breaking it down:
We need a function that if we call it, it won't raise an exception, nor really do anything. Operations which don't do anything are "identity" operations, so this is the identity function:
Let's put our desired function (someFunc) in an array with 4 identity functions, we'll see why in a second:
We can slice (get a part of) an array with
.slice(index,n)
whereindex
is the start position to slice from, andn
is the number of items to take.If
index
is negative, it will slice from the end, so:Interestingly, if the negative number is bigger than our array, it just starts at the start:
This means that for our array:
[someFunc, id, id, id, id]
if we.slice(n,1)
where n is anything<= -5
we will get[someFunc]
.If we have
[someFunc]
we can then callsomeFunc
by getting the first element of our one element array and calling it:[someFunc][0]()
.Putting it all together we now have:
Which will work great unless x is less than one. In which case it will start slicing from the beginning again, so we can ignore
x < 1
usingMath.max(x,1)
which will returnx
ifx > 1
otherwise it will return1
which won't call our function anyway.Phew! So putting that together we get:
Which if you substitute in all the vars you get:
😱 😄