1.0.3 • Published 1 year ago

if-match v1.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago
import { match } from 'if-match';

// as is
let gameName = '';
if (game.genre === 'rpg') {
  if (game.company === 'enix') {
    gameName = 'dq1';
  } else if (game.company === 'nintendo') {
    gameName = 'pokemon';
  }
  gameName = 'ff1';
} else if (game.genre === 'simulation') {
  if (game.company === 'maxis') {
    gameName = 'simcity';
  }
}

// as is
const gameName2 = (() => {
  if (game.genre === 'rpg') {
    if (game.company === 'enix') {
      return 'dq1';
    } else if (game.company === 'nintendo') {
      return 'pokemon';
    }
    return 'ff1';
  } else if (game.genre === 'simulation') {
    if (game.company === 'maxis') {
      return 'simcity';
    }
    return '';
  }
  return '';
})();

// to be
const gameName3 = match(game)
  .when({ genre: 'rpg', company: 'enix' }, 'dq1')
  .when({ genre: 'rpg', company: 'nintendo' }, 'pokemon')
  .when({ genre: 'rpg' }, 'ff1')
  .when({ genre: 'simulation', company: 'maxis' }, 'simcity')
  .otherwise('simcity');

About

Complicated conditions have been combined into one compact expression. Your code becomes shorter and more readable. Exhaustiveness checking ensures you haven’t forgotten any possible case. You can only use const without using let.

Features

  • It works at high speed without complicated and unnecessary processing.
  • Extend functionality using functions

Installation

Via npm

npm install if-match

Via deno

import { match } from 'https://deno.land/x/if_match/mod.ts';

Documentation

Getting Started

API Reference

match

match(value);

Create a Match object on which you can later call .when, .otherwise, .exhaustive and .run.

Example

match(3).run();
match([1, 2, 3]).run();
match({ hello: 'world' }).run();

Arguments

  • value
    • Required
    • Input values to be tested.

.when

match(...)
  .when(predicate, handler)

Example

// return 4
match(3).when(3, 4).run();
match(3).when(3, (v) => v + 1).run();

// return 3
match([1, 2, 3]).when([1, 2, 3], 3).run();
match([1, 2, 3]).when([1, 2, 3], (v) => v.length).run();

// return true
match({ hello: 'world' }).when({ hello: 'world' }, true).run();
match({ hello: 'world' }).when((v) => (v.hello === 'world'), true).run();

Arguments

  • predicate: T | (value: T) => boolean
    • Required
    • Comparison Value or Comparison Function.
  • handler: any | (value: T) => any
    • Required
    • A function or return value that is called when a predicate condition is met.

.otherwise

match(...)
  .when(...)
  .otherwise(defaultHandler)

Equivalent to else. If no .when() is matched, .otherwise() is called.

Example

match(1).otherwise('Hello World'); // return 'Hello World'
match(1).otherwise(() => true); // return true
match(1).otherwise((v) => v + 1); // return 2

Arguments

  • defaultHandler: any | (value: T) => any
    • Required
    • Called if no '.when()' matches.
    • Think of it as the default: case of switch statements.

.exhaustive

match(...)
  .when(...)
  .exhaustive()

Used when there is no else or otherwise. Returns null if it does not match any '.when()'.

Example

match(1).exhaustive(); // return null
match(1).when(1, true).exhaustive(); // return true

Arguments

  • no arguments

.run

match(...)
  .when(...)
  .run()

Equivalent to .exhaustive.

Example

match(1).run(); // return null
match(1).when(1, true).run(); // return true

Arguments

  • no arguments