ফাংশনাল প্রোগ্রামিং আমার কাছে একটি অদ্ভুত জন্তু। আমি এফ # এবং হাস্কেল শিখেছি, কয়েকটি সাধারণ প্রোগ্রাম লিখেছি এবং সেগুলি ব্যবহার করে ভালবাসি, তবে কিছু লোক যে বিষয়ে "আলভাসের ফ্ল্যাশ" বলে থাকে তা কখনও হয়নি। তবে আস্তে আস্তে, আমি লক্ষ্য করেছি যে আমি আরও বেশি করে কোড লিখছিলাম যা বোঝা যাচ্ছিল যা অপরিবর্তনীয় ছিল, কাজগুলি আরও বেশি, ছোট ফাংশনে বিভক্ত করা এবং প্রতিনিধিদের আরও অনেক বেশি ব্যবহার করার চেষ্টা করা। এটি এমন একটি জিনিস যা যদি আপনি এটি পছন্দ করেন তবে আপনার কাজটি স্ফীত হবে কারণ এই কৌশলগুলির মূল্যটি স্বতঃস্পষ্ট।
এখন, আরও ব্যবহারিকভাবে প্রশিক্ষণের জন্য: আমি দেখতে পেয়েছি যে দুটি ধারণা সত্যিই আমার কাছে স্টাইল হিসাবে ফাংশনাল প্রোগ্রামিংকে ক্লিক করে।
প্রথমত, এফপি শৈলী ডেটা কাঠামোর উপর ভিত্তি করে, ওওপি হিসাবে রচনা নয়। আমি টাইপ-সেফ লিস্ট তৈরির জন্য চতুর কৌশল হিসাবে সি # তে লিস্টের মতো কোনও কিছুর দিকে তাকিয়েছিলাম, এমন কিছু যা টাইপ (স্ট্রিং) কে অন্য ধরণের (তালিকার) মধ্যে তৈরি করেছিল। এফপি শেখার পরে আমি জেনারিকগুলিকে এখন মনাদাদের মতো দেখি। তালিকাটি একটি কাঠামোগত ফর্ম যা কোড নিতে পারে এবং এটি স্ট্রিংগুলি সজ্জিত করে।
দ্বিতীয়, এবং সম্ভবত সি # / এএসপি প্রোগ্রামারদের পক্ষে আরও দরকারী, এফপি পুনরাবৃত্তি এবং পুনরাবৃত্তি নিয়ে কাজ করে, যখন ওওপি পরিবর্তন এবং লুপিংয়ের জন্য কাজ করে। আমি এখন এএসপি পৃষ্ঠার জীবনচক্রটিকে এক ধরণের এফপি হিসাবে ভাবতে চাই: প্রতিটি অনুরোধ পুরো জীবন-চক্রের মাধ্যমে স্ক্র্যাচ থেকে প্রক্রিয়া করা হয়, তাই পুরো পৃষ্ঠাটি বাস্তবে, একটি বড় ধীরে ধীরে পুনরাবৃত্তি প্রোগ্রাম। যদি আপনি এই ধারণাটি সঙ্কুচিত করতে পারেন তবে আপনি কীভাবে একটি অত্যাবশ্যক প্রোগ্রামটি ডেটা গ্রহণ করে এমন ফাংশনগুলির লুপের উপরে কাঠামোবদ্ধ করা যায়, এটি পরিচালনা করে এবং পুরাতনটি পরিবর্তনের পরিবর্তে নতুন ডেটা ফিরিয়ে আনতে পারেন সে সম্পর্কে আপনি আরও ভাল ধারণা পাবেন।
কমপক্ষে আমার পক্ষে এই পদ্ধতির সাথে উত্তরণ করার জন্য সবচেয়ে জটিল বাধাটি হ'ল ডুবে যাওয়া অনুভূতি যে আপনি পরিবর্তনশীল বস্তুগুলি ব্যবহার করার সময় প্রচুর সংস্থান সম্পদ নষ্ট করছেন যা এক টন স্মৃতি সঞ্চয় করতে পারে। জিসিতে আমরা আস্থা রেখেছি, এবং আমি ঠিক না হওয়া পর্যন্ত পারফরম্যান্সের উদ্বেগ ছেড়ে দিতে শিখতে হয়েছিলাম যতক্ষণ না আমি প্রোগ্রামটি চালিত দেখেছি এবং সেখানে কিছু রয়েছে কিনা তা যাচাই করেছি, এবং সমস্যাটি ঠিক কোথায় ছিল তা দেখার জন্য যদি কোনও প্রোফাইলার ব্যবহার করি।