Operator Precedence:


ধরো তোমাকে একটা ছোট অংক কষতে দেয়া হলো এরকম: 12 + 4 X 8

এটার রেজাল্ট তুমি অবশ্যই 128 বলবে না। এটার রেজাল্ট তো 44। কারণ তুমি জানো যে আগে গুণের কাজ হবে তারপর যোগের কাজ হবে।

খুব সহজভাবে এটাই হচ্ছে Operator Precedence । অর্থাৎ অপারেটরের প্রাধান্য বা কম্পিউটার প্রোগ্রামে একাধিক অপারেটর ব্যবহার করা হলে কোন অপারেটরের কাজ আগে হবে আর কোনটার কাজ পরে হবে।

একটা উদাহরণ দেখি:




আউটপুট:




আউটপুট:

এখানে আগে * অপারেটরের কাজ হয়েছে তারপর + অপারেটরের কাজ হয়েছে।

এরকম প্রোগ্রামে কোন অপারেটরের কাজ আগে হবে আর কোনটার কাজ পরে হবে তা নিচে দেয়া হলো।

Precedence

Operator

Type

Associativity

15

()
[]
·

Parentheses
Array subscript
Member selection

বাম থেকে ডানে

14

++
--

Unary post-increment
Unary post-decrement

ডান থেকে বামে

13

++
--
+
-
!
~
( type )

Unary pre-increment
Unary pre-decrement
Unary plus
Unary minus
Unary logical negation
Unary bitwise complement
Unary type cast

ডান থেকে বামে

12

*
/
%

Multiplication
Division
Modulus

বাম থেকে ডানে

11

+
-

Addition
Subtraction

বাম থেকে ডানে

10

<<
>>
>>>

Bitwise left shift
Bitwise right shift with sign extension
Bitwise right shift with zero extension

বাম থেকে ডানে

9

<
<=
>
>=
instanceof

Relational less than
Relational less than or equal
Relational greater than
Relational greater than or equal
Type comparison (objects only)

বাম থেকে ডানে

8

==
!=

Relational is equal to
Relational is not equal to

বাম থেকে ডানে

7

&

Bitwise AND

বাম থেকে ডানে

6

^

Bitwise exclusive OR

বাম থেকে ডানে

5

|

Bitwise inclusive OR

বাম থেকে ডানে

4

&&

Logical AND

বাম থেকে ডানে

3

||

Logical OR

বাম থেকে ডানে

2

? :

Ternary conditional

ডান থেকে বামে

1

=
+=
-=
*=
/=
%=

Assignment
Addition assignment
Subtraction assignment
Multiplication assignment
Division assignment
Modulus assignment

ডান থেকে বামে



এখানে Precedence কলামে দেখো সর্ব উপরে আছে 15 আর সর্ব নিচে আছে 1. এখানে 15 এর প্রাধান্য সবচে’ বেশি এবং 1 এর প্রাধান্য সবচে’ কম।

আর একদম ডান পাশের কলামে দেখো “বাম থেকে ডানে” বা “ডান থেকে বামে” লেখা আছে। এর অর্থ হলো কোন একটা কোডে যদি এই অপারেটর টাইপের সবগুলো অপারেটরই থাকে বা একাধিক অপারেটর থাকে তাহলে বাম থেকে ডানে বা ডান থেকে বামে প্রোগ্রাম কাজ করবে। যেমন ছোট একটা উদাহরণ দেখো:

এটি 11 নাম্বার Precedence এর জন্য




আউটপুট:

আউটপুট:




আউটপুট:

এখানে প্রোগ্রাম প্রথমে 12 থেকে 4 বিয়োগ করেছে তারপর ফলাফলের সাথে 9 যোগ করেছে। তার অর্থ হলো এখানে – এবং + দুইটি অপারেটর ব্যবহৃত হয়েছে। যেগুলো একই Precedence এর। এবং Associativity তে বলা আছে বাম থেকে ডানে প্রোগ্রাম কাজ করবে। সুতরাং 12 থেকে 4 বিয়োগ করেছে তারপর ফলাফলের সাথে 9 যোগ করেছে।

এখন দেখো এই উদাহরণে ছোট্ট একটা পরিবর্তন করি।




আউটপুট:

4 এবং 9 কে আমরা একটা Parentheses এর মধ্যে নিয়েছি।

এবং আউটপুট দেখো:




আউটপুট:

কেন এমন হলো?

দেখো Parentheses এর Precedence হচ্ছে 15 অর্থাৎ এর প্রাধান্য সবার চেয়ে বেশি। যার কারণেই প্রোগ্রাম প্রথমে Parentheses এর কাজ করেছে অর্থাৎ 4 এবং 9 কে যোগ করেছে তারপর ফলাফল থেকে 12 কে বিয়োগ করে আউটপুট এসেছে -1।

Precedence টেবিলে বেশি কিছু অপারেটর দেখছো তোমার অপরিচিত। চিন্তিত হবার কিছু নেই। ওই অপারেটরগুলো নিয়ে আমরা আলোচনা করি নি কারণ সেগুলো খুব কম সময়ই তোমাদের কাজের ক্ষেত্রে লাগবে। আর অনেক পরে হয়তো যখন লাগবে তখন তোমরা এমনিতেই শিখে নিতে পারবে আমার বিশ্বাস।