LoginSignup
0
0

More than 1 year has passed since last update.

Rubyの基礎概念をまとめてみる

Last updated at Posted at 2022-08-07

プログラミングを独学で学んできましたが
転職活動を通じて、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 namename
    @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でよく見るモデルでの記述が実はクラスメソッドだったようです

user.rb
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が使える

以上

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0