今回はRubyの文字列について学んでいきます
文字列ってなんですか?
まずはそこからですよね。ゆっくり丁寧に説明しますので、安心して聞いてくださいね
Rubyの学習①:文字列って何?
文字列とは、二つの”(double-quotation)あるいは二つの'(single-quotation)で囲まれた間のことを指します。
正式には文字列リテラルといいますが、「文字列」で大丈夫ですよ
“abcde”
‘abcde’
“2494”
‘4390’
“文字列です。”
‘文字列です’
あれ? こんな感じで普通に日本語を使っても大丈夫なの?
そうなんです。文字列の中では、日本語……全角のひらがなや漢字が使えるんですね。ただ、文字列の外側の’ ” は、必ず半角にしてください。また、半角カナは使わないほうがいいですね
Rubyの学習②:改行のルール
Rubyでは、改行したいときに”\n”を入れます。
“\”はキーボード上では右シフトキーのすぐ左、あるいは上から二列目右から二文字目のBACK SPACEすぐ左にあります。
「円マーク」が表示されていますが、押すと”\”が出てきます。内部的にはこの二つのキーは同じ文字を表します。歴史的経緯があってキートップ上は別の表示になっています。
「\」なんて普段は使わないよー
そうですね。でも、Rubyでは結構使うので覚えておいてくださいね。ちなみに「バックスラッシュ」と言います
バックスラッシュ! へぇー なんかかっこいい!
バックスラッシュの使い方
では、実際にバックスラッシュを使用して改行させてみましょうか
‘abcde\n’
なるほど。「abcdeの後は改行ですよ」と指示を出すんですね
そうですね。下のような形で、途中に”\n”を入れてもOKです
‘abc\nde’
では、もう少し長めのプログラムを書いてみましょう。
print(“abcde\n”)
puts ‘abcde’
puts “2494”
puts ‘4390’
p “文字列です。\n”
p ‘文字列です’
print ‘abc\nde’
print “abc\nde\n”
このように表示されれば成功です。
表示されたけど……なんかおかしくないですか?
うん、おかしい。バックスラッシュを使ってないのに、勝手に改行されてるよー
二人ともいいところに気付きましたね。では、そのおかしいと感じた部分を次の項で説明しましょう
print,puts,p それぞれの違い
実はさっきのプログラミングでは、printの他にputsやpも使いました。その3つは同じような使い方をするのですが、少しずつルールが違うんですよ。具体的なルールをまとめましたので、確認してみてください
- printは自動的に改行されない
- putsとpは自動で改行される
- ‘(シングルクォート)の中の’\n’はそのまま’\n’と表示される
- pではダブルクォートとシングルクォートと’\n’がそのまま表示される
これらのルールに照らし合わせると、さっきのプログラミングの結果が正しかったことがわかると思いますよ
ルールの後出しはずるいよー
そうですね。それはすみませんでした(笑)。でも、二人とも「なんかおかしい」と気付けたのは、成長している証拠です
褒められたので許します
print、puts、pに慣れていこう!
print、puts、pとシングルクォート、ダブルクォートと\nとカッコの振る舞いについていろいろ試してみてください。
プログラムの中での改行は、下図のように反映されます。
一行目の、
# coding utf-8
は無くても動きます。気にしないでください。
Rubyでの#はコメントアウトの意味です。つまり、#が現れたところから行末まで何も書かなかったものと解釈されます。
また、文字列の間に半角スペースを入れると、そのまま文字列が連結されて出力されます。
ダブルクォートとシングルクォートがたくさん現れる場合
さて、ここまでの学習内容だけだと、文字列の中にダブルクォートとシングルクォートがたくさん現れてしまうケースもあります
そうなの?
たとえば、下のような画面ですね
うわー これは見づらいですね。間違いやすそうです
そうなんです。だから、もう少し画面をスッキリさせるために、%Qと%qを使います。これは覚えておいたほうがいいですよ
%Qと%qで画面をスッキリさせよう
%Qの直後に記号(英数字とスペースはのぞく)を書くと、次にその記号が現れるまで、そのまま表示されます。
%Q(文字列)
%Q{文字列}
%Q[文字列]
%Q<文字列>
このように書きます。Qの直後の文字を文字列の中に書きたい場合にはバックスラッシュを前置します。
Rubyの学習③:式展開
続いては、式展開について学んでいきましょう
式展開ってなんですか?
Rubyでは、print文の中に式を入れることができるんですよ。たとえば、こんな感じです
print(“税込み額は#{100+10}円です。\n”)
このように#{}の中に数式を書くとprint時に計算してくれます。
おおー これはもしかして、ものすごく便利な機能なのでは!
整数だけではなく、少数も使えるのですが、それは後の章で書きます。
Rubyの学習④:文字列の繰り返し
続いては、文字列の繰り返しです。これは同じ文字列を繰り返したいときに、使えるものです。たとえば……
puts “いいね!”*3
と書くと、
このように出力されます。
直前の”いいね!”という文字列を三回繰り返したわけですね。
同じ文字列を何回もじかに書くと、何回かいたかわかりにくくなりますが、この書き方で書けば何回繰り返したかが明確です。
文字列に関するいろいろなエラー
文字列に関しては、いろいろなエラーが起きがちです。
なので、最後に文字列で起こりやすいエラーをまとめておきますね。
エラーの具体例①
test4e.rb:1:syntax error, unexpected ‘def’, expecting end-of-input
print “abc”def”ghi”
和訳してみます。
test4e.rb:1:文法エラー:予期しない’def’が現れました、入力の終わりが期待されています。
これは、
print “abc”def”ghi”
と書いた場合のエラーメッセージです。通常、print文の中に、入れて良いダブルクォートは二つだけです。それ以上だとエラーになります。
その前に\を入れれば出力中にダブルクォートを表示できます。
print “abc\”def\”ghi”
逆もあります。
エラーの具体例②
test4e.rb:1:syntax error, unexpected ‘def’, expecting end-of-input
print ‘abc’def’ghi’
和訳してみます。
test4e.rb:1:文法エラー:予期しない’def’が現れました。入力の終わりが期待されています。
これは、
print ‘abc’def’ghi’
と書いた場合のエラーメッセージです。print文の中では、シングルクォートは二つだけです。三つ以上あるとエラーになります。その前に\を入れれば出力中にシングルクォートが表示できます。
エラーの具体例③
print ‘abc\’def\’ghi’
エラーメッセージは出ないのですが、想定した出力が出ない例です。
シングルクォートの中では’\n’がそのまま表示されてしまいます。ダブルクォートにすると期待する出力が出ます。
pだけは相変わらずだめですね。
エラーの具体例④
文字列はダブルクォートかシングルクォートで囲わないとエラーになります。
string.rb:2:in ”: undefined local variable or method ‘文字列です。’ for main:Object (NameError)
エラーメッセージを訳してみます。
string.rb:2:の中:mainに対して予期しない’文字列です’というローカル変数かメソッドが出現しました。
expression.rb:1: syntax error, unexpected backslash, expecting end-of-input
print 2+3\n
エラーメッセージを和訳してみます。
expression.rb:1:文法エラー:予期しないバックスラッシュが現れました、入力の終わりが期待されています。
となります。
この例を、文字列として表示したいのなら、
print “2+3\n”
puts “2+3”
p “2+3”
計算結果を表示したいのであれば、
print 2+3
print “\n”
puts 2+3
p 2+3
と書かなければいけません。
まとめ:実際にプログラミングして確認していこう
今回の講義はここまでにします。お二人とも、自分でコードを書いて何度も確認してみてください。そうすれば、少しずつ慣れて自分のものになっていきますよ
ちょっと難しかったけど、成長した気がしますね
私は確実に成長しました! 次、行ってみよー!