Swift-এ এক্সটেনশন হলো এমন একটি বৈশিষ্ট্য, যা বিদ্যমান ক্লাস, স্ট্রাক্ট, এনাম, বা প্রটোকলের সাথে নতুন ফাংশনালিটি যোগ করার জন্য ব্যবহৃত হয়, কিন্তু মূল কোড পরিবর্তন করতে হয় না। এক্সটেনশন ব্যবহার করে আমরা নতুন মেথড, প্রোপার্টি, ইনিশিয়ালাইজার, এবং সাবস্ক্রিপ্ট যোগ করতে পারি। এটি কোডকে আরও মডুলার এবং পুনঃব্যবহারযোগ্য করে তোলে এবং বিদ্যমান টাইপের সাথে কাজ করার সময় আরও ফ্লেক্সিবল এবং কার্যকরী উপায় প্রদান করে।
এক্সটেনশনের গঠন
extension TypeName {
// নতুন ফাংশনালিটি যোগ করা
}
extension: এটি এক্সটেনশন ডিফাইন করার জন্য কীওয়ার্ড।TypeName: যে ক্লাস, স্ট্রাক্ট, এনাম, বা প্রটোকল আপনি এক্সটেন্ড করতে চান।- এক্সটেনশনের মাধ্যমে বিদ্যমান টাইপে নতুন মেথড, প্রোপার্টি, ইনিশিয়ালাইজার, এবং সাবস্ক্রিপ্ট যোগ করা যায়, তবে আপনি এক্সটেনশনের মাধ্যমে বিদ্যমান প্রোপার্টি বা মেথড পরিবর্তন করতে পারবেন না।
একটি সহজ উদাহরণ
extension Int {
func square() -> Int {
return self * self
}
}
let number = 5
print(number.square()) // Output: 25
- এখানে,
Intটাইপে একটি এক্সটেনশন যোগ করা হয়েছে, যা একটি নতুন মেথডsquare()যুক্ত করেছে। এটিIntটাইপের যেকোনো ভেরিয়েবলের জন্য ব্যবহার করা যাবে এবং সংখ্যাটির বর্গমূল রিটার্ন করবে।
এক্সটেনশন ব্যবহার: মেথড যোগ করা
Swift-এ এক্সটেনশন ব্যবহার করে আমরা বিদ্যমান টাইপে নতুন মেথড যোগ করতে পারি।
extension String {
func reversedString() -> String {
return String(self.reversed())
}
}
let text = "Hello"
print(text.reversedString()) // Output: "olleH"
- এখানে,
Stringটাইপে একটি নতুন মেথডreversedString()যোগ করা হয়েছে, যা স্ট্রিংটি উল্টে দেয়।
কম্পিউটেড প্রোপার্টি যোগ করা
Swift-এ এক্সটেনশন ব্যবহার করে আমরা নতুন কম্পিউটেড প্রোপার্টি যোগ করতে পারি। তবে স্টোরড প্রোপার্টি এক্সটেনশনে যোগ করা যায় না।
extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
var mm: Double { return self / 1_000.0 }
}
let distance = 5.0
print("\(distance.km) meters") // Output: "5000.0 meters"
print("\(distance.cm) meters") // Output: "0.05 meters"
- এখানে,
Doubleটাইপে কয়েকটি কম্পিউটেড প্রোপার্টি যোগ করা হয়েছে (km,m,cm,mm), যা ডিস্টেন্স কনভার্সন করে।
এক্সটেনশনে ইনিশিয়ালাইজার যোগ করা
struct Rectangle {
var width: Double
var height: Double
}
extension Rectangle {
init(side: Double) {
self.width = side
self.height = side
}
}
let square = Rectangle(side: 5.0)
print("Width: \(square.width), Height: \(square.height)") // Output: "Width: 5.0, Height: 5.0"
- এখানে,
Rectangleস্ট্রাক্টে একটি এক্সটেনশনের মাধ্যমে নতুন ইনিশিয়ালাইজার যোগ করা হয়েছে, যা একটি বর্গক্ষেত্র তৈরি করতে সহায়ক।
সাবস্ক্রিপ্ট যোগ করা
এক্সটেনশনের মাধ্যমে আমরা বিদ্যমান টাইপে সাবস্ক্রিপ্টও যোগ করতে পারি।
extension String {
subscript(index: Int) -> Character? {
guard index >= 0 && index < self.count else { return nil }
return self[self.index(self.startIndex, offsetBy: index)]
}
}
let word = "Swift"
if let character = word[1] {
print(character) // Output: "w"
}
- এখানে,
Stringটাইপে একটি সাবস্ক্রিপ্ট যোগ করা হয়েছে, যা স্ট্রিংয়ের নির্দিষ্ট ইনডেক্স থেকে ক্যারেক্টার রিটার্ন করে।
প্রটোকল গ্রহণ করানো (Protocol Conformance) এক্সটেনশনের মাধ্যমে
Swift-এ এক্সটেনশন ব্যবহার করে বিদ্যমান ক্লাস, স্ট্রাক্ট, বা এনামকে একটি প্রটোকল গ্রহণ করানো যায় এবং প্রটোকলের প্রয়োজনীয় মেথড ও প্রোপার্টি এক্সটেনশনে বাস্তবায়ন করা যায়।
protocol Describable {
func describe() -> String
}
struct Person {
var name: String
var age: Int
}
// Person স্ট্রাক্টকে প্রটোকল গ্রহণ করানো হচ্ছে
extension Person: Describable {
func describe() -> String {
return "Name: \(name), Age: \(age)"
}
}
let person = Person(name: "Alice", age: 25)
print(person.describe()) // Output: "Name: Alice, Age: 25"
- এখানে,
Personস্ট্রাক্টকেDescribableপ্রটোকল গ্রহণ করানো হয়েছে এবং এর প্রয়োজনীয় মেথডdescribe()এক্সটেনশনে বাস্তবায়ন করা হয়েছে।
এক্সটেনশনের সুবিধা
- মডিউলারিটি: এক্সটেনশন ব্যবহার করে কোডকে ছোট ছোট অংশে বিভক্ত করা যায়, যা কোডের মডিউলারিটি বাড়ায় এবং পড়তে ও বুঝতে সহজ করে।
- বিদ্যমান কোডের সাথে নতুন ফাংশনালিটি যোগ করা: এক্সটেনশনের মাধ্যমে আমরা বিদ্যমান কোড পরিবর্তন না করেই নতুন ফাংশনালিটি যোগ করতে পারি।
- কোড পুনঃব্যবহারযোগ্যতা: এক্সটেনশন ব্যবহার করে আমরা ফাংশন, প্রোপার্টি, এবং মেথড একবার ডিফাইন করে বিভিন্ন স্থানে পুনঃব্যবহার করতে পারি।
- প্রটোকল গ্রহণ করানো সহজ করে: প্রটোকল কনফরম্যান্সের জন্য এক্সটেনশন ব্যবহার করে সহজেই বিদ্যমান টাইপকে একটি প্রটোকল মেনে চলতে বাধ্য করা যায়।
সীমাবদ্ধতা
- এক্সটেনশনের মাধ্যমে স্টোরড প্রোপার্টি যোগ করা যায় না; শুধু কম্পিউটেড প্রোপার্টি যোগ করা যায়।
- এক্সটেনশনের মাধ্যমে বিদ্যমান মেথড বা প্রোপার্টি ওভাররাইড করা যায় না।
উপসংহার
Swift-এ এক্সটেনশন হলো একটি শক্তিশালী ফিচার, যা প্রোগ্রামিংয়ে বিদ্যমান টাইপে নতুন ফাংশনালিটি যোগ করতে সহায়ক।
- এটি কোডকে আরও মডুলার, পুনঃব্যবহারযোগ্য, এবং ফ্লেক্সিবল করে।
- এক্সটেনশন ব্যবহার করে নতুন মেথড, প্রোপার্টি, ইনিশিয়ালাইজার, এবং সাবস্ক্রিপ্ট যোগ করা যায়।
- প্রটোকল কনফরম্যান্স সহজ করতে এবং প্রোগ্রামকে আরও সুসংগত করতে এক্সটেনশন গুরুত্বপূর্ণ ভূমিকা পালন করে।
এক্সটেনশন ব্যবহার করে Swift-এর প্রোগ্রামিং অভিজ্ঞতা আরও কার্যকর এবং সুসংগত করা যায়।