আজ () একটি অপবিত্র ফাংশন কারণ এর ফলাফলটি এমন কোনও কিছুর উপর নির্ভরশীল যা আপনি এটি দেন না; বিশেষত, বর্তমান সিস্টেম সময়। সুতরাং, কেবলমাত্র প্রার্থনার সময় প্রদত্ত ইনপুটগুলির উপর ভিত্তি করে এর ফলাফলটি নির্বিচারবাদী নয়।
একটি খাঁটি ফাংশন হবে int Add(int a, int b) {return a + b;}
। ফাংশনটি যা দেওয়া হয় তা সম্পূর্ণরূপে কাজ করে এবং অন্য কোনও বাহ্যিক রাষ্ট্রের ডেটা ব্যবহার করে না। এর প্রাকৃতিক ফলাফল হ'ল আপনি Add(2,2)
সময় থেকে শেষ অবধি এখন থেকে 4 পেতে পারেন । এছাড়াও, কারণ ফাংশনটি কোনও বাহ্যিক অবস্থার পরিবর্তন করে না (এটির কোনও "পার্শ্ব প্রতিক্রিয়া" নেই), এখন থেকে 2 এবং 2 যোগ করুন (টাইম) শেষ হওয়া অবধি সিস্টেমের অন্য কিছু পরিবর্তন করবে না, আপনি না হলে কোনও ভেরিয়েবলের জন্য ফাংশনটির ফলাফল নির্ধারণ করুন বা অন্যথায় স্থিতি আপডেট করার জন্য মানটি ব্যবহার করুন (যা নিজেই ক্রিয়াকলাপ দ্বারা পরিচালিত কোনও অপারেশন নয়)। কার্যত সমস্ত শাস্ত্রীয় গাণিতিক ক্রিয়াকলাপগুলি খাঁটি ফাংশন এবং এগুলি হিসাবে প্রয়োগ করা যেতে পারে।
অন্যদিকে, আজ () পরপর দু'বার ফোন করা হলেও একই মান উত্পাদন করতে পারে, তবে বেশ কয়েক দিন ধরে বারবার ডাকলে তা হয় না। এটি কারণ এটি বাহ্যিক রাষ্ট্রের ডেটার উপর নির্ভরশীল যা আপনাকে ফাংশনের পরামিতি হিসাবে সরবরাহ করে না। ফলস্বরূপ, প্রোগ্রামের সীমানার মধ্যে, আজ () ফাংশনের ফলাফলকে নিয়ন্ত্রণ করা অসম্ভব। এটি প্রদত্ত দিনে একটি প্রদত্ত মান উত্পাদন করে এবং অন্য কোনও দিন কখনই এই মানটি উত্পাদন করতে পারে না, যদি না আপনি কম্পিউটারটি চালিত কম্পিউটারের সিস্টেম ক্লকটি পরিবর্তন করেন (সাধারণত প্রোগ্রামের সীমানার বাইরে ঘটে এমন একটি পরিবর্তন)।
একটি অপরিষ্কার ফাংশন অগত্যা খারাপ জিনিস নয়; অপরিষ্কার ক্রিয়াকলাপগুলি এমনকি কার্যকরী ভাষাগুলিতে, প্রোগ্রামের সীমানার বাইরে যেমন কোনও ডেটা স্টোর, যোগাযোগ পাইপলাইন, ইউআই ডিসপ্লে, পেরিফেরিয়াল ডিভাইস ইত্যাদির সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন হয় এমন একটি প্রোগ্রাম যা এই জিনিসগুলির মধ্যে কোনও কাজ করে না এটি তার ইউটিলিটিতে তীব্রভাবে সীমাবদ্ধ; এমনকি আমি এ জাতীয় প্রোগ্রামটিকে তুচ্ছ বলেও ডাকব, যেমন কোনও ইনপুট গ্রহণ করার উপায় বা কোনও আভেন্যু আপনাকে এর আউটপুট সম্পর্কে অবহিত করার জন্য ছাড়া, এটি পাশাপাশি কিছুই করতে পারে না। কার্যকরী ভাষায় রচিত প্রোগ্রামগুলিতে কেবল রানটাইম দ্বারা সরবরাহ করা ইনপুট থাকতে পারে এবং কোনও স্পষ্টভাবে সংজ্ঞায়িত অপরিষ্কার পদ্ধতি ছাড়াই রানটাইমকে রিপোর্ট করা আউটপুট তৈরি করতে পারে, তবে কারণ রানটাইমটি একটি অসম্পূর্ণ কম্পিউটার সিস্টেমের মধ্যে কাজ করার এই সমস্ত অপরিষ্কার বিবরণ দূরে সরিয়ে দিচ্ছে,
আপনি কোন ফাংশনগুলি ব্যবহার করছেন তা খাঁটি এবং কোনটি নয়, তা জেনে রাখা খুব সহজ জিনিস এটি যাতে আপনি কীভাবে ব্যবহার করছেন সে সম্পর্কে ভাল সিদ্ধান্ত নিতে পারেন। অপরিষ্কার কার্যকারিতা, কারণ তারা জিনিসগুলি করে বা এমন জিনিসগুলির উপর নির্ভরশীল যেগুলি তাদের ব্যবহার থেকে স্পষ্ট নয়, ব্যবহারের কেবলমাত্র জ্ঞান দেওয়া অপ্রত্যাশিত আচরণ করতে পারে। বাহ্যিক অবস্থার থেকে এটি কী প্রয়োজন বা কী করে, ফাংশনটির উদ্দেশ্য সম্পর্কে আরও জ্ঞান প্রয়োজন এবং একটি সিস্টেমকে এটি একটি সুসংগত অবস্থায় ব্যবহার করার জন্য এবং সুতরাং একটি নির্বিচার ফলাফলের প্রত্যাশার জন্য আবশ্যক।