ট্র্যাক
/
Swift
Swift
/
অনুশীলনী
/
সান্তার সুইফটি সহকারী
সান্তার সুইফটি সহকারী

সান্তার সুইফটি সহকারী

লার্নিং অনুশীলনী

ভূমিকা

টাপল একাধিক মানকে একটি যৌগিক মানে একত্র করে। অ্যারের বিপরীতে, একটি টাপলের মানগুলোকে একই টাইপের হতে হয় না, আর একবার তৈরি হয়ে গেলে টাপলের আকার নির্দিষ্ট হয়ে যায়।

কমা দিয়ে আলাদা করা কয়েকটি মান বন্ধনীর ভেতরে রেখে একটি টাপল তৈরি করুন:

let order = ("biscuits", 2.99, 3)

চাইলে টাইপ অ্যানোটেশনও স্পষ্টভাবে লিখে দিতে পারেন:

let order: (String, Double, Int) = ("biscuits", 2.99, 3)

নামহীন টাপল থেকে আলাদা আলাদা এলিমেন্ট বের করতে শূন্য থেকে শুরু হওয়া ইনডেক্স সিনট্যাক্স (.0, .1 ইত্যাদি) ব্যবহার করুন:

let item = order.0     // "biscuits"
let quantity = order.2 // 3

নামযুক্ত টাপল

টাপল ডিফাইন করার সময় এর আলাদা আলাদা এলিমেন্টের নাম দিতে পারেন:

let order = (item: "biscuits", price: 2.99, quantity: 3)

এলিমেন্টের নাম দিলে কোড পড়তে সহজ হয়, আর লেবেল দিয়ে ডট নোটেশন ব্যবহার করে এলিমেন্টগুলোতে অ্যাক্সেস করতে পারেন:

let item = order.item         // "biscuits"
let quantity = order.quantity // 3

টাইপ অ্যানোটেশনে এলিমেন্টের নামও দিতে পারেন:

let order: (item: String, price: Double, quantity: Int) = (item: "biscuits", price: 2.99, quantity: 3)

টাপল পরিবর্তন করা

টাপলকে যদি ভ্যারিয়েবল (var) হিসেবে ডিক্লেয়ার করা হয়, তাহলে এর এলিমেন্টগুলো আপডেট করতে পারেন:

var order = ("biscuits", 2.99, 3)
order.0 = "cookies"
order.1 = 1.99
order.2 = 5

print(order)
// Prints ("cookies", 1.99, 5)

একাধিক মান রিটার্ন করা

Swift ফাংশন একবারে কেবল একটি মান রিটার্ন করতে পারে, কিন্তু একটি টাপল রিটার্ন করলে আপনি একাধিক মান একসাথে প্যাক করে একটি ফাংশন থেকে একাধিক মান রিটার্ন করতে পারেন:

func divide(_ dividend: Int, by divisor: Int) -> (quotient: Int, remainder: Int) {
    let quotient = dividend / divisor
    let remainder = dividend % divisor
    return (quotient, remainder)
}

let result = divide(14, by: 4)
print("Quotient: \(result.quotient), Remainder: \(result.remainder)")
// Prints "Quotient: 3, Remainder: 2"

টাপল ডিকম্পোজিশন

আপনি একটি টাপলের মানগুলোকে আলাদা কনস্ট্যান্ট বা ভ্যারিয়েবলে ভেঙে (আনপ্যাক করে) নিতে পারেন:

let order = ("biscuits", 2.99, 3)
let (item, price, quantity) = order

print(item) // Prints "biscuits"

টাপল ডিকম্পোজিশন সরাসরি for-in লুপেও কাজ করে:

let orders = [("biscuits", 2.99, 3), ("cookies", 1.99, 5)]

for (item, price, quantity) in orders {
    print("Item: \(item), Price: \(price), Quantity: \(quantity)")
}

নির্দেশনা

আপনি সান্তা ক্লজের লজিস্টিকস বিভাগে কাজ করা একজন এলফ, এবং সিস্টেমের সফটওয়্যার হালনাগাদ করার জন্য বসের কাছ থেকে আপনি দুটি কাজ পেয়েছেন।

1. খেলনার নাম বের করুন

সিস্টেমটিকে ডেটাবেস থেকে একটি খেলনার নাম বের করতে পারতে হবে। ডেটাবেসটি (name: String, quantity: Int) টাইপের টাপল দিয়ে তৈরি।

getName(_:) ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি আর্গুমেন্ট নেয়, যেখানে (name: String, quantity: Int) টাইপের একটি টাপল থাকে।

let toy = (name: "Doll", quantity: 10)
getName(toy)
// Returns "Doll"

2. ডেটাবেসে নতুন একটি খেলনা যোগ করুন

খেলনার বাজার খুব দ্রুত বদলে যায়, কোনটা জনপ্রিয় তা অতি দ্রুত পরিবর্তন হয়। তাই নতুন খেলনা তৈরি করার একটি ফাংশন প্রয়োজন।

createToy(name:amount:) ফাংশনটি ইমপ্লিমেন্ট করুন, যা name আর্গুমেন্টে খেলনার নাম এবং amount আর্গুমেন্টে খেলনার পরিমাণ নেয়।

createToy(name: "Doll", amount: 10)
// Returns (name: "Doll", amount: 10)

3. খেলনার পরিমাণ হালনাগাদ করুন

সান্তার কারখানার এলফরা অবিরত নতুন খেলনা তৈরি করে, আর সান্তাকে প্রতিটি খেলনার পরিমাণের হিসাব রাখতে হয়। এজন্য সিস্টেমটিকে ডেটাবেসে একটি খেলনার পরিমাণ হালনাগাদ করার সুবিধা থাকতে হবে।

updateQuantity(_:toy:Amount:) ফাংশনটি ইমপ্লিমেন্ট করুন, যা এই আর্গুমেন্টগুলো নেয়:

  • toys-এ (name: String, quantity: Int) টাইপের টাপলগুলোর একটি অ্যারে থাকে।
  • toy-এ হালনাগাদ করতে হবে এমন খেলনার নাম থাকে।
  • amount-এ খেলনার নতুন পরিমাণ থাকে।

আপনি ধরে নিতে পারেন যে খেলনাটি আগেই ডেটাবেসে আছে, এটি যাচাই করার দরকার নেই।

let toys = [(name: "Doll", quantity: 10), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
updateQuantity(toys, toy: "Doll", amount: 15)
// Returns [(name: "Doll", quantity: 15), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]

4. খেলনায় ক্যাটেগরি কী (key) যোগ করুন

সান্তা ডেটাবেসের খেলনাগুলোকে ক্যাটেগরি অনুযায়ী সাজাতে চান। এতে ডেলিভারি দিতে হলে তারা সহজে খেলনা খুঁজে পাবেন, আর ডেটাবেসের খেলনাগুলো সাজিয়েও রাখতে পারবেন।

তবে সিস্টেমটি প্রথমবার বানানোর সময় ক্যাটেগরি কী (key) যোগ করার কথা ভুলে যাওয়া হয়েছিল। এখন সিস্টেমটিকে ডেটাবেসের একটি খেলনায় ক্যাটেগরি কী (key) যোগ করার সুবিধা দিতে হবে।

addCategory(_:category:) ফাংশনটি ইমপ্লিমেন্ট করুন, যা এই আর্গুমেন্টগুলো নেয়:

  • toys-এ (name: String, quantity: Int) টাইপের টাপলগুলোর একটি অ্যারে থাকে।
  • category-তে খেলনাগুলোতে যোগ করতে হবে এমন ক্যাটেগরি কী (key) থাকে।

আপনি ধরে নিতে পারেন যে খেলনাটি আগেই ডেটাবেসে আছে, এটি যাচাই করার দরকার নেই। আপনি এও ধরে নিতে পারেন যে খেলনায় আগে থেকে কোনো ক্যাটেগরি কী (key) নেই।

let toys = [(name: "Car", quantity: 5), (name: "Train", quantity: 3)]
addCategory(toys, category: "Vehicle")
// Returns [(name: "Car", quantity: 5, category: "Vehicle"), (name: "Train", quantity: 3, category: "Vehicle")]
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Swift Exercism

সান্তার সুইফটি সহকারী শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Swift ট্র্যাকের 35টি কনসেপ্ট116টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।