Připomeňme si nejprve problémovou situaci:
var1 = 2 var2 = '5' puts var1 + var2
Tento příklad nám vrátí chybu, která je způsobena tím, že dáváme dohromady něco, co dohromady dát nelze, tedy číslo a text. Jinak řečeno, počítač neví, zda má s hodnotami proměnných pracovat jako s textem a zobrazit výsledek "25", nebo k nim přistupovat jako k číslům a zobrazit řešení "7", jiná možnost není.
Konverze
K tomuto účelu disponuje snad každý programovací jazyk (a Ruby není výjimkou) možností konverze předkládaných hodnot. Tzn. mechanismem, který nám umožní převést text na číslo a číslo na text. V Ruby se tato činnost provádí pomocí funkce .to_s
(převod na text) a funkce .to_i
(převod na celé číslo) resp. .to_f
(převod na reálné číslo). Upravením předchozího příkladu:
var1 = 2 var2 = '5' puts var1.to_s + var2 puts var1 + var2.to_i
dostanete výstup
25 7
Pojďme se nyní podívat na několik (ne)typických konverzí
puts '15'.to_f puts '99.999'.to_f puts '99.999'.to_i puts '' puts '5 je mé oblíbené číslo!'.to_i puts 'Ptal se tu někdo na číslo 5, nebo ne?'.to_i puts 'Jak řekla maminka.'.to_f puts '' puts 'řetězec'.to_s puts 3.to_i
zobrazí
15.0 99.999 99 5 0 0.0 řetězec 3
Je vidět že celé číslo 15 bylo převedeno na číslo reálné, tzn. bylo přidáno jedno desetinné místo. U čísla 99.999 se podle očekávání nic nestalo. V případě převedení čísla 99.999 na celé číslo došlo k zahození desetinné části.
Poznámka redakce. Ponecháváme ve výpisech desetinnou tečku, ačkoliv je u nás správně desetinná čárka. Jejím použitím by se komplikovalo vysvětlování příkladů.
V další části Ruby přečetl číslo na začátku textového řetězce a protože zbytku nerozuměl, tak ho zahodil. Ve druhém textovém řetězci narazil místo čísla na text, a tak se tím dále nezabýval a dosadil si tam číslo 0. Stejně tak i v posledním převodu s tím rozdílem, že dosadil místo celého čísla 0 reálné číslo 0.0.
Poslední dvě konverze proběhly podle očekávání.
Jiný pohled na puts
V příkazu puts
znamená písmeno s na konci slovo string (řetězec), tzn. puts
bychom rozepsali jako put string neboli napiš řetězec. Prakticky to znamená, že příkaz puts
převádí cokoliv, co za ním následuje, na textový řetězec. Zároveň ale platí, že pokud se mu nepodaří objekt na text převést, musíte to udělat za něj.
Je tedy jedno, zda v programu použijete:
puts 20 puts 20.to_s puts '20'
Příkaz puts
vždy vypíše
20 20 20
Metody gets
a chomp
Zatímco puts
vypíše textový řetězec, metoda gets
textový řetězec načte. Následující program nejprve čeká na vámi zadaný text ukončený klávesou [Enter] a pak tento text vypíše.
puts gets
A je to! Nyní jsme se naučili získávat vstup od uživatele!
Tímto způsobem bychom mohli vytvořit jednoduchý program, kterému se nejprve představíme a za to nás počítač naším jménem také pozdraví.
puts 'Ahoj, jaké je tvoje jméno?' jmeno = gets puts 'Ahoj, ' + jmeno + ' je pěkné jméno, rád tě poznávám!'
výstup může být např. následující
Ahoj, jaké je tvoje jméno? Martin Ahoj, Martin je pěkné jméno, rád tě poznávám!
V čem je problém nyní? Proč počítač pokračoval ve výpisu pozdravu na dalším řádku? Vysvětlení není těžké. Metoda gets
vrací spolu se zadaným textem i symbol klávesy [Enter], která byla stisknuta pro odeslání textu. Proto v předchozím příkladě došlo k odsazení textu. Pro odstranění této informace (znaku nového řádku) se používá metoda chomp
.
puts 'Ahoj, jaké je tvoje jméno?' jmeno = gets.chomp puts 'Ahoj, ' + jmeno + ' je pěkné jméno, rád tě poznávám!'
zobrazí podle očekávání
Ahoj, jaké je tvoje jméno? Martin Ahoj, Martin je pěkné jméno, rád tě poznávám!
Také bychom mohli do proměnné jmeno
přiřadit řetězec i s informací o stisknuté klávese [Enter] a odřádkování odstranit později:
puts 'Ahoj, jaké je tvoje jméno?' jmeno = gets puts 'Ahoj, ' + jmeno.chomp + ' je pěkné jméno, rád tě poznávám!'
První možnost se však používá častěji. Tím nejpádnějším důvodem jistě bude to, že programátor nemusí na pozdější odstranění znaku nového řádku dál myslet. Pokud si však nejste jisti, zda jste nadbytečné znaky odstranili, pak raději použijte metodu chomp znovu.
Příklady 4
- Napište program, který se vás postupně zeptá na vaše jméno a pak i příjmení. Poté uživatele pozdraví celým jménem.
- Napište program, který se zeptá na váš věk a pak tuto informaci převede na měsíce a výsledek zobrazí.
- Napište program, který se vás zeptá na vaše oblíbené číslo. Pak toto číslo zvýší o jedna a předloží ho jako číslo lepší.
A co bude příště? Podíváme se na další metody pro práci s textem a čísly.