プログラミング言語Ruby 2章 Rubyプログラムの構造と実行

コメント

#文字からその行の終わりまでコメント。
# この行はすべてコメント
x = "#これは文字列"    # この部分はコメント
y = /#これは正規表現/  # この部分もコメント
埋め込みドキュメント

行頭が=beginになっている行から始まり、行頭が=endになっている行まで。

=begin 以下のコードは問題あり。要フィックス!
  この部分のコードはコメントアウトされる
=end
ドキュメント用コメント

特別な形式でコメントを書くことでAPIドキュメントを組み込むことができる。
通常各行の先頭が#になっている複数行コメントの形式で書かれるが、=begin rdoc を先頭とする埋め込みドキュメントとして書くこともできる。

  • rdoc
    • rdocツールの詳細については lib/rdoc/README

リテラル

Rubyソースコードに直接現れる値(数値、文字列、正規表現)。

1        # 整数リテラル
1.0      # 浮動小数点数リテラル
'one'    # 文字列リテラル
"two"    # 別の種類の文字列リテラル
/three/  # 正規表現リテラル

識別子

変数、メソッド、クラスなどの名前のこと。
複数の語からなる識別子で定数でないものには、アンダースコアを使ったlike_thisのような名前をつける習慣になっている。
複数の語からなる定数の識別子は、LIKE_THIS(とかLikeThis)とする。

識別子の中の記号類
$files     # グローバル変数
@data      # インスタンス変数
@@counter  # クラス変数
empty?     # 論理値を返すメソッド(述語メソッド)
sort!      # その場で書き換えるバージョンのsort
timeout=   # 代入演算子によって起動されるメソッド  x.timeout = y 的な

キーワード

__LINE__        case       ensure   not      then
__ENCODING__    class      false    or       true
__FILE__        def        for      redo     undef
BEGIN           defined?   if       rescue   unless
END             do         in       retry    until
alias           else       module   return   when
and             elsif      next     self     while
begin           end        nil      super    yield
break

行頭に含まれている場合に限り特別なキーワード

=begin   =end   __END___

これらのキーワードは予約語として扱ったほうが無難。

Rubyの重要な機能は、Kernel、Module、Class、Objectクラスのメソッドとして実装されているので、次の識別子も予約語として扱ったほうがよい。

# 文やキーワードのように見えるメソッド
at_exit         catch     private     require
attr            include   proc        throw
attr_accessor   lambda    protected
attr_reader     load      public
attr_writer     loop      raise
# よく使われるグローバル関数
Array          chomp!   gsub!       select
Float          chop     iterator?   sleep
Integer        chop!    load        split
String         eval     open        sprintf
URI            exec     p           srand
abort          exit     print       sub
autoload       exit!    printf      sub!
autoload?      fail     putc        syscall
binding        fork     puts        system
block_given?   format   rand        test
callcc         getc     readline    trap
caller         gets     readlines   warn
chomp          gsub     scan
# よく使われるオブジェクトメソッド
allocate   freeze         kind_off?     superclass
clone      frozen?        method        taint
display    hash           methods       tainted?
dup        id             new           to_a
enum_for   inherited      nil?          to_enum
eql?       inspect        object_id     to_s
equal?     instance_of?   respond_to?   untaint
extend     is_a?          send

空白

トークンを区切るために使われる。スペース、タブ、改行。
通常、文末は改行によって表され、「;」は省略するのが習慣。

スペースとメソッド呼び出し
f(3+2)+1   # メソッドfに引数5を渡してから結果に1を加える
f (3+2)+1  # メソッド名の後ろにスペースが入っているのでRubyはメソッド呼び出しのまわりのかっこが省略されていると判断。f(6) といっしょ。か?

空白によってコードの意味がはっきりしなくなるのを防ぐ方法

  • メソッド名と開きかっこの間にスペースを入れない
  • メソッドの第1引数が開きかっこで始まる場合は、必ずメソッド呼び出しのかっこを使うようにする
    • 例えば、f((3+2)+1)と書く
  • Rubyインタープリタを起動するときに必ず-wオプションを指定して、上のルールのどちらかを忘れたときに警告が表示されるようにする

構文構造

  • Rubyの構文の基本単位は
    • 値を表現するリテラル(数値、文字列)、true、false、nil、selfなどのキーワード、変数参照、評価結果など
1          # 値が直接表現された式
x          # これも式
x = 1      # 代入式
x = x + 1  # 2つの演算を含む式

式をRubyのキーワードで結合すると、条件分岐のif文やコードの反復実行のwhile文などの文が作られる。

while x < 10 do  # この式がtrueである間は、
  print x        # この式を実行せよ
  x = x + 1      # そして、この文を実行せよ
end              # 繰り返しの末尾
クラス
相互作用するように設計されたメソッドのグループをまとめる
モジュール
関連するクラスとクラスを持たないメソッドをまとめる
ブロック構造

イテレータメソッドに付属し、渡されるコードの塊

  3.times { print "Ruby! " }

中かっことその中のコード({ print "Ruby! " })は、3.timesというイテレータメソッド呼び出しに付属するブロック。
do end キーワードで囲むこともできる。
普通、1行の場合は中かっこ、複数行の場合は do end で書く。

ファイル構造

Unix系OSRubyの実行方法を示すshebangシバン)コメントが付いている場合は1行目に書かないとダメ。
codingコメントを含む場合は1行目か2行目(shebangがある場合)。

#! /usr/bin/ruby -w      (shebangコメント)
# -*- coding: utf-8 -*-  (codingコメント)