オブジェクトとは
Rubyは完全なオブジェクト指向言語であり、全ての値は単純な数値リテラルやtrue(真)、false(偽)、nil(nilは値がない事を示す特殊値、Ruby版のnull)、文字列、正規表現、入手力、データベースへの接続、そしてクラス、メソッド、コードブロックすらもオブジェクトとして扱います。
オブジェクトとはつまり何奴?
アイデンティティ/内部状態を持ったデータの集まり
オブジェクトの性質とは
・アイデンティティを持つ
Rubyではすべてのオブジェクトは何らかのクラスに属していて、そして、オブジェクトは自分自身の所属クラスを知っています。そうする事で自分とそうでないものを区別します。
・メッセージを受け取る
Rubyではオブジェクトはメソッドからメッセージをを受け取る「レシーバ」です。そしてオブジェクトはメッセージを受け取ると対応するメソッドを実行し処理を行います。
このメソッドがオブジェクトにメッセージを送る事を「メソッド呼び出し」と表現します。
メソッド呼び出しの例
object.method() => オブジェクト.メソッド(仮引数)
・内部状態を持つ
オブジェクトは0個以上の内部状態を持ちます。例えば文字列なら長さを内部状態として持ちます。そして内部状態はメソッドの実行によって変化します。
型推論
Type Inference => 型推論とは型を省略しても、例えば"ABC"からString型だと推論してくれる機能
動的な言語である為可能であり、型を明示的に記述しなくても良い為コードが短くて済む。
ブロックとイテレータとは
イテレータ:iterators イテレータは配列や配列に類似するデータ構造の各要素に対する繰り返し処理を抽象化したメソッド
ブロック:blocks do~end or {~} 中かっこで囲まれた引数をなるためのカタマリをブロックと呼ぶ
コード例
3.times { print "Ruby! " } #=> "Ruby! Ruby! Ruby!"と出力
1.upto(9) {|x| print x } #=> "123456789"と出力
ハッシュとは
ハッシュオブジェクトとは、任意のキーオブジェクトを値オブジェクトに付属(マッピング)する
h = { #数の名前を数値にマッピングするハッシュ
:one => 1 #"矢印"はマッピングを示す: Key => value
:two => 2 #コロンはシンボルリテラル(シンボルを表す記法)を示す
}
h[:one] #=> 1 キーによって値にアクセス
h[:three] = 3 #ハッシュに新しいキー/値のペアを追加
h.each do |key, value| #eachメソッドによってキー/値のペアを繰り返し処理
print "#{value}:#{key}; " #式展開によって変数を文字列に置き換える
end #"1:one; 2:two; 3:three;"と表示
式と演算子とは
Rubyの構文は式を重視したものであり、ifなどの制御構造はRubyでは「式」である。そしてRubyの式は通常「値と演算子」から組み立てられる。その為ifなどの制御構造は下記のように単純化できる。
nunimum = if x < y then x else y end
演算子の例
1 + 2 = 3 #加算
1 * 2 = 2 #乗算
1 + 2 == 3 # true; ==は等値かどうかをテストする
2 ** 1024 # 2の1024乗
"Ruby" + "rocks!" #文字連結
"Ruby! " * 3 #文字列の反復
max = x > y ? x : y #条件演算子
メソッドとは
メソッドは、defキーワードで定義される。
メソッドの戻り値は、メソッドの本体の中で最後に評価された式の値になる。
メソッドの引数には、デフォルト値を指定できる
def square(x) #一個の引数xを取るsquareというメソッドを定義
x*x #自乗されたxの値が返される
end # メソッドの末尾
記号のサフィックス プレフィックス
サフィックス/接尾辞
メソッドの末尾のつけられる記号
プレフィックス/接頭辞
変数の先頭名につけられる記号
インスタンス変数 @apple
クラス変数 @@apple
何が嬉しいの??
変数のスコープが簡単にわかる => 嬉しい。
スコープとは
プログラム中で変数名などのシンボルが参照可能な有効範囲の事