কম্পিউটার টিউটোরিয়াল

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক

ব্লক রুবির এতটাই গুরুত্বপূর্ণ অংশ যে, এর ছাড়া ল্যাঙ্গুয়েজটাকে কল্পনা করা কঠিন। কিন্তু ল্যাম্বডা? কে ল্যাম্বডা পছন্দ করে? আপনি বছরের পর বছর কাটিয়ে দিতে পারেন একটাও ব্যবহার না করে। এগুলো تقريبا পুরাকালের রেলিক মনে হয়।

...কিন্তু সেটি পুরোপুরি সত্য নয়। ল্যাম্বডার হাতে কিছু আকর্ষণীয় ট্রিক আছে একবার ভিতরে ঝাকলে।

এই আর্টিকেলে আমরা ল্যাম্বডা ব্যবহারের বেসিক থেকে শুরু করে কিছু আরও আকর্ষণীয় অ্যাডভান্সড ব্যবহার দেখব। তাই আপনি যদি প্রতিদিন ল্যাম্বডা ব্যবহার করেন এবং সব জানেন, তবে নিচে স্ক্রোল করুন।

ল্যাম্বডা সম্পর্কে মনে রাখার মূল বিষয় হলো এগুলো ফাংশনের মতো বিহেভ করে। ব্লক এবং Proc-এর ব্যবহার আছে। কিন্তু उनमें से কোনোটি ১০০% রিয়েল লাইফ ফাংশনের মতো বিহেভ করে না। ল্যাম্বডা করে। চলুন লিস্ট দেখি।

ল্যাম্বডা সঠিক সংখ্যক আর্গুমেন্ট বাধ্য করে

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক Proc-এর বিপরীতে, ল্যাম্বডা সঠিক সংখ্যক আর্গুমেন্ট এনফোর্স করে

ল্যাম্বডা ডিফল্ট আর্গুমেন্ট সাপোর্ট করে

নিচের উদাহরণে, আমরা "hello world" ডিফল্ট আর্গুমেন্ট ভ্যালু সহ একটি ল্যাম্বডা ফাংশন তৈরি করেছি।

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক ল্যাম্বডা ডিফল্ট আর্গুমেন্ট সাপোর্ট করে

`return` কീവার্ড ঠিক যেমন আপনি আশা করেন কাজ করে।

হয়তো এটা ছোট একটা জিনিস মনে হয়, কিন্তু আপনি যদি কখনো Proc-এর ভিতরে `return` ব্যবহার করার চেষ্টা করেছেন তবে জানেন সেটি সেটা নয়।

নিচের উদাহরণটি আপনাকে বুঝাবে। আমি `something` নামে একটি মেথড ডিফাইন করেছি যা একটি `Proc` কল করে। `Proc`-এর মধ্যে একটি `return` স্টেটমেন্ট আছে। কিন্তু সেটি ট্রিকি। এটি শুধু Proc-থেকে রিটার্ন করে না, বরং `something` মেথড থেকেও রিটার্ন করে।

কিন্তু যখন আমি `lambda` দিয়ে একই কাজ করি, `return` স্টেটমেন্ট শুধু ল্যাম্বডা থেকে রিটার্ন করে। এটি যেকোনো অন্য ফাংশনের মতো।

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক ল্যাম্বডার ভিতরে return কീവার্ড ব্যবহার করলে সেটি ল্যাম্বডা থেকে রিটার্ন করে

ল্যাম্বডা ক্লোজার

একটি দুর্দান্ত Stack Overflow পোস্ট থেকে উদ্ধৃতি:

ক্লোজারের সবচেয়ে সিম্পল ডেফিনিশন: একটি **ফাংশন যা ভেরিয়েবল হিসেবে স্টোর করা যায়** (যাকে "first-class function" বলা হয়), এবং যেটির একে স্পেশাল ক্ষমতা আছে সেটির তৈরি হওয়ার স্কোপের লোকাল ভেরিয়েবলগুলো অ্যাক্সেস করতে।

ল্যাম্বডা তৈরি হওয়ার স্কোপের লোকাল ভেরিয়েবল অ্যাক্সেস করতে পারতে মানে কী? দেখি। নিচের উদাহরণে আমি `marco` নামে একটি লোকাল ভেরিয়েবল তৈরি করেছি। আমি সেটি আমার ল্যাম্বডার ভিতরে ব্যবহার করতে পারি। এবং যদি আমি সেই ভেরিয়েবলের ভ্যালু পরিবর্তন করি, ল্যাম্বডাটা নতুন ভ্যালুটাও দেখে।

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক রুবি ল্যাম্বডা ক্লোজার

ল্যাম্বডা ক্যামেলিয়ন

ল্যাম্বডার সাথে সত্যিই একটা অদ্ভুত জিনিস হলো এটাকে কল করার এতরকম ভিন্ন ভিন্ন উপায়। নিচের স্যাম্পলে ল্যাম্বডা আহ্বান করার তিনটি উপায় দেখানো হয়েছে। সবগুলো সমতুল্য।

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক রুবিতে ল্যাম্বডা আহ্বান করার কমপক্ষে তিনটি উপায় আছে

হয়তো এটা আপনাকে একটু অদ্ভুত লাগে। আমারেও লেগেছিল। এবং老实说 `l.(arg)` সিন্ট্যাক্স আমাকে এখনো বিভ্রান্ত করে। কিন্তু `l[arg]` সিন্ট্যাক্স খুব আকর্ষণীয়। এর মানে সীমিত পরিসরে আপনি ল্যাম্বডাকে সেখানে ব্যবহার করতে পারেন যেখানে আপনি সাধারণত অ্যারে বা হ্যাশ ব্যবহার করতেন।

ল্যাম্বডা কম্পিউটেড হ্যাশ এবং অ্যারে হিসাবেও ব্যবহার

কল্পনা করুন আপনার একটি টেস্ট স্যুট আছে। ইনিশিয়ালাইজেশনের অংশ হিসেবে, আপনাকে ফেক Person রেকর্ড তৈরি করতে হবে। এটা সিম্পল। আপনি শুধু একটি নতুন FakePerson রেকর্ড তৈরি করুন এবং ফার্স্ট নেম ও লাস্ট নেম পাস করুন।

কিন্তু আপনি যদি চান "ফাজ টেস্ট" করার জন্য প্রতিবার টেস্ট রান করলে ভিন্ন ফার্স্ট এবং লাস্ট নেম ব্যবহার করা?

এটি করার একটি উপায় হলো হ্যাশের বদলে একটি ল্যাম্বডা ফাংশন পাস করা। এই উদাহরণে, আমি Faker জেম ব্যবহার করে ফেক নাম জেনারেট করার জন্য একটি ল্যাম্বডা ফাংশন ব্যবহার করছি।

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক এখানে, ল্যাম্বডা হ্যাশের ভेषে আছে।

ল্যাম্বডার বিল্ট-ইন ক্যারি

ক্যারি করা ফাংশনাল প্রোগ্রামিং-এ ব্যাপকভাবে ব্যবহৃত একটি কুল টেকনিক। এটি একটি উপায় যাতে আপনি এক্সিস্টিং ফাংশন থেকে নতুন ফাংশন তৈরি করতে পারেন। প্র্যাকটিসে দেখলে সহজে বুঝা যায়।

নিচের কোডে আমার একটি ল্যাম্বডা ফাংশন আছে যা দুটি সংখ্যা যোগ করে। সুবিধাজনকভাবে এর নাম `add`। তারপর আমি ক্যারি ব্যবহার করে একটি আরও স্পেশালাইজড ফাংশন `increment` তৈরি করি। এটি যেকোনো দিয়েgipt সংখ্যার সাথে এক যোগ করে।

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক রুবিতে যেকোনো Proc ক্যারি করা যায়

ল্যাম্বডা Proc-এর একটি বিশেষ ধরন

আপনি লক্ষ্য করতে পারেন সকল কোড স্যাম্পলে, যখনই আমি ল্যাম্বডা ফাংশন ডিফাইন করেছি, আমি একটি Proc পাই। কারণ রুবি ল্যাম্বডাকে Proc-এর একটি ধরন হিসেবে ইমপ্লিমেন্ট করে। তাই এই আর্টিকেলে আমি যা যা দেখিয়েছি, সেগুলোর অনেকটুকু Proc-দিয়েও করা যায়।

স্ট্যাবি ল্যাম্বডা

এই আর্টিকেলে আমি ক্লারিটির জন্য `lambda` কീവার্ড ব্যবহার করেছি। কিন্তু রুবি ১.৯-এ একটি আরও সংক্ষিপ্ত সিন্ট্যাক্স পরিচয় করানো হয়েছিল যাকে "স্ট্যাবি ল্যাম্বডা" বলা হয়। এটা কীভাবে কাজ করে:

রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক রুবির স্ট্যাবি ল্যাম্বডা সিন্ট্যাক্স ভার্সন ১.৯-এ পরিচয় করানো হয়েছিল

  1. রুবিতে লেজি এনিউমেরেটর মাস্টারিং: বিশাল ফাইল দক্ষতার সাথে প্রসেস করুন

  2. রুবি এক্সসেপশন দক্ষতা TracePoint দিয়ে: জটিল ত্রুটি পরিস্থিতি ডায়াগনোসिस

  3. রুবিতে AWS Lambda: এন্ড-টু-এন্ড বিল্ড, টেস্ট এবং ডিপ্লয় গাইড

  4. রুবি ২.৬-এ ৯টি গুরুত্বপূর্ণ উন্নতির অন্বেষণ