A Crystalben van egy String nevű típus, amit szöveg ábrázolására használunk.
A Crystal stringek Unicode-karakterek sorozatai.
A stringek módosíthatatlanok, ami azt jelenti, hogy létrehozásuk után nem változtathatók meg.
Ez azt jelenti, hogy minden alkalommal új string jön létre, amikor módosítasz egy stringet; ezért az eredeti string nem változik.
Egy string definiálásához dupla idézőjelet " használsz.
"Hello World"
Két string összefűzéséhez a + operátort használod.
A + operátor egy új stringet ad vissza, ami a két stringet összefűzi.
hello = "Hello"
hello + " World"
# => "Hello World"
A to_i metódus egy stringet egész számmá alakít.
Alternatívaként a to_f metódussal lebegőpontos számot kaphatsz.
Ha a string nem alakítható számmá, akkor ArgumentError kivétel keletkezik.
"1".to_i
# => 1
"1.0".to_f
# => 1.0
"Hello".to_i
# => ArgumentError: Invalid integer: Hello
Egy egész vagy lebegőpontos szám a to_s metódussal stringgé alakítható.
1.to_s
# => "1"
1.0.to_s
# => "1.0"
Az interpoláció kényelmes módja a stringek kombinálásának és kifejezések stringbe ágyazásának.
Egy string interpolálásához a # karaktert használhatod, amit kapcsos zárójelek {} követnek, a kifejezés pedig a zárójelek között van.
name = "World"
"Hello #{name}!"
# => "Hello World!"
A Crystal automatikusan stringgé alakítja a kifejezés eredményét.
"Hello #{1 + 1}!"
# => "Hello 2!"
Amikor tudni szeretnéd, hány karakter van egy stringben, használhatod a size metódust, ami a string hosszát egész számként adja vissza.
A string mérete a string tárolt tulajdonsága, így nem kell minden metódushíváskor kiszámolni a méretet, ami nagyon gyorssá teszi.
"Hello World".size
# => 11
Az indexelés arra való, amikor egy adott karaktert szeretnél lekérni egy stringből.
Ahhoz, hogy karaktert kérj le egy String-ből, használhatod a megszokott szögletes zárójeles jelölést.
A [] egy String példánymetódusként van megvalósítva, ahol az index a metódus argumentuma.
A Crystalben egy string első karaktere a 0. indexen található.
"Hello World"[0]
# => 'H'
"Hello World"[6]
# => 'W'
Ahhoz, hogy egy karaktert a string végéről kérj le, veheted a string hosszát mínusz egyet, hogy megkapd az utolsó karakter indexét; a második utolsó karakterhez a string hosszát mínusz kettőt, és így tovább. Erre van egy egyszerűbb megoldás: egyszerűen használj negatív indexet, ahol az utolsó karakter a -1. indexen van, a második utolsó a -2. indexen, és így tovább.
name = "Hello World"
name[name.size - 1]
# => 'd'
name[-1]
# => 'd'
Néhány karaktert nem lehet közvetlenül stringbe írni, helyette escape-szekvenciát kell használnod.
Például, ha dupla idézőjelet szeretnél használni egy stringben, escape-elned kell a dupla idézőjelet.
A \ karaktert használhatod escape-szekvencia írásához, amit az escape-elni kívánt karakter követ.
Ezek a speciális karakterek a Crystalben:
| Value | Description |
|---|---|
\a |
Riasztás |
\b |
Visszatörlés |
\e |
Escape |
\f |
Lapdobás |
\n |
Soremelés vagy újsor |
\r |
Kocsivissza |
\t |
Vízszintes tabulátor |
\v |
Függőleges tabulátor |
\\ |
Visszaperjel |
\' |
Aposztróf |
\" |
Dupla idézőjel |
\377 |
Nyolcas számrendszerű ASCII-karakter |
\xFF |
Tizenhatos számrendszerű ASCII-karakter |
\uFFFF |
Tizenhatos számrendszerű Unicode-karakter |
puts "Hello \"World\""
# => Hello "World"
puts "Hello \nWorld"
# => Hello
# => World
Többsoros string írásához ugyanazt a szintaxist használod, mint egy egysoros stringnél, de minden sorhoz, amit a stringben szeretnél, új sort kezdesz.
"Hello
World"
# => "Hello\nWorld"
Volt egyszer egy különc programozó, aki egy furcsa házban lakott, rácsos ablakokkal. Egy nap munkát vállalt egy online álláshirdetési oldalon keresztül: egy bulirobotot kellett építenie. A robotnak köszöntenie kell a vendégeket, és a helyükre kell kísérnie őket. Az első változat nagyon technikásra sikerült, és hűen tükrözte, hogy a programozó nem sok mindent tud az emberi kapcsolatokról. Ebből néhány dolog a következő kiadásba is átkerült.
Valósítsd meg a welcome metódust, amely a kapott név felhasználásával visszaad egy
üdvözlő üzenetet:
PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!
Valósítsd meg a happy_birthday metódust, amely a személy nevének és életkorának
felhasználásával visszaad egy születésnapi üzenetet.
Sajnos a programozó kicsit kérkedő alkat, így a robotnak bizonyítania kell, hogy
minden vendég születésnapját ismeri.
PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!
Valósítsd meg az assign_table függvényt, amely útbaigazítást ad.
Öt paramétert kell fogadnia.
String)Int)String)String)Float64)A pontos eredményformátum az alábbi példában látható.
A szomszéd nevét le kell rövidíteni a név első és utolsó betűjére. Frankből Fk lesz, Christianből Cn, és így tovább.
Az asztal számát a robot adja meg. A robot az asztal távolságát is megemlíti. Szerencsére csak egy számjegyre kerekített pontossággal.
PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
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.