Ufcs
DLang's Universal Function Call Syntax port to JavaScript
Install / Use
/learn @f/UfcsREADME
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
node-connect
339.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.8kCommit, push, and open a PR
