「20分ではじめるRuby」解説 2ページ目
前回: 実際のところ20分ではじまるかもしれないけどよくわからないよねRuby - yunomuのブログ
つづき。「20分ではじめるRuby」の今回は2ページ目についてです。
今回もマニュアルを見ながらいきましょう。
docs.ruby-lang.org
www.ruby-lang.org
メソッド定義
メソッドを定義しましょう。こういう感じのやつです。
def hi(name) puts "Hello #{name}!" end
まず「メソッド」というのは、これまで機能とか関数とか言っていたやつのことです。専門的には少し違いがありますが、Rubyのマニュアル上ではほとんど同じような意味で書かれているので、だいたいメソッドとか関数とか言っておけば通じると思います。前回出てきたputs
やMath.sqrt
や、四則演算の+
や*
なんかもメソッドです。
定義というのは、「書く」くらいの意味です。別に「作る」でもよいです。
メソッド定義のやり方は、前回の組み込みライブラリの話とは違い、リファレンスマニュアルのトップページの「Ruby言語仕様」の節にあります。Rubyの文法の「クラス/メソッドの定義」のところです。その先のページの「メソッド定義」の節で書き方が説明されています。例がいくつかありますが、今回の例に近いのはhello
やfoo
が出てくるやつだと思います。メソッド定義のやりかたを忘れたらこのページに戻ってきましょう。気になる例を自分で書いてみるのもいいかもしれませんが、結構高度なものもあるのでまだよくわからないかもしれません。機会があれば別に説明します。
「Stringに穴を開ける」?
表現が謎ですが、先程のhiメソッドでname
を文字列に埋め込んで"Hello #{name}!"
としていたやつについて。やってみておわかりのとおり、埋め込んでいます。この埋め込みは、文字列の機能だからStringの機能かと思いきや、実は違って、これも「Ruby言語仕様」の中にあります。「リテラル」の項目です。
このように、機能が見つからない時はもしかしたら言語仕様の中にあるかもしれないというのはRubyではよくあるので、「そういうものか」くらいに思っておいてください。
リテラルとは、プログラムの中に書かれた値そのものです。具体的には"Hello World"
という文字列とか、2
とか3
とかの数値とかのことです。例えば文字列の場合、"
や'
で囲むとRubyプログラムの中で使える文字列になります。数字はそのまま書いただけで数値になります。こういうルールや仕組みを「リテラル」と呼びます。
このマニュアルのリテラルのページには、どういう書き方をすると文字列や数値として認識されるのか、とか、例に出てきたような埋め込みの書き方などが書かれています。具体的には、埋め込みは「文字列リテラル」の節の「式展開」の項目に書かれています。
文字列リテラルについては、ちょっと面白いのは式展開の前の項目の「バックスラッシュ記法」です。例えば以下のような文字列を表示したい場合
よっしゃよっしゃ わっしょい
つまり、改行をしたい場合にどうするか。puts
は必ず最後に改行するのでputs
を2回書いてもよいです。
puts "よっしゃよっしゃ" puts "わっしょい"
でもこれをバックスラッシュ記法を使うと1行でも書けます。
puts "よっしゃよっしゃ\nわっしょい"
このように、\n
を書いた部分が改行になります。文字列を"よっしゃよっしゃ\nわっしょい\a"
にすると、表示は変わりませんがなんか「ピ」とか音が鳴るかもしれません。環境によっては鳴らないかも。音はともかく、改行は便利なので覚えておくといいと思います。
変数について
そういえば、前回の「20分ではじめるRuby」1ページ目の最後に変数が出てきていました。こういうやつです。
irb(main) > a = 3 ** 2
計算結果をa
に格納して使い回すことができるやつです。変数は数値や文字列と同じように関数に渡したり(puts a
, hi(a)
)、文字列に埋め込んだり("Hello #{a}"
)できます。
変数については、Ruby言語仕様の「変数と定数」の項目にあります。前回出てきたのはこのページの中の「ローカル変数」というやつです。見てみると「名前は小文字で初めましょう」とか書いてあると思います。ここには主にそういうルールと、あとスコープについて書かれています。スコープというのは、その変数を使うことができる範囲のことです。定義する前に使ってはいけないとか、有効になってない場所でも使えないとか、そういう話です。詳しくはサンプルコードを動かしてみてください。
この「変数と定数」のページでは、他にも色々な種類の変数を扱っています。書き方が変わるとルールやスコープが変わってきます。そのうち出てくるので新しいものを見かけたらまたこのページに戻ってきてもいいでしょう。「20分ではじめる」でもひととおり出ているので、このページのサンプルコードを書いてみるというのもいいかもしれません。
Greeterあたりのこと
ここでclass
が出てきます。最初からやってきて、このあたりでよくわからなくなった人も多いんじゃないでしょうか。実際、クラスを書くという時はプログラムが結構大きくなった時とか大きいものを作ろうとしている時が多いので、覚えてもしばらくはあまり登場機会は無いかもしれません。ただ、それなりのものを作ろうという時や、既存のプログラムを改造する時などには必ず出てくるので、一応やっておいてもいいでしょう。
書き方などは、言語仕様の「クラス/メソッドの定義」のページです。メソッドの時に出てきたページです。結構色々できるんですが、それはまあ追い追い。
ここで@name
というのが出てきますね。これはインスタンス変数といって、これも言語仕様の「変数と定数」のページで出てきます。クラスの中でだけ使える変数です。説明は次のページでちょっとありますね。