【#100DaysOfCode】7日目 「作りながら学ぶRuby入門」〜コレクション〜
今日はあまりできなかった。
まあ早寝の方が大事〜〜。ということで
Day 7
・「作りながら学ぶRuby入門」 第10章 コレクション
・複数冊の蔵書データを、クラスを維持して格納したい
コレクション: 複数のクラスのインスタンスを格納したもの |
|クラスを定義しておく|
-- |各蔵書ごとにハッシュ値を決める |
-- |各ハッシュ値において定義したクラス(型)を使って蔵書データを登録|
以下、複数冊の蔵書データを格納したコレクション のコード
# 「作りながら学ぶRuby入門」第10章 # 複数冊の蔵書を格納できるコレクションを作成 ## 蔵書データを扱うBookInfoクラス を値とするハッシュを作成すれば良い require 'date' # 蔵書1冊分の蔵書データのクラスを作る class BookInfo def initialize( title, author, pages, publish_date ) @title = title @author = author @pages = pages @publish_date = publish_date end # 最初に検討する属性に対するアクセサを提供する attr_accessor :title, :author, :pages, :publish_date # BookInfoクラスのインスタンスの文字列を返す def to_s "#{@title}, #{@author}, #{@pages}, #{publish_date}" end # 蔵書データを書式をつけて出力する操作を追加する def toFormattedString( sep = "\n" ) "書籍名: #{@title}#{sep}著者名: #{@author}#{sep}ページ数: #{@pages}ページ#{sep} 出版日: #{publish_date}#{sep}" end end # 複数冊の蔵書データを登録する book_infos = Hash.new book_infos["Yamada2005"] = BookInfo.new( "実践アジャイル ソフトウェア開発とプロジェクト管理", "山田 正樹", 248, Date.new( 2005, 1, 25) ) book_infos["Ooba2006"] = BookInfo.new( "入門LEGO MINDSTORM NXT レゴブロックで作る動くロボット", "大庭 慎一郎", 164, Date.new( 2006, 12, 23 ) ) book_infos["Haruki2019"] = BookInfo.new( "騎士団長殺し 第1部 顕れるイデア編(上) クッソ面白い", "村上 春樹", "不明", Date.new( 2019, 3, 1) ) # 登録した蔵書データを文字列表現で1冊ずつ出力する ## valueがBookInfoクラスのインスタンスを担っていることに注意 book_infos.each { |key, value| puts "#{key}: #{value.to_s}" } # 蔵書データを検索する puts("蔵書データの検索結果") puts book_infos.include? ("Yamada2005") puts book_infos.include? ("Ooba0000") puts book_infos.include? ("Haruki1984") puts ## ハッシュから検索した蔵書データを取り出す puts book_infos["Yamada2005"].title book_info_var = book_infos["Haruki2019"] puts book_info_var.title puts book_info_var.author puts book_info_var.pages puts book_info_var.publish_date