Tracks
/
Ruby
Ruby
/
Übungen
/
Hafen von Palermo
Hafen von Palermo

Hafen von Palermo

Lernübung

Einführung

Symbole sind benannte Bezeichner, mit denen du auf einen Wert verweisen kannst. Symbole werden über ein Symbol-Literal erstellt, indem du einem Namen ein :-Zeichen voranstellst, z. B. :foo. Sie können auch mit Anführungszeichen geschrieben werden, z. B. :"foo", was zum Beispiel Leerzeichen im Namen erlaubt.

:foo # => :foo
:"foo boo" # => :"foo boo"

Symbole werden an vielen Stellen in der Sprache verwendet, unter anderem als Schlüssel in Hashes, um Methodennamen und Variablennamen zu repräsentieren.

Bezeichner

Was Symbole von Strings unterscheidet, ist, dass sie Bezeichner sind und keine Daten oder Text darstellen. Das bedeutet, dass zwei Symbole mit demselben Namen immer dasselbe Objekt sind.

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

Symbole verändern

Symbole sind unveränderlich, das heißt, sie können nicht verändert werden. Wenn du ein Symbol also „veränderst“, erstellst du in Wirklichkeit ein neues Symbol. Es gibt einige Methoden, mit denen du Symbole bearbeiten kannst, und sie geben alle neue Symbole zurück. Alle Methoden findest du in der Symbol-API.

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

Der Vorteil der Unveränderlichkeit von Symbolen ist, dass sie speichereffizienter als Strings sind, aber als Bezeichner auch sicherer zu verwenden.

Umwandlung

Symbole können in Strings umgewandelt werden und umgekehrt. Das kann nützlich sein, wenn du ein Symbol verändern möchtest oder wenn du ein Symbol als String verwenden willst. Um einen String als Symbol darzustellen, kannst du die Methode String#to_sym verwenden, und für das Gegenteil die Methode Symbol#to_s. Da Symbole nur über eine begrenzte Auswahl an Methoden verfügen, kann es nützlich sein, ein Symbol in einen String umzuwandeln, um darauf String-Methoden anzuwenden, wenn ein neues Symbol benötigt wird.

:foo.to_s # => "foo"
"foo".to_sym # => :foo

Anleitung

Der Hafen von Palermo ist ein geschäftiger Hafen, in dem viele Schiffe kommen und gehen. Seit Langem gibt es dort ein manuelles System, um die Schiffe zu erfassen, die sich gerade im Hafen befinden. Dieses System ist sehr fehleranfällig, und der Hafenchef hat beschlossen, es durch ein computergestütztes System zu ersetzen.

Der Hafenchef hat dich damit beauftragt, das neue System umzusetzen. Das System muss Kennungen für Schiffe verwalten, aber auch für Ziele.

1. Erstelle die Kennung für den Hafen

Als Erstes musst du die Kennung für den Hafen von Palermo erstellen. Die Kennung besteht aus den ersten vier Buchstaben des Hafennamens in Großbuchstaben.

Definiere die Konstante Port::IDENTIFIER als Symbol mit dem Wert :PALE.

Port::IDENTIFIER 
# => :PALE

2. Kennungen für andere Häfen ermitteln

Das Programm muss auch andere Häfen verwalten, also musst du auch für sie Kennungen erstellen. Der Hafen möchte das System automatisieren, und da Häfen unterschiedliche Namenskonventionen verwenden, sollten die Kennungen aus dem Namen des Hafens erzeugt werden. Die Kennung besteht aus den ersten vier Buchstaben des Hafennamens in Großbuchstaben.

Definiere die Methode Port.get_identifier, die einen String als Argument entgegennimmt und die Kennung für diesen Hafen als Symbol zurückgibt.

Port.get_identifier("Hamburg") 
# => :HAMB

3. Bestimme, an welchem Terminal ein Schiff anlegen soll

Der Hafen hat zwei Terminals, und das System muss bestimmen, an welchem Terminal ein Schiff anlegen soll. Das Terminal wird durch die Kennung des Schiffes bestimmt.

Die Kennung besteht aus 2 Teilen: Der erste Teil besteht aus 3 Großbuchstaben, die angeben, welche Fracht das Schiff transportiert, danach folgen 3 Zahlen, die eindeutige Kennung des Schiffes.

Wenn das Schiff OIL oder GAS geladen hat, soll es am Terminal A anlegen. Andernfalls soll das Schiff am Terminal B anlegen.

Definiere die Methode Port.get_terminal, die ein Symbol als Argument entgegennimmt, nämlich die Kennung des Schiffes. Die Methode sollte das Terminal als Symbol zurückgeben.

Port.get_terminal(:OIL123)
# => :A
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ruby Exercism

Bereit, mit Hafen von Palermo zu starten?

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