রুবি এই defined?
কীওয়ার্ড যা আপনাকে একটি পরিবর্তনশীল সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করতে সাহায্য করে।
ভেরিয়েবলটি বিদ্যমান থাকলে আপনি এর ধরন পাবেন :
apple =1 defined?(apple)# "local-variable"
এটা না হলে আপনি শূন্য পাবেন :
সংজ্ঞায়িত?(বেকন)# শূন্য
এটি Javascript এর typeof
এর মত অপারেটর. আপনি যদি একটি বস্তুর ক্লাস জানতে চান তাহলে class
ব্যবহার করুন এর পরিবর্তে পদ্ধতি।
কয়েকটি আকর্ষণীয় পয়েন্ট নোট করুন:
defined?
একটি কীওয়ার্ড , একটি পদ্ধতি নয়defined?
রুবির কয়েকটি জিনিসের মধ্যে একটি যা একটি প্রশ্ন চিহ্নে শেষ হয়, কিন্তুtrue
ফেরত দেওয়ার জন্য স্বাভাবিক নিয়ম অনুসরণ করে না অথবাfalse
defined?
একটি শূন্য মান এবং একটি পরিবর্তনশীলের মধ্যে পার্থক্য বলতে পারে যা আগে কখনও সেট করা হয়নি
এই বিশেষ গুণাবলী এই কীওয়ার্ড সম্পর্কে শেখার যোগ্য করে তোলে।
সংজ্ঞায়িত ভেরিয়েবল চেক করার একটি ভাল উপায়
এই কীওয়ার্ডটি দরকারী হতে পারে, কিন্তু এতে কিছু সমস্যা রয়েছে৷
কেন?
এর কম অপারেটর অগ্রাধিকার এর কারণে .
আপনি যদি এরকম কিছু করেন:
<পূর্ব> সংজ্ঞায়িত? কমলা &&orange.sizeফলাফল হল "অভিব্যক্তি"৷
৷
কারণ orange && orange.size
defined?
এর আর্গুমেন্ট হিসাবে ব্যাখ্যা করা হয় .
এটি করার সঠিক উপায় হবে:
সংজ্ঞায়িত?(কমলা) &&orange.size
একটি ভেরিয়েবল সংজ্ঞায়িত করা হয়েছে কি না তা পরীক্ষা করার জন্য রুবির অন্যান্য উপায় রয়েছে।
স্থানীয় ভেরিয়েবলের জন্য :
local_variables.include?(:orange)
উদাহরণস্বরূপ ভেরিয়েবল :
instance_variable_defined?("@food")
কিন্তু আপনি এর কোনোটিই ব্যবহার করতে চান না।
99% ক্ষেত্রে, যদি একটি স্থানীয় ভেরিয়েবল অনুপস্থিত থাকে তবে আপনার একটি টাইপো আছে বা কেউ সেই ভেরিয়েবলটি ঘোষণা করতে ভুলে গেছে৷
উদাহরণ ভেরিয়েবল সম্পর্কে কি?
অনির্ধারিত উদাহরণ ভেরিয়েবল সবসময় nil
হয় , তাই আপনি এটির জন্য পরীক্ষা করতে চান৷
"নিরাপদ নেভিগেটর অপারেটর" (রুবি 2.3+) চেষ্টা করুন যা শুধুমাত্র একটি পদ্ধতিকে কল করে যদি ভেরিয়েবলটি nil
না হয় .
এখানে একটি উদাহরণ আছে :
if @user&.country =="স্পেন" # ...end
এটি এর সমতুল্য :
if @user [email protected] =="স্পেন" # ...end
এগুলো defined?
এর মত সর্বজনীন নয় কীওয়ার্ড, কিন্তু সেগুলি বেশি অনুমানযোগ্য এবং ত্রুটির প্রবণতা কম৷
পদ্ধতি সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করুন
আপনি defined?
ব্যবহার করতে পারেন একটি পদ্ধতি সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করতে, কিন্তু এটি বাস্তবসম্মত নয়।
উদাহরণ :
সংজ্ঞায়িত?(পুট)# "পদ্ধতি"
কারণ এটি একটি কীওয়ার্ড এবং একটি পদ্ধতি নয় যে আপনি এটি একটি বস্তুর সাথে ব্যবহার করতে পারবেন না।
আমি এটাই বলতে চাইছি :
[].defined?(:size)# অনির্ধারিত পদ্ধতি `সংজ্ঞায়িত?' জন্য []:অ্যারে
আপনি respond_to?
খুঁজছেন পদ্ধতি।
এটি কীভাবে ব্যবহার করবেন তা এখানে রয়েছে :
[].respond_to?(:size)# true[].respond_to?(:orange)# false
একটি ক্লাস আছে কিনা তা পরীক্ষা করুন
উদাহরণ :
সংজ্ঞায়িত?(বস্তু)# "ধ্রুবক"সংজ্ঞায়িত?(A)# শূন্য
একটি ভাল বিকল্প হল const_defined?
ব্যবহার করা পদ্ধতি।
এরকম :
Object.const_defined?(:String)# trueObject.const_defined?(:A)# মিথ্যা
সারাংশ
আপনি সেখানে যান, আপনি একটি প্রদত্ত পরিবর্তনশীল, শ্রেণী বা পদ্ধতি বিদ্যমান কিনা তা পরীক্ষা করার একটি সহজ উপায় শিখেছেন!
ভেরিয়েবলের সাথে কাজ করার সময় আপনি বেশিরভাগ সময় যা চান তা হল nil
চেক করা , পরিবর্তে একটি পরিবর্তনশীল সংজ্ঞায়িত করা হয় কি না। অথবা আরও ভাল, একটি রূপান্তর পদ্ধতি ব্যবহার করে ভেরিয়েবলটিকে একটি পরিচিত ক্লাসে রূপান্তর করুন।
আমি আশা করি আপনি এই নিবন্ধটি দরকারী খুঁজে পেয়েছেন! যদি করে থাকেন তাহলে অনুগ্রহ করে শেয়ার করুন এটি যাতে আরও বেশি মানুষ এটি উপভোগ করতে পারে৷
৷