Tracks
/
Scala
Scala
/
Übungen
/
Bankkonto
Bankkonto

Bankkonto

Mittel

Einführung

Nach Jahren des Formularausfüllens und Wartens hast du endlich deine Banklizenz erworben. Das heißt, du bist jetzt offiziell berechtigt, deine eigene Bank zu eröffnen, hurra!

Deine erste Priorität ist es, die IT-Systeme ans Laufen zu bringen. Nach einem Tag harter Arbeit kannst du bereits Konten eröffnen und schließen sowie Abhebungen und Einzahlungen bearbeiten.

Da du keine Lust hattest, Tests zu schreiben, bittest du ein paar Freunde, dir beim Testen des Systems zu helfen. Doch schon nach fünf Minuten behauptet einer deiner Freunde, Geld verloren zu haben! Du bist dir zwar sicher, dass dein Code fehlerfrei ist, doch du fängst an, die Logs zu durchsuchen, um der Sache nachzugehen.

Ah ja, genau wie du vermutet hast, ist dein Freund schuld! Einer deiner Freunde hat seine Test-Zugangsdaten mit einem anderen Freund geteilt, und gemeinsam haben sie sich verschworen, vom selben Konto parallel Einzahlungen und Abhebungen vorzunehmen. Wer würde so etwas tun?

Während du argumentierst, es sei physisch unmöglich, dass jemand parallel auf sein Konto zugreift, teilt dein Freund dir selbstgefällig mit, dass die Bankregeln verlangen, dass du das unterstützt. Also: keine parallele Unterstützung fürs Banking, keine Freigabe für den Livegang. Seufzend machst du dir eine mentale Notiz, dich morgen darum zu kümmern. Das verschiebt deinen Starttermin um mindestens einen weiteren Tag, aber nun ja...

Anleitung

Deine Aufgabe ist es, Bankkonten zu implementieren, die das Eröffnen und Schließen sowie Abhebungen und Einzahlungen von Geld unterstützen.

Da auf Bankkonten auf viele verschiedene Arten zugegriffen werden kann (Internet, Mobiltelefone, automatische Abbuchungen), muss deine Banksoftware es ermöglichen, dass mehrere Threads/Prozesse (die Terminologie hängt von deiner Programmiersprache ab) parallel und sicher auf Konten zugreifen. Zum Beispiel kann es viele Einzahlungen und Abhebungen geben, die parallel ablaufen; du musst sicherstellen, dass zwischen dem Lesen des Kontostands und dem Setzen des neuen Kontostands keine Race Conditions auftreten.

Es sollte möglich sein, ein Konto zu schließen; Operationen auf einem geschlossenen Konto müssen fehlschlagen.

In dieser Übung geht es um veränderlichen Zustand, auf den aus mehreren Threads sicher zugegriffen werden kann. Scala bietet eine Reihe von Möglichkeiten, veränderlichen Zustand zu schützen. Wenn du dich mit Nebenläufigkeit in Java auskennst, kannst du in Scala die Nebenläufigkeitsunterstützung von Java nutzen, etwa den synchronized-Block von Java.

Häufige Stolperfallen

In Scala gibt es zwei Wege, veränderlichen Zustand zu erreichen: Du verwendest ein „var" oder ein veränderliches Objekt. Zwei häufige Fehler dabei sind:

  • Verwende kein „var", das gleichzeitig ein veränderliches Objekt ist. Eines von beidem reicht, aber nicht beides zusammen.
  • Gib das „var" oder das veränderliche Objekt nicht nach außen preis. Mach sie also „private" und wandle das veränderliche Objekt in ein unveränderliches um, bevor du es als Wert zurückgibst.
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Scala Exercism

Bereit, mit Bankkonto zu starten?

Melde dich bei Exercism an, um Scala mit 95 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.