[১.৫] অপারেটর (Operators)
অপারেটর যেকোনো প্রোগ্রামিং ল্যাংগুয়েজের ভিত্তি। এর ব্যবহার ছাড়া Go এর কার্যকারিতা অসম্পূর্ণ। অপারেটর আমাদের অপারেন্ডে বিভিন্ন ধরণের অপারেশন করার অনুমতি দেয়। Go তে অপারেটরদের তাদের বিভিন্ন কার্যকারিতার উপর ভিত্তি করে শ্রেণীবদ্ধ করা যেতে পারে:
- অ্যারিথমেটিক অপারেটর (Arithmetic Operators)
- কম্প্যারিসন অপারেটর (Comparison Operators)
- লজিক্যাল অপারেটর (Logical Operators)
- বিটওয়াইজ অপারেটর (Bitwise Operators)
- অ্যাসাইনমেন্ট এবং শর্টহ্যান্ড অপারেটর (Assignment & Shorthand Operators)
- অন্যান্য অপারেটর (Other Operators)
[১.৫.১] অ্যারিথমেটিক অপারেটর (Arithmetic Operators)
Go-তে arithmetic অথবা সংখ্যাসূচক অপারেশনের জন্য নিচের অপারেটরগুলো ব্যবহার করা হয়
- Addition: ‘+’ অপারেটর দুটি অপারেন্ড যোগ করে।
- Subtraction: ‘-‘ অপারেটর দুটি অপারেন্ড বিয়োগ করে।
- Multiplication : ‘*’ অপারেটর দুটি অপারেন্ডকে গুণ করে।
- Division : ‘/’ অপারেটর প্রথম অপারেন্ডকে দ্বিতীয় অপারেন্ড দ্বারা ভাগ করে।
- Modulus: প্রথম অপারেন্ডটিকে দ্বিতীয় অপারেন্ড দ্বারা ভাগ করা হলে ‘%’ ভাগশেষ ফেরত দেয়।
এদের প্রয়োগ আমরা নিচের কোডে দেখতে পাবো –
package main
import "fmt"
func main() {
p := 34
q := 20
// Addition
result1 := p + q
fmt.Printf("Result of p + q = %d", result1)
// Subtraction
result2 := p - q
fmt.Printf("\nResult of p - q = %d", result2)
// Multiplication
result3 := p * q
fmt.Printf("\nResult of p * q = %d", result3)
// Division
result4 := p / q
fmt.Printf("\nResult of p / q = %d", result4)
// Modulus
result5 := p % q
fmt.Printf("\nResult of p %% q = %d", result5)
}
আউটপুট –
Result of p + q = 54
Result of p - q = 14
Result of p * q = 680
Result of p / q = 1
Result of p % q = 14
[১.৫.২] কম্প্যারিসন অপারেটর (Comparison Operators)
দুটি মানের তুলনা করার জন্য Comparison Operator ব্যবহার করা হয়। এক এক করে তাদের কাজ দেখা যাক :
- ‘=='(Equal To) অপারেটর, প্রদত্ত দুটি অপারেন্ড সমান কিনা তা চেক করে যদি সমান হয়, তাহলে true রিটার্ন করে. অন্যথা false রিটার্ন করে |
- ‘!='(Not Equal To) অপারেটর, প্রদত্ত দুটি অপারেন্ড সমান নয় কিনা তা চেক করে সমান না হলে true রিটার্ন করে। অন্যথায় false রিটার্ন করে |
- ‘>'(Greater Than) অপারেটর, প্রথম অপারেন্ডটি দ্বিতীয় অপারেন্ডের চেয়ে বড় কিনা তা চেক করে। যদি বড় হয়, এটা true রিটার্ন করে. অন্যথায়, এটি false রিটার্ন করে |
- ‘<‘(Less Than) অপারেটর, প্রথম অপারেন্ডটি দ্বিতীয় অপারেন্ডের চেয়ে ছোট কিনা তা check করে। যদি ছোট হয়, এটা true রিটার্ন করে. অন্যথায়, এটি false রিটার্ন করে |
- ‘>='(Greater Than Equal To) অপারেটর প্রথম অপারেন্ডটি দ্বিতীয় অপারেন্ডের চেয়ে বড় অথবা সমান কিনা তা check করে। যদি বড় অথবা সমান হয়, এটা true রিটার্ন করে. অন্যথায়, এটি false রিটার্ন করে |
- ‘<='(Less Than Equal To) অপারেটর, প্রথম অপারেন্ডটি দ্বিতীয় অপারেন্ডের চেয়ে ছোট অথবা সমান কিনা তা check করে। যদি ছোট অথবা সমান হয়, এটা true রিটার্ন করে । অন্যথায়, এটি false রিটার্ন করে।
এদের প্রয়োগ আমরা নিচের কোডে দেখতে পাবো –
// Go program to illustrate the use of Comparison operators
package main
import "fmt"
func main() {
p := 34
q := 20
// ‘=='(Equal To)
result1 := p == q
fmt.Println(result1)
// ‘!='(Not Equal To)
result2 := p != q
fmt.Println(result2)
// ‘<‘(Less Than)
result3 := p < q
fmt.Println(result3)
// ‘>'(Greater Than)
result4 := p > q
fmt.Println(result4)
// ‘>='(Greater Than Equal To)
result5 := p >= q
fmt.Println(result5)
// ‘<='(Less Than Equal To)
result6 := p <= q
fmt.Println(result6)
}
আউটপুট –
false
true
false
true
true
false
[১.৫.৩] লজিক্যাল অপারেটর (Logical Operators)
Logical operator এক বা একাধিক শর্তের উপর ভিত্তি করে সিদ্ধান্ত নেওয়ার জন্য ব্যবহার করা হয়।
- Logical AND : ‘&&’ অপারেটরের দুই পাশের শর্তই true হলে, ফাইনালি true রিটার্ন করে। অন্যথায়, এটি false রিটার্ন করে।
- Logical OR: ‘||‘ অপারেটরের দুই পাশের যেকোন একটি শর্ত true হলেই ‘||‘ অপারেটর true রিটার্ন করে. অন্যথায়, এটি false রিটার্ন করে |
- Logical NOT: ‘!‘ অপারেটরের পাশের শর্তটি false হলে true রিটার্ন করে. অন্যথায়, এটি false রিটার্ন করে।
এদের প্রয়োগ আমরা নিচের কোডে দেখতে পাবো –
// Go program to illustrate the use of logical operators
package main
import "fmt"
func main() {
var p int = 23
var q int = 60
if p != q && p <= q {
fmt.Println("True")
}
if p != q || p <= q {
fmt.Println("True")
}
if !(p == q) {
fmt.Println("True")
}
}
আউটপুট –
True
True
True
[১.৫.৪] বিটওয়াইজ অপারেটর (Bitwise Operators)
Go-তে 6 টি বিটওয়াইজ অপারেটর রয়েছে :
- & (bitwise AND): দুটি সংখ্যাকে অপারেন্ড হিসাবে নেয় এবং দুটি সংখ্যার প্রতিটি বিটে AND করে। উভয় বিট 1 হলেই AND এর ফলাফল 1 হয়।
- | (bitwise OR): দুটি সংখ্যাকে অপারেন্ড হিসাবে নেয় এবং দুটি সংখ্যার প্রতিটি বিটে OR করে। একাধিক বিটের যেকোনো একটি 1 হলে OR-এর ফলাফল হবে 1।
- ^ (bitwise XOR): দুটি সংখ্যাকে অপারেন্ড হিসাবে নেয় এবং দুটি সংখ্যার প্রতিটি বিটে XOR করে। দুটি বিট ভিন্ন হলে XOR এর ফলাফল 1 হয়।
- << (left shift): প্রথম সংখ্যাকে অপারেন্ড হিসেবে নেয় এবং এটিকে left shift করে। দ্বিতীয় সংখ্যাকে অপারেন্ড হিসেবে নেয় এবং এটি দ্বারা বুঝায় কত ঘর shift করবে।
- >> (right shift): প্রথম সংখ্যাকে অপারেন্ড হিসেবে নেয় এবং এটিকে right shift করে। দ্বিতীয় সংখ্যাকে অপারেন্ড হিসেবে নেয় এবং এটি দ্বারা বুঝায় কত ঘর shift করবে।
- &^ (AND NOT): এই অপারেটর দ্বারা ২ টি বিট এর মধ্যে AND অপারেশন চালিয়ে, প্রাপ্ত ফলাফলে NOT অপারেশন চালানো হয়।
এদের প্রয়োগ আমরা নিচের কোডে দেখতে পাবো –
// Go program to illustrate the use of bitwise operators
package main
import "fmt"
func main() {
p := 34
q := 20
// & (bitwise AND)
result1 := p & q
fmt.Printf("Result of p & q = %d", result1)
// | (bitwise OR)
result2 := p | q
fmt.Printf("\nResult of p | q = %d", result2)
// ^ (bitwise XOR)
result3 := p ^ q
fmt.Printf("\nResult of p ^ q = %d", result3)
// << (left shift)
result4 := p << 1
fmt.Printf("\nResult of p << 1 = %d", result4)
// >> (right shift)
result5 := p >> 1
fmt.Printf("\nResult of p >> 1 = %d", result5)
// &^ (AND NOT)
result6 := p &^ q
fmt.Printf("\nResult of p &^ q = %d", result6)
}
আউটপুট –
Result of p & q = 0
Result of p | q = 54
Result of p ^ q = 54
Result of p << 1 = 68
Result of p >> 1 = 17
Result of p &^ q = 34
[১.৫.৫] অ্যাসাইনমেন্ট এবং শর্টহ্যান্ড অপারেটর (Assignment & Shorthand Operators)
নাম থেকেই বোঝা যাচ্ছে, Assignment Operators দ্বারা অপারেটরের বামে থাকা ভ্যারিয়েবলে ভ্যালু অ্যাসাইন করা হয়। কিন্তু উভয় পাশের ডাটা টাইপ একই থাকা প্রয়োজন, অন্যথা কম্পাইল টাইমে এরর দেখা দিবে। Assignment এবং Shorthand Operators এর প্রকারভেদ –
- “=”(Simple Assignment): Assignment Operators গুলোর মধ্যে সবথেকে বেসিক অপারেটর হচ্ছে “=” । এর দ্বারা ডানের ভ্যালু সরাসরি বামের ভ্যারিয়েবলে অ্যাসাইন করা হয়।
- “+=”(Shorthand Add): এই অপারেটর দ্বারা “+” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X += Y দ্বারা X = X + Y বোঝানো হচ্ছে।
- “-=”(Shorthand Subtract): এই অপারেটর দ্বারা “-” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X -= Y দ্বারা X = X – Y বোঝানো হচ্ছে।
- “*=”(Shorthand Multiply): এই অপারেটর দ্বারা “*” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X *= Y দ্বারা X = X * Y বোঝানো হচ্ছে।
- “/=”(Shorthand Division): এই অপারেটর দ্বারা “/” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X /= Y দ্বারা X = X / Y বোঝানো হচ্ছে।
- “%=”(Shorthand Remainder): এই অপারেটর দ্বারা মডুলাস এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X %= Y দ্বারা X = X % Y বোঝানো হচ্ছে।
- “&=”(Shorthand Bitwise AND): এই অপারেটর দ্বারা “Bitwise AND” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X &= Y দ্বারা X = X & Y বোঝানো হচ্ছে।
- “|=”(Shorthand Bitwise OR): এই অপারেটর দ্বারা “Bitwise OR” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X |= Y দ্বারা X = X | Y বোঝানো হচ্ছে।
- “<<=”(Shorthand Left shift): এই অপারেটর দ্বারা “Left Shift” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X <<= Y দ্বারা X = X << Y বোঝানো হচ্ছে। অর্থাৎ এখানে Y পরিমাণ বিট বাম দিকে শিফট করে ডানে ততটা 0 বিট যোগ করা হয়।
- “>>=”(Shorthand Right shift): এই অপারেটর দ্বারা “Right Shift” এবং “=” এর কাজকে একত্র করা হয়। অর্থাৎ X >>= Y দ্বারা X = X >> Y বোঝানো হচ্ছে। অর্থাৎ এখানে Y পরিমাণ বিট ডান দিকে শিফট করে বামে ততটা 0 বিট যোগ করা হয়।
এদের প্রয়োগ আমরা নিচের কোডে দেখতে পাবো –
// Go program to illustrate the use of assignment operators
package main
import "fmt"
func main() {
var p int = 45
var q int = 50
// “=”(Simple Assignment)
p = q
fmt.Println(p)
// “+=”(Add Assignment)
p += q
fmt.Println(p)
// “-=”(Subtract Assignment)
p -= q
fmt.Println(p)
// “*=”(Multiply Assignment)
p *= q
fmt.Println(p)
// “/=”(Division Assignment)
p /= q
fmt.Println(p)
// “%=”(Modulus Assignment)
p %= q
fmt.Println(p)
}
আউটপুট –
50
100
50
2500
50
0
[১.৫.৬] অন্যান্য অপারেটর (Other Operators)
- &: এই অপারেটর ভ্যারিয়েবলের মেমোরি অ্যাড্রেস নির্দেশ করে।
- *: এই অপারেটর ভ্যারিয়েবলের মেমোরি অ্যাড্রেসে রাখা মান নির্দেশ করে।
- <-: এটি একটি চ্যানেল থেকে একটি মান রিসিভ করতে এবং কোনো চ্যানেলে মান সেন্ড করতে ব্যবহৃত হয়।
// Go program to illustrate the use of Other Operators
package main
import "fmt"
func main() {
a := 4
// Using address of operator(&) and
// pointer indirection(*) operator
b := &a
fmt.Println(*b)
*b = 7
fmt.Println(a)
}
আউটপুট –
4
7