আমি মূলত কনফিডেন্ট রুবি, আমার প্রিয় রুবি বইগুলির মধ্যে একটি থেকে এই ধারণাগুলির অনেক কিছু শিখেছি। আপনি যদি এই পোস্টটি পছন্দ করেন তবে আপনার এটি কেনা উচিত এবং পুরো জিনিসটি পড়া উচিত। আছে তাই সেখানে অনেক ভালো জিনিস।
আপনার current_user
পদ্ধতি একটি User
প্রদান করে , ব্যতীত যখন কোন ব্যবহারকারী নেই এবং এটি শূন্য ফেরত দেয়। একটি search
পদ্ধতি একটি Array
প্রদান করে ফলাফলের, যদি না শুধুমাত্র একটি ফলাফল থাকে, এবং এটি পরিবর্তে শুধুমাত্র সেই ফলাফল প্রদান করে। যুক্তিসঙ্গত মনে হচ্ছে, তাই না? হয়তো সুবিধাজনক!
কিন্তু শীঘ্রই, এই সিদ্ধান্তগুলি আপনার কোডকে ইফ স্টেটমেন্টের পাহাড়ের নীচে চাপা দেবে৷৷ হতে পারে এটি if kind_of?
এর একটি গুচ্ছ সব উপর ছিটিয়ে. অথবা হয়ত আপনি মনে করেন যে আপনাকে সর্বত্রই শূন্যের জন্য পরীক্ষা করতে হবে অথবা আরও খারাপ, NoMethodError
আপনি যখনই একটি নতুন বৈশিষ্ট্য পাঠান তখনই এটি প্রদর্শিত হতে শুরু করে৷ অনুমান করুন এটি অন্য হটফিক্সের সময়!
এটি প্রতিরোধ করার একটি উপায় আছে, যদিও, এবং এটি যা লাগে তা হল একটু চিন্তাশীলতা।
দৃঢ়তার নীতি
কম্পিউটিংয়ের একটি নীতি আছে যা বলে,
আপনি যা করেন তাতে রক্ষণশীল হন, অন্যের কাছ থেকে আপনি যা গ্রহণ করেন তাতে উদার হন।
আপনি আপনার রুবি পদ্ধতিতে এই নীতিটি প্রয়োগ করতে পারেন। আপনার লেখার পদ্ধতিগুলি যুক্তিসঙ্গত ইনপুট গ্রহণ করা উচিত এবং সামঞ্জস্যপূর্ণ আউটপুট প্রদান করা উচিত।
শেষ অংশে ফোকাস করা:যখন কেউ আপনার লেখা একটি পদ্ধতিকে কল করে, তখন তাদের জানা উচিত ঠিক কী সেই পদ্ধতিটি ফিরে আসবে।
আপনার আউটপুট সম্পর্কে চিন্তাশীল হন
ActiveRecord::Errors#on
এর Rails 2.1 এর বাস্তবায়নের দিকে একবার নজর দিন :
# File activerecord/lib/active_record/validations.rb, line 212
def on(attribute)
attribute = attribute.to_s
return nil unless @errors.has_key?(attribute)
errors = @errors[attribute].map(&:to_s)
errors.size == 1 ? errors.first : errors
end
কল করা হলে, এটি একটি Array
ফেরত দিতে পারে String
এর s, একটি String
, অথবা nil
. এটি কলারের উপর নির্ভর করে যে এটি কোন ধরণের বস্তুর সাথে কাজ করছে। এটি একটি খারাপ ধারণা:
-
কলকারীকে তার নিজস্ব কোডকে অবাধ্য টাইপ-চেকিং দিয়ে ঘোলা করতে হবে।
-
কলকারীকে অনেক কিছু জানতে হবে এটি কল করার পদ্ধতি সম্পর্কে। সর্বনিম্নভাবে, পদ্ধতিটি ফেরত দিতে পারে এবং কখন প্রতিটি টাইপ ফেরত যেতে পারে তা প্রতিটি ধরনের বস্তুর জানা প্রয়োজন।
-
আপনি পরীক্ষা করার জন্য আরো প্রান্ত কেস আছে. আপনি যদি আত্মবিশ্বাসী হতে চান যে আপনার কোডটি যা করার কথা তা করছে, আপনাকে তিনটি পরিস্থিতিই চেষ্টা করে দেখতে হবে।
তারা কী ফেরত দেয় সে সম্পর্কে আপনার পদ্ধতিগুলি সামঞ্জস্যপূর্ণ হওয়া উচিত। যদি আপনি সাধারণত একটি Array
ফেরত দেন , সর্বদা করার জন্য আপনার যা করা দরকার তা করুন৷ একটি Array
ফেরত দিন . যদি আপনি সাধারণত একটি User
ফেরত দেন , কিন্তু কখনও কখনও nil ফেরত দিলে, আপনি একটি নাল ইউজার অবজেক্ট তৈরি করতে পারেন এবং সেটি ফেরত দিতে পারেন শূন্যের পরিবর্তে।
আপনি এমনকি কম কঠোর হতে পারেন:“আমি এমন কিছু ফেরত দিতে যাচ্ছি যাতে রয়েছে Taggable
মডিউল"। আপনি আরও জেনেরিক হতে পারেন:“আমি id
দিয়ে কিছু ফেরত দিতে যাচ্ছি এবং name
গুণাবলী।" গুরুত্বপূর্ণ বিষয় হল ধারাবাহিকতা এবং নিশ্চিত করা যে আপনার কলার জানেন কি আশা করতে হবে।
jQuery একটি আকর্ষণীয় উদাহরণ। বেশিরভাগ jQuery পদ্ধতি একই ধরনের Array
প্রদান করে - বস্তুর মত। এই কারণে, jQuery-এর পদ্ধতিগুলি অবিশ্বাস্যভাবে সংমিশ্রণযোগ্য, এবং আপনি কোডের একটি লাইনে প্রচুর পরিমাণে কাজ করতে পারেন।
এবং যদি আপনি ভাবছেন, রেলগুলি পরবর্তী সংস্করণগুলিতে সেই পদ্ধতিটি ঠিক করেছে:
# File activemodel/lib/active_model/errors.rb, line 133
def [](attribute)
get(attribute.to_sym) || set(attribute.to_sym, [])
end
এখন এটি সর্বদা একটি Array
প্রদান করে . তাদের জন্য সহজ, এবং আমাদের জন্য সহজ।
অসংগতি মেরে ফেলুন
৷
পরের বার আপনি নিজেকে “An Array
ফেরত দেখতে পাবেন অথবা nil
”, শুধু একটি Array
ফেরত দিন . আপনার কোডবেসটি দেখুন এবং দেখুন আপনি কোথায় ব্যবহার করছেন kind_of?
এবং respond_to?
. আপনি একটি একক টাইপ ফেরত দিতে সেই কোড দ্বারা বলা পদ্ধতিগুলিকে রিফ্যাক্টর করতে পারেন কিনা দেখুন৷
এবং আপনার প্রজেক্টের মাধ্যমে আপনার রিটার্ন মান সম্পর্কে আপনি যে অনুমানগুলি তৈরি করতে পারেন তা দেখুন এবং আপনার আশেপাশের সমস্ত কোডকে সরল করুন৷