আমি ভাবছি যে আমি যে পদ্ধতিতে কল করছি সে পদ্ধতিটি এই ধরনের প্রত্যাশা পূরণ করবে কিনা তা জানার পরেও যদি আমি জানতে পারি যে কোনও পদ্ধতি কলের রিটার্ন মানটির সাথে বৈধতা দিয়ে তারা আমার প্রত্যাশা পূরণ করে?
GIVEN
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
আমি কি উচিত
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
অথবা
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
আমি ধারণাগত পর্যায়ে এটি জিজ্ঞাসা করছি। আমি যদি পদ্ধতির অভ্যন্তরীণ কাজগুলি জানি তবে আমি কল করছি। হয় কারণ আমি এটি লিখেছি বা আমি এটি পরিদর্শন করেছি। এটি যে সম্ভাব্য মানগুলি ফেরত দেয় তার যুক্তি আমার পূর্বশর্তগুলি পূরণ করে। বৈধতা এড়ানো "" আরও ভাল "বা" আরও উপযুক্ত ", বা আমি বর্তমানে যে পদ্ধতিটি প্রয়োগ করছি তা চালিয়ে যাওয়ার আগে আমি এখনও ভুল মূল্যবোধের বিরুদ্ধে প্রতিরক্ষা করা উচিত যদিও তা সর্বদা পাস করা উচিত।
সমস্ত উত্তর থেকে আমার উপসংহার (আপনার নিজের কাছে আসা নির্দ্বিধায়):
দৃsert়তা যখন- পদ্ধতিটি অতীতে দুর্ব্যবহার দেখিয়েছে
- পদ্ধতিটি একটি অবিশ্বস্ত উত্স থেকে
- পদ্ধতিটি অন্য জায়গা থেকে ব্যবহৃত হয় এবং এটি স্পষ্টভাবে তার পোস্ট-শর্তগুলির বিবরণ দেয় না
- পদ্ধতিটি আপনার কাছাকাছি অবস্থান করে (বিশদগুলির জন্য নির্বাচিত উত্তর দেখুন)
- পদ্ধতিটি যথাযথ ডক, টাইপ সুরক্ষা, একটি ইউনিট পরীক্ষা, বা একটি শর্ত-পরবর্তী চেকের মতো কিছু সহ এটির চুক্তি স্পষ্টভাবে সংজ্ঞায়িত করে
- পারফরম্যান্স সমালোচনাযোগ্য (এই ক্ষেত্রে, একটি ডিবাগ মোড দৃsert় সংকর পদ্ধতির কাজ করতে পারে)
Null
)? নামটি ""
(নাল নয়, খালি স্ট্রিং) বা হয় তবে এটি সম্ভবত সমান সমস্যাযুক্ত "N/A"
। হয় আপনি ফলাফলটি বিশ্বাস করতে পারেন, বা আপনাকে যথাযথভাবে ভ্রান্ত হতে হবে।