আরও একটি এফপি + পার্শ্ব প্রতিক্রিয়া প্রশ্নের জন্য দুঃখিত, তবে আমার কাছে এটির উত্তর পাওয়া যায় এমন একটি বিদ্যমান সন্ধান করতে পারি নি।
ফাংশনাল প্রোগ্রামিং সম্পর্কে আমার (সীমাবদ্ধ) বোধগম্যতা হল রাষ্ট্র / পার্শ্ব প্রতিক্রিয়াগুলি হ্রাস করা উচিত এবং রাষ্ট্রবিহীন যুক্তি থেকে পৃথক রাখা উচিত।
আইও মোনাড, আমি হ্যাশেলের এই পদ্ধতির কাছেও একত্রিত হয়েছি, প্রোগ্রামটির বাইরেও বিবেচিত পরে মৃত্যুদন্ড কার্যকর করার জন্য, একটি ধারকটিতে রাষ্ট্রীয় ক্রিয়াগুলি জড়িয়ে এটি অর্জন করে।
আমি এই প্যাটার্নটি বোঝার চেষ্টা করছি, তবে বাস্তবে এটি পাইথন প্রকল্পে ব্যবহার করা হবে কিনা তা নির্ধারণ করার জন্য, যদি সম্ভব হয় তবে হাস্কেল সুনির্দিষ্টতা এড়াতে চাই।
অপরিশোধিত উদাহরণ আগমন।
যদি আমার প্রোগ্রামটি কোনও এক্সএমএল ফাইলকে একটি জেএসএন ফাইলে রূপান্তর করে:
def main():
xml_data = read_file('input.xml') # impure
json_data = convert(xml_data) # pure
write_file('output.json', json_data) # impure
এটি করতে কার্যকরভাবে আইও মোনাডের দৃষ্টিভঙ্গি নয়:
steps = list(
read_file,
convert,
write_file,
)
তাহলে সেই পদক্ষেপগুলিতে আসলে কল না করে দোভাষীকে তা করতে দিয়ে দায়বদ্ধতা থেকে নিজেকে মুছে ফেলুন?
বা অন্য কোনও উপায়ে লিখুন, এটি লেখার মতো:
def main(): # pure
def inner(): # impure
xml_data = read_file('input.xml')
json_data = convert(xml_data)
write_file('output.json', json_data)
return inner
তারপরে অন্য কাউকে কল করার আশা করা inner()
এবং বলা আপনার কাজটি সম্পন্ন হয়েছে কারণ main()
খাঁটি।
পুরো প্রোগ্রামটি মূলত আইও মোনাডে অন্তর্ভুক্ত হতে চলেছে।
কোডটি আসলে কার্যকর করা হয় , ফাইলটি পড়ার পরে সমস্ত কিছুই সেই ফাইলের অবস্থার উপর নির্ভর করে তাই এখনও প্রয়োজনীয় রাজ্য সম্পর্কিত বাগগুলি যেমন অত্যাবশ্যক বাস্তবায়ন হিসাবে ভুগবে, তাই আপনি কি প্রোগ্রামার হিসাবে বাস্তবে কিছু অর্জন করেছেন?
রাষ্ট্রীয় আচরণকে হ্রাস ও বিচ্ছিন্ন করার সুবিধার জন্য আমি সম্পূর্ণভাবে প্রশংসা করি, এটিই হ'ল আমি কেন এর মতো অপরিহার্য সংস্করণটি গঠন করেছি: ইনপুট সংগ্রহ করি, খাঁটি জিনিস করি, আউটপুট আউটপুট করি। আশা করি convert()
পুরোপুরি খাঁটি হয়ে উঠতে পারবেন এবং চলাচলের সুবিধা, থ্রেডসফটি ইত্যাদির সুবিধা গ্রহণ করতে পারেন
আমি এও প্রশংসা করি যে মোনাডিক প্রকারগুলি কার্যকর হতে পারে, বিশেষত তুলনামূলক প্রকারের পাইপলাইনগুলিতে কার্যকর, তবে ইতিমধ্যে এইরকম পাইপলাইন না থাকলে আইও কেন মোনাদ ব্যবহার করা উচিত তা দেখবেন না।
আইও মোনাড প্যাটার্ন নিয়ে আসে এমন পার্শ্ব প্রতিক্রিয়াগুলি মোকাবেলায় কী কী অতিরিক্ত সুবিধা রয়েছে যা আমি মিস করছি?
main
হাস্কেল প্রোগ্রামের ধরণটি হ'ল IO ()
- একটি আইও অ্যাকশন। এটি আসলে কোনও কাজ নয়; এটি একটি মান । আপনার পুরো প্রোগ্রামটি হ'ল বিশুদ্ধ মূল্য যা নির্দেশাবলীর সাথে থাকে যা ভাষা রানটাইমকে কী করা উচিত তা বলে। সমস্ত অপরিষ্কার জিনিস (আসলে আইও ক্রিয়া সম্পাদন করা) আপনার প্রোগ্রামের আওতার বাইরে।
read_file
) এবং পরেরটি ( write_file
) এর সাথে যুক্তি হিসাবে এটি ব্যবহার করেন । আপনার যদি কেবল স্বাধীন ক্রিয়াগুলির ক্রম থাকে তবে আপনার একটি মোনাডের প্রয়োজন হবে না।