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

ギョームのコード書いてるとよく思うこと

てけとー

他人の書いたコードを読んでる時によく思う。
ねぇ、抽象化しようよ。

ダラダラダラダラダラダラダラと処理を書くのやめようよ。
楽しようよ。
マジで。

以下の C# っぽいコードは天丼を作ってお客にアレしたりする架空のシステムのコードだということにする。
このシステムではてんやものフレームワークを使ってる。てんやものフレームワークがどういうものなのかは全く決めてないけれど、
このフレームワークのバージョンが 2.0 だと、天丼になるべきご飯どんぶりの上に乗るべき天ぷらがある確率で海老天だけになるという不具合を抱えている。

こういう不具合は開発中に見つかったりする。
そして、何かの理由で*1バージョンアップできなかったりするのだ。

何にせよそれを回避するコードが下のコードだ*2
とりあえず、天ぷらをシャッフルして海老天だけになるのを防ごうと云う魂胆なんだが…。

    // 
    // てんやもの version 2.0 だと天丼の上に乗る天ぷらがほぼ海老天だけになるので、ここで一旦天ぷらをシャッフルする
    //
    var tmpTemplas = new List<TemplaViewModel>();
    foreach ( var templa in this.Templas ) {
        /*
           天ぷらビューモデルをシャッフルする長い長い処理
         */
    }

( ◠‿◠ )☛ なあ、そんなとこに直で書くなよ。Shuffle メソッドを呼べよ

上みたいになんでんかんでんダラダラダラダラダラダラダラと書いてるぷるぐらまーが多すぎる。
こう書こうよ:

    // 
    // てんやもの version 2.0 だと天丼の上に乗る天ぷらがほぼ海老天だけになるので、ここで一旦天ぷらをシャッフルする
    //
    this.Templas = this.Templas.Shuffle();

ほら、すっきりした。
直に書いてしまうと、次の修正や何かでこの長い長い処理の中に別の処理が書かれてしまうかもしれず、将来的にはメソッドは長大化してしまう。
っていうか、何も知らないぷるぐらまーがコードを読んで理解するというコストがはバカにならないのだ。
別々の意図がうじゃうじゃ絡み合っていると、理解したと思っても長すぎて脳内レジスタに収まりきらないし、何か別の要因があってよく分からない挙動が起こることだってありえる。

つまり、理解したと確信しにくくなってしまうのだ。
知らないうちにバグが入り込んだり何だりしちゃって、入り込んだバグを修正する方が長くかかっちゃったりしちゃったりして本当に苦労した経験がありまくりなのでやめようぜーーーー!!!

*1:お金がないとか時間がないとかそーいう感じで

*2:多分