
"হাই, অ্যামিগো!"
"এখন আমরা লজিক্যাল অপারেটরদের উপর একটি ছোট পাঠ পাব।"
"আপনি কোন লজিক্যাল অপারেটর জানেন?"
— বা (||), এবং (&&), নয়(!)
"হ্যাঁ। ভাল কাজ। এবং তারা কিভাবে কাজ করে মনে আছে?"
"হ্যাঁ."
"অথবা যখন কমপক্ষে একটি অপারেন্ড সত্য হয় তখন সত্য হয়।"
"এবং উভয় অপারেন্ড সত্য হলেই সত্য হয়।"
"সত্য থেকে মিথ্যা এবং মিথ্যা থেকে সত্যে পরিবর্তন হয় না।"
"এটা ঠিক। এবং এই অভিব্যক্তিতে অপারেটরদের কি ক্রমে মূল্যায়ন করা হয়?"
boolean a = true;
boolean b = false;
boolean c = true;
boolean result = a && b || !c && b || !a;
"এই সব খুব সহজ।"
"প্রথম, NOT (!), তারপর AND (&&), এবং তারপর OR (||) একেবারে শেষে।"
যদি আমরা বন্ধনী যোগ করি, তাহলে আমরা পাব:
boolean a = true;
boolean b = false;
boolean c = true;
boolean result = (a && b) || ((!c) && b) || (!a);
"সব ঠিক আছে, ভালো হয়েছে। আর ফলাফল কি?"
— 1) (a &&b) == (সত্য && মিথ্যা) == মিথ্যা
2) ((!c) && b) == (মিথ্যা && মিথ্যা) == মিথ্যা
3) (!a) == মিথ্যা
4) মিথ্যা || মিথ্যা || মিথ্যা == মিথ্যা
"ফলাফল মিথ্যা।"
"মনে হচ্ছে আপনি বিষয়টি পুরোপুরি জানেন। তারপর আমি আপনাকে কয়েকটি ছোট গোপন কথা বলব।"
"প্রথম, যৌক্তিক অভিব্যক্তি বাম থেকে ডানে মূল্যায়ন করা হয়।"
"দ্বিতীয়, শর্ট-সার্কিট মূল্যায়ন এখানে ব্যবহার করা হয় (প্রয়োজন হলেই গণনা করা হয়)। যদি চূড়ান্ত ফলাফল ইতিমধ্যেই অভিব্যক্তির অংশ মূল্যায়ন থেকে জানা যায়, তাহলে বাকি অভিব্যক্তির মূল্যায়ন করা হয় না।"
boolean result = (true && false) || (true && true) || (true && false);
"এই অভিব্যক্তিটি OR (||) অপারেটর দ্বারা পৃথক তিনটি অংশে বিভক্ত।"
"যদি অন্তত একটি অংশ সত্য হয়, তাহলে উত্তরটি সত্য এবং অন্য কিছু বিবেচনা করার দরকার নেই। সেই অনুযায়ী, অভিব্যক্তিটি এভাবে মূল্যায়ন করা হয়:"
1) প্রথম অংশের মূল্যায়ন করুন: (সত্য এবং মিথ্যা) == মিথ্যা
2) দ্বিতীয় অংশটি মূল্যায়ন করুন: (সত্য && সত্য) == সত্য
3) আমরা তৃতীয় অংশটি মূল্যায়ন করি না, কারণ এটি ইতিমধ্যেই স্পষ্ট যে উত্তরটি সত্য হবে ।
"এই পদ্ধতিকে অলস মূল্যায়নও বলা হয়।"
"ঠিক আছে। আর এতে বিশেষ কি আছে?"
"কিছুই না - যতক্ষণ না আপনি এক্সপ্রেশনের ভিতরে মেথড কল করা শুরু করেন। যদি এক্সপ্রেশনের কিছু অংশ বাদ দেওয়া হয়, তাহলে এড়িয়ে যাওয়া অংশের মেথডগুলিকে বলা হবে না।"
"কিন্তু এই পদ্ধতিটি খুব সাধারণ হয়ে উঠেছে। এখানে কেন:"
Job job = null;
if (job != null && job.isDone())
{
…
}
"যদি অভিব্যক্তিটি মূল্যায়ন করার সময় চাকরিটি শূন্য হয়, তাহলে job.isDone() কলটি ঘটবে না!"
"প্রকৃতপক্ষে, অভিব্যক্তিটির প্রথম অংশটি মিথ্যা, যা AND (&&) দ্বারা অনুসরণ করা হয়েছে। সুতরাং, সম্পূর্ণ অভিব্যক্তিটি মিথ্যা বলে জানা যাবে, এবং দ্বিতীয় অংশটির প্রয়োজন হবে না।"
"ঠিক। এটা একটা ভালো কৌশল, তাই না?"
"হ্যাঁ।"
GO TO FULL VERSION