ট্র্যাক
/
Swift
Swift
/
সিলেবাস
/
ফাংশন ওভারলোডিং
ফা

ফাংশন ওভারলোডিং মধ্যে Swift

১টি অনুশীলনী

ফাংশন ওভারলোডিং সম্পর্কে

Swift-এ আপনি একই নামে একাধিক ফাংশন ডিফাইন করতে পারেন, যতক্ষণ তাদের সিগনেচার আলাদা থাকে। এই পদ্ধতিটিই ফাংশন ওভারলোডিং নামে পরিচিত।

নিচের বেস ফাংশনটি দেখুন:

func add(_ x: Int, and y: Int, doubleResult: Bool) -> Int {
    let sum = x + y
    return doubleResult ? sum * 2 : sum
}

let twentySix = add(6, and: 7, doubleResult: true)
// => 26

Swift-এ একই নামের দুটি ফাংশনকে আলাদা ধরা হয়, যদি নিচের যেকোনো একটি শর্ত পূরণ হয়:

  • তাদের প্যারামিটারের সংখ্যা আলাদা।
  • তাদের এক্সটার্নাল আর্গুমেন্ট লেবেল আলাদা।
  • তাদের প্যারামিটার টাইপ আলাদা।
  • তাদের রিটার্ন টাইপ আলাদা (যদি কল করার প্রেক্ষাপটে বোঝা যায় কোনটি ব্যবহার করতে হবে)।

উপরের মূল add ফাংশনটি ধরে নিলে, নিচের প্রতিটি ওভারলোড একই প্রোগ্রামে আলাদা এবং বৈধ:

// 1. Different number of parameters
func add(_ x: Int, and y: Int) -> Int {
    x + y
}

let eleven = add(5, and: 6)
// => 11

// 2. Different parameter type (Double instead of Int)
func add(_ x: Double, and y: Int, doubleResult: Bool) -> Double {
    let sum = x + Double(y)
    return doubleResult ? sum * 2 : sum
}

let twentySeven = add(6.5, and: 7, doubleResult: true)
// => 27.0

// 3. Different argument label (doubleThat instead of doubleResult)
func add(_ x: Int, and y: Int, doubleThat: Bool) -> Int {
    let sum = x + y
    return doubleThat ? sum * 2 : sum
}

let thirteen = add(6, and: 7, doubleThat: false)
// => 13

রিটার্ন টাইপ দিয়ে ওভারলোডিং

শুধু রিটার্ন টাইপ দিয়েও ফাংশন ওভারলোড করা যায়। তবে এমন একটি ফাংশন কল করার সময় আপনাকে একটি টাইপ অ্যানোটেশন বা প্রসঙ্গ দিতে হবে, যাতে কম্পাইলার বুঝতে পারে আপনি কোন ওভারলোডটি চেয়েছেন:

func add(_ x: Int, and y: Int, doubleResult: Bool) -> Double {
    let sum = Double(x + y)
    return doubleResult ? sum * 2 : sum
}

// Ambiguous call (compiler cannot decide whether you want Int or Double):
// let thirty = add(6, and: 9, doubleResult: true)

// Resolved with an explicit type annotation:
let thirty: Double = add(6, and: 9, doubleResult: true)
// => 30.0

যা ওভারলোডকে আলাদা করে না

শুধু অভ্যন্তরীণ প্যারামিটার নাম বদলে, আর্গুমেন্ট লেবেল, প্যারামিটার টাইপ বা প্যারামিটারের সংখ্যা না বদলালে আলাদা কোনো ফাংশন তৈরি হয় না। কম্পাইলার এটিকে একটি অবৈধ ডুপ্লিকেট ডিক্লারেশন হিসেবে ধরে:

func add(_ w: Int, and y: Int, doubleResult: Bool) -> Int {
    let sum = w + y
    return doubleResult ? sum * 2 : sum
}
// Error: Invalid redeclaration of 'add(_:and:doubleResult:)'
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

ফাংশন ওভারলোডিং শিখুন