Programowanie w Ruby Wykład 3 Marcin Młotkowski 22 października 2018
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie w Ruby 70 / 432
Z poprzedniego wykładu String to ciąg bajtów zwykle reprezentujących znaki. Marcin Młotkowski Programowanie w Ruby 71 / 432
Z poprzedniego wykładu String to ciąg bajtów zwykle reprezentujących znaki. Na jednym z forów String to kolekcja zakodowanych danych, tj. surowe dane + kodowanie. Marcin Młotkowski Programowanie w Ruby 71 / 432
Badanie kodowania napisu Ruby (co najmnniej 1.9.*) ENCODING.name => UTF-8 Ala ma kota.encoding => UTF-8 Marcin Młotkowski Programowanie w Ruby 72 / 432
Plik źródłowy # encoding: utf-8 alias :λ :lambda π = Math::PI hello world = λ{ subject Hello, #{subject}! π is #{π} } Marcin Młotkowski Programowanie w Ruby 73 / 432
Plik źródłowy # encoding: utf-8 alias :λ :lambda π = Math::PI hello world = λ{ subject Hello, #{subject}! π is #{π} } Kodowanie z Emacs a # -*- encoding: utf-8 -*- Marcin Młotkowski Programowanie w Ruby 73 / 432
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie w Ruby 74 / 432
Rodzaje zmiennych Lokalne instancyjne (obiektu) globalne Stałe Marcin Młotkowski Programowanie w Ruby 75 / 432
lokalne Nazwa zmiennej lokalnej Nazwa zmiennej lokalnej zaczyna się od małej litery lub znaku podkreślenia. Marcin Młotkowski Programowanie w Ruby 76 / 432
lokalne Nazwa zmiennej lokalnej Nazwa zmiennej lokalnej zaczyna się od małej litery lub znaku podkreślenia. Zasięg zmiennej Zmienna jest dostępna tylko w kontekście (w funkcji, w pętli, etc.) w którym została utworzona Marcin Młotkowski Programowanie w Ruby 76 / 432
lokalne Nazwa zmiennej lokalnej Nazwa zmiennej lokalnej zaczyna się od małej litery lub znaku podkreślenia. Zasięg zmiennej Zmienna jest dostępna tylko w kontekście (w funkcji, w pętli, etc.) w którym została utworzona Zmienna poza zasięgiem zmienna = zmienna def f puts zmienna end f Marcin Młotkowski Programowanie w Ruby 76 / 432
globalne globalne zaczynają się od znaku $. Marcin Młotkowski Programowanie w Ruby 77 / 432
globalne globalne zaczynają się od znaku $. Przykład zmiennej globalnej $zmienna = zmienna def f puts $zmienna end f Marcin Młotkowski Programowanie w Ruby 77 / 432
Stałe Nazwa stałej Nazwa stałej zaczyna się wielką literą. Marcin Młotkowski Programowanie w Ruby 78 / 432
Stałe Nazwa stałej Nazwa stałej zaczyna się wielką literą. Const = stała # można, ale będzie ostrzeżenie: Const = zmienna? Marcin Młotkowski Programowanie w Ruby 78 / 432
klasy i zmienne instancyjne @zmienna instancyjna @@zmienna klasy Marcin Młotkowski Programowanie w Ruby 79 / 432
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie w Ruby 80 / 432
Przypomnienie { z1, z2 instrukcje } do z1, z2 instrukcje end Marcin Młotkowski Programowanie w Ruby 81 / 432
Wykonanie bloku yield Marcin Młotkowski Programowanie w Ruby 82 / 432
Przykład def run yield end Marcin Młotkowski Programowanie w Ruby 83 / 432
Przykład def run yield end run { puts 2+2 } Marcin Młotkowski Programowanie w Ruby 83 / 432
Bardziej skomplikowany przykład def run yield 2, 2 yield 3, 4 end Marcin Młotkowski Programowanie w Ruby 84 / 432
Bardziej skomplikowany przykład def run yield 2, 2 yield 3, 4 end run { x, y puts x + y } Marcin Młotkowski Programowanie w Ruby 84 / 432
Jeszcze jeden przykład def run yield 2, 2 end z=2 run { x, y puts x + y + z } Marcin Młotkowski Programowanie w Ruby 85 / 432
Bloki to obiekty! blok = proc { x, y puts x + y } blok.call 2, 3 Marcin Młotkowski Programowanie w Ruby 86 / 432
Lepiej: lambda blok = lambda { puts 2+2 } blok.call Marcin Młotkowski Programowanie w Ruby 87 / 432
Można też tak: def fun (&block) block.call end fun { puts Cześć!!! } Marcin Młotkowski Programowanie w Ruby 88 / 432
Uwagi Bloki to obiekty klasy Proc Można tworzyć bloki w stylu obiektowym bl = Proc.new { puts A kuku } ale to czasem jest zły pomysł! Również & czasem powoduje kłopoty Marcin Młotkowski Programowanie w Ruby 89 / 432
Różnice między proc a lambda wrażliwość na liczbę argumentów i parametrów Obiekty proc zwracają wyjątek jeśli liczba argumentów wywołania nie zgadza się z liczbą parametrów, blokom lambda to wszystko jedno. Brakujące argumenty to nil. Marcin Młotkowski Programowanie w Ruby 90 / 432
Bloki a instrukcja return Źle def boo Proc.new { return } end x = boo x.call Marcin Młotkowski Programowanie w Ruby 91 / 432
Bloki a instrukcja return Źle def boo Proc.new { return } end x = boo x.call Dobrze def boo lambda { return } end x = boo x.call Marcin Młotkowski Programowanie w Ruby 91 / 432
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie w Ruby 92 / 432
Przykład moduly.rb module Matematyka def Matematyka.dodawanie(x, y) x+y end Pi = 3.1415 end Marcin Młotkowski Programowanie w Ruby 93 / 432
Przykład moduly.rb module Matematyka def Matematyka.dodawanie(x, y) x+y end Pi = 3.1415 end plik.rb require moduly puts Matematyka.dodaj(2, 2) puts Matematyka::Pi Marcin Młotkowski Programowanie w Ruby 93 / 432
Dołączanie kodu require ładuje plik tylko raz, za pierwszym razem gdy jest wywoływana load ładuje pliki za każdym razem, gdy wykonanie programu dojdzie do tej instrukcji Marcin Młotkowski Programowanie w Ruby 94 / 432
Uwagi o modułach Nazwa modułu musi być pisana wielką literą W jednym pliku może być wiele modułów można zagnieżdżać W module można umieszczać instrukcje, które są wykonywane podczas włączania modułu Marcin Młotkowski Programowanie w Ruby 95 / 432
Bloki kodu składnia BEGIN { ciąg instrukcji } END { ciąg instrukcji } Marcin Młotkowski Programowanie w Ruby 96 / 432
Semantyka bloków kodu Bloki BEGIN i END można umieszczać w każdym pliku z kodem źródłowym Bloki BEGIN są wykonywane podczas ładowania pliku; natomiast END przy zakończeniu programu Marcin Młotkowski Programowanie w Ruby 97 / 432
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie w Ruby 98 / 432
Przykłady komentarzy Komentarz jednowierszowy # to jest zwykły komentarz Komentarz wielowierszowy =begin A to jest bardzo obszerny, wielowierszowy komentarz =end Marcin Młotkowski Programowanie w Ruby 99 / 432
Dokumentowanie modułów RDoc Analizowany jest komentarz # na początku pliku oraz przed deklaracjami funkcji i modułów Generowanie dokumentacji: $ rdoc plik.rb Wynik jest w katalogu doc/ Marcin Młotkowski Programowanie w Ruby 100 / 432
Formatowanie w RDoc #-- powoduje pomijanie komentarza aż do #++ #= generuje nagłówek, np. #= USAGE #== również generuje nagłówek Można używać html-a Wiele innych znaczników Marcin Młotkowski Programowanie w Ruby 101 / 432
Jeszcze inny komentarz =begin rdoc =end Marcin Młotkowski Programowanie w Ruby 102 / 432
Doc dla RDoc http://rdoc.sourceforge.net/doc/files/readme.html Marcin Młotkowski Programowanie w Ruby 103 / 432