"স্বাভাবিক" phrasing একটি কি প্রণালী বিশুদ্ধ ফাংশন হয়, পদ হয় উল্লেখ স্বচ্ছতা । কোনও ফাংশন শুদ্ধ হয় যদি এটি স্বচ্ছভাবে স্বচ্ছ হয় ।
রেফারেনশিয়াল ট্রান্সপারেন্সি , মোটামুটিভাবে, এর অর্থ আপনি প্রোগ্রামটির অর্থ পরিবর্তন না করে প্রোগ্রামটির যে কোনও পয়েন্টে কলটির রিটার্ন মান সহ বা তার বিপরীতে ফিরিয়ে আনতে পারেন।
সুতরাং, উদাহরণস্বরূপ, সি এর printf
তুলনামূলক স্বচ্ছ থাকলে এই দুটি প্রোগ্রামের একই অর্থ হওয়া উচিত:
printf("Hello");
এবং
5;
এবং নিম্নলিখিত প্রোগ্রামগুলির সকলের একই অর্থ হওয়া উচিত:
5 + 5;
printf("Hello") + 5;
printf("Hello") + printf("Hello");
কারণ printf
এই ক্ষেত্রে 5 টি লিখিত অক্ষরের সংখ্যা প্রদান করে।
এটি void
ফাংশনগুলির সাথে আরও স্পষ্ট হয় । আমার যদি কোনও ফাংশন থাকে void foo
তবে
foo(bar, baz, quux);
হিসাবে একই হতে হবে
;
অর্থাত্ যেহেতু foo
কিছুই প্রত্যাবর্তন করে না, তাই প্রোগ্রামটির অর্থ পরিবর্তন না করে আমার এটিকে কিছুই দিয়ে প্রতিস্থাপন করতে সক্ষম হওয়া উচিত।
সুতরাং, এটা পরিষ্কার যে, printf
নাও foo
স্বচ্ছভাবে স্বচ্ছ বা স্বচ্ছ নয় এবং সুতরাং এগুলির উভয়ই শুদ্ধ নয়। প্রকৃতপক্ষে, কোনও void
ফাংশন কখনই প্রাসঙ্গিকভাবে স্বচ্ছ হতে পারে না, যদি না এটি কোনও অপশন না থাকে।
আপনি যেটি দিয়েছেন তার মতো করে পরিচালনা করতে আমি এই সংজ্ঞাটি আরও সহজ মনে করি। এটি আপনাকে যে কোনও গ্রানুলারিটিতে এটি প্রয়োগ করার অনুমতি দেয়: আপনি এটিকে পৃথক এক্সপ্রেশনগুলিতে, ফাংশনে, পুরো প্রোগ্রামগুলিতে প্রয়োগ করতে পারেন। এটি আপনাকে উদাহরণস্বরূপ, কোনও ফাংশন সম্পর্কে কথা বলতে দেয়:
func fib(n):
return memo[n] if memo.has_key?(n)
return 1 if n <= 1
return memo[n] = fib(n-1) + fib(n-2)
আমরা ফাংশনটি তৈরি করে এমন ভাবগুলি বিশ্লেষণ করতে পারি এবং সহজেই উপসংহারে পৌঁছাতে পারি যে তারা উল্লেখযোগ্যভাবে স্বচ্ছ নয় এবং এইভাবে খাঁটি নয়, যেহেতু তারা একটি পরিবর্তনীয় ডেটা কাঠামো, memo
অ্যারে ব্যবহার করে। যাইহোক, আমরা অনুষ্ঠানে তাকান করতে পারেন এবং দেখতে পাচ্ছেন এটি হচ্ছে referentially স্বচ্ছ এবং এইভাবে বিশুদ্ধ। এটিকে কখনও কখনও বাহ্যিক বিশুদ্ধতা বলা হয় , অর্থাত্ এমন একটি ফাংশন যা বাইরের বিশ্বের কাছে খাঁটি প্রদর্শিত হয়, তবে অভ্যন্তরীণভাবে অপরিষ্কার প্রয়োগ করা হয়।
এই ধরনের ফাংশনগুলি এখনও কার্যকর, কারণ অপরিষ্কারতা চারপাশের সমস্ত কিছুকে সংক্রামিত করে, বাহ্যিক বিশুদ্ধ ইন্টারফেসটি এক ধরণের "বিশুদ্ধতা বাধা" তৈরি করে, যেখানে অশুচিতা কেবলমাত্র ফাংশনের তিনটি লাইনকে সংক্রামিত করে, তবে প্রোগ্রামের বাকী অংশে ফাঁস হয় না does । এই তিনটি লাইন পুরো প্রোগ্রামের চেয়ে নির্ভুলতার জন্য বিশ্লেষণ করা অনেক সহজ।