Your SlideShare is downloading. ×
0
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
DWO 2009 - Ruby
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

DWO 2009 - Ruby

468

Published on

Ruby programming language introduction, presented at Dni Wolnego Programowania 2009 in Bielsko-Biała, Poland

Ruby programming language introduction, presented at Dni Wolnego Programowania 2009 in Bielsko-Biała, Poland

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
468
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Ruby Ruby
  2. Ruby Wstęp  Kim jestem?  Kim są słuchacze?  Po co ta prezentacja?  Zainteresować językiem Ruby  Pokazać prostotę i możliwości  Objaśnić jak zacząć przygodę 2
  3. Ruby Plan I. Rekonesans II. Pierwszy dotyk III. wRubyWstąpienie  Konstrukcje składniowe  Typy wbudowane IV. Coś większego V. Postludium 3
  4. Ruby Część I Rekonesans 4
  5. Ruby Ruby? A co to takiego? Wzór chemiczny Al2O3:Cr+3 Gęstość 3,95 do 4,1 g/cm3 Barwa czerwona o różnych odcieniach i różnym stopniu nasycenia; niekiedy wielobarwnyRubin Luminescencja wyraźna, nadaje minerał rubinom szczególnego z gromady tlenków kolorytu, podwyższając ich walory estetyczne. 5
  6. Ruby Powstanie  Twórca: Yukihiro Matsumoto [Matz]  Czas powstania: rok 1995  Popularna wersja: 1.8.7 [czerwiec 2008]  Najnowsza wersja: 1.9.1 [styczeń 2009]  Czekamy na Ruby 2.0 6
  7. Ruby Cechy  Interpretowany [chociaż są kompilatory just-in-time]  Obiektowy  Dynamicznie typowany  Automatyczne zarządzanie pamięcią  Podobny do: Python, Smalltalk, Perl, Icon  Nie posiada specyfikacji! 7
  8. Ruby Implementacje  Ruby MRI – Matzs Ruby Interpreter [implementacja referencyjna]  YARV – Yet another Ruby VM [standard od wersji 1.9]  JRuby – implementacja w Javie  XRuby – kompilacja do Java bytecode  IronRuby – implementacja w .NET  MacRuby – implementacja Applea 8  Rubinius
  9. Ruby Część II Pierwszy dotyk 9
  10. Ruby Piszesz - masz for x in 5..15 print x2 end dzień dobry include dobry? abecadło each char do c print c,capitalize end 100 times do print Będę mówił rubi, a nie rabi! end 10
  11. Ruby Piszesz - masz for x in 5..15 print x**2 end dzień dobry.include? dobry abecadło.each_char do |c| print c.capitalize end 100.times do print "Będę mówił rubi, a nie rabi!" end 11
  12. Ruby Gdzie pisać?  Pliki .rb  require  load  Skrypty #!/usr/bin/env ruby ...  irb - Interactive Ruby Shell 12
  13. Ruby Pomocy!  RDoc  ruby-doc.org  ri  metoda help  refleksja  .methods  .inspect 13
  14. Ruby Część III wRubyWstąpienie 14
  15. Ruby Obiektowość  Wszystko jest obiektem  … nawet nil  … nawet klasa [instancja klasy Class]  “Class is an object, and Object is a class.” [Hal Fulton]  Wszystko jest wyrażeniem i zwraca wartość  Wszystko oprócz nil i false jest 15 prawdą
  16. Ruby Zmienne i stałe  Zmienne  od małej litery lub znaku _  słowa oddzielone znakiem _  Stałe  od dużej litery  CamelCase  Zmienne globalne  od znaku $  Symbole  od znaku : 16
  17. Ruby Komentarze  jednolinijkowe # Jednolinijkowy komentarz  wielolinijkowe =begin Ten komentarz nie wnosi nic konstruktywnego poza zajęciem czasu czytelnika. =end 17
  18. KonstrukcjeRuby składniowe  operatory  instrukcje warunkowe  pętle  metody  klasy  moduły  dziedziczenie & mixins  bloki  wyrażenia lambda  wyjątki 18
  19. Ruby Operatory  arytmetyczne + - * / % **  przypisania = += -= *= /= %= **= |= &= >>= <<= ||= &&=  porównania == .eql? .equal? != < > >= <= <=> =~ !~  logiczne && || ! and or not  bitowe Nie ma operatorów ++ i -- ~ | & ^ << >>  inne 19 [] []= .. … ! not
  20. Ruby Operatory  ==, .eql?, .equal? 5 == 5.0 # => true 5.eql? 5.0 # => false 5.equal? 5.0 # => false 5.equal? 5 # => true a == a # => true a.eql? a # => true a.equal? a # => false  || oraz or, && oraz and – różnica w priorytetach a = false or 5 # => 5, a = false a = false || 5 # => 5, a = 5 20
  21. Ruby Operatory  ||= a = a || "default value" a ||= "default value"  wielokrotne przypisanie a, b = b, a a, b, c = get_something 21
  22. InstrukcjeRuby warunkowe  if … [elsif …] [else …] end x = if a > 5 100 elsif a > 100 puts miliard! 10**9 else 1 end  … if … puts miliard! if a > 100  unless zamiast if not 22
  23. InstrukcjeRuby warunkowe  … ? … : ... x = a > 100 ? miliard! : mało  case … when … [else ...] end x = case x when 0...5 1 when 5..100 50 else miliard! end 23
  24. Ruby Pętle  while … [do] … end while a > 10 a /= 3.0 end  … while … puts "Iteracja nr #{i+=1}" while i < 10  until zamiast while not 24
  25. Ruby Pętle  for … in … [do] … end for i in 1..8 puts i end  break  next  redo  retry  metody na obiektach typu Integer  times  upto 25  downto
  26. Ruby Metody  wywołanie invoke_method invoke_method()  wywołanie z argumentami invoke_method a, b, c invoke_method(a, b, c)  wywołanie z wykorzystaniem wartości zwracanej a = invoke_method(a, b, c) puts invoke_method(a, b, c)  nawiasy opcjonalne  … ale zalecane, bo: one_method 5, another_method 10, 100 26
  27. Ruby Metody  definiowanie def something_interesting first_statement second_statement third_statement_will_return_sth end  return opcjonalne  … chyba że nie jest ostatnią instrukcją def something_interesting return false if $SthWrongHappened second_statement third_statement # will return sth unless $SthWrongHappened end 27
  28. Ruby Metody  definiowanie z argumentami def something_interesting(a, b, c) ... end  argumenty domyślne def something_interesting(a, b = true) ... end  lista argumentów def something_interesting(a, *other_args) ... end 28
  29. Ruby Metody - konwencje  Bang methods  zakończone znakiem !  potencjalnie niebezpieczne  np. modyfikują obiekt w miejscu  najczęściej posiadają odpowiedniki niemodyfikujące, które produkują nowe obiekty  np. sort!, upcase!, reverse! w kolekcjach  Metody pytające  zakończone znakiem ?  najczęściej zwracają true lub false  np. empty?, include?, nil? 29
  30. Ruby Klasy  class … end class Miliard puts "Ładowanie..."  nazwa od dużej litery  wewnątrz definicje metod attr_reader :value  … oraz instrukcje def initialize(value) @value = value  metoda initialize end  metoda inspect def introduce_yourself  zmienne instancji puts "Wartość: #{@value}"  od znaku @ end  zmienne klasy def value=(v)  od znaków @@ @value = v if v > 100 end  własne akcesory end 30  akcesory attr_reader, attr_writer, attr_accessor
  31. Ruby Klasy  metoda instancji class Document def send_to(email)  konwencja: ... end Klasa#metoda end d = Document.new d.send_to(darth@vader.gov) class Document  metoda klasy def self.read_from(filename) ...  konwencja: end Klasa::metoda end d = Document.read_from(dok.txt) 31
  32. Ruby Klasy  klasy nigdy nie są zamknięte!  można rozszerzać i modyfikować istniejące  … również wbudowane :) class String def inspect "Ukryta wartość" end def starts_with_capital? (A..Z).include?(self[0, 1]) end end 32  pojedyncze obiekty też są otwarte!
  33. Ruby Klasy  poziomy dostępu metod def SomeClass def some_public_method  public end  protected protected  private def some_protected_method end private def some_private_method def SomeClass end public :sth_public end protected :sth_protected private :sth_private def ... ... end 33
  34. Obiekty jakoRuby odbiorcy metod  każda metoda jest wysyłana do obiektu  send "abc".send("capitalize")  method_missing class Miliard def method_missing(method_id) puts "Nie mam metody #{method_id}!" end end 34
  35. Ruby Moduły  tworzą przestrzeń nazw module ComputingMachine PerformanceUnit = FLOPS def ComputingMachine.play_chess ... end end puts ComputingMachine::PerformanceUnit ComputingMachine.play_chess  mogą zostać włączone do innego modułu lub klasy 35
  36. Ruby Mixins  include module DebugAbility  można włączyć def error_info "Something bad happened..." kilka modułów end  nie można stworzyć end hierarchii class Miliard include DebugAbility ... end puts Miliard.new.error_info 36
  37. Ruby Dziedziczenie  tylko jednobazowe class Miliard def introduce_yourself  hierarchia klas puts "Miliard!"  Object – korzeń end end  polimorfizm class LepszyMiliard < Miliard  self def introduce_yourself  super super puts "Lepszy Miliard!"  zmienne instancji end nie są związane def to_s z klasą, ale z obiektem "Lepszy Miliard!" end end 37
  38. Ruby Bloki  smaczny kąsek  do … end 10.times do |i| puts i end  {…} 10.times { |i| puts i }  są przekazywane do metody  yield def give_me_something sth = rand.to_s yield(sth) end give_me_something { |x| puts "Ive got #{x}!" } 38
  39. Ruby Wyrażenia lambda  bloki nie są obiektami...  … ale mogą się nimi stać :)  klasa Proc  metody lambda i proc miliard = lambda { puts "Miliard!" } miliard.class # => Proc miliard.call # => "Miliard!"  nie można przekazywać metod do innych metod...  … ale można przekazywać obiekty klasy Proc  metoda nie może zwrócić innej metody... 39  … ale może zwrócić obiekt klasy Proc
  40. Ruby Wyjątki  przechwytywanie – rescue, ensure begin dangerous_method rescue IOError puts "Oh, no! IO Error!" rescue AnotherException => e puts "Dunno what happened 0_o", e.message ensure # here we enter always end  można też objąć całą metodę def some_method dangerous_method rescue puts "Oh, no! Error!" end 40
  41. Ruby Wyjątki  rzucanie - raise def dangerous_method(arg) raise Invalid argument unless arg raise ArgIsZeroError, Arg is zero if arg == 0 ... end  dziedziczą po klasie Exception  domyślnie RuntimeError 41
  42. Ruby Typy wbudowane  liczby  łańcuchy tekstowe [string]  zakresy  tablice  tablice asocjacyjne [hash]  wyrażenia regularne 42
  43. Ruby Liczby  Wbudowane  Numeric  Integer Fixnum [do 230 - 1]  ● Bignum [od 230]  Float  Biblioteczne  Numeric  Complex [liczby zespolone]  Rational [liczby wymierne] 43
  44. Ruby Łańcuchy tekstowe  klasa String  mutowalne  ograniczone znakami lub "  specjalne, ograniczone znakami `  wykonywane przez system operacyjny  #{ … } - tylko gdy " [string interpolation]  escape sequences – od znaku  bogaty zestaw metod  do wersji 1.8 nie obsługują natywnie Unicodeu :( 44  … ale w 1.9 już tak :)
  45. Ruby Zakresy  klasa Range  wyrażają sekwencje  prawostronnie domknięte  operator ..  prawostronnie otwarte  operator ... (a..g).include? r # => false (10...100) === 50 # => true (0..20).step(5).to_a # => [0, 5, 10, 15, 20] 45
  46. Ruby Tablice  klasa Array  mutowalne  ograniczone znakami [ i ]  mogą zawierać dowolne obiekty  bogaty zestaw metod a = [3, ["inna", "tablica"], nil, "koniec"] a[0] # => 3 a[-1] # => "koniec" a[-2, 2] # => [nil, "koniec"] a[100] # => nil a.each {|e| puts e} a.select {|e| e.class == String} # => ["koniec"] 46
  47. Ruby Tablice asocjacyjne  klasa Hash  klucze i wartości  brak zachowania kolejności  wyszukiwanie i wstawianie w czasie O(1)  ograniczone znakami { i }  bogaty zestaw metod h = {1 => jeden, 2 => dwa, 10 => miliard, :some_symbol => [2, 3] } h[10] # => miliard h[5] # => nil h.each_pair {|k, v| puts "#{k} = #{v}" } h.keys # => [1, 2, :some_symbol, 10] 47
  48. Ruby Wyrażenia regularne  klasa Regexp  wbudowane w język  ograniczone znakami /  operator =~  metoda match "dwa i 3/4" =~ /d/ # => 6 "dwa i 3/4" =~ /^d/ # => nil "Miliard = 10**9"[/[a-zA-z]+/] # => "Miliard" match = "dwa i 3/4".match /(d)/([0-9])/ match.class # => MatchData match[0] # => "3/4" match[1] # => "3" 48 match[2] # => "4"
  49. Ruby Część IV Coś większego 49
  50. Ruby Pliki  klasa File File.open(plik.txt) do |file| while line = file.gets puts line end end File.open(plik.txt, w) do |file| file.puts "Miliard!" end  klasa Find Find.find(ENV["HOME"]) do |path| puts "Katalog: #{path}" if File.directory?(path) end 50
  51. Ruby Marshalling  czyli serializacja  klasa Marshal  dump  load sth = [3, {:a => 2}, "koniec"] File.open(file.dat, w+) do |f| Marshal.dump(sth, f) end File.open(file.dat) do |f| @sth = Marshal.load(f) end 51
  52. Ruby Wątki  klasa Thread  współdzielą zmienne globalne i lokalne spoza bloku  zmienne lokalne mają na wyłączność  Thread.list  Thread.current 100.times do |i| Thread.new(i) do |j| puts "sqrt(#{j}) = #{Math.sqrt(j)}" end end  do wersji 1.8 nie były natywne :( 52  … ale w wersji 1.9 już tak :)
  53. Ruby Sockets  klasy: server = TCPServer.new(localhost, 12345)  BasicSocket loop do  IPSocket Thread.start(server.accept) do |s|  TCPSocket s.write("Miliard!")  SOCKSSocket s.close  TCPServer end  UDPSocket end  Socket  UNIXSocket  UNIXServer client = TCPSocket.new("127.0.0.1", 12345) puts client.readline client.close 53
  54. Ruby Część V Postludium 54
  55. Ruby Więcej!  RubyGems – rubygems.org  gem install  gem list  RubyForge – rubyforge.org ● RubyForge is a home for open source Ruby projects 55
  56. Ruby Jeszcze więcej!  Web frameworks  co najmniej 10, m.in:  Ruby On Rails  Merb  Coś do baz danych  DataMapper  Sequel  Coś do testów ● Test::Unit [w bibliotece standardowej]  RSpec  Ruby bindings for OpenGL and GLUT  RMagick  wxRuby 56  … i mnóstwo innych!
  57. Ruby Róża bez kolców?  wątki realizowane w obrębie VM [nieaktualne od 1.9]  brak wsparcia dla Unicodeu [nieaktualne od 1.9]  średnia wydajność [ale 1.9 około 2 razy szybszy niż 1.8]  brak specyfikacji  łatwy monkey patching 57
  58. Ruby Źródła  ruby-lang.org  rubylearning.com  ruby-doc.org  rubyforge.org  rubygems.org 58
  59. Ruby Koniec Pytania? 59 © Mikołaj Pastuszko

×