Neu: Das englische Ruby on Rails 4.0 Buch.

2.3. Hello World

Ein einfaches Ruby-Programm hello-world.rb besteht aus folgender Zeile:
puts 'Hello World!'
Öffnen Sie mit Ihrem Lieblingseditor eine neue Datei namens hello-world.rb und fügen Sie die obige Zeile in diese Datei ein. Dann können Sie dieses Ruby-Programm wie folgt auf der Kommandozeile ausführen:
sw@debian:~/sandbox$ ruby hello-world.rb 
Hello World!
sw@debian:~/sandbox$ 
Eine Programmzeile in einem Ruby-Programm muss nicht durch ein Semikolon beendet werden. Der Ruby-Interpreter ist sogar so intelligent, zu erkennen, wenn eine Programmzeile wegen der besseren Lesbarkeit in zwei oder mehr Zeilen aufgeteilt wird. Ich erspare Ihnen jetzt die entsprechenden Beispiele und erwähne es nur, damit Sie später nicht sagen/denken Geht das denn so?
Einrücken von Code ist ebenfalls nicht notwendig. Allerdings erleichtert das die Lesbarkeit ungemein!

puts und print

Wer im Internet nach Beispielen zu Ruby sucht, findet zwei typische Möglichkeiten, Texte auszugeben:
  • puts
    Gibt einen String aus, gefolgt von einem Zeilenvorschub.
  • print
    Gibt einen String aus (ohne Zeilenvorschub). Sollte der String selber einen Zeilenvorschub enthalten, so wird dieser normal ausgegeben.
Beispielprogramm (eine Erweiterung des Programms hello-world.rb):
puts 'Hello World!'
puts
puts '------------'
print 'Hello World!'
print
puts '------------'
Die dazugehörige Bildschirmausgabe:
sw@debian:~/sandbox$ ruby hello-world.rb 
Hello World!

------------
Hello World!------------
sw@debian:~/sandbox$ 

Kommentare

Ein Kommentar in einem Ruby-Programm wird mit einem #-Zeichen eingeleitet und von einem Zeilenvorschub beendet. Als Beispiel erweitere ich das obige hello-world.rb um einen Kommentar:
# Programm zum Anzeigen von "Hello World!"
# by Stefan Wintermeyer

puts 'Hello World!'
Ein Kommentar kann auch nach einer Programmzeile stehen:
# Programm zum Anzeigen von "Hello World!"
# by Stefan Wintermeyer

puts 'Hello World!'  # Ausgabe
Ein #-Zeichen innerhalb von Strings in Anführungszeichen wird nicht als Anfang eines Kommentars behandelt. Beispielprogramm:
# Beispielprogramm
# by Stefan Wintermeyer

puts 'Hello World!'
puts '############'
puts
puts '1#2#3#4#5#6#'  # Kommentar dazu
Die Bildschirmausgabe dazu:
sw@debian:~/sandbox$ ruby hello-world.rb 
Hello World!
############

1#2#3#4#5#6#
sw@debian:~/sandbox$ 

Hilfe per ri

Man hat ja beim Programmieren nicht immer ein Ruby-Buch zur Hand. Aber daran haben die Ruby-Entwickler gedacht und mit dem Programm ri eine eigene Hilfe eingebaut (natürlich nur, wenn Sie diese auch mit installiert haben). ri steht für Ruby Index.
Jetzt haben wir eine typische Henne-Ei-Situation. Wie kann ich Ihnen die Hilfe zu Ruby erklären, wenn wir gerade erst mit Ruby anfangen? Ich greife also voraus und zeige Ihnen, wie Sie Informationen zur Klasse String suchen können:
sw@debian:~/sandbox$ ri String
= String < Object

------------------------------------------------------------------------------
= Includes:
Comparable (from ruby site)

(from ruby site)
------------------------------------------------------------------------------
A String object holds and manipulates an arbitrary sequence of bytes,
typically representing characters. String objects may be created using
String::new or as literals.

Because of aliasing issues, users of strings should be aware of the methods
that modify the contents of a String object.  Typically, methods with names
ending in ``!'' modify their receiver, while those without a ``!'' return a
new String.  However, there are exceptions, such as String#[]=.


Rake extension methods for String. 

[...]
Suchen wir jetzt Informationen zu einer bestimmten Methode (Henne-Ei!), dann geht das auch mit ri. Als Beispiel nehmen wir mal gsub. Das ist eine Methode, mit der sich Teile in einem String austauschen lassen (immer wieder praktisch).
sw@debian:~/sandbox$ ri String.gsub
= String.gsub

(from ruby site)
------------------------------------------------------------------------------
  str.gsub(pattern, replacement)       -> new_str
  str.gsub(pattern, hash)              -> new_str
  str.gsub(pattern) {|match| block }   -> new_str
  str.gsub(pattern)                    -> enumerator

------------------------------------------------------------------------------

Returns a copy of str with the all occurrences of
pattern substituted for the second argument. The
pattern is typically a Regexp; if given as a String, any regular
expression metacharacters it contains will be interpreted literally, e.g.
'\\\d' will match a backlash followed by 'd', instead of a digit.

If replacement is a String it will be substituted for
the matched text. It may contain back-references to the pattern's capture
groups of the form \\\d, where d is a group number, or \\\k<n>, where n is
a group name. If it is a double-quoted string, both back-references must be
preceded by an additional backslash. However, within
replacement the special match variables, such as &$,
will not refer to the current match.

If the second argument is a Hash, and the matched text is one of its keys, the
corresponding value is the replacement string.

In the block form, the current match string is passed in as a parameter, and
variables such as $1, $2, $`, $&, and $' will be set appropriately. The value
returned by the block will be substituted for the match on each call.

The result inherits any tainting in the original string or any supplied
replacement string.

When neither a block nor a second argument is supplied, an Enumerator is
returned.

  "hello".gsub(/[aeiou]/, '*')                  #=> "h*ll*"
  "hello".gsub(/([aeiou])/, '<\1>')             #=> "h<e>ll<o>"
  "hello".gsub(/./) {|s| s.ord.to_s + ' '}      #=> "104 101 108 108 111 "
  "hello".gsub(/(?<foo>[aeiou])/, '{\k<foo>}')  #=> "h{e}ll{o}"
  'hello'.gsub(/[eo]/, 'e' => 3, 'o' => '*')    #=> "h3ll*"
Das Programm ri gibt die Ausgabe immer in dem von der Shell definierten Pager-Programm aus (z. B. less). Sie können aber auch mit dem Schalter -T alles direkt auf STDOUT ausgeben. Im Buch werde ich beide Varianten benutzen.

Autor

Stefan Wintermeyer