সুইফট প্রোগ্রামিং এ কন্ট্রোল স্ট্যাটমেন্ট For-In

সুইফট প্রোগ্রামিং এ অন্যান্য প্রোগ্রামিং এর মতই বেশ কয়েকটি কন্ট্রোল স্ট্যাটমেন্ট রয়েছে। যেমনঃ

  • For-In
  • While
  • If
  • Switch
  • Where
  • Continue ইত্যাদি।

এই লেখায় আমরা For-In সম্পর্কে জানব। একটা সিকোয়েন্স যেমন অ্যারে, ডিকশনারি, ম্যাপ, স্ট্রিং বা রেঞ্জের মধ্যে ইটারেশনের জন্য for-in লুপ ব্যবহার করা যায়।

একটা রেঞ্জে for-in লুপ

সবার আগে দেখি একটা নিউম্যারিক রেঞ্জের মধ্যে কিভাবে ইটারেশন করা যায়ঃ

for index in 1...5 {
   print(index)
}

যা 1-5 পর্যন্ত কনসোলে দেখাবে।

এখানে 1…5 দিয়ে আমরা লুপটির রেঞ্জ বলে দিয়েছি।  আমরা ইচ্ছে করলে যে কোন রেঞ্জ ব্যবহার করতে পারিঃ

for index in 5...10 {
    print(index)
}

যা আউটপুট দিবে 5-10 পর্যন্ত নাম্বার গুলো। 

এর মানে ইনিশিয়াল ভ্যালু এবং শেষ ভ্যালু যে কোন মানই আমরা দিতে পারি। এমনকি নেগেটিভ রেঞ্জও দিতে পারি এভাবেঃ

for index in -5...10 {
    print(index)
}

এখানে প্রথম সংখ্যাকে বলা হয় Lower Bound, পরের সংখ্যাকে বলা হয় Upper Bound। খেয়াল রাখতে হবে যেন লোয়ার বাউন্ড আপার বাউন্ড থেকে ছোট অথবা সমান হয়। যদি না হয়, তাহলে প্রোগ্রাম ক্র্যাস করবে। প্রোগ্রাম লেখার সময় এটা অবশ্যই মাথায় রাখতে হবে। নিচের কোড রান করে দেখতে পারেনঃ

for index in 15...10 {
    print(index)
}

অ্যারের উপর for-in লুপ

আমরা ইচ্ছে করলে একটা অ্যারের উপর ইটারেশন করতে পারি এভাবেঃ

let divisions = ["Dhaka", "Chittagong", "Sylhet", "Khulna", "Barisal", "Rajshahi", "Rangpur"]
for item in divisions {
    print(item)
}

এখানে এই ইটারেশনটা divisions নামক অ্যারের উপর করেছে। আউটপুট হিসেবে এর আইটেম গুলো একটা একটা করে প্রিন্ট করবে।

একটা কালেকশনের উপর এভাবেও for-in লুপ চালানো যায়ঃ

let divisions = ["Dhaka", "Chittagong", "Sylhet", "Khulna", "Barisal", "Rajshahi", "Rangpur"]

divisions.forEach { item in
    print(item)
}

উপরের কোড এবং এই কোড একই রকম আউটপুট দিবে।

এখন আমরা হয়তো একটা লিস্টের বা রেঞ্জের মধ্যে ইটারেট করব কিন্তু তার আইটেম গুলো আমাদের দরকার হবে না, তখন আমরা চাইলে আইটেমের যায়গায় একটা আন্ডারস্কোর(_) ব্যবহার করতে পারি। তখন প্রতিবার লিস্ট বা রেঞ্জের আইটেম আর এসাইন করবে না। মেমরি ইফিশিয়েন্সি বাড়বে। যেমনঃ

let divisions = ["Dhaka", "Chittagong", "Sylhet", "Khulna", "Barisal", "Rajshahi", "Rangpur"]

for _ in divisions {
    print("Hello Bangladesh!")
}

উপরের কোড রান করলে সাতবার Hello Bangladesh! প্রিন্ট করবে। কারন divisions অ্যারেতে মোট সাতটা আইটেম রয়েছে। এই আইটেম গুলো আমরা লুপের ভেতর ব্যবহার করতে চাচ্ছি না। তাই লুপ ইনিশিয়ালাইজের সময় আন্ডারস্কোর ব্যবহার করে ইন্ডিভিজুয়াল আইটেম গুলো ইগনোর করেছি।

আরেকটা উদাহরণ দেখিঃ

for _ in 1...5{
    print("I Love Bangladesh!")
}

এখানে প্রতিবার ইটারেশনের সময় 1-5 পর্যন্ত সংখ্যা গুলো আমাদের লাগবে না। তাই এগুলো ইগনোর করার জন্য আন্ডারস্কোর ব্যবহার করেছি। উপরের প্রোগ্রাম রান করলে I Love Bangladesh! পাঁচবার প্রিন্ট করবে।

স্ট্রিং ভ্যালুর উপর for-in

আমরা চাইলে একটা স্ট্রিং এর মধ্যেও ইটারেশন করতে পারি এভাবেঃ

let string = "Hello World!"

for s in string{
    print(s)
}

একটা ডিকশনারির মধ্যে for-in লুপ

আমরা চাইলে একটা ডিকশনারির মধ্যেও ইটারেশন করতে পারি। নিচের উদাহরণটি দেখিঃ

let divisions = ["Dhaka": 8, "Chittagong": 11, "Sylhet": 4, "Khulna": 10, "Barisal": 6, "Rajshahi": 8, "Rangpur": 8]

for (name, districts) in divisions {
    print("\(name) is divided into \(districts) districts.")
}

যা আউটপুট দিবেঃ

Sylhet is divided into 4 districts.
Rajshahi is divided into 8 districts.
Chittagong is divided into 11 districts.
Dhaka is divided into 8 districts.
Khulna is divided into 10 districts.
Barisal is divided into 6 districts.
Rangpur is divided into 8 districts.

এখানে একটা ডিকশনারির মধ্যে ইটারেশন করেছি আমরা। এখানে একটা কিছু খেয়াল করব যে ডিকশনারির মধ্যে ইটারেশন করলে কোন অর্ডার মানা হয় না। একেক বার একের ভাবে আউটপুট দিতে পারে। এর কারণ হচ্ছে এটাই ডিকশনারির বৈশিষ্ঠ। ডিকশনারিতে আমরা সাধারণত আনঅর্ডারড ডেটা রাখি।

উপড়ে আমরা একটা রেঞ্জে, অ্যারে, ডিকশনারি এবং স্ট্রিং এর মধ্যে for-in লুপ ব্যবহার করা শিখেছি। পরবর্তী অধ্যায় গুলোতে অন্যান্য কন্টোল স্ট্যাটমেন্ট গুলো শিখব। সুইফট নিয়ে অন্যান্য লেখা গুলো পাওয়া যাবে এখানে। এছাড়া সুইফট ব্যবহার করে আইওএস অ্যাপ ডেভেলপ করা শেখা যাবে এখান থেকে।

Leave a Reply