স্কালা একটি ফাংশনাল এবং অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা যা বিভিন্ন ধরনের ডেটা স্ট্রাকচার সরবরাহ করে। এর মধ্যে অ্যারে (Array) এবং লিস্ট (List) দুটি জনপ্রিয় ডেটা স্ট্রাকচার, যেগুলোর মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। এই দুটি ডেটা স্ট্রাকচার ব্যবহৃত হয় ডেটা সংগ্রহ এবং অ্যাক্সেসের জন্য, তবে তাদের ব্যবহারের ধরন এবং কার্যকারিতা আলাদা।
অ্যারে (Array)
স্কালার অ্যারে একটি মিউটেবল (Mutable) ডেটা স্ট্রাকচার, যা একই ধরনের ডেটা উপাদানগুলিকে ধারন করে। এটি সিকোয়েন্সের মতো কাজ করে, কিন্তু অ্যারের মধ্যে উপাদানগুলি নির্দিষ্ট ইনডেক্সের মাধ্যমে অ্যাক্সেস করা হয়। একটি অ্যারে একবার তৈরি হলে এর আকার পরিবর্তন করা যায় না, তবে উপাদানগুলোর মান পরিবর্তন করা যায়।
অ্যারের বৈশিষ্ট্য:
- মিউটেবল: অ্যারের উপাদানগুলো পরিবর্তন করা সম্ভব (উপাদান যোগ বা মুছে ফেলা নয়)।
- ফিক্সড আকার: অ্যারের আকার একবার নির্ধারণ করার পর পরিবর্তন করা যায় না।
- ইনডেক্সিং: অ্যারের উপাদানগুলোর অ্যাক্সেস ইন্ডেক্সের মাধ্যমে করা হয় (যেমন:
array(0),array(1)ইত্যাদি)। - পারফরম্যান্স: অ্যারে ইনডেক্স অ্যাক্সেসের ক্ষেত্রে দ্রুত, কারণ এটি কনটিগুয়াস মেমরি ব্লকের মধ্যে সংরক্ষিত হয়।
অ্যারের উদাহরণ:
val array = Array(1, 2, 3, 4, 5)
println(array(2)) // 3
array(2) = 10 // অ্যারের উপাদান পরিবর্তন
println(array(2)) // 10অ্যারের ব্যবহার:
অ্যারে সাধারণত ছোট আকারের ডেটার জন্য ব্যবহৃত হয় যেখানে ডেটার পরিবর্তন এবং দ্রুত অ্যাক্সেস গুরুত্বপূর্ণ।
লিস্ট (List)
স্কালার লিস্ট একটি ইমিউটেবল (Immutable) ডেটা স্ট্রাকচার যা অর্ডারড উপাদানগুলিকে সংরক্ষণ করে। এটি একটি লিঙ্কড লিস্টের মতো কাজ করে, যেখানে প্রতিটি উপাদান একটি পরবর্তী উপাদান বা Nil (শেষের নির্দেশক) এর সাথে যুক্ত থাকে। লিস্টের উপাদানগুলি পরিবর্তন করা সম্ভব নয়, তবে আপনি নতুন লিস্ট তৈরি করে বা পুরনো লিস্ট থেকে উপাদান সরাতে পারেন।
লিস্টের বৈশিষ্ট্য:
- ইমিউটেবল: একবার লিস্ট তৈরি হলে এর উপাদান পরিবর্তন করা যায় না। পরিবর্তে, একটি নতুন লিস্ট তৈরি করতে হয়।
- লিঙ্কড স্ট্রাকচার: লিস্টে উপাদানগুলি একে অপরের সাথে সংযুক্ত থাকে (প্রথম উপাদানটি অন্য উপাদানটির সাথে যুক্ত থাকে)।
- হেড এবং টেল: লিস্টে দুটি অংশ থাকে – হেড (প্রথম উপাদান) এবং টেল (বাকী উপাদানগুলো)।
- ফাংশনাল অপারেশন: লিস্টে
map,flatMap,filter,foldইত্যাদি ফাংশনাল অপারেশন প্রয়োগ করা সম্ভব।
লিস্টের উদাহরণ:
val list = List(1, 2, 3, 4, 5)
println(list.head) // 1 (প্রথম উপাদান)
println(list.tail) // List(2, 3, 4, 5) (বাকি উপাদানগুলো)লিস্টের ব্যবহার:
লিস্ট সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে ডেটার পরিবর্তন না করার প্রয়োজন হয় এবং আপনি একাধিক ফাংশনাল অপারেশন প্রয়োগ করতে চান।
অ্যারে এবং লিস্ট এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | অ্যারে (Array) | লিস্ট (List) |
|---|---|---|
| পরিবর্তনযোগ্যতা | মিউটেবল (Mutable) | ইমিউটেবল (Immutable) |
| আকার | ফিক্সড আকার | আকার পরিবর্তনযোগ্য (পুনরায় নতুন লিস্ট তৈরি করা যায়) |
| ইনডেক্সিং | ইনডেক্সের মাধ্যমে অ্যাক্সেস করা যায় | ইনডেক্সিং নেই, তবে head, tail ব্যবহার করা যায় |
| পারফরম্যান্স | ইনডেক্স অ্যাক্সেস দ্রুত | অ্যাক্সেস বা পরিবর্তন ধীর হতে পারে |
| ব্যবহার | ছোট আকারের ডেটার জন্য উপযুক্ত, যেখানে দ্রুত অ্যাক্সেস প্রয়োজন | একাধিক অপারেশন এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য উপযুক্ত |
সারাংশ
- অ্যারে হল একটি মিউটেবল ডেটা স্ট্রাকচার, যেখানে উপাদানগুলি নির্দিষ্ট আকারের মধ্যে সন্নিবেশিত থাকে এবং ইনডেক্সের মাধ্যমে দ্রুত অ্যাক্সেস করা যায়।
- লিস্ট হল একটি ইমিউটেবল ডেটা স্ট্রাকচার, যা লিঙ্কড আকারে উপাদানগুলিকে সংরক্ষণ করে এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য উপযুক্ত।
উপাদান পরিবর্তন বা পুনঃব্যবহারযোগ্য ডেটা প্রয়োজন হলে অ্যারে, এবং যেখানে একাধিক অপারেশন, থ্রেড সেফটি, বা পরিবর্তন না করার প্রয়োজন হয় সেখানে লিস্ট ব্যবহার করা হয়।
অ্যারে হলো একটি ফিক্সড সাইজের ডেটা স্ট্রাকচার যা এক ধরনের একই ধরণের ডেটা উপাদান সংরক্ষণ করতে ব্যবহৃত হয়। স্কালায়, অ্যারে (Array) একটি বিশেষ ডেটা স্ট্রাকচার যা একটি নির্দিষ্ট ধরণের উপাদান সংরক্ষণ করতে পারে এবং প্রতিটি উপাদান একটি নির্দিষ্ট ইনডেক্স দ্বারা অ্যাক্সেস করা যায়। এটি খুব দ্রুত এবং কার্যকরী উপায় হিসেবে ব্যবহৃত হয় যখন একই ধরনের ডেটার একটি কনটেইনার দরকার হয়।
স্কালায় অ্যারের মৌলিক বৈশিষ্ট্য
১. ফিক্সড সাইজ: অ্যারে একটি নির্দিষ্ট সাইজের ডেটা স্ট্রাকচার, একবার সাইজ নির্ধারণ করার পর তা পরিবর্তন করা যায় না। তবে, স্কালায় ArrayBuffer নামে মিউটেবল সংস্করণ রয়েছে, যা আকার বাড়াতে বা কমাতে পারে।
২. একই ধরনের উপাদান: একটি অ্যারে শুধুমাত্র এক ধরনের উপাদান ধারণ করতে পারে (যেমন শুধুমাত্র সংখ্যা, স্ট্রিং, ইত্যাদি)। এটি টাইপ সেফ্টি নিশ্চিত করে।
৩. ইনডেক্সিং: অ্যারেতে উপাদানগুলো ইনডেক্স দ্বারা অ্যাক্সেস করা হয়। স্কালায় অ্যারের ইনডেক্স শূন্য (0) থেকে শুরু হয়।
৪. মিউটেবল (Mutable): স্কালায় অ্যারে মিউটেবল, অর্থাৎ অ্যারের উপাদানগুলো পরিবর্তন করা সম্ভব।
স্কালায় অ্যারে তৈরি করা
অ্যারে তৈরি করার জন্য আপনি Array ক্লাস ব্যবহার করতে পারেন। স্কালায় অ্যারে দুটি উপায়ে তৈরি করা যায়:
১. নির্দিষ্ট সাইজের অ্যারে তৈরি করা
val numbers = new Arrayটি আকার ৫ এর ইন্টিজার অ্যারে তৈরি করাএখানে, new Array একটি্টিজার অ্যারে তৈরি করেছে যার সাইজ ৫, এবং প্রতিটি উপাদান ডিফল্টভাবে ০ হবে।
২. প্রাথমিক মান সহ অ্যারে তৈরি করা
val fruits = Array("Apple", "Banana", "Cherry") // একটি স্ট্রিং অ্যারেএখানে, Array("Apple", "Banana", "Cherry") একটি নতুন অ্যারে তৈরি করেছে, যেখানে প্রথম তিনটি উপাদান হল স্ট্রিং টাইপের ফল।
স্কালায় অ্যারে অ্যাক্সেস করা
অ্যারের উপাদানগুলিকে ইনডেক্স ব্যবহার করে অ্যাক্সেস করা হয়। ইনডেক্স শূন্য (0) থেকে শুরু হয়।
val numbers = Array(1, 2, 3, 4, 5)
println(numbers(0)) // আউটপুট: 1
println(numbers(3)) // আউটপুট: 4এখানে, numbers(0) প্রথম উপাদান (1) এবং numbers(3) চতুর্থ উপাদান (4) অ্যাক্সেস করবে।
স্কালায় অ্যারে পরিবর্তন (Mutable)
আপনি অ্যারের উপাদান পরিবর্তন করতে পারেন, কারণ স্কালা অ্যারে মিউটেবল।
val numbers = Array(1, 2, 3, 4, 5)
numbers(2) = 10 // 3 পরিবর্তন হয়ে যাবে 10
println(numbers.mkString(", ")) // আউটপুট: 1, 2, 10, 4, 5এখানে, numbers(2) = 10 লাইনটি তৃতীয় উপাদানটি পরিবর্তন করে ১০ এ।
স্কালায় অ্যারের মৌলিক অপারেশন
১. অ্যারে লেংথ (Length)
অ্যারের দৈর্ঘ্য বা সাইজ জানার জন্য length ফাংশন ব্যবহার করা হয়।
val numbers = Array(1, 2, 3, 4, 5)
println(numbers.length) // আউটপুট: 5২. অ্যারে ফিল্টার (Filter)filter ফাংশন ব্যবহার করে নির্দিষ্ট শর্তের ভিত্তিতে উপাদান বাছাই করা যায়।
val numbers = Array(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter(_ % 2 == 0) // মাত্র যেগুলি পারফেক্টলি ২ দিয়ে ভাগ হয়
println(evenNumbers.mkString(", ")) // আউটপুট: 2, 4৩. অ্যারে ম্যাপ (Map)map ফাংশন ব্যবহার করে অ্যারের প্রতিটি উপাদানে একটি অপারেশন প্রয়োগ করা যায়।
val numbers = Array(1, 2, 3, 4, 5)
val doubledNumbers = numbers.map(_ * 2) // প্রতিটি উপাদানকে ২ দিয়ে গুণ করা
println(doubledNumbers.mkString(", ")) // আউটপুট: 2, 4, 6, 8, 10৪. অ্যারে যোগ (Concatenation)
দুটি অ্যারে একত্রিত করতে ++ অপারেটর ব্যবহার করা হয়।
val numbers1 = Array(1, 2, 3)
val numbers2 = Array(4, 5, 6)
val combined = numbers1 ++ numbers2
println(combined.mkString(", ")) // আউটপুট: 1, 2, 3, 4, 5, 6সারাংশ
অ্যারে একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা এক ধরনের উপাদান ধারণ করতে সক্ষম এবং খুব দ্রুত অ্যাক্সেস ও পরিবর্তন করার জন্য ব্যবহৃত হয়। স্কালায় অ্যারে মিউটেবল (mutable) এবং ইনডেক্স করা থাকে, যা উপাদান অ্যাক্সেস এবং পরিবর্তন করার সময় খুব কার্যকরী। স্কালা অ্যারে বিভিন্ন মৌলিক অপারেশন যেমন map, filter, length, ++ ইত্যাদি সরবরাহ করে, যা ডেটা প্রক্রিয়াকরণ সহজ করে তোলে।
লিস্ট (List) হল একটি অর্ডার করা ডেটা স্ট্রাকচার, যা একাধিক উপাদান ধারণ করতে পারে। স্কালার লিস্ট হল একটি ইমিউটেবল (Immutable) কালেকশন, যার মানে একবার একটি লিস্ট তৈরি হলে সেটির উপাদান বা কাঠামো পরিবর্তন করা যায় না। এটি উপাদানগুলিকে নির্দিষ্ট একটি অর্ডারে সংরক্ষণ করে এবং ডুপ্লিকেট উপাদান থাকতে পারে। স্কালার লিস্ট খুবই শক্তিশালী এবং সহজে ব্যবহারযোগ্য একটি ডেটা স্ট্রাকচার, বিশেষ করে ফাংশনাল প্রোগ্রামিংয়ের জন্য।
লিস্টের বৈশিষ্ট্য:
- অর্ডার: লিস্টে উপাদানগুলি একটি নির্দিষ্ট অর্ডারে থাকে, অর্থাৎ প্রথমে যোগ করা উপাদানটি প্রথমে থাকবে।
- ডুপ্লিকেট উপাদান: লিস্টে ডুপ্লিকেট উপাদান থাকতে পারে। এর মানে একাধিকবার একই উপাদান রাখা সম্ভব।
- ইমিউটেবল (Immutable): স্কালার লিস্ট একবার তৈরি হলে তার উপাদান পরিবর্তন করা যায় না। তবে, নতুন উপাদান যোগ বা পুরোনো উপাদান মুছে ফেলার জন্য একটি নতুন লিস্ট তৈরি হয়।
- হেড এবং টেল: স্কালার লিস্টে
head(প্রথম উপাদান) এবংtail(বাকি উপাদানগুলো) নামে দুটি অংশ থাকে।
লিস্ট তৈরি করা
স্কালাতে লিস্ট তৈরি করার জন্য সোজা সোজি একটি সাইনট্যাক্স ব্যবহার করা হয়:
val list1 = List(1, 2, 3, 4, 5)এখানে List(1, 2, 3, 4, 5) একটি লিস্ট তৈরি করেছে যার মধ্যে পাঁচটি ইন্টিজার উপাদান রয়েছে।
লিস্টের কিছু মৌলিক অপারেশন
১. হেড (head): প্রথম উপাদান অ্যাক্সেস করা।
val firstElement = list1.head
println(firstElement) // 1২. টেল (tail): প্রথম উপাদান বাদে বাকি সব উপাদান।
val tailElements = list1.tail
println(tailElements) // List(2, 3, 4, 5)৩. ইমিউটেবল লিস্টে নতুন উপাদান যোগ করা: লিস্টে নতুন উপাদান যোগ করার জন্য, নতুন লিস্ট তৈরি করা হয়।
val newList = 0 :: list1
println(newList) // List(0, 1, 2, 3, 4, 5)৪. লিস্টের দৈর্ঘ্য (length): লিস্টের উপাদানগুলোর সংখ্যা বের করা।
val listLength = list1.length
println(listLength) // 5৫. লিস্টে উপাদান থাকা (contains): একটি উপাদান লিস্টে রয়েছে কি না, তা যাচাই করা।
val isPresent = list1.contains(3)
println(isPresent) // trueলিস্টের বিভিন্ন প্রকার
স্কালার লিস্ট দুটি প্রধান প্রকারে ভাগ করা যেতে পারে:
১. সাধারণ লিস্ট (List)
এটি সাধারণভাবে ব্যবহার করা হয় এবং ইমিউটেবল হয়ে থাকে। লিস্টের উপাদানগুলো নির্দিষ্ট অর্ডারে থাকে।
val simpleList = List(10, 20, 30, 40)২. নেল (Nil)
স্কালার লিস্টের একটি বিশেষ ধরনের প্রকার হল Nil, যা একটি খালি লিস্টের প্রতিনিধিত্ব করে।
val emptyList = Nilএটি স্কালার লিস্টের ভিত্তি, এবং যখন লিস্টটি খালি থাকে তখন এটি ব্যবহার করা হয়।
লিস্টে কিছু সাধারণ অপারেশন
১. map অপারেশন: লিস্টের প্রতিটি উপাদানের উপর একটি ফাংশন প্রয়োগ করা।
val doubledList = list1.map(x => x * 2)
println(doubledList) // List(2, 4, 6, 8, 10)২. filter অপারেশন: একটি শর্তের ভিত্তিতে উপাদান বাছাই করা।
val evenList = list1.filter(x => x % 2 == 0)
println(evenList) // List(2, 4)৩. reduce অপারেশন: লিস্টের উপাদানগুলোকে একত্রিত করে একটি ফলাফল তৈরি করা।
val sum = list1.reduce((x, y) => x + y)
println(sum) // 15সারাংশ
স্কালার লিস্ট একটি অত্যন্ত শক্তিশালী এবং বহুল ব্যবহৃত ডেটা স্ট্রাকচার, যা ইমিউটেবল এবং অর্ডারড উপাদান ধারণ করতে সক্ষম। এটি ফাংশনাল প্রোগ্রামিংয়ে সহজে ব্যবহৃত হয় এবং এর সাথে নানা ধরনের ফাংশনাল অপারেশন যেমন map, filter, reduce ইত্যাদি ব্যবহার করে ডেটার কার্যকরী প্রক্রিয়াকরণ করা যায়।
স্কালার কালেকশন ফ্রেমওয়ার্কে, লিস্ট একটি জনপ্রিয় ডেটা স্ট্রাকচার, যা একটি সিকোয়েন্স ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। স্কালা লিস্ট দুটি প্রধান ধরনের হয়: ইমিউটেবল লিস্ট (Immutable List) এবং **মিউটেবল লিস্ট (Mutable List)**। এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
১. ইমিউটেবল লিস্ট (Immutable List)
ইমিউটেবল লিস্ট এমন একটি লিস্ট, যার উপাদানগুলি একবার তৈরি হওয়ার পর আর পরিবর্তন করা যায় না। অর্থাৎ, আপনি যদি লিস্টে কোনো উপাদান যোগ বা মুছে ফেলতে চান, তাহলে একটি নতুন লিস্ট তৈরি হবে এবং পুরোনো লিস্ট অপরিবর্তিত থাকবে। স্কালা ভাষায়, List সাধারণত ইমিউটেবল হয়।
ইমিউটেবল লিস্টের বৈশিষ্ট্য:
- একবার তৈরি হলে এর উপাদান বা কাঠামো পরিবর্তন করা যায় না।
- ফাংশনাল প্রোগ্রামিং প্যাটার্নের সাথে সামঞ্জস্যপূর্ণ।
- থ্রেড সেফ (Thread-safe), কারণ একই লিস্টে একাধিক থ্রেড কাজ করলেও ডেটা অপরিবর্তিত থাকে।
- মেমরি ব্যবস্থাপনা হতে পারে বেশি কারণ যখন লিস্টে কোনো পরিবর্তন হয়, তখন নতুন একটি লিস্ট তৈরি হয়।
- সাধারণ অপারেশন যেমন
map,filter,flatMapনিরাপদভাবে ব্যবহার করা যায়।
ইমিউটেবল লিস্টের উদাহরণ:
val list = List(1, 2, 3)
val newList = 0 :: list // একটি নতুন লিস্ট তৈরি হবে: List(0, 1, 2, 3)২. মিউটেবল লিস্ট (Mutable List)
মিউটেবল লিস্ট এমন একটি লিস্ট, যার উপাদানগুলো পরিবর্তনযোগ্য। আপনি এই লিস্টে নতুন উপাদান যোগ করতে পারেন বা পুরোনো উপাদান মুছে ফেলতে পারেন, এবং এটি বিদ্যমান লিস্টের কাঠামো পরিবর্তন করবে। স্কালায়, ListBuffer হল একটি সাধারণ মিউটেবল লিস্ট।
মিউটেবল লিস্টের বৈশিষ্ট্য:
- উপাদানগুলি পরিবর্তনযোগ্য, অর্থাৎ লিস্টে উপাদান যোগ, মুছে ফেলা, বা আপডেট করা যায়।
- থ্রেড সেফ নয়, কারণ একাধিক থ্রেড একই লিস্টের উপাদান পরিবর্তন করতে পারে।
- মেমরি ব্যবস্থাপনায় কার্যকর, কারণ একটি পরিবর্তন হলে শুধুমাত্র বর্তমান লিস্টের কাঠামো পরিবর্তিত হয়, নতুন লিস্ট তৈরি করতে হয় না।
- দ্রুত অপারেশন, কারণ এটি সরাসরি বিদ্যমান লিস্টে পরিবর্তন করে।
মিউটেবল লিস্টের উদাহরণ:
import scala.collection.mutable.ListBuffer
val list = ListBuffer(1, 2, 3)
list += 4 // লিস্টে 4 যোগ করা হবে
list -= 2 // লিস্ট থেকে 2 মুছে ফেলা হবেইমিউটেবল এবং মিউটেবল লিস্টের মধ্যে পার্থক্য
| বৈশিষ্ট্য | ইমিউটেবল লিস্ট | মিউটেবল লিস্ট |
|---|---|---|
| পরিবর্তনযোগ্যতা | একবার তৈরি হলে পরিবর্তন করা যায় না | উপাদান যোগ বা মুছে ফেলা যায় |
| মেমরি ব্যবস্থাপনা | নতুন লিস্ট তৈরি হয় যখন পরিবর্তন করা হয় | বিদ্যমান লিস্ট পরিবর্তন হয়, নতুন লিস্ট তৈরি হয় না |
| থ্রেড সেফটি | থ্রেড সেফ (একাধিক থ্রেড একই লিস্ট ব্যবহার করতে পারে) | থ্রেড সেফ নয় |
| ফাংশনাল প্রোগ্রামিং | ফাংশনাল প্রোগ্রামিংয়ের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ | ফাংশনাল প্রোগ্রামিংয়ের সাথে কম সামঞ্জস্যপূর্ণ |
| পারফরম্যান্স | পারফরম্যান্স কম (কারণ নতুন লিস্ট তৈরি করতে হয়) | দ্রুত (কারণ সরাসরি পরিবর্তন করা হয়) |
| উপযুক্ত ব্যবহার | যখন নিরাপত্তা এবং অপরিবর্তনীয়তা প্রয়োজন | যখন ডেটার পরিবর্তন করতে হবে |
সারাংশ
- ইমিউটেবল লিস্ট নিরাপদ এবং অপরিবর্তনীয়, যা থ্রেড সেফ এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য উপযুক্ত।
- মিউটেবল লিস্ট দ্রুত এবং কার্যকর, তবে থ্রেড সেফ নয় এবং ডেটা পরিবর্তনের জন্য উপযুক্ত।
স্কালায় অ্যারে (Arrays) এবং লিস্ট (Lists) ডেটা স্ট্রাকচার গুলি খুব সাধারণ এবং গুরুত্বপূর্ণ। এগুলি একে একে উপাদান অ্যাক্সেস করার জন্য বিভিন্ন ইটারেশন কৌশল বা পদ্ধতি ব্যবহার করতে পারে। নিচে অ্যারে এবং লিস্টের ইটারেশন সম্পর্কিত কিছু সাধারণ কৌশল আলোচনা করা হলো।
১. অ্যারে ইটারেশন কৌশল (Array Iteration Techniques)
অ্যারে হলো একটি সিকোয়েন্সিয়াল ডেটা স্ট্রাকচার, যার উপাদানগুলি ইনডেক্সের মাধ্যমে অ্যাক্সেস করা যায়। স্কালায় অ্যারে ইটারেট করার জন্য নিচের কৌশলগুলি ব্যবহার করা হয়:
১.১. for লুপ ব্যবহার করে
এটি একটি সাধারণ পদ্ধতি, যেখানে অ্যারের প্রতিটি উপাদান একে একে প্রক্রিয়াকরণ করা হয়।
val arr = Array(1, 2, 3, 4, 5)
for (elem <- arr) {
println(elem)
}১.২. for লুপের ইনডেক্স সহ ব্যবহার
এটি ইনডেক্স সহ অ্যারে ইটারেট করতে ব্যবহৃত হয়, যেখানে আপনি ইনডেক্সের মাধ্যমে উপাদান অ্যাক্সেস করতে পারেন।
val arr = Array(1, 2, 3, 4, 5)
for (i <- arr.indices) {
println(s"Index: $i, Value: ${arr(i)}")
}১.৩. foreach মেথড ব্যবহার করে
এটি একটি ফাংশনাল অপারেশন, যেখানে প্রতিটি উপাদানের ওপর নির্দিষ্ট ফাংশন প্রয়োগ করা হয়।
val arr = Array(1, 2, 3, 4, 5)
arr.foreach(println)১.৪. map ব্যবহার করে
map ফাংশন ব্যবহার করে আপনি একটি নতুন অ্যারে তৈরি করতে পারেন, যেখানে প্রতিটি উপাদান একটি নির্দিষ্ট ফাংশনের মাধ্যমে প্রক্রিয়াকৃত হয়।
val arr = Array(1, 2, 3, 4, 5)
val squared = arr.map(x => x * x)
println(squared.mkString(", "))২. লিস্ট ইটারেশন কৌশল (List Iteration Techniques)
লিস্ট হলো একটি আরও উচ্চ-স্তরের ডেটা স্ট্রাকচার, যেখানে উপাদানগুলি একটি নির্দিষ্ট অর্ডারে থাকে। লিস্টের উপাদানগুলির ইটারেশনও বেশ সহজ, এবং এর জন্য স্কালা বেশ কিছু ফাংশনাল অপারেশন প্রদান করে।
২.১. for লুপ ব্যবহার করে
লিস্টের জন্যও সাধারণ for লুপ ব্যবহার করা যায়, যা প্রতিটি উপাদানকে একে একে প্রক্রিয়াকরণ করে।
val list = List(1, 2, 3, 4, 5)
for (elem <- list) {
println(elem)
}২.২. foreach মেথড ব্যবহার করে
এটি লিস্টের প্রতিটি উপাদানের ওপর নির্দিষ্ট ফাংশন প্রয়োগ করতে ব্যবহৃত হয়। এটি ফাংশনাল স্টাইলের এক পদ্ধতি।
val list = List(1, 2, 3, 4, 5)
list.foreach(println)২.৩. map ব্যবহার করে
map মেথডটি একটি নতুন লিস্ট তৈরি করতে ব্যবহৃত হয়, যেখানে প্রতিটি উপাদান কোনো ফাংশন অনুযায়ী পরিবর্তিত হয়।
val list = List(1, 2, 3, 4, 5)
val doubled = list.map(x => x * 2)
println(doubled.mkString(", "))২.৪. filter ব্যবহার করে
লিস্টের নির্দিষ্ট উপাদানগুলোর ওপর শর্ত প্রয়োগ করার জন্য filter মেথড ব্যবহার করা হয়। এটি নতুন একটি লিস্ট তৈরি করে, যেখানে শর্ত পূর্ণকারী উপাদানগুলো থাকবে।
val list = List(1, 2, 3, 4, 5)
val evenNumbers = list.filter(x => x % 2 == 0)
println(evenNumbers.mkString(", "))২.৫. fold এবং reduce ব্যবহার করে
fold এবং reduce ফাংশনগুলো ব্যবহার করে আপনি লিস্টের উপাদানগুলোর ওপর কম্বিনেশন বা সারাংশ তৈরি করতে পারেন। এগুলি কার্যকরী ফাংশনাল অপারেশন।
val list = List(1, 2, 3, 4, 5)
val sum = list.fold(0)(_ + _)
println(sum) // Output: 15সারাংশ
- অ্যারে ইটারেশন: অ্যারে ইটারেট করতে সাধারণ
forলুপ,foreach, এবংmapফাংশন ব্যবহার করা হয়। ইনডেক্সসহ ইটারেশন এবং ফাংশনাল অপারেশনও সহজেই করা যায়। - লিস্ট ইটারেশন: লিস্টের জন্য
foreach,map,filter,foldএবংreduceব্যবহার করা হয়। এটি ফাংশনাল প্রোগ্রামিংয়ের জন্য উপকারী এবং ডেটা ম্যানিপুলেশনের জন্য শক্তিশালী পদ্ধতি প্রদান করে।
এগুলি স্কালায় অ্যারে এবং লিস্টের ওপর ইটারেশন করার কিছু সাধারণ কৌশল, যা ডেটার প্রক্রিয়াকরণকে আরও কার্যকরী এবং দক্ষ করে তোলে।
Read more