1. বুলিয়ান অপারেশন
|
এবং অপারেটরগুলি &
শুধুমাত্র সংখ্যার জন্য নয়, বুলিয়ান এক্সপ্রেশনেও প্রয়োগ করা যেতে পারে।
কিন্তু, আপনি ইতিমধ্যে জানেন, আছে &&
এবং ||
অপারেটর. |
কেন আমরা এর পরিবর্তে ||
এবং &
পরিবর্তে ব্যবহার করব &&
? এই কোন বিন্দু আছে? মনে হয় আছে। মাঝে মাঝে।
এবং লজিক্যাল অপারেটর একটি তথাকথিত অলস নীতি অনুসরণ করে বাম থেকে ডানে কার্যকর করা হয় ||
।&&
(expression1) || (expression2) || (expression3)
যদি expression1
সমান হয় true
, তাহলে মূল্যায়ন করার কোন মানে নেই expression2
এবং expression3
: ফলাফল true
নির্বিশেষে হবে।
তদনুসারে, অভিব্যক্তি মূল্যায়ন করার সময় (তারা বাম থেকে ডানে মূল্যায়ন করা হয়), যত তাড়াতাড়ি আমরা পাই true
, বাকি অভিব্যক্তিগুলির মূল্যায়ন বাদ দেওয়া হয় । এবং যদি expression2
এবং expression3
পদ্ধতি কল অন্তর্ভুক্ত, এই পদ্ধতি কল করা হবে না !
একই &&
লজিক্যাল অপারেটরের জন্য যায়:
(expression1) && (expression2) && (expression3)
যদি expression1
সমান হয় false
, তাহলে মূল্যায়ন করার কোন মানে নেই expression2
এবং expression3
: ফলাফল false
নির্বিশেষে হবে।
এটি একটি গুরুত্বপূর্ণ সত্য যা আপনাকে কিছু লিখতে দেয়:
String s = null;
if (s != null && s.length() > 0) {
উপরের উদাহরণটি কখনই আপনি NullPointerException পাবেন না , কারণ s.length()
শুধুমাত্র প্রথম অংশটি হলেই কার্যকর করা s! = null
হবে true
।
যদি s
সমান হয় null
, অপারেটরের বাম দিকের অংশটি &&
হয় false
, তাহলে পুরো বুলিয়ান এক্সপ্রেশনের ফলাফল হয় false
, তাই ডানদিকের অংশটি ( s.length() > 0
) মূল্যায়ন করা হয় না।
আপনি যদি |
অপারেটর বা &
অপারেটর ব্যবহার করেন, তাহলে কোন অলস মূল্যায়ন হবে না : প্রতিটি উপ-প্রকাশ সর্বদা মূল্যায়ন করা হবে।
2. জাভাতে অপারেশন অগ্রাধিকার
আপনি সম্ভবত আপনার উচ্চ বিদ্যালয়ের গণিত ক্লাস থেকে মনে রাখবেন, যোগ অপারেটরের তুলনায় গুণ অপারেটরের অগ্রাধিকার বেশি। বন্ধনীগুলির আরও বেশি অগ্রাধিকার রয়েছে: বন্ধনীতে অভিব্যক্তিগুলি প্রথমে মূল্যায়ন করা হয়, তারপর গুণ এবং ভাগ এবং তারপর যোগ এবং বিয়োগ।
জাভাতে অপারেটরদেরও অগ্রাধিকারের একটি আদেশ রয়েছে। পার্থক্য হল যে ক) তাদের মধ্যে কিছুটা বেশি আছে, খ) কিছু অপারেটরের জন্য, অপারেন্ডগুলি বাম থেকে ডানে মূল্যায়ন করা হয়, অন্যদের জন্য - ডান থেকে বামে।
এখানে সমস্ত জাভা অপারেটরগুলির সাথে একটি টেবিল রয়েছে:
শ্রেণী | অপারেটর | সহযোগী |
---|---|---|
পোস্টফিক্স | () [] . |
বাম থেকে ডানে |
ইউনারি | ++ -- ! ~ |
ডান থেকে বাম |
গুণক | * / % |
বাম থেকে ডানে |
সংযোজন | + - |
বাম থেকে ডানে |
স্থানান্তর | >> >>> << |
বাম থেকে ডানে |
রিলেশনাল | > >= < <= |
বাম থেকে ডানে |
সমতা | == != |
বাম থেকে ডানে |
বিটওয়াইজAND |
& |
বাম থেকে ডানে |
Exclusive OR (XOR) |
^ |
বাম থেকে ডানে |
বিটওয়াইজOR |
| |
বাম থেকে ডানে |
যৌক্তিকAND |
&& |
বাম থেকে ডানে |
যৌক্তিকOR |
|| |
বাম থেকে ডানে |
শর্তসাপেক্ষ | ?: |
ডান থেকে বাম |
অ্যাসাইনমেন্ট | = += -= *= /= %= >>= <<= &= ^= |= |
ডান থেকে বাম |
কমা | , |
বাম থেকে ডানে |
শীর্ষ লাইনে সর্বোচ্চ অগ্রাধিকার সহ অপারেটর রয়েছে। ()
সুস্পষ্টভাবে অগ্রাধিকার সেট করতে বন্ধনী ব্যবহার করা হয়। বর্গাকার বন্ধনী []
একটি অ্যারে ভেরিয়েবলের একটি নির্দিষ্ট সূচকে একটি উপাদান অ্যাক্সেস করতে ব্যবহার করা হয়। ডট অপারেটর ( .
) একটি বস্তু বা শ্রেণীর একটি রেফারেন্স ব্যবহার করে ক্ষেত্র এবং পদ্ধতি অ্যাক্সেস করতে ব্যবহৃত হয়।
অপারেটররা টেবিলে যত নিচে থাকবে, তাদের অগ্রাধিকার তত কম হবে।
আপনি যদি একটি অভিব্যক্তিতে একাধিক অপারেটর ব্যবহার করেন তবে অলস হবেন না: বন্ধনী যুক্ত করুন।
জাভাতে, আপনি কিছু লিখতে পারেন if (a & 1<< b > ~c)
, কিন্তু আপনার উচিত নয়। আপনি শুধুমাত্র কম্পাইলারের জন্য নয়, অন্যান্য প্রোগ্রামারদের জন্যও কোড লিখছেন। কোড যত বেশি পঠনযোগ্য, তত ভাল।
3. উপসর্গ এবং পোস্টফিক্স বৃদ্ধি
আপনি ইতিমধ্যেই জানেন, জাভাতে একটি ইনক্রিমেন্ট অপারেটর ( ++
) এবং একটি হ্রাস অপারেটর ( --
) রয়েছে। যথাক্রমে, তারা একটি ভেরিয়েবলের মান বাড়ায় এবং হ্রাস করে 1
।
আপনি সম্ভবত জানেন না যে এই অপারেটর দুটি ধরনের আছে: উপসর্গ (অপারেটর ভেরিয়েবলের আগে স্থাপন করা হয়) এবং পোস্টফিক্স (ভেরিয়েবলের পরে অপারেটর স্থাপন করা হয়)। এবং দুই ধরনের অপারেটর একটু ভিন্নভাবে কাজ করে।
জাভাতে, আপনি এই মত একটি অভিব্যক্তি লিখতে পারেন:
int a = 5;
int b = a++;
যদি ++
অপারেটরটি একটি ভেরিয়েবলের পরে উপস্থিত হয় এবং ভেরিয়েবলটি কিছু এক্সপ্রেশনের অংশ হয় (উপরের উদাহরণের মতো), তবে এক্সপ্রেশনটি ভেরিয়েবলের বর্তমান মান ব্যবহার করবে, এবং শুধুমাত্র তারপরে ভেরিয়েবলটি দ্বারা বৃদ্ধি পাবে 1
।
অন্য কথায়, এরকম কিছু ঘটবে:
int a = 5;
int b = a;
a = a + 1;
যে, b
হবে 5
, 6
আপনি প্রথম নজরে মনে হতে পারে না.
যদি ++
অপারেটরটি ভেরিয়েবলের আগে থাকে এবং ভেরিয়েবলটি কিছু এক্সপ্রেশনের অংশ হয়, তবে এটি প্রথমে দ্বারা বৃদ্ধি করা হবে 1
এবং শুধুমাত্র তারপরে এর মানটি এক্সপ্রেশনে ব্যবহার করা হবে।
int a = 5;
int b = ++a;
উপরের উদাহরণটি নিম্নলিখিত উদাহরণের সমতুল্য:
int a = 5;
a = a + 1;
int b = a;
এখানে, b
সমান হবে 6
।
এমনকি অন্য কেউ জাভা প্রোগ্রামার কিনা তা নির্ধারণ করতে জাভা প্রোগ্রামারদের দ্বারা ব্যবহৃত একটি উদাহরণ রয়েছে:
int a = 5;
int b = ++a + ++a;
হ্যাঁ, আপনি এটিও লিখতে পারেন।
এই উদাহরণটি ঠিক সূক্ষ্মভাবে কম্পাইল করবে এবং এরকম কিছুতে পরিণত হবে:
int a = 5;
a = a + 1;
int v1 = a;
a = a + 1;
int v2 = a;
int b = v1 + v2;
অপারেটরের জন্য --
, সবকিছু ঠিক একই।
GO TO FULL VERSION