💎

Ruby入門 〜クラス編〜

2 min read

クラス

Rubyはオブジェクト指向のプログラミング言語であるため、まず何かしらの処理や情報を持つクラス(設計図)を作成し、その設計図をもとに作成したインスタンスに処理をさせる。

  • クラス名の1文字目は大文字で定義する
  • attr_accessorシンボルを使ってインスタンス変数を定義することができる
  • クラスの中でメソッドを定義することもできる
  • インスタンス変数をインスタンスメソッドの中で使う場合には「self」変数を使うことができる

1. クラスを用意する

class Menu
    attr_accessor :name
    attr_accessor :price

    def show_menu
	puts "#{self.name}#{self.price}です"
    end
end

2. クラスからインスタンスを作成する

menu_instance = Menu.new

3. インスタンスに情報を追加する

menu_instance.name   = "すし"
menu_instance.price  = 200

initializeメソッド

initializeメソッドとはメソッドの1種であり、インスタンスが作成された直後に実行されるメソッドである

def initialize(name, price)
    self.name = name
    self.price  = price
end

Initializeメソッドに引数を渡したい場合には、インスタンス作成の時に引数を設定する

menu_instance = Menu.new(“すし”, 200)

クラスメソッド

クラスメソッドとはクラスに対して呼び出すメソッドである

定義の仕方は以下のようにする

Class Menu
    # パターン1
    def Menu.is_discount_day?
	# 処理
    end

    # パターン2
    def self.is_discount_day?
	# 処理
    end
end

クラスメソッドとインスタンスメソッドの違い
クラスメソッドは「Class名.メソッド名」ですぐに呼び出せるが、インスタンスメソッドは「Class名.new」でインスタンスを作成した後に初めて使えるようになる

# クラスメソッドの実行
Class.method

# インスタンスメソッドの実行
instans = Class.new
instans.method

継承

あるクラスを元にして新しいクラスを作ることを継承と呼ぶ
継承元のクラスを親クラス、継承先のクラスを子クラスという
継承することによって親クラスのインスタンス変数とインスタンスメソッドが子クラスに引き継がれる

class NewClass < OriginalClass 

オーバーライド

親クラスにあるメソッドと同じ名前のメソッドを子クラスで再定義して上書きすることをオーバーライドという

親クラスの同名のメソッドを呼び出す場合には『super』を使う

class def initialize(name, price)
    super(name, price)
    self.calorie = calorie
end

ライブラリ

  • 組み込みライブラリ(require不要)
  • 標準添付ライブラリ(requireで呼び込む)
  • RubyGem(Rubyライブラリのホスティングサービス)
today = Time.now() 現在の日時を取得
today.year
today.month
today.day

require “time”
time = Time.parse(2020/01/02/26)

モジュール

定数やメソッドをまとめる機能
クラスとは異なり、インスタンス化はできない
モジュールのメソッドを利用するためには、「module_function :メソッド名」と書いておく必要がある

  • Mix-in
    モジュールの機能をクラスに組み込む
    include モジュール でクラス内に持ち込める

module_functionと記述されたメソッドはクラスにincludeできない

module Greeting
    def say_morning()
        puts "good morning! world"
    end
end

class Player
    include Greeting

    def introduce()
        puts "私は、勇者です。"
    end
end

Discussion

ログインするとコメントできます