ব্লকগুলি রুবির একটি গুরুত্বপূর্ণ অংশ, তাদের ছাড়া ভাষা কল্পনা করা কঠিন। কিন্তু ল্যাম্বডাস? ল্যাম্বডাস কে ভালোবাসে? আপনি একটি ব্যবহার না করে বছর যেতে পারেন. এগুলি প্রায় পুরানো যুগের ধ্বংসাবশেষের মতো মনে হয়৷
...কিন্তু এটা পুরোপুরি সত্য নয়। ল্যাম্বডাসের কিছু আকর্ষণীয় কৌশল আছে যখন আপনি সেগুলি একটু তদন্ত করে দেখুন।
এই নিবন্ধে আমরা ল্যাম্বডা ব্যবহারের মূল বিষয়গুলি দিয়ে শুরু করব এবং তারপরে আরও কিছু আকর্ষণীয় উন্নত ব্যবহারের দিকে এগিয়ে যাব। সুতরাং আপনি যদি প্রতিদিন ল্যাম্বডাস ব্যবহার করেন এবং সেগুলি সম্পর্কে সমস্ত কিছু জানেন তবে নীচে স্ক্রোল করুন৷
Lambdas সম্পর্কে মনে রাখা প্রধান জিনিস হল যে তারা ফাংশনের মত কাজ করে। ব্লক এবং Procs তাদের ব্যবহার আছে. কিন্তু তাদের কেউই বাস্তব জীবনের ফাংশনের মতো 100% আচরণ করে না। ল্যাম্বডাস করে। আসুন তালিকাটি নিচে যাই।
ল্যাম্বডাস সঠিক সংখ্যক আর্গুমেন্ট প্রয়োগ করে
Procs থেকে ভিন্ন, ল্যাম্বডাস সঠিক সংখ্যক আর্গুমেন্ট প্রয়োগ করে
ল্যাম্বডাস ডিফল্ট আর্গুমেন্ট সমর্থন করে
নীচের উদাহরণে, আমরা "হ্যালো ওয়ার্ল্ড" এর একটি ডিফল্ট আর্গুমেন্ট মান সহ একটি ল্যাম্বডা ফাংশন তৈরি করি
ল্যাম্বডাস ডিফল্ট আর্গুমেন্ট সমর্থন করে
return
কীওয়ার্ড আপনি যেভাবে আশা করেন ঠিক সেভাবেই কাজ করে।
হয়তো এটি একটি ছোট জিনিসের মত শোনাচ্ছে, কিন্তু আপনি যদি কখনও একটি proc এর ভিতরে রিটার্ন ব্যবহার করার চেষ্টা করে থাকেন তবে আপনি জানেন যে এটি নয়৷
নীচের উদাহরণ আপনাকে দেখাবে আমি কি বলতে চাই। আমি something
নামে একটি পদ্ধতি সংজ্ঞায়িত করেছি এটি একটি Proc
কল করে . Proc
একটি ফেরত বিবৃতি আছে. কিন্তু যে ফেরত বিবৃতি চতুর. শুধু proc থেকে ফিরে আসার পরিবর্তে, এটি কিছু পদ্ধতি থেকে ফিরে আসে।
কিন্তু যখন আমি lambda
এর সাথে অনুরূপ কিছু করি , return
বিবৃতিটি ল্যাম্বডা থেকে ফিরে আসে। এটি অন্য যেকোন ফাংশনের মতো।
আপনি যখন ল্যাম্বডার ভিতরে রিটার্ন কীওয়ার্ড ব্যবহার করেন, তখন এটি ল্যাম্বডা থেকে ফিরে আসে
ল্যাম্বডাস হল বন্ধ
একটি দুর্দান্ত স্ট্যাক ওভারফ্লো পোস্ট উদ্ধৃত করতে:
ক্লোজার সম্পর্কে চিন্তা করার সবচেয়ে সহজ উপায় হল একটি **ফাংশন যা একটি পরিবর্তনশীল হিসেবে সংরক্ষণ করা যেতে পারে** (একটি "প্রথম-শ্রেণীর ফাংশন" হিসাবে উল্লেখ করা হয়), যা স্থানীয় অন্যান্য ভেরিয়েবলগুলি অ্যাক্সেস করার বিশেষ ক্ষমতা রাখে যে সুযোগে এটি তৈরি করা হয়েছিল।
ল্যাম্বডা যে সুযোগে তৈরি করা হয়েছিল সেখানে স্থানীয় অন্যান্য ভেরিয়েবলগুলি অ্যাক্সেস করতে সক্ষম হওয়ার অর্থ কী? একবার দেখা যাক. নীচের উদাহরণে আমি marco
নামে একটি স্থানীয় ভেরিয়েবল তৈরি করেছি . আমি আমার ল্যাম্বডা ভিতরে যে পরিবর্তনশীল ব্যবহার করতে পারেন. এবং যদি আমি সেই ভেরিয়েবলের মান পরিবর্তন করি, ল্যাম্বডা নতুন মান দেখতে পায়।
রুবি ল্যাম্বডাস বন্ধ হয়ে গেছে
ল্যাম্বডাস হল গিরগিটি
ল্যাম্বডাস সম্পর্কে সত্যিকারের অদ্ভুত জিনিসগুলির মধ্যে একটি হল বিভিন্ন উপায়ে আমরা তাদের কল করতে পারি। নীচের নমুনা একটি ল্যাম্বডা আহ্বান করার তিনটি উপায় দেখায়। তারা সবাই সমতুল্য।
রুবিতে ল্যাম্বডা আহ্বান করার অন্তত তিনটি উপায় আছে
সম্ভবত এটি আপনার কাছে কিছুটা অদ্ভুত বলে মনে হচ্ছে। এটি প্রথমে আমার সাথে করেছিল। এবং সৎ হতে l.(arg)
সিনট্যাক্স এখনও আমাকে বিভ্রান্ত করে। কিন্তু l[arg]
সিনট্যাক্স বেশ আকর্ষণীয়। এর মানে হল যে সীমিত পরিমাণে আপনি ল্যাম্বডাস ব্যবহার করতে পারেন যেখানে আপনি সাধারণত একটি অ্যারে বা হ্যাশ ব্যবহার করেন৷
ল্যাম্বডাসকে গণনা করা হ্যাশ এবং অ্যারে হিসাবে ব্যবহার করা হচ্ছে
কল্পনা করুন যে আপনার একটি পরীক্ষা স্যুট আছে। শুরুর অংশ হিসাবে, আপনাকে জাল ব্যক্তি রেকর্ড তৈরি করতে হবে। ইহা সহজ. আপনি শুধু একটি নতুন FakePerson রেকর্ড তৈরি করুন এবং একটি প্রথম নাম এবং একটি পদবি পাস করুন৷
৷কিন্তু আপনি যদি প্রতিবার পরীক্ষা চালানোর সময় ভিন্ন নাম এবং শেষ নাম ব্যবহার করে সিস্টেমটিকে "ফাজ টেস্ট" করতে চান?
এটি করার একটি উপায় হতে পারে একটি ল্যাম্বডা ফাংশনে পাস করা হ্যাশের পরিবর্তে . এই উদাহরণে, আমি চমৎকার ফেকার জেমের মাধ্যমে জাল নাম তৈরি করতে একটি ল্যাম্বডা ফাংশন ব্যবহার করি।
এখানে, ল্যাম্বডা হ্যাশ হওয়ার ভান করে।
ল্যাম্বডাসের অন্তর্নির্মিত কারি রয়েছে
কারি করা একটি দুর্দান্ত কৌশল যা কার্যকরী প্রোগ্রামিংয়ে প্রচুর ব্যবহৃত হয়। এটি আপনাকে বিদ্যমান ফাংশন থেকে নতুন ফাংশন তৈরি করতে দেওয়ার একটি উপায়। আপনি যখন এটি অনুশীলনে দেখেন তখন এটি বোঝা সহজ।
নীচের কোডে আমার একটি ল্যাম্বডা ফাংশন রয়েছে যা দুটি সংখ্যা যোগ করে। সুবিধামত, এটা যোগ বলা হয়. তারপর আমি ইনক্রিমেন্ট নামক আরও বিশেষ ফাংশন তৈরি করতে কারি ব্যবহার করি। এটি যেকোনো প্রদত্ত সংখ্যার সাথে একটি যোগ করে।
আপনি রুবিতে যে কোনও প্রোক কারি করতে পারেন
ল্যাম্বডাস হল একটি বিশেষ ধরনের প্রোক
আপনি হয়তো লক্ষ্য করেছেন যে সমস্ত কোড নমুনায়, যখনই আমি একটি ল্যাম্বডা ফাংশন সংজ্ঞায়িত করেছি, আমি বিনিময়ে একটি Proc পাই। কারণ রুবি ল্যাম্বডাসকে এক ধরণের প্রক হিসাবে প্রয়োগ করে। তাই এই নিবন্ধে আমি আপনাকে যে অনেক কিছু দেখিয়েছি তা Procs এবং lambdas দিয়ে করা যেতে পারে৷
স্ট্যাবি ল্যাম্বডাস
এই নিবন্ধে আমি স্বচ্ছতার জন্য ল্যাম্বডা কীওয়ার্ড ব্যবহার করেছি। কিন্তু রুবি 1.9 এ প্রবর্তিত ল্যাম্বডাস সংজ্ঞায়িত করার জন্য আরও সংক্ষিপ্ত বাক্য গঠন রয়েছে এবং "স্ট্যাবি ল্যাম্বডা" নামে পরিচিত। এটি কীভাবে কাজ করে তা এখানে:
রুবির স্ট্যাবি ল্যাম্বডা সিনট্যাক্স 1.9 সংস্করণে চালু করা হয়েছিল