これは、私のサイトにあるRubyのコード例を読むための簡単なガイドです。これはRubyの完全なガイドではありません。記事で使用している構文のみを扱います。基本的なオブジェクト指向言語に精通していることを前提としています。

左側の列にはコードの断片が、右側の列にはそのコードの断片群の意味の説明があります。理解できないRubyのコードを見つけたら、左側の列を調べて同様のコードを探してください。

Ruby入門としては、PickAxeが最適な書籍です。オンラインガイドとしては、Why's (poignant) Guideに匹敵するものはありません。

puts "hello world"

コンソールへの出力

文字列は、シングルまたはダブルクォートのどちらかを使用できます(エスケープルールは異なります)。

class ClassName

クラスの宣言

def some_method arg1, arg2
  call_method(arg1)
end

def property= arg1
  @property = arg1
end

メソッドの宣言

メソッドは、グローバル(最上位レベルで定義されている場合)またはクラスのインスタンスメソッドになります。

あいまいさがない場合は、メソッドの定義と呼び出しで括弧は省略できます。

メソッド名には「=」を含めることができます(その場合は`name = aValue`のように使用されます)。名前には「?」を含めることができ、一般的にはブール型のゲッターに使用されます(例:`aSet.include?(aValue)`)。

@field

インスタンス変数。

宣言する必要はありません。最初に使用されたときに定義されます。設定される前にアクセスされた場合はnilを返します。

def self.class_method

クラスメソッドの定義

@@class_variable

クラス変数

$global_variable

グローバル変数

attr_accessor :field1, :field2
attr_reader :field

アクセッサ付きインスタンス変数

ランタイムコード生成を使用して、ゲッター`name`とセッター`name = arg`を定義します。`attr_accessor`は両方とも定義し、`attr_reader`はゲッターのみを定義します。

def initialize

イニシャライザメソッド

このメソッドは、インスタンスを作成するたびに呼び出されます。デフォルトでは、`aClass.new(arg1, arg2)`でオブジェクトを作成します。両方の引数は`initialize`に渡されるため、必要な引数ごとに引数を宣言します。他のクラスメソッドを定義して、他の名前で新しいインスタンスを作成することもできます。

class Subclass < Superclass

継承の宣言

{|arg1, arg2| doSomething(arg1, arg2)}

do |arg1, arg2| 
  doSomething(arg1, arg2)
end

do
  doSomething
end

ブロック

ブロックを定義します。Rubyでは、クロージャをブロックと呼びます。`{}`と`do/end`の2つの構文はほぼ同等です。`{}`形式は通常1行の場合に、`do/end`形式は複数行のブロックに使用されます。

引数をいくつでも取ることができます。クロージャと同様に、レキシカルスコープ内の変数を参照できます。

ブロックは、Rubyのライブラリ全体で広く使用されています。

var ||= value

Nilへの代入

varがnilの場合のみ、varに値を代入します。`var = value if nil == var`と同等です。

ここで詳細に説明するのは、nilがfalsy(ブール式ではnilがfalseとして扱われることを意味する)という事実によるものです。そのため、`var += 5`のような式と同様に、これは`var = var || value`と同等です。

aList.each {|i| doSomething(i)}

リストのループ処理

リストをループ処理する一般的な方法はブロックです。リストに対するその他の操作は、CollectionClosureMethodで行われます。

emptyArray = []
newArray = [var, "some text"]
doSomething([var1, var2])

配列

Rubyの配列は実際にはリストです。豊富なAPIを持つ拡張可能な構造です。メソッド呼び出しなど、式のどこにでも自由に使用できます。

var = aHash[key]
aHash[key] = var
newHash = {key1 => value1, key2 => value2}
emptyHash = {}

ハッシュ

anObject.
  aMethod(arg1,
    arg2,
    arg3)

文の継続の推論

Rubyは改行を文の区切り文字として使用します。96%のケースでは、まさに必要なものです。しかし、時折、行が長すぎる場合があり、改行を使用する言語では、文を複数行にまたがるようにするための文の継続文字が必要です。

Rubyは、文の継続を推論するためにいくつかの文字を使用します。そのため、引数リストでカンマで行を終えると、Rubyは文を続けることを推論します。同様に、メソッド呼び出しでピリオドで行を終える場合も同様です。