Kurzusok
/
Ruby
Ruby
/
Feladatok
/
Palermo kikötője
Palermo kikötője

Palermo kikötője

Tanulófeladat

Bevezetés

A szimbólumok olyan elnevezett azonosítók, amelyekkel egy értékre hivatkozhatunk. A szimbólumok szimbólumliterál segítségével jönnek létre, mégpedig úgy, hogy a név elé egy : karaktert írunk, például :foo. Idézőjelek között is leírhatók, például :"foo", így például szóköz is szerepelhet a névben.

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

A nyelv sok helyen használ szimbólumokat: többek között hashek kulcsaiként, metódusnevek és változónevek jelölésére.

Azonosító

Az a különbség a szimbólumok és a stringek között, hogy a szimbólumok azonosítók, nem pedig adatot vagy szöveget jelölnek. Ez azt jelenti, hogy két azonos nevű szimbólum mindig ugyanaz az objektum.

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

Szimbólumok módosítása

A szimbólumok megváltoztathatatlanok, ami azt jelenti, hogy nem lehet őket módosítani. Ez azt jelenti, hogy amikor „módosítasz” egy szimbólumot, valójában egy új szimbólumot hozol létre. Néhány metódussal lehet szimbólumokat manipulálni, és ezek mind új szimbólumot adnak vissza. Az összes metódus megtalálható a Symbol API oldalon.

:foo.upcase # => :FOO

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

Az az előnye annak, hogy a szimbólumok megváltoztathatatlanok, hogy memóriatakarékosabbak, mint a stringek, ugyanakkor biztonságosabbak azonosítóként használni őket.

Konvertálás

A szimbólumokat át lehet alakítani stringekké, és fordítva. Ez akkor lehet hasznos, ha módosítani szeretnél egy szimbólumot, vagy ha szimbólumot szeretnél stringként használni. Ahhoz, hogy egy stringet szimbólumként jeleníts meg, a String#to_sym metódust használhatod, az ellenkezőjéhez pedig a Symbol#to_s metódust. Mivel a szimbólumoknak csak korlátozott számú metódusuk van, hasznos lehet szimbólumot stringgé alakítani, hogy stringmetódusokat használhass rajtuk, ha új szimbólumra van szükség.

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

Utasítások

Palermo kikötője forgalmas hely, ahol rengeteg hajó jön és megy. A kikötőben éppen tartózkodó hajók nyilvántartására régóta egy kézi rendszer működik. Ez a rendszer rendkívül hibahajlamos, ezért a kikötőfőnök úgy döntött, hogy lecseréli egy számítógépes rendszerre.

A kikötőfőnök felbérelt téged, hogy megvalósítsd az új rendszert. A rendszernek a hajók azonosítóit kell kezelnie, de a célállomásokét is.

1. Hozd létre a kikötő azonosítóját

Először is létre kell hoznod Palermo kikötőjének az azonosítóját. Az azonosító a kikötő nevének első négy betűje, csupa nagybetűvel.

Definiáld a Port::IDENTIFIER konstanst egy :PALE értékű szimbólumként.

Port::IDENTIFIER 
# => :PALE

2. Szerezd meg más kikötők azonosítóit

A programnak más kikötőket is kezelnie kell, ezért ezekhez is létre kell hoznod azonosítókat. A kikötő szeretné, ha a rendszer automatizált lenne, és mivel a kikötők különböző elnevezési szokásokat használnak, az azonosítókat a kikötő nevéből kell előállítani. Az azonosító a kikötő nevének első négy betűje, csupa nagybetűvel.

Definiáld a Port.get_identifier metódust úgy, hogy egy stringet vegyen át argumentumként, és adja vissza az adott kikötő azonosítóját szimbólumként.

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

3. Határozd meg, melyik terminálon kell kikötnie egy hajónak

A kikötőnek két terminálja van, és a rendszernek meg kell határoznia, hogy egy hajónak melyik terminálon kell kikötnie. A terminált a hajó azonosítója határozza meg.

Az azonosító két részből áll: az első rész három nagybetű, amely megmondja, milyen rakományt szállít a hajó, majd három szám, amely a hajó egyedi azonosítója.

Ha a hajó azonosítója szerint a rakomány OIL vagy GAS, akkor a hajónak az A terminálon kell kikötnie. Ellenkező esetben a hajónak a B terminálon kell kikötnie.

Definiáld a Port.get_terminal metódust úgy, hogy egy szimbólumot vegyen át argumentumként, amely a hajó azonosítója. A metódus adja vissza a terminált szimbólumként.

Port.get_terminal(:OIL123)
# => :A
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Ruby Exercism

Készen állsz elkezdeni a(z) Palermo kikötője feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ruby nyelvet 21 fogalom121 feladat segítségével, valódi emberi mentorálással, mindez ingyen.