An Introduction to Ruby

6.636 Aufrufe

Veröffentlicht am

An Introduction to Ruby, the programming language by Jonathan Weiss. Presented at the Juniter Workend in 2005.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
6.636
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
602
Aktionen
Geteilt
0
Downloads
122
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

An Introduction to Ruby

  1. 1. Ruby A Programmer’s Best Friend Jonathan Weiss <jw@innerewut.de> 1
  2. 2. Überblick Einführung Getting started Grundlagen Blocks und Iteratoren Goodies Resources Ruby on Rails - Übung 2
  3. 3. Einführung 3
  4. 4. Ruby? Ruby ist eine vollständig objektorientierte Skriptsprache Das Beste von Perl und Python Public release 1995 durch Yukihiro Matsumoto, a.k.a “Matz” 4
  5. 5. Wichtigste Eigenschaften Interpretierte Skriptsprache Aktuell ist Ruby 1.8.2 Komplett Objekt-Orientiert Dynamische Typbindung Verfügbar über GPL oder eigene Lizenz The 5 E’s (by DHH) 5
  6. 6. The 5 E’s Everything is an object Elegant blocks give inline power Exploring with reflection Extending at runtime Extensive standard libray 6
  7. 7. Beispiel 0 5.times do puts “ruby ist cool”.upcase end Output: RUBY IST COOL RUBY IST COOL RUBY IST COOL RUBY IST COOL RUBY IST COOL 7
  8. 8. Getting Started 8
  9. 9. Ruby installieren GPL , somit Sourcen verfügbar: CVS, tar, make && make install Binary installer für Windows http://rubyforge.org/projects/ rubyinstaller/ 9
  10. 10. Ruby ausführen Interpreter aufrufen und Skript übergeben: prompt> ruby meinprogramm.rb Shebang: #!/usr/local/bin/ruby print “a” 10
  11. 11. Interactive Ruby Interactive Ruby (irb) ist eine Ruby “Shell” Erlaubt ausführen von eingegeben Code oder lesen von Code aus Dateien Shell-Eigenschaften wie History, Job- Controll und Commandline-Editing Perfekt, um zu probieren und spielen 11
  12. 12. Demo 12
  13. 13. Dokumentation Ruby wird meist in RDoc dokumentiert (vergleichbar JavaDoc) Konvertierung in HTML und ri ri erlaubt Zugang über Kommandozeile: prompt> ri WAS_ICH_WISSEN_WILL 13
  14. 14. Demo 14
  15. 15. Grundlagen 15
  16. 16. Grundregeln Kein Semikolon am Ende der Zeile (bei einer Anweisung pro Zeile) Keine geschweiften Klammern zur Deklaration vom Blöcken, sondern “xxxx......end” Keine Deklaration von Variablen! () können bei Methoden weggelassen werden 16
  17. 17. Alles ist ein Objekt Nummern und Strings sind auch Objekte “nil” als Null-Objekt statt null-pointer Zugang zu Instanz-Methoden über: Instanz.methode(arg1, arg2) Zugang zu Instanz-Attributen über: Instanz.attribut = 5 17
  18. 18. Beispiel 1 a=9 b=1 c=a+b print c ; c = “Hi”; print c d = c.length + c.index(”i”) c = -99.abs ein_string = String.new(”HALLO”) auch_ein_string = ‘a’ + “bcdefg #{c}” 18
  19. 19. Funktionen/Methoden Einleitung mit def funktions_name(argument) .... end implizites return des letzten Ausdruckes (wie überall in Ruby) 19
  20. 20. Beispiel 2 def my_func puts “abc” 99 end def my_func2(a, b) return a+b end def a; “a”; end ergebnis = my_func(1,2) a() 20
  21. 21. Namen Klassen, Konstanten und Module fangen mit Grossbuchstaben an Methodennamen sind kleingeschrieben Variablen (somit Objekte) fangen mit Kleinbuchstaben an 21
  22. 22. Namen 2 Instanzvariablen fangen mit @ an Klassenvariablen fangen mit @@ an Globale Variablen beginnen mit $ Lokale Variablen beginnen mit Kleinbuchstaben 22
  23. 23. Klassen Zugriff auf Klasseneigenschaften über Klasse.methode(arg1, arg2, arg3) Klasse.klassenvariable Klasse::KONSTANTE Definition von Klassen-Methoden über Klassenname.methode 23
  24. 24. Beispiel 3 class Person @name #Instanz-var @alter #Instanz-var @@anzahl_auf_der_welt #Klassen-var MAX_ALTER = 100 #Konstante def check_alter(alter) #Instanz-meth alter < Person::MAX_ALTER end end a = Person.new if a.check_alter(90) puts “jung genug” end 24
  25. 25. Beispiel 3 cont class Person def Person.how_many @@anzahl_auf_der_welt end end anzahl = Person.how_many 25
  26. 26. Vererbung Konstruktor-Methode ist “initialize” class a < b bedeutet, dass a von b erbt “super” ist der Konstruktor der SuperKlasse 26
  27. 27. Demo 27
  28. 28. Access Control Private, public und protected Methoden sind default public Instanzvariablen gar nicht zugänglich, man muss erst passende Methoden erschaffen (Attribute) 28
  29. 29. Beispiel 4 class Person @name #Instanz-var @alter #Instanz-var def name @name end public def alter @alter end protected :alter end print “#{Hansi.name} ist #{Hansi.alter} Jahre alt” 29
  30. 30. Attribute Zuweisung auf Instanzvariablen durch Methoden: def funk_name=(arg) .... end 30
  31. 31. Beispiel 5 class Person def name=(wie_soll_ich_heissen) @name = wie_soll_ich_heissen end attr_writer :alter end Hansi = Person.new Hansi.name = “Hansi” Hansi.alter = 12 print “#{Hansi.name} ist #{Hansi.alter} Jahre alt” 31
  32. 32. Automatische Attribute Benutzung der Macros “attr_reader”, “attr_writer” oder “attr_access” 32
  33. 33. Standard Datentypen Numbers (Fixum, Bignum) Strings Array Hash Regular expression Range 33
  34. 34. Beispiel 6 string_a = “HUIBU” fixnummer = 9 big_nummer = 1.23e10 m_array = [”a”, “b”, [1,2], “c”, 3] mein_hash = {’anfang’ => “abc”, ‘ende’ => “xyz”} puts string_a + mein_hash[’anfang’] + m_array[0] meine_range = 1..10 meine_range.include?(5) 34
  35. 35. Blocks und Iteratoren 35
  36. 36. Blocks Blocks sind eine Art anonyme Funktion Sie werden (fast) immer mit “normalen” Funktionen eingesetzt Dabei wird der Kontrollfluß zwischen den Funktionen hin und her gereicht 36
  37. 37. Blocks Blocks werden auf der selben Zeile wie der Methoden-Aufruf geschrieben Notation in {...} oder do...end Die “normale” Funktion kann den Block über “yield” aufrufen 37
  38. 38. Beispiel 7 def foo yield puts “2 von foo” yield end foo { print “2 von Block”} Output: 2 von Block 2 von foo 2 von Block 38
  39. 39. Beispiel 8 def foo yield puts “2 von foo” yield end foo do puts “2 von Block” end Output: 2 von Block 2 von foo 2 von Block 39
  40. 40. Yield Yield kann auch Variablen übergeben, die an den Block weitergereicht werden Das Ergebnis des Blocks wird die Rückgabe von yield {|var1, var2| print var1 .....} do |var3, var4| ...end 40
  41. 41. Beispiel 9 def foo(a, b) c=a+b print yield(c) end foo(1,2) do |var1| var1 * 2 end Output: 6 41
  42. 42. Iteratoren Iteratoren sind Funktionen, die Blocks repetitiv aufrufen Finden dort Einsatz, wo andere Sprachen normalerweise Schleifen nutzen würden Intuitiv zu benutzten 42
  43. 43. Beispiel 9 5.times { puts “Hi”} a = [1, 2] a.each do |the_one| print the_one end [”H”, “A”, “L”].collect {|x| x.succ} --> [”I”, “B”, “M”] [1, 2, 3, 5, 7, 9].find {|v| v*v > 30} --> 7 43
  44. 44. Beispiel 10 class Array def find for i in 0..size value = self[i] return value if yield(value) end return nil end end 44
  45. 45. Proc Objekt Man kann Blocks mit Hilfer der lamba Funktion oder des Konstruktor der Proc- Klasse in Objekte verwandeln Diese kann man nun “rumreichen” Abfangen des Blocks und Umwandeln in Proc auch in der “normalen” Methode möglich 45
  46. 46. Demo 46
  47. 47. Goodies 47
  48. 48. Exceptions Ruby unterstützt und benutzt (!!!) Exceptions Schlüsselwörter raise, rescue und ensure Kontrollflußsteuerung über throw/catch 48
  49. 49. Beispiel 11 begin funktion_die_schief_laufen_kann(1,2,”aaa”) rescue StandardError puts “Fehler aufgetreten” ensure puts “wird immer ausgeführt” end 49
  50. 50. Integrierter Debugger Aufrufbar über: prompt> ruby -r debug skript.rb Breakpoint, Watches, Steps,.... 50
  51. 51. Integriertes UnitTest Framework Ruby 1.8 hat das Test::Unit Framework integriert Unterstützung von Cases +Suits Neuer Test: requiere test/unit class TestUser < Test::Unit::Case 51
  52. 52. Mixes Module und deren Eigenschaften können in beliebige Klassen “gemixt” werden Diese erhalten somit alle Methoden und Variablen Eine Art Java Interfaces nur mit Implementierung 52
  53. 53. RubyGems Paketverwaltung für Ruby Programme und Bibliotheken Vergleichbar mit Pear und CPAN Installation von Programmen in verschiedenen Versionen möglich gem install rails --remote gem upgrade --remote 53
  54. 54. erb, eruby und mod_ruby erb und eruby sind filter, die es erlauben, Ruby Code in HTML unterzubringen (PHP) <h1> Willkommen, <% print #{Hansi.name} %> </h1> mod_ruby vergleichbar mit mod_php 54
  55. 55. Ruby on Rails Framework für Web-Anwendungen Model-View-Controller Ansatz Nur eine Konfigurationsdatei: Datenbank Zugangsdaten THE REASON to check out Ruby 55
  56. 56. Integrierter Webserver WEBrick ist ein in Ruby geschriebener Webserver, der in der Standard Distribution enthalten ist Kann als Servlet-Container arbeiten 56
  57. 57. Grafische Oberflächen RubyTK/GTK, FXRuby, ruby-gnome2, QT/Ruby, Ruby/Cocoa, WxRuby, FLTK, RubyWise, ParaGUI, Widestudio, Apollo,.... Somit “normale” GUI-Programme möglich 57
  58. 58. Taint Obejcts Taint-modus, ähnlich wie bei Perl Setzen des Levels(1-4) über $SAFE Alle externen Daten sind “tainted” Tainted Objects können nicht an gefährliche Funktionen übergeben werden (z.B. System) 58
  59. 59. Reflection Ruby hat massive Reflection API Möglich unbekannte Objekte, Klassen, Module und Funktionen zu inspizieren Wichtig für Debugger, IDEs und dynamische Erweiterbarkeit 59
  60. 60. Distributed Ruby drb erlaubt ausführen von RubyCode auf entfernen Rechnern Vergleichbar CORBA, Java-RMI Einfach und schnell 1GHz PowerBook: 500 Calls pro Sek 60
  61. 61. Crossplatform IDE FreeRIDE ist eine Ruby IDE für Windows, UNIX und Mac OS X Unterstützung von Debugging, Code completion, Refactoring, remote pair-programming http:// freeride.rubyforge.org 61
  62. 62. Resources 62
  63. 63. Prgramming Ruby The PickAxe Book Standardwerk von den Pragmatic Programmers Tutorial und Referenz Absolut zu empfehlen 63
  64. 64. www.ruby-lang.org Rubys Homepage Sourcecode und FAQ Links zu anderen Ruby Seiten Ruby Application Archive (RAA) 64
  65. 65. www.ruby-doc.org Zentrale Dokumentation RDoc Dokumentation als HTML Erste Version PickAxe als HTML 65
  66. 66. www.rubygarden.org WebBlog/Wiki von Ruby Entwicklern Viele gute Artikel zum Thema Ruby Viele gute Links 66
  67. 67. Bibliotheken und Pakete RubyForge http://www.rubyforge.org Ruby Production Archive http://rpa-base.rubyforge.org/wiki/ wiki.cgi Ruby Application Archive http://raa.ruby-lang.org 67
  68. 68. Ruby on Rails Übung 68
  69. 69. Ruby on Rails Framework für Web-Anwendungen Model-View-Controller Ansatz Nur eine Konfigurationsdatei: Datenbank Zugangsdaten THE REASON to check out Ruby 69
  70. 70. Überblick Einführung MVC Überblick Rails-Architektur Übung 70
  71. 71. Model-View-Controller Design-Pattern für Programme mit Interaktion mit dem Benutzer KLassen werden in drei Gruppen eingeteilt, die sich auf ihre jeweillige Aufgabe spezialisieren Vorteil: Entkopplung und somit Wiederverwendbarkeit 71
  72. 72. Model Klasse, die das Business-Objekt abbildet mit allen seinen Funktionalitäten BSP: Klasse Benutzer Klasse Buch 72
  73. 73. View Eigentliche Darstellung für den User Keine Funktionalität, nur Design +Anzeige BSP: Template, dass alle Bücher im System anzeigt Template, dass alle Bücher eines Benutzers anzeigt 73
  74. 74. Controller Verbindung zwischen Model und View Lädt benötigte Daten aus dem Model und füttert sie in den View Prozess-Logik BSP: Lade alle Bücher im System und gebe sie dem richtigem Template 74
  75. 75. Rails-Architektur 75
  76. 76. Active Record Model Verbindet Ruby-Klasse mit Daten aus der Datenbank Bereitstellung von Funktionen zur Manipulation der Daten in der DB 76
  77. 77. Action Controller Controller Bietet die eigentlichen Funktionalitäten an, mit denen der Benutzer interagiert Lädt den passenden Action View 77
  78. 78. Action View View Ruby Template HTML mit ERb-tags Das was der Benutzer zu sehen bekommt 78
  79. 79. Übung Implementierung einer Webapplikation in weniger als 30 Minuten 79
  80. 80. Fin Fragen? 80

×