[
Ruby] Standardowe wejście/wyjście – wyświetlanie na ekranie i czytanie z
klawiatury
Żeby wyświetlić na STDOut dane mamy do dyspozycji:
•
p
•
•
puts
W tym skrypcie będziemy wyświetlali string:
str="jestem wyswietlany przez: "
Są duże różnice w tych wywołaniach, ale są widoczne na pierwszy rzut oka.
Cały skrypt wygląda tak:
str=
"jestem wyswietlany przez:
"
p
"#{str} p"
puts
"#{str} puts"
"#{str} print"
puts
"--=to jest koniec
skryptu==--"
Opis tego skryptu:
1.
podanie stringu
2.
wyświetlenie przy pomocy p
3.
wyświetlenie przy pomocy puts
4.
wyświetlenie przy pomocy print
5.
dodatek, który jest tutaj potrzebny ze względu na zasadę działania polecenia print.
puts od print, różni się dodaniem znaku EOL na końcu wyświetlanych danych. Czyli puts
zakończy nam linijkę, a print nie, czyli, żęby estetycznie wyglądało musiałem na końcu
dodać puts. Inaczej prompt konsolowy “zlałby się” z wynikiem skryptu.
Wykonanie skryptu:
$
ruby1.9.1 ruby.rb
"
jestem wyswietlany przez: p"
jestem wyswietlany przez: puts
jestem wyswietlany przez: print--=to jest koniec skryptu==-
Widać ładnie ;)
Poza tymi standardowymi metodami są jeszcze inne, ale w tym momencie odsyłam do
dokumentacji.
Pobieranie danych.
Robimy to za pomocą wartości gets. Pierwszą linijkę skryptu zamieniamy na:
str=
get
s
Jest to najbardziej tradycyjna metoda. Ma jednak wadę. Przy wczytywaniu danych wczytuje
też ostatni znak podany z klawiatury, czyli EOL.
Przy tej metodzie należy się uciąć ten ostatni znak ze stringu przy użyciu .chomp. Skrypt
wygląda teraz tak:
str=
gets
.
cho
mp
p
"#{str} p"
puts “#{str} puts”
print “#{str} print”
puts “–=to jest koniec skryptu==–”
A jego wykonanie tak:
$
ruby1.9.1 ruby.rb
sagasgasg
"
sagasgasg p"
sagasgasg puts
sagasgasg print--=to jest koniec skryptu==--
Jako drobną poprawkę, bardziej estetyczną, przed ostatnią linijkę zamieniamy na:
"#{str}
printn"
Da nam to taki wynik:
$
ruby1.9.1 ruby.rb
wehWWaehae
"
wehWWaehae p"
wehWWaehae puts
wehWWaehae print
--=
to jest koniec skryptu==--
Czyli jakby zamieni print w puts.
gets pobiera dane wejściowe jako stringi. Konwersja do innego typu wygląda tak:
•
str.to_i przekształca do integera
•
str.to_s przekształca w łańcuch znaków
•
str.to_f przekształca do liczby zmiennoprzecinkowej
Pobranie danych i przekonwertowanie ich “w locie” tak:
"podaj pierwsza liczbe: "
liczba1=
gets
.
chomp
.
to_i
"podaj druga liczbe: "
liczba2=
gets
.
chomp
.
to_i
puts
"po dodaniu:
#{liczba1+liczba2}"
Wykonanie skryptu to:
$
ruby1.9.1 ruby.rb
podaj pierwsza liczbe: 2
podaj druga liczbe: 2
po dodaniu: 4
A teraz zobaczmy co się stanie gdy ze skryptu usunę to_i
$
ruby1.9.1 ruby.rb
podaj pierwsza liczbe: 432
podaj druga liczbe: 3
po dodaniu: 4323
Stało się tyle, że interpreter Ruby dodał do siebie stringi. Nie liczby, bo liczb tam nie było.
Teraz przyjrzyjmy się ciekawostce konwertera liczb:
Jak łatwo zmienić zapis liczbowy:
liczba.
to_i
(
podsta
wa
)
oznacza tylko co, przekształć podaną w liczbę tak by podać jej wynik w podanym systemie
liczbowym podstawie podanej w nawiasie.
liczba=
"1010101110101"
for
i
in
2
..
10
puts
"wartosc w #{i} systemie liczbowym to:
"
+
liczba.
to_i
(
i
)
.
to_s
end
Skrypt da taki wynik:
wartosc w 2 systemie liczbowym to: 5493
wartosc w 3 systemie liczbowym to: 598114
wartosc w 4 systemie liczbowym to: 17896721
wartosc w 5 systemie liczbowym to: 254316276
wartosc w 6 systemie liczbowym to: 2238983893
wartosc w 7 systemie liczbowym to: 14129664158
wartosc w 8 systemie liczbowym to: 69810294849
wartosc w 9 systemie liczbowym to: 285959964736
wartosc w 10 systemie liczbowym to: 1010101110101
Należy dodać, że wartość podstawy to zakres liczbowy 2..32.
Zakresy były pokazane w dziale z pętlami.*