Ruby in zwanzig Minuten
Was wäre, wenn wir „Hallo“ oft sagen wollen, ohne uns die Finger wund zu tippen? Wir müssen eine Methode definieren!
irb(main):010:0> def hi
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> :hiDer Code def hi beginnt die Definition der Methode. Er sagt Ruby, dass wir eine Methode definieren, dass ihr Name hi ist. Die nächste Zeile ist der Körper der Methode, dieselbe Zeile, die wir schon früher gesehen haben: puts "Hello World". Schließlich sagt die letzte Zeile end Ruby, dass wir mit der Definition der Methode fertig sind. Rubys Antwort => :hi sagt uns, dass es weiß, dass wir mit der Definition der Methode fertig sind. Diese Antwort könnte für Ruby 2.0 und frühere Versionen => nil sein. Aber das ist hier nicht wichtig, also machen wir weiter.
Das kurze, repetitive Leben einer Methode
Versuchen wir nun, diese Methode ein paar Mal auszuführen
irb(main):013:0> hi
Hello World!
=> nil
irb(main):014:0> hi()
Hello World!
=> nilNun, das war einfach. Das Aufrufen einer Methode in Ruby ist so einfach wie die Nennung ihres Namens gegenüber Ruby. Wenn die Methode keine Parameter annimmt, ist das alles, was Sie brauchen. Sie können leere Klammern hinzufügen, wenn Sie möchten, aber sie sind nicht notwendig.
Was wäre, wenn wir einer bestimmten Person „Hallo“ sagen wollen und nicht der ganzen Welt? Definieren Sie einfach hi so um, dass sie einen Namen als Parameter annimmt.
irb(main):015:0> def hi(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
=> :hi
irb(main):018:0> hi("Matz")
Hello Matz!
=> nilAlso funktioniert es ... aber nehmen wir uns eine Sekunde Zeit, um zu sehen, was hier vor sich geht.
Plätze in einem String reservieren
Was ist das #{name}? Das ist Rubys Art, etwas in einen String einzufügen. Das Bit in den geschweiften Klammern wird in einen String umgewandelt (wenn es nicht bereits einer ist) und dann an dieser Stelle in den äußeren String eingesetzt. Sie können dies auch verwenden, um sicherzustellen, dass der Name einer Person ordnungsgemäß großgeschrieben wird
irb(main):019:0> def hi(name = "World")
irb(main):020:1> puts "Hello #{name.capitalize}!"
irb(main):021:1> end
=> :hi
irb(main):022:0> hi "chris"
Hello Chris!
=> nil
irb(main):023:0> hi
Hello World!
=> nilEin paar andere Tricks, die man hier sehen kann. Einer ist, dass wir die Methode wieder ohne Klammern aufrufen. Wenn offensichtlich ist, was Sie tun, sind die Klammern optional. Der andere Trick ist der Standardparameter World. Was das bedeutet ist: „Wenn der Name nicht angegeben wird, verwende den Standardnamen "World".“
Entwicklung zum Begrüßer
Was wäre, wenn wir einen echten Begrüßer um uns hätten, einen, der sich Ihren Namen merkt, Sie willkommen heißt und Sie immer mit Respekt behandelt? Dazu könnten Sie ein Objekt verwenden. Erstellen wir eine Klasse „Greeter“.
irb(main):024:0> class Greeter
irb(main):025:1> def initialize(name = "World")
irb(main):026:2> @name = name
irb(main):027:2> end
irb(main):028:1> def say_hi
irb(main):029:2> puts "Hi #{@name}!"
irb(main):030:2> end
irb(main):031:1> def say_bye
irb(main):032:2> puts "Bye #{@name}, come back soon."
irb(main):033:2> end
irb(main):034:1> end
=> :say_byeDas neue Schlüsselwort hier ist class. Dies definiert eine neue Klasse namens Greeter und eine Reihe von Methoden für diese Klasse. Beachten Sie auch @name. Dies ist eine Instanzvariable und ist für alle Methoden der Klasse verfügbar. Wie Sie sehen können, wird sie von say_hi und say_bye verwendet.
Wie bringen wir also diese Greeter-Klasse in Gang? Erstellen Sie ein Objekt.