সুবিধাটি হ'ল খাঁটি ফাংশনগুলি আপনার কোড সম্পর্কে তর্ক করতে আরও সহজ করে। অথবা, অন্য কথায়, পার্শ্ব প্রতিক্রিয়াগুলি আপনার কোডের জটিলতা বাড়ায়।
computeProductPrice
পদ্ধতির উদাহরণ নিন Take
একটি খাঁটি পদ্ধতি আপনাকে একটি পণ্যের পরিমাণ, একটি মুদ্রা ইত্যাদির জন্য জিজ্ঞাসা করবে আপনি জানেন যে যখনই পদ্ধতিটিকে একই যুক্তি দিয়ে ডাকা হয়, এটি সর্বদা একই ফলাফল তৈরি করে।
- আপনি এটি ক্যাশেও করতে পারেন এবং ক্যাশেড সংস্করণ ব্যবহার করতে পারেন।
- আপনি যখন এটির প্রয়োজন হবেন তখন আপনি এটি অলস করতে এবং তার কলটি স্থগিত করতে পারেন, জেনে রেখেই মানটি এর মধ্যে পরিবর্তন হবে না।
- আপনি পদ্ধতিটি একাধিকবার কল করতে পারেন, এটি জেনে যে এর কোনও পার্শ্ব প্রতিক্রিয়া হবে না।
- আপনি পদ্ধতিটি নিজে থেকেই বিশ্ব থেকে বিচ্ছিন্ন হয়ে যুক্তি করতে পারেন, এটি জেনে যে এটির প্রয়োজনীয় সমস্ত যুক্তি।
একটি খাঁটি-খাঁটি পদ্ধতি ব্যবহার এবং ডিবাগ করার জন্য আরও জটিল হবে। যেহেতু এটি আর্গুমেন্টগুলি ব্যতীত অন্যগুলি পরিবর্তনকের অবস্থার উপর নির্ভর করে এবং সম্ভবত এগুলি পরিবর্তন করে, এর অর্থ হ'ল একাধিকবার ডাকা হলে এটি বিভিন্ন ফলাফল আনতে পারে বা একেবারে ডাকা হয় না বা খুব শীঘ্রই বা খুব দেরীতে ডাকা না হলে একই আচরণ করতে পারে না।
উদাহরণ
ভাবুন ফ্রেমওয়ার্কে এমন একটি পদ্ধতি রয়েছে যা একটি সংখ্যাকে পার্স করে:
decimal math.parse(string t)
এটিতে রেফারেন্সিয়াল স্বচ্ছতা নেই, কারণ এটি এর উপর নির্ভর করে:
এনভায়রনমেন্ট ভেরিয়েবল যা সংখ্যায়ন সিস্টেমটি নির্দিষ্ট করে, তা বেস 10 বা অন্য কিছু something
math
লাইব্রেরির মধ্যে চলক যা পার্স করতে সংখ্যার যথার্থতা নির্দিষ্ট করে। মান সহ সুতরাং 1
, স্ট্রিং পার্সিং "12.3456"
দেবে 12.3
।
সংস্কৃতি, যা প্রত্যাশিত বিন্যাস সংজ্ঞায়িত করে। উদাহরণস্বরূপ, এর সাথে fr-FR
, পার্সিং "12.345"
দেবে 12345
, কারণ বিচ্ছেদ চরিত্রটি হওয়া উচিত ,
, নয়.
ভাবুন যে এই জাতীয় পদ্ধতিতে কাজ করা কতটা সহজ বা কঠিন হবে। একই ইনপুটটির সাহায্যে আপনি পদ্ধতিটি কল করার মুহুর্তের উপর নির্ভর করে আপনার আমূল পরিবর্তন হতে পারে, কারণ কিছু, কোথাও কোনও পরিবেশের পরিবর্তনশীল পরিবর্তন বা সংস্কৃতি পরিবর্তন করেছে বা একটি আলাদা নির্ভুলতা সেট করেছে। পদ্ধতির অ-নিয়ন্ত্রক চরিত্রটি আরও বাগ এবং আরও ডিবাগিং দুঃস্বপ্নের দিকে নিয়ে যায়। কিছু সমান্তরাল কোডটি অষ্টাল সংখ্যাগুলি পার্স করা হওয়ায় একটি উত্তর হিসাবে কল করা math.parse("12345")
এবং প্রাপ্ত 5349
করা ভাল নয়।
এই স্পষ্টভাবে ভাঙা পদ্ধতিটি কীভাবে ঠিক করবেন? রেফারেন্সিয়াল স্বচ্ছতার পরিচয় দিয়ে। অন্য কথায়, বিশ্বব্যাপী অবস্থা থেকে মুক্তি পেয়ে এবং সবকিছুকে পদ্ধতির পরামিতিগুলিতে স্থানান্তরিত করে:
decimal math.parse(string t, base=10, precision=20, culture=cultures.en_us)
এখন যেহেতু পদ্ধতিটি খাঁটি, আপনি জানেন যে আপনি যখন পদ্ধতিটি কল করেন তা কোনও ব্যাপার নয়, এটি সর্বদা একই যুক্তিগুলির জন্য একই ফলাফল উত্পন্ন করবে।