রুবিতে ইনফিনিটি (anantya) কী?
এটি এমন একটি জিনিস যarset একটি শুরুর পয়েন্ট আছে কিন্তু কোনো শেষ নেই।
রুবিতে, আমরা এই ইনফিনিটির কনসেপ্টকে এক্সপ্রেস করতে পারি Float::INFINITY কনস্ট্যান্ট দিয়ে।
আপনি জিজ্ঞাসা করতে পারেন এটি কীভাবে উপকারী।
উদাহরণ দিয়ে ব্যাখ্যা করছি!
অ্যারিথমেটিক অপারেশনের ফলাফল হিসেবে ইনফিনিটি
রুবি নির্দিষ্ট ম্যাথ অপারেশনের ফলাফল হিসেবে একটি Infinity অবজেক্ট রিটার্ন করে।
উদাহরণ:
আপনি "division by zero" এররর সাথে পরিচিত হতে পারেন।
এখানে এটি:
1/0 # ZeroDivisionError: divided by 0
কিন্তু…
আপনি যদি একটি ফ্লোট ব্যবহার করেন, তবে আপনি অন্য কিছু পাবেন:
1/0.0 # Infinity
Infinity!
কিন্তু এটিই সব নয়।
আপনি যদি 0 কে 0.0 দিয়ে ভাগ করার চেষ্টা করেন, তবে আপনি আরেকটি স্পেশাল ভ্যালু পাবেন।
দেখুন:
0/0.0 # NaN
এই NaN কী?
এর মানে "Not a Number", এবং আমার জানা পর্যন্ত রুবিতে এই ভ্যালু পাওয়ার একমাত্র জায়গা এটি।
কেন এটি একটি জিনিস?
এটি IEEE 754 স্পেসিফিকেশনের অংশ, যা ব্যাখ্যা করে ফ্লোটিং-পয়েন্ট অপারেশন কীভাবে behave করবেন।
বতে, কিছু সম্পর্কিত মেথড রয়েছে:
nan?finite?infinite?
আপনি এই মেথডগুলো ব্যবহার করে স্পেশাল ভ্যালু চেক করতে পারেন।
এই মেথডগুলো Floats-এ উপলব্ধ।
রুবি ২.৪ থেকে আপনি finite? এবং infinite? ইন্টিজারের সাথেও ব্যবহার করতে পারেন।
ইনফিনিট রেঞ্জ কীভাবে তৈরি করবেন
ঠিক আছে।
এটা আকর্ষণীয় ছিল… আরো উদাহরণ দেখা যাক।
এখন রেঞ্জ দিয়ে!
এখানে একটি ইনফিনিট রেঞ্জ:
(1..Float::INFINITY).take(10) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
এটি তখন সহায়ক হয় যখন আপনি রেঞ্জের শেষটা আগে থেকে না জানেন।
একটি সমস্যা…
এটি শুধু নম্বর স্টার্টিং ভ্যালু হিসেবে কাজ করে।
উদাহরণ:
("a"..Float::INFINITY) # ArgumentError: bad value for range
সমাধান কী?
রুবি ২.৬ দিয়ে আপনি এইভাবে করতে পারেন:
("a"..).take(5) # ["a", "b", "c", "d", "e"]
হ্যাঁ, এটা ভুল নয়! এই রেঞ্জের কোনো এন্ডিং ভ্যালু নেই, শুধু একটি স্টার্টিং ভ্যালু "a", তারপর দুটি ডট .. যাতে এটি একটি никогда শেষ না হওয়া রেঞ্জ বने।
এটি নতুন সিনট্যাক্স।
রুবি ২.৬+ ব্যবহার করুন যদি আপনি এটি কাজ করাতে চান।
ম্যাক্সিমাম ও মিনিমাম ভ্যালু হিসেবে ইনফিনিটি
Infinity এর আরেকটি প্র্যাক্টিক্যাল ব্যবহার?
ভালো…
এটি রুবিতে সবচেয়ে বড় (Infinity) এবং সবচেয়ে ছোট (-Infinity) নম্বর।
আপনি এটিকে একটি স্টার্টিং ভ্যালু হিসেবে ব্যবহার করতে পারেন।
এখানে একটি উদাহরণ:
def smallest_percent_size(style, ary_size)
@smallest_percent ||= Float::INFINITY
if style == :percent && ary_size < @smallest_percent
@smallest_percent = ary_size
end
@smallest_percent
end
এই কোডটি Rubocop-এ থেকে, একটি ওপেন-সোর্স প্রজেক্ট।
এটি কীভাবে কাজ করে:
আমরা সবচেয়ে ছোট অ্যারে সাইজ খুঁজতে চাচ্ছি, কিন্তু এর জন্য একটি স্টার্টিং ভ্যালু দরকার কারণ nil ব্যবহার করলে এরর দেবে।
আপনি একটি বড় নম্বর টাইপ করতে পারেন এবং আশা করতে পারেন সেটি যথেষ্ট।
অথবা আপনি Float::INFINITY ব্যবহার করতে পারেন, জানেন যে সেটিই সম্ভব সবচেয়ে বড় নম্বর।
সারসংক্ষেপ
আপনি রুবিতে ইনফিনিটি সম্পর্কে শিখেছেন, সেটি কী, কোথায় দেখাতে পারে এবং কীভাবে ব্যবহার করবেন।
দয়া করে এই আর্টিকেল শেয়ার করুন যাতে অধিক মানুষ এর লাভ নিতে পারে।
পড়ার জন্য ধন্যবাদ!