04. Alles vermischen

Wir haben ein paar verschiedene Arten von Objekten gesehen (Zahlen und Buchstaben), und wir haben Variablen erstellt, um auf sie zu zeigen; als Nächstes wollen wir, dass sie alle gut miteinander spielen.

Wir haben gesehen, dass wenn wir möchten, dass ein Programm 25 ausgibt, der folgende Code nicht funktionieren würde, weil man Zahlen und Strings nicht addieren kann:

var1 = 2
var2 = '5'

puts var1 + var2

Ein Teil des Problems ist, dass Ihr Computer nicht weiß, ob Sie 7 (2 + 5) oder 25 ('2' + '5') erhalten wollten.

Bevor wir sie zusammenzählen können, brauchen wir eine Möglichkeit, die String-Version von var1 oder die Integer-Version von var2 zu erhalten.

Konvertierungen

Um die String-Version eines Objekts zu erhalten, schreiben wir einfach .to_s dahinter:

var1 = 2
var2 = '5'

puts var1.to_s + var2
25

Ebenso gibt .to_i die Integer-Version eines Objekts und .to_f die Float-Version. Schauen wir uns genauer an, was diese drei Methoden tun (und was nicht):

var1 = 2
var2 = '5'

puts var1.to_s + var2
puts var1 + var2.to_i
25
7

Beachten Sie, dass var1 auch nach dem Abrufen der String-Version von var1 durch Aufrufen von .to_s immer auf 2 zeigte und niemals auf '2'. Solange wir var1 nicht explizit neu zuweisen (was ein =-Zeichen erfordert), wird es für die Lebensdauer des Programms auf 2 zeigen.

Versuchen wir nun einige interessantere (und einige einfach seltsame) Konvertierungen:

puts '15'.to_f
puts '99.999'.to_f
puts '99.999'.to_i
puts ''
puts '5 ist meine Lieblingszahl!'.to_i
puts 'Wer hat dich nach 5 gefragt?'.to_i
puts 'Deine Mama.'.to_f
puts ''
puts 'saitig'.to_s
puts 3.to_i
15.0
99.999
99

5
0
0.0

saitig
3

Also gab es dort wahrscheinlich einige Überraschungen. Die erste ist ziemlich Standard und ergibt 15.0. Danach haben wir den String '99.999' in einen Float und in einen Integer konvertiert. Der Float tat, was wir erwarteten; der Integer wurde wie immer abgerundet.

Als Nächstes hatten wir einige Beispiele für... ungewöhnliche Strings, die in Zahlen konvertiert wurden. .to_i ignoriert das Erste, was es nicht versteht, und den Rest des Strings ab diesem Punkt. Also wurde das erste in 5 konvertiert, aber die anderen, da sie mit Buchstaben begannen, wurden vollständig ignoriert... also wählt der Computer einfach Null.

Schließlich haben wir gesehen, dass unsere letzten beiden Konvertierungen überhaupt nichts bewirkt haben, genau wie wir es erwarten würden.

Ein weiterer Blick auf puts

Es gibt etwas Seltsames an unserer Lieblingsmethode... Schauen Sie sich das an:

puts 20
puts 20.to_s
puts '20'
20
20
20

Warum geben diese drei alle dasselbe aus? Nun, die letzten beiden sollten es, da 20.to_s '20' ist. Aber was ist mit dem ersten, dem Integer 20? Was bedeutet es überhaupt, den Integer 20 zu schreiben? Wenn Sie eine 2 und dann eine 0 auf ein Stück Papier schreiben, schreiben Sie einen String, keinen Integer. Der Integer 20 ist die Anzahl der Finger und Zehen, die ich habe; es ist nicht eine 2 gefolgt von einer 0.

Nun, hier ist das große Geheimnis hinter unserem Freund puts: Bevor puts versucht, ein Objekt auszuschreiben, verwendet es .to_s, um die String-Version dieses Objekts zu erhalten. Tatsächlich steht das s in puts für string; puts bedeutet wirklich put string.

Das mag jetzt nicht allzu aufregend erscheinen, aber es gibt viele, viele Arten von Objekten in Ruby (Sie werden sogar lernen, wie Sie Ihre eigenen erstellen!), und es ist gut zu wissen, was passieren wird, wenn Sie versuchen, ein wirklich seltsames Objekt mit puts auszugeben, wie ein Bild Ihrer Großmutter oder eine Musikdatei oder so etwas. Aber das kommt später...

In der Zwischenzeit haben wir noch ein paar Methoden für Sie, und sie ermöglichen es uns, alle möglichen lustigen Programme zu schreiben...

Die Methoden gets und chomp

Wenn puts put string bedeutet, können Sie sicher erraten, was gets bedeutet (get string). Und so wie puts immer Strings ausspuckt, wird gets nur Strings abrufen. Und woher bekommt es sie?

Von Ihnen! Nun, von Ihrer Tastatur. Da Ihre Tastatur nur Strings erzeugt, funktioniert das wunderbar. Was tatsächlich passiert, ist, dass gets einfach dort sitzt und liest, was Sie eingeben, bis Sie die Eingabetaste drücken. Probieren wir es aus:

puts gets
Ist hier ein Echo?
Ist hier ein Echo?

Natürlich wird alles, was Sie eingeben, einfach an Sie zurückgegeben. Führen Sie es ein paar Mal aus und versuchen Sie, verschiedene Dinge einzugeben.

Jetzt können wir interaktive Programme erstellen! Geben Sie in diesem Ihren Namen ein und es wird Sie begrüßen:

puts 'Hallo, und wie heißt du?'
name = gets
puts 'Dein Name ist ' + name + '?  Was für ein schöner Name!'
puts 'Freut mich, dich kennenzulernen, ' + name + '.  :)'

Iih! Ich habe es gerade ausgeführt – ich habe meinen Namen eingegeben – und das ist passiert:

Hallo, und wie heißt du?
Chris
Dein Name ist Chris
?  Was für ein schöner Name!
Freut mich, dich kennenzulernen, Chris
.  :)

Hmmm... es sieht so aus, als ob gets, als ich die Buchstaben C, h, r, i, s tippte und dann die Eingabetaste drückte, alle Buchstaben meines Namens und die Eingabetaste bekommen hat! Glücklicherweise gibt es eine Methode genau für diese Art von Dingen: chomp. Es entfernt alle Eingabetasten, die am Ende Ihres Strings hängen. Versuchen wir dieses Programm noch einmal, aber mit chomp, um uns zu helfen:

puts 'Hallo, und wie heißt du?'
name = gets.chomp
puts 'Dein Name ist ' + name + '?  Was für ein schöner Name!'
puts 'Freut mich, dich kennenzulernen, ' + name + '.  :)'
Hallo, und wie heißt du?
Chris
Dein Name ist Chris?  Was für ein schöner Name!
Freut mich, dich kennenzulernen, Chris.  :)

Viel besser! Beachten Sie, dass name auf gets.chomp zeigt, wir müssen nicht name.chomp sagen; name wurde bereits "gekaut" (chomped).

Ein paar Dinge zum Ausprobieren

  • Schreiben Sie ein Programm, das nach dem Vornamen einer Person fragt, dann nach dem zweiten Vornamen und dann nach dem Nachnamen. Schließlich sollte es die Person mit ihrem vollen Namen begrüßen.
  • Schreiben Sie ein Programm, das nach der Lieblingszahl einer Person fragt. Lassen Sie Ihr Programm eins zur Zahl addieren und schlagen Sie das Ergebnis als eine größere und bessere Lieblingszahl vor. (Machen Sie es taktvoll).

Sobald Sie diese beiden Programme (und alle anderen, die Sie ausprobieren möchten) beendet haben, lassen Sie uns einige weitere Methoden (und etwas mehr über sie) lernen.