Range এবং Strings (রেঞ্জ এবং স্ট্রিংস)

স্কালা কালেকশন (Scala Collections) - Computer Programming

329

স্কালা প্রোগ্রামিং ভাষায় রেঞ্জ (Range) এবং স্ট্রিংস (Strings) অত্যন্ত গুরুত্বপূর্ণ ডেটা টাইপ যা ডেটা সংগ্রহ এবং প্রক্রিয়া করতে ব্যবহৃত হয়। রেঞ্জটি সাধারণত একটি নির্দিষ্ট পরিসরে সংখ্যার সংগ্রহ, এবং স্ট্রিংস হল টেক্সট ডেটা ধারণ করার জন্য ব্যবহৃত ডেটা টাইপ।


১. রেঞ্জ (Range)

রেঞ্জ হল একটি নির্দিষ্ট পরিসরের সংখ্যা ধারণকারী ডেটা স্ট্রাকচার। এটি আপনাকে নির্দিষ্ট শুরু থেকে শেষ পর্যন্ত সংখ্যা তৈরি করার সুযোগ দেয়। রেঞ্জগুলি লিনিয়ার এবং অর্ডারড ডেটা সংগ্রহ হয়, অর্থাৎ সংখ্যাগুলির একটি নির্দিষ্ট ক্রম থাকে।

রেঞ্জ তৈরি:

রেঞ্জ তৈরি করার জন্য স্কালাতে to এবং until অপারেটর ব্যবহার করা হয়।

  • to: এটি দুটি মানের মধ্যে অন্তর্ভুক্ত শেষ মানও সহ রেঞ্জ তৈরি করে।
  • until: এটি দুটি মানের মধ্যে অন্তর্ভুক্ত শেষ মান ছাড়া রেঞ্জ তৈরি করে।

উদাহরণ:

// 1 থেকে 5 পর্যন্ত রেঞ্জ
val range1 = 1 to 5
println(range1)  // Range(1, 2, 3, 4, 5)

// 1 থেকে 5 পর্যন্ত, তবে 5 অন্তর্ভুক্ত নয়
val range2 = 1 until 5
println(range2)  // Range(1, 2, 3, 4)

এখানে, range1 এ 1 থেকে 5 পর্যন্ত সবগুলো সংখ্যা অন্তর্ভুক্ত রয়েছে, যেখানে range2 এ 1 থেকে 4 পর্যন্ত সংখ্যা রয়েছে, 5 অন্তর্ভুক্ত নয়।


রেঞ্জের উপর অপারেশন (Operations on Range):

রেঞ্জের উপর বিভিন্ন ধরনের অপারেশন করা যেতে পারে, যেমন ফিল্টার, ম্যাপ, ফোল্ড, ইত্যাদি।

উদাহরণ:

// রেঞ্জের উপর map অপারেশন
val range = 1 to 5
val squared = range.map(x => x * x)  // [1, 4, 9, 16, 25]
println(squared)

// রেঞ্জের উপর filter অপারেশন
val evenNumbers = range.filter(x => x % 2 == 0)  // [2, 4]
println(evenNumbers)

এখানে, range রেঞ্জের উপর map অপারেশন দিয়ে প্রতিটি সংখ্যার বর্গফল বের করা হয়েছে, এবং filter অপারেশন দিয়ে শুধু একক শ্রেণীর (even) সংখ্যা বের করা হয়েছে।


২. স্ট্রিংস (Strings)

স্ট্রিংস হল টেক্সট ডেটা ধারণ করার জন্য ব্যবহৃত ডেটা টাইপ। স্কালাতে স্ট্রিংস হল immutable ডেটা টাইপ, অর্থাৎ একবার স্ট্রিং তৈরি হলে তাকে পরিবর্তন করা যায় না। তবে স্ট্রিং ম্যানিপুলেশন করতে স্কালা অনেক শক্তিশালী ফাংশন প্রদান করে।

স্ট্রিং তৈরি:

val str = "Hello, Scala!"
println(str)  // Hello, Scala!

এখানে, str একটি স্ট্রিং যেটি "Hello, Scala!" ধারণ করছে।


স্ট্রিং অপারেশন (String Operations):

স্ট্রিংগুলির উপর বিভিন্ন ধরনের অপারেশন করা যায়। কিছু সাধারণ স্ট্রিং অপারেশন হল concat, substring, replace, split ইত্যাদি।

উদাহরণ:

val str = "Hello, Scala!"

// স্ট্রিং কেটানো
val subStr = str.substring(0, 5)
println(subStr)  // Hello

// স্ট্রিং সংযোজন
val newStr = str.concat(" Welcome to learning.")
println(newStr)  // Hello, Scala! Welcome to learning.

// স্ট্রিং প্রতিস্থাপন
val replacedStr = str.replace("Scala", "World")
println(replacedStr)  // Hello, World!

// স্ট্রিং ভেঙে ফেলা
val splitStr = str.split(", ")
println(splitStr.mkString(", "))  // Hello, Scala!

এখানে, আমরা স্ট্রিংয়ের substring, concat, replace, এবং split অপারেশন দেখেছি।


স্ট্রিং ইন্টারপোলেশন (String Interpolation):

স্ট্রিং ইন্টারপোলেশন ব্যবহার করে আপনি স্ট্রিংয়ের মধ্যে ভেরিয়েবল বা এক্সপ্রেশন সহজেই অন্তর্ভুক্ত করতে পারেন। স্কালাতে এই পদ্ধতিটি খুবই কার্যকরী।

উদাহরণ:

val name = "John"
val age = 30
val greeting = s"Hello, my name is $name and I am $age years old."
println(greeting)  // Hello, my name is John and I am 30 years old.

এখানে, s"..." সিনট্যাক্স ব্যবহার করে স্ট্রিংয়ের মধ্যে ভেরিয়েবল $name এবং $age অন্তর্ভুক্ত করা হয়েছে।


স্ট্রিং ফর্ম্যাটিং (String Formatting):

স্কালাতে স্ট্রিং ফর্ম্যাটিং করার জন্য f"..." অথবা printf ব্যবহার করা হয়, যেখানে আপনি সংখ্যা এবং ভেরিয়েবলগুলিকে একটি নির্দিষ্ট ফর্ম্যাটে প্রদর্শন করতে পারেন।

উদাহরণ:

val price = 19.99
val formattedString = f"The price is $$${price}%.2f"
println(formattedString)  // The price is $19.99

এখানে, f"..." ফর্ম্যাটিং ব্যবহার করে, price ভেরিয়েবলটি একটি নির্দিষ্ট ফর্ম্যাটে (দ্বি দশমিক স্থান) প্রদর্শিত হয়েছে।


৩. রেঞ্জ এবং স্ট্রিংসের মধ্যে সম্পর্ক (Range and Strings Relationship)

রেঞ্জ এবং স্ট্রিংসের মধ্যে সম্পর্ক হতে পারে যখন আপনি স্ট্রিং এর মধ্যে রেঞ্জ ব্যবহার করে বিশেষ কিছু খুঁজতে চান বা কোনো স্ট্রিংয়ের অংশ বের করতে চান। উদাহরণস্বরূপ, একটি স্ট্রিং থেকে রেঞ্জ দিয়ে কিছু নির্দিষ্ট অংশ নির্বাচন করা যেতে পারে।

উদাহরণ:

val str = "Scala Programming"
val substring = str.slice(0, 5)
println(substring)  // Scala

এখানে, slice মেথড ব্যবহার করে স্ট্রিংয়ের প্রথম 5 অক্ষর নেওয়া হয়েছে, যা স্ট্রিং রেঞ্জের মতো কাজ করেছে।


সারাংশ:

  • রেঞ্জ স্কালায় একটি ডেটা স্ট্রাকচার যা একটি নির্দিষ্ট সংখ্যার পরিসর ধারণ করে এবং এটি বিভিন্ন অপারেশন যেমন map, filter ইত্যাদি সমর্থন করে।
  • স্ট্রিংস টেক্সট ডেটার জন্য ব্যবহৃত ডেটা টাইপ এবং স্কালাতে স্ট্রিং ইন্টারপোলেশন, ফর্ম্যাটিং এবং অন্যান্য ম্যানিপুলেশন সুবিধা প্রদান করা হয়।
  • রেঞ্জ এবং স্ট্রিংস স্কালায় একটি শক্তিশালী ডেটা ম্যানিপুলেশন টুল হিসেবে কাজ করে, যা ডেটা সংগ্রহ, প্রক্রিয়া এবং ফর্ম্যাটিং করতে সহায়তা করে।
Content added By

স্কালাতে রেঞ্জ (Range) এমন একটি ডেটা স্ট্রাকচার যা একটি নির্দিষ্ট পরিসরের মধ্যে সিকোয়েন্স বা ক্রম তৈরি করতে ব্যবহৃত হয়। এটি একটি সহজ ও কার্যকরী উপায় যা নির্দিষ্ট সংখ্যার মধ্যে গণনা বা সিকোয়েন্স তৈরি করতে সাহায্য করে। রেঞ্জ সাধারণত ইনটিজার (Integer) পরিসরের মধ্যে হয় এবং এর মধ্যে কোনো একটি শুরু মান থেকে শেষ মান পর্যন্ত সংখ্যা গঠিত থাকে।


রেঞ্জের মৌলিক ধারণা:

স্কালাতে রেঞ্জ একটি ইমিউটেবল (immutable) সিকোয়েন্স, যা একটি নির্দিষ্ট পরিসরের মান প্রদান করে। এটি সাধারণত সংখ্যার ক্রম হিসেবে কাজ করে, যেমন ১ থেকে ১০ পর্যন্ত সংখ্যা।

রেঞ্জ তৈরি করার জন্য স্কালাতে দুটি পদ্ধতি ব্যবহৃত হয়:

  1. to: এটি পরিসরের মধ্যে অন্তর্ভুক্ত শেষ মান সহ একটি রেঞ্জ তৈরি করে।
  2. until: এটি পরিসরের মধ্যে অন্তর্ভুক্ত শেষ মান ছাড়াই একটি রেঞ্জ তৈরি করে।

১. to অপারেটর (Inclusive Range):

to অপারেটরটি রেঞ্জের মধ্যে প্রথম মান থেকে শেষ মান পর্যন্ত অন্তর্ভুক্ত করে, অর্থাৎ শুরু থেকে শেষ মান পর্যন্ত।

উদাহরণ:

val range1 = 1 to 5  // 1, 2, 3, 4, 5
println(range1)

এখানে, range1 একটি রেঞ্জ যা ১ থেকে ৫ পর্যন্ত সংখ্যাগুলি অন্তর্ভুক্ত করছে।


২. until অপারেটর (Exclusive Range):

until অপারেটরটি রেঞ্জের মধ্যে প্রথম মান থেকে শেষ মান পর্যন্ত, তবে শেষ মানটি অন্তর্ভুক্ত হয় না। অর্থাৎ, এটি একধাপ আগে পৌঁছে রেঞ্জ শেষ করে।

উদাহরণ:

val range2 = 1 until 5  // 1, 2, 3, 4
println(range2)

এখানে, range2 একটি রেঞ্জ যা ১ থেকে ৪ পর্যন্ত সংখ্যা অন্তর্ভুক্ত করছে, কিন্তু ৫ অন্তর্ভুক্ত হচ্ছে না।


৩. স্টেপিং (Stepping) বা ধাপের সাথে রেঞ্জ:

রেঞ্জে আপনি স্টেপ বা ধাপও সেট করতে পারেন, যার মাধ্যমে সংখ্যাগুলি নির্দিষ্ট একটি ধাপে বৃদ্ধি পাবে। এটি by অপারেটর দিয়ে করা হয়।

উদাহরণ:

val range3 = 1 to 10 by 2  // 1, 3, 5, 7, 9
println(range3)

এখানে, range3 একটি রেঞ্জ তৈরি করছে, যেখানে সংখ্যা ১ থেকে ১০ পর্যন্ত ২ ধাপে বাড়ছে। অর্থাৎ, ১, ৩, ৫, ৭, ৯ সংখ্যাগুলি থাকবে।


৪. নেগেটিভ রেঞ্জ:

রেঞ্জের মাধ্যমে আপনি নেগেটিভ সংখ্যাও তৈরি করতে পারেন। উদাহরণস্বরূপ, একটি নেগেটিভ রেঞ্জের মধ্যে আপনি নিম্নমান থেকে উচ্চমানের দিকে যেতে পারেন।

উদাহরণ:

val range4 = 10 to 1 by -1  // 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
println(range4)

এখানে, range4 একটি রেঞ্জ তৈরি করছে যেখানে ১০ থেকে ১ পর্যন্ত ধাপে ধাপে সংখ্যা কমানো হচ্ছে।


৫. রেঞ্জে প্রয়োগ (Range Applications):

রেঞ্জ বিভিন্ন পরিস্থিতিতে ব্যবহৃত হতে পারে, যেমন:

  • লুপে ব্যবহৃত: রেঞ্জের মাধ্যমে সহজেই লুপ করা যায়।
  • ডেটা ম্যানিপুলেশন: একাধিক মানের মধ্যে কাজ করতে রেঞ্জ ব্যবহার করা হয়।
  • গণনা: নির্দিষ্ট সংখ্যার মধ্যে গণনা বা হিসাব করতে রেঞ্জ খুবই সহায়ক।

উদাহরণ ১: লুপে রেঞ্জ ব্যবহার

for(i <- 1 to 5) {
  println(s"Iteration: $i")
}

এখানে, 1 to 5 রেঞ্জের মাধ্যমে ১ থেকে ৫ পর্যন্ত সংখ্যাগুলির উপর লুপ চলবে এবং প্রতিটি সংখ্যার জন্য প্রিন্ট স্টেটমেন্ট চলবে।

উদাহরণ ২: ডেটা ম্যানিপুলেশন

val numbers = 1 to 10
val squares = numbers.map(x => x * x)  // সংখ্যা গুলোর বর্গফল
println(squares)

এখানে, numbers রেঞ্জে থাকা প্রতিটি সংখ্যার বর্গফল বের করে squares নামক নতুন রেঞ্জ তৈরি করা হয়েছে।


সারাংশ:

রেঞ্জ একটি অত্যন্ত গুরুত্বপূর্ণ এবং শক্তিশালী ডেটা স্ট্রাকচার, যা স্কালাতে নির্দিষ্ট পরিসরের সংখ্যা বা মান তৈরি করতে ব্যবহৃত হয়। এটি to এবং until অপারেটরের মাধ্যমে সহজেই তৈরি করা যায় এবং by অপারেটর দিয়ে স্টেপ নির্ধারণ করা যায়। রেঞ্জগুলি বিভিন্ন ধাপে এবং রেঞ্জের মধ্যে সহজে গণনা, লুপিং এবং ডেটা ম্যানিপুলেশন করতে সহায়ক।

Content added By

স্কালাতে রেঞ্জ (Range) একটি জনপ্রিয় এবং শক্তিশালী টুল, যা সিকোয়েন্স (অথবা সিরিজ) তৈরি করতে ব্যবহৃত হয়। রেঞ্জের মাধ্যমে আপনি সহজে নির্দিষ্ট পরিসরের মধ্যে সিকোয়েন্স তৈরি করতে পারেন এবং সেই সিকোয়েন্সের উপাদানগুলোর উপর বিভিন্ন অপারেশন প্রয়োগ করতে পারেন।


১. রেঞ্জ ডিফাইন করা (Defining a Range):

স্কালাতে একটি রেঞ্জ সাধারণভাবে start (শুরু), end (শেষ), এবং step (ধাপ) দিয়ে ডিফাইন করা হয়। এর মাধ্যমে আপনি একটি নির্দিষ্ট পরিসরের মধ্যে একটি সিকোয়েন্স তৈরি করতে পারেন।

উদাহরণ:

val range1 = 1 to 5  // 1, 2, 3, 4, 5
val range2 = 1 until 5  // 1, 2, 3, 4 (5 excluded)
  • to: এই রেঞ্জটি অন্তর্ভুক্ত করে শেষ মান (যেমন, 1 to 5 রেঞ্জে ৫ অন্তর্ভুক্ত হবে)।
  • until: এই রেঞ্জটি শেষ মানটি অন্তর্ভুক্ত না করে (যেমন, 1 until 5 রেঞ্জে ৫ অন্তর্ভুক্ত হবে না)।

২. ধাপ নির্ধারণ (Defining Step):

রেঞ্জে ধাপ (step) নির্ধারণ করে আপনি সিকোয়েন্সে কেমন ইন্টারভাল চান তা নির্ধারণ করতে পারেন। এটি একটি অপশনাল প্যারামিটার এবং আপনি একটি মান দিতে পারেন।

উদাহরণ:

val rangeWithStep = 1 to 10 by 2  // 1, 3, 5, 7, 9

এখানে, by 2 দ্বারা প্রতিটি উপাদানের মধ্যে ২ সংখ্যার ব্যবধান রয়েছে। অর্থাৎ, সিকোয়েন্সের উপাদানগুলি ১ থেকে শুরু হয়ে ১০ পর্যন্ত যাবে, কিন্তু প্রতি দুটি সংখ্যার মধ্যে একটি অন্তর থাকবে।


৩. রেঞ্জের সাথে কাজ করা (Working with Ranges):

রেঞ্জ থেকে সিকোয়েন্স তৈরি করার পর আপনি ঐ সিকোয়েন্সের উপাদানগুলোর উপর বিভিন্ন অপারেশন প্রয়োগ করতে পারেন, যেমন map, filter, foreach, ইত্যাদি।

উদাহরণ:

val range = 1 to 5

// `map` ব্যবহার করে প্রতি উপাদান দ্বিগুণ করা
val doubledRange = range.map(x => x * 2)  // List(2, 4, 6, 8, 10)
println(doubledRange)

// `filter` ব্যবহার করে মান 3 এর চেয়ে বড় উপাদানগুলো ফিল্টার করা
val filteredRange = range.filter(x => x > 3)  // List(4, 5)
println(filteredRange)

// `foreach` ব্যবহার করে প্রতিটি উপাদান প্রিন্ট করা
range.foreach(println)

৪. রেঞ্জের সাথে অ্যারেঞ্জমেন্ট (Generating Sequences):

রেঞ্জের মাধ্যমে আপনি সিকোয়েন্স (Sequence) তৈরি করতে পারেন। স্কালাতে Range একটি ইমিউটেবল ডেটা স্ট্রাকচার যা পরিসরের উপাদানগুলো সংরক্ষণ করে।

উদাহরণ:

val range = 1 to 5
val sequence = range.toList  // List(1, 2, 3, 4, 5)
println(sequence)

এখানে, range.toList ব্যবহার করে একটি List তৈরি করা হয়েছে।


৫. রেঞ্জের মাধ্যমে লুপ (Looping with Range):

রেঞ্জের সাহায্যে লুপ ব্যবহার করা খুবই সহজ। আপনি for লুপের মাধ্যমে একটি রেঞ্জের উপাদানগুলোর উপর কার্যকরী অপারেশন প্রয়োগ করতে পারেন।

উদাহরণ:

for (i <- 1 to 5) {
  println(s"Value: $i")
}

এখানে, 1 to 5 রেঞ্জটি ১ থেকে ৫ পর্যন্ত সিকোয়েন্স তৈরি করবে এবং প্রতিটি মান প্রিন্ট করবে।


৬. ডাউনওয়ার্ড রেঞ্জ (Descending Range):

রেঞ্জের মধ্যে যদি আপনি ডাউনওয়ার্ড সিকোয়েন্স চান, অর্থাৎ একটি বড় সংখ্যার থেকে ছোট সংখ্যার দিকে রেঞ্জ তৈরি করতে চান, তবে to রেঞ্জ ব্যবহার করতে পারেন এবং ধাপের মান নেগেটিভ করতে হবে।

উদাহরণ:

val descendingRange = 10 to 1 by -1  // 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
println(descendingRange)

এখানে, by -1 দ্বারা রেঞ্জটি ছোট সংখ্যার দিকে কমে যাবে।


৭. রেঞ্জের ব্যবহার পরিসরের মধ্যে সংখ্যার গণনা (Counting within a range):

রেঞ্জের মধ্যে উপাদানগুলো গণনা করা এবং পরিসরের নির্দিষ্ট গুণাবলী বের করা সহজ। রেঞ্জের সাহায্যে আপনি যে কোনও পরিসরের মধ্যে গণনা বা শর্ত নির্ধারণ করতে পারেন।

উদাহরণ:

val range = 1 to 100

// ৫ এর গুণিতক খুঁজে বের করা
val multiplesOfFive = range.filter(x => x % 5 == 0)  // List(5, 10, 15, ..., 100)
println(multiplesOfFive)

এখানে, filter ব্যবহার করে ৫ এর গুণিতকগুলির সিকোয়েন্স তৈরি করা হয়েছে।


সারাংশ:

রেঞ্জ (Range) স্কালাতে একটি শক্তিশালী এবং সুবিধাজনক উপাদান যা সিকোয়েন্স তৈরি করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি সহজে সংখ্যার পরিসর তৈরি করতে পারেন, ধাপ নির্ধারণ করতে পারেন এবং সেই পরিসরের উপাদানগুলোর উপর বিভিন্ন অপারেশন প্রয়োগ করতে পারেন। to, until, by, map, filter, এবং অন্যান্য ফাংশনাল অপারেশন ব্যবহার করে স্কালাতে রেঞ্জের উপাদানগুলোকে সহজে ম্যানিপুলেট করা যায়।

Content added By

স্কালাতে স্ট্রিং ম্যানিপুলেশন এবং ইটারেশন একটি গুরুত্বপূর্ণ অংশ, যা ডেটাকে কাস্টমাইজ এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। স্কালাতে স্ট্রিংসের সাথে কাজ করার জন্য নানা ধরনের শক্তিশালী পদ্ধতি রয়েছে, যেমন স্ট্রিং কনক্যাটেনেশন, সাবস্ট্রিং এক্সট্রাকশন, রেপ্লেসমেন্ট, এবং ফর্ম্যাটিং। ইটারেশন পদ্ধতিগুলি স্ট্রিংয়ের উপাদানগুলো বা সংগ্রহে থাকা ডেটার উপর কাজ করার জন্য ব্যবহৃত হয়।


স্ট্রিং ম্যানিপুলেশন টেকনিকস (String Manipulation Techniques)

  1. স্ট্রিং কনক্যাটেনেশন (String Concatenation):
    স্কালাতে স্ট্রিংগুলোকে যোগ করার জন্য সাধারণভাবে + অপারেটর বা concat() মেথড ব্যবহার করা হয়।

    উদাহরণ:

    val str1 = "Hello"
    val str2 = "World"
    
    val result = str1 + " " + str2  // "Hello World"
    println(result)
  2. স্ট্রিংয়ের সাবস্ট্রিং এক্সট্রাকশন (Substring Extraction):
    স্ট্রিংয়ের নির্দিষ্ট অংশ এক্সট্রাক্ট করতে substring() মেথড ব্যবহার করা হয়। এটি একটি নির্দিষ্ট স্টার্ট ইনডেক্স এবং (ঐচ্ছিকভাবে) এন্ড ইনডেক্স নেয়।

    উদাহরণ:

    val str = "Hello Scala"
    val subStr = str.substring(0, 5)  // "Hello"
    println(subStr)
  3. স্ট্রিং রেপ্লেসমেন্ট (String Replacement):
    স্ট্রিংয়ের নির্দিষ্ট অংশ বা চরিত্র পরিবর্তন করতে replace() মেথড ব্যবহার করা হয়।

    উদাহরণ:

    val str = "Hello Scala"
    val newStr = str.replace("Scala", "World")  // "Hello World"
    println(newStr)
  4. স্ট্রিং ফরম্যাটিং (String Formatting):
    স্ট্রিং ফরম্যাটিংয়ের জন্য printf বা s"..." ইন্টারপোলেশন ব্যবহার করা যায়।

    উদাহরণ:

    val name = "Alice"
    val age = 25
    println(s"My name is $name and I am $age years old.")  // My name is Alice and I am 25 years old.
  5. স্ট্রিং কেস কনভার্সন (Case Conversion):
    স্ট্রিংয়ের কেস পরিবর্তন করতে toUpperCase() বা toLowerCase() ব্যবহার করা হয়।

    উদাহরণ:

    val str = "Hello Scala"
    val upperStr = str.toUpperCase()  // "HELLO SCALA"
    val lowerStr = str.toLowerCase()  // "hello scala"
    println(upperStr)
    println(lowerStr)
  6. স্ট্রিংয়ের দৈর্ঘ্য (Length of String):
    স্ট্রিংয়ের দৈর্ঘ্য জানার জন্য length প্রপার্টি ব্যবহার করা হয়।

    উদাহরণ:

    val str = "Hello Scala"
    println(str.length)  // 11
  7. স্ট্রিং স্প্লিট (String Split):
    স্ট্রিংয়ের অংশগুলো আলাদা করতে split() মেথড ব্যবহার করা হয়।

    উদাহরণ:

    val str = "apple,banana,cherry"
    val fruits = str.split(",")  // Array("apple", "banana", "cherry")
    fruits.foreach(println)

ইটারেশন (Iteration)

ইটারেশন বলতে একটি সংগ্রহের উপাদানগুলির উপর একটি নির্দিষ্ট পদ্ধতিতে লুপ চালানো বুঝানো হয়। স্কালাতে বিভিন্ন ধরনের লুপ এবং ফাংশনাল ইটারেশন টেকনিক রয়েছে, যেমন for লুপ, foreach, map, filter, fold, reduce ইত্যাদি।

  1. ফর লুপ (For Loop):
    for লুপ ব্যবহার করে একটি রেঞ্জ বা লিস্টের উপর ইটারেট করা যায়।

    উদাহরণ:

    for (i <- 1 to 5) {
      println(i)  // 1 2 3 4 5
    }
  2. ফর-ইচ লুপ (For-Each Loop):
    foreach() মেথড ব্যবহার করে একটি লিস্ট বা কালেকশনের উপাদানগুলির উপর লুপ চালানো যায়।

    উদাহরণ:

    val numbers = List(1, 2, 3, 4, 5)
    numbers.foreach(println)  // 1 2 3 4 5
  3. ম্যাপ (Map):
    map() ব্যবহার করে একটি কালেকশনের প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করা হয় এবং একটি নতুন কালেকশন তৈরি করা হয়।

    উদাহরণ:

    val numbers = List(1, 2, 3, 4)
    val doubled = numbers.map(x => x * 2)  // List(2, 4, 6, 8)
    doubled.foreach(println)
  4. ফিল্টার (Filter):
    filter() মেথড ব্যবহার করে একটি কালেকশনে থেকে নির্দিষ্ট শর্ত অনুযায়ী উপাদানগুলো বেছে নেওয়া হয়।

    উদাহরণ:

    val numbers = List(1, 2, 3, 4, 5)
    val evenNumbers = numbers.filter(x => x % 2 == 0)  // List(2, 4)
    evenNumbers.foreach(println)
  5. ফোল্ড (Fold):
    fold() মেথড ব্যবহার করে একটি কালেকশনের উপাদানগুলোকে একত্রিত করা যায় একটি একক মানে।

    উদাহরণ:

    val numbers = List(1, 2, 3, 4)
    val sum = numbers.fold(0)((acc, x) => acc + x)  // 10
    println(sum)
  6. রিডিউস (Reduce):
    reduce() মেথডও একটি কালেকশনের উপাদানগুলোকে একত্রিত করার জন্য ব্যবহৃত হয়, তবে এটি প্রথম উপাদান থেকে কাজ শুরু করে এবং একে একে পরবর্তী উপাদানের সাথে যুক্ত হয়।

    উদাহরণ:

    val numbers = List(1, 2, 3, 4)
    val product = numbers.reduce((acc, x) => acc * x)  // 24
    println(product)

সারাংশ:

স্কালাতে স্ট্রিং ম্যানিপুলেশন এবং ইটারেশন দুটি গুরুত্বপূর্ণ ক্ষমতা, যা বিভিন্ন প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। স্ট্রিং ম্যানিপুলেশন টেকনিকগুলি স্কালাতে ডেটার কাস্টমাইজেশন এবং টেক্সট প্রক্রিয়া সহজ করে, যেমন কনক্যাটেনেশন, সাবস্ট্রিং এক্সট্রাকশন, এবং ফরম্যাটিং। একইভাবে, ইটারেশন টেকনিকগুলির মাধ্যমে কালেকশনের উপর অপারেশন চালানো সহজ হয়, যেমন map, filter, foreach, এবং fold। এসব টেকনিক কোডকে আরো কার্যকরী এবং পরিষ্কার করে তোলে।

Content added By

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


১. স্ট্রিং এবং রেঞ্জের সংযোগ (Concatenation of String and Range)

স্ট্রিং এবং রেঞ্জের সংযোগ করার মাধ্যমে আপনি একটি রেঞ্জের মধ্যে থাকা মানগুলোকে স্ট্রিং হিসেবে একত্রিত করতে পারেন। এটি সাধারণত যখন আপনাকে রেঞ্জের মানগুলোর একটি সিরিজ স্ট্রিং আকারে তৈরি করতে হয়, তখন ব্যবহৃত হয়।

উদাহরণ ১: স্ট্রিং এবং রেঞ্জের সংযোগ

val range = 1 to 5
val rangeAsString = range.mkString(", ")
println(s"The range as a string: $rangeAsString")  // The range as a string: 1, 2, 3, 4, 5

এখানে, mkString(", ") মেথড ব্যবহার করা হয়েছে যা রেঞ্জের মানগুলোকে একটি স্ট্রিংয়ে পরিণত করে, যেখানে প্রতিটি মান একটি কমা ও স্পেস দ্বারা আলাদা হয়।


২. রেঞ্জ এবং স্ট্রিং এর মধ্যে সংযোগ (Connecting Range and String)

রেঞ্জের মধ্যে থাকা মানের সাথে স্ট্রিংকে যোগ করার মাধ্যমে আপনি একটি নতুন স্ট্রিং তৈরি করতে পারেন। সাধারণত এটি তখন ব্যবহৃত হয়, যখন একটি রেঞ্জের প্রতিটি মানের সাথে একটি স্ট্রিং যোগ করতে হয়।

উদাহরণ ২: রেঞ্জের সাথে স্ট্রিং যোগ করা

val range = 1 to 5
val result = range.map(x => s"Number: $x").mkString(", ")
println(result)  // Number: 1, Number: 2, Number: 3, Number: 4, Number: 5

এখানে, map ফাংশন ব্যবহার করে আমরা রেঞ্জের প্রতিটি মানের সাথে "Number: " স্ট্রিং যোগ করেছি এবং পরে mkString দিয়ে এগুলোকে একটি একক স্ট্রিংয়ে রূপান্তর করেছি।


৩. রেঞ্জের মধ্যে স্ট্রিং এর প্রয়োগ (Applying String Operations on Range)

আপনি রেঞ্জের ওপর স্ট্রিং অপারেশনও প্রয়োগ করতে পারেন, যেমন রেঞ্জের উপর স্ট্রিং ফিল্টারিং বা ম্যানিপুলেশন করা। এটি তখন ব্যবহার হয় যখন রেঞ্জের প্রতিটি মানকে স্ট্রিং হিসেবে ব্যবহার করে তার মধ্যে কোনো অপারেশন করতে হয়।

উদাহরণ ৩: রেঞ্জের মধ্যে স্ট্রিং অপারেশন

val range = 1 to 10
val evenNumbersAsString = range.filter(_ % 2 == 0).map(_.toString).mkString(", ")
println(evenNumbersAsString)  // 2, 4, 6, 8, 10

এখানে, প্রথমে রেঞ্জের মধ্যে থেকে even numbers ফিল্টার করা হয়েছে, তারপর প্রতিটি সংখ্যাকে স্ট্রিংয়ে রূপান্তর করা হয়েছে এবং সবশেষে mkString ব্যবহার করে একক স্ট্রিংয়ে যোগ করা হয়েছে।


৪. রেঞ্জ তৈরি এবং স্ট্রিং হিসেবে ব্যবহারের প্রয়োগ (Creating Range and Using it as String)

স্ট্রিং হিসেবে রেঞ্জ তৈরি করতে আমরা to, until, বা অন্য কোনো রেঞ্জ অপারেটর ব্যবহার করতে পারি, যেমন রেঞ্জের মধ্যে কিছু নির্দিষ্ট শর্তে ফিল্টার করে স্ট্রিং তৈরি করা।

উদাহরণ ৪: রেঞ্জ তৈরি এবং স্ট্রিং হিসেবে ব্যবহারের প্রয়োগ

val range = 1 to 10
val resultString = range.mkString("Range: [", ", ", "]")
println(resultString)  // Range: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

এখানে, mkString("Range: [", ", ", "]") ব্যবহার করা হয়েছে, যার মাধ্যমে রেঞ্জের মানগুলোর একটি ফরম্যাটেড স্ট্রিং তৈরি করা হয়েছে, যেখানে প্রতিটি মানের মধ্যে কমা রয়েছে এবং স্ট্রিং শুরু ও শেষেও কিছু নির্দিষ্ট টেক্সট যুক্ত করা হয়েছে।


৫. স্ট্রিং রেঞ্জ তৈরি করা (Creating Range from String)

স্ট্রিং থেকে একটি রেঞ্জ তৈরি করতে হলে, স্ট্রিংয়ের প্রথম এবং শেষ অক্ষরকে নির্দেশক হিসেবে ব্যবহার করে একটি রেঞ্জ তৈরি করা যায়। এটি স্কালাতে অক্ষরগুলির মধ্যে একটি রেঞ্জ তৈরি করতে সহায়ক।

উদাহরণ ৫: স্ট্রিং রেঞ্জ তৈরি করা

val letterRange = 'a' to 'e'
val result = letterRange.mkString(", ")
println(result)  // a, b, c, d, e

এখানে, 'a' to 'e' রেঞ্জ অপারেটর ব্যবহার করে আমরা a থেকে e পর্যন্ত অক্ষরগুলোর একটি রেঞ্জ তৈরি করেছি, এবং mkString দিয়ে রেঞ্জের মানগুলোকে স্ট্রিং আকারে একত্রিত করেছি।


সারাংশ:

স্ট্রিং এবং রেঞ্জের সংযোগ এবং প্রয়োগ স্কালাতে খুবই কার্যকরী হতে পারে, যেখানে আপনি রেঞ্জের মানগুলোর উপর বিভিন্ন অপারেশন বা ম্যানিপুলেশন করতে পারেন এবং স্ট্রিং হিসেবে রেঞ্জ ব্যবহার করতে পারেন। স্ট্রিং এবং রেঞ্জের মধ্যে সংযোগ যেমন mkString, map, এবং filter ব্যবহারের মাধ্যমে আপনি জটিল ডেটা প্রক্রিয়াকরণ করতে পারেন। এই সংযোগ স্কালাতে খুবই শক্তিশালী এবং নমনীয়, যা ডেটা ম্যানিপুলেশনকে সহজ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...