Lektion 2 - Wir malen ein Haus ... 1

Erstellt von Frithjof Sat, 24 Mar 2007 07:57:00 GMT

Wir gehen wieder zur Windows Kommandozeile und legen mit Vim eine neue Datei für unser nächstes Rubyprogramm an:


C:\entwicklung>vim lektion_02.rb

Vergiss nicht die i-Taste zu drücken, damit Vim in den Einfüge-Modus wechselt bevor du anfängst folgendes Programm einzugeben (natürlich ohne die Zeilennummern am Anfang!):


  01 # lektion_02.rb
  02 
  03 require 'rubykids'
  04 
  05 schreibe_leer(2)
  06 schreibe " /^\\ " 
  07 schreibe " |.|  " 
  08 schreibe " |_|  " 
  09 schreibe_leer

Den geraden senkrechten Strich bekommst du übrigens mit der Taste links neben der Y-Taste. Drücke vorher aber die Taste ALT-Gr (rechts neben der langen Leertaste) und halte diese fest.

Speichere das Programm im Vim indem du zunächst mit der ESC-Taste zurück in den Command-Modus wechselst und dann einen Doppelpunkt gefolgt von einem x, also :x eingibst.

Zurück auf der Kommandozeile startest du dein neues Programm wie üblich mit


C:\entwicklung>ruby lektion_02.rb

So sieht die Ausgabe des Programmes dann aus:

Was ist neu?

Am Programm lektion_02.rb sollten dir mindestens 4 Dinge auffallen, die neu sind. Hast du sie entdeckt? Schauen wir sie uns gemeinsam an. Damit wir beide wissen, wovon ich spreche, habe ich diesmal die Zeilennummer mit angegeben.

  1. Was bedeutet in Zeile 1: # lektion_02.rb? Stelle dir vor, du schreibst ein schönes Programm und denkst dir dabei ganz schwierige Sachen aus. Du fährst in Urlaub und erst nach 3 Wochen kannst du dich wieder mit Ruby beschäftigen. Du schaust dir dein letztes Programm an und fängst an herum zu rätseln, was du dir dabei alles gedacht hast. Für diesen Zweck kannst du direkt im Rubyprogramm deine Gedanken festhalten, ohne, dass Ruby sie als Befehle für sich deutet. Du schreibst deine Gedanken einfach als Kommentar mitten ins Programm. Mit dem Zeichen # beginnt dein Kommentar. Immer wenn Ruby dieses Zeichen liest, überspringt Ruby alles, was danach in derselben Zeile steht und macht einfach mit der nächsten Zeile weiter. Das Zeichen # muss nicht in der ersten Spalte der Zeile stehen. Es kann auch nach (d.h. rechts von) normalem Rubycode stehen.
  2. Was bedeutet in Zeile 5: schreibe_leer(2)? Der Befehl schreibe_leer macht nichts weiter, als eine Leerzeile auszugeben. Eine Leerzeile ist wie der Name schon sagt eine Zeile, in der nichts steht. Dadurch kann man aber etwas Platz in der Ausgabe schaffen, damit es übersichtlicher wird.
  3. Das ist aber nur ein Teil der Erklärung. An dem Befehl hängt noch etwas ungewöhnliches dran: (2). Was bedeutet das? Rufst du einen Befehl von Ruby auf, kannst du bei bestimmten Befehlen noch einiges an Zusatzinformation mitgeben, damit der Befehl etwas genauer weiß, was du genau von ihm gemacht haben möchtest. In diesem Fall kannst du dem schreibe_leer Befehl noch mitgeben, wie oft er eine Leerzeile ausgeben soll. Wir haben ihm hier gesagt, er soll genau 2 Leerzeilen ausgeben. Mit den Klammern, die wir um die 2 gelegt haben, grenzen wir diese Zusatzinformation von dem eigentlichen Befehl etwas ab. Dadurch wird das Programm leichter lesbar. Manchmal kann man die Klammern auch weglassen und stattdessen die Zusatzinformation durch ein oder mehrere Leerzeichen vom eigentlichen Befehl abgrenzen. Du hättest also auch schreiben können:
    
    schreibe_leer 2 
    
    
    Wir werden aber bis auf weiteres immer die Klammern verwenden! Nun fehlt noch eine Besonderheit. Hast du sie auch noch entdeckt?
  4. In Zeile 6 geben wir das Dach von dem Haus aus. Wir verwenden dazu einen nach rechts geneigten Strich (im englischen heißt er übrigens slash oder auch forward slash), den du auf der Taste mit der Ziffer 7 oberhalb der obersten Buchstabenreihe findest. Um ihn einzugeben, musst du allerdings die Shift Taste gedrückt halten. Das ist bei allen Tasten notwendig, über die zwei verschiedene Zeichen eingegeben werden können und du dich für das oberste der beiden Zeichen interessierst. Gut, das mit dem slash ist also gar nicht so schwer. Warum müssen wir aber für die rechte Dachseite den nach links geneigten Strich (englisch heißt er – na rate mal! – ja genau back slash) zweimal hinschreiben? Der Backslash hat in einer Zeichenkette eine besondere Bedeutung. Das wir eine Zeichenkette ausgeben möchten sagen wir Ruby ja dadurch, dass wir den Text, den wir ausgegeben haben möchten mit Anführungszeichen einrahmen. Was aber, wenn wir innerhalb der Zeichenkette auch ein Anführungszeichen ausgeben möchten? Stelle dir vor, wir möchten, dass Ruby auf der Kommandozeile folgenden Text ausgibt:
    
    Peter sagt: "Ich verstehe überhaupt nichts mehr!" 
    
    
    Wie würdest du das Rubyprogramm dazu schreiben? Erste Idee:
    
      schreibe "Peter sagt: "Ich verstehe überhaupt nichts mehr!"" 
    
    
    Das geht garantiert schief. Versuche es! Ruby meldet einen parse error.

    Das bedeut, Ruby kann das Programm nicht verstehen! Ruby denkt, dass nach dem zweiten Anführungszeichen, das vor dem Ich steht, die Zeichenkette zu Ende sein soll. Und alles was danach kommt, bringt Ruby durcheinander, sodass Ruby mit einer Fehlermeldung abbricht. Zum Glück aber gibt es den Backslash. Stellst du den Backslash vor ein beliebiges Zeichen, bedeutet das für Ruby, dass dieses Zeichen seine eigentliche Bedeutung verliert und Ruby es als Teil der Zeichenkette ausgeben soll:
    
      schreibe "Peter sagt: \"Ich verstehe überhaupt nichts mehr!\"" 
    
    
    Jetzt funktioniert es, weil Ruby erst das allerletzte Anführungszeichen als Ende der Zeichenkette erkennt. Die beiden Anführungszeichen dazwischen gibt Ruby einfach aus. Wir sind etwas von der eigentlichen Frage abgekommen, warum wir den Backslash für unsere rechte Dachhälfte zweimal verwenden müssen? Kannst du es dir schon denken? Genau, wir wollen den Backslash ausgeben. Das geht aber nicht, weil er ja eine besondere Bedeutung hat. Also müssen wir diese besondere Bedeutung außer Kraft setzen, indem wir – genau – einen zweiten Backslash davor setzen. Klingt kompliziert? Du wirst dich daran gewöhnen. Wir werden später weitere Möglichkeiten kennenlernen, wie wir dieses Problem besser umgehen können.

- Änderungen
22.09.2007, Unicodeproblem mit Umlauten

Trackbacks

Verwenden Sie den folgenden Link zur Rückverlinkung von Ihrer eigenen Seite:
http://www.rubykids.de/trackbacks?month=03&year=2007&article_id=lektion02&day=24

Meine Nachricht

Einen Kommentar hinterlassen

  1. neuer over 4 years later:
    find ich cool!!!
Comments