読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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_…