Swift-এ এক্সটেনশন (Extension) একটি শক্তিশালী ফিচার, যা স্ট্যান্ডার্ড লাইব্রেরি বা আপনার তৈরি করা ক্লাস, স্ট্রাক্ট, এনাম, বা প্রোটোকলে নতুন ফাংশনালিটি যোগ করতে দেয়, তা সরাসরি সেই কোডে অ্যাক্সেস না করেও। এক্সটেনশন ব্যবহার করে আপনি Swift-এর স্ট্যান্ডার্ড টাইপ (যেমন String, Array, Int) বা কাস্টম টাইপগুলিতে নতুন মেথড, প্রোপার্টি, এবং সাবস্ক্রিপ্ট যোগ করতে পারেন।
কেন এক্সটেনশন ব্যবহার করা হয়?
- কোডকে মডুলার করা: এক্সটেনশন ব্যবহার করে আপনি বড় কোডকে ছোট ছোট অংশে ভাগ করতে পারেন এবং টাইপগুলিতে নির্দিষ্ট ফাংশনালিটি আলাদা করে রাখতে পারেন।
- স্ট্যান্ডার্ড লাইব্রেরি বা থার্ড-পার্টি কোড পরিবর্তন না করেও নতুন ফাংশনালিটি যোগ করা: Swift-এর স্ট্যান্ডার্ড টাইপগুলিতে যেমন
StringবাIntএ নতুন মেথড যোগ করতে পারেন, যা সেই কোডকে পরিবর্তন না করেও ব্যবহার করা যায়। - কাস্টমাইজড ফাংশনালিটি: আপনার নির্দিষ্ট চাহিদা অনুযায়ী টাইপের নতুন ফাংশন বা প্রোপার্টি যোগ করতে পারেন।
এক্সটেনশন এর সিনট্যাক্স
extension TypeName {
// নতুন ফাংশন, প্রোপার্টি, সাবস্ক্রিপ্ট যোগ করা
}
উদাহরণ ১: String টাইপে এক্সটেনশন যোগ করা
আমরা একটি এক্সটেনশন তৈরি করবো যা String টাইপে একটি নতুন মেথড যোগ করবে, যা একটি স্ট্রিং-এর উল্টো মান রিটার্ন করবে।
extension String {
func reversedString() -> String {
return String(self.reversed())
}
}
let message = "Hello"
print(message.reversedString())
আউটপুট:
olleHএখানে, reversedString নামে একটি নতুন মেথড String টাইপে যোগ করা হয়েছে, যা স্ট্রিং-এর উল্টো মান রিটার্ন করে।
উদাহরণ ২: Int টাইপে এক্সটেনশন যোগ করা
একটি এক্সটেনশন তৈরি করা যাক যা Int টাইপে একটি প্রোপার্টি যোগ করবে, যা বলে দেবে সংখ্যা জোড় না বিজোড়।
extension Int {
var isEven: Bool {
return self % 2 == 0
}
}
let number = 4
print(number.isEven) // আউটপুট: true
এখানে, isEven নামে একটি কম্পিউটেড প্রোপার্টি যোগ করা হয়েছে, যা বলে দেয় সংখ্যাটি জোড় কিনা।
উদাহরণ ৩: Array টাইপে এক্সটেনশন যোগ করা
একটি এক্সটেনশন তৈরি করা যাক যা Array টাইপে একটি মেথড যোগ করবে, যা অ্যারের সমস্ত উপাদানের যোগফল বের করবে (এই উদাহরণে শুধু Int অ্যারে-র জন্য)।
extension Array where Element == Int {
func sum() -> Int {
return self.reduce(0, +)
}
}
let numbers = [1, 2, 3, 4, 5]
print(numbers.sum()) // আউটপুট: 15
এখানে, sum মেথডটি Array এর জন্য যোগ করা হয়েছে, যা সমস্ত উপাদানের যোগফল রিটার্ন করে।
উদাহরণ ৪: কাস্টম টাইপে এক্সটেনশন যোগ করা
একটি কাস্টম Rectangle স্ট্রাক্ট তৈরি করা যাক এবং এতে একটি এক্সটেনশন যোগ করা হবে, যা এর ক্ষেত্রফল গণনা করবে।
struct Rectangle {
var width: Double
var height: Double
}
extension Rectangle {
func area() -> Double {
return width * height
}
}
let rect = Rectangle(width: 5.0, height: 10.0)
print("Area: \(rect.area())")
আউটপুট:
Area: 50.0এখানে, Rectangle স্ট্রাক্টে area নামে একটি মেথড যোগ করা হয়েছে, যা এর ক্ষেত্রফল গণনা করে।
কিছু গুরুত্বপূর্ণ নিয়ম এবং সীমাবদ্ধতা
- স্টোরড প্রোপার্টি যোগ করা যায় না: এক্সটেনশনের মাধ্যমে কোনো স্টোরড প্রোপার্টি (
varবাlet) যোগ করা যায় না। তবে কম্পিউটেড প্রোপার্টি যোগ করা যায়। - ইনিশিয়ালাইজার যোগ করা যায়: এক্সটেনশনের মাধ্যমে আপনি নতুন ইনিশিয়ালাইজার যোগ করতে পারেন, যা নির্দিষ্ট প্রোপার্টি বা প্রাথমিক মান সেট করতে ব্যবহৃত হয়।
- মেথড এবং প্রোপার্টির মধ্যে ওভাররাইড করা যায় না: এক্সটেনশন দিয়ে কোনো এক্সিস্টিং মেথড বা প্রোপার্টি ওভাররাইড করা সম্ভব নয়।
উদাহরণ ৫: ইনিশিয়ালাইজার যোগ করা
extension Rectangle {
init(side: Double) {
self.width = side
self.height = side
}
}
let square = Rectangle(side: 5.0)
print("Square Area: \(square.area())")
এখানে, Rectangle স্ট্রাক্টে একটি নতুন ইনিশিয়ালাইজার যোগ করা হয়েছে, যা একটি স্কোয়ারের প্রোপার্টি সেট করতে ব্যবহৃত হয়।
উপসংহার
- এক্সটেনশন Swift-এর একটি শক্তিশালী ফিচার, যা টাইপগুলিতে নতুন ফাংশনালিটি যোগ করতে সাহায্য করে, যা কোডের পুনঃব্যবহারযোগ্যতা এবং মডুলারিটি বাড়ায়।
- স্ট্যান্ডার্ড লাইব্রেরি টাইপে নতুন মেথড এবং প্রোপার্টি যোগ করে আপনার কোডকে আরও কার্যকর এবং ব্যবহারবান্ধব করতে পারবেন।
- সীমাবদ্ধতা মেনে এক্সটেনশন ব্যবহার করলে আপনি কোডের জটিলতা কমাতে পারবেন এবং টাইপগুলিকে আরও শক্তিশালী করতে পারবেন।
Swift প্রোগ্রামিংয়ে এক্সটেনশন একটি গুরুত্বপূর্ণ টুল, যা আপনাকে স্ট্যান্ডার্ড লাইব্রেরি এবং কাস্টম টাইপগুলিকে সহজেই প্রসারিত করতে সাহায্য করে।