Go-তে মৌলিক সাংখ্যিক টাইপ আছে, যেগুলো ইন্টিজার বা ফ্লোটিং-পয়েন্ট মানের সেট প্রকাশ করতে পারে। আপনার প্রয়োজন অনুযায়ী মানের আকার এবং যে কম্পিউটারে অ্যাপ্লিকেশনটি চলছে তার আর্কিটেকচার অনুসারে টাইপ ভিন্ন হয় (যেমন ৩২-বিট ও ৬৪-বিট)।
এই অনুশীলনীর জন্য আপনাকে শুধু এগুলোর সাথেই কাজ করতে হবে:
int: যেমন 0, 255, 2147483647।
একটি সাইনড ইন্টিজার, যার আকার অন্তত ৩২ বিট (মানের পরিসীমা: -2147483648 থেকে 2147483647)।
তবে এটি সিস্টেমের আর্কিটেকচারের উপর নির্ভর করে।
আধুনিক কম্পিউটারগুলোর বেশিরভাগই ৬৪ বিট, তাই int-এর আকার হবে ৬৪ বিট (মানের পরিসীমা: -9223372036854775808 থেকে 9223372036854775807)।
float64: যেমন 0.0, 3.14।
এতে সব ৬৪-বিট ফ্লোটিং-পয়েন্ট সংখ্যার সেট থাকে।
uint: যেমন 0, 255।
একটি আনসাইনড ইন্টিজার, যার আকার int-এর সমান (মানের পরিসীমা: ৩২ বিটের জন্য 0 থেকে 4294967295 এবং ৬৪ বিটের জন্য 0 থেকে 18446744073709551615)
সংখ্যাগুলো টাইপ কনভার্সন (ডেটা টাইপ রূপান্তর) এর মাধ্যমে অন্য সাংখ্যিক টাইপে রূপান্তর করা যায়।
Go অনেক স্ট্যান্ডার্ড গাণিতিক অপারেটর সমর্থন করে:
| অপারেটর | উদাহরণ |
|---|---|
+ |
4 + 6 == 10 |
- |
15 - 10 == 5 |
* |
2 * 3 == 6 |
/ |
13 / 3 == 4 |
% |
13 % 3 == 1 |
ইন্টিজার বিভাজনের ক্ষেত্রে ভাগশেষ বাদ দেওয়া হয় (যেমন 5 / 2 == 2)।
উপরের অপারেটরগুলোর জন্য Go-তে শর্টহ্যান্ড অ্যাসাইনমেন্ট আছে (যেমন a += 5 হলো a = a + 5-এর সংক্ষিপ্ত রূপ)।
Go ++ এবং -- ইনক্রিমেন্ট ও ডিক্রিমেন্ট স্টেটমেন্টও সমর্থন করে (যেমন a++)।
টাইপের মধ্যে রূপান্তর করা হয় এমন একটি ফাংশনের মাধ্যমে, যার নাম হয় যে টাইপে রূপান্তর করতে চান সেই টাইপের নাম। যেমন:
var x int = 42 // x has type int
f := float64(x) // f has type float64 (ie. 42.0)
var y float64 = 11.9 // y has type float64
i := int(y) // i has type int (ie. 11)
অনেক ভাষায় আপনি ভিন্ন টাইপের ভ্যারিয়েবলে গাণিতিক অপারেশন চালাতে পারেন, কিন্তু Go-তে এটি এরর দেয়। যেমন:
var x int = 42
// this line produces an error
value := float32(2.0) * x // invalid operation: mismatched types float32 and int
// you must convert int type to float32 before performing arithmetic operation
value := float32(2.0) * float32(x)
এই অনুশীলনীতে আপনি একটি গাড়ি কারখানার উৎপাদন বিশ্লেষণ করার কোড লিখবেন।
গাড়িগুলো একটি অ্যাসেম্বলি লাইনে উৎপাদিত হয়। অ্যাসেম্বলি লাইনের একটি নির্দিষ্ট গতি থাকে, যা পরিবর্তন করা যায়। অ্যাসেম্বলি লাইনের গতি যত বেশি হয়, তত বেশি গাড়ি উৎপাদিত হয়। তবে অ্যাসেম্বলি লাইনের গতি পরিবর্তন করলে সফলভাবে উৎপাদিত গাড়ির সংখ্যাও পরিবর্তিত হয়, অর্থাৎ যেসব গাড়ির উৎপাদনে কোনো এরর থাকে না।
এমন একটি ফাংশন লিখুন, যা প্রতি ঘণ্টায় উৎপাদিত গাড়ির সংখ্যা ও সফলতার হার নিয়ে প্রতি ঘণ্টায় উৎপাদিত সফল গাড়ির সংখ্যা গণনা করে।
সফলতার হার শতকরা হিসেবে দেওয়া হয়, 0 থেকে 100 পর্যন্ত:
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
নোট: রিটার্ন ভ্যালুটি একটি float64 হওয়া উচিত।
এমন একটি ফাংশন লিখুন, যা প্রতি ঘণ্টায় উৎপাদিত গাড়ির সংখ্যা ও সফলতার হার নিয়ে গণনা করে প্রতি মিনিটে কতগুলো গাড়ি সফলভাবে উৎপাদিত হয়:
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
নোট: রিটার্ন ভ্যালুটি একটি int হওয়া উচিত।
সাধারণভাবে প্রতিটি গাড়ি আলাদাভাবে উৎপাদন করতে $১০,০০০ খরচ হয়, সেটি সফল হোক বা না হোক। কিন্তু একটু পরিকল্পনা করলে ১০টি গাড়ি একসাথে $৯৫,০০০-এ উৎপাদন করা যায়।
যেমন, ৩৭টি গাড়ি নিচের উপায়ে উৎপাদন করা যায়: ৩৭ = ৩ x দশের দল + ৭টি আলাদা গাড়ি
তাহলে ৩৭টি গাড়ির খরচ হলো: ৩*৯৫,০০০+৭*১০,০০০=৩৫৫,০০০
CalculateCost ফাংশনটি লিখুন, যা একটি নির্দিষ্ট সংখ্যক গাড়ি উৎপাদনের খরচ গণনা করে, সেগুলো সফল হোক বা না হোক:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
নোট: রিটার্ন ভ্যালুটি একটি uint হওয়া উচিত।
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।