80
Ruby A Programmer’s Best Friend Jonathan Weiss <[email protected] > 1

An Introduction to Ruby

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: An Introduction to Ruby

RubyA Programmer’s Best Friend

Jonathan Weiss <[email protected]>

1

Page 2: An Introduction to Ruby

Überblick

Einführung

Getting started

Grundlagen

Blocks und Iteratoren

Goodies

Resources

Ruby on Rails - Übung

2

Page 3: An Introduction to Ruby

Einführung

3

Page 4: An Introduction to Ruby

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

Page 5: An Introduction to Ruby

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

Page 6: An Introduction to Ruby

The 5 E’s

Everything is an object

Elegant blocks give inline power

Exploring with reflection

Extending at runtime

Extensive standard libray

6

Page 7: An Introduction to Ruby

Beispiel 05.times do puts “ruby ist cool”.upcase end

Output:RUBY IST COOL

RUBY IST COOLRUBY IST COOL

RUBY IST COOLRUBY IST COOL

7

Page 8: An Introduction to Ruby

Getting Started

8

Page 9: An Introduction to Ruby

Ruby installieren

GPL , somit Sourcen verfügbar:

CVS, tar, make && make install

Binary installer für Windows

http://rubyforge.org/projects/rubyinstaller/

9

Page 10: An Introduction to Ruby

Ruby ausführen

Interpreter aufrufen und Skript übergeben:

prompt> ruby meinprogramm.rb

Shebang:

#!/usr/local/bin/ruby

print “a”

10

Page 11: An Introduction to Ruby

Interactive RubyInteractive 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

Page 12: An Introduction to Ruby

Demo

12

Page 13: An Introduction to Ruby

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

Page 14: An Introduction to Ruby

Demo

14

Page 15: An Introduction to Ruby

Grundlagen

15

Page 16: An Introduction to Ruby

GrundregelnKein 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

Page 17: An Introduction to Ruby

Alles ist ein ObjektNummern 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 = 517

Page 18: An Introduction to Ruby

Beispiel 1a = 9

b = 1c = a + b

print c ; c = “Hi”; print cd = c.length + c.index(”i”)

c = -99.absein_string = String.new(”HALLO”)

auch_ein_string = ‘a’ + “bcdefg #{c}”

18

Page 19: An Introduction to Ruby

Funktionen/Methoden

Einleitung mit

def funktions_name(argument)

....

end

implizites return des letzten Ausdruckes (wie überall in Ruby)

19

Page 20: An Introduction to Ruby

Beispiel 2def my_func

puts “abc” 99

enddef my_func2(a, b)

return a+bend

def a; “a”; end

ergebnis = my_func(1,2)a()

20

Page 21: An Introduction to Ruby

Namen

Klassen, Konstanten und Module fangen mit Grossbuchstaben an

Methodennamen sind kleingeschrieben

Variablen (somit Objekte) fangen mit Kleinbuchstaben an

21

Page 22: An Introduction to Ruby

Namen 2

Instanzvariablen fangen mit @ an

Klassenvariablen fangen mit @@ an

Globale Variablen beginnen mit $

Lokale Variablen beginnen mit Kleinbuchstaben

22

Page 23: An Introduction to Ruby

Klassen

Zugriff auf Klasseneigenschaften über

Klasse.methode(arg1, arg2, arg3)

Klasse.klassenvariable

Klasse::KONSTANTE

Definition von Klassen-Methoden über Klassenname.methode

23

Page 24: An Introduction to Ruby

Beispiel 3class 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 endend

a = Person.newif a.check_alter(90) puts “jung genug”end 24

Page 25: An Introduction to Ruby

Beispiel 3 contclass Person def Person.how_many @@anzahl_auf_der_welt endend

anzahl = Person.how_many

25

Page 26: An Introduction to Ruby

Vererbung

Konstruktor-Methode ist “initialize”

class a < b bedeutet, dass a von b erbt

“super” ist der Konstruktor der SuperKlasse

26

Page 27: An Introduction to Ruby

Demo

27

Page 28: An Introduction to Ruby

Access Control

Private, public und protected

Methoden sind default public

Instanzvariablen gar nicht zugänglich, man muss erst passende Methoden erschaffen (Attribute)

28

Page 29: An Introduction to Ruby

Beispiel 4class Person @name #Instanz-var @alter #Instanz-var def name @name end public def alter @alter end protected :alterend

print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”

29

Page 30: An Introduction to Ruby

Attribute

Zuweisung auf Instanzvariablen durch Methoden:

def funk_name=(arg)

....

end

30

Page 31: An Introduction to Ruby

Beispiel 5class Person def name=(wie_soll_ich_heissen) @name = wie_soll_ich_heissen end attr_writer :alterend

Hansi = Person.newHansi.name = “Hansi”Hansi.alter = 12print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”

31

Page 32: An Introduction to Ruby

Automatische Attribute

Benutzung der Macros “attr_reader”, “attr_writer” oder “attr_access”

32

Page 33: An Introduction to Ruby

Standard Datentypen

Numbers (Fixum, Bignum)

Strings

Array

Hash

Regular expression

Range

33

Page 34: An Introduction to Ruby

Beispiel 6string_a = “HUIBU”fixnummer = 9big_nummer = 1.23e10m_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..10meine_range.include?(5)

34

Page 35: An Introduction to Ruby

Blocks und Iteratoren

35

Page 36: An Introduction to Ruby

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

Page 37: An Introduction to Ruby

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

Page 38: An Introduction to Ruby

Beispiel 7def foo yield puts “2 von foo” yieldend

foo { print “2 von Block”}

Output:2 von Block2 von foo2 von Block

38

Page 39: An Introduction to Ruby

Beispiel 8def foo yield puts “2 von foo” yieldend

foo do puts “2 von Block”end

Output:2 von Block2 von foo2 von Block

39

Page 40: An Introduction to Ruby

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|

...end40

Page 41: An Introduction to Ruby

Beispiel 9def foo(a, b) c = a + b print yield(c)end

foo(1,2) do |var1| var1 * 2end

Output:6

41

Page 42: An Introduction to Ruby

Iteratoren

Iteratoren sind Funktionen, die Blocks repetitiv aufrufen

Finden dort Einsatz, wo andere Sprachen normalerweise Schleifen nutzen würden

Intuitiv zu benutzten

42

Page 43: An Introduction to Ruby

Beispiel 95.times { puts “Hi”}

a = [1, 2]a.each do |the_one| print the_oneend

[”H”, “A”, “L”].collect {|x| x.succ} --> [”I”, “B”, “M”]

[1, 2, 3, 5, 7, 9].find {|v| v*v > 30} --> 7

43

Page 44: An Introduction to Ruby

Beispiel 10class Array def find for i in 0..size value = self[i] return value if yield(value) end return nil endend

44

Page 45: An Introduction to Ruby

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

Page 46: An Introduction to Ruby

Demo

46

Page 47: An Introduction to Ruby

Goodies

47

Page 48: An Introduction to Ruby

Exceptions

Ruby unterstützt und benutzt (!!!) Exceptions

Schlüsselwörter raise, rescue und ensure

Kontrollflußsteuerung über throw/catch

48

Page 49: An Introduction to Ruby

Beispiel 11begin

funktion_die_schief_laufen_kann(1,2,”aaa”)

rescue StandardError

puts “Fehler aufgetreten”

ensure

puts “wird immer ausgeführt”

end

49

Page 50: An Introduction to Ruby

Integrierter Debugger

Aufrufbar über:

prompt> ruby -r debug skript.rb

Breakpoint, Watches, Steps,....

50

Page 51: An Introduction to Ruby

Integriertes UnitTest FrameworkRuby 1.8 hat das Test::Unit Framework integriert

Unterstützung von Cases +Suits

Neuer Test:

requiere test/unit

class TestUser < Test::Unit::Case

51

Page 52: An Introduction to Ruby

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

Page 53: An Introduction to Ruby

RubyGemsPaketverwaltung 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 --remote53

Page 54: An Introduction to Ruby

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_php54

Page 55: An Introduction to Ruby

Ruby on Rails

Framework für Web-Anwendungen

Model-View-Controller Ansatz

Nur eine Konfigurationsdatei: Datenbank Zugangsdaten

THE REASON to check out Ruby

55

Page 56: An Introduction to Ruby

Integrierter Webserver

WEBrick ist ein in Ruby geschriebener Webserver, der in der Standard Distribution enthalten ist

Kann als Servlet-Container arbeiten

56

Page 57: An Introduction to Ruby

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

Page 58: An Introduction to Ruby

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

Page 59: An Introduction to Ruby

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

Page 60: An Introduction to Ruby

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

Page 61: An Introduction to Ruby

Crossplatform IDEFreeRIDE 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

Page 62: An Introduction to Ruby

Resources

62

Page 63: An Introduction to Ruby

Prgramming RubyThe PickAxe Book

Standardwerk von den Pragmatic Programmers

Tutorial und Referenz

Absolut zu empfehlen

63

Page 64: An Introduction to Ruby

www.ruby-lang.org

Rubys Homepage

Sourcecode und FAQ

Links zu anderen Ruby Seiten

Ruby Application Archive (RAA)

64

Page 65: An Introduction to Ruby

www.ruby-doc.org

Zentrale Dokumentation

RDoc Dokumentation als HTML

Erste Version PickAxe als HTML

65

Page 66: An Introduction to Ruby

www.rubygarden.org

WebBlog/Wiki von Ruby Entwicklern

Viele gute Artikel zum Thema Ruby

Viele gute Links

66

Page 67: An Introduction to Ruby

Bibliotheken und PaketeRubyForge

http://www.rubyforge.org

Ruby Production Archive

http://rpa-base.rubyforge.org/wiki/wiki.cgi

Ruby Application Archive

http://raa.ruby-lang.org67

Page 68: An Introduction to Ruby

Ruby on Rails

68

Übung

Page 69: An Introduction to Ruby

Ruby on Rails

Framework für Web-Anwendungen

Model-View-Controller Ansatz

Nur eine Konfigurationsdatei: Datenbank Zugangsdaten

THE REASON to check out Ruby

69

Page 70: An Introduction to Ruby

Überblick

Einführung MVC

Überblick Rails-Architektur

Übung

70

Page 71: An Introduction to Ruby

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

Page 72: An Introduction to Ruby

Model

Klasse, die das Business-Objekt abbildet mit allen seinen Funktionalitäten

BSP:

Klasse Benutzer

Klasse Buch

72

Page 73: An Introduction to Ruby

ViewEigentliche 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

Page 74: An Introduction to Ruby

ControllerVerbindung 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

Page 75: An Introduction to Ruby

Rails-Architektur

75

Page 76: An Introduction to Ruby

Active Record

Model

Verbindet Ruby-Klasse mit Daten aus der Datenbank

Bereitstellung von Funktionen zur Manipulation der Daten in der DB

76

Page 77: An Introduction to Ruby

Action Controller

Controller

Bietet die eigentlichen Funktionalitäten an, mit denen der Benutzer interagiert

Lädt den passenden Action View

77

Page 78: An Introduction to Ruby

Action View

View

Ruby Template

HTML mit ERb-tags

Das was der Benutzer zu sehen bekommt

78

Page 79: An Introduction to Ruby

Übung

79

Implementierung einer Webapplikation in weniger als 30 Minuten

Page 80: An Introduction to Ruby

Fin

80

Fragen?