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

রুবিতে ভেরিয়েবল ডেফিনিশন যাচাই: একটি সহজ গাইড

রুবিতে এই defined? কিওয়ার্ড আছে যা আপনাকে চেক করতে সাহায্য করে যে একটি ভেরিয়েবল ডিফাইন করা আছে কিনা।

যদি ভেরিয়েবলটি একজিস্ট করে তবে আপনি এর টাইপ পাবেন:

 apple = 1 defined?(apple) # "local-variable" 

যদি না থাকে তবে আপনি nil পাবেন:

 defined?(bacon) # nil 

এটি জাভাস্ক্রিপ্টের typeof অপারেটরের মতো। আপনি যদি একটি অবজেক্টের ক্লাস জানতে চান তবে এই 키ওয়ার্ডের পরিবর্তে class মেথড ব্যবহার করুন।

কয়েকটি দিলচস্প পয়েন্ট:

  • defined? একটি কিওয়ার্ড, মেথড নয়
  • defined? রুবিতে những قليلًا জিনিসপত্রের মধ্যে এক যা প্রশ্নবোধক চিহ্ন দিয়ে শেষ হয়, কিন্তু সাধারণ কনভেনশন ফলো করে না true বা false রিটার্ন করার জন্য
  • defined? একটি nil মান এবং একটি ভেরিয়েবল যা কখনো সেট করা হয়নি তার মধ্যে পার্থক্য করতে পারে

এই বিশেষ বৈশিষ্ট্যগুলো এই কিওয়ার্ডটিকে শিখতে যোগ্য করে তোলে।

ডিফাইন করা ভেরিয়েবল চেক করার একটি ভালো উপায়

এই কিওয়ার্ডটি উপকারী হতে পারে, কিন্তু এর কিছু সমস্যা আছে।

কেন?

তার কম অপারেটর প্রেসিডেন্স কারণে।

আপনি যদি এভাবে করেন:

 defined? orange && orange.size 

ফলাফল হবে "expression"।

কারণ orange && orange.size কে defined?-এর আর্গুমেন্ট হিসেবে ইন্টারপ্রেট করা হয়।

সঠিক উপায় হবে:

 defined?(orange) && orange.size 

রুবিতে ভেরিয়েবল ডিফাইন করা আছে কিনা চেক করার অন্যান্য উপায়ও আছে।

লোকাল ভেরিয়েবলের জন্য:

 local_variables.include?(:orange) 

ইনস্ট্যান্স ভেরিয়েবলের জন্য:

 instance_variable_defined?("@food") 

কিন্তু আপনি এগুলোর কোনটিই ব্যবহার করতে চাইবেন না।

৯৯% কেসে, যদি একটি লোকাল ভেরিয়েবল অনুপস্থিত থাকে তবে আপনার টাইপো আছে বা কেউ সেটি ডিক্লেয়ার করতে ভুলে গেছে।

ইনস্ট্যান্স ভেরিয়েবলের কী?

অনডিফাইনড ইনস্ট্যান্স ভেরিয়েবল সবসময় nil, তাই আপনি সেটি চেক করতে চান।

"সেফ নেভিগেটর অপারেটর" (রুবি ২.৩+) ট্রাই করুন যা শুধু মেথড কল করে যদি ভেরিয়েবল nil না হয়।

উদাহরণ:

 if @user&.country == "Spain" # ... end 

এটি এর সমতুল্য:

 if @user && @user.country == "Spain" # ... end 

এইগুলো defined? কিওয়ার্ড униভার্সাল নয়, কিন্তু এগুলো আরও প্রেডিক্টেবল এবং এরর-প্রোন কম।

মেথড ডিফাইন আছে কিনা চেক করুন

আপনি defined? দিয়ে চেক করতে পারেন যে একটি মেথড ডিফাইন আছে কিনা, কিন্তু এটি সেটাই প্র্যাক্টিক্যাল নয়।

উদাহরণ:

 defined?(puts) # "method" 

কারণ এটি একটি কিওয়ার্ড, মেথড নয় তাই আপনি এটি একটি অবজেক্টের সাথে ব্যবহার করতে পারবেন না।

আমি কী বোঝাতে চাচ্ছি:

 [].defined?(:size) # undefined method `defined?' for []:Array 

আপনি খুঁজছেন respond_to? মেথডটি।

এখানে কীভাবে ব্যবহার করবেন:

 [].respond_to?(:size) # true [].respond_to?(:orange) # false 

ক্লাস একজিস্ট করে কিনা চেক করুন

উদাহরণ:

 defined?(Object) # "constant" defined?(A) # nil 

একটি ভালো অপশন হলো const_defined? মেথড ব্যবহার করা।

এভাবেই:

 Object.const_defined?(:String) # true Object.const_defined?(:A) # false 

সারসংক্ষেপ

এi, আপনি একটি সহজ উপায় শিখলেন যেকোনো ভেরিয়েবল, ক্লাস বা মেথড একজিস্ট করে কিনা চেক করার জন্য!

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

আশা করি আপনি এই আর্টিকেলটি উপকারী পেয়েছেন! যদি পেয়ে থাকেন তবে দয়া করে শেয়ার করুন যাতে আরও মানুষ উপকৃত হতে পারে।


  1. পাইথনে ভেরিয়েবল স্ট্রিং টাইপের কিনা যাচাই করা

  2. রুবিতে এনভায়রনমেন্ট ভেরিয়েবল মাস্টার করুন: একটি প্র্যাকটিক্যাল গাইড

  3. রুবি ম্যাট্রিক্স বুঝতে: ডেফিনিশন, অ্যাপ্লিকেশন এবং কীভাবে তৈরি করবেন

  4. রুবি হেরেডক মাস্টার করুন: মাল্টিলাইন স্ট্রিং-এর জন্য একটি প্র্যাক্টিক্যাল গাইড