LoginSignup
0
0

More than 5 years have passed since last update.

これだけはやめて!個人的に感じたコードを読む時にちょっと嫌なコード

Posted at

前書き

たぶんそこらかしこにこの手の話題がありますが、俄然として、こうする方がいいよ。っていうのはこうすべきだとかってありますが
それが、実務にかなっていない環境だったり、そもそも言語仕様的に、設計的に、様々な理由がありますが
その中で、今私がいる環境の中で個人的に感じたこれは、ちょっと、、、っていう感じのものを5選で記述しようと思います。
まぁ、そう感じたときもあったなぁくらいのネタにでもなれば、、、

環境経緯

すでにあるプロジェクトに入った。すでに完成しており、運用状態のものに入った時の経験に基づいています。
ゲーム関係のものです。

得られる知見

こういう感じる人がいるんだ
何かネタが欲しい人

つらいコードランキング

 参照や、重要な計算にも直値にも関わらず、それに対して、コメント等が存在しない

例えば、キャラクターの移動速度の計算などで以下のような式

移動速度.cs

//クラス内
private float speed;

///移動速度の取得
public int MoveSpeed
{
    get
    {
        return speed * 1.1f;//<-この部分
    }
}

何故1.1fなのか?このサンプルでは、この部分だけなのでいいですが
例えば、この掛け合わせている、speedの変数に対して
・武器の種類によってそもそものスピードが変わる。
・バフ等で、追加される。

等があった際に、この1.1fというのが、そもそもこれまでの単純なスピードしかない状態だから、1.1でスピード解決しようと
した類なのか、それとも、一律して1.1をするルールがあるのか?などなど
直値が使われている場所によっては困ることになります。

 書き方が統一されていない。

例えば以下のようなコード

統一されていないコード.cs

public void hoge_method()
{
    int _cnt = 10;

    for(int a = 0; a < _cnt;a++){
        if(a == 2)
        {
            a++ 
        }
    }
}

今回の例では、中かっこの位置 と 変数の定義のされかたです。
チーム環境にもよるのかもしれませんが、コード規約などが存在しない状態で長期になるとどうしても、起こりうることです。

 何かのキーなどに使うのだが、変数名が汎用的

例えば以下のようなコード

 汎用的な変数名 .cs

private int level; //実際は、スキルのレベル
private int id;    //実際は、スキルのIDだったり、アイテムIDだったりする

この汎用的なidといった変数も、特定の決まったものに対して使われているidならまだわかる。
例えばSkillクラスの中にIdがひとつあるならば、それは、ほぼほぼスキル関係のidに違いないであろうと推測することができる。

しかし、ゲームを作っていく中で、スキルとか攻撃とか、ユニークのIDとかが一同に介する
バトル関係のものであるとか、ゲームマネージャとかであるとか
そういったIDとか、レベルが集約するような箇所などでは
id とかではなく skill_id とか player_lvとかなどの工夫がないと
複数のクラスや、関数をまたいだ際に、他の意味のidなどが絡んできてわからなくなることがある。
経験ない?それはなんともうらやましい。

あとがき

個人的に、感じたちょっと嫌なコードです。
もちろん、この程度なら余裕だぜってくらい読めるくらいの実力備えるのがプログラマになれっておっしゃるかもしれませんが、
楽して読めるに越した事はないとは思いますので、どうぞ、寛容な心にてよろしくお願いいたします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0