わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Rubyスクリプトの読み方

何らかの事情で,Rubyスクリプトを読んで理解しないといけなくなった人のためのメモです.目標はカバー率70%.

  • オブジェクト指向
    • クラスの中の「@名前」はインスタンス変数(Javaのフィールドに相当),「名前()」はメソッド.あまり出てこないけど「@@名前」はクラス変数(Javaのstatic宣言された変数に相当).
    • クラスの中で「def メソッド名(...) ... end」とあれば,「変数 = クラス名.new(...)」でインスタンスを作ったあと,「変数.メソッド名(...)」で呼び出せる.new() という名前のメソッドは定義しないが,initialize() がほぼ同じ役割を担う.メソッド定義・呼び出しのいずれにおいても,括弧を省略でき,引数がないとき積極的に省略される.
    • クラスの中で「def self.メソッド名(...) ... end」とあれば,インスタンスを作ることなく,「クラス名.メソッド名(...)」で呼び出せる.
    • メソッド名の末尾に,「?」「!」のいずれかが書かれているものがある.
      • 「?」で終わるメソッドは真偽値(true,falseのいずれか)を返す.
      • 「!」は,その呼び出しによってインスタンスの中身が変わることを意味する.多くの場合,「!」の付かないメソッド名も合わせて定義され,こちらは元のインスタンスは保持される.
    • 「class クラス名 ... end」を同一のクラス名に対して複数に分けて書くことができる.組み込みの(自作でない)クラスにメソッドを追加するとき,よく行われる.
    • 真偽判定について,偽とは false または nil,真はそれ以外.0 も "" も真.
    • '...' と "..." の違いは,C よりも,PerlPHP のそれに似ている."..." の中で「#{...}」とあれば,中の式を評価した結果に置き換えられる.
    • 「変数[値]」は,配列のアクセスの可能性も,ハッシュ(連想配列)のアクセスの可能性もある.
    • 「a <=> b」は,C の「strcmp(a, b)」の任意オブジェクト版.
    • 「大文字で始まる単語 === 変数名」は,変数の保持する値が,左辺のクラス(またはそのサブクラス)のインスタンスならば true となる.Java の instanceof 演算子に相当.
    • 「{キー1 => 値1, キー2 => 値2, ...}」はハッシュ(連想配列)の式である.この式を変数に代入させ,「変数[キー1]」と書けば値1が取り出せる.
    • 「:abc」は固定文字列.通常の文字列とクラスが異なり(Symbol.一方 "abc" や 'abc' は String),どこに「:abc」と書いても同一インスタンスになる(文字列ではこれは保証されない).
    • 呼び出し時に「メソッド名(引数並び) { ... }」または「メソッド名(引数並び) do ... end」とあれば,ブロック付きメソッドである.この「{」や「do」の直後に,「|...|」と書いて,そのブロックに限定された変数を使用することもある.その変数にどんな値が渡るかは,メソッドの定義による.ブロックの中で,ブロックの外で定義されている変数やメソッドにもアクセスできる.
  • ActiveRecord
    • ActiveRecordを用いると,「class クラス名 < ActiveRecord::Base」と「end」で,Rubyのクラス(インスタンス)とデータベースのテーブル(レコードあるいはタプル)が対応づけられる.
      • クラス名をテーブル名に変換するには,「語頭を小文字」「途中の大文字は,"_" のあとに小文字」「複数化」とする.例: LineItem → line_items*1
      • テーブル名をクラス名に変換するには,「単数化」「途中の "_" を取り除いて直後を大文字」「語頭を大文字」とする.例: line_items → LineItem
  • リファレンス
    • doc.okkez.net.Static HTMLの「1.8.7」か「1.9.1」がおすすめ.