Ruby. Leksykon kieszonkowy

Podobne dokumenty
Programowanie obiektowe

Wprowadzenie do języka Ruby

Ruby. Wprowadzenie. Autor: Michael Fitzgerald T³umaczenie: Adam Jarczyk ISBN: Tytu³ orygina³u: Learning Ruby Format: B5, stron: 240

Smarty PHP. Leksykon kieszonkowy

Języki skryptowe w programie Plans

Programowanie w Ruby

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Metaprogramowanie w Ruby

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

PHP 5 język obiektowy

Programowanie w Ruby

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wstęp do ruby dla programistów javy

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wykład nr 1 Język Ruby i framework Rails

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Materiały do laboratorium MS ACCESS BASIC

System operacyjny Linux

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Podstawy programowania skrót z wykładów:

PHP: bloki kodu, tablice, obiekty i formularze

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Bloki anonimowe w PL/SQL

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Programowanie w Ruby

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Liczby losowe i pętla while w języku Python

SWIFT. Zaawansowane Programowanie Obiektowe

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Platformy Programistyczne Podstawy języka Java

Rozdział 4 KLASY, OBIEKTY, METODY

Podstawy i języki programowania

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Język programowania PASCAL

KOTLIN. Język programowania dla Androida

Algorytmika i Programowanie VBA 1 - podstawy

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Programowanie obiektowe

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

media Blitz wydajne sytemy szablonów

Zapis algorytmów: schematy blokowe i pseudokod 1

Podstawy i języki programowania

ANALIZA DANYCH W STATA 8.0 CZĘŚĆ II

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

1 Atrybuty i metody klasowe

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Właściwości i metody obiektu Comment Właściwości

Wykład 8: klasy cz. 4

Kurs rozszerzony języka Python

OBIEKTY PHP. G. Panuś

1 Podstawy c++ w pigułce.

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Język Python. Język Python 1/35

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Programowanie obiektowe

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Język C++ Różnice między C a C++

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

O autorze... 9 Wprowadzenie... 11

Programowanie obiektowe

Wskaźniki. Informatyka

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Programowanie w języku Swift : Big Nerd Ranch guide / Matthew Mathias, John Gallagher. Gliwice, cop Spis treści

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Wykład 3 Składnia języka C# (cz. 2)

Paradygmaty programowania

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Lab 9 Podstawy Programowania

Test przykładowy 2 PAI WSB Wrocław /06/2018

Programowanie w języku Python. Grażyna Koba

W dowolnym momencie można zmienić typ wskaźnika.

Transkrypt:

Ruby. Leksykon kieszonkowy Autor: Michael Fitzgerald ISBN: 978-83-246-1384-7 Tytu³ orygina³u: Ruby Pocket Reference Format: B6, stron: 192 Wydawnictwo Helion ul. Koœciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Podrêczny zestaw informacji niezbêdnych w pracy programisty Ruby to obiektowy jêzyk programowania, opracowany w 1995 roku w Japonii. Dziêki swojej prostej sk³adni, zwartej konstrukcji i sporym mo liwoœciom b³yskawicznie zyska³ ogromne grono zwolenników. Pojawienie siê mechanizmu Ruby on Rails, niesamowicie usprawniaj¹cego tworzenie aplikacji i witryn internetowych zgodnych z nurtem Web 2.0, dodatkowo zwiêkszy³o popularnoœæ jêzyka Ruby. W oparciu o ten jêzyk powsta³o wiele znanych serwisów WWW, odwiedzanych ka dego dnia przez tysi¹ce goœci. Ruby. Leksykon kieszonkowy to zestawienie niezbêdnych informacji o tym jêzyku, przydatne podczas codziennej pracy programisty. Znajdziesz w nim informacje o s³owach kluczowych, operatorach, zmiennych i sta³ych. Przeczytasz tak e o formatowaniu tekstu, wyra eniach regularnych, operacjach na plikach i programowaniu obiektowym. Dowiesz siê ponadto, jak korzystaæ z interaktywnego Ruby i RDoc. Uruchamianie interpretera Ruby S³owa kluczowe Zmienne Instrukcje warunkowe Programowanie obiektowe Modu³y Operacje na plikach Obs³uga wyj¹tków Metody klas Array, Hash, Object, Kernel i String Wyszukiwanie i usuwanie b³êdów Usprawnij i przyspiesz swoj¹ pracê, korzystaj¹c z leksykonów kieszonkowych

Spis treści Uruchomienie Ruby... 8 Uruchomienie interpretera Ruby 9 Wykorzystywanie #! w Uniksie oraz Linuksie 11 Skojarzenie rozszerzenia pliku w systemie Windows 11 Zarezerwowane słowa kluczowe... 13 Operatory... 16 Komentarze... 17 Liczby... 17 Zmienne... 19 Zmienne lokalne 19 Zmienne instancji 19 Zmienne klasy 20 Zmienne globalne 20 Stałe 20 Równoległe przypisanie zmiennych 21 Symbole... 21 Wbudowane zmienne...22 Pseudozmienne... 25 3

Stałe globalne... 26 Przedziały...27 Metody...27 Nawiasy 28 Zwracanie wartości 28 Konwencje nazewnictwa metod 29 Argumenty domyślne 30 Zmienna liczba argumentów 30 Aliasy metod 31 Bloki 31 Procedury 34 Instrukcje warunkowe... 35 Instrukcja if 35 Instrukcja unless 38 Instrukcja while 38 Instrukcja until 40 Instrukcja case 41 Pętla for 42 Operator trójargumentowy 43 Wykonywanie kodu przed programem bądź po programie 43 Klasy... 44 Zmienne instancji 45 Akcesory 47 Zmienne klasy 49 Metody klasy 49 Singletony 50 Dziedziczenie 51 Publiczna, prywatna czy chroniona 52 Moduły oraz mixiny 54 4 Spis treści

Pliki... 56 Tworzenie nowego pliku 57 Otwieranie istniejącego pliku 58 ARGV oraz ARGF 58 Zmiana nazwy pliku oraz jego usunięcie 59 Badanie plików 59 Tryby oraz własność plików 60 Klasa IO... 62 Obsługa wyjątków... 64 Klauzule rescue oraz ensure 65 Metoda raise 65 Metody catch oraz throw 66 Klasa Object... 66 Metody instancji klasy Object 67 Moduł Kernel...73 Klasa String... 85 Podstawianie wyrażeń 85 Łańcuchy znaków z ogranicznikami 86 Dokumenty miejscowe 86 Znaki ucieczki 87 Kodowanie znaków 88 Wyrażenia regularne 89 Metody klasy String 95 Klasa Array... 110 Tworzenie tablic 111 Metody klasy Array 113 Metody instancji klasy Array 114 Spis treści 5

Klasa Hash... 125 Tworzenie tablic asocjacyjnych 125 Metody klasy Hash 127 Metody instancji Hash 127 Dyrektywy służące do formatowania czasu... 132 Ruby interaktywny (irb)...133 Debuger języka Ruby... 137 Dokumentacja Ruby...140 Opcje RDoc...142 RubyGems... 147 Rake... 152 Istniejące zasoby dla języka Ruby...155 Słowniczek...156 Skorowidz... 177 6 Spis treści

Przedziały Ruby obsługuje przedziały dzięki wykorzystaniu operatorów.. (przedział domknięty) oraz... (lewostronnie domknięty, prawostronnie otwarty). Na przykład przedział 1..12 zawiera liczby 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 (z 12 włącznie). W przedziale 1...12 wartość końcowa 12 zostaje jednak wykluczona, czyli w praktyce znajdują się w nim liczby 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Metoda === sprawdza, czy wartość mieści się w przedziale: (1..25) === 14 # => true, w przedziale (1..25) === 26 # => false, poza przedziałem (1..25) === 25 # => false, poza przedziałem (wykorzystano operator...) Można wykorzystać przedział na przykład do utworzenia tablicy cyfr: (1..9).to_a # => [1, 2, 3, 4, 5, 6, 7, 8, 9] Przedział można również utworzyć w następujący sposób: digits = Range.new(1, 9) digits.to_a # => [1, 2, 3, 4, 5, 6, 7, 8, 9] Metody Metody umożliwiają grupowanie instrukcji oraz wyrażeń programistycznych w jednym miejscu, by dało się je wykorzystywać w sposób wygodny i w miarę potrzeby również powtarzalny. Większość operatorów z języka Ruby jest także metodami. Poniżej znajduje się prosta definicja metody o nazwie hello utworzonej z wykorzystaniem słów kluczowych def oraz : def hello puts "Witaj świecie!" hello # => Witaj świecie! Przedziały 27

Definicję metody można usunąć za pomocą undef: undef hello # usuwa definicję metody o nazwie hello hello # teraz należy spróbować wywołać tę metodę NameError: undefined local variable or method 'hello' for main:object from (irb):11 from :0 Metody mogą przyjmować argumenty. Zaprezentowana niżej metoda repeat przyjmuje dwa argumenty, word oraz times: def repeat( word, times ) puts word * times repeat("witaj! ", 3) # => Witaj! Witaj! Witaj! repeat "Do widzenia! ", 4 # => Do widzenia! Do widzenia! Do widzenia! Do widzenia! Nawiasy W większości definicji metod oraz wywołań w języku Ruby nawiasy są opcjonalne. Jeśli pominie się nawiasy przy wywoływaniu metody przyjmującej argumenty, w zależności od typów argumentów można otrzymać ostrzeżenia. Zwracanie wartości Metody zwracają wartości. W innych językach programowania wartości zwraca się w sposób jawny za pomocą instrukcji return. W języku Ruby wartość ostatniego obliczonego wyrażenia zwracana jest bez względu na fakt użycia jawnej instrukcji return. Jest to cecha charakterystyczna Ruby. Można również zdefiniować zwracaną wartość za pomocą słowa kluczowego return: def hello return "Witaj świecie!" 28 Ruby. Leksykon kieszonkowy

Konwencje nazewnictwa metod Ruby posiada konwencje dotyczące ostatniego znaku w nazwie metody są one często spotykane w tym języku, jednak nie są wymuszane. Jeśli nazwa metody kończy się znakiem zapytania (?), jak w eql?, oznacza to, że metoda zwraca wartość typu Boolean true bądź false. Na przykład: x = 1.0 y = 1.0 x.eql? y # => true Jeśli nazwa metody kończy się wykrzyknikiem (!), jak delete!, oznacza to, że metoda jest destruktywna, czyli wprowadza zmiany na miejscu do samego obiektu, a nie jego kopii zmienia więc oryginalny obiekt. Różnicę widać na przykładzie metod delete oraz delete! obiektu String: der_mensch = "Matz!" # => "Matz!" der_mensch.delete( "!" ) # => "Matz" puts der_mensch # => Matz! der_mensch.delete!( "!" ) # => "Matz" puts der_mensch # => Matz Jeśli nazwa metody kończy się znakiem równości (=), jak w family_ name=, oznacza to, że metoda jest typu setter, czyli wykonuje przypisanie bądź ustawia zmienną, taką jak zmienna instancji w klasie: class Name def family_name=( family ) @family_name = family def given_name=( given ) @given_name = given n = Name.new n.family_name= "Matsumoto" # => "Matsumoto" n.given_name= "Yukihiro" # => "Yukihiro" p n # => <Name:0x1d441c @family_name="matsumoto", given_name="yukihiro"> Metody 29

Argumenty domyślne Zaprezentowana wcześniej metoda repeat zawierała dwa argumenty. Argumentom tym można nadać wartości domyślne poprzez użycie znaku równości, po którym następuje wartość. Kiedy wywoła się metodę bez argumentów, automatycznie wykorzystane zostaną wartości domyślne. Należy zdefiniować metodę repeat ponownie, dodając do niej wartości domyślne Witaj! dla word oraz 3 dla times. Należy wywołać tę metodę najpierw bez argumentów, a następnie z nimi: def repeat( word="witaj!", times=3 ) puts word * times repeat # => Witaj! Witaj! Witaj! repeat( "Do widzenia! ", 5 ) # => Do widzenia! Do widzenia! Do widzenia! Do widzenia! Do widzenia! Zmienna liczba argumentów Ponieważ Ruby pozwala na przekazywanie do metody zmiennej liczby argumentów dzięki poprzedzeniu argumentu znakiem *, autor programu ma w tym zakresie dużą elastyczność: def num_args( *args ) length = args.size label = length == 1? " argument" : " argumentów" num = length.to_s + label + " ( " + args.inspect + " )" num puts num_args # => 0 argumentów ( [] ) puts num_args(1) # => 1 argument ( [1] ) puts num_args( 100, "witaj", 2.5, "trzy", 99009 ) # => 5 argumentów ( [100, "witaj", 2.5, "trzy", 99009] ) 30 Ruby. Leksykon kieszonkowy

Można również wykorzystać argumenty ustalone w połączeniu z argumentami zmieniającymi się: def two_plus( one, two, *args ) length = args.size label = length == 1? " argument zmieniający się" : " argumentów zmieniających się" num = length.to_s + label + " ( " + args.inspect + " )" num puts two_plus( 1, 2 ) # => 0 argumentów zmieniających się( [] ) puts two_plus( 1000, 3.5, 14.3 ) # => 1 argument zmieniający się( [14.3] ) puts two_plus( 100, 2.5, "trzy", 70, 14.3, "witaj", 99009) # => 5 argumentów zmieniających się (["trzy", 70, 14.3, "witaj", 99009]) Aliasy metod Język Ruby posiada słowo kluczowe alias, które służy do tworzenia aliasów metod. Alias oznacza, że można utworzyć kopię metody z nową nazwą, choć obie metody odnosić się będą do tego samego obiektu. Poniższy przykład ilustruje sposób tworzenia aliasu dla metody greet: def greet puts "Witaj, kochanie!" alias baby greet # utworzenie aliasu baby dla metody greet greet # wywołanie metody Witaj, kochanie! baby # wywołanie aliasu Witaj, kochanie! Bloki Blok (ang. block) w Ruby jest czymś więcej niż tylko blokiem kodu bądź grupą instrukcji. Jest on zawsze wywoływany w połączeniu z metodą, co zostanie zaraz zaprezentowane. Tak naprawdę bloki Metody 31

są domknięciami (ang. closure), czasami określanymi mianem funkcji bezimiennych (ang. nameless function). Są jak metoda znajdująca się wewnątrz innej metody, która współdzieli zmienne lub odnosi się do zmiennych z metody zewnętrznej. W języku Ruby domknięcie lub blok umieszczone są w nawiasach klamrowych ({}) lub też pomiędzy do oraz, a ich działanie uzależnione jest od powiązanej z nimi metody (na przykład each). Poniżej znajduje się przykład wywołania bloku metody each obiektu Array: pacific = [ "Waszyngton", "Oregon", "Kalifornia" ] pacific.each do element puts element Nazwa znajdująca się pomiędzy znakami (czyli element ) może być dowolna. Blok wykorzystuje ją jako zmienną lokalną przechowującą każdy z elementów tablicy, a później używa jej, aby zrobić coś z tym elementem. Można zastąpić do oraz nawiasami klamrowymi, jak się to często robi. Same nawiasy klamrowe mają tak naprawdę wyższy priorytet od konstrukcji z do oraz : pacific.each ( e puts e ) Jeśli użyje się nazwy zmiennej, która już istnieje w zakresie nadrzędnym, blok przypisuje zmiennej każdą kolejną wartość, co może nie być zgodne z zamierzeniami autora. Nie generuje zmiennej lokalnej dla bloku o tej nazwie, jak można by tego oczekiwać. W ten sposób otrzyma się następujące zachowanie: j = 7 (1..4).to_a.each { j } # j jest teraz równe 4 Instrukcja yield Instrukcja yield wykonuje blok powiązany z metodą. Metoda gimme zawiera na przykład jedynie instrukcję yield: 32 Ruby. Leksykon kieszonkowy

def gimme yield Żeby dowiedzieć się, co robi yield, należy wywołać gimme i zobaczyć, co się stanie: gimme LocalJumpError: no block given from (irb):11:in 'gimme' from (irb):13 from :0 Otrzymuje się błąd, ponieważ zadanie instrukcji yield polega na wykonaniu bloku kodu powiązanego z metodą. Tego właśnie brakowało w wywołaniu metody gimme. Można uniknąć tego błędu dzięki skorzystaniu z metody block_given? (z Kernel). Należy ponownie zdefiniować gimme z instrukcją if: def gimme if block_given? yield else puts "Nie zawieram bloku!" Teraz można ponownie wypróbować metodę gimme z blokiem oraz bez niego: gimme { print "Powiedz wszystkim 'cześć'." } # => Powiedz wszystkim 'cześć'. gimme # => Nie zawieram bloku! Teraz należy ponownie zdefiniować metodę gimme, by zawierała ona dwie instrukcje yield, a następnie wywołać ją z blokiem: def gimme if block_given? yield yield else puts "Nie zawieram bloku!" Metody 33

gimme { print "Powiedz jeszcze raz 'cześć'. " } # => Powiedz jeszcze raz 'cześć'. Powiedz jeszcze raz 'cześć'. Powinno się pamiętać również o tym, że po wykonaniu instrukcji yield sterowanie powraca do kolejnej instrukcji znajdującej się bezpośrednio po yield. Procedury Ruby pozwala na przechowywanie procedur (inaczej procs) jako obiektów, w całości wraz z ich kontekstami. Można to zrobić na kilka sposobów. Można utworzyć procedurę za pomocą wywołania metody new klasy Proc bądź też przez wywołanie metod lambda lub proc z modułu Kernel. Lepiej jest wywołać metody lambda lub proc niż Proc.new, ponieważ dwie pierwsze sprawdzają parametry. Można rozważyć poniższy przykład: count = Proc.new { [1,2,3,4,5].each do i print i ; puts } your_proc = lambda { puts "Lurch: 'Wzywała mnie Pani?'" } my_proc = proc { puts "Morticia: 'Kto dzwonił do drzwi, Lurch?'" } # Jakie rodzaje obiektów właśnie utworzono? puts count.class, your_proc.class, my_proc.class # Wywołanie wszystkich procedur count.call # => 12345 your_proc.call # => Lurch: 'Wzywała mnie Pani?' my_proc.call # => Morticia: 'Kto dzwonił do drzwi, Lurch?' Można dokonać konwersji bloku przekazanego jako argument metody na obiekt Proc dzięki poprzedzeniu nazwy argumentu znakiem &, jak poniżej: def return_block yield def return_proc( &proc ) yield 34 Ruby. Leksykon kieszonkowy

return_block { puts "Mam blok!" } return_proc { puts "Mam blok, przekonwertuj na procedurę!" } Metoda return_block nie ma żadnych argumentów. Jedyne, co zawiera, to instrukcja yield. Celem instrukcji yield ponownie jest wykonanie bloku, kiedy zostanie on przekazany do metody. Kolejna metoda, return_proc, ma jeden argument &proc. Kiedy argument metody poprzedzony jest znakiem &, metoda ta przyjmuje blok po jego przekazaniu i konwertuje go na obiekt Proc. Dzięki instrukcji yield znajdującej się w ciele metody wykonuje ona blok z procedurą bez konieczności angażowania metody call obiektu Proc. Instrukcje warunkowe Instrukcja warunkowa sprawdza, czy jakaś instrukcja zwraca true, czy też false, i wykonuje pewien kod w oparciu o wynik tego testu. Zarówno true, jak i false są pseudozmiennymi nie można do nich przypisać wartości. Pierwsza jest obiektem klasy True- Class, a druga klasy FalseClass. Instrukcja if Instrukcje te rozpoczynają się od if i kończą się : if x == y then puts "x równa się y" if x!= y: puts "x nie jest równe y" if x > y puts "x jest większe od y" Separator then (oraz jego synonim :) są opcjonalne, o ile instrukcja nie jest zapisana w jednym wierszu. Instrukcje warunkowe 35