【Rubyの基本】classについて 前編

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

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

attr_reader 

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

attr_writer 

# 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_accessor

attr_reader :title
attr_writer :title

↑ふたつは、↓ひとつで同じ働きをする

attr_accessor :title

attr_accessor」を使う場合、
メソッド内で「@title」「@task」の「@」は不要になる


メソッド

.push

配列tasksに追加する

def add_task(task)
 @tasks.push(task)
end

.jion

配列の文字列を「(”.”)」で合体させる

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 改行する

\n」の位置で改行する

def all_task_titles
 "#{title}\n【タスク】\n#{tasks.join("・")}"
end

「\」バックスペース → 「option + ¥


#DAY27

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。