যাঁরা কার্যকরী শৈলীতে আগ্রহী, বা মেটা প্রোগ্রামিংয়ে (যেমন টাইপ চেকিং) ব্যবহার করতে আরও অভিব্যক্তিক পদ্ধতির সন্ধান করেন তাদের পক্ষে রামদা গ্রন্থাগারটি এ জাতীয় কাজটি সম্পাদন করা দেখতে আকর্ষণীয় হতে পারে ।
পরবর্তী কোডে কেবল বিশুদ্ধ এবং পয়েন্টফ্রি ফাংশন রয়েছে:
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 ));
তবে, দ্রষ্টব্য যে উচ্চতর-ক্রিয়াকলাপের বিস্তৃত ব্যবহারের কারণে এই সমাধানটি অন্যান্য উপলব্ধ বিকল্পগুলির তুলনায় কম কার্য সম্পাদন করতে পারে।