※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
classメソッド
インスタンスを作らなくてもいきなり実行できるメソッドのこと。
def self.create(title, task)
todo = Todo.new(title)
todo.add_task(task)
todo #todo を return する
end
todo = Todo.create("Work","mail")
puts todo.discribe
# Work
# 【タスク】
# mail
class 継承
前編で作成したTodoクラス↓
class Todo
VERSION = 1
attr_accessor :title, tasks
def initialize(title)
@title = title
# taskを配列で管理する
@tasks =[]
end
def self.create(title, task)
todo = Todo.new(title)
todo.add_task(task)
todo
end
def add_task(task)
@tasks.push(task)
end
def discribe
puts all_task_titles
end
private
def all_task_titles
"#{title}\n【タスク】\n#{tasks.join("・")}"
end
end
Todoクラスを継承し、新たにKanbanクラスを作成する
(Todoクラスのコピーを作る感じ)
class Kanban < Todo
end
上記にメソッドをなにも追加せず、↓を書いてみる
kanban = Kanban.new("kanban")
kanban.add_task("洗濯")
kanban.add_task("掃除")
discribeを実行すると、todoの名前やtaskがしっかり返ってくる
kanban.discribe
# kanban
# 【タスク】
# 洗濯・掃除
継承後、クラスを拡張する
Todoクラスにないメソッドを追加して、Kanbanクラスを拡張する
class Kanban < Todo
def delete_task(task)
tasks.delete(task)
end
end
実行すると↓になる
kanban.add_task("洗濯")
kanban.add_task("掃除")
kanban.add_task("買い物")
kanban.add_task("ゴミ出し")
kanban.discribe
# 【タスク】
# 洗濯・掃除・買い物・ゴミ出し
delete_task("ゴミ出し")
kanban.discribe
# 【タスク】
# 洗濯・掃除・買い物
親クラスでは定義されていない
Kanbanクラスでは「delete_task(task)」が定義されているが、親クラス(Todoクラス)では定義されていない
kanban = Todo.new("kanban")
kanban.add_task("洗濯")
kanban.add_task("掃除")
kanban.add_task("買い物")
kanban.add_task("ゴミ出し")
kanban.discribe
# kanban
# 【タスク】
# 洗濯・掃除・買い物・ゴミ出し
↓Todoクラスのインスタンスでは「delete_task(task)」が実行できずエラーになる
kanban.delete_task("掃除")
kanban.discribe
# undefined method `delete_task'
メソッド
↑のように、配列からtaskを削除する(Array
クラスのメソッド)
def delete_task(task)
tasks.delete(task)
end
どのインスタンスかを指すとき「self
」を用いることがある
def all_task_titles
"#{title}\n【タスク】\n#{tasks.join("・")}"
end
def all_task_titles
"#{self.title}\n【タスク】\n#{tasks.join("・")}"
end
なくても問題ないが、「self
(自身)」という意味で、読みやすくなる
#DAY27