Swift-এ Extension: এটি কী, সিনট্যাক্স এবং কীভাবে মেথড যোগ করবেন

লেখক: IT Sectr প্রকাশিত: 2026-06-18 পড়ার সময়: 6 মিনিট

Extension Swift-এ একটি প্রক্রিয়া যা বিদ্যমান টাইপের সোর্স কোড পরিবর্তন না করেই নতুন কার্যকারিতা যোগ করার অনুমতি দেয়। এক্সটেনশনগুলি মেথড, গণনাকৃত বৈশিষ্ট্য, ইনিশিয়ালাইজার, সাবস্ক্রিপ্ট, নেস্টেড টাইপ এবং প্রোটোকল কনফরমেন্স সমর্থন করে। Apple ডকুমেন্টেশন, 2026 অনুসারে, এক্সটেনশনগুলি Swift প্রজেক্টে কোড সংগঠন এবং ওপেন/ক্লোজ্ড নীতি মেনে চলার জন্য একটি মূল হাতিয়ার।

মূল বিষয়

  • Extension — মূল পরিবর্তন না করে বিদ্যমান টাইপে কার্যকারিতা যোগ করা
  • গণনাকৃত বৈশিষ্ট্য — extension-এর মাধ্যমে যোগ করা যায়, সংরক্ষিত নয়
  • প্রোটোকল কনফরমেন্স — যেকোনো টাইপের জন্য extension-এর মাধ্যমে প্রোটোকল বাস্তবায়ন
  • কোড সংগঠন — এক্সটেনশনগুলি সম্পর্কিত লজিক প্রোটোকল অনুসারে গ্রুপ করে
  • ওপেন/ক্লোজ্ড — এক্সটেনশনগুলি সম্প্রসারণের জন্য উন্মুক্ততার নীতি বাস্তবায়ন করে

Swift-এ Extension কী?

Extension Swift-এ একটি ভাষা নির্মাণ যা বিদ্যমান টাইপ (ক্লাস, স্ট্রাকচার, এনাম, প্রোটোকল) নতুন ক্ষমতা দিয়ে সম্প্রসারণ করার অনুমতি দেয়। এটি Objective-C-এর ক্যাটাগরির মতো কিন্তু আরও শক্তিশালী।

Extension যোগ করতে পারে:

  • গণনাকৃত বৈশিষ্ট্য — ইনস্ট্যান্স এবং টাইপ
  • মেথড — ইনস্ট্যান্স এবং টাইপ
  • ইনিশিয়ালাইজার (convenience init)
  • সাবস্ক্রিপ্ট
  • নেস্টেড টাইপ
  • প্রোটোকল কনফরমেন্স

Apple ডকুমেন্টেশন অনুসারে, extension বিদ্যমান মেথড ওভাররাইড করতে পারে না (ডায়নামিক ডিসপ্যাচ) এবং সংরক্ষিত বৈশিষ্ট্য যোগ করতে পারে না। এই সীমাবদ্ধতাগুলি মূল টাইপের অখণ্ডতা রক্ষা করে।

এক্সটেনশনের সিনট্যাক্স

Extension কীওয়ার্ড extension দিয়ে ঘোষণা করা হয় যার পরে সম্প্রসারিত টাইপের নাম আসে।

swift
extension Double {
    var km: Double { return self * 1000.0 }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1000.0 }
}

let distance = 5.0.km
print("5 km = \(distance) meters") // 5000.0

শুধু নিজস্ব টাইপ নয়, Swift, Foundation, UIKit এবং অন্যান্য ফ্রেমওয়ার্কের স্ট্যান্ডার্ড লাইব্রেরি টাইপও সম্প্রসারণ করা যায়। এটি extension-কে ডোমেইন-নির্দিষ্ট কার্যকারিতা যোগ করার জন্য একটি শক্তিশালী হাতিয়ার করে তোলে।

Extension-এর মাধ্যমে মেথড যোগ করা

Extension যেকোনো বিদ্যমান টাইপে ইনস্ট্যান্স এবং টাইপ মেথড যোগ করার অনুমতি দেয়।

swift
extension String {
    func isValidEmail() -> Bool {
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
        return self.range(of: emailRegex, options: .regularExpression) != nil
    }

    static func random(length: Int) -> String {
        let letters = "abcdefghijklmnopqrstuvwxyz0123456789"
        return String((0..<length).map { _ in letters.randomElement()! })
    }
}

let email = "user@example.com"
print(email.isValidEmail()) // true
let code = String.random(length: 8) // "a3f8k2m1"

মিউটেটিং মেথড ভ্যালু টাইপ (struct, enum) সম্প্রসারণ করে এবং self পরিবর্তন করতে পারে। ক্লাসের জন্য মিউটেটিং প্রয়োজন হয় না। Extension স্ট্যান্ডার্ড লাইব্রেরি টাইপেও মিউটেটিং মেথড যোগ করতে পারে।

Extension-এ গণনাকৃত বৈশিষ্ট্য

Extension শুধু গণনাকৃত বৈশিষ্ট্য যোগ করতে পারে — সংরক্ষিত বৈশিষ্ট্য অনুমোদিত নয়। এটি যুক্তিসঙ্গত কারণ extension মূল টাইপের মেমোরি ব্যবস্থাপনা করে না।

swift
extension Date {
    var isPast: Bool {
        return self < Date()
    }

    var isToday: Bool {
        return Calendar.current.isDateInToday(self)
    }
}

let someDate = Date().addingTimeInterval(3600)
print(someDate.isPast) // false (one hour from now is future)

Extension-এ গণনাকৃত বৈশিষ্ট্য মূল বাস্তবায়নের মতো একই নিয়ম অনুসরণ করে: আপনি { get } এবং { get set } বৈশিষ্ট্য তৈরি করতে পারেন। Swift একটি টাইপের জন্য এক্সটেনশনের সংখ্যার উপর কোনো সীমা আরোপ করে না। আপনি আলাদা ফাইলে একটি টাইপের জন্য যত খুশি এক্সটেনশন ঘোষণা করতে পারেন — বড় প্রজেক্টে এটি মানক অভ্যাস।

Extension-এর মাধ্যমে প্রোটোকল কনফরমেন্স

Extension প্রোটোকল বাস্তবায়নের পছন্দের উপায়। মূল টাইপ ঘোষণা জটিল করার পরিবর্তে, সমস্ত প্রোটোকল মেথড একটি আলাদা extension-এ রাখা হয়।

swift
struct User {
    let id: Int
    let name: String
    let email: String
}

// Extension per protocol — clean separation
extension User: Equatable {
    static func == (lhs: User, rhs: User) -> Bool {
        return lhs.id == rhs.id
    }
}

extension User: Codable {
    enum CodingKeys: String, CodingKey {
        case id, name, email
    }
}

এই পদ্ধতি দায়িত্ব পৃথক করে: মূল কাঠামোতে শুধু সংরক্ষিত বৈশিষ্ট্য থাকে, এক্সটেনশনে প্রোটোকল বাস্তবায়ন থাকে। Swift এমন টাইপের জন্যও extension-এর মাধ্যমে প্রোটোকল বাস্তবায়নের অনুমতি দেয় যা আমরা নিয়ন্ত্রণ করি না।

Extension এবং কোড সংগঠন

Extension শুধু একটি ভাষা বৈশিষ্ট্য নয় বরং আর্কিটেকচারাল সংগঠনের একটি হাতিয়ার। এক্সটেনশনের সঠিক ব্যবহার কোডকে পঠনযোগ্য এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।

  • প্রোটোকল অনুসারে গ্রুপিং — প্রতিটি প্রোটোকল আলাদা extension-এ
  • মার্ক (MARK)// MARK: - Equatable নেভিগেশনের জন্য
  • ফাইল পৃথকীকরণ — ভিন্ন প্রোটোকলের জন্য এক্সটেনশন ভিন্ন ফাইলে
  • প্রাইভেট হেল্পার — extension-এ প্রাইভেট মেথড private হিসেবে চিহ্নিত
swift
// MARK: - User + Displayable
extension User: Displayable {
    var displayName: String {
        return "\(name) (\(email))"
    }
}

Swift API ডিজাইন নির্দেশিকা অনুসারে, এক্সটেনশনগুলি পঠনযোগ্যতা উন্নত করে: ডেভেলপার মূল ঘোষণায় ডেটা কাঠামো এবং এক্সটেনশনে লজিক দেখে। এটি ইন্টারফেস পৃথকীকরণ নীতির সাথে সামঞ্জস্যপূর্ণ।

where সীমাবদ্ধতা সহ extension শুধু নির্দিষ্ট টাইপের জন্য মেথড যোগ করে: extension Array where Element: Equatable { func isUnique() -> Bool }. এই ধরনের কোড সংক্ষিপ্ত এবং টাইপ-নিরাপদ — isUnique মেথড শুধু Equatable উপাদানযুক্ত অ্যারেতে দেখা যায়, কম্পাইল সময়ে ত্রুটি দূর করে এবং API অন্যান্য ডেভেলপারের জন্য পরিষ্কার, নিরাপদ এবং স্পষ্ট করে তোলে।

সচরাচর জিজ্ঞাসিত প্রশ্ন

Extension কি সংরক্ষিত বৈশিষ্ট্য যোগ করতে পারে?

না, extension সংরক্ষিত বৈশিষ্ট্য যোগ করতে পারে না। এই সীমাবদ্ধতা মৌলিক: extension টাইপ ইনস্ট্যান্সের জন্য মেমোরি বরাদ্দে অংশগ্রহণ করে না। সংরক্ষিত বৈশিষ্ট্যের জন্য, মূল টাইপ ঘোষণা ব্যবহার করুন।

Extension-এর মাধ্যমে কি বিদ্যমান মেথড ওভাররাইড করা যায়?

না, extension মেথড ওভাররাইড করতে পারে না। বিদ্যমান মেথডের মতো একই সিগনেচরে মেথড ঘোষণার চেষ্টা কম্পাইলেশন ত্রুটির কারণ হবে। ওভাররাইডিংয়ের জন্য, ক্লাস ইনহেরিটেন্স ব্যবহার করুন।

Extension কীভাবে subclassing থেকে আলাদা?

Extension নতুন টাইপ তৈরি না করেই কার্যকারিতা যোগ করে। Subclassing একটি শ্রেণিবিন্যাস তৈরি করে এবং ওভাররাইডিং সমর্থন করে। Extension-এর মূল সোর্স কোডে অ্যাক্সেসের প্রয়োজন হয় না এবং এটি সব টাইপের সাথে কাজ করে।

Extension কি জেনেরিক হতে পারে?

হ্যাঁ, extension জেনেরিক হতে পারে যদি সম্প্রসারিত টাইপ জেনেরিক হয়: extension Array where Element: Numeric. আপনি extension-এর ভিতরে নিজস্ব টাইপ প্যারামিটার সহ জেনেরিক মেথড যোগ করতে পারেন।

Extension কীভাবে কর্মক্ষমতা প্রভাবিত করে?

Extension কর্মক্ষমতা প্রভাবিত করে না — extension মেথডগুলি সাধারণ মেথডের মতো কম্পাইল হয়। extension সহ প্রোটোকলের জন্য স্ট্যাটিক ডিসপ্যাচ ব্যবহার করা হয়, যা ক্লাসের ডায়নামিক ডিসপ্যাচের চেয়ে দ্রুত হতে পারে।

সারাংশ

  • Extension গণনাকৃত বৈশিষ্ট্য, মেথড, প্রোটোকল এবং সাবস্ক্রিপ্ট যোগ করে
  • সংরক্ষিত বৈশিষ্ট্য অনুমোদিত নয় — extension মেমোরি বরাদ্দ করে না
  • প্রোটোকল কনফরমেন্স extension-এর মাধ্যমে Swift-এ কোড সংগঠনের মানক অভ্যাস
  • ওপেন/ক্লোজ্ড নীতি — টাইপ সম্প্রসারণের জন্য খোলা, পরিবর্তনের জন্য বন্ধ
  • জেনেরিক এক্সটেনশন where ধারা সহ বিশেষায়িত আচরণ প্রদান করে
  • পঠনযোগ্যতা — এক্সটেনশনগুলি প্রোটোকল এবং ফাংশন অনুসারে লজিক গ্রুপ করে

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন