An Introduction to Ruby

Preview:

DESCRIPTION

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

Citation preview

RubyA Programmer’s Best Friend

Jonathan Weiss <jw@innerewut.de>

1

Überblick

Einführung

Getting started

Grundlagen

Blocks und Iteratoren

Goodies

Resources

Ruby on Rails - Übung

2

Einführung

3

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

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

The 5 E’s

Everything is an object

Elegant blocks give inline power

Exploring with reflection

Extending at runtime

Extensive standard libray

6

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

Getting Started

8

Ruby installieren

GPL , somit Sourcen verfügbar:

CVS, tar, make && make install

Binary installer für Windows

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

9

Ruby ausführen

Interpreter aufrufen und Skript übergeben:

prompt> ruby meinprogramm.rb

Shebang:

#!/usr/local/bin/ruby

print “a”

10

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

Demo

12

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

Demo

14

Grundlagen

15

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

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

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

Funktionen/Methoden

Einleitung mit

def funktions_name(argument)

....

end

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

19

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

Namen

Klassen, Konstanten und Module fangen mit Grossbuchstaben an

Methodennamen sind kleingeschrieben

Variablen (somit Objekte) fangen mit Kleinbuchstaben an

21

Namen 2

Instanzvariablen fangen mit @ an

Klassenvariablen fangen mit @@ an

Globale Variablen beginnen mit $

Lokale Variablen beginnen mit Kleinbuchstaben

22

Klassen

Zugriff auf Klasseneigenschaften über

Klasse.methode(arg1, arg2, arg3)

Klasse.klassenvariable

Klasse::KONSTANTE

Definition von Klassen-Methoden über Klassenname.methode

23

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

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

anzahl = Person.how_many

25

Vererbung

Konstruktor-Methode ist “initialize”

class a < b bedeutet, dass a von b erbt

“super” ist der Konstruktor der SuperKlasse

26

Demo

27

Access Control

Private, public und protected

Methoden sind default public

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

28

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

Attribute

Zuweisung auf Instanzvariablen durch Methoden:

def funk_name=(arg)

....

end

30

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

Automatische Attribute

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

32

Standard Datentypen

Numbers (Fixum, Bignum)

Strings

Array

Hash

Regular expression

Range

33

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

Blocks und Iteratoren

35

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

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

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

foo { print “2 von Block”}

Output:2 von Block2 von foo2 von Block

38

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

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

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

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

Output:6

41

Iteratoren

Iteratoren sind Funktionen, die Blocks repetitiv aufrufen

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

Intuitiv zu benutzten

42

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

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

44

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

Demo

46

Goodies

47

Exceptions

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

Schlüsselwörter raise, rescue und ensure

Kontrollflußsteuerung über throw/catch

48

Beispiel 11begin

funktion_die_schief_laufen_kann(1,2,”aaa”)

rescue StandardError

puts “Fehler aufgetreten”

ensure

puts “wird immer ausgeführt”

end

49

Integrierter Debugger

Aufrufbar über:

prompt> ruby -r debug skript.rb

Breakpoint, Watches, Steps,....

50

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

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

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

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

Ruby on Rails

Framework für Web-Anwendungen

Model-View-Controller Ansatz

Nur eine Konfigurationsdatei: Datenbank Zugangsdaten

THE REASON to check out Ruby

55

Integrierter Webserver

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

Kann als Servlet-Container arbeiten

56

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

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

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

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

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

Resources

62

Prgramming RubyThe PickAxe Book

Standardwerk von den Pragmatic Programmers

Tutorial und Referenz

Absolut zu empfehlen

63

www.ruby-lang.org

Rubys Homepage

Sourcecode und FAQ

Links zu anderen Ruby Seiten

Ruby Application Archive (RAA)

64

www.ruby-doc.org

Zentrale Dokumentation

RDoc Dokumentation als HTML

Erste Version PickAxe als HTML

65

www.rubygarden.org

WebBlog/Wiki von Ruby Entwicklern

Viele gute Artikel zum Thema Ruby

Viele gute Links

66

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

Ruby on Rails

68

Übung

Ruby on Rails

Framework für Web-Anwendungen

Model-View-Controller Ansatz

Nur eine Konfigurationsdatei: Datenbank Zugangsdaten

THE REASON to check out Ruby

69

Überblick

Einführung MVC

Überblick Rails-Architektur

Übung

70

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

Model

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

BSP:

Klasse Benutzer

Klasse Buch

72

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

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

Rails-Architektur

75

Active Record

Model

Verbindet Ruby-Klasse mit Daten aus der Datenbank

Bereitstellung von Funktionen zur Manipulation der Daten in der DB

76

Action Controller

Controller

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

Lädt den passenden Action View

77

Action View

View

Ruby Template

HTML mit ERb-tags

Das was der Benutzer zu sehen bekommt

78

Übung

79

Implementierung einer Webapplikation in weniger als 30 Minuten

Fin

80

Fragen?

Recommended