Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

refactoring

ArduinoでTDDをしたい際の選択肢

shuzo-kino.hateblo.jp でC言語のTDDという奴を試しました。 ArduinoはC++の方言なので、厳密には適用できないケースは結構あります。 最近は状況が大分マシになったようで、いくつか案がでています。 arduinounit 専用テスト環境arduinounit! 公式配布では…

injectやmapのブロックの中が複雑になってきたら、素直にメソッドチェイン式に改めた方がいいかも

たとえば、次のようなコードがあったとします。 result = data.inject([]) {|a,c| ((c.x) > 10) ? a << c.y : a } ブロックの中がグチャグチャしてますね。 こういう時は、素直に result2 = data.select {|e| e.x > 10}.map(&:y) その上、この形式ならlazyを…

Structにはメソッドを持たせる事ができる

Structクラスを継承してはいけない(戒め - Bye Bye Mooreshuzo-kino.hateblo.jp でシレッと書きましたが、Structにはメソッドを与える事ができます。これを使うと、 「そのクラス内でしか使わないけど、色々値の扱いが入り組んで面倒なデータ構造」を調子よ…

caseによってビミョーに違うメソッドを呼び出している場合の別実装

たとえば、次のようなタイプと値を指定すると特定の処理をしてくれるメソッドがあったとします。 def sortMethod(type,val) case type when :name then val.upcase when :val then val.next end end sortMethod(:name, "name") #>> "NAME" sortMethod(:val, …

内部変数の数がジゴクめいたものになる場合、専用のクラスを設計して振り分けた方が幸せになれるかもしれない

次のような、何やらジゴクめいた数の内部変数を持ったクラスメソッドがあったとします。 class Hoge def set_unit_price(val, power, speed, mp) special_param = power * speed * val magic_param = mp * speed * 13 if val > 10 unit_price = special_para…

caseやif-elseで実行コードを分配するような実装をしている時は素直に異なるメソッドとして分割してみる

個人的によくやりがちな実装法なのでメモ。メソッドにパラメータを渡し、case文やif-else文で実行コードを分岐させるような実装は、 以下のよな手順でリファクタリングできます。 例 class TestClass def self.create_member(type) case type when :admin Ad…

メソッドの動的定義で似たメソッドをスマートに定義

似た内容の違う名前なメソッドを定義するケース、結構ありますよね。 こんな時は動的定義が生きてきます。キモは、次のdef_eachメソッドです。 instance_execとブロックを使って格好よく処理します class Class def def_each(*method_names, &block) method_…