プログラミングを独学で学んできましたが
転職活動を通じて、Rubyの基礎概念の知識が不足していると感じたので、あらためて勉強をしなおしています。
アウトプットのために、Rubyの基礎概念をまとめてみます
(他毎日30分 Rubyのコードを書くようにしています)
オブジェクト指向とは
rubyはオブジェクト指向と言われているが、オブジェクト指向とはなんだろうか?
- オブジェクトとは”もの”
- オブジェクトを作ったり、使ったりすることでプログラマの望んだ処理を行わせる言語
- クラスという設計図を使って”new”で「もの」=インスタンスを作ることができる
- 自分で作らなくても、はじめから存在する「もの」もあり、文字クラスとか、整数クラス、日付クラスが代表例
Class
自分でClass=設計図を作れる。
クラスもオブジェクトになる
User情報なら
- name
- address
- e-mail
など色々あると思うので、そのような情報を持てる
class User
# 処理
end
インスタンス
インスタンスとは、事実、事例などをもつという意味。プログラミング言語では実態と訳されるらしい
(インスタントラーメンっていうし”簡単な”とか"即席の"とかの意味だと勝手に思っていました...恥ずかしい..)
Class(設計図、工場)からインスタンスが作成できる
user = User.new
initialize
設定しておくと、classからインスタンスを作成するときに自動的に実行してくれる便利なもの
class User
attr_reader :name, :address ,:email
def initialize(name,address,email)
@name = name
@address = address
@email = email
end
end
実行
user = User.new("kiyoma",chiba,nil)
上記の例は、インスタンス生成時にインスタンス変数を設定している
getter/setter
一時的にオブジェクトの抱えるデータのことを 属性(attribute) という
先程の例でいうnameやaddressのこと
getterとは、通常インスタンス変数はクラス内でないと参照できないが、クラス外でも参照したいときに使うメソッド
setterとは 、クラス外でインスタンス変数の値を変更したいときに使うメソッド
class User
# getterメソッド
def name
@name
end
# setterメソッド
def name(name)
@name = name
end
end
わざわざ上記のように書かなくても簡略的にかけるメソッドもある
メソッド | 役割 |
---|---|
attr_reader | getterと同じ クラス外で参照可能 |
attr_writer | setterと同じ クラス外から更新可能 |
attr_accessor | setterとgetterの役割 クラス外から参照&更新可能 |
class User
attr_accessor: :name,:address,:email
end
こうしておくと
> user=User.new
> user.name="kiyoma"
=> "kiyoma"
> user.address="chiba"
=> "chiba"
というふうにオブジェクトが利用できる
クラスメソット、インスタンスメソッド
これは転職活動中に聞かれたことですが、答えられなかったものです。
インスタンスメソッドは、インスタンスに対して実行するもの
class User
def show
@users
end
end
users=User.new
users.show
# インスタンス名.メソッド名
よく見る形です。
対してクラスメソッドは、クラス(設計図)に対して呼び出すもの
クラスメソッドを記述する方法は selfをつけて定義するのが一般的らしいです
class Tax
def self.rate
1.1
end
end
Tax.rate
# クラス名.メソッド名
Railsでよく見るモデルでの記述が実はクラスメソッドだったようです
class User < ApplicationRecord
has_many :groups
end
クラスメソッドの使う機会は今はよくわかりません。
一般的に
- クラスメソッド 全体で扱うべき情報を扱う
- インスタンスメソッド 個々で扱うべき情報を扱う
らしいです。
private
オブジェクトの内部からは利用できるが、外からは利用できなくなります。
class User
# privateの記述以降がprivateメソッドになる
private
def name
@name
end
end
>user = User.new
>user.name
# エラーになる 参照できない
インスタンス変数とローカル変数
- その場限りの一時的な変数 他のメソッドから使うことができない
- オブジェクト自体が保持する変数 オブジェクトのどのメソッド内からも使える
ローカル変数の例
class User
def greeting(name)
name = name
"My name is #{name}"
end
end
user = User.new("kiyoma")
user.greeting
# => Myname is kiyoma
他のメソッドからnameが使えない
インスタンス変数の例
class User
def initialize(name)
@name = name
end
def greeting
"My name is #{@name}"
end
end
user = User.new("kiyoma")
user.greeting
# => Myname is kiyoma
他のメソッドからnameが使える
以上