if-exp

Conditional (if) expressions for JavaScript

  • if-exp

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
if-exp
3212.0.28 years ago9 years agoMinified + gzip package size for if-exp in KB

Readme

if-exp
Build Status Coverage Status Deps NPM version Downloads extra Twitter Follow
Conditional (if) expressions for JavaScript
NPM
npm install if-exp
Usage
const iff = require('if-exp');

const result = iff(condition)
            .then('result 1')
        .elseIff(secondCondition)
            .then('result 2')
        .elseIff(thirdCondition)
            .then('result 3')
        .otherwise('result 4');
Motivations
Some languages implement conditionals (and other well known statements) as expressions, so we can write:
val res = if(condition){
    'result 1'
} else if(secondCondition) {
    'result 2'
} else if(thirdCondition) {
    'result 3'
} else {
    'result 4'
}

While in JavaScript, conditional expressions can be achieve using ternary operators. Multiple conditions are sometimes hard to read using ternary:
var res = condition ?  'result 1' :
    (secondCondition ? 'result 2' :
        (thirdCondition ? 'result 3' : 'result 4'));

Here is how to write the same thing with iff:
const res = iff(condition)
            .then('result 1')
        .elseIff(secondCondition)
            .then('result 2')
        .elseIff(thirdCondition)
            .then('result 3')
        .otherwise('result 4');
How to do lazy-statements evaluation in JavaScript
const res = iff(condition1)
  .then(statement1())
elseIff(condition2)
  .then(statement2())
.otherwise(statement3());

The issue with the above code, is that statement1, statement2 and statement3 functions will be executed no matter the value of condition and condition2. To only execute one or the other we can use functions:
const res = iff(condition1)
  .then(statement)
elseIff(condition2)
  .then(statement)
.otherwise(statement)
();

Now, if-exp will yield a function depending on the conditions and we directly execute it resulting in a lazy statement evaluation.
How if-exp supports lazy condition evaluation
const res = iff(conditionalFn1())
  .then(1)
elseIff(conditionalFn2())
  .then(2)
.otherwise(3);

The issue with the above code is that conditionalFn1 and conditionalFn2 will be both executed. Since if-exp v2+, you can specify a predicate function as a condition and it will be evaluated or not depending on the previous conditions:
const res = iff(conditionalFn1)
  .then(1)
elseIff(conditionalFn2)
  .then(2)
.otherwise(3);
Donate
I maintain this project in my free time, if it helped you please support my work via paypal or Bitcoins, thanks a lot!