Ruby je známý programovací jazyk. Jeho cílem je zvýšit jednoduchost a produktivitu. Je to také plně objektově orientovaný programovací jazyk. Ruby navíc přichází s elegantní syntaxí, která se přirozeně čte a snadno píše.
Jakékoli programování vyžaduje správu různých datových typů. Datový typ popisuje konkrétní třídu dat. Říká stroji, jak má s daty v programu zacházet. Datové typy jsou klíčové pro určení toho, co lze s daty dělat (včetně operací, které lze provádět). V tomto návodu se ponoříme hlouběji do datových typů dostupných v Ruby. Prozkoumáme také dynamické typování. Pomocí této funkce může Ruby automaticky určit datový typ proměnné bez jejího explicitního deklarování. Začněme!
Požadavky
K procvičení a implementaci kroků popsaných v této příručce budete potřebovat následující komponenty:
- Správně nakonfigurovaný systém Linux. Zjistěte více o nastavení osobního serveru Ubuntu na CloudSigma.
- Správně nakonfigurované vývojové prostředí Ruby. Podívejte se na oficiální dokumentaci k instalaci Ruby na Ubuntu (pomocí APT).
Datové typy v Ruby
Ruby obsahuje všechny běžné datové typy, se kterými se setkáte v jakémkoli programovacím jazyce: celá čísla, desetinná čísla, řetězce, pole, symboly, hashe atd. Dále si ukážeme přehled toho, jak s různými datovými typy v Ruby pracovat.
Step 1 – Celá čísla
Podobně jako v matematice jsou celá čísla v počítačovém programování celá čísla bez desetinné části. Hodnota může být kladná, záporná nebo 0. Rozsah hodnot je následující:
|
1 |
{-∞, …, -1, 0, 1, …, ∞} |
Je čas vyzkoušet si celá čísla v Ruby. Prvním příkladem je vypsání jednoduchého celého čísla na obrazovku:
|
1 2 |
print 99 print "\n" |
Dále budeme pracovat s celočíselnou proměnnou. Zde proměnná sample_int obsahuje celočíselnou hodnotu (99) a funkce print vypíše hodnotu proměnné na obrazovku:
|
1 2 3 |
sample_int = 99 print sample_int print "\n" |
S celými čísly můžeme také provádět matematické operace. Následující příklad ukazuje jednoduchý součet dvou celých čísel:
|
1 2 3 |
sample_int = 99 + 100 print sample_int print "\n" |
Když pracujeme s velkými čísly, často používáme čárky (,) pro snazší čtení. Například jeden milion (1000000) se pro lepší čitelnost zapisuje jako 1,000,000. Zatímco používání čárek je zakázáno, Ruby umožňuje používat podtržítka ( _) jako oddělovač. Podívejte se na následující příklad:
|
1 2 3 |
sample_int = 1_000_999 print sample_int print "\n" |
Použití podtržítek zlepšuje čitelnost kódu, zejména při práci s velkými celočíselnými hodnotami.
Step 2 – Čísla s plovoucí desetinnou čárkou
Číslo s plovoucí desetinnou čárkou (zkráceně float) představuje reálné číslo. Podobně jako v matematické definici mohou být reálná čísla racionální nebo iracionální. V Ruby je float v podstatě číslo obsahující desetinnou tečku.
Zkusme vypsat hodnotu float na obrazovku:
|
1 2 |
print 55.66 print "\n" |
Následující příklad ukazuje deklaraci proměnné typu float:
|
1 2 3 |
sample_float = 55.66 print sample_float print "\n" |
S hodnotami a proměnnými typu float můžeme také provádět různé matematické operace. Následující příklad ukazuje jednoduchý součet dvou desetinných čísel:
|
1 2 3 |
sample_float = 55.66 + 99.222 print sample_float print "\n" |
Co když sečteme float a celé číslo? Výsledná hodnota bude float. V následujícím příkladu je číslo 55.0 i přes to, že je to celé číslo, považováno za float:
|
1 2 3 |
sample_float = 55.0 + 10 print sample_float print "\n" |
Step 3 – Boolean
Booleovské hodnoty představují pravdivostní hodnoty logické větve matematiky. V Ruby jsou booleovské datové typy reprezentovány dvěma hodnotami: true a false:
-
Větší než
-
100 > 99: true
-
99 > 100: false
-
-
Menší než
-
500 < 999: true
-
999 < 500: false
-
-
Rovná se
-
10 == 10: true
-
9 == 99: false
-
Podobně jako čísla můžeme také uložit true nebo false hodnotu v proměnné. Následující příklad tuto funkci demonstruje:
|
1 2 3 |
result = 9 == 99 print result print "\n" |
Step 4 – Řetězce
V programování je string reprezentován jako posloupnost znaků (písmena, čísla a symboly). V Ruby existují řetězce v jednoduchých uvozovkách ( ') nebo dvojitých uvozovkách ( "). Již jsme podrobně probrali použití řetězců v Ruby, takže toto bude krátká část.
Následující příklad je základní hello world program v Ruby:
|
1 |
print "hello world!\n" |
Řetězce můžeme také ukládat do proměnných. Následující příklad také zahrnuje spojování řetězců:
|
1 2 |
username = "Cloudsigma" print "hello, " + username + "!\n" |
Step 5 – Pole
Pole je datová struktura, která může ukládat kolekci prvků stejného datového typu o pevné velikosti. Lze jej také chápat jako kolekci proměnných stejného datového typu. Je to jedna z nejzákladnějších datových struktur ve většině moderních programovacích jazyků.
V Ruby je pole definováno následovně:
|
1 |
[value_1, value_2, …, value_N] |
Je možné vytvořit pole jakýchkoli jiných datových typů, o kterých jsme dosud hovořili (celé číslo, desetinné číslo a řetězce). Zde je několik příkladů:
-
Celé číslo: [-5, 0, 5]
-
Desetinné číslo: [-9.99, -6.99, -3.99, 0, 3.99]
-
Řetězec: [“the”, “quick”, “brown”, “fox”]
Následující příklad implementuje všechny tyto typy polí:
|
1 2 3 4 5 6 |
print [-5, 0, 5] print "\n" print [-9.99, -6.99, -3.99, 0, 3.99] print "\n" print ["the", "quick", "brown", "fox"] print "\n" |
Všimněte si, že když funkce print narazí na pole, vytiskne na obrazovku celé pole. Pro větší pohodlí se s poli často setkáte jako s proměnnými. Pojďme kód aktualizovat:
|
1 2 3 4 5 6 7 8 9 10 |
array_int = [-5, 0, 5] print array_int print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string print "\n" |
Nyní můžeme pracovat s jednotlivými prvky polí:
|
1 2 3 4 5 6 7 8 9 |
array_int = [-5, 0, 5] print array_int[2] print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float[1] print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string[3] print "\n" |
Všimněte si, že v Ruby začíná indexová hodnota polí od 0.
Pro pohodlí jsou pole v Ruby vybavena metodami .first a .last, které vytisknou první a poslední prvek:
|
1 2 3 4 |
array_float = [-9.99, -6.99, -3.99, 0, 3.99] puts array_float.first puts array_float.last print "\n" |
V Ruby mají pole další zajímavou vlastnost. Mohou obsahovat různé typy dat současně. Můžete do nich například ukládat řetězce, symboly a dokonce i další pole:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mixed_array = [ "hello", 99.99, "world", [ "the", "quick", "brown", "fox" ] ] print mixed_array print "\n" print mixed_array[3] print "\n" |
Step 6 – Symboly
V Ruby je symbol speciální datový typ, který funguje jako štítek nebo identifikátor. Symboly jsou neměnné (immutable), což znamená, že je nelze změnit. Symboly vypadají, jako by deklarovaly proměnné bez jakékoli hodnoty.
Zde je příklad symbolu:
|
1 |
:time_zone |
Obecně se symboly používají k identifikaci něčeho důležitého. Pro jiné situace jsou však řetězce více než dostačující.
Ruby jako objektově orientovaný jazyk považuje vše za objekt (včetně řetězců) s vlastním jedinečným umístěním v paměti, i když jsou řetězce identické. Pokud však odkazujete na symbol, jedná se o stejný objekt kdekoli v programu, tedy o stejné místo v paměti.
Step 7 – Hashe
Hash je kolekce klíčů a hodnot podobná slovníku. Hashe se často používají k ukládání souvisejících dat, například informací o uživateli.
Zde je rychlý příklad hashe. Vytvořili jsme hash user_info obsahující uživatelské jméno a heslo uživatele:
|
1 2 3 4 5 6 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info print "\n" |
Chceme-li získat hodnoty páru klíč-hodnota, musíme použít klíč. Následující příklad tento proces demonstruje:
|
1 2 3 4 5 6 7 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info["username"] print "\n" |
Ruby také umožňuje definovat hash pomocí mírně odlišné syntaxe ( : namísto =>):
|
1 2 3 4 5 6 |
user_info = { username: "HelloWorld999", password: "password123" } print user_info[:password] print "\n" |
Tato syntaktická struktura je podobná syntaxi používané v jiných jazycích, například v JavaScript. V této syntaktické struktuře jsou klíče definovány jako symboly. Proto namísto použití "username" používáme: username pro přístup k hodnotě.
Dynamické typování
Možná jste si již všimli, že při deklaraci proměnné nemusíme explicitně určovat datový typ. Datový typ místo toho určuje hodnota proměnné. Ruby používá dynamické typování, kde se kontrola typů provádí za běhu programu. Naproti tomu v programovacích jazycích se statickým typováním (například C/C++) určují datové typy během kompilace.
V následujícím příkladu jsou všechny hodnoty přiřazené proměnné dyn_var platné:
|
1 2 3 4 5 |
dyn_var = 123 dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" dyn_var |
V dynamicky typovaných jazycích můžeme volně znovu použít existující proměnnou k ukládání různých datových typů. Zde je předchozí příklad upraven tak, aby tento jev demonstroval:
|
1 2 3 4 5 6 7 |
dyn_var = 123 puts dyn_var dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" puts dyn_var dyn_var |
Jak tento příklad ukazuje, pokaždé, když je přiřazena nová hodnota, změní se datový typ proměnné dyn_var za běhu. To je užitečné při převodu jednoho datového typu na jiný. Následující příklad to demonstruje:
|
1 2 3 4 |
print "zadejte délku: " length = gets.chop length = length.to_f puts length |
Zde,
-
Protože vstupy z klávesnice jsou řetězce, je length nejprve řetězcem.
-
Protože naše požadovaná hodnota je typu float (desetinné číslo), převádíme řetězcovou hodnotu na float pomocí to_f metody.
-
Kvůli změně hodnoty je proměnné length přiřazen datový typ float. To je to, co vidíme při výpisu její hodnoty na obrazovku.
Co by se stalo, kdybychom se pokusili smíchat dva různé datové typy dohromady? Ruby vyhodí chybu. Podívejte se:
|
1 |
print 9 + "77" |
Identifikace datového typu
V Ruby se se vším zachází jako s objektem. Každý objekt v Ruby má metodu class. Při volání tato metoda říká, jakého datového typu je zdroj. Zde je několik příkladů použití metody class:
|
1 2 3 4 |
puts 55.class puts (55.55).class puts true.class puts nil.class |
Dalším způsobem, jak zjistit datový typ, je použití metody kind_of?. Ta porovná datový typ objektu s požadovaným datovým typem a vrátí booleanovskou hodnotu. Podívejte se na to v následujícím příkladu:
|
1 2 |
puts 55.kind_of?(Float) puts 55.kind_of?(Integer) |
Podobně existuje další metoda is_a?, která porovnává datový typ a vrací booleanovskou hodnotu. Jediným rozdílem je název metody. Může však být preferovanější, protože je pro vývojáře o něco snazší ji číst a pochopit. Aktualizujte předchozí příklad pomocí is_a?:
|
1 2 |
puts 55.is_a?(Float) puts 55.is_a?(Integer) |
Závěrečné myšlenky
Práce s jakýmkoli programovacím jazykem vyžaduje dobré porozumění datovým typům, které podporuje. V tomto návodu jsme prozkoumali nejběžnější datové typy používané při programování v Ruby. Probrali jsme a názorně si ukázali celá čísla, desetinná čísla, řetězce, symboly, booleovské hodnoty a hashe (včetně příkladů).
Podívejte se na další návody z našeho blogu, které vám pomohou prozkoumat Ruby:
- Instalace Ruby on Rails pomocí RVM na Ubuntu 20.04
- Nastavení Ruby on Rails s PostgreSQL
- Použití MySQL s aplikací Ruby on Rails na Ubuntu 21.04
- Zkoumáme CloudSigma PaaS: Jak využít hostingové služby Ruby PaaS?
Příjemné programování!




































Komentáře
Zatím žádné komentáře. Buďte první.