Swift-এ ক্লোজার হলো কোড ব্লকের একটি বিশেষ ফর্ম যা একটি ফাংশনের মতো কাজ করে, কিন্তু এটি নামহীন বা অ্যানোনিমাস হতে পারে। ক্লোজার প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ, যা প্রোগ্রামারদের কোডকে সংক্ষিপ্ত, পুনঃব্যবহারযোগ্য, এবং ফাংশনাল প্রোগ্রামিংয়ের মতো স্টাইলে লিখতে সাহায্য করে। ক্লোজার Swift-এ প্রথম শ্রেণির সিটিজেন, অর্থাৎ ফাংশনের মতোই এদের পাস করা, রিটার্ন করা, বা ভেরিয়েবলে সংরক্ষণ করা যায়।
ক্লোজারের প্রকারভেদ
Swift-এ ক্লোজার তিন ধরনের হতে পারে:
- Global Function: এরা সাধারণত নাম সহ কোড ব্লক।
- Nested Function: ফাংশনের ভিতরে ফাংশন।
- Closure Expressions: অ্যানোনিমাস ক্লোজার যা কোডের ভিতরেই লেখা হয়, এবং সাধারণত সরল ও সংক্ষিপ্ত হয়।
ক্লোজারের সাধারণ গঠন
{ (parameters) -> ReturnType in
// কোড ব্লক
}
parameters: ক্লোজারের ইনপুট প্যারামিটার।ReturnType: ক্লোজারের আউটপুটের টাইপ।in: ক্লোজারের প্যারামিটার লিস্ট এবং কোড ব্লকের মাঝে ব্যবহৃত কীওয়ার্ড।- কোড ব্লক: ক্লোজারের কার্যক্রম বা কাজ যা এক্সিকিউট হবে।
একটি ক্লোজারের উদাহরণ
let greet = { (name: String) -> String in
return "Hello, \(name)!"
}
// ক্লোজার কল করা
let message = greet("Alice")
print(message) // Output: "Hello, Alice!"
- এখানে
greetএকটি ক্লোজার, যা একটিStringপ্যারামিটার গ্রহণ করে এবং একটিStringরিটার্ন করে। - ক্লোজারটি
"Hello, Alice!"আউটপুট দেয়, কারণ আমরাgreet("Alice")কল করেছি।
ক্লোজারের সংক্ষিপ্ত রূপ (Shorthand Syntax)
Swift-এ ক্লোজারকে আরও সংক্ষিপ্তভাবে লেখা যায়। যদি ক্লোজারের প্যারামিটারের টাইপ এবং রিটার্ন টাইপ জানা থাকে, তাহলে সেগুলি বাদ দেয়া যায়।
let greet = { name in
"Hello, \(name)!"
}
// ক্লোজার কল করা
let message = greet("Bob")
print(message) // Output: "Hello, Bob!"
- এখানে আমরা টাইপ ডিক্লেয়ার এবং
returnকীওয়ার্ড বাদ দিয়েছি, কারণ Swift এগুলো অনুমান করতে পারে।
ক্লোজার ব্যবহার করা: ফাংশনের প্যারামিটার হিসেবে
Swift-এ ক্লোজার প্রায়শই ফাংশনের প্যারামিটার হিসেবে ব্যবহার করা হয়। এটি কোডকে আরও সংক্ষিপ্ত এবং ফ্লেক্সিবল করে তোলে।
func performOperation(_ operation: (Int, Int) -> Int) {
let result = operation(5, 3)
print("Result: \(result)")
}
// অ্যাডিশন ক্লোজার পাস করা
performOperation({ (a, b) in a + b }) // Output: "Result: 8"
// মাল্টিপ্লিকেশন ক্লোজার পাস করা
performOperation({ (a, b) in a * b }) // Output: "Result: 15"
- এখানে
performOperationফাংশনটি একটি ক্লোজার গ্রহণ করে, যা দুটি ইন্টিজার ইনপুট নিয়ে একটি ইন্টিজার আউটপুট দেয়। - আমরা এই ফাংশনে দুটি আলাদা ক্লোজার পাস করেছি: একটি অ্যাডিশন এবং একটি মাল্টিপ্লিকেশন অপারেশনের জন্য।
ট্রেইলিং ক্লোজার (Trailing Closure)
যখন একটি ক্লোজার ফাংশনের শেষ প্যারামিটার হিসেবে ব্যবহৃত হয়, তখন আমরা সেটিকে ট্রেইলিং ক্লোজার হিসেবে লিখতে পারি, যা কোডকে আরও পরিষ্কার করে।
performOperation { (a, b) in
a - b
} // Output: "Result: 2"
- এখানে আমরা ট্রেইলিং ক্লোজার ব্যবহার করেছি, যা
performOperationফাংশনের শেষে এসেছে। এটি কোডকে আরও সরল ও পড়তে সহজ করে তোলে।
স্বয়ংক্রিয়ভাবে নির্ধারিত প্যারামিটার (Shorthand Argument Names)
Swift-এ ক্লোজারে প্যারামিটারগুলিকে সরাসরি $0, $1, $2 ইত্যাদি দিয়ে রেফার করা যায়, যখন প্যারামিটারের নাম উল্লেখ না করে কাজ করা যায়। এটি কোডকে আরও সংক্ষিপ্ত করে।
performOperation {
$0 * $1
} // Output: "Result: 15"
- এখানে
$0প্রথম প্যারামিটার এবং$1দ্বিতীয় প্যারামিটার হিসেবে ব্যবহার করা হয়েছে।
ক্লোজার ব্যবহার: Sort, Map, এবং Filter ফাংশনের সাথে
Swift-এ ক্লোজার প্রায়ই বিল্ট-ইন ফাংশন যেমন sort, map, এবং filter এর সাথে ব্যবহৃত হয়।
১. sort ফাংশন
let numbers = [5, 2, 8, 1, 3]
let sortedNumbers = numbers.sorted { $0 < $1 }
print(sortedNumbers) // Output: [1, 2, 3, 5, 8]
- এখানে, ক্লোজারটি ব্যবহার করে অ্যারে
numbersএর ভ্যালুগুলি ছোট থেকে বড় সাজানো হয়েছে।
২. map ফাংশন
let numbers = [1, 2, 3, 4]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // Output: [1, 4, 9, 16]
mapফাংশন প্রতিটি উপাদানকে ক্লোজারে উল্লেখিত কাজ অনুযায়ী পরিবর্তন করে একটি নতুন অ্যারে তৈরি করে।
৩. filter ফাংশন
let numbers = [1, 2, 3, 4, 5, 6]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // Output: [2, 4, 6]
filterফাংশন একটি ক্লোজার ব্যবহার করে অ্যারের সেই উপাদানগুলো ফিল্টার করে যেগুলি শর্ত পূরণ করে (যেমন, জোড় সংখ্যা)।
উপসংহার
Swift-এ ক্লোজার হলো একটি শক্তিশালী টুল, যা প্রোগ্রামের কোডকে সংক্ষিপ্ত, পুনঃব্যবহারযোগ্য, এবং ফাংশনাল প্রোগ্রামিংয়ের মতো স্টাইলে লিখতে সহায়ক। ক্লোজারের ব্যবহার কোডকে আরও মডিউলার এবং সহজপাঠ্য করতে সহায়ক।
- ফাংশনের প্যারামিটার হিসেবে ক্লোজার ব্যবহার, ট্রেইলিং ক্লোজার, এবং শর্তসাপেক্ষ লজিক বা অ্যারে প্রসেসিংয়ের জন্য ক্লোজার Swift প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ।