Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

プログラミング言語 Ruby 本質とは??

More than 5 years have passed since last update.

オブジェクトとは

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

何が嬉しいの??
変数のスコープが簡単にわかる => 嬉しい。

スコープとは

プログラム中で変数名などのシンボルが参照可能な有効範囲の事
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away