conditional-expression
Providing 'match' function as a JavaScript functional conditional expression to replace conditional statements 'if' and 'switch' as an alternative to ternary operator expression.
GitHub repository: https://github.com/MartinGentleman/conditional-expression
Medium article explaining motivation and use for the package: How to replace switch and ternaries in functional JavaScript.
Install
npm install conditional-expression --save
Without ES6:
var match = default; ;
With ES6:
; ;
Usage
First you call match function on an expression that you want to match:
;
Next you choose how you want to match the expression by choosing appropriate matching function. For example:
;
You follow up by calling 'then' function to tell it what to do in case of a positive match. You can pass a simple value as well as a function that will be automatically evaluated:
; // or ;
You have the option of chaining:
;
And you finish everything by calling 'else' which is mandatory:
;// returns 'It is not HTTPS and that makes me sad :('
Once a match is found, no other matching is performed:
;// returns 'I am true and I am the result'
Matching functions
on({function})
Evaluates as true if passed function returns boolean true, every other result of a function evaluates as false. Given function is also passed the expression over which we are matching as a parameter.
;// returns true
Internally this function is used to implement or other matching functions.
with({RegEx})
Evaluates as true based on passed regular expression.
;// returns true
equals({*})
Evaluates as true based on strict equality ===.
;// returns true
includes({string})
Evaluates as true based on whether a substring is included. Always evaluates as false if not used to match on a string.
;// returns true
typeOf({string})
Evaluates as true based a type.
;// returns true
greaterThan({}), lessThan({}), atLeast({}), atMost({})
Evaluates as true based on sizes.
;// returns true ;// returns true ;// returns true ;// returns true ;// returns true ;// returns true
thenMatch() nested matching
You can use nested matching to create subbranches for evaluation. Only 1 level deep nest is directly supported using thenMatch function.
const param = 'this is string'; ; ;// returns true
Notice that thenMatch uses its own parameter and that else in the nested branch is still required.
To support deeper branching, you can pass match evaluation as a parameter to then function.
const param = 'this is string'; ; ;// returns true
conditional-expression changelog
1.1.2
- Fixed README
1.1.1
- Added greaterThan({}), lessThan({}), atLeast({}), atMost({}) for comparing sizes
- Fixed Node.js support
- 100 % test coverage provided.
1.1.0
- Matching now supports one level of nesting using "thenMatch" function.
- Added more assertion to test the package and new functionality.
- Changed the internal structure to promote more internal reusability of the code to add more matching functions in the future if needed.
- 100 % test coverage provided.
1.0.1
- "include" function to always returns false if matching over anything else than a string.
- 100 % test coverage provided.
1.0.0
- Initial version of conditional-expression providing matching without nesting using.
- 100 % test coverage provided.
Social
Find me on Twitter: https://twitter.com/PerAsperaEU
Find me on Medium: https://medium.com/@martinnovk_22870