تحتوي Go على أنواع عددية أساسية يمكنها تمثيل مجموعات من القيم الصحيحة أو العشرية. وتوجد أنواع مختلفة حسب حجم القيمة التي تحتاجها وبنية الحاسوب الذي يعمل عليه التطبيق (مثل 32 بت و64 بت).
في هذا التمرين ستتعامل مع الأنواع التالية فقط:
int: مثل 0، 255، 2147483647.
عدد صحيح مُوقَّع حجمه 32 بت على الأقل (نطاق القيم: من -2147483648 إلى 2147483647).
لكن هذا يعتمد على بنية النظام.
معظم الحواسيب الحديثة 64 بت، ولذلك سيكون حجم int هو 64 بت (نطاق القيم: من -9223372036854775808 إلى 9223372036854775807).
float64: مثل 0.0، 3.14.
يحتوي على مجموعة جميع الأعداد العشرية ذات 64 بت.
uint: مثل 0، 255.
عدد صحيح غير مُوقَّع يساوي int في الحجم (نطاق القيم: من 0 إلى 4294967295 لـ 32 بت، ومن 0 إلى 18446744073709551615 لـ 64 بت)
يمكن تحويل الأعداد إلى أنواع عددية أخرى من خلال تحويل الأنواع.
تدعم Go العديد من عوامل الحساب القياسية:
| Operator | Example |
|---|---|
+ |
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.
تكلّف كل سيارة 10,000 دولار لتُنتَج على حدة عادةً، بغض النظر عن كونها ناجحة أم لا. لكن مع قليل من التخطيط، يمكن إنتاج 10 سيارات معًا مقابل 95,000 دولار.
على سبيل المثال، يمكن إنتاج 37 سيارة بالطريقة التالية: 37 = 3 × مجموعات من عشر سيارات + 7 سيارات منفردة
إذن تكلفة 37 سيارة هي: 3*95,000+7*10,000=355,000
نفّذ الدالة CalculateCost التي تحسب تكلفة إنتاج عدد من السيارات، بغض النظر عن كونها ناجحة أم لا:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
ملاحظة: يجب أن تكون القيمة المُرجعة من النوع uint.
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.