A Crystal egy fordított, objektumorientált programozási nyelv. Íme a nyelv néhány célkitűzése:
Ruby ihlette szintaxis.
Statikusan típusellenőrzött, de nem kell megadni a változók vagy metódusargumentumok típusát.
C kódot lehessen hívni úgy, hogy kötéseket írunk hozzá Crystalben.
Legyen fordítási idejű kiértékelés és kódgenerálás, hogy elkerüljük a sablonkódot.
Forduljon hatékony natív kódra.
A Crystalen 2011-ben kezdtek el dolgozni azzal a céllal, hogy egy olyan nyelvet hozzanak létre, amely a Ruby eleganciáját és termelékenységét nyújtja, ugyanakkor egy fordított nyelv teljesítményével és típusbiztonságával rendelkezik. A nyelv fordítója eredetileg Rubyban íródott, de 2013-ban újraírták Crystalben. A nyelvet Ary Borenszweig, Juan Wajnerman és Brian Cardiff fejlesztette és tervezte.
Egy változó létrehozásához használd az = értékadó operátort.
A Crystalben a változók neve snake_case formátumú legyen.
number = 1
puts number # => 1
number = 2
puts number # => 2
A konstansok ugyanezzel az = értékadó operátorral hozhatók létre, de a nevük csupa nagybetűből áll, amit SCREAMING_SNAKE_CASE-nek nevezünk.
NUMBER = 1
puts NUMBER # => 1
Ha egy már definiált konstansnak adunk értéket, az fordítási idejű hibát okoz.
NUMBER = 1
NUMBER = 2
# Error: already initialized constant NUMBER
A Crystal egy fordított nyelv, ami azt jelenti, hogy minden változó és metódusargumentum fordítási időben kap típust. A fordító képes kikövetkeztetni egy változó vagy metódusargumentum típusát. Bizonyos esetekben azonban meg kell adni a típust. Azokat az eseteket, amelyekben meg kell adni a típust, a későbbi fogalmakban magyarázzuk el.
A metódusok segítségével újra felhasználható utasításokat csoportosíthatunk.
A Crystalben a metódusokat gyakran egy osztályban, modulban vagy struktúrában definiáljuk.
A metódusokat azonban osztályon, modulon vagy struktúrán kívül is definiálhatjuk.
A metódusokat a def kulcsszóval deklaráljuk, amelyet a metódus neve követ.
A Crystalben a metódusok nevét snake_case formátumban írjuk.
Ha egy metódusnak nincsenek argumentumai, a zárójeleket elhagyhatod.
A metódus végét az end kulcsszóval jelölöd.
def hello
puts "Hello World!"
end
Ha egy metódust olyan típusú változóval vagy metódusargumentummal használunk, amelyre nem létezik, az fordítási idejű hibát okoz.
number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String
A metódusoknak lehetnek argumentumai. Az argumentumok olyan adatok, amelyeket átadunk egy metódusnak. Ahhoz, hogy argumentumokat adhass egy metódusnak, meg kell adnod az argumentum nevét. A Crystalben az argumentumok nevét snake_case formátumban írjuk. Egy metódusnak több argumentuma is lehet, de az argumentumokat vesszővel kell elválasztani.
def hello(name)
puts "Hello #{name}!"
end
A metódusoknak több argumentumuk is lehet. Ebben az esetben az argumentumokat vesszővel kell elválasztani.
def hello(name, language)
puts "Hello #{name}! You are learning #{language}."
end
Amikor egy osztályhoz, modulhoz vagy struktúrához tartozó metódust hívunk meg, a pont operátort(.) kell használni.
A formátum ez legyen: <ClassName>.<method_name>.
Ha egy metódus nem tartozik osztályhoz, modulhoz vagy struktúrához, egyszerűen a nevének leírásával meghívhatod.
A metódusok mindig implicit módon visszaadják az utolsó kifejezés értékét.
Ha egy metódusnak vannak argumentumai, zárójeleket használhatsz az argumentumok megadásakor a metódushívásban és a definícióban is, például így: <method_name>(<argument_1>, <argument_2>, ...).
Ha egy metódusnak nincsenek argumentumai, a zárójeleket el kell hagyni.
def hello(name)
"Hello #{name}!"
end
hello("Crystal")
# => Hello Crystal!
Amikor egy metódust több argumentummal hívunk meg, az argumentumokat vesszővel kell elválasztani. Az argumentumokat ugyanolyan sorrendben kell megadni, mint amilyen sorrendben a metódus definíciójában szerepelnek.
def hello_language(name, language)
"Hello #{name}! You are learning #{language}."
end
hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.
Ha egy metódust rossz számú argumentummal hívunk meg, az fordítási idejű hibát okoz.
hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)
A Crystalben a + operátorral két számot adhatsz össze.
A - operátorral két számot vonhatsz ki.
A * operátorral pedig két számot szorozhatsz meg.
1 + 1
# => 2
2 - 1
# => 1
2 * 2
# => 4
A Crystalben a megjegyzéseket a # karakterrel írjuk, amelyet egy szóköz, majd maga a megjegyzés követ.
A megjegyzéseket a kód dokumentálására használjuk.
A fordító nem hajtja végre a megjegyzéseket.
# This is a comment