শূন্য…
এটা আসলে কি?
আচ্ছা, nil একটি বিশেষ রুবি বস্তু যা একটি "খালি" বা "ডিফল্ট" মান উপস্থাপন করতে ব্যবহৃত হয়। এটি একটি "মিথ্যা" মান, যার অর্থ এটি false এর মত আচরণ করে যখন একটি শর্তসাপেক্ষ বিবৃতিতে ব্যবহৃত হয়।
এখন :
শুধুমাত্র একটি nil আছে বস্তু, একটি object_id সহ এর 4 (বা 8 64-বিট রুবিতে), এটি কেন nil এর অংশ বিশেষ।
nil.object_id # 4
আসুন আরও গভীরভাবে দেখে নেওয়া যাক!
শূন্য মান কোথা থেকে আসে?
অনেক পদ্ধতি nil ফেরত দিতে পারে ফলস্বরূপ।
এটি ঘটে যখন আপনি একটি মান জিজ্ঞাসা করেন কিন্তু সেই মানটি পাওয়া যায় না৷
৷উদাহরণ :
- পণ্য পাওয়া যায়নি
- অ্যারে সূচক সীমার বাইরে
- হ্যাশ কী বিদ্যমান নেই
এটি দেখানোর জন্য এখানে কিছু কোড আছে :
arr = [1,2,3] arr[5] # nil
এটি প্রায়শই সমস্ত ধরণের সমস্যার দিকে নিয়ে যায় কারণ আমরা আশা করি যে পদ্ধতিটি আমরা কল করেছি তা একটি nil এর পরিবর্তে একটি বৈধ মান ফেরত দেবে .
এই NoMethodError পছন্দ করুন ব্যতিক্রম:
arr[5].size # NoMethodError: undefined method 'size' for nil:NilClass
এই ত্রুটি এড়াতে, আপনার কাছে nil আছে কিনা তা পরীক্ষা করতে হবে আপনি এটিতে একটি পদ্ধতি কল করার আগে মান
রুবিতে শূন্যের জন্য পরীক্ষা করা হচ্ছে
আপনি যদি "nil:NilClass" ত্রুটির জন্য অনির্ধারিত পদ্ধতি পেতে না চান তবে এটি ব্যবহার করে দেখুন...
শুধু না হলে শুধুমাত্র কল পদ্ধতি :
if array[5] && array[5].size # do something... end
এই কারণেই রুবি 2.3 "নিরাপদ নেভিগেটর" অপারেটর (&.) চালু করেছে )।
উদাহরণ :
if arr[5]&.size # do something... end
শূন্য পরীক্ষা করার আরেকটি উপায় হল nil? ব্যবহার করা পদ্ধতি:
if @bacon.nil? # ... end
আরেকটি বিকল্প হল blank? ব্যবহার করা পদ্ধতি (শুধুমাত্র রেল)।
আপনি কোন বস্তুর সাথে কাজ করছেন তার উপর নির্ভর করে আপনি nil চেক এড়াতে কিছু কৌশল ব্যবহার করতে পারেন। মান সম্পূর্ণরূপে।
উদাহরণস্বরূপ, আপনি fetch ব্যবহার করতে পারেন হ্যাশ এবং অ্যারে অবজেক্টে পদ্ধতি।
অথবা আপনি যদি nil এর পরিবর্তে একটি ডিফল্ট মান ফেরত দিতে চান তবে আপনি আপনার নিজের ক্লাসে "নাল অবজেক্ট প্যাটার্ন" ব্যবহার করতে পারেন .
অন্যান্য স্থান যেখানে শূন্য লুকিয়ে আছে
আপনার সচেতন হওয়া উচিত যে অনির্ধারিত উদাহরণ ভেরিয়েবলগুলি nil ফেরত দেবে .
@foo # nil
তাই এটির জন্য সতর্ক থাকুন, এটি এমন হতে পারে যে আপনি আপনার ইন্সট্যান্স ভেরিয়েবলের নামের বানান ভুল করেছেন বা আপনি এটি শুরু করতে ভুলে গেছেন!
আরেকটি জায়গা যেখানে আপনি nil খুঁজে পেতে পারেন puts এর সাথে আছে &print পদ্ধতি।
এই দুটি পদ্ধতি সর্বদা nil ফেরত দেয় .
আমি এটি উল্লেখ করেছি কারণ আমি দেখেছি আমার কিছু ছাত্র এইরকম কিছু চেষ্টা করে:
numbers = [1,2,3].map { |n| puts n * 2 }
রাখে
যার ফলে numbers হয় [nil, nil, nil] হচ্ছে . এই ক্ষেত্রে সমাধান হল সহজভাবে puts অপসারণ করা ব্লকের ভিতর থেকে।
NilClass বোঝা
অন্য যেকোন রুবি অবজেক্টের মত nil পদ্ধতির একটি সেট আছে৷
এখানে রুবিনিয়াস থেকে শ্রেণী সংজ্ঞা:
class NilClass
def to_s
""
end
def inspect
"nil"
end
def nil?
true
end
def to_a
[]
end
def to_f
0.0
end
def to_i
0
end
def to_c
Complex(0)
end
def to_h
{}
end
end
লক্ষ্য করুন কিভাবে এই সব to_something পদ্ধতি একটি খালি মান প্রদান করে (0 সংখ্যার জন্য)।
খালি হ্যাশ, খালি স্ট্রিং, খালি অ্যারে…
এর কারণ হল nil "কিছুই" প্রতিনিধিত্ব করতে ব্যবহৃত হয়৷
নাল অবজেক্ট প্যাটার্ন
nil সম্পর্কে কোন আলোচনা নেই নাল অবজেক্ট প্যাটার্ন উল্লেখ না করেই সম্পূর্ণ।
তার চমৎকার বক্তৃতায়, "কিছুই কিছু নয়", স্যান্ডি মেটজ এই বিষয়টি তুলে ধরেছেন যে nil মানে "কিছুই না" এর আরও নির্দিষ্ট অর্থ থাকতে পারে৷
উদাহরণস্বরূপ, যদি আমরা এমন একটি পদ্ধতি লিখি যা পণ্যগুলি খুঁজে পায় এবং আমরা একটি ডিফল্ট পণ্য ফেরত দিতে চাই…
আমরা এই ধরনের একটি শূন্য পণ্য ফেরত দিতে পারি :
class MissingProduct
def name
"Product not found"
end
end
এখন যদি আমাদের কাছে বাস্তব পণ্য বস্তু এবং নাল পণ্যগুলির মিশ্রণের সাথে একটি অ্যারে থাকে তবে এই সমস্ত পণ্যের name থাকবে পদ্ধতি এর মানে হল আপনি একটি NoMethodError পাবেন না ব্যতিক্রম।
টিপ :আপনি যদি বস্তুর ধরন পরীক্ষা না করেই আপনার সমস্ত বস্তুর সাথে একইভাবে আচরণ করতে পারেন তাহলে আপনি পলিমরফিজমের সুবিধা নিচ্ছেন৷
এই ধরনের অবজেক্টগুলি আপনার উপস্থাপনা স্তরের জন্য দুর্দান্ত, তবে আপনার নিয়ন্ত্রকদের জন্য এত বেশি নয় যেখানে আপনি যা খুঁজছেন তা উপলব্ধ না হলে আপনি আলাদা কিছু করতে চান, যেমন একটি সতর্কতা বার্তা দেখানো, পুনঃনির্দেশ করা ইত্যাদি৷
সত্যতা
nil সম্পর্কে আপনার আরও একটি জিনিস জানা দরকার false ছাড়াও এটিই একমাত্র মান (যা একটি বস্তুও), যেটিকে "মিথ্যা" বলে মনে করা হয়।
রুবি-তে অন্য সবকিছুকে true বলে মনে করা হয় একটি বুলিয়ান প্রসঙ্গে৷
কিছু ভাষা সংখ্যা 0 বিবেচনা করে একটি false হিসাবে মান, কিন্তু রুবিতে তা নয়:
if 0 puts 123 end # 123
এটি বলছে:“যদি 0 true তারপর 123 প্রিন্ট করুন "।
ভিডিও
সারাংশ
আপনি শিখেছেন যে nil শুধুমাত্র একটি রুবি বস্তু যা "কিছুই" প্রতিনিধিত্ব করে।
আপনি এটাও শিখেছেন যে nil &false রুবিতে একমাত্র দুটি জিনিস যা "মিথ্যা"। বাকি সবই "সত্য"।
আপনি যদি এই পোস্টটি উপভোগ করেন তবে শেয়ার করতে ভুলবেন না৷ এটি আপনার প্রিয় সামাজিক নেটওয়ার্কগুলিতে!