Ruby入門4:Rubyで文字列の扱い方

Ruby入門
CANIT先生
CANIT先生

今回はRubyの文字列について学んでいきます

牛山くん
牛山くん

文字列ってなんですか?

CANIT先生
CANIT先生

まずはそこからですよね。ゆっくり丁寧に説明しますので、安心して聞いてくださいね

Rubyの学習①:文字列って何?

女性 勉強

文字列とは、二つの”(double-quotation)あるいは二つの'(single-quotation)で囲まれた間のことを指します。

CANIT先生
CANIT先生

正式には文字列リテラルといいますが、「文字列」で大丈夫ですよ

“abcde”
‘abcde’
“2494”
‘4390’
“文字列です。”
‘文字列です’

猫田さん
猫田さん

あれ? こんな感じで普通に日本語を使っても大丈夫なの?

CANIT先生
CANIT先生

そうなんです。文字列の中では、日本語……全角のひらがなや漢字が使えるんですね。ただ、文字列の外側の’ ” は、必ず半角にしてください。また、半角カナは使わないほうがいいですね

Rubyの学習②:改行のルール

Rubyでは、改行したいときに”\n”を入れます。

“\”はキーボード上では右シフトキーのすぐ左、あるいは上から二列目右から二文字目のBACK SPACEすぐ左にあります。

「円マーク」が表示されていますが、押すと”\”が出てきます。内部的にはこの二つのキーは同じ文字を表します。歴史的経緯があってキートップ上は別の表示になっています。

猫田さん
猫田さん

「\」なんて普段は使わないよー

CANIT先生
CANIT先生

そうですね。でも、Rubyでは結構使うので覚えておいてくださいね。ちなみに「バックスラッシュ」と言います

猫田さん
猫田さん

バックスラッシュ! へぇー なんかかっこいい!

バックスラッシュの使い方

CANIT先生
CANIT先生

では、実際にバックスラッシュを使用して改行させてみましょうか

‘abcde\n’

牛山くん
牛山くん

なるほど。「abcdeの後は改行ですよ」と指示を出すんですね

CANIT先生
CANIT先生

そうですね。下のような形で、途中に”\n”を入れてもOKです

‘abc\nde’

では、もう少し長めのプログラムを書いてみましょう。

print(“abcde\n”)
puts ‘abcde’
puts “2494”
puts ‘4390’
p “文字列です。\n”
p ‘文字列です’
print ‘abc\nde’
print “abc\nde\n”

このように表示されれば成功です。

牛山くん
牛山くん

表示されたけど……なんかおかしくないですか?

猫田さん
猫田さん

うん、おかしい。バックスラッシュを使ってないのに、勝手に改行されてるよー

CANIT先生
CANIT先生

二人ともいいところに気付きましたね。では、そのおかしいと感じた部分を次の項で説明しましょう

print,puts,p それぞれの違い

パソコン
CANIT先生
CANIT先生

実はさっきのプログラミングでは、printの他にputsやpも使いました。その3つは同じような使い方をするのですが、少しずつルールが違うんですよ。具体的なルールをまとめましたので、確認してみてください

  • printは自動的に改行されない
  • putsとpは自動で改行される
  • ‘(シングルクォート)の中の’\n’はそのまま’\n’と表示される
  • pではダブルクォートとシングルクォートと’\n’がそのまま表示される
CANIT先生
CANIT先生

これらのルールに照らし合わせると、さっきのプログラミングの結果が正しかったことがわかると思いますよ

猫田さん
猫田さん

ルールの後出しはずるいよー

CANIT先生
CANIT先生

そうですね。それはすみませんでした(笑)。でも、二人とも「なんかおかしい」と気付けたのは、成長している証拠です

猫田さん
猫田さん

褒められたので許します

print、puts、pに慣れていこう!

パソコン

print、puts、pとシングルクォート、ダブルクォートと\nとカッコの振る舞いについていろいろ試してみてください。

プログラムの中での改行は、下図のように反映されます。

一行目の、

# coding utf-8

は無くても動きます。気にしないでください。

Rubyでの#はコメントアウトの意味です。つまり、#が現れたところから行末まで何も書かなかったものと解釈されます。

また、文字列の間に半角スペースを入れると、そのまま文字列が連結されて出力されます。

ダブルクォートとシングルクォートがたくさん現れる場合

ビジネス
CANIT先生
CANIT先生

さて、ここまでの学習内容だけだと、文字列の中にダブルクォートとシングルクォートがたくさん現れてしまうケースもあります

猫田さん
猫田さん

そうなの?

CANIT先生
CANIT先生

たとえば、下のような画面ですね

牛山くん
牛山くん

うわー これは見づらいですね。間違いやすそうです

CANIT先生
CANIT先生

そうなんです。だから、もう少し画面をスッキリさせるために、%Qと%qを使います。これは覚えておいたほうがいいですよ

%Qと%qで画面をスッキリさせよう

%Qの直後に記号(英数字とスペースはのぞく)を書くと、次にその記号が現れるまで、そのまま表示されます。

%Q(文字列)
%Q{文字列}
%Q[文字列]
%Q<文字列>

このように書きます。Qの直後の文字を文字列の中に書きたい場合にはバックスラッシュを前置します。

Rubyの学習③:式展開

パソコン
CANIT先生
CANIT先生

続いては、式展開について学んでいきましょう

牛山くん
牛山くん

式展開ってなんですか?

CANIT先生
CANIT先生

Rubyでは、print文の中に式を入れることができるんですよ。たとえば、こんな感じです

print(“税込み額は#{100+10}円です。\n”)

このように#{}の中に数式を書くとprint時に計算してくれます。

猫田さん
猫田さん

おおー これはもしかして、ものすごく便利な機能なのでは!

整数だけではなく、少数も使えるのですが、それは後の章で書きます。

Rubyの学習④:文字列の繰り返し

パソコン
CANIT先生
CANIT先生

続いては、文字列の繰り返しです。これは同じ文字列を繰り返したいときに、使えるものです。たとえば……

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

と書かなければいけません。

まとめ:実際にプログラミングして確認していこう

学生
CANIT先生
CANIT先生

今回の講義はここまでにします。お二人とも、自分でコードを書いて何度も確認してみてください。そうすれば、少しずつ慣れて自分のものになっていきますよ

牛山くん
牛山くん

ちょっと難しかったけど、成長した気がしますね

猫田さん
猫田さん

私は確実に成長しました! 次、行ってみよー!

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
Ruby入門
【この記事を書いた人】
CANIT 先生

あらゆるプログラミング言語をあやつるフリーの凄腕講師。温和な性格で「わかるまで教えます」がモットー。たまに時間ができると動物の仲間達に、プログラミングを教えることもある。現在の生徒は牛山くんと猫田さん。

CANIT
タイトルとURLをコピーしました