読者です 読者をやめる 読者になる 読者になる

ruby 用語集 長めです。。。

ruby ruby on rails プログラミング
今までは中途半端な知識と気合で個人的なwebサービス作ってましたが、そろそろ気合でできることも頭打ちになりつつあるので用語から見直します>_<

そろそろ完璧にならんといけないのでで頭の整理としてここにまとめたいと思います、、、、書籍 楽しいRubyとweb教材のProgate参照です!

-----------------------------------------------------------------------------------------------------

 

オブジェクト は簡潔に言うとデータを表現する単位(文字列、数値、時刻、配列、ハッシュetc...)

例)

 1 -> 整数オブジェクト(Fixnum)

 3.1415 -> 浮動小数点オブジェクト(Float)

 

メソッドオブジェクトを扱うための手続きのことで

 例えばputsはオブジェクトをコンソールに出力するメソッド

 puts("ここが引数です" )

 上記の()内のことをメソッドに渡す情報のことを引数という

 

-----------------------------------------------------------------------------------------------------

クラス  オブジェクトの種類を表すもので、オブジェクトがどのような性質を持つかわオブジェクトが属するクラスによって決められる。

 f:id:snsn19910803:20151117112633j:image

 同じクラスのオブジェクトは同じメソッドを受け付ける。クラスはオブジェクトの振る舞いを決める雛形や設計図のようなもの!

 

新しいオブジェクトを生成するには、各クラスのnewメソッドを使います。

例)  Array.newを使って配列を生成する。

       ary = Array.new

       p ary  #=> [ ]

  

-----------------------------------------------------------------------------------------------------

メソッドの分類

 

レシーバーによって3種類のメソッドに分類される

1 インスタンスメソッド => レシーバーがオブジェクト(インスタンス)のもの

ex) p [1,2,3,4].index(2)  #=> 1

  

initializeという特別なメソッドを定義すると、newメソッドインスタンスを生成するときに、同時にこのメソッドが呼ばれます。(コンストラクタともいう)
newメソッドには引数をいれることができ、その引数はinitializeに渡されます。
例えば、下述はnameに"ブリウス"、colorには”白”が代入されます。

class Car

  def initialize(name,car)

   @name = name

   @color = color

  end

  def info 

    puts "車の名前:#{@name},色:#{@color}"

  end

end

  my_car = Car.new("プリウス","白")

   my_car.info

 

#=> 車の名前:プリウス, 色: 白   と出力される。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 ゲッターとセッター

@name,@colorなどのインスタンス変数の値はクラス内からでしか取得できません。クラス外からインスタンス変数の値を取得するには、図のようなメソッドを定義する必要があります。

今回はattr_readerを使います。
このような、インスタンス変数の値を取得するためのメソッドを「ゲッター」と呼びます。

  

f:id:snsn19910803:20151119104107p:plain

このようにしてクラスの外からアクセスできる!!

 

 同じ要領でつぎはattr_writerを使いクラス外からインスタンス変数を変更してみる

 

f:id:snsn19910803:20151119105952p:plain

gets.chompで受け取った値をnameとcolorにそれぞれ変更している

 

インスタンス変数を取得、変更を一括に定義できるものがattr_accessor

 attr_accessor :name,:color      これだけでいい!

 

2 クラスメソッド => レシーバーがクラスのもの。インスタンスを作るような場合。

ex) Array.new #新しい配列を作る

      File.open("sample_file") #新しいファイルオブジェクトを作る

      Time.now   #新しいTimeオブジェクトを作る

 

「self」は特別な式で、呼び出される場所によって意味が変わります。class定義の直下で使用すると、そのクラス名を指し示します。そのため、「self.クラスメソッド」のようにクラスメソッドを定義することができます。
つまり、クラスメソッドには「クラス名.クラスメソッド」、「self.クラスメソッド」の2通りの定義の仕方があります。

しかし

selfはインスタンスメソッド内で使用すると、そのメソッドを呼び出しているインスタンスのことを指し示します。他のインスタンスメソッドを呼び出したいときにselfを使います。
図のように「my_car.put_color」を実行すると、「self」が「my_car」に置き換わった形でメソッドが実行されます。

 

3 関数メソッド =>レシーバーがないメソッドのこと

   ex)  puts   "hello!!" 

                  sleep(10)   #数秒の間処理を休止する

 

f:id:snsn19910803:20151118153626j:image 

継承によって新しく作られたクラスをサブクラス、継承のもとになったクラスをスーパークラスと言う。

 

サブとスーパークラスの関係を「is - aの関係にある」という!

 

f:id:snsn19910803:20151118153636j:image

-----------------------------------------------------------------------------------------------------

 

 変数とは物につける名札のようなもの

オブジェクトに名札をつけるには、 変数名 = オブジェクト と書く。このことを「変数にオブジェクトを代入する」という。  

f:id:snsn19910803:20151117101521j:image 

 配列 []         => 幾つかのオブジェクトを順序付きで格納したオブジェクト

ハッシュ {}     =>キー:と"値"を持つ

これらオブジェクトを格納するオブジェクトをコンテナという

 

nilはオブジェクトが存在しないことを表す特別な値

 ---------------------------------------------------------------------------------------------------

 

f:id:snsn19910803:20151117115652p:plain

2行目で101にしたのにもかかわらず3行目で出力して100のままという疑問も解けました!4行目のように変更結果をhogeに代入しないといけない!

-----------------------------------------------------------------------------------------------------

 モジュールとは 処理の部分だけをまとめる機能。クラスと異なるものはインスタンスを持つことができないことと継承できない。

クラスでは継承をサポートしており1つの基幹クラスを継承して複数のクラスを作成する事が出来ます。これによって同じような機能を持つクラスを別々に1から作成する必要はありません。ただ、同じ様な機能が必要だったとしてもまったく別の目的のクラスである場合はクラスの継承によって共通化する部分を作成するにはおかしい場合があります。そのような場合に共通となる機能をモジュールとして定義し、各クラスにインクルードして利用することでコードの再利用性を高めることができる。

 

よくわからなかったので職場の先輩に聞いたところ

振る舞いを定義するもの=>歩く、話す、食べるみたいな

自分自体は状態を一切持たないためこれらの振る舞いをクラスに提供することしかできない

 その一方でクラスはMix-in (モジュールをクラスに混ぜ合わせることで、クラス定義の中でincludeを使うと、モジュールに含まれるメソッドや定数をクラスの中に取り込むことができる。)して扱える。

 

一連の機能ごとにモジュールでまとめることによって関係のある名前をひとまとめに扱うことができる。

名前空間  メソッドや定数、クラスの同じ名前を区別して管理するもの!

例えば駅名と出身地を定数でそれぞれまとめたいが被ってしまうときがあると仮定

出身地がSHIBUYA,最寄駅も SHIBUYAこうしたいときなどに

module birth_place

           SHIBUYA

           YOKOHAMA
           HOKKAIDOU

 

module station

            SHIBUYA

            YOUGA
            YOKOHAMA

という具合でまとめられる使いたいときは station :SHIBUYAみたいな感じで使えるとのこと!!(間違ってたらすいません)でもイメージはこんな感じ。

  

雑になりましたが今回も自分用のメモです。。。