Vivasoft-logo

জাভাস্ক্রিপ্টে পিওর ফাংশন (Pure Function) কি?

জাভাস্ক্রিপ্টে ফাংশন হল প্রথম শ্রেণীর নাগরিক। জাভাস্ক্রিপ্টে শুধু কোন ফাংশনই তৈরি করা যায় তাই নয়, ফাংশনটিকে Modify করতে পারা যায়, একটি ফাংশনকে অন্য একটি ফাংশনের প্যারামিটার হিসেবে পাঠানো যায় এমনকি ফাংশনকে অন্য কোন ফাংশন থেকে returnও করতে পারা যায়। শুধু তাই নয়, আমরা কোন ভেরিয়েবলের মধ্যে কোন ফাংশনকে Assign ও করতে পারি। মূল কথা হল, ফাংশন ব্যাতিত জাভাস্ক্রিপ্টে কাজের উপযোগী কোন কোড লিখা প্রায় অসম্ভব। আজকের আলোচনাতে আমরা জাভাস্ক্রিপ্টের পিউর ফাংশন (Pure Function) নিয়ে আলোচনা করব। তাহলে চলুন শুরু করা যাক।

 
জাভাস্ক্রিপ্টে সকল Pure ফাংশনই ফাংশন কিন্তু সকল ফাংশনই Pure ফাংশন নয়। তাহলে Pure ফাংশন আসলে কি? আসলে Pure ফাংশন হল একটি Deterministic ফাংশন যার মানে হল যদি ওই ফাংশনে একই ইনপুটের জন্য সর্বদা একই আউটপুট থাকবে। একটি Pure ফাংশনের অবশ্যই নিচের বৈশিষ্ট্যগুলো থাকতে হবে।

  1.  সর্বদা নিজের আর্গুমেন্টের উপর নির্ভর করবে।
  2.  ফাংশনটি নিজের Scope এর বাইরে কোন ভারিয়েবলের মান পরিবর্তন করবে না।
  3.  ফাংশনটি কোন side effects তৈরি করবে না।
নিচের কোডটি লক্ষ্য করুন।
let val1 = 6;
let val2 = 4;
function pure() {
   return val1 * val2;
}
pure();
উপরের ফাংশনটি একটি Impure ফাংশন। কারণ এই ফাংশনটি তার নিজের Scoper এর বাহিরে গিয়ে val1 এবং val2 কে ব্যবহার করছে। যদি কোন কারণে val1 বা val2 ভ্যালু পরিবর্তন হয় তবে ফাংশনটি কখনো একই ইনপুটের জন্য একই আউটপুট return করবে না। তাহলে এই ফাংশনটিকে কি করে পিওর করা যায়। একটু চিন্তা করে দেখুন তো ।

 

function pure() {
let val1 = 6;
let val2 = 4;
   return val1 * val2;
}
pure();
এখন কোডটি একটি পিওর ফাংশন।

 

চলুন আরও একটি উদাহরন দেখা যাক।
function pure(arg) {
   let val = 100;
   return val * arg;
}
pure(2);

উপরের কোডটি সম্পূর্ণ একটি পিওর ফাংশন। কারণ এইখানে ফাংশনটি তার আর্গুমেন্ট এবং ফাংশন Scoop এর মধ্যে ভারিয়েবল val এর উপর নির্ভরশীল।

নিচের কোডটি লক্ষ্য করুন;

 

const impureAssoc = (key, value, object) => {
   object[key] = value;
};
const person = {
   name:'Bobo',
};
const result = impureAssoc('shoeSize', 400, person);
console.log({
   person,
   result,
});

বলুন তো এখানে impureAssoc ফাংশনটি পিওর কিনা? একটু চিন্তা করুন।

 

ঠিক বলেছেন, এটি একটি Impure ফাংশন। কারন এই ফাংশনটির Side Effect রয়েছে। এখানে person object টিকে impureAssoc ফাংশনটি চিরতরে পরিবর্তন করে দিয়েছে। অর্থাৎ impureAssoc ফাংশনটির জন্য আমাদের ফাংশনের বাহিরে কোড পরিবর্তন হয়েছে। তাই এটি অবশই একটি Impure ফাংশন।
তাহলে এটিকে পিওর করব কি করে। একটু চেষ্টা করে দেখুন তারপর নিচের সমাধানটি দেখুন।

 

const pureAssoc = (key, value, object) => ({
   ...object,
   [key]:value,
});
const person = {
   name:'Bobo',
};
const result = pureAssoc('shoeSize', 400, person);
console.log({
   person,
   result,
});

এখন person object টি শুধুমাত্র ফাংশনটির ভিতর পরিবর্তন হবে যার কোন Effect ফাংশনটির বাহিরে পরবে না।

 

আশা করি এখন থেকে পিওর ফাংশন বুঝতে আর কোন সমস্যা হবে না।

স্প্রিং সিকিউরিটিঃ আপনার অ্যাপ্লিকেশনের সুরক্ষায়

স্প্রিং সিকিউরিটিঃ আপনার অ্যাপ্লিকেশনের সুরক্ষায় যেকোন ওয়েব অ্যাপ্লিকেশন এর ক্ষেত্রে সিকিউরিটি একটি অত্যন্ত গুরুত্বপুর্ণ ব্যাপার। আমরা জানি ইন্টারনেট প্রচুর দুষ্ট লোকজন দিয়ে ভর্তি  । অনেক অনেক...

স্ট্রিং এর আদ্যোপান্ত

কম্পিউটার প্রোগ্রামিং এ বহুল পরিচিত আর ব্যবহৃত একটা বিষয় হল স্ট্রিং। এক কথায় স্ট্রিং হচ্ছে কতগুলো ক্যারেক্টার এর সিকুয়েন্স বা অনুক্রম।সহজ ভাষায় যখন বেশ কিছু  ক্যারেক্টার একসাথে মিলেমিশে কিছু একটা...

লোকাল স্টোরেজ এবং সেশন স্টোরেজ

localStorageএবং sessionStorage হল ওয়েব স্টোরেজ অবজেক্ট যা ব্রাউজারে কী/মান জোড়া সংরক্ষণ করার অনুমতি দেয়। তাদের সম্পর্কে যা মজার তা হল যে ডেটা একটি পেইজ রিফ্রেশ (এর জন্য sessionStorage) এবং এমনকি...

Elasticsearch কি এবং কেন?

আমরা যারা সফটওয়্যার ইঞ্জিনিয়ার বা যারা টেকনোলোজি নিয়ে কাজ করি বা যে যাই নিয়ে আছি না কেন, সবাই আমরা একটা কথায় একমত হব যে, প্রতিটা

Read More

মাইক্রোসার্ভিসের সিকিউরিটি ও সিঙ্গেল সাইন-অন/সাইন-আউট(SSO): IdentityServer4(OAuth2,OpenID Connect), ASP.NET Identity

আজ আমরা দেখব IdentityServer4(OAuth2,OpenID), ASP.NET Identity -র মাধ্যমে কিভাবে মাইক্রোসার্ভিসের সিকিউরিটি ও সিঙ্গেল সাইন-অন/সাইন-আউট(SSO) সুবিধা ইমপ্লিমেন্ট করা যায়। প্রথমে আমরা কিছু বেসিক জেনে নেই- OAuth2:

Read More