1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyのclass

Last updated at Posted at 2021-12-22

はじめに

rubyのclassについてまとめてみた
JavaScriptと似てる。

clsss

@ nameはインスタンス変数
アクセサーの設定なしだとインスタンス変数は内部でしか参照できない

class Menu

#initializeメソットで引数を受け取る
  def initialize(name, price)
    @name = name   # 属性(メンバ変数)
    @price = price # 属性(メンバ変数)
  end
  
  # インスタンスメソットを作成
  def cal_tax
    p @price * 1.08
  end
  
  def cal_sum(item1, item2)
    p item1 + item2
  end
  
  # アクセサーを記述(外部から参照したい場合)
  attr_accessor :name, :price
  
end

インスタンス化

# インスタンス生成時にインスタンス変数を設定
menu1 = Menu.new('高級寿司', 1800)

classの継承

class Menu ...

# 新しいクラス > 親クラスで継承できる
# 親クラスのインスタンス変数とメソットを継承できる
class Food > Menu

#新たなインスタンス変数を追加
attr_accessor :calorie

#新たなメソットを追加
def calorie_info 
  return "#{self.name}#{self.calorie}kcalです"
end

end

オーバーライド
子クラスのメソットを親クラスのメソットと同じにして上書きする


superで親クラスの同名のメソッドを呼び出す

親クラスのメソッド内の重複

class Food < Menu
  attraccessor :calorie
  
  def initialize(name:, price:, calorie:)
  
  # 親クラスの同名のメソッドを呼び出す
    super(name: name, price: price)
    
    self.calorie = calorie
    
  end
  
end

外部から参照したい場合はアクセサーを使う
キーワード引数も使える
クラスメソッドを追加する

class Menu

#アクセサーを記述
  attr_accessor :name
  attr_accessor :price
  
# initializeメソットで引数を受け取る
# selfはthisみたいなもの
  def initialize(name:, price:,)
    self.name = name
    self.price = price
  end
  
  ## クラスメソッドを追加
  # def クラス名.メソッド名 もしくは def self.メソッド名
  def Menu.class_name?
    # 処理
  end
  
end

# インスタンス生成時にインスタンス変数を設定
menu1 = Menu.new(name: "ピザ", price: 800)

# インスタンスの変数を参照する
puts menu1.name

# クラス名を呼び出す
# クラスメソッドはクラスの中でも呼び出せる
puts Menu.class_name?


# インスタンスに対して呼び出すメソット → インスタンスメソット
# クラスに対して呼び出すメソッド → クラスメソッド

JavaScriptと比較

// JavaScript
class Person = {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  
  hello() {
    console.log(`私は${this.name} ${this.age}です`)
  }
}


# Ruby
class Person
  def initialize(name, age)
    @name = name
    @age = age
  end
  
  def hello
    p "私は#{@name} #{@age}です"
  end
  
end

すごく似てる。
JSの場合class外部からデフォルトでプロパティを参照できる
Rubyは外部からインスタンス変数を参照したい場合、アクセサーが必要

終わりに

始めてプログラム言語を学んだ時と比べて格段に理解しやすい。
基礎を固めるのは大事だとよく言われているので、Rubyは書籍を使って詳しく学んでいきたい。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?