290 likes | 622 Views
Ruby. Einfach programmieren. Agenda des Vortrags. Historie Stamm der Sprache Facts Download Syntax Kontrollstrukturen Datenstrukturen Objektorientierung Anwendungsbereich Tools. Ruby – Historie. Wurzeln in Japan 1993 von Yukihiro Matsumoto entwickelt 1995 veröffentlicht
E N D
Ruby Einfach programmieren
Agenda des Vortrags • Historie • Stamm der Sprache • Facts • Download • Syntax • Kontrollstrukturen • Datenstrukturen • Objektorientierung • Anwendungsbereich • Tools Simon Tiffert
Ruby – Historie • Wurzeln in Japan • 1993 von Yukihiro Matsumoto entwickelt • 1995 veröffentlicht • fortlaufende Entwicklung in Japan • lange Zeit nur japanische Dokumentation • Übersetzung der Dokumentation ins Englische erst zur Jahrtausendwende • in Japan schon verbreiteter als Perl und Python Simon Tiffert
Ruby – Stamm der Sprache • Bisherige Skriptsprachen nicht objektorientiert genug • Smalltalk, Perl, Eiffel, Scheme, CLU, Sather und Lisp • Ruby > (Perl + Smalltalk) / 2 Perl • Reguläre Ausdrücke • Anweisungsmodifier • sehr schnell erlernbar Smalltalk • Alles ist ein Objekt • Closures (Blöcke) • Iteratoren • Late Bindings Simon Tiffert
Ruby - Facts • konsequente Objektorientierung • Menschenorientierung • dynamische Sprache • reguläre Ausdrücke • Operatorenüberladung • Exception-Handling • Garbage Collector • Iteratoren Simon Tiffert
Ruby - Download • Ruby • Linux • Sourcen http://www.ruby-lang.org • Windows • am einfachsten über den Ruby Installer (http://rubyforge.org/projects/rubyinstaller/) • Editoren / IDE • Emacs Plugin • RubyEclipse (http://rubyeclipse.sourceforge.net/) • FreeRIDE … Simon Tiffert
Ruby – Syntax • Kommentarzeichen # • Variablen sind typenlos • kein Semikolon am Zeilenende erforderlich • Blockstruktur durch Schlüsselwörter • Funktionsaufruf ohne Klammern möglich • kein expliziter Rückgabewert Simon Tiffert
Ruby - Variablenscopes • Geltungsbereich der Variabeln wird durch Prefix bestimmt • kein Prefix → lokale Variable (bis Blockende) • $ → globale Variable (Bsp.: $_) • @ → Membervariablen • @@ → Klassenvariablen • Konstanten beginnen mit einem Großbuchstaben Simon Tiffert
Ruby - Kontrollstrukturen • if-Anweisung • case-Anweisung • ähnlich dem switch in anderen Sprachen • mehrere Werte und Wertebereiche erlaubt • Reguläre Ausdrücke erlaubt • kein "fall through" (break nicht nötig) • loop-Endlosschleife • while-Schleife • for-Schleife Simon Tiffert
Ruby - Exceptions • Fehler- und Ausnahmebehandlung • ähnlich dem Mechanismus in Java (try-catch-finally) • in Ruby (begin-rescue-ensure-end) • Fehlerklassen können abgefangen werden und eine gezielte Fehlerbehandlung kann stattfinden • ensure-Teil, der immer durchlaufen wird, z.B. um Dateien bei Lesefehlern zu schließen Simon Tiffert
Ruby – Reguläre Ausdrücke • spezifiert Muster auf Zeichen eines Strings • bekannt aus Perl • Syntax an Perl orientiert • Mächtiges Werkzeug zur Textsuche bzw. Textmanipulation • in Ruby objektorientiert, somit einfacher Zugriff auf die Elemente des Ergebnisses • Klassen RegExp und MatchData Simon Tiffert
Ruby - Arrays • Datenstruktur, die nur Werte speichert • über Index zugänglich • Vielfältige Bearbeitungsmöglichkeiten • über Operatoren auch interessante Möglichkeiten • Mengenoperationen • Operatorenüberladung • Iteratoren ideal zum Durchlaufen von Arrays Simon Tiffert
Ruby - Hashes • Zuordnung von Schlüssel und Wert • über Index oder Schlüssel zugänglich • Schlüssel und Index sind dabei Objekte • Verschiedene Operationen möglich • Durchlaufen mit Iteratoren Simon Tiffert
Ruby - Dateien • Alle normalen Dateioperationen möglich • öffnen • lesen • schreiben • schließen • Auch Operationen auf dem Dateisystem möglich • Verzeichnisse erstellen, löschen, ausgeben Simon Tiffert
Ruby - Objektorientierung • Klassendeklaration und Instantiierung • Deklaration • Attribute • Methoden • Initialisierung • Konstruktor • Zugriffsschutz • public • protected • private Simon Tiffert
Ruby - Objektorientierung • Einfache Vererbung und Mix-Ins • Vererbung ähnlich wie in Java • Mix-Ins • Methoden mit Implementierung • Überladung • Methodenüberladung • Operatorüberladung • Introspection Simon Tiffert
Ruby – Müllentsorgung • Garbage Collector zum Löschen nicht mehr benötigter Objekte • wirkt auf alle Objekte • "Mark and Sweep" - Algorithmus • keine Destruktoren notwendig Simon Tiffert
Ruby - Codeblöcke • Closures (anonyme Blöcke) • anonymer Block besteht aus • Kennwort yield mindestens einmal innerhalb der Funktion • Aufruf der Funktion mit Übergabe eines Blocks • yield innerhalb der Funktion wird dann durch den Block ersetzt Simon Tiffert
Ruby – Tiefere Techniken • Marshalling • Serialisierung in Java • umwandeln eines Objects in einen Bytestream • wichtig, wenn Daten übertragen oder abgespeichert werden sollen • Klasse Marshal (dump, load) • Threads • parallele Ausführung von Codeteilen • Threads.new Simon Tiffert
Ruby - dynamisch im Web • CGI • dynamische Webseiten mittels CGI • Klasse cgi.rb • einfache Auswertung von Formularen • player=Miles • cgi['player'] • fertige Codeblöcke • cgi.textarea • Cookies • Sessions Simon Tiffert
Ruby in HTML • bisher HTML in Ruby • jetzt Ruby in HTML • eruby • Vergleichbar mit JSP oder ASP • spezielle Tags, in denen Code steht • wenig Overhead an Code • ideal für HTML Dokumente mit wenig Code Simon Tiffert
Ruby und C • Ruby durch C erweitern • Warum? • Laufzeitgewinn • Bibliotheken, die schon existieren, werden eingebunden • SWIG • Simplified Wrapper and Interface Generator • erstellt Schnittstelle von C und C++ zu anderen Programmiersprachen Simon Tiffert
Ruby - Anwendungsbereich • Prototyping • einfache Syntax • leicht erlernbar • Textverarbeitung • Reguläre Ausdrücke • Einfache Stringverarbeitung durch Objekte • Cross-Plattform-Programmierung • Für viele Plattformen verfügbar Simon Tiffert
Don't Ruby • Echtzeitanwendungen • keine Echtzeitgarantie • Hochleistungsanwendungen • aufgrund des Interpreters geringere Geschwindigkeit • Sicherheitsanwendungen • nicht zu gebrauchen für z.B. Flugzeugsteuerung oder ähnliche Systeme, da unter anderem keine Typsicherheit Simon Tiffert
RubyDoc • Dokumentationsgenerator ähnlich JavaDoc • liest Informationen aus Quellcode und speziellen Kommentaren, um daraus eine Dokumentation zu generieren • Schlüsselwörter • @author Name • @version Nummer • @param Parameter • @return Rückgabewert Simon Tiffert
RubyDoc - Codebeispiel ## # Diese Datei wurde am … erstellt. # # @author Simon Tiffert # @version 1.0 ## # Eine Klasse, die zur Zeit leer ist # class Klasse ## # A constructor. def initialize ... Simon Tiffert
RubyUnit • Rahmenwerk zum Testen von Funktionen • gleiche Funktionsweise wie JUnit • Zusammenfassung von Suiten • assert Kommandos zum Überprüfen von Anweisungen • Beeinflussung von bestehendem Code kann bei Änderungen überprüft werden • Effizientes Programmieren möglich Simon Tiffert
Vortragsende Fragen? Simon Tiffert