【#100DaysOfCode】10日目「作りながら学ぶRuby入門」第12章 課題 〜書けない理由〜
昨日(5/25)の分の記録。
色々あってあんま出来なかった、という言い訳!
Day 10
・「作りながら学ぶRuby入門」12章 課題
蔵書管理アプリケーションに【検索機能】を追加
さらっと実装したかったけど、出来なかったので悔しい。
とりあえず写経しただけになっていたことを感じ、反省
書けなかった理由
- アプリケーションで呼び出す際の動きをイメージできてない
- (C言語的には) 必要なモジュールを【適切なステップで】考えることができていない
問題点:書けない理由
- 比較条件ってRubyでどう書くんだっけ?
- if文のTrue,Falseを変数に格納したい(これはC的な考えなのか?)
改善方法
次のようなステップに分けて取り組む
次のようなステップに分けて取り組む
- まずは小さいモジュールに分けて、一つずつ機能を書く
- まずは小さく回す:Cでも慣れてる取り組み方
- 上記モジュールを外から呼び出す
- 動きのイメージを具体的にする
- ここまでだと、依存関係を盛り込めてない
- 内部に取り込んで、構造を今一度考える
Cだと下手に外から作りすぎると、ポインタを色々変えたり面倒だけど。。
その点、Rubyのクラスでまとめる書き方は直しやすい
ということで、【クラス外部から検索メソッドを実行】するだけのコードが以下のやつ。
昨日はこれだけ〜〜。
# 「作りながら学ぶRuby入門」第12章 =begin -------------------------------------- まず、「クラス外部から検索を行うだけ」のコード -------------------------------------- =end require 'date' # 蔵書1冊分の蔵書データのクラスを作る class CharInfo def initialize( character ) @character = character end # 最初に検討する属性に対するアクセサを提供する attr_accessor :character # BookInfoクラスのインスタンスの文字列を返す def to_s "#{@character}" end # 蔵書データを書式をつけて出力する操作を追加する def toFormattedString( sep = "\n" ) "文字列名: #{@character}#{sep}" end end # 複数冊の蔵書データを登録する Char_infos = Hash.new Char_infos["testChar"] = CharInfo.new( "Ruby2009", ) Char_infos["compareChar"] = CharInfo.new( "Haruki2019" ) Char_infos["compareChar2"] = CharInfo.new( "testChar2" ) Char_infos["copyChar"] = CharInfo.new( "Ruby2009" ) # 登録した蔵書データを文字列表現で1冊ずつ出力する ## valueがBookInfoクラスのインスタンスを担っていることに注意 Char_infos.each { |key, value| puts "#{key}: #{value.to_s}" } # 蔵書データを検索する puts("蔵書データの検索結果") puts ("include?") puts Char_infos.include? ("Ruby2009") puts Char_infos.include? ("compareChar") puts Char_infos.include? ("compareChar2") puts Char_infos.include? ("copyChar") puts ## ハッシュから検索した蔵書データを取り出す puts Char_infos["testChar"].character puts Char_infos["compareChar"].character puts Char_infos["compareChar2"].character puts Char_infos["copyChar"].character # 指定したキーのハッシュを変数に格納する compareChar_var = Char_infos["compareChar"] puts compareChar_var