خط التجميع

خط التجميع

تمرين تعلّمي

مقدمة

الأعداد

النوعان الأكثر شيوعًا من الأعداد في Ruby هما:

  • الأعداد الصحيحة: أعداد بلا أرقام بعد الفاصلة العشرية (أعداد كاملة). ومن أمثلتها -6 و0 و1 و25 و976 و500000.
  • الأعداد العشرية: أعداد بها رقم واحد أو أكثر بعد الفاصلة العشرية. ومن أمثلتها -2.4 و0.1 و3.14 و16.984025 و1024.0.

وهي مُنفَّذة عبر الصنفين Integer وFloat.

تحتوي هذه الأصناف على طُرق تُحوِّل القيم من نوع إلى آخر. أعداد Integer دقيقة حتى وحدة كاملة، أما دقة Float فهي كسرية بالنسبة إلى عدد صحيح:

  • Integer#to_f: التحويل إلى عدد عشري جديد
  • Float#ceil: التقريب لأعلى إلى أقرب عدد صحيح
  • Float#floor: التقريب لأسفل إلى أقرب عدد صحيح
  • Float#round: التقريب إلى أقرب عدد صحيح
  • Float#to_i: الاقتطاع إلى أقرب عدد صحيح

الجمل الشرطية

تضم Ruby ما يُعرف بتعبيرات التحكم في سير البرنامج، وهي تُستخدم للتحكم في كيفية تشغيل البرنامج، وتأخذ قيمة صحيحة أو خاطئة. وهناك عوامل يمكن استخدامها لإنشاء قيم صحيحة أو خاطئة، وهذه تُعرف بـعوامل المقارنة.

وهناك تعبيرا تحكم رئيسيان يُستخدمان لتحديد أي كود سيعمل وأيّه لن يعمل، أي أي فرع من الفروع المعطاة سيعمل.

وهما: تعبير if وتعبير unless.

عوامل المقارنة

تُستخدم عوامل المقارنة لمقارنة القيم وإرجاع قيمة true أو false. تتطلب العوامل التالية قيمتين من النوع نفسه لمقارنتهما. وإذا لم تكونا من النوع نفسه فسيُطلق المترجم خطأً. وفيما يلي قائمة بالعوامل ومثال على الحالة التي تُرجع فيها قيمة true:

الطريقة الوصف المثال
< أصغر من 4 < 5
<= أصغر من أو يساوي 4 <= 4
> أكبر من 3 > 1
>= أكبر من أو يساوي 2 >= 2

يمكن استخدام عاملي التساوي وعدم التساوي لمقارنة أي نوع من القيم، خلافًا للعوامل المذكورة سابقًا. يُستخدم العامل == للتحقق مما إذا كانت قيمتان متساويتين، ويشمل ذلك التحقق من نوع القيمة. ويعمل العامل != بالكيفية ذاتها، لكنه سيُرجع true إذا لم تكن القيمتان متساويتين وfalse إذا كانتا متساويتين. وفيما يلي قائمة بعاملي التساوي وعدم التساوي ومثال على الحالة التي يُرجعان فيها قيمة true:

الطريقة الوصف المثال
== يساوي 4 == 4
!= لا يساوي 5 != 4

جملة if

تُستخدم جملة if للتحقق مما إذا كان شرط معطى "صحيحًا" أو "خاطئًا". إذا كان الشرط صحيحًا فسيعمل الكود الموجود داخل جملة if. وتنتهي جملة if بالكلمة المفتاحية end.

value = 1
if value == 1
  "1 is equal to 1"
end
# => "1 is equal to 1"

if value > 2
  "1 is greater than 2"
end
# => nil

جملة unless

تعمل جملة unless بشكل مشابه جدًا لجملة if، لكنها ستشغّل الكود داخل جملة unless إذا كان الشرط خاطئًا.

value = 1
unless value == 1
  "1 is not equal to 1"
end
# => nil

unless value > 2
  "1 is not greater than 2"
end
# => "1 is not greater than 2"

جملة else

يمكن استخدام جملة else بالاقتران مع جملة if. وتُنفَّذ جملة else إذا لم يُنفَّذ فرع if.

value = 1
if value == 1
  "1 is equal to 1"
else
  "1 is not equal to 1"
end
# => "1 is equal to 1"

الجمل الشرطية المتتالية

يمكن استخدام جملة elsif بالاقتران مع جملة if. وتُنفَّذ جملة elsif إذا لم يُنفَّذ فرع if وكان شرط جملة elsif صحيحًا. ويمكن ربط جمل elsif معًا، وسيُنفَّذ أول شرط صحيح. ويمكن أيضًا وجود جملة else في نهاية جملة if، تُنفَّذ إذا لم تكن أيٌّ من الجمل السابقة صحيحة.

value = 1
if value != 1
  "1 is not equal to 1"
elsif value > 2
  "1 is greater than 2"
else
  "1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"

التعليمات

في هذا التمرين ستكتب كودًا لتحليل الإنتاج في خط تجميع في مصنع سيارات. يمكن أن تتراوح سرعة خط التجميع من 0 (متوقف) إلى 10 (الحد الأقصى).

عند أبطأ سرعة له (1)، يُنتَج 221 سيارة في الساعة. يزيد الإنتاج خطيًا مع السرعة. لذلك عندما تكون السرعة مضبوطة على 4، ينبغي أن ينتج 4 * 221 = 884 سيارة في الساعة. غير أن السرعات الأعلى تزيد احتمالية إنتاج سيارات معيبة، يجب التخلص منها بعد ذلك. يوضح الجدول التالي كيف تؤثر السرعة في نسبة النجاح:

  • من 1 إلى 4: نسبة نجاح 100%.
  • من 5 إلى 8: نسبة نجاح 90%.
  • عند 9: نسبة نجاح 80%.
  • عند 10: نسبة نجاح 77%.

لديك مهمتان.

1. احسب معدل الإنتاج في الساعة

نفّذ الطريقة AssemblyLine#production_rate_per_hour لحساب معدل إنتاج خط التجميع في الساعة، مع مراعاة نسبة النجاح. لاحظ أن القيمة المُرجَعة نسخة من Float.

AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4

2. احسب عدد العناصر العاملة المنتَجة في الدقيقة

نفّذ الطريقة AssemblyLine#working_items_per_minute لحساب عدد السيارات المكتملة العاملة التي تُنتَج في الدقيقة. لاحظ أن القيمة المُرجَعة نسخة من Integer.

AssemblyLine.new(6).working_items_per_minute
#=> 19
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Ruby Exercism

مستعد لبدء خط التجميع؟

سجّل في Exercism لتتعلّم وتتقن Ruby عبر 21 مفهومًا121 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.