schreib und schreibe oder puts und print 2

Erstellt von Frithjof Sun, 24 Jun 2007 20:30:00 GMT

Das ist der erste reine Theorieartikel. Ich schiebe damit den Start des neuen Blocks an Lektionen noch etwas auf. Wir wollen ab Lektion 11 ein Spiel programmieren. Darauf möchte ich dich mit den folgenden Theorielektionen etwas besser vorbereiten.

In Lektion 7 hatten wir schon ein recht umfangreiches Programm geschrieben. Wir konnten ein Fahrrad auf der Straße vor einer Häuserreihe mit der Tastatur hin und her fahren lassen. Wenn du dir das Programm zur Wiederholung nochmals anschaust, stellst du sicher fest, dass es sich trotz der paar Wochen Abstand immer noch gut lesen lässt.

Das liegt zu einem großen Teil daran, dass wir viele deutsche Befehle und Variablennamen verwenden. Wenn dort der Befehl schreib dach steht, ist klar, was passiert – es wird etwas ausgegeben, was das Dach eines Hauses darstellen soll.

Die deutschen Namen für die Variablen sind sehr okay. Die deutschen Befehle wie schreibe, schreib, lies_ein_zeichen und dergleichen wollen wir aber schrittweise durch die richtigen Rubybefehle ersetzen. Keine Angst, dadurch werden unsere Programme nicht unleserlicher. Im Gegenteil, oft sind die deutschen Begriffe etwas länger und machen den Programmcode etwas zu dicht.

Wie du dir sicher denken kannst, sind die echten Befehle in Ruby hauptsächlich in englischer Sprache, entweder als komplettes Wort oder als Abkürzung. Schauen wir uns also als erstes heute einmal die Befehle für die Ausgabe genauer an.

schreibe oder puts

Mit dem schreibe Befehl können wir Text (Zeichenketten) oder Zahlen ausgeben. Am Ende der Ausgabe wird dabei immer die Zeile abgeschlossen, sodass jede weitere Ausgabe in der Zeile darunter beginnt. Etwa so:


schreibe "Dies ist der Text der Ausgabe" 

Den Befehl schreibe habe ich in der Datei rubykids.rb festgelegt. Der echte Rubybefehl, der dasselbe macht wie schreibe lautet puts. puts steht für die englischen Wörter put string oder put as string oder output as string, was soviel heißt wie gib es als Zeichenkette aus. Du kannst somit überall, wo wir den Befehl schreibe verwendet haben, ihn durch puts ersetzen.

Nach dem Befehl selbst folgt der Text oder die Zahl die ausgegeben werden soll. Folgt stattdessen der Name einer Variablen, dann wird nicht der Name, sondern der Inhalt der Variablen ausgegeben. Mehrere Ausgabeargumente lassen sich durch je ein Komma trennen. puts beginnt dann allerdings hinter jedem Argument einen neue Zeile (schreibe macht das ebenfalls).


puts "Erste Zeile", "Zweite Zeile", 5*3

Die Ausgabe sieht dann so aus:


C:\entwicklung>ruby test.rb
Erste Zeile
Zweite Zeile
15

C:\entwicklung>

schreib oder print

Der Befehl schreib arbeitet fast genauso wie schreibe, allerdings springt er nach der Ausgabe nicht in eine neue Zeile. So wird jede weitere Ausgabe direkt danach angefügt.

Der echte Rubybefehl, der dasselbe macht lautet print (englisch drucken). Auch ihm kannst du mehrere Argumente durch Komma getrennt mitgeben.

Nehmen wir bspw. den obigen Code und ersetzen nur puts durch print dann siehst du den Unterschied:


print "Erste Zeile", "Zweite Zeile", 5*3

Die Ausgabe ist eine einzige Zeile, alle Argumente sind aneinander geklatscht:


C:\entwicklung>ruby test.rb
Erste ZeileZweite Zeile15
C:\entwicklung>

Du kannst aber mit print natürlich auch eine neue Zeile erzeugen. Weißt du noch, wie das komische Sonderzeichen für den Zeilenumbruch war? Wir hatten es in den letzten Lektionen mal verwendet – \n. Wenn wir die beiden ersten Argumente mit dem Newline Zeichen abschließen, dann wird jedes Argument in einer eigenen Zeile ausgegeben, obwohl wir den print Befehl verwenden:


print "Erste Zeile\n", "Zweite Zeile\n", 5*3

Ausgabe:


C:\entwicklung>ruby test.rb
Erste Zeile
Zweite Zeile
15
C:\entwicklung>

Üben mit Peter und Livia

In den Theorieartikeln werden dir Peter und Livia ein paar Aufgaben stellen, die du selbstständig zur weiteren Übung lösen kannst. Wenn du dir eine Lösung erarbeitet hast, kannst du sie gerne als Kommentar hier an den Artikel anfügen - würde mich freuen. Nutze die Möglichkeit zum Kommentar auch, wenn du Fragen hast, oder mit einer Aufgabe nicht weiterkommst.

  1. Livia: Mit dem Body Mass Index kannst du feststellen, ob du mehr Sport treiben solltest oder ob das mit dem Nachschlag beim Essen okay ist. Der Index berechnet sich aus deinem Körpergewicht (in kg) und deiner Körpergröße (in m) nach der Formel: Gewicht / (Größe*Größe). Schreibe ein Rubyprogramm, das für Gewicht und Größe je eine Variable definiert und dann den BMI ausgibt.
  2. Peter: Schreibe ein Rubyprogramm, dass in einer Schleife alle Zahlen von 1 bis 20 ausgibt. Versuche das Programm so zu schreiben, dass die Ausgabe stets in derselben Zeile erfolgt. Die Ausgabe von 2 überschreibt also die vorherige Ausgabe von 1, die Ausgabe von 3 die von 2 usw. Versuche das Programm so zu verändern, dass es nur aus einer einzigen Zeile Rubycode besteht (die Zeile für require ‘rubykids’ zählt natürlich nicht mit).
Lösungen

require 'rubykids'

# 1. Livia
gewicht = 80
groesse = 1.85
bmi = gewicht / (groesse*groesse)
print "Der BMI bei Gewicht ", gewicht, " und Groesse ", groesse, " ist ", bmi

# 2. Peter
1.biszu(20) { |zahl| print "\r", zahl; schlafe_kurz }