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
# 【タスク】
# mailclass 継承
前編で作成した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
endTodoクラスを継承し、新たに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
