ක්රියාකාරී ශෛලිය ගැන උනන්දුවක් දක්වන හෝ මෙටා ක්රමලේඛනය සඳහා භාවිතා කිරීමට වඩාත් ප්රකාශන ප්රවේශයක් සොයන අයට (වර්ගය පරීක්ෂා කිරීම වැනි), රාම්ඩා දැකීම සිත්ගන්නාසුළු විය හැකිය එවැනි කාර්යයක් ඉටු පුස්තකාලය .
ඊළඟ කේතයේ අඩංගු වන්නේ පිරිසිදු හා ලක්ෂ්ය රහිත කාර්යයන් පමණි:
const R = require('ramda');
const isPrototypeEquals = R.pipe(Object.getPrototypeOf, R.equals);
const equalsSyncFunction = isPrototypeEquals(() => {});
const isSyncFunction = R.pipe(Object.getPrototypeOf, equalsSyncFunction);
ES2017 වන විට, async
කාර්යයන් තිබේ, එබැවින් අපට ඒවාට එරෙහිවද පරීක්ෂා කළ හැකිය:
const equalsAsyncFunction = isPrototypeEquals(async () => {});
const isAsyncFunction = R.pipe(Object.getPrototypeOf, equalsAsyncFunction);
ඉන්පසු ඒවා එකට ඒකාබද්ධ කරන්න:
const isFunction = R.either(isSyncFunction, isAsyncFunction);
ඇත්ත වශයෙන්ම, ක්රියාකාරීත්වය null
සහ undefined
අගයන්ගෙන් ආරක්ෂා විය යුතුය , එබැවින් එය "ආරක්ෂිත" බවට පත් කිරීම:
const safeIsFunction = R.unless(R.isNil, isFunction);
සාරාංශගත කිරීම සඳහා සම්පූර්ණ ස්නිපටය:
const R = require('ramda');
const isPrototypeEquals = R.pipe(Object.getPrototypeOf, R.equals);
const equalsSyncFunction = isPrototypeEquals(() => {});
const equalsAsyncFunction = isPrototypeEquals(async () => {});
const isSyncFunction = R.pipe(Object.getPrototypeOf, equalsSyncFunction);
const isAsyncFunction = R.pipe(Object.getPrototypeOf, equalsAsyncFunction);
const isFunction = R.either(isSyncFunction, isAsyncFunction);
const safeIsFunction = R.unless(R.isNil, isFunction);
// ---
console.log(safeIsFunction( function () {} ));
console.log(safeIsFunction( () => {} ));
console.log(safeIsFunction( (async () => {}) ));
console.log(safeIsFunction( new class {} ));
console.log(safeIsFunction( {} ));
console.log(safeIsFunction( [] ));
console.log(safeIsFunction( 'a' ));
console.log(safeIsFunction( 1 ));
console.log(safeIsFunction( null ));
console.log(safeIsFunction( undefined ));
කෙසේ වෙතත්, ඉහළ ඇණවුම් කාර්යයන් පුළුල් ලෙස භාවිතා කිරීම හේතුවෙන් මෙම විසඳුම වෙනත් පවතින විකල්පයන්ට වඩා අඩු කාර්ය සාධනයක් පෙන්විය හැකි බව සලකන්න.