がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

共通化についての雑感

いわゆる「コードをひとまとめに、関数とかクラスとかそーゆー感じの箇所にまとめるか否か」ってあたりについて。
おいちゃん的には(一端、現状では)結論が出ていて

・「意味が同じ」ものは絶対に共通化しろ
・「機能が同じ」ものは、どっちでもいいけど共通化しておいたほうが楽
・共通化は二回目

ってな感じでございます。
似たような話は「「意味で括る共通化」と「機能で括る共通化https://gallu.hatenadiary.jp/entry/20160517/p1 」でもしているですが、まぁ。

かみ砕いて。

・「意味が同じ」ものは絶対に共通化しろ
これは鉄則。おいちゃんはよく「論理的共通化」とか呼称したりします、対になるのは「物理的共通化」で、これは後述。
わかりやすい所で「消費税の計算」とか。これを「2箇所以上に散らかす愚か者に最大級の災いあれ」。
「同じ意味」なんだから「1箇所にまとめる」は当然以前の問題でございます。

で、ここで地味にポイントなのが「共通化は二回目 https://gallu.hatenadiary.jp/entry/20150422/p1 」。
なんとなくで切り出すと結構しくじる事があるので、おいちゃんは「見え見えでわかりきっているものでも、グっとこらえて、二回目に共通化する」ようにしているです。

・「機能が同じ」ものは、どっちでもいいけど共通化しておいたほうが楽
これは「どっちでもいい」んですが「共通化しておいた方が(圧倒的に)楽だよ」ってお話と、そこで「あえて共通化しない意味がわからない」ので、結果「とっとと共通化しませう」となります(笑
簡単な例題としては「元値の10%(端数切り捨て)を計算する」処理。
これが「消費税」だったり「手数料」だったりするだろうと思うんですが(そこが一緒なら論理的共通化に基づいて"共通化しろ"で終了)。
「そうでない」場合は、別々に実装しても「とりあえず一端まとめて」もどっちでもよい……のですが、まぁ気付いたんなら

function 消費税計算($元値) {
    return 計算10%端数切り捨て($元値);
}
function 手数料計算($元値) {
    return 計算10%端数切り捨て($元値);
}
//
function 計算10%端数切り捨て($元値) {
    // 略
}

って書いておいたほうが単純に「楽」だなぁ、と。
まぁ勿論後で「手数料は端数切り上げになったのだよ」とか言われる可能性もありますのですが、ンな時は「言われたら書き換える」で終わり。特に何も困らないの感じ。
「共通化はしすぎないほうがいい」とかたまに伺うのですが、正直「意味がわからない」感じでございます。
なのでまぁ「どっちでもよい」のですが、「同じ事を2回書く」とか「2行以上をコピペする」んなら「とりあえず共通化しておいて」ってやっても手間変わらないんじゃなかろうかなぁ? と。

こんな風に考えているので
・「意味が同じ」ものは絶対に共通化しろ
・「機能が同じ」ものは、どっちでもいいけど共通化しておいたほうが楽
・共通化は二回目
ってのを、割とちょいちょい、お話をしたりする訳でございます。

あと、PHPだと「可変関数」とか「可変変数」とか「マジックメソッド」とかその辺を把握しておくと、この辺もまた「色々と"楽になる"事が多い」ような印象がございますので、おまけ的に。