গো ভাষায় অ্যারে
1.1 অ্যারের সংজ্ঞান ও ঘোষণা
একটি অ্যারে হলো একই ধরণের উপাদানগুলির একটি স্থির-আকার অনুক্রমবর্তী। গো ভাষায়, অ্যারের দৈর্ঘ্যটি অ্যারের ধরণের একটি অংশ হিসাবে গণিত হয়। এটা মানে করে যে, বিভিন্ন দৈর্ঘ্যের অ্যারেকে পৃথক ধরণের হিসাবে ব্যবহার করা হয়।
একটি অ্যারে ঘোষণার জন্য মৌলিক সিনট্যাক্স হলো:
var arr [n]T
এখানে, var
হলো চলক ঘোষণার জন্য শব্দ, arr
হলো অ্যারের নাম, n
অ্যারের দৈর্ঘ্য প্রকাশ করে, এবং T
হলো অ্যারেতে উপাদানের ধরণ প্রকাশ করে।
উদাহরণস্বরূপ, 5 টি পূর্ণসংখ্যা ধারণ করার জন্য:
var myArray [5]int
এই উদাহরণে, myArray
একটি অ্যারে যা পূর্ণসংখ্যার ধরণে মোট 5 টি পূর্ণসংখ্যা ধারণ করতে পারে।
1.2 অ্যারের আদান-প্রদান এবং ব্যবহার
অ্যারেকে ঘোষণা সাথে প্রাথমিক আদান-প্রদান করা যেতে পারে বা সূচিত মানের ব্যবহারের মাধ্যমে মান দেওয়া যেতে পারে। অ্যারের জন্য একাধিক পদ্ধতি আছে:
স্বত্বর আদান-প্রদান
var myArray = [5]int{10, 20, 30, 40, 50}
তারা প্রাথমিক মানের সংখ্যা দ্বারা অ্যারের দৈর্ঘ্য সিদ্ধান্ত করতে কম্পাইলারকে অনুমান করতে দেওয়া সম্ভব:
var myArray = [...]int{10, 20, 30, 40, 50}
এখানে, ...
কম্পাইলার দ্বারা অ্যারের দৈর্ঘ্য প্রমাণ করে।
সূচিত মানের ব্যবহার
var myArray [5]int
myArray[0] = 10
myArray[1] = 20
// অন্যান্য উপাদানগুলি শূন্য মানে আরম্ভিত হয়, কারণ শূন্য মানের পূর্ণসংখ্যা হলো 0
অ্যারেকে ব্যবহার করা ও মানগুলি সূচকের মাধ্যমে অ্যাক্সেস করা সহজ:
fmt.Println(myArray[2]) // তৃতীয় উপাদানে অ্যাক্সেস
1.3 অ্যারে ভ্রমণ
অ্যারে ভ্রমণের জন্য দুটি সাধারণ পথ হলো প্রথাগত for
লুপ এবং range
ব্যবহার করা।
for
লুপ ব্যবহার করে ভ্রমণ
for i := 0; i < len(myArray); i++ {
fmt.Println(myArray[i])
}
range
ব্যবহার করে ভ্রমণ
for index, value := range myArray {
fmt.Printf("সূচক: %d, মান: %d\n", index, value)
}
range
ব্যবহারের সুবিধা হলো যে, এটি দুটি মান প্রদান করে: বর্তমান সূচী অবস্থান এবং উক্ত অবস্থানে মানটি।
1.4 অ্যারের বৈশিষ্ট্য এবং সীমাবদ্ধতা
গো ভাষায়, অ্যারেগুলি মানের প্রকার, যা মানে প্রয়োজন হয় তখন অ্যারের অনুরোধে অন্য কোনও তরিকায় ব্যবহার করা হয় না, অ্যারের মৌলিক অংশ।
2 গো ভাষায় স্লাইস
2.1 স্লাইসের ধারণা
গো ভাষায়, একটি স্লাইস হলো একটি অ্যারের উপর একটি বিংশুন্যবিষয় হইতে যাৎমিক একটি সাম্যবিধান। গো অ্যারের আকারটি অস্থির, যা কিছু স্থিতিতে এর ব্যবহার সীমিত হয়। গো স্লাইসগুলির ডিজাইন করা হয়েছে এটির তাদের সুবিধাজনক, টাইটপাগল, এবং শক্তিশালী ইন্টারফেস প্রদান করা হওয়া। স্লাইস নিজে ডেটা ধরে না; তারা কেবল অধীনপ্রস্ত অ্যারের উপর তথ্য প্রতীত করতে ব্যবহার করে। তাদের ডায়নামিক স্বভাবে প্রধানভাবে নিম্নলিখিত মূল বৈশিষ্ট্য দ্বারা চিহ্নিত করা হয়:
- ডায়নামিক দৈর্ঘ্য: অ্যারের বন্ধন বিচ্ছিন্নভাবে, তাদের অপর্যাপ্তকালেই বৃদ্ধি বা হ্রাস দেওয়া যায়।
- টানবিনিমিতা: এর মাধ্যমে অংক আসন্ন করা খুব সহজভাবে অ্যারে প্রয়োগ করা যায়।
- সম্পর্ক প্রকার: স্লাইস অধীনপ্রস্ত অ্যারের মাধ্যমে উপাদানের উপাদানে অ্যাক্সেস করে, কোনও মানের অনুলিপি তৈরি করা বিনা।
2.2 স্লাইস ঘোষণা এবং আদান-প্রদান
একটি স্লাইস ঘোষণার বাণিজ্যিকঃ একটি অ্যারের ঘোষণা করার সমান হলো, তবে আপনাকে ঘোষণা করার সময় পদক্ষেপ করতে হবে ধরণ সূচিত করতে হবে না। উদাহরণস্বরূপ, একটি ইন্টিজারের স্লাইস ঘোষণা করার উপায় নিম্নলিখিত:
var slice []int
আপনি একটি স্লাইস লিটারেল ব্যবহার করে একটি স্লাইস আদান-প্রদান করতে পারেন:
slice := []int{1, 2, 3}
আপনি একটি স্লাইস আদান-প্রদান করতে ক্ষমতা প্রদান করা make
ফাংশনটি ব্যবহার করে করতে পারবেন, যা আপনাকে স্লাইসের দৈর্ঘ্য এবং ক্ষমতা সূচিত করার অনুমতি দেয়:
slice := make([]int, 5) // পূর্ণসংখ্যা এবং ক্ষমতার সাথে স্লাইস তৈরি করুন
যদি বড় ক্ষমতা প্রয়োজন হয়, আপনি তৃতীয় প্যারামিটার হিসাবে ক্ষমতা দিতে পারেন make
ফাংশন ব্যবহার করে:
slice := make([]int, 5, 10) // 5 এর দৈর্ঘ্য এবং 10 এর ক্ষমতা সহ পূর্ণসংখ্যার স্লাইস তৈরি করা হয়েছে
2.3 স্লাইস এবং অ্যারের মধ্যে সম্পর্ক
স্লাইস তৈরি করা হয় অ্যারের সেগমেন্ট নির্ধারণ করে, যা সেগমেন্টের একটি রেফারেন্স তৈরি করে। উদাহরণস্বরূপ, নিচের অ্যারে দেওয়া থাকলে:
array := [5]int{10, 20, 30, 40, 50}
আমরা নিম্নলিখিত ভাবে একটি স্লাইস তৈরি করতে পারি:
slice := array[1:4]
এই স্লাইস slice
এর প্রস্তুতি অ্যারে array
এর তাত্ত্বিক চরম থেকে সেগমেন্টের উপর রেফারেন্স নিবে, এখানে 1 থেকে 3 আইন্ডেক্সের মধ্যে (1 আইন্ডেক্স সহ, 4 আইন্ডেক্স বেথেক)।
গুরুত্বপূর্ণ হল যে স্লাইসটি প্রায়ই অ্যারের মানগুলি কপি করে না; এটি শুধুমাত্র মূল অ্যারের একটি অনুসন্ধানে পয়েন্ট করে। তাই, স্লাইসে পরিবর্তন করলে অ্যারেও প্রভাবিত হয়, এবং বিপরীতও। এই রেফারেন্স সম্পর্কটি স্লাইস প্রভাবশীল ভাবে ব্যবহারের জন্য গুরুত্বপূর্ণ।
2.4 স্লাইস উপর মৌলিক অপারেশন
2.4.1 ইনডেক্সিং
স্লাইস তাদের উপাদানের ইন্ডেক্স ব্যবহার করে অ্যারের মতন, শুরু হয় 0 থেকে। উদাহরণস্বরূপ:
slice := []int{10, 20, 30, 40}
// প্রথম এবং তৃতীয় উপাদানের অ্যাক্সেস
fmt.Println(slice[0], slice[2])
2.4.2 দৈর্ঘ্য এবং ধারণক্ষমতা
স্লাইসের দুটি গুণ আছে: দৈর্ঘ্য (len
) এবং ধারণক্ষমতা (cap
)। দৈর্ঘ্য হল স্লাইসের উপাদানের সংখ্যা, এবং ধারণক্ষমতা হল স্লাইসের প্রথম উপাদান থেকে এর মৌলিক অ্যারের শেষ পর্যন্ত উপাদানের সংখ্যা।
slice := []int{10, 20, 30, 40}
// স্লাইসের দৈর্ঘ্য এবং ধারণক্ষমতা প্রিন্ট করা
fmt.Println(len(slice), cap(slice))
2.4.3 উপাদান অ্যাপেন্ড করা
append
ফাংশনটি ব্যবহার করা হয় স্লাইসে উপাদান যুক্ত করার জন্য। যখন স্লাইসের ধারণক্ষমতা নতুন উপাদানগুলি ধারণ করতে যথেষ্ট না থাকে, append
ফাংশনটি স্লাইসের ধারণক্ষমতা স্বয়ংক্রিয়ভাবে প্রসারিত করে।
slice := []int{10, 20, 30}
// একটি একক উপাদান যুক্ত করা
slice = append(slice, 40)
// একাধিক উপাদান যুক্ত করা
slice = append(slice, 50, 60)
fmt.Println(slice)
নোট করা জরুরী যে, append
ব্যবহার করার সময়, উপাদান যোগ করতে সময় এটি একটি নতুন স্লাইস ফেরত দিতে পারে। যদি মৌলিক অ্যারের ধারণক্ষমতা যথেষ্ট না থাকে, তবে append
অপারেশনটি স্লাইসকে নতুন, বড় অ্যারের দিকে পয়েন্ট করতে বাধ্য করবে।
2.5 স্লাইসের প্রসারণ এবং কপি
copy
ফাংশনটি ব্যবহার করা যায় একটি স্লাইসের উপাদানগুলি অন্য স্লাইসে কপি করার জন্য। লক্ষ্যপ্রাপ্ত স্লাইসটি ইতিমধ্যেই যথেষ্ট স্থান বিন্যাস করে থাকতে হবে যেন কপিওয়ের অপারেশনটি লক্ষ্য স্লাইসের ধারণক্ষমতা বদলে না।
2.5.1 copy
ফাংশন ব্যবহার
নিম্নলিখিত কোডটি copy
ব্যবহার করার উদাহরণ প্রদর্শন করে:
src := []int{1, 2, 3}
dst := make([]int, 3)
// উপাদানগুলি লক্ষ্য স্লাইসে কপি করা
copied := copy(dst, src)
fmt.Println(dst, copied)
copy
ফাংশন কপি করা উপাদানের সংখ্যা ফিরিয়ে দেয়, এবং এটি লক্ষ্য স্লাইসের দৈর্ঘ্য বা উদ্ধারণ স্লাইসের দৈর্ঘ্য অতিক্রম করবে না, যেটির মধ্যে কোনটি ছোটবে তা।
2.5.2 বিবেচনা
copy
ফাংশন ব্যবহার করার সময়, যদি নতুন উপাদান যোগ করা হয় কিন্তু লক্ষ্য স্লাইসটির যথেষ্ট ফলাফল না থাকে, তবে কেবল তারা কপি করতে যোগ্য উপাদানগুলি কপি করা হবে।
2.6 বহু-মাত্রিক স্লাইস
একটি বহু-মাত্রিক স্লাইস হল মাল্টিপল স্লাইস ধারণ করা একটি স্লাইস। এটি মাত্রিক অ্যারের মতন একটি বহু-মাত্রিক অ্যারের মতন, কিন্তু স্লাইসগুলির পরিবর্তিমান দৈর্ঘ্যের কারণে, বহু-মাত্রিক স্লাইসগুলি আরও লচ্ছ এবং যত্নশীল।
2.6.1 বহু-মাত্রিক স্লাইস তৈরি করা
একটি দ্বিমাত্রিক স্লাইস (স্লাইসের স্লাইস):
twoD := make([][]int, 3)
for i := 0; i < 3; i++ {
twoD[i] = make([]int, 3)
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("দ্বিমাত্রিক স্লাইস: ", twoD)
2.6.2 বহু-মাত্রিক স্লাইস ব্যবহার
বহু-মাত্রিক স্লাইস ব্যবহার করা এক-মাত্র স্লাইস ব্যবহারের মতন, ইনডেক্সের মাধ্যমে অ্যাক্সেস করা হয়:
// দ্বিমাত্রিক স্লাইসের উপাদানের অ্যাক্সেস
val := twoD[1][2]
fmt.Println(val)
3 অ্যারে এবং স্লাইস অ্যাপ্লিকেশনের তুলনা
3.1 ব্যবহারের সংকল্প তুলনা
গো এবং স্লাইসে দুটিরই একই ধরণের ডেটা সংগ্রহের জন্য ব্যবহৃত হয়, তবে ব্যবহারের সংকল্পে তারা পৃথকভাবে পার্থক্য রাখে।
অ্যারেস:
- একটি অ্যারের দৈর্ঘ্য ঘোষণা করার সময় দূরত্ব স্থায়ী, যা একটি পরিচিত, স্থির সংখ্যক উপাদান সংরক্ষণ করার জন্য উপযুক্ত।
- যখন একটি নির্ধারিত আয়তনের একটি ধারণা প্রতিনিধিত্ব করা প্রয়োজন হয়, যেমন একটি নির্ধারিত আয়তনের মেট্রিক্সের মৌখিক প্রতিনিধিত্ব, অ্যারেটি সেরা পথয়ায়।
- অ্যারেগুলি স্ট্যাকে বরাদ্দ করা যেতে পারে, যেটা অ্যারের আকারের মাত্রা বড় না হলে উচ্চ কর্মক্ষমতা প্রদান করে।
স্লাইস:
- স্লাইসটি একটি বিবহৃত অপসারণের সারঝাম, যার বিভিন্ন দৈর্ঘ্যের ভেতরে তথ্যগুলি রাখার জন্য উপযোগী, যা দ্রুতিতে পরিবর্তন করে বা যা পরিবর্তিত হতে পারে।
- যখন প্রয়োজন হয় একটি বিস্তৃত অ্যারে যা আবশ্যিকতামূলকভাবে বাড়তি বা কমিয়ে যেতে পারে, যেমন অনিশ্চিত ব্যবহারকারী ইনপুট রাখার জন্য, একটি স্লাইস পছন্দনীয় বেছে নেওয়া হয়।
- একটি স্লাইসের মেমোরি বিন্যাস অংশে অ্যারের অংশ বা পুরো সরবরাহের উপর সহজ উল্লেখ করার মধ্যে অনুমোদন দেয়, যেখানেই স্ট্রিংগুলি, ফাইলের কন্টেন্ট ভাগ করা এবং অন্যান্য পরিস্থিতিতে ব্যবহার করা হয়।
সংক্ষেপে, অ্যারেগুলি নির্ধারিত আয়তনের প্রয়োজনীয় পরিস্থিতিতে উপযুক্ত হয়, যা গোর স্থির মেমোরি ব্যবস্থার মৌলিক উপায়গুলির প্রতিফলক, আর স্লাইসগুলি আরও সফল, বা অ্যারেগুলির একটি সারঝামের অবস্থান, যা বৃদ্ধি করা বা কমানোর জন্য অনুমোদন দেয়।