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

রুবিতে নিল বুঝুন: কেন এটি গুরুত্বপূর্ণ এবং কার্যকরভাবে কীভাবে ব্যবহার করবেন

আমি একটি বন্ধুর সাথে রুবি কোডের একটি টুকরো নিয়ে আড্ডা দিচ্ছিলাম এবং রিটার্ন ভ্যালু বিষয়টি আসলো...

...এবং অবশ্যই, nil সেটি যেন স 거기 ছিল।

সেই দিন রাত गये ঘুমাতে যাওয়ার আগে বিছানায় পড়ে আছি, চিন্তা করছি, কেন আমরা nil ব্যবহার করি?

আমি চিন্তা করলাম এর সম্পর্কে আগামী দিন লিখব, এবং আজ আমি এখানে। আশা করি আপনি এটি আকর্ষণীয় এবং কিছু নতুন শিখতে পাবেন!

রিটার্ন ভ্যালু এবং প্রত্যাশিত আচরণ

যখন আপনি select মেথড কল করেন, আপনি সবসময় একটি অ্যারে পাবেন।

এমনকি যদি সিলেক্ট করার জন্য কিছু না থাকে।

উদাহরণ:

[1,2,3].select {} # []
[1,2,3].select(&:even?) # [2]

কেন এটি গুরুত্বপূর্ণ?

ভালো প্রশ্ন!

যদি আপনি সবসময় একটি অ্যারে পান, আপনি অ্যারে মেথড (size, empty?, push...) অ্যারে কিনা চেক না করেই কল করতে পারেন।

এটি একটি ভালো বিষয় কারণ ক্লাস চেক করলে হাই কাপলিং হয়।

আপনি যদি আরও ফ্লেক্সিবল কোড লিখতে চান যেন mümkব প্রত্যেকটার জন্য "এটি কোন ক্লাস" চেক করা এড়ান।

সিঙ্গল ভ্যালু রিটার্ন করা

ঠিক আছে, কিন্তু find মেথডের মতো যা শুধু একটি ভ্যালু রিটার্ন করে সেটি কেমন?

যদি এলিমেন্টটি পাওয়া যায় তবে এটা শুধু কাজ করে:

[1,2,3].find { |n| n == 2 } # 2

যদি কোনো ম্যাচ না থাকে, find-কে কিছু ফেরত দিতে হবে, সেটি false ফেরত দিতে পারত, কিন্তু যদি আমরা এই রিটার্ন ভ্যালুতে মেথড কল করার আশা করি তবে আমরা এক্সেপশন পাব।

এখানেই nil আসে, আমরা এটি ব্যবহার করি কারণ এটি সবচেয়ে কাছাকাছি জিনিস যা আমরা একটি জেনেরিক নাল অবজেক্ট হিসেবে পেতে পারি।

আপনি আমার নিল সম্পর্কে লাস্ট আর্টিকেল থেকে মনে করতে পারেন, আমি আপনাকে দেখিয়েছিলাম nil একটি ক্লাস যাতে to_i, to_s এবং to_a মেথড আছে।

এটি আপনাকে Array(), এবং String() এর মতো মেথড ব্যবহার করতে দেয় একটি অবজেক্টকে এই টাইপে রূপান্তর করতে।

উদাহরণ:

String(123) # "123"
String(nil) # ""
Array(nil) # []

এটি স্ট্রিং ইন্টারপোলেশনেও আসে:

"abc#{nil}dfg"

স্ট্রিং ইন্টারপোলেশন to_s কল করে ইন্টারপোলেশন ব্লকের ভেতরে যা আছে সেটি ইভ্যালুয়েট করার ফলাফলে। তাই যদি আপনার কাছে #{1 + 1} থাকে তবে এটি 2.to_s-এ রূপান্তরিত হয়।

এখন nil-এর সাথে সমস্যা আসে যখন আপনি এটি আশা করবেন না, আপনি মনে করেন এটি কিছু অবজেক্ট যা foo মেথডে রেসপন্ড করে, কিন্তু সেটি সেটা নয়, তাই আপনি ভয়ঙ্কর NoMethodError এক্সেপশন পান।

সেক্ষেত্রে, আপনি নাল অবজেক্ট প্যাটার্ন ইমপ্লিমেন্ট করতে চাবেন, যেভাবে আমি এই আর্টিকেলে বর্ণনা করেছি। অন্যান্য সমাধান شامل fetch মেথড ডিফল্ট ভ্যালু দিয়ে ব্যবহার করা এবং ডিফল্ট ভ্যালু মানে না হলে এক্সেপশন থ্রো করা।

সারসংক্ষেপ

আপনি শিখতে পেরেছেন কেন আমরা nil ব্যবহার করি, nil ভ্যালুতে মেথড কল করলে আসা এক্সেপশন এড়াতে কীভাবে, এবং কীভাবে আরও কনফিডেন্ট কোড লিখবেন।

আপনার কোডে এক নজর দিন এবং দेखুন কি কোনো টাইপ-চেকিং কোড (is_a? / kind_of? / ===) আছে। আপনি আজ যা শিখেছেন সেটি ব্যবহার করে সেই কোডটি কীভাবে উন্নত করতে পারেন?

  1. উইন্ডোজ পিসিতে গুগল অথেন্টিকেটর ব্যবহার করার উপায়

  2. HTML পেজে head ট্যাগ কেন ব্যবহার করা হয়?

  3. HTML5-এ canvas ট্যাগ কেন ব্যবহার করা হয়?

  4. HTML ডকুমেন্টে DOCTYPE ব্যবহারের কারণ