目次

2.  文字列(string)

 

さて、ここまででと簡単な計算に関して学んで きました。それでは、文字や単語、文章などはどうでしょう?

プログラムの中の文字の並びを文字列(string) と呼びます。 (横断幕などに印刷された文字が広げられる(strung)のを思い浮かべると 良いでしょう。)コードの中のどの部分が文字列なのかをわかりやすくするため、 ここでは、文字列の色を にしています。
いくつかの文字列の例です。

'Hello.'
'Ruby rocks.'
'5 は私の好きな数です... あなたの好きな数は何ですか?'
'スヌーピーはつま先をぶつけて #%^?&*@! としゃべった。'
'     '
''

このように文字列には、通常のアルファベット文字以外に句読点、数字、 記号、そしてスペースが含まれます。(訳註:日本語の文字も含まれます。) 最後の文字列は中に何も含まれていません。 このような文字列は空文字列 と呼ばれます。

前の章で数字を表示するために、putsを使ってきましたが、 これを文字列に対しても試してみましょう。

puts 'Hello, world!'
puts 'こんにちは'
puts ''
puts 'Good-bye.'
Hello, world!
こんにちは

Good-bye.

うまくいきました。では、いろいろな文字列で試してみてください。

文字列の計算

数に計算を行ったように、文字列に対しても計算が出来ます! まぁ、計算のようなものという感じですが。とにかく文字列を加えることは出来ます。 2つの文字列を加えてputsで、どう表示されるか見てみましょう。

puts 'I like' + 'apple pie.'
I likeapple pie.

おっと。'I like''apple pie.'の間にスペースを入れ忘れてしまいました。 スペースはプログラムの中ではあまり意味を持ちませんが、文字列の中では重要です。 (よく、「コンピュータはあなたのやって欲しい ことを行うのではなくて、やるように 指示された ことだけを行う」といわれますが、これは本当ですね。) それじゃ、再度挑戦です。

puts 'I like ' + 'apple pie.'
puts 'I like' + ' apple pie.'
I like apple pie.
I like apple pie.

今度はうまくいきました。 (このように、どちらの側の文字列にスペースを追加しても結果は同じです。)

さて、文字列を加えることはできるようになりましたが、掛け算はどうでしょう。 (ただし、掛けるのは数ですが。) これを見てください。

puts 'blink ' * 4
batting her eyes

彼女と目があった? 冗談、冗談...。本当はこうです :)

blink blink blink blink 

これは、次のように考えるとわかると思います。7*3というのは、結局 7+7+7と同じ意味ですよね。これから類推して、'moo'*3'moo'+'moo'+'moo'のことを意味しているのです。

12 vs '12'

先に進む前に、数(numbers)数字(digits)の違いについて 理解しておきましょう。 12は数そのものです。しかし'12'は2つの数字からなる文字列です。

いろいろ試してみましょう。

puts  12  +  12
puts '12' + '12'
puts '12  +  12'
24
1212
12  +  12

これはどうでしょう。

puts  2  *  5
puts '2' *  5
puts '2  *  5'
10
22222
2  *  5

ここで挙げた例はどれも素直なものです。しかし、文字列と数字を注意深く混ぜないと....

問題発生

いろいろやってみると、うまくいかない 場合があったのではないでしょうか? ここで、そういう例を挙げてみましょう。

puts '12' + 12
puts '2' * '5'
#<TypeError: can't convert Fixnum into String>

んー、エラーメッセージが出ているようです。 問題は、文字列に数を加えることや、文字列に別の文字列を 掛け合わせたりはできないというところにありそうです。 次のように書けば、これが意味のないことなんだということが 理解できるのではないでしょうか?

puts 'Betty' + 12
puts 'Fred' * 'John'

ほかにも次のことを覚えておくべきでしょう。'pig'*5というコードは 文字列'pig'5回足し合わせるということを意味していて、 プログラム中に書くことができます。しかし、5*'pig'というコードを書く ことはできません 。なぜなら、このコードは5'pig'回(?) 足し合わせるという意味になり、ナンセンスですから。

最後に、You're good!という文字列を出力するプログラムを 書きたいと思ったとします。 普通にやってみましょう。

puts 'You're good!'

さて、このままでは うまく動きませんね。文法エラーが起きてしまいます。 この理由は、コンピュータが'のところで文字列が終わりと思ってしまうからです。 (テキストエディタが、文法による色分け をしてくれるのが便利なわけがこれです。) それでは、どうやってコンピュータにここで文字列が終わりではないことを知らせるのでしょうか。 そのためには、アポストロフィ記号をエスケープ しなければなりません。このように。

puts 'You\'re good!'
You're good!

バックスラッシュ記号(訳註:日本語の端末では円記号に見えます。 以降、読み替えてください。)は、エスケープキャラクタです。 このことを言い換えると、バックスラッシュ記号と他の文字が 並んでいたら、それは新しい文字に翻訳されるということです。 バックスラッシュがエスケープするのはアポストロフィ記号と バックスラッシュ記号それ自身です。(よく考えると、 エスケープ記号はいつもそれ自身でエスケープされなければならない ことがわかると思います。) いくつか例を挙げておきましょう。

puts 'You\'re swell!'
puts '文字列の最後のバックスラッシュ:  \\'
puts 'up\\down'
puts 'up\down'
You're swell!
文字列の最後のバックスラッシュ:  \
up\down
up\down

バックスラッシュ記号は'd'をエスケープせず 、 バックスラッシュ記号自身をエスケープする ので、最後の 2つの文字列は同じものになります。コード上では同じもののようには 見えませんが、コンピュータの中では同じものです。

さて、他に多少疑問があったとしても 読み進めてください。 結局、この時点でこの ページに関するすべての質問に答えることは できませんから。

 

目次