Programowanie w Ruby
Transkrypt
Programowanie w Ruby
Programowanie w Ruby Wykład 3 Marcin Młotkowski 21 października 2016 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Plan wykładu 1 Stringi, uzupełnienie 2 Zmienne 3 Bloki jeszcze raz 4 Moduły 5 Komentarze Marcin Młotkowski Programowanie w Ruby 2 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Z poprzedniego wykładu String to ciąg bajtów zwykle reprezentujących znaki. Marcin Młotkowski Programowanie w Ruby 3 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 3 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Badanie kodowania napisu Ruby (co najmnniej 1.9.*) ENCODING .name => ”UTF-8” ”Ala ma kota”.encoding => ”UTF-8” Marcin Młotkowski Programowanie w Ruby 4 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Plik źródłowy # encoding: utf-8 alias :λ :lambda π = Math::PI hello world = λ{|subject| ”Hello, #{subject}! π is #{π}”} Marcin Młotkowski Programowanie w Ruby 5 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 5 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Plan wykładu 1 Stringi, uzupełnienie 2 Zmienne 3 Bloki jeszcze raz 4 Moduły 5 Komentarze Marcin Młotkowski Programowanie w Ruby 6 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Rodzaje zmiennych Lokalne Zmienne instancyjne (obiektu) Zmienne globalne Stałe Marcin Młotkowski Programowanie w Ruby 7 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Zmienne lokalne Nazwa zmiennej lokalnej Nazwa zmiennej lokalnej zaczyna się od małej litery lub znaku podkreślenia . Marcin Młotkowski Programowanie w Ruby 8 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Zmienne 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 8 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Zmienne 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 8 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Zmienne globalne Zmienne globalne zaczynają się od znaku $. Marcin Młotkowski Programowanie w Ruby 9 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Zmienne globalne Zmienne globalne zaczynają się od znaku $. Przykład zmiennej globalnej $zmienna = ’zmienna’ def f puts $zmienna end f Marcin Młotkowski Programowanie w Ruby 9 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Stałe Nazwa stałej Nazwa stałej zaczyna się wielką literą. Marcin Młotkowski Programowanie w Ruby 10 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 10 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Zmienne klasy i zmienne instancyjne @zmienna instancyjna @@zmienna klasy Marcin Młotkowski Programowanie w Ruby 11 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Plan wykładu 1 Stringi, uzupełnienie 2 Zmienne 3 Bloki jeszcze raz 4 Moduły 5 Komentarze Marcin Młotkowski Programowanie w Ruby 12 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Przypomnienie { | z1, z2 | instrukcje } do | z1, z2 | instrukcje end Marcin Młotkowski Programowanie w Ruby 13 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Wykonanie bloku yield Marcin Młotkowski Programowanie w Ruby 14 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Przykład def run yield end Marcin Młotkowski Programowanie w Ruby 15 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Przykład def run yield end run { puts 2+2 } Marcin Młotkowski Programowanie w Ruby 15 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Bardziej skomplikowany przykład def run yield 2, 2 yield 3, 4 end Marcin Młotkowski Programowanie w Ruby 16 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 16 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 17 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Bloki to obiekty! blok = proc { | x, y | puts x + y } blok.call 2, 3 Marcin Młotkowski Programowanie w Ruby 18 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Lepiej: lambda blok = lambda { puts 2+2 } blok.call Marcin Młotkowski Programowanie w Ruby 19 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Można też tak: def fun (&block) block.call end fun { puts ’Cześć!!!’ } Marcin Młotkowski Programowanie w Ruby 20 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 21 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 22 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Bloki a instrukcja return Źle def boo Proc.new { return } end x = boo x.call Marcin Młotkowski Programowanie w Ruby 23 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 23 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Plan wykładu 1 Stringi, uzupełnienie 2 Zmienne 3 Bloki jeszcze raz 4 Moduły 5 Komentarze Marcin Młotkowski Programowanie w Ruby 24 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Przykład moduly.rb module Matematyka def Matematyka.dodawanie(x, y) x+y end Pi = 3.1415 end Marcin Młotkowski Programowanie w Ruby 25 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 25 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 26 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Uwagi o modułach Nazwa modułu musi być pisana wielką literą W jednym pliku może być wiele modułów Moduły 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 27 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Bloki kodu — składnia BEGIN { ciąg instrukcji } END { ciąg instrukcji } Marcin Młotkowski Programowanie w Ruby 28 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 29 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Plan wykładu 1 Stringi, uzupełnienie 2 Zmienne 3 Bloki jeszcze raz 4 Moduły 5 Komentarze Marcin Młotkowski Programowanie w Ruby 30 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 31 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 32 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze 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 33 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Jeszcze inny komentarz =begin rdoc =end Marcin Młotkowski Programowanie w Ruby 34 / 35 Stringi, uzupełnienie Zmienne Bloki jeszcze raz Moduły Komentarze Doc dla RDoc http://rdoc.sourceforge.net/doc/files/README.html Marcin Młotkowski Programowanie w Ruby 35 / 35