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

ぺぷしのーげん

アプリケーションエンジニア(C#er)による雑記ブログ

オブジェクト指向と命名規則を遵守すればコメントはほとんど書く必要はない[コメント不要論][C#][Java][Swift]

プログラミング

f:id:hazakurakeita:20160916013827p:plain

学生の時にコメント至上主義者だった僕は、とにかくコメントを書いていました。しかし、就職してインド人と触れ合ったり、オブジェクト指向の理解を深めていくにあたりコメント不要論者となっていきました。今回はその理由について書いていきたいと思います。

 

コメントを書かないインド人

同期のインド人と研修を受けていた時のことです。彼らは全然コメントを書きませんでした。書いてくれと言っても、書くことなんてない、ソースコードを見れば分かるだろうの一点張りでした。一般的にインド人がどうなのかは分かりませんが、彼らはコメントを書く習慣がなかったので、何を書けばいいの?という感じでした。当時の僕は頭を抱えましたが、そもそも彼らのソースコードを理解するのに苦労した理由はコメントがないことが原因ではなく、自分の言語の知識不足であることが多かったというのも事実でした。

 

オブジェクト指向ではコメントは不要

誤解を恐れずに言うと、オブジェクト指向ではコメントは不要です。きちんとオブジェクト指向で設計されていれば、コードはプログラムではなく、モデルやシステムを表現した文章になっているはずだからです。例えば、以下のメソッドにコメントは必要でしょうか?

Person.MoveTo(City.Tokyo);

いらないですよね。オブジェクト指向では、

  • クラス名: 主語
  • メソッド名: 動詞
  • 引数: 目的語

で設計すると自然に物事を表すことができます。引数があるメソッドは他動詞、ないメソッドは自動詞がメソッド名になるわけです。このような書き方をしていると、メソッドの内部処理も1メソッド1機能が徹底されやすくなり、コメントが必要なほど複雑にもなりません。

 

それでもコメントが必要なケース

僕はコメント不要論者ですが、コメント禁止論者ではありません。コメントは書いてはいけない!というわけではないのです。事実、コメントが必要なケースがあるのも理解しています。

  • 論理アルゴリズムの処理である
  • レガシーコードを呼び出し、使っている
  • 直感的でない変数をフラグに使用している

などなど例外はあります。低級レイヤーになってくると直感的でない概念や変数も出てくると思うので、コメントは必要になってくるでしょうし、レガシーコードにマジックナンバーが含まれていて必要なケースもあるでしょう。こういう場合はむしろ積極的にコメントを書かないといけないかもしれません。

 

というわけで、今全然コメント書いてないわけですが、一体どう思われているんでしょうかね。もしかしたら裏で批判されてるかもしれませんが、コメントに引っ張られてメソッド名やクラス名がおかしかったり、さらにはオブジェクト指向になってなかったりするより良いと思うんですが。。あ、でテストコードにはコメントあったほうがいいなー。時間あるときに書きます。。。すみません。

 

  

おしまい