حساب بنكي

حساب بنكي

متوسط

مقدمة

بعد سنوات من ملء الاستمارات والانتظار، حصلت أخيرًا على رخصتك المصرفية. هذا يعني أنك أصبحت الآن مؤهلًا رسميًا لفتح بنكك الخاص، هنيئًا لك!

أولويتك الأولى هي تشغيل أنظمة تقنية المعلومات. وبعد يوم من العمل الشاق، أصبحت قادرًا بالفعل على فتح الحسابات وإغلاقها، وعلى التعامل مع عمليات السحب والإيداع.

ولأنك لم ترغب في تكبّد عناء كتابة الاختبارات، دعوت بعض أصدقائك لمساعدتك في اختبار النظام. لكن بعد خمس دقائق فقط، ادّعى أحد أصدقائك أنه فقد المال! ورغم ثقتك بأن الكود الخاص بك خالٍ من الأخطاء، بدأت تتصفح السجلات للتحقيق.

آه أجل، كما توقعت تمامًا، صديقك هو المخطئ! فقد شارك بيانات اعتماده للاختبار مع صديق آخر، وتآمرا معًا على تنفيذ عمليات إيداع وسحب من الحساب نفسه على التوازي. ومن قد يفعل شيئًا كهذا؟

وبينما تجادل بأنه من المستحيل فعليًا أن يصل أحدهم إلى حسابه على التوازي، يخبرك صديقك بثقة متعالية أن قواعد العمل المصرفي تقتضي أن تدعم ذلك. إذن، لا دعم للعمليات المصرفية المتوازية، ولا إشارة انطلاق. فتُنهِد وتدوّن في ذهنك أن تعمل على هذا غدًا. سيؤخر ذلك تاريخ إطلاقك يومًا آخر على الأقل، ولكن حسنًا...

التعليمات

مهمتك هي تنفيذ حسابات بنكية تدعم الفتح والإغلاق والسحب والإيداع.

بما أن الحسابات البنكية يمكن الوصول إليها بطرق مختلفة (الإنترنت، والهواتف المحمولة، والخصومات التلقائية)، يجب أن يسمح برنامجك البنكي بالوصول إلى الحسابات بأمان من خيوط/عمليات متعددة (تختلف المصطلحات باختلاف لغة البرمجة لديك) في الوقت نفسه. على سبيل المثال، قد تحدث عمليات إيداع وسحب كثيرة في الوقت نفسه؛ عليك أن تضمن عدم وجود حالات تسابق بين قراءة رصيد الحساب وضبط الرصيد الجديد.

يجب أن يكون من الممكن إغلاق الحساب؛ فالعمليات على حساب مُغلق يجب أن تفشل.

يختبر هذا التمرين حالة قابلة للتغيير يمكن الوصول إليها بأمان من عدة خيوط. توفّر Scala أساليب متنوعة لحماية الحالة القابلة للتغيير. وللمطورين الملمّين بتزامن Java، يمكن لـ Scala الاستفادة من دعم التزامن في Java، مثل كتلة synchronized في Java.

أخطاء شائعة

هناك أسلوبان لتحقيق حالة قابلة للتغيير في Scala: استخدام var أو كائن قابل للتغيير. من الأخطاء الشائعة هنا:

  • لا تستخدم var يكون في الوقت نفسه كائنًا قابلًا للتغيير. أحدهما يكفي، ولكن ليس كليهما معًا.
  • لا تُعرّض var أو الكائن القابل للتغيير للعالم الخارجي. لذا اجعلهما private، وغيّر الكائن القابل للتغيير إلى غير قابل للتغيير قبل أن تُرجعه كقيمة.
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Scala Exercism

مستعد لبدء حساب بنكي؟

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