Module iif

Authors: Serge Aleynikov (saleyn(at)gmail(dot)com).

Description

Conditional expression functions

This module exports a parse transform and implements several condition-checking functions.

When using this as a parse transform, include the {parse_transform,iif} compiler option. In this case for given expressions A,B,C, and D the following code transforms will be done:
   iif(A, B, C)   -> begin V = A, case V of true -> B; _ -> C end end
   iif(A,B,C,D)   -> case A of B -> C; _ -> D end
   nvl(A,B)       -> case A of false -> B; undefined -> B; [] -> B; _ -> A end
   nvl(A,B,C)     -> case A of false -> B; undefined -> B; [] -> B; _ -> C end
For debugging the AST of the resulting transform, use iif_debug command-line option:
   erlc -Diif_debug=1 ...    % Prints AST before the transform
   erlc -Diif_debug=2 ...    % Prints AST after the transform
   erlc -Diif_debug[=3] ...  % Prints AST before/after the transform
Alternative to using this module as a parse_transform, it implements several iif/3,4 exported functions that can be used without the transform.

Function Index

format_ne/3Format if first argument is not empty.
ife/2Return Value if first argument is one of: [], false, undefined.
ife/3Return Empty if first argument is one of: [], false, undefined.
ifne/2Return Value if first argument is not one of: [], false, undefined.
ifne/3Return NotEmpty if first argument is not one of: [], false, undefined.
iif/3Return True if first argument is true or return False if the first argument is one of: [], false, undefined.
iif/4Return True if first two arguments match.
nvl/2Alias for ife/2
parse_transform/2Parse transform to be used by providing {parse_transform, iif} option.

Function Details

format_ne/3

format_ne(True, Fmt, Args) -> any()

Format if first argument is not empty

ife/2

ife(Test, Value) -> any()

Return Value if first argument is one of: [], false, undefined. Otherwise return the value of the first argument.

ife/3

ife(Value, Empty, NotEmpty) -> any()

Return Empty if first argument is one of: [], false, undefined. Otherwise, if NotEmpty is fun(), evaluate it, or if it's fun(Arg) evaluate it with Value argument.

ifne/2

ifne(Test, Value) -> any()

Return Value if first argument is not one of: [], false, undefined. Otherwise, if Value is fun(), evaluate it, or if it's fun(Arg) evaluate it with Test argument. If not empty

ifne/3

ifne(Value, NotEmpty, Empty) -> any()

Return NotEmpty if first argument is not one of: [], false, undefined. Otherwise, if NotEmpty is fun(), evaluate it, or if it's fun(Arg) evaluate it with Value argument.

iif/3

iif(X1, True, False) -> any()

Return True if first argument is true or return False if the first argument is one of: [], false, undefined.

iif/4

iif(Value, Other, True, False) -> any()

Return True if first two arguments match

nvl/2

nvl(Value, IfNull) -> any()

Alias for ife/2

parse_transform/2

parse_transform(AST, Opts) -> any()

Parse transform to be used by providing {parse_transform, iif} option. Opts are compiler options passed from command line. E.g.:

  erlc -Diif_ast  ...  ->  Opts = [{d,iif_ast}|_]
  erlc -Diif_orig ...  ->  Opts = [{d,iif_orig}|_]
  erlc -Diif_src  ...  ->  Opts = [{d,iif_src}|_]