ARCHIV 1999-2006

ARCHIV :: # 1917

Ruby

Scriptsprache und mehr

Autor: thyl - Datum: 17.04.2003

Noch eine Programmiersprache. Ruby ist eine weitere Programmiersprache, die Mitte der 90er Jahre des letzten Jahrhundert im vorigen Jahrtausend von Yukihiro Matsumoto entwickelt worden ist. Auch wenn sie sich offiziell Scriptsprache nennt, scheint sie doch deutlich anders als Perl oder Phyton zu sein, und viele Leute meinen, eleganter und lustiger in der Anwendung. Ruby gibt es seit einem Jahr unter MacOSX, sie hat jedoch in den Mac-Medien bislang wenig Beachtung gefunden. Warum eigentlich?.... Programmiersprachen sind Geschmackssache. Jeder Programmierer hat so seine Lieblinge und Hasskandidaten und ich vermute, das hängt mit der persönlichen Gehirnstruktur zusammen, die halt zu unterschiedlichen Präferenzen führt. Wer sich mal als (Noch-) Nichtprogrammierer Cocoa bzw. Objective C angesehen hat, dürfte in der Regel das kalte Grausen bekommen haben. Die Sprache wirkt auf den ersten bis dritten Blick total kryptisch und verwirrend. Zumindest ging es mir so, als ich 1993 meinen ersten Kontakt mit Cocoa hatte (hieß damals noch NeXTSTEP). Mich hat die Struktur damals verzweifeln lassen; und wenn ich auch weiß, dass Programmierer Objective C sehr loben und gerade InterfaceBuilder und ProjectBuilder die Produktivität massiv angehoben haben, so war mir als Laie die Lernkurve doch einfach zu hoch. Meine Gehirnstruktur scheint also nicht zu Objective C zu passen.

Auftritt Scriptsprachen. Für schnelle Hacks und einfaches Protoyping sind in den letzten Jahren verschiedene sog. Scriptsprachen entwickelt worden, die kleine Aufgaben einfach bewältigen können. Beispiele sind Perl, Phyton, php, und Applescript. Jede dieser Sprachen hat ihre Vorteile und Nachteile; Applescript finde ich beispielsweise unheimlich eloquent, was zu einer ziemlichen Tiparbeit führen kann (tell application finder to blabla statt finder: oder so). AS ist für Leute entwickelt worden, die sehr sprachlich denken, allerdings Englisch-sprachig.

Auf Ruby bin ich durch einen Artikel in der c't aufmerksam geworden. Ruby ist so etwas wie eine Scriptsprache, aber gestattet auch das interaktive Ausführen von Programmen (mit "irb") und das Kompilieren. Interessant wird Ruby für MacOSX Entwickler in erster Linie, weil es mit RubyCocoa eine Schnittstelle zum Cocoa Framework gibt. Diese ist zwar noch nicht ganz fertig, aber die Implikationen sind gewaltig. Man kann anscheinend die Oberfläche eines Programms komplett ohne Programmieraufwand mit dem InterfaceBuilder erstellen, muss sich dann aber eben für die restliche Funktionalität des Programms nicht in die Niederungen von Objective C begeben, sondern kann einfach einige Ruby Scripte stricken und alles zu einer Applikation verschnüren. Wenn das tatsächlich funktinoniert, könnte es die Schrecken des Eises und der Finsternis von Objective C beseitigen und die Programmierung ganz neuen Kreisen öffnen. Tatsächlich kann man mit RubyCocoa auf das gesamte Cocoa-Framework zugreifen und alle Systemfunktionen verwenden (das Abspielen von Systemsounds ist gerade mal ein kleiner Mehrzeiler). Allerdings räume ich ein, dass man sich dazu näher mit dem mittlerweile sehr umfangreichen und damit lernaufwendigen Cocoa Framework rumschlagen muss.

Ruby wird von den Entwicklern, die es verwenden, sehr gelobt. Die Schwelle zum Verstehen der Sprache scheint sehr niedrig, die Sprache macht idR was man erwartet, es gibt keine Ausnahmen und Sonderregeln, die man beherrschen muss; und den komplett objektorientierten Ansatz finde ich auch sympathisch. Es gibt ziemlich wenig Konstrukte, die man sich merken muss, wenn man auch sicher eine gewisse Zeit braucht, um alle Methoden zu lernen.

Die Objektorientierung bedeutet, es gibt Klassen mit einer Zahl von Methoden, und Objekte, die "Konkretisierungen" der Klassen sind. Ausserdem gibt es noch Flusssteuerungen. Was bei anderen Programmiersprachen Funktionen und Prozeduren, sind in Ruby Methoden. Variablen und Konstanten sind alles Objekte, genau wie komplizierte Konstrukte oder ganze Programmteile Objekte sein können, da Objekten die Methoden "zugewiesen" sind.

Neue Klassen definiert man mit:
class Klassenname < Elternklasse
def initialize (Übergabevariablen)
Anweisungen
end
end

Objekte dazu mit

NeuesObjekt = Klassenname.new(Parameter) oder mit
NeuesObjekt = Existierendes Objekt (das kann dann beispielsweise eine Zahl oder eine Zeichenkette sein); oder mit
NeuesObjekt = ExistierendesObjekt. modifizierendeMethode (hier wird dann eine Methode auf das Objekt angewandt)

Methoden von Klassen definiert man (s.o.) mit

def Methodenname
Anweisungen
end

Eine Besonderheit von Ruby ist der Aufruf von Methoden. Dieser erfolgt mittels der Struktur Objekt.Methode (Parameter). Man beachte den Punkt, der sich als stets wiederholendes Element überall in Ruby findet. Man kann alle Methoden (wenn sie zu einem Objekt passen, d.h. in der Objektklasse definiert sind) so aufrufen.

Flusstrukturen sind die üblichen if...else...end und while...do Strukturen.

Das Konzept der Objektorientierung kann in Ruby sehr weit getrieben werden. Obwohl beispielsweise Iterationen (Schleifendurchlauf mit verschiedenen, angegebenen Werten) mit For Schleifen durchgeführt werden können,steht ein alternativer Ansatz zur Verfügung, der Methodenaufrufe verwendet:
"abc".each_byte{lokalevariable machwasmitlokalevariable} setzt jedes Byte aus der Liste abc in lokalevariable ein und vollzieht die Anweisungen in machwasmitlokalevariable

Weitere Varianten für solche Iterationen sind zB each_line, each_value (bei Hashs), times, upto


Ausserdem gibt es noch Anweisungsblöcke und Module (Sammlungen von Klassen), die beide der besseren Strukturierung der Programmierarbeit dienen.

Besonders gut scheint Ruby für Stringbearbeitung geeignet zu sein, da es "regular expressions" kann.

Man braucht keine Semikolons oder Zeilentrenner und Kommentare beginnen mit # und enden am Zeilenende.

Natürlich hat Ruby noch eine Reihe weiterer Strukturen, die der Programmierung dienen, aber dies soll ja keine Einführung in Ruby sein. Eine sehr gute Einführung findet sich hier.

Ruby scheint auf jeden Fall unheimlich orthogonal zu sein, d.h. die Zahl der Denkmuster, in denen man denken muss, ist sehr klein, was den Lernaufwand natürlich verringert. Variablen? Vergesst es, in Ruby gibts nur Objekte. Also, wenn man z.B. test = -3 definiert, sieht das "test" zwar aus wie eine Variable, aber ist ein Objekt. Beweis: wenn man "test.abs" eingibt, wird "3" zurückgegeben; d.h. die Methode "abs" (Absolutwert) wird am Objekt test ausgeführt.

Noch ein Beispiel für die konsistente Verwendung des objektorientierten Ansatzes in Ruby gefällig? Ruby ermöglicht die Verwendung von Erweiterungsmodulen, beispielsweise Math für mathematische Funktionen. Dieses Modul kann "konventionell" über
include Math
verwende Methoden etc

eingesetzt werden. Es besteht jedoch auch die Möglichkeit, in konsistenter Manier Methoden aus diesem Modul mit
Math.methode ()
aufzurufen!

Ruby ist ursprünglich für POSIX-Systeme (UNIX, Linux, VMS etc.) entwickelt worden, es gibt jedoch auch Versionen für Windows und Ergänzungen für X-Windows mit TK. Also eine Sprache für viele Plattformen.

Entwickler vor! Ich würde gerne Eure Meinung zu Ruby haben!

Kommentare

Das Problem ist ein anderes...

Von: Stephan | Datum: 17.04.2003 | #1
Hi,

ich habe vor über 20 Jahren mit einer PDP-11 angefangen, damals gab es reichlich gute Programmierer, mit super Ideen und hoher Bereitschaft, aber kaum eine vernünftige Programmiersprache.

Heute empfinde ich dieses Verhältnis als umgekehrt. Es gibt einen Mangel an Programmierern, einen Mangel an guten Ideen und einen Mangel an Bereitschaft, aber wahrlich keinen Mangel an Programmiersprachen.

Grüße, Stephan

... don't take your love to town...

Von: roser | Datum: 17.04.2003 | #2
... jetzt mal ernst, stephan hat da schon recht. Allerdings bin ich auch Jahre aus der Programmierei raus und versuche im Moment mit den DevTools da wieder rein zu kommen und das ist ein ganz schön schwieriger Weg, auch mal was deutsches zu finden (würde gern Objectiv-C lernen).

jaja

Von: Max | Datum: 17.04.2003 | #3
Die Zeit läuft den Leuten davon, schade, es gibt überall so viel Potenzial, es wird aber nicht genutzt.

Sagt einer, der keine Programmiersprache beherrscht....;-))

Äquivalent für Perl -> CamelBones

Von: Hanno | Datum: 17.04.2003 | #4
Eine OpenSource "Perl to Cocoa bridge" gibt es auch für Perl. Diese heißt CamelBones und ermöglicht es, mit Cocoa GUIs für PERL-Programme zu schreiben (letzlich also PERL und Cocoa resp. objective C zu mischen).
Angeblich hat auch Apple eine (unfertige) "Cocoa to Perl bridge", gibt diese aber nicht heraus. Das ist angeblich auch der Grund, warum sich die Herausgabe des O'Reilly-Buchs "Programming Cocoa-Applications with Perl" verzögert.

Gibt's auch für Python ;-)

Von: Sören Kuklau | Datum: 17.04.2003 | #5
http://pyobjc.sourceforge.net/

@Sören

Von: Hanno | Datum: 18.04.2003 | #6
Danke für den Tip!

Ich bin begeistert :-))

Von: iMob | Datum: 25.04.2003 | #7
Habe mich jetzt 2 Tage mit der Sprache auseinandergesetzt und bin einfach nur begeistert. Schade finde ich die schwache Resonanz auf diesen Artikel. Würde mich gern mit anderen Programmierern austauschen, gibt es ein deutschsprachiges Forum für Ruby?