কল্পনা করুন যে আমরা xযদি xঅকার্যকর হয় এবং কেবল তখনই একাধিক ফাংশন প্রয়োগ করতে চাই :
if (x !== null) x = a(x);
if (x !== null) x = b(x);
if (x !== null) x = c(x);
এখন বলা যাক যে আমাদেরও এগুলি করতে হবে y:
if (y !== null) y = a(y);
if (y !== null) y = b(y);
if (y !== null) y = c(y);
এবং একই z:
if (z !== null) z = a(z);
if (z !== null) z = b(z);
if (z !== null) z = c(z);
আপনি যথাযথ বিমূর্ততা ছাড়াই দেখতে পাচ্ছেন, আমরা বারবার নকল কোডটি শেষ করব। এরকম বিমূর্ততা ইতিমধ্যে বিদ্যমান: সম্ভবত মোনাদ।
হয়তো একসংখ্যা উভয় একটি মান এবং গণনীয় প্রসঙ্গ ঝুলিতে:
- মোনাড মানটি সুরক্ষিত রাখে এবং এতে ফাংশন প্রয়োগ করে।
- গণনামূলক প্রসঙ্গটি কোনও ফাংশন প্রয়োগের আগে একটি নাল চেক।
একটি নিষ্পাপ বাস্তবায়ন এইরকম দেখাবে:
Implementation এই বাস্তবায়ন কেবল উদাহরণের জন্য! এটি কীভাবে করা উচিত তা নয় এবং এটি বহু স্তরেও ভুল। তবে এটির আমি আপনাকে কী বলছি তার একটি ভাল ধারণা দেওয়া উচিত।
আপনি দেখতে পাচ্ছেন কিছুই ভাঙ্গতে পারে না:
- আমরা আমাদের মূল্যতে বিভিন্ন ক্রিয়াকলাপ প্রয়োগ করি
- যদি কোনও মুহুর্তে, মানটি নাল হয়ে যায় (বা অপরিবর্তিত) আমরা কেবল কোনও ফাংশন প্রয়োগ করি না।
const abc = obj =>
Maybe
.of(obj)
.map(o => o.a)
.map(o => o.b)
.map(o => o.c)
.value;
const values = [
{},
{a: {}},
{a: {b: {}}},
{a: {b: {c: 42}}}
];
console.log(
values.map(abc)
);
<script>
function Maybe(x) {
this.value = x; //-> container for our value
}
Maybe.of = x => new Maybe(x);
Maybe.prototype.map = function (fn) {
if (this.value == null) { //-> computational context
return this;
}
return Maybe.of(fn(this.value));
};
</script>
পরিশিষ্ট 1
আমি মোনাডগুলি কী তা ব্যাখ্যা করতে পারি না কারণ এটি এই পোস্টের উদ্দেশ্য নয় এবং সেখানে আমার চেয়ে আরও ভাল লোক রয়েছে। তবে এরিক এলিয়ট যেমন হিস্ট ব্লগ পোস্টে বলেছেন জাভাস্ক্রিপ্ট মনডস মেড সিম্পল :
আপনার দক্ষতা স্তর বা বিভাগের তত্ত্বের বোঝা নির্বিশেষে, স্নাতকের সাহায্যে আপনার কোডটি কাজ করা সহজ করে। সন্ন্যাসীর সুবিধা গ্রহণে ব্যর্থতা আপনার কোডটি কাজ করা আরও শক্ত করে তুলতে পারে (যেমন, কলব্যাক হেল, নেস্টেড শর্তাধীন শাখা, আরও ভার্বোসটি)।
পরিশিষ্ট 2
আমি কীভাবে আপনার সমস্যাটি সমাধান করব তা এখানে থেকে সম্ভবত মোনাডmonetjs
const prop = key => obj => Maybe.fromNull(obj[key]);
const abc = obj =>
Maybe
.fromNull(obj)
.flatMap(prop('a'))
.flatMap(prop('b'))
.flatMap(prop('c'))
.orSome('🌯')
const values = [
{},
{a: {}},
{a: {b: {}}},
{a: {b: {c: 42}}}
];
console.log(
values.map(abc)
);
<script src="https://www.unpkg.com/monet@0.9.0/dist/monet.js"></script>
<script>const {Maybe} = Monet;</script>
try..catchবিবৃতিটি ব্যবহার করে দেখুন। এটি বলেছিল, বন্যভাবে ভিন্ন ভিন্ন উপাদান রয়েছে এমন একটি অ্যারে আমার কাছে ডিজাইনের সমস্যার মতো দেখায়।