czwartek,
Hello Ruby!
W materiale zaprezentowano podstawy programowania w języku Ruby, od instalacji środowiska poprzez ćwiczenia w interaktywnej konsoli po napisanie i uruchomienie pierwszego programu.
Prawdopodobnie nie masz zamiaru kompilować Ruby z kodu źródłowego, dlatego możesz posłużyć się gotowymi pakietami. Dla systemów Windows dobra opcja to narzędzie RubyInstaller. Jeśli jesteś początkujący, podczas instalacji zachowaj wszystkie opcje domyślne. Pierwsze kroki w języku Ruby najłatwiej wykonać w interaktywnej konsoli Ruby, w systemie Windows znajdziesz ją w menu Start, w zakładce „Ruby” kliknij skrót „Interactive Ruby”.
W dużych dystrybucjach Linuksa Ruby można zainstalować za pomocą systemowego menedżera pakietów. Poniżej znajdziesz odpowiednie polecenie dla systemów Debian/Ubuntu, w innych dystrybucjach wygląda to podobnie, główna różnica to inny menedżer pakietów. Interaktywną konsolę Ruby można uruchomić wydając w polecenie irb w konsoli.
sudo apt install ruby
W systemach firmy Apple (macOS, OS X) Ruby jest instalowany fabrycznie. Aby uruchomić interaktywną konsolę Ruby, w konsoli wpisz polecenie irb.
Prezentowane przykłady będą działać niezależnie od systemu operacyjnego. Tradycyjnym początkowym elementem kursów programowania jest program „Hello World!”. Uruchom konsolę Ruby i wpisz swoje pierwsze polecenie w tym języku.
irb(main):001:0> puts "Hello CKZiU!"
Hello CKZiU!
=> nil
W powyższym przykładzie pierwsza linia to wprowadzone polecenie, ostatnia to informacja o jego wyniku. Polecenie puts nie zwraca żadnej wartości, dlatego wyświetlono nil, co oznacza brak wartości. Ruby doskonale radzi sobie z matematyką, poniżej znajdziesz kilka prostych działań.
irb(main):002:0> 3+2
=> 5
irb(main):003:0> 3*2
=> 6
irb(main):004:0> 3**2
=> 9
Operator dzielenia wymaga dodatkowego wyjaśnienia, bo dla początkujących jego działanie może być zaskoczeniem.
irb(main):005:0> 5/2
=> 2
Wynik został „obcięty” do liczby całkowitej, ponieważ argumentami działania były liczby całkowite. Aby otrzymać prawidłowy wynik, wystarczy jedną z nich zapisać jako liczbę zmiennoprzecinkową.
irb(main):006:0> 5.0/2
=> 2.5
Dużo więcej możliwości matematycznych daje moduł Math.
irb(main):007:0> Math.sin(90)
=> 0.8939966636005579
Jeśli trochę kojarzysz trygonometrię, to zauważysz, że wynik jest nieoczekiwany, stało się tak, bo metoda sin() jako parametru oczekuje wartości wyrażonej w radianach. Wiedząc o tym, łatwo dokonać odpowiedniej konwersji, przy tej okazji wykorzystano zdefiniowaną w module Math stałą PI.
irb(main):008:0> Math.sin(90 * Math::PI/180)
=> 1.0
Jeśli chcesz zapamiętać wynik obliczeń, możesz przypisać go do zmiennej.
irb(main):009:0> a = 2 + 3
=> 5
irb(main):010:0> 2 * a
=> 10
Oczywiście w języku Ruby w zmiennej można zapisać dane od użytkownika.
irb(main):011:0> name = gets
Andrzej
=> "Andrzej\n"
Wprowadzenie danych zatwierdzono klawiszem Enter, dlatego w zmiennej znalazł się także znak nowego wiersza (\n). Aby tego uniknąć, można zastosować metodę chomp.
irb(main):012:0> name = gets.chomp
Andrzej
=> "Andrzej"
Próba wykonywania obliczeń operujących na wprowadzonych przez użytkownika danych zakończy się niepowodzeniem.
irb(main):013:0> x = gets.chomp
2
=> "2"
irb(main):014:0> x * 2
=> "22"
irb(main):015:0> x.class
=> String
Pobrana wartość jest traktowana jako łańcuch znaków, dlatego próba mnożenia przez dwa zakończyła się nieoczekiwanym wynikiem. Aby dane były traktowane jak liczby, wymagana jest konwersja typów. Metoda to_i konwertuje wartość na liczbę całkowitą, metoda to_f na liczbę zmiennoprzecinkową.
irb(main):016:0> x = gets.to_i
2
=> 2
irb(main):017:0> x * 2
=> 4
Deklarowanie metod daje możliwość wykorzystywania ich wielokrotnie, docenisz to, kiedy zaczniesz programować na poważnie. Deklaracja metody rozpoczyna się słowem kluczowym def, po którym następuje nazwa metody. W nawiasie zawarte są parametry metody. Deklarację kończy słowo kluczowe end.
irb(main):018:1* def suma(a, b)
irb(main):019:1* puts a+b
irb(main):020:0> end
=> :suma
irb(main):021:0> suma(4, 5)
9
=> nil
Zadeklarowana powyżej metoda wypisuje obliczony wynik działania, będzie ona bardziej uniwersalna, jedynie zwracając wartość, można wtedy wykorzystać wynik w innym celu, np. zapisać do zmiennej lub użyć go do kolejnych obliczeń. Do tego typu konstrukcji używa się słowa kluczowego return.
irb(main):022:1* def suma(a, b)
irb(main):023:1* return a+b
irb(main):024:0> end
=> :suma
irb(main):025:0> suma(4, 5) *2
=> 18
Po solidnym przygotowaniu w interaktywnej konsoli Ruby nastał czas, żeby napisać jakiś program. Można to zrobić w zwykłym edytorze tekstu, np. windowsowym Notatniku. W systemie Windows po instalacji środowiska z pomocą RubyInstaller wystarczy wpisać kod do pliku i zapisać go z rozszerzeniem rb, np. jako hello.rb. Program wywołasz, klikając dwukrotnie jego ikonę. Żeby okno programu nie zniknęło natychmiast po wykonaniu kodu, na końcu pliku dołącz wywołanie systemowej funkcji pause (system "pause").
W systemach innych niż Windows, rozszerzenie pliku ma tylko informacyjny charakter i jest opcjonalne. Program zapisany w pliku można wywołać w konsoli, przykład przedstawiono poniżej. Nie prezentujemy innych sposobów uruchamiania programów w języku Ruby, jednak warto wiedzieć, że są one dostępne.
ruby hello.rb
Prezentowany program oblicza pole prostokąta na podstawie wprowadzonych przez użytkownika danych. Wykorzystano w nim przedstawione poprzednio możliwości języka. Podczas wprowadzania danych, pamiętaj, że część całkowitą od części ułamkowej w zapisie liczby oddziela się kropką. Ostatni wiersz programu to przykład połączenia łańcucha znaków z wyrażeniem w języku Ruby, stosuje się do tego znak hash oraz nawiasy klamrowe.
puts "-------------------------------"
puts "Program oblicza pole prostokąta"
puts "-------------------------------"
puts "Wprowadź długość boku a: "
a = gets.to_f
puts "Wprowadź długość boku b: "
b = gets.to_f
puts "Pole prostokąta wynosi: #{a*b}"