A Char egy adattípus a Crystalben, amely egy 32 bites Unicode kódpontot reprezentál.
A méretük miatt memóriahatékonyak, és olyan tulajdonságokkal rendelkeznek, amelyekkel a stringek nem.
Egyes idézőjelekkel (') hozod létre őket, és csak egyetlen Unicode-kódpont kerülhet bele.
'a' # => 'a'
'a'.class # => Char
A Crystalben elég gyakori, hogy Char értékekkel dolgozol, amikor stringekkel foglalkozol, mivel a String osztály jó néhány metódusa Char értéket ad vissza, vagy Char értéket vár argumentumként.
Például a String#[] metódus egy Char értéket ad vissza, a String#chars metódus pedig Char értékek gyűjteményét.
Mivel a Char egy 32 bites Unicode-kódpont, támogatja a növelést és a csökkentést, így ha van egy 'a', akkor egyet hozzáadva a 'b' karaktert kapod.
'a' + 5
# => 'f'
'z' - 25
# => 'a'
Létezik egy Char#succ nevű metódus is, amely a Unicode-táblázatban a következő karaktert adja vissza, valamint a Char#pred, amely az előző karaktert adja vissza.
'a'.succ
# => 'b'
'z'.pred
# => 'y'
Mivel a Char csak egy 32 bites Unicode-kódpont reprezentálására szolgál, két Char értéket nem lehet összefűzni. Ezért Char értékeket csak stringekkel lehet összefűzni.
'a' + "bc"
# => "abc"
'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char
A Crystalben néhány metódus segít információt szerezni egy karakterről, például hogy szám vagy betű-e, illetve hogy kis- vagy nagybetű-e. Íme néhány metódus listája, a teljes listát a Char API oldalon találod:
| Metódus | Leírás |
|---|---|
Char#number? |
true-t ad vissza, ha a Char egy szám |
Char#letter? |
true-t ad vissza, ha a Char egy betű |
Char#lowercase? |
true-t ad vissza, ha a Char kisbetű |
Char#uppercase? |
true-t ad vissza, ha a Char nagybetű |
Char#ascii? |
true-t ad vissza, ha a Char ASCII-karakter |
Char#whitespace? |
true-t ad vissza, ha a Char whitespace-karakter |
Mivel a Char egy 32 bites Unicode-kódpont, át tudsz konvertálni Char és kódpont (Int) között.
Erre a Char#ord metódust használhatod, amely a Char kódpontját adja vissza, vagy az Int#chr metódust, amely a kódponthoz tartozó Char értéket adja vissza.
'a'.ord
# => 97
97.chr
# => 'a'
Ahogy a többi adattípusnál, a Char értékeknél is van néhány metódus a típusok közötti konvertálásra.
A leggyakoribb a Char#to_s metódus, amely a Char értéket stringgé alakítja. Emellett ott van a Char#to_i metódus, amely a Char értéket Int értékké alakítja, és a Char#to_f metódus, amely Float értékké.
'a'.to_s
# => "a"
'4'.to_i
# => 4
'a'.to_i
# => Error: Invalid integer: a (ArgumentError)
A lutoni könyvtár egy nagy könyvtár, hatalmas irodalmi gyűjteménnyel, amely a könyvektől a művészetig terjed. A könyvtárban van egy részleg, ahol irodalmat tanulmányoznak, és könyveket visznek fel a számítógépes rendszerbe.
Bizonyos részeket szeretnének automatizálni, és téged kértek meg, hogy segíts nekik. Ez sok mindent felölel, a beírási folyamat űrlapjainak automatizálásától a szövegek visszafejtéséig.
A könyvtárban a könyveknek könnyen megtalálhatónak kell lenniük, ezért a cím első betűje szerint rendezik őket.
Valósítsd meg a Library.first_letter metódust, amely egy title argumentumot vesz át, ami a könyv címét tartalmazza.
A metódusnak a cím első betűjét kell visszaadnia.
Library.first_letter("Mystery of the Crystal Skull")
# => 'M'
A könyvtárban rengeteg könyv van, amelyeket különböző szerzők írtak.
A szerzőkre gyakran a monogramjukkal hivatkoznak, ezért a könyvtár egy olyan rendszert kért, amely a szerző kereszt- és vezetéknevének megadásával kiadja a szerző monogramját.
A monogram formátuma a következő: {first_letter_of_first_name}.{first_letter_of_last_name}
Valósítsd meg a Library.initials metódust, amely két argumentumot vesz át, a first_name és a last_name értéket, amelyek a szerző kereszt- és vezetéknevét tartalmazzák.
A metódusnak a szerző monogramját kell visszaadnia.
Library.initials("William", "Shakespeare")
# => "W.S"
Néhány irodalmi mű titkosítva van, és a könyvtárban sok titkosított szöveg található. A könyvtár egy új visszafejtő rendszert szeretne egy különleges titkosításhoz.
A titkosítás úgy működik, hogy veszi a betűt, és lecseréli az ábécében előtte álló betűre.
Például az a-ból z lesz, a b-ből a, a c-ből b, és így tovább.
A könyvtár szeretné, ha mind a nagy-, mind a kisbetűket vissza tudná fejteni, és megtartaná az eredeti betű kis- vagy nagybetűs írásmódját.
Valósítsd meg a Library.decrypt_character metódust, amely egy character argumentumot vesz át, ami a visszafejtendő betűt tartalmazza.
A metódusnak a visszafejtett betűt kell visszaadnia.
Library.decrypt_character('a')
# => 'z'
A könyvtár szeretne egy egész szöveget is visszafejteni azzal a titkosítással, amely az ábécében előtte álló betűt veszi.
A visszafejtő csak a betűket fejtse vissza, és minden más karaktert hagyjon úgy, ahogy van.
Valósítsd meg a Library.decrypt_text metódust, amely egy text argumentumot vesz át, ami a visszafejtendő szöveget tartalmazza.
A metódusnak a visszafejtett szöveget kell visszaadnia.
Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Crystal nyelvet 26 fogalom142 feladat segítségével, valódi emberi mentorálással, mindez ingyen.