プログラミングの基本といえば、変数の型や数値、文字列、日付の扱いでしょう。現に、プログラミング言語の参考書は、大概これらが最初に出てきます。
本記事では、それらの中でも特に重要な文字列について解説します。
とても基本的なことなので、掲載されているソースコードを自分で何度も実行して、確実に理解してください。
Rubyでの文字列の宣言
文字列型変数の宣言
では、プログラミング習得の王道に従い、さっそく文字列型の変数を宣言してみましょう。
・・・といいたいところですが、Rubyでは基本的に変数の型を宣言する必要はありません。最初に登場したときに代入する値の型に従います。つまり、こんな感じです。
「変数 = 何らかの文字列」で文字列型の変数になります。
str1 = "abcdefg" str2 = "文字列"
初回登場時に文字列を代入するだけで、それが宣言+初期化となるわけです。
文字列とは、Stringクラスのオブジェクト
先ほどは文字列型の変数を宣言、と書きました。しかしこの表現は正確ではありません。
Rubyでは、すべてがオブジェクトです。
文字列も、文字列型の変数というより「Stringクラスのオブジェクト」という表現が正しいのです。さらにいうと、文字列型の変数というより文字列の作り方、といったほうが正しいです。
他言語でおなじみのnewを使って、以下のようなこともできます。
str = String.new str = "a" puts str
[実行結果]
a
最初にStringクラスのオブジェクトを生成し、そこにaという文字列を入れました。このように書くと、Stringクラスのオブジェクトであることがよく分かります。
本解説では、初心者のうちは文字列型と理解して問題ないので、あえて文字列型としました。これから学習を始める方は、ぜひその理解ができるまでがんばってくださいね!
文字列を表示する各種方法
文字列を表示する方法を順に解説していきます。
” と “” のちがい
改行を特殊文字(制御文字ともいいます)で表すと\nです。文字列中にこの\nが入っていると、改行して表示されます。この\nを使って、”(シングルクウォーテーション2つ)と””(ダブルクウォーテーション2つ)のちがいを見てみましょう。
str1 = 'abide\nfghi' str2 = "abide\nfghi" puts str1 puts str2
[実行結果]
abide\nfghi abide fghi
”で囲った方は、改行していません。一方、””で囲った方は、改行しました。つまり、”は特殊文字の制御を無効化してしまいます。“”では、その中の特殊文字の制御は有効です。
Linuxコマンドの実行結果を表示
UnixやLinux、Mac OSをお使いの方はぜひお試しください。
バッククォート「`」(シングルクウォーテーション「’」とは逆向きなので注意)で囲うと、コマンド実行した結果を出力できます。
Unix系OSで、カレントディレクトリのファイルリストを出力するコマンドは「ls -al」です。カレントディレクトリに4803.rbというファイルが1つだけある状態で、以下のコマンドを保存し、実行します。
puts `ls -al`
[実行結果]
$ ruby 4803.rb total 8 drwxr-xr-x 3 staff 102 9 29 04:17 . drwxr-xr-x 11 staff 374 9 29 04:16 .. -rw-r--r-- 1 staff 358 9 30 11:45 4803.rb
コマンドラインで「ls -al」を実行したときと同じ内容が表示されました。
式展開
例えば生徒名をstu_nameとして「こんにちは、◯◯さん」と表示させたいとします。文字列の連結を駆使してがんばるのもひとつですが、もっと簡単にできる方法を解説します。
式展開という方法です。
stu_name = "生徒" puts "こんにちは、#{stu_name}さん"
[実行結果]
こんにちは、生徒さん
埋め込むイメージで文字列を生成できて、非常に便利です。
文字列表示メソッド puts,p,printf
文字列を表示させるためのメソッドをいくつか解説します。
puts(プットエス)メソッド
putsは、変数内の内容を表示します。
str = "abcdefg" num = 12345 puts str puts num
[実行結果]
abcdefg 12345
いまひとつピンとこないですが、これが配列ならこうなります。
array = ["a","b","c","d",1,2,3] puts array
[実行結果]
a b c d 1 2 3
要素を出力するたびに改行しました。
結果を見て、文字列と数値のちがいが分からないことにお気づきでしょうか?また、単純に文字列を出力しつつ改行したのか、配列を出力したのかが分かりません。
次に解説するpコマンドと比較すれば、putsの特徴はよくわかります。
pメソッド
同じことをpコマンドで実行しましょう。
str = "abcdefg" num = 12345 p str p num
[実行結果]
"abcdefg" 12345
文字列なら””で囲われて、数値ならそのままで表示されています。つまり、pコマンドは型のちがいまで表示します。
では配列ならどうでしょうか?
array = ["a","b","c","d",1,2,3] p array
[実行結果]
["a", "b", "c", "d", 1, 2, 3]
配列でもやはり型まで表示されました。また、配列っぽく表示されたのが分かります。
printfメソッド
実行結果を指定した書式で表示したいときは、printfを使います。例えば文字列の長さにかかわらず固定の長さ(固定長)で表示したいなら、printfは便利です。
str = "defg" printf("abc%10s\n",str)
[実行結果]
abc defg
defgという文字列を%10sの指定をすれば、固定長10桁で表示されます。桁数が足りないので、右側に余白が出力されました。ちなみに%10sを%-10sにして「printf(“abc%-10s\n”,str)」とすると左側に余白が入ります。
まとめ
本記事では、文字列の基本と表示を解説しました。
今後、文字列の比較や置換、文字列の標準ライブラリなどなど、より複雑なことを解説していきます。今回は解説が多めですが、次回からもっと手を動かす内容になります。
それまでに、本記事の内容をじっくり読んで理解しておいてくださいね!