※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
classについて学ぶ
Todoリストを作成する。
class Todo
VERSION = 1
attr_accessor :title, tasks
def initialize(title)
@title = title
# taskを配列で管理する
@tasks =[]
end
# newを省略してインスタンスを作る
def self.create(title, task)
todo = Todo.new(title)
todo.add_task(task)
todo
end
# taskを配列に追加する
def add_task(task)
@tasks.push(task)
end
# すべてのtaskを出力する
def discribe
puts all_task_titles
end
private
def all_task_titles
"#{title}\n【タスク】\n#{tasks.join("・")}"
end
end
インスタンスを「new
」したとき、同時に「initialize
」が働く。
変数と違い、変更されないもの。Rubyではすべて大文字で書く。
出力するときは「クラス名::定数」と書く。
VERSION = 1
# 中略
puts Todo::VERSION
# 1
定数は基本的に変更できないが、Rubyでは変更できてしまう。でも変更しないものと覚えておく。
重要なメソッド
private
インスタンスからは利用しないメソッド
クラスの中でしか実行されないので「private
」にしておくのが安全である
def discribe
puts all_task_titles
end
private
def all_task_titles
"#{title}\n【タスク】\n#{tasks.join("・")}"
end
end
「private
」以降はすべてインスタンスで使用できなくなる
クラスでしか使えないので注意
インスタンスからしか使えないメソッドは、少ないほうがいい
attr
class Todo
def initialize(title)
@title = title
@tasks =[]
end
def title
@title
end
end
todo = Todo.new("Work Todo")
puts todo.title
# Work Todo
↑「def
title 〜」と同じ意味なのが↓
class Todo
attr_reader :title
def initialize(title)
@title = title
@tasks =[]
end
end
todo = Todo.new("Work Todo")
puts todo.title
# Work Todo
# titleを書き換えたい
def title=(value)
@title = value
end
todo = Todo.new("Work Todo")
puts todo.title
# Work Todo
todo.title = "Home Todo"
puts todo.title
# Home Todo
↑「def
title=(value) 〜」と同じ意味なのが↓
attr_writer :title
todo = Todo.new("Work Todo")
puts todo.title
# Work Todo
todo.title = "Home Todo"
puts todo.title
# Home Todo
attr_reader :title
attr_writer :title
↑ふたつは、↓ひとつで同じ働きをする
attr_accessor :title
「attr_accessor
」を使う場合、
メソッド内で「@title」「@task」の「@」は不要になる
メソッド
配列tasksに追加する
def add_task(task)
@tasks.push(task)
end
配列の文字列を「(”.”)」で合体させる
def all_task_titles
"#{title}\n【タスク】\n#{tasks.join("・")}"
end
def discribe
puts all_task_titles
end
#(中略)
todo.add_task("メール")
todo.add_task("電話")
puts todo.discribe
# 【タスク】
# メール・電話
その他 ポイント
「\n
」の位置で改行する
def all_task_titles
"#{title}\n【タスク】\n#{tasks.join("・")}"
end
「\」バックスペース → 「option + ¥」
#DAY27