অপারেটর
বিভিন্ন ম্যাথম্যাটিক্যাল অথবা লজিক্যাল অপারেশনের জন্য অপারেটর ব্যবহার করা হয়। যা এক বা একাদিক ভ্যারিয়বল, কনস্ট্যান্ট অথবা ভ্যালুর উপর প্রয়োগ করা যায়। অন্যান্য প্রোগ্রামিং এর মত সুইফটের অপারেটর গুলো হচ্ছেঃ
- অ্যারিথম্যাটিক অপারেটর: + – * /
- এসানমেন্ট অপারেটরঃ =, += -=, *=
- রিমাইন্ডার বা ভাগশেষঃ %
- ইউনারি অপারেটরঃ -a, +a
- কম্পারিজন বা তুলনা করার জন্য অপারেটরঃ ==, !=, >
- টার্নারি অপারেটরঃ _ ?, _ : _
- Nil-coalescing অপারেটর: ??
- রেঞ্জ অপারেটরঃ a…b, a…<b
- লজিক্যাল অপারেটরঃ !, &&, !!
- আইডেন্টিটি অপারেটরঃ ===, !==
অ্যারিথম্যাটিক অপারেটরঃ
সুইফটের স্ট্যান্ডার্ড ম্যাথ বা অ্যারিথমেটিক অপারেটর গুলো হচ্ছে যোগ (+
), বিয়োগ (-
), গুণ (*
), ভাগ (/
)
2 + 2 // equals 4
6 - 5 // equals 1
2 * 3 // equals 6
6 / 2 // equals 3
দুই টা ভ্যারিয়েবল যোগ, বিয়োগ, গুন ভাগ এসব করা সহজ। ভ্যারিয়েবল গুলোর মধ্যে প্রয়োজনীয় অপারেটত বসিয়ে দিলেই হবে।
রিমাইন্ডারঃ
প্রোগ্রামিং এ ভাগশেষ বের করা গুরুতপূর্ণ একটা অপারেশন। আর বিভিন্ন প্রোগ্রামিং এর মত সুইফটে রিমাইন্ডার অপারেটর হচ্ছে %
। যেমনঃ
print(5%2) // output: 1
এসাইনমেন্ট অপারেটরঃ
কোন ভ্যারিয়েবল অথবা কনস্ট্যান্টে ভ্যালু এসাইন করতে অথবা কোন ভ্যারিয়েবলের ভ্যালু আপডেট করতে এসাইনমেন্ট অপারেটর ব্যবহার করা হয়। +=
ব্যবহার করে ভ্যালু যোগ করে এসাইন করা হয় এবং -=
ব্যবহার করে ভ্যালু বিয়োগ করে এসাইন করা হয়। এগুলোকে আবার কম্পাউন্ড অপারেটরও বলা যেমনঃ
var x = 5 // assigning a value to a variable
x += 2 // add and assign
x -= 3 // subtract and assign
print(x) // output: 4
Increment & Decrement অপারেটর
অন্যান্য প্রোগ্রামিং এর মত ইঙ্ক্রিমেন্টের কাজ আমরা কম্পাউন্ড অপারেটর ব্যবহার করে করতে পারি। যেমন ইঙ্ক্রিমেন্ট এবং ডিক্রিমেন্ট এভাবে করতে পারিঃ
var x = 4 y = 5 x += 1 y -= 1
কমপারিজন অপারেটর:
দুইটা ভ্যালু অথবা ভ্যারিয়েবলের তুলনা করার জন্য কম্পারিজন অপারেটর ব্যবহার করা হয়। তুলনা করার পর একটা বুলিয়ান ভ্যালু True অথবা False রিটার্ন করে। যেমনঃ
a = 4
b = 5
a == b
a != b
a < b
a > b
a <= b
a >= b
a === b
a !== b
উপরের Comparison Operator গুলো দিয়ে একটি প্রোগ্রাম লেখার চেষ্টা করিঃ
var a = 2 , b = 8;
if a < b {
print( "a is less then b")
}
এখানে a < b, a যদি b থেকে ছোট হয়, তাহলে এটা true হবে এবং ব্র্যাকেটের ভেতরের কোড গুলো এক্সিকিউট করবে। যদি false হয়, তাহলে ব্র্যাকেটের ভেতরের কোড গুলো এক্সিকিউট করবে না।
আমরা ইচ্ছে করলে print এর ভেতরে আমাদের ভ্যারিয়েবল প্রিন্ট করতে পারি। তার জন্যঃ
var a = 2 , b = 8;
if a < b {
print("\(a) is less then \(b)")
}
এখানে print এ স্ট্রিং এর সাথে একটি ভ্যারিয়েবল এর মান দেখানোর জন্য একটি ব্ল্যাক স্ল্যাস () লিখে এরপর ব্র্যাকেটের ভেতর ভ্যারিয়েবলটি লিখলে তা স্ট্রিং এর ভেতরে দেখাবে। যেমন উপরে আমরা (a) এবং (b) দিয়ে স্টিং এর ভেতর একটি ভ্যারিয়েবল এর মান দেখিয়েছি।
উপরের মত অন্যান্য যে কোন Comparison করে আমরা প্রোগ্রাম লিখতে পারি, যেমনঃ
var a = 2 , b = 8;
if a < b {
print("(a) is greater then \(b)")
} else {
print( "\(a) is less then \(b)")
}
if a==b {
print( "\(a) is equal to \(b)")
} else {
print( "\(a) is not equal t \(b)")
}
এভাবে অন্যান্য গুলো। আমরা লক্ষ করে থাকব যে অন্যান্য ল্যাঙ্গুয়েজের মত দুইটা ভ্যারিয়েবল তুলনা করার সময় ব্র্যাকেট ব্যবহার করতে হয় না। আবার ব্যবহার করলেও ভুল হবে না। যেমনঃ
var a = 2 , b = 8;
if (a != b) {
print( "\(a) is not equal to \(b)")
}
টার্নারি অপারেটর
টার্নারি অপারেটরকে বলতে পারি if else এর শর্ট ফর্ম, যেটা সাধারনত ইনলাইনে ব্যবহার করা হয়। যেমন
if condition {
expression_if_true
} else {
expression_if_false
}
উপরের if … else এর টার্নারি অপারেটর রূপ হবেঃ
condition ? expression_if_true : expression_if_false
একটা উদাহরণ দেখিঃ
let number = 10
let result = (number > 5) ? "Greater than 5" : "Not greater than 5"
print(result) // output: Greater than 5
নিল কোল্যাসিং অপারেটরঃ
সুইফটে কোন অপশনার ভ্যালুর ডিফল্ট ভ্যালু সেট করতে নিল কোল্যাসিং অপারেটর (??
) ব্যবহার করা হয়। যখন ঐ ভ্যালু নিল পায়, তখন ডিফল্ট ভ্যালু ব্যবহার করে। যেমনঃ
var number: Int?
print(number ?? 7) // output: 7
উপরে আমরা একটা অপশনাল ভ্যারিয়েবল তৈরি করেছি যার ভ্যালু এখনো সেট করিনি। আর তাই ভ্যারিয়েবলটির ভ্যালু হচ্ছে nil
। প্রোগ্রামে এমন nil
ভ্যালু ফেলে প্রোগ্রাম ক্র্যাস করতে পারে। আর তাই সেইফ গার্ড হিসেবে আমরা নিল কোল্যাসিং অপারেটরের মাধ্যমে একটা ডিফল্ট ভ্যালু ব্যবহার করতে পারি এমন nil ভ্যালু গুলোর ক্ষেত্রে।
রেঞ্জ অপারেটর
বিভিন্ন লুপ বা ইটারেশনে রেঞ্জ অপারেটর (a…b) অথবা (a..<b) ব্যবহার করা হয়। (a…b) এর ক্ষেত্রে a থেকে b পর্যন্ত সব গুলো নাম্বার রেঞ্জে থাকবে। আর (a..<b) এর ক্ষেত্রে b রেঞ্জে থাকবে না।
for number in 1...5 {
print(number)
}
// Output: 1, 2, 3, 4, 5
for number in 1..<5 {
print(number)
}
// Output: 1, 2, 3, 4
কাস্টম রেঞ্জঃ
রেঞ্জ তৈরির সময় আমরা নির্দিষ্ট ভ্যালু পর পর রেঞ্জ তৈরি করতে পারি stride ফাংশনের মাধ্যমে। যেমন 0 থেকে 10 পর্যন্ত প্রতি দুইটা ভ্যালু পর পর নাম্বার গুলো পেতে পারি এভাবেঃ
let customRange = stride(from: 0, to: 10, by: 2)
print(customRange) // 0, 2, 4, 6, 8
লজিক্যাল অপারেটর
তিন ধরনের লজিক্যাল অপারেটর রয়েছে। Logical AND, Logical OR, Logical NOT
Logical And তখনি সত্য হবে যখন এর প্রত্যেকটি Operand সত্য হবে। যেমনঃ
var a = 2 , b = 8;
if (a != b) & (a < b) {
print("\(a) is not equal to \(b) and \(a) less then \(b)")
}
এখানে (a != b) এবং (a < b) দুইটাই যদি সত্য হয়, তাহলে ব্র্যাকেটের ভেতরের কোড এক্সিকিউট করবে। Comparison করার সময় ব্র্যাকেট গুলো ব্যবহার না করলেও প্রোগ্রাম কাজ করবেঃ
var a = 2 , b = 8;
if a != b & a < b {
print( "\(a) is not equal to \(b) and \(a) less then \(b)")
}
আবার একই সাথে দুই এর অধিক Comparison আমরা করতে পারি। যেমনঃ
var a = 2 , b = 8;
if a != b & a > 5 {
print( "\(a) is not equal to \(b) and \(a) less then \(b)")
}
Logical OR তখনি সত্য হবে যখন এর যে কোন একটি Operand সত্য হবে। যেমনঃ
var a = 2 , b = 8; if (a != b) || (a &amp;amp;amp;gt; b) { print( &amp;amp;amp;quot;it's a true comparison&amp;amp;amp;quot;) }
উপরের comparison এর একটি সঠিক, আরেকটি ভুল, তারপর ও আমাদের if স্টেটমেন্ট এর ভেতরের কোড গুলো এক্সিকিউট হচ্ছে। OR অপারেটরেও আমরা একের অধিক Comparison করতে পারি।
Logical NOT অপারেটর একটি অপারেন্ড এর উপর কাজ করে। কাজ করার পর যদি Operand টি true হয়, তাকে false করে দেয়। যদি Operand টি false থাকে, তাকে true করে দেয়। যেমনঃ
var isWinter = true
if !isWinter {
print("it's not winter")
} else {
print("It's winter")
}
আইডেন্টিটি অপারেটরঃ
দুইটা অবজেক্ট একই কিনা, তা দেখার জন্য আইডেন্টিটি অপারেটর (===, !==) ব্যবহার করা হয়। যেমনঃ
import Foundation
let object1 = SomeClass()
let object2 = object1
if object1 === object2 {
print("object1 and object2 refer to the same instance.")
}
class SomeClass{
}
উপরে যেহেতু object1 এবং object2 একই অবজেক্ট, তাই আউটপুট হবে object1 and object2 refer to the same instance.