আজকে আমরা , String & StringBuilder নিয়ে কথা বলবো ।। আমরা সাধারণত , এতদিন String ব্যবহার করে এসেছি , কিন্তু --- আজ আমরা এটা মূলত মেমোরিতে কাজ করছে ?? সেটা নিয়ে কথা বলবো ।। তার আগে , চলো আমরা নিচের কোড দেখে আসি -------------------
using System;
namespace joy
{
public class Program
{
public static void Main()
{
string joy = "c# ";
joy += "Video ";
joy += "Tutorial ";
joy += "for ";
joy += "beginners";
Console.WriteLine(joy);
Console.ReadKey();
}
}
}
আচ্ছা এখানে আসলে কি হচ্ছে ?? আমরা জানি , string একটা ( sealed) ক্লাস | আমরা যখন , string joy দিয়ে স্ট্রিং ক্লাসের একটা রেফারেন্স ভ্যারিয়েবল ক্রিয়েট করলাম ।। তারপর , সেটা একটা অব্জেক্টকে ( c# ) পয়েন্ট করে ।। তারপর , কনক্যাটিনেশন এর মাধ্যমে , এই joy রেফারেন্স ভ্যারিয়েবল এর সাথে অন্য একটা অব্জেক্ট ( Video) ক্রিয়েট করে ,সেটাকে পয়েন্ট করে দিয়েছি ।।
এভাবে , আমরা মোট এখানে পাচটা অব্জেক্ট ক্রিয়েট করেছি । । কিন্তু , কাজের কাজ কিন্তু সেই শেষের অব্জেক্টটাই , প্রথম চারটার কিন্তু আমাদের কোনো দরকার নেই , কিন্তু মেমোরিতে হিপ মেমোরিতে ঠিকই তা রয়ে গেছে , যে পর্যন্ত না গারবেজ কালেক্টর সেগুলোকে ক্লিন না করে । ।
তো , আমাদের এমন একটা ক্লাস দরকার , যেটা নতুন নতুন অব্জেক্ট ক্রিয়েট না করে - একটা অব্জেক্টকেই পরিবর্তন করবে । এ কথাকেই ইংরেজীতে মিউটেবল ( Mutable ) বলা হয় , যার অর্থ পরিবরতনশীল । এর মানে , আমরা বুঝতে পারলাম যে - আমাদের স্ট্রিং অব্জেক্ট'টা Mutable নয় , এক কথায় বলতে গেলে - Immutable ( অপরিবরতনশীল ) ।।
তো চলো , আমরা নতুন একটা ক্লাস দেখি ,যেটা - Mutable । এরকম ক্লাস হলো , StringBuilder , চলো দেখে আসি --------------------------
using System;
using System.Text;
namespace joy
{
public class Program
{
public static void Main()
{
StringBuilder joy =new StringBuilder("c# ");
joy.Append( "Video ");
joy .Append( "Tutorial ");
joy.Append( "for ");
joy.Append("beginners");
Console.WriteLine(joy);
Console.ReadKey();
}
}
এখানে , কি হচ্ছে ?? চলো একটু বুঝার ট্রাই করি ।। আমাদের এই ক্লাস , হিপ মেমোরিতে - নতুন নতুন করে অব্জেক্ট ক্রিয়েট করছে না । আমরা , প্রথমে যে অব্জেক্ট ক্রিয়েট করেছিলাম ( C# ) , সেটাকেই শুধু পরিবরতন করছে ।। একেবারে শেষে পরিবর্তন হয়ে , (c# Video Tutorial for beginners ) হয়ে যায় ।। তবে এই ক্ষেত্রে , সিনট্যাক্সগত পরিবর্তনের দিকে আছে , শুধু Append Method এর ব্যপার । কারণ , এই ক্ষেত্রে আমাদের আগেরটার মতো কনক্যাটিনেশন ইউজ করতে পারবো না ।।। এখানে , আমাদের Append মেথোড ইউজ করতে হবে । ।
এই মেথোডটা মূলত আগের স্ট্রিং ক্লাসের মতো নতুন ইন্সট্যান্স ক্রিয়েট করে না , এটা একই ইন্সট্যান্স - এ নতুন স্ট্রিং'টা কপি করে চেইঞ্জ করে , যার কারণে শুধু শুধু নতুন নতুন অব্জেক্ট ক্রিয়েট করে না , একই ইন্সট্যান্স এর ভ্যালু বেড়ে যায় ও সাথে সাথে তার ক্যাপাসিটি'ও সময় অনুযায়ী বেড়ে যায় ।।
তো যাই হোক , তুমি বুঝতেই পারছো যে - এটা কতো গুরুত্বপূরণ ভুমিকা পালন করবে , যখন ---আমরা অনেকগুলো স্ট্রিং ম্যানিপিউলিশেন ইউজ করবো !! নিচের ছবিটা দেখে আরো কিছুটা ক্লিয়ার হবে বিষয়টা , আজ এইটুকুই !!!
using System;
namespace joy
{
public class Program
{
public static void Main()
{
string joy = "c# ";
joy += "Video ";
joy += "Tutorial ";
joy += "for ";
joy += "beginners";
Console.WriteLine(joy);
Console.ReadKey();
}
}
}
আচ্ছা এখানে আসলে কি হচ্ছে ?? আমরা জানি , string একটা ( sealed) ক্লাস | আমরা যখন , string joy দিয়ে স্ট্রিং ক্লাসের একটা রেফারেন্স ভ্যারিয়েবল ক্রিয়েট করলাম ।। তারপর , সেটা একটা অব্জেক্টকে ( c# ) পয়েন্ট করে ।। তারপর , কনক্যাটিনেশন এর মাধ্যমে , এই joy রেফারেন্স ভ্যারিয়েবল এর সাথে অন্য একটা অব্জেক্ট ( Video) ক্রিয়েট করে ,সেটাকে পয়েন্ট করে দিয়েছি ।।
এভাবে , আমরা মোট এখানে পাচটা অব্জেক্ট ক্রিয়েট করেছি । । কিন্তু , কাজের কাজ কিন্তু সেই শেষের অব্জেক্টটাই , প্রথম চারটার কিন্তু আমাদের কোনো দরকার নেই , কিন্তু মেমোরিতে হিপ মেমোরিতে ঠিকই তা রয়ে গেছে , যে পর্যন্ত না গারবেজ কালেক্টর সেগুলোকে ক্লিন না করে । ।
তো , আমাদের এমন একটা ক্লাস দরকার , যেটা নতুন নতুন অব্জেক্ট ক্রিয়েট না করে - একটা অব্জেক্টকেই পরিবর্তন করবে । এ কথাকেই ইংরেজীতে মিউটেবল ( Mutable ) বলা হয় , যার অর্থ পরিবরতনশীল । এর মানে , আমরা বুঝতে পারলাম যে - আমাদের স্ট্রিং অব্জেক্ট'টা Mutable নয় , এক কথায় বলতে গেলে - Immutable ( অপরিবরতনশীল ) ।।
তো চলো , আমরা নতুন একটা ক্লাস দেখি ,যেটা - Mutable । এরকম ক্লাস হলো , StringBuilder , চলো দেখে আসি --------------------------
using System;
using System.Text;
namespace joy
{
public class Program
{
public static void Main()
{
StringBuilder joy =new StringBuilder("c# ");
joy.Append( "Video ");
joy .Append( "Tutorial ");
joy.Append( "for ");
joy.Append("beginners");
Console.WriteLine(joy);
Console.ReadKey();
}
}
এখানে , কি হচ্ছে ?? চলো একটু বুঝার ট্রাই করি ।। আমাদের এই ক্লাস , হিপ মেমোরিতে - নতুন নতুন করে অব্জেক্ট ক্রিয়েট করছে না । আমরা , প্রথমে যে অব্জেক্ট ক্রিয়েট করেছিলাম ( C# ) , সেটাকেই শুধু পরিবরতন করছে ।। একেবারে শেষে পরিবর্তন হয়ে , (c# Video Tutorial for beginners ) হয়ে যায় ।। তবে এই ক্ষেত্রে , সিনট্যাক্সগত পরিবর্তনের দিকে আছে , শুধু Append Method এর ব্যপার । কারণ , এই ক্ষেত্রে আমাদের আগেরটার মতো কনক্যাটিনেশন ইউজ করতে পারবো না ।।। এখানে , আমাদের Append মেথোড ইউজ করতে হবে । ।
এই মেথোডটা মূলত আগের স্ট্রিং ক্লাসের মতো নতুন ইন্সট্যান্স ক্রিয়েট করে না , এটা একই ইন্সট্যান্স - এ নতুন স্ট্রিং'টা কপি করে চেইঞ্জ করে , যার কারণে শুধু শুধু নতুন নতুন অব্জেক্ট ক্রিয়েট করে না , একই ইন্সট্যান্স এর ভ্যালু বেড়ে যায় ও সাথে সাথে তার ক্যাপাসিটি'ও সময় অনুযায়ী বেড়ে যায় ।।
তো যাই হোক , তুমি বুঝতেই পারছো যে - এটা কতো গুরুত্বপূরণ ভুমিকা পালন করবে , যখন ---আমরা অনেকগুলো স্ট্রিং ম্যানিপিউলিশেন ইউজ করবো !! নিচের ছবিটা দেখে আরো কিছুটা ক্লিয়ার হবে বিষয়টা , আজ এইটুকুই !!!
No comments:
Post a Comment