Linux E X P R E S

Facebook

Naučte se Ruby 4 - První praktické úkoly a jejich řešení

ruby.jpg

V dnešním povídání se podíváme na to, co jsme už probrali, z trochu jiného úhlu pohledu. Dnes totiž budeme kombinovat něco, co jsme dosud nesměli ani neuměli - čísla a text dohromady. Jinými slovy, budeme počítat s textem a k textu připojovat čísla.


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.

Diskuze (1) Nahoru