工藤探偵事務所

Resarch and Investigation

ルビー3分クッキング 第二回『文字列のつくり方』の巻

kudo-shunsaku2008-03-25


3分間で覚える Ruby のトピックスです。
でも、本家同様に実際には10分程度掛かります。

大事なのは小さな積み重ねと継続する才能ですね。

第二回は、「文字列のつくり方」の巻です。

文字列は、ダブル・クォーテーションやシングル・クォーテーションで囲むことにより、文字列とすることが出来ます。

それら文字列は「String」クラスのオブジェクトとして扱われます。また通常クラスのインスタンスを作成する場合は、「new」というクラス・メソッドを呼びます。勿論、この方法で文字列を作成することも出来ます。

(いきなりクラスとかインスタンスとかメソッドとか連呼してますが、また機会があれば別途簡単にご説明するかもしれません。そんな用語があるんだなぁ程度で宜しくどうぞ。)


ではそれぞれの方法で文字列を作成してみます。
ファイル名は、"strings.rb" などとして下さい。

# ダブル・クォーテーションで囲んだ文字列
double_q = "Hop!"

# シングル・クォーテーションで囲んだ文字列
single_q = 'Step!'

# クラスのインスタンスとして明示した文字列
string_instance = String.new("Jump!")

puts double_q, single_q, string_instance

# 標準出力に印字します。
puts double_helloworld, single_helloworld, string_helloworld

実行時、コンソール画面。

C:\rubycode\3minutes2cooking>ruby strings.rb
Hop!
Step!
Jump!

C:\rubycode\3minutes2cooking>

今回はそれぞれの文字列を生成した後に、変数に入れてから標準出力に印字して確かめました。変数とは様々なインスタンスを指し示す札の様なものです。今回はそれぞれの文字列(Stringのインスタンス)を変数が指し示しています。


次に先ほどの3つの文字列から一つの文字列を作ってみます。
色々な方法が用意されていますが、一番簡単そうなのは文字列を足し算すると連結した結果を返してくれるようになっています。

先ほどのソースコードに追加してみます。

# 文字列を足し算で連結して1つの文字列にする。
steps = double_q + single_q + string_instance

puts steps

実行時、コンソール画面。

C:\rubycode\3minutes2cooking>ruby strings.rb
Hop!
Step!
Jump!
Hop!Step!Jump!

C:\rubycode\3minutes2cooking>

文字列の操作には様々な方法(メソッド)が用意されています。それらは別の機会にご紹介します。

文字列を作る際にダブル・クォーテーションとシングル・クォーテーションではちょっとだけ機能が違います。ダブル・クォーテーションだと「式展開」というのが使えます。

先ほどのソースコードに追加してみます。

# 文字列を足し算で連結して1つの文字列にする。
# 式展開します。
puts "Stage is #{double_q} #{single_q} #{string_instance}"

# 式展開しません。
puts 'Stage is #{double_q} #{single_q} #{string_instance}'

実行時、コンソール画面。

C:\rubycode\3minutes2cooking>ruby strings.rb
Hop!
Step!
Jump!
Hop!Step!Jump!
Stage is Hop! Step! Jump!
Stage is #{double_q} #{single_q} #{string_instance}

C:\rubycode\3minutes2cooking>

ダブル・クォーテーションの場合だと、「#{変数}」と表記すると変数が指している値を表示してくれます。これが「式展開」というものです。

最後に序でにもう一つ。

ダブル・クォーテーションとシングル・クォーテーション自体を文字列に含みたい場合には、どのようにするか?です。一つはその意味を持つ字をバックスラッシュ 「\」 でエスケープ(打ち消す)する方法と、もう一つは文字列全体を別の方法で囲むという便利な方法があります。


両方やってみましょう。先ほどのソースコードに追加してみます。

# エスケープします。
puts "Spaghetti Neapolitan is not from \"Italy\"."
puts 'Spaghetti Neapolitan was invented by \'Japanese\'.'

# 簡単に作る方法です。
neapolitan = %!Spaghetti Neapolitan is not from "Italy", it was invented by 'Japanese'.!
puts neapolitan

amatriciana = %q(Spaghetti alla amatriciana is from "Italy", is not 'Japanese' food.)
puts amatriciana

実行時、コンソール画面。

Hop!
Step!
Jump!
Hop!Step!Jump!
Stage is Hop! Step! Jump!
Stage is #{double_q} #{single_q} #{string_instance}
Spaghetti Neapolitan is not from "Italy".
Spaghetti Neapolitan was invented by 'Japanese'.
Spaghetti Neapolitan is not from "Italy", it was invented by 'Japanese'.
Spaghetti alla amatriciana is from "Italy", is not 'Japanese' food.

C:\rubycode\3minutes2cooking>

文字列全体を囲む方法は大きく2種類あり、 「%!STRING!」(もしくは「%Q!STRING!」)で囲むとダブル・クォーテーションと同等で「%q!STRING!」 で囲んだ場合にはシングル・クォーテーションと同様の扱いになるそうです。尚、「%!」 の 「!」(エクスクラメーション・マーク、感嘆符)は違う記号でも使えます。

必要なそれぞれの状況によって使い分け出来そうです。

「たったら♫たったら♫たらたら♬たらこー♩」

お後が宜しいようで。次回をお楽しみに。