Operator Precedence এর সংজ্ঞা
JavaScript Operator Precedence বলতে বোঝায়, কোনো প্রোগ্রামে একাধিক অপারেটর ব্যবহার করা হলে কোনটা আগে execute হবে আর কোনটা পরে execute হবে সেই নিয়ম। উদাহরণ হিসেবে ধরুন:
let result = 10 + 5 * 2; console.log(result); // Output: 20 (না 30?) এখানে * (গুণ) এর precedence বেশি, তাই আগে multiplication হবে (5*2 = 10), তারপর addition হবে (10+10 = 20)। যদি precedence না জানা থাকে তবে ভুল result মনে হতে পারে।
কেন Operator Precedence গুরুত্বপূর্ণ
Operator Precedence জানা না থাকলে আপনার কোডে অনেক logical error তৈরি হবে। যেমন, একটা calculation, একটা condition বা একটা logical comparison করার সময় আপনি যদি মনে করেন একটা operator আগে execute হবে, অথচ বাস্তবে অন্যটা আগে execute হয়ে যায়, তাহলে পুরো program-এর আউটপুট বদলে যেতে পারে।
উদাহরণ হিসেবে ধরুন –
let x = 10; let y = 20; let result = x + y > 25; console.log(result); // true or false? এখানে + এবং > উভয় অপারেটর আছে। precedence অনুযায়ী + আগে হবে, তারপর comparison হবে। অর্থাৎ (10+20) > 25 → 30 > 25 → true।
Associativity কীভাবে কাজ করে
যখন দুইটা অপারেটরের precedence সমান হয়, তখন associativity ঠিক করে দেয় কোন দিকে থেকে execution হবে।
Left-to-Right Associativity
অধিকাংশ অপারেটর (যেমন +, -, *, /) left-to-right associativity ফলো করে। মানে equation বাম দিক থেকে ডান দিকে evaluate হবে।
let result = 50 / 5 / 2; console.log(result); // (50/5)=10 → 10/2=5 Right-to-Left Associativity
কিছু অপারেটর যেমন = (assignment), ** (exponentiation) right-to-left associativity ফলো করে।
let a = b = c = 10; console.log(a, b, c); // 10, 10, 10 let result = 2 ** 3 ** 2; console.log(result); // 2 ** (3 ** 2) = 2 ** 9 = 512
JavaScript Operator Precedence টেবিল
JavaScript-এ প্রতিটি অপারেটরের একটা নির্দিষ্ট precedence level আছে। এই precedence যত বেশি হবে, তত আগে সেই operator execute হবে।
সর্বোচ্চ Precedence বিশিষ্ট অপারেটর
() (parentheses), ++, --, new, typeof, await ইত্যাদি।
মধ্যম Precedence অপারেটর
*, /, %, +, -, <<, >> ইত্যাদি।
সর্বনিম্ন Precedence অপারেটর
=, +=, -=, ? :, , (comma operator) ইত্যাদি।
Operator Precedence এর কার্যপদ্ধতি উদাহরণ সহ
Mathematical Expression এ Precedence
let result = 10 + 20 * 3; console.log(result); // 70 (না 90?) কারণ multiplication-এর precedence addition এর থেকে বেশি। তাই আগে 20*3 = 60, তারপর 10+60 = 70।
Assignment Operator এর ক্ষেত্রে Precedence
let x, y, z; x = y = z = 5; console.log(x, y, z); // সবগুলা 5 হবে Logical Operator এর Precedence
let result = true || false && false; console.log(result); // true কারণ && এর precedence বেশি, তাই আগে false && false = false, তারপর true || false = true।
Related Posts
Associativity এবং Operator Precedence এর সম্পর্ক
Operator Precedence সবসময় বলে দেয় কোন অপারেটর আগে কাজ করবে। কিন্তু যখন দুইটা অপারেটরের precedence একই হয়, তখন সিদ্ধান্ত নেয় Associativity। একে সহজভাবে বোঝা যায়—একই লেভেলের অপারেটরগুলো বাম দিক থেকে ডান দিকে হবে, নাকি ডান দিক থেকে বাম দিকে হবে।
Left-to-Right Associativity
+, -, *, /, <<, >> প্রায় সবকিছু left-to-right associativity ফলো করে। মানে equation solve হবে একেবারে school math এর মত।
let result = 100 - 50 - 25; console.log(result); // (100-50)=50 → 50-25=25 যদি left-to-right না হত, তবে (100-(50-25)) = 75 হতো। তাই associativity ঠিক করে execution order।
Right-to-Left Associativity
Assignment operators (=, +=, -=, *=, /=) এবং exponentiation operator (**), right-to-left associativity ফলো করে।
let a = b = c = 20; console.log(a, b, c); // 20 20 20 let power = 2 ** 3 ** 2; console.log(power); // 2 ** (3 ** 2) = 2 ** 9 = 512 এখানে যদি left-to-right হত, তাহলে (2**3)**2 = 64 আসতো। কিন্তু JavaScript right-to-left বলে, তাই সঠিক result = 512।
Practical Examples & Use Cases
Theory জানলে হবে না, JavaScript Operator Precedence এর আসল শক্তি বোঝা যায় যখন আমরা বাস্তবে কাজ করি। নিচে কিছু practical example দেয়া হলো।
Arithmetic Expressions
let result = (10 + 5) * 2; console.log(result); // 30
let result2 = 10 + 5 * 2;
console.log(result2); // 20
এখানে parentheses (()) ব্যবহার করলে precedence পুরোপুরি override করা যায়।
Conditional Statements
let age = 18; let canVote = age >= 18 && age <= 60; console.log(canVote); // true এখানে comparison operators (>=, <=) এর precedence logical operator (&&) এর থেকে বেশি। তাই আগে comparison হবে, তারপর logical evaluation হবে।
Complex Expressions এ Parentheses এর ব্যবহার
let result = (5 + 10) * (20 / (2 ** 2)); console.log(result); // (15) * (20/4) = 15*5 = 75 Parentheses না দিলে এই result একেবারে আলাদা হত। তাই complex expression এ সবসময় () ব্যবহার করা ভালো। এটা readability ও বাড়ায় এবং ভুল কম হয়।
সারসংক্ষেপ
JavaScript এ Operator Precedence এবং Associativity বুঝা খুব জরুরি। এর মাধ্যমে আপনি বুঝতে পারবেন কোন অপারেটর আগে execute হবে এবং কিভাবে expression evaluate হবে। Precedence না বুঝলে code এ logical bug আসতে বাধ্য। কিন্তু parentheses ব্যবহার করে সবকিছু সহজে control করা যায়।
FAQs Q1: Operator Precedence এবং Associativity এর মধ্যে পার্থক্য কী?Precedence বলে কোন operator আগে কাজ করবে। Associativity বলে কোন দিক থেকে evaluate হবে।
Q2: সব operator কি left-to-right associative?না। Assignment এবং exponentiation operators right-to-left associative।
Q3: Parentheses কি সব সময় precedence override করতে পারে?হ্যাঁ। Parentheses সবসময় highest precedence পায়।
Q4: Logical operators (&& এবং ||) এর precedence কোনটা বেশি?&& এর precedence বেশি।
Q5: Operator Precedence না জানলে কি হবে?কোডে ভুল logical output আসবে, আর debugging কঠিন হয়ে যাবে।