yunomuのブログ

趣味のこと

実際のところ20分ではじまるかもしれないけどよくわからないよねRuby

まえがき

 プログラミングをはじめてみようと思ってとりあえず日本語の解説が多くて名前もいい感じだからRubyを選んでチュートリアルをひととおりやってみようと思って「20分ではじめるRuby」をひととおりやってみたみなさん。実際のところはインストールして最初にirbで"Hello World"とか言った段階で20分なんてとうに過ぎてしまったのではないでしょうか。このシリーズでは、「20分ではじめるRuby」をとりあえず最後まで読んでみたという人を対象にしています。まずはわからなくてもいいのでひととおりあそんでみてください。

www.ruby-lang.org

 ここでは、「20分ではじめるRuby」をもとに、それぞれの項目で何をやっていたのかを、Rubyのドキュメントを見ながら解説しようと思います。Rubyのバージョンは2.7.0で、マニュアルはこれを使います。

docs.ruby-lang.org

 マニュアルは、Ruby公式サイト(https://www.ruby-lang.org/ja/)の「ドキュメント」のリンクから「RubyリファレンスマニュアルRuby 2.7.0版」のようなリンクを辿って見ることができます。今後やっていく上で一番大事な情報なのでよく覚えておいてください。プログラミングの作業のほとんどはこのマニュアルを辿ることと言っても過言ではないでしょう。マニュアルを自由に読むことができ、やりたいことを見つけられるようになったとき、その人は初心者を越えてエースになっていることでしょう。

 ではまず「20分ではじめるRuby」の1ページ目からいきます。

putsについて

 "Hello World"は飛ばして次、putsが出てくるところ。

irb(main) > puts "Hello World"

 ここでputsは「Rubyで何かを出力する基本的なコマンドです」と説明されています。これが何なのか、マニュアルを見ていきます。

 リファレンスマニュアルのページを開いてください。Rubyの基本的な機能については、リファレンスマニュアルの中の「組み込みライブラリ(Builtin libraries)」のページに書かれています。組み込みライブラリのページを開くと要約にこんなことが書いてあります。

要約
組み込みライブラリは Ruby 本体に組み込まれているライブラリです。このライブラリに含まれるクラスやモジュールは、 require を書かなくても使うことができます。

 要するに、ここに書いてある機能は基本機能なのでいきなりirbやファイルに書いても使うことができますということです。

 その中でも実はputsみたいなものはもう少し特殊で、このページの中の「モジュール」の節の「Kernel」というところに書かれています。ちなみにKernelというのは核のことで、つまり基本機能の中の基本機能ということです。

 Kernelのページを開いて見てみましょう。「目次」の「モジュール関数」の部分を見ると、この中にputsもありますね。基本的にこの中にリストアップされている関数(機能)は、putsと同じようにirbやファイルの中でいつでも使うことができます。

 例えばこの中に、puts以外にもいくつか文字を画面に表示する機能があります。pとかprintあたりが一例です。以下のように、putsと書いていた部分を置き換えて動かしてみましょう。

irb(main) > puts "Hello World"
irb(main) > print "Hello World"
irb(main) > p "Hello World"

 似たような結果になると思いますが、少しずつ違うところもあったりします。どう違うのか? ということが、つまりこのマニュアルに書かれています。気になったら読んでみてもいいでしょう。わからない単語だらけかもしれませんが、それはまた聞いてくれれば教えます。

 ということで、プログラムを書いていて「この機能は基本機能にあるんじゃないかな?」と思った時はこのKernelのページのことを思いだしてみてください。それぞれの関数(機能)ごとにちょっとしたサンプルコードも書かれているので、このページを上から下までひととおり見てみるというのも、最初の練習にはいいかもしれません。

整数と足し算

 次は、3+2です。足し算やかけ算をしている部分について。これにもマニュアルがあります。整数の足し算です。

 整数の足し算はKernelの基本機能ではなく、「整数」の機能として作られています。整数、つまり英語で言うとIntegerです。Integerというモジュールがあります。組み込みライブラリ(Builtin libraries)のページに戻って、「クラス」の節からIntegerを探してください。

 Integerのページの目次の「インスタンスメソッド」の項目を見てください。足し算(+)、引き算(-)、かけ算(*)、割り算(/)、累乗(**)、絶対値(abs)、比較(<,>,>=,==)など、色々な機能が列挙されています。3+2などと書いた時は、この機能を使って答えを出していました。ここにもそれぞれサンプルコードが書かれているので試してみてもいいかもしれません。整数の機能だけあってほとんどが計算に関するものですが、中にはtimesのように少し雰囲気が違うものもあります。

Mathモジュール

 次。「20分ではじめるRuby」の1ページ目最後に出てくるMathです。

 Mathは、組み込みライブラリ(Builtin libraries)のページのモジュールの節の中にあります。開いてみると、Integerの時と同様に目次に関数が並んでいます。例題に出てきたsqrtもあります。ここには、数学で使うような少し複雑な計算が色々と定義されています。PI(円周率)なんかもここに定義されています(10桁くらいですが)。難しい計算をしたくなったらここを眺めるといいかもしれません。

 そして、お気付きかもしれませんが、例題に出てきたMath.sqrtと似たようなものがIntegerにもあります。Integer.sqrtです。こちらの場合は整数なので、答えも整数になります。小数点以下切り捨てです。見くらべて見ましょう。

irb(main) > Math.sqrt 5
irb(main) > Integer.sqrt 5
irb(main) > Math.sqrt 4
irb(main) > Integer.sqrt 4

クラスとモジュール

 マニュアルを眺めていたら「クラス」と「モジュール」という言葉が出てきていました。組み込みライブラリのページでも節が分かれていました。違いは何なのか。

 大まかに言うと、整数(Integer)や文字列(String)のように、データに関連しているものがクラスの項目に書かれていて、そうじゃないやつ(MathやKernel)がモジュールの項目に書かれています。慣れないうちはまあページ検索で適当に見つけてやればいいでしょう。

おわり

 とりあえず「20分ではじめるRuby」の1ページ目はこれでおわりです。

次回: 「20分ではじめるRuby」解説 2ページ目 - yunomuのブログ