#4 世界に挨拶したのなら

ハローワールドの舞台裏

さて、はじめてのプログラミングを体験したわけですが、いかがでしたか?

まるで呪文のようですか?

それではちょっと内容をみていきましょう。

このプログラムは2つの要素からなります。

アクション (動詞)

puts

というのはRubyに対して求めているアクションです。 「putsしてください」と言っているわけです。Rubyではこれをメソッドと言います。 同じようなものは色々と出てきますが、JavaScriptでは関数と言いますし、Perlではサブルーチンと言います。 言語によってはコマンドとかステートメントなんて言ったりもします。

いずれにせよアクションの名前です。これを受けてRubyはputsしようとします。

ではputsとはなにかというと、「標準出力に文字列を書き出す」というアクションになります1

標準出力ってなんだ!?と思うかもしれませんね。 これは、なにもしなければ端末、つまりWindowsであればコマンドプロンプトだったり、Linuxだったらターミナルエミュレータだったりします。

「なにもしなければ」の言葉通り、標準出力というのはそれだけではありません。 色々便利に使えたりもします。

引数 (目的語)

つづいて

"Hello, World!"

というのは文字列リテラルといいます。

文字列というのは、その言葉通りに文字の並びです。 「文字」という概念と「文字列」という概念は違いがあります。「文字」を扱うことは抽象度の高い言語では稀ですから、たとえ1文字であってもこの連載で通常扱うのは「文字列」です。 これについては1文字どころか、たとえ文字の全くない0文字であっても文字列だったりもします。

文字列としては

Hello, world!

という文字列なのですが、今回は""で囲っています。

Rubyでは、むき出しの文字はアクションや変数(名詞)などの名前であるとみなします。 これは一般的な解釈です。

ですから、「これは特別な意味を持った名前じゃなくて、そういう文字列なんです」ということを示す必要があります。 そのために""(ダブルクォート)で囲っています。

文字列であることを表す方法はダブルクォートに限らないのですが、それらの方法のひとつがダブルクォートです。

むき出しであっても、「一番最初にくるものはアクションで、二番目からは全部文字列」というルールを設けてしまえばこのようにダブルクォートで囲ったりする必要はありません。 実際、BashやZShellなどはそのようなルールになっているため、特にダブルクォートで囲む必要はありません。2

これだけだと簡単そうに思えますが、もうちょっと複雑なことをしようとそうともいえなくなってきます。


  1. ここで言っているのはKernel.putsの話であって、IO#putsの話ではありません。

  2. ただし、本当は,のあとにスペースがあるため、このままでは3要素になってしまい、本当は囲む必要があります。また、ZShellではどこに登場したとしてもむき出しの!は特別な意味になってしまうため、やっぱり囲む必要があります。

Fullsized Image