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

Podobne dokumenty