SkillAgentSearch skills...

Ufcs

DLang's Universal Function Call Syntax port to JavaScript

Install / Use

/learn @f/Ufcs
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

UFCS.js

DLang's Uniform Function Call Syntax (UFCS) port to JavaScript

It's mutates the Object.prototype, be careful when you are using it.

Install

npm install ufcs

Overview

A free function can be called with a syntax that looks as if the function were a member function of its first parameter type.

Idea is simple, result is awesome.

// With UFCS, you can call this function ...
funcName ( firstParameter, [otherParameters...] )

// ... like this.
firstParameter.funcName ( [otherParameters...] )

Uniform Wrapper

Just wrap the function and ufcs will handle rest.

var uniform = require('ufcs');

uniform(add);
function add(x, y) {
  return x + y;
}

var result = add(2, 3); //=> 5
var result = (2).add(3); //=> 5

Chaining

Since it mutates Object.prototype you can use it with every type. So, you can chain the function.

var result = add(2, 3).add(4).add(5); //=> 2 + 3 + 4 + 5 = 14

Examples

uniform(add);
function add(x, y) { return x + y; }

uniform(remove);
function remove(x, y) { return x - y; }

uniform(multiply);
function multiply(x, y) { return x * y; }

uniform(divide);
function divide(x, y) { return x / y; }

(2).add(3).multiply(6).divide(2).remove(3).add(5).divide(5); //=> 3.4,  It's ((((2 + 3) * 6) / 2) - 3 + 5) / 5

Multiple Uniform

function add(x, y) { return x + y; }
function remove(x, y) { return x - y; }
function multiply(x, y) { return x * y; }
function divide(x, y) { return x / y; }

uniform(add, remove, multiply, divide);

(2).add(3).multiply(6).divide(2).remove(3).add(5).divide(5); //=> 3.4,  It's ((((2 + 3) * 6) / 2) - 3 + 5) / 5

Alternative syntax:

uniform(
  function add(x, y) { return x + y; },
  function remove(x, y) { return x - y; },
  function multiply(x, y) { return x * y; },
  function divide(x, y) { return x / y; }
);

Object Uniform

Normally, it's not allowed to uniform an anonymous function, but in this case, you can. Please do not use this in these functions.

var Maths = {
  add: function (x, y) { return x + y; },
  remove: function (x, y) { return x - y; },
  multiply: function (x, y) { return x * y; },
  divide: function (x, y) { return x / y; }
};
uniform(Maths); // Uniform all the methods.

add(1, 2).divide(3); //=> 1
(1).add(2).divide(3); //=> 1

License

MIT.

Related Skills

View on GitHub
GitHub Stars45
CategoryDevelopment
Updated4mo ago
Forks0

Languages

JavaScript

Security Score

87/100

Audited on Nov 26, 2025

No findings