Go একটি স্ট্যাটিকালি টাইপড, কম্পাইলড প্রোগ্রামিং ভাষা। এই অনুশীলনীতে ভাষার তিনটি প্রধান বৈশিষ্ট্য পরিচয় করিয়ে দেওয়া হয়েছে: প্যাকেজ, ফাংশন ও ভ্যারিয়েবল।
Go-এর অ্যাপ্লিকেশনগুলো প্যাকেজে সাজানো থাকে।
একটি প্যাকেজ হলো একই ডিরেক্টরিতে থাকা সোর্স ফাইলগুলোর একটি সংগ্রহ।
একটি ডিরেক্টরির সব সোর্স ফাইলের প্যাকেজ নাম একই হতে হবে।
কোনো প্যাকেজ ইমপোর্ট করা হলে, কেবল সেই এনটিটিগুলোই (ফাংশন, টাইপ, ভ্যারিয়েবল, কনস্ট্যান্ট) ব্যবহার বা অ্যাক্সেস করা যায় যাদের নাম বড় হাতের অক্ষর দিয়ে শুরু হয়।
Go-তে নামকরণের সুপারিশকৃত ধরন হলো শনাক্তকারীদের নাম camelCase-এ লেখা, তবে যেগুলো প্যাকেজের বাইরে থেকেও ব্যবহারযোগ্য হওয়ার কথা সেগুলো PascalCase-এ হওয়া উচিত।
package lasagna
Go স্ট্যাটিকালি টাইপড, অর্থাৎ কম্পাইল করার সময় প্রতিটি ভ্যারিয়েবলের একটি নির্দিষ্ট টাইপ থাকতেই হবে।
স্পষ্টভাবে একটি টাইপ উল্লেখ করে ভ্যারিয়েবল ডিফাইন করা যায়:
var explicit int // Explicitly typed
আপনি একটি ইনিশিয়ালাইজারও ব্যবহার করতে পারেন, তখন কম্পাইলার ইনিশিয়ালাইজারের টাইপের সাথে মিলিয়ে ভ্যারিয়েবলের টাইপ নির্ধারণ করে দেবে।
implicit := 10 // Implicitly typed as an int
একবার ডিক্লেয়ার করা হলে, = অপারেটর দিয়ে ভ্যারিয়েবলে মান অ্যাসাইন করা যায়।
আর একবার ডিক্লেয়ার করা হলে, ভ্যারিয়েবলের টাইপ আর কখনোই বদলানো যায় না।
count := 1 // Assign initial value
count = 2 // Update to new value
count = false // This throws a compiler error due to assigning a non `int` type
কনস্ট্যান্টও ভ্যারিয়েবলের মতোই একটি তথ্য ধারণ করে, কিন্তু প্রোগ্রাম চলার সময় তাদের মান বদলাতে পারে না।
কনস্ট্যান্ট const কিওয়ার্ড দিয়ে ডিফাইন করা হয় এবং এগুলো সংখ্যা, ক্যারেক্টার, স্ট্রিং বা বুলিয়ান হতে পারে:
const Age = 21 // Defines a numeric constant 'Age' with the value of 21
Go-এর ফাংশন শূন্য বা তার বেশি প্যারামিটার নিতে পারে। প্যারামিটার অবশ্যই স্পষ্টভাবে টাইপ করা থাকতে হবে, এখানে কোনো টাইপ ইনফারেন্স নেই।
return কিওয়ার্ড ব্যবহার করে ফাংশন থেকে মান রিটার্ন করা হয়।
ফাংশনের নাম উল্লেখ করে এবং তার প্রতিটি প্যারামিটারের জন্য আর্গুমেন্ট পাস করে একটি ফাংশন কল করা হয়।
লক্ষ্য করুন, Go দুই ধরনের কমেন্ট সমর্থন করে।
এক লাইনের কমেন্টের আগে // বসে এবং বহু লাইনের কমেন্ট /* ও */-এর মাঝে লেখা হয়।
package greeting
// Hello is a public function.
func Hello (name string) string {
return hi(name)
}
// hi is a private function.
func hi (name string) string {
return "hi " + name
}
এই অনুশীলনীতে আপনি আপনার প্রিয় রান্নার বই থেকে একটি দুর্দান্ত লাসাগনা রান্না করতে সাহায্য করার জন্য কিছু কোড লিখবেন।
আপনার সামনে চারটি কাজ আছে, যেগুলোর সবই লাসাগনা রান্নায় ব্যয় হওয়া সময়ের সাথে সম্পর্কিত।
লাসাগনাটি কত মিনিট ওভেনে থাকা উচিত, তা দিয়ে OvenTime কনস্ট্যান্টটি ডিফাইন করুন।
রান্নার বই অনুসারে, প্রত্যাশিত ওভেনের সময় মিনিটে ৪০:
OvenTime
// => 40
RemainingOvenTime() ফাংশনটি ডিফাইন করুন, যা প্যারামিটার হিসেবে লাসাগনাটি এতক্ষণ কত মিনিট ওভেনে ছিল সেটি নেয় এবং আগের কাজের প্রত্যাশিত ওভেনের সময়ের ভিত্তিতে লাসাগনাটিকে আরও কত মিনিট ওভেনে থাকতে হবে তা রিটার্ন করে।
func RemainingOvenTime(actual int) int {
// TODO
}
RemainingOvenTime(30)
// => 10
PreparationTime ফাংশনটি ডিফাইন করুন, যা প্যারামিটার হিসেবে লাসাগনায় আপনি যতগুলো লেয়ার যোগ করেছেন তার সংখ্যা নেয় এবং লাসাগনা প্রস্তুত করতে আপনার কত মিনিট লেগেছে তা রিটার্ন করে, ধরে নিয়ে যে প্রতিটি লেয়ার প্রস্তুত করতে আপনার ২ মিনিট লাগে।
func PreparationTime(numberOfLayers int) int {
// TODO
}
PreparationTime(2)
// => 4
ElapsedTime ফাংশনটি ডিফাইন করুন, যা দুটি প্যারামিটার নেয়: প্রথম প্যারামিটারটি হলো লাসাগনায় আপনি যতগুলো লেয়ার যোগ করেছেন তার সংখ্যা, আর দ্বিতীয় প্যারামিটারটি হলো লাসাগনাটি কত মিনিট ওভেনে আছে তার সংখ্যা।
ফাংশনটি রিটার্ন করবে লাসাগনা রান্নায় আপনি মোট কত মিনিট কাজ করেছেন, যা হলো প্রস্তুতির সময় মিনিটের সাথে ওই মুহূর্তে লাসাগনা ওভেনে যত মিনিট কাটিয়েছে তার যোগফল।
func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
// TODO
}
ElapsedTime(3, 20)
// => 26
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 35টি কনসেপ্ট167টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।