徒然エンジニアブログ

徒然エンジニアブログ

理系東大生がプログラミングを中心に様々なことについて情報発信していきます!

読みやすいコードを書くために私がしている5つのこと!

今回は読みやすいコードを書くために自分が普段していることをまとめていこうと思います。


当たり前ですがコードは動けばいいものではありません。
初心者や趣味で一人でやっている人はそれでもいいかもしれません。


何故ならば実際の現場でコードは書いて終わりではなく後から直したりする必要があるからです。
また複数人で開発しているときは他人のコードを読む必要があります。
そのようなとき読みづらいコードだとすると理解するのにものすごく時間がかかってしまいます。

①インデントを揃える

これがいちばんの初歩です。
pythonなどはインデントの深さで意味が変わってきますがそれ以外の言語はインデントの深さは実行する内容には関わってきません。
しかしこれが揃ってないと一読ではどこからどこまでが{}かがわからず大変読みにくいです。
この二つのコードを見てください。

int main(){
    for(int i = 0; i <= 10; i++){
        int sum = 0;
        sum = sum + i
    }
}
int main(){
    for(int i = 0; i <= 10; i++){
int sum = 0;
sum = sum + i
}
    }

1~10までの整数をたすプログラムです。


これほど単純なコードでも圧倒的に上の方が読みやすいとわかります。
下のコードも動くことは動きますが理解するのは非常に大変です。

②必要なコメントはしっかりつける

必要なと言ったのには訳があります。
何でもかんでもコメントをつけるのは逆にコードを読みにくくしてしまいます。


ではどんなコメントを書いてどんなコメントは書く必要がないのでしょうか?


答えは一つではありません。
大事なのはコメントの本質を思い出すことです。


コメントとはコードだけではわかりにくい部分を補うために書きます。
つまり誰が読むかによってどこまでコメントを書けば良いかは当然変わっていきます。

初心者の人に向けて書いてあげるならばコメントは増やすべきです。
他人に向けて書くときは自分が書いていて複雑だと思った部分はもちろん書く必要があります。

このようにコメントはどの程度書けばいいのかは一概には言えません。
誰のために書いているかよく考えて必要な分だけ書くようにしましょう。

③変数の名前の付け方に一貫性を持たせる

一貫性と言われてもピンとこないかもしれないので具体例を挙げてみたいと思います。


例えばunityで反発係数の値を取得したい時があるとします。
この時反発係数の値はbouncinessという名前にしているのにそれについているプロパティの名前がGetBoundfあったりしてはいけないということです。

英語の文法的にどちらの方がより正しいかという議論を今したいのではありません。
反発係数の値をbouncinessにしたならばそれを取得するためのプロパティの名前もGetBouncinessにするべきです。


このような対応がしっかりなされているとコードを追加したり削ったりするときに対応がわかりやすいのでとても楽に済みます。

④コード中に数字をそのまま書かない

これもまず簡単な例を出してみます。
次の二つのコードをみてください。
どちらも円の面積を出すプログラムです。

int area = 3.14 * 1 * 1;
int radius = 1;
int area = 3.14 * radius * radius;

コード中にそのまま数字を書かないというのは二個目のように書くことです。


数字を使いたいときはまず変数に入れてそれから使うようにします。


こうすることの利点は大きく二つあります。


一つ目は意味がすぐわかるということです。
一つ目のものより二つ目の方がコードを見ただけで円の面積を計算しているなということがわかります。
これは半径という意味のradiusを変数の名前にしているからです。

こうすることでコメントの数も減らせます。


二つ目は変更するときの手間が減ることです。
先ほどの例では半径を2にしてと言われたら一つ目のコードだと二箇所変更する必要がありますが、二つ目のコードだと一箇所で済みます。
めんどくささも減るし、何よりコードの中からどれが半径を表している数字なのかということを調べる必要がなくなります。


⑤クラス設計を考えてからコードを書く

最後にクラス設計のお話です。
今までとは少し違いこれはプロジェクト全体での話になります。

unityなどのゲームでよくあることですが動けばいいという考えでコードを書いていくとごちゃごちゃになって変更などが難しくなります。

そうならないようにどういうクラスを作ってどの役割を担わせるかということを一番最初に考えるようにしましょう。