以下の記事は数年前に書いたのですが、いまだにコメントを頂いたりして、いろいろと考えている方が多いのだなと感じたので、今の私の気持ちを書いてみようかなと思いました。
ハンガリアン記法って気持ち悪い。
ハンガリアン記法というのは要するに型についての説明が変数名に記載されているため、冗長に感じてしまう記法です。
当時の私は、コメントを極力減らし、コードそのものがコメントとしての説明を兼ねているソースコードになるようにコーディングを心がけていました。
しかし、さまざまなプロジェクトを経験していくと、最近では「なんとか記法」や「なんとかスタイル」といった指針を設けることはかえって、プログラマーをイラつかせるのではないかと感じてきました。
上記の記事を改めて読むとかなり偏った意見だなと、自分自身に対して感じます。
プロジェクト毎のコーディングルールは必要なのか?
数年前に参画していた多くのプロジェクトではコーディングルールをずらずらと記載したドキュメントが必ず存在していました。
ソースコードレビューでは、コーディングルールに基づいてチェックが行われ、ロジックが正しくてもルールに則っていなければ修正する必要がありました。
私はたびたび、こういった指摘にいら立ちを感じていたものです。
特によくあるケースではC言語におけるgoto文の扱いです。
私はgotoを利用してエラー後の処理をまとめるのが好きなので、gotoを好んで利用していたのですが、これを悪として、コーディングルールに利用してはいけないと記載があるプロジェクトが多々見受けられました。
goto文は時としてスパゲッティコードになり得る為、一律禁止とするのはわかる気がします。しかし、別の例としては必ずelse節を記載しなさいといったものがありました。
else節として処理がなかったとしても必ず記載して、なんらかの処理を記載する必要があるといったルールです。これについては未だによくわかりませんが、経験の浅かった時代には言われるがままに記載していました。(イライラはしていますけど)
コーディングルールは必要かもしれません。しかし、数ページにわたるドキュメントにする必要があるかというとそうではないのじゃなかなと思います。
昔は、新規プロジェクトに参画すると「コーディングにあたって、コーディングルールの展開をお願いします!」といった感じで真摯にルールと向き合っていましたが(イライラはしていますけど)、最近では「コ、コーディングルールなんてありませんよね...?」とおびえながら確認しています。
今は自由に書きたいのです。
どのようにコーディングしていくべきなのか?
このような議論自体、不毛だとは感じています。
結局、このような議論は必要ないよ、ということが言いたいです。
しかし、ルールが全くなくて、なんでもありというのもそれはそれで問題があるかなとは思います。
最低限必要なことは、Javaだったらクラスとかパッケージ名の命名規則であったり、C言語だったらファイル名の命名規則くらいは口頭ベースで約束しておく程度かなと感じます。
それだけ、統一しているとソースコードのプロジェクトを参照した時に、きれいに見えます。ただそれだけの為です。
その先は、もう自由にプログラミングしていきたいものです。ハンガリアン記法だろうがキャメルケースだろうが、なんだっていいです。クラスだったり、機能として成立していればもうなんだっていいかなと思えているこの頃です。
ただし、これは新規にクラスなどを作成する際の話です。どうしても他人が作成したクラスなどに手を加える状況はあると思います。その際には他人の記法に合わせればよいのです。余裕があれば、他人に合わせてあげているという優越感も生まれるかもしれません。
あまりにも修正量が多い場合は、メソッド/関数レベルでまるっと記述しなおすこともあります。その場合は思い切って自分の記法で書き直したりもします。
ソースコードは必ずバージョン管理しているでしょうし、コミットコメントに理由を記載すればよいのではないかなと思っています。
結局のところ。
結局のところ、WEB上に多くの情報がありベストプラクティスがうじゃうじゃ存在しています。
まずはこれらの情報を収集し、ならうことです。変数の書き方とか結果に影響のないロジックの並びとか、多くの場合あんまり関係ないしアルゴリズムの検討に邪魔になります。
好きなように書いて、不満だったらまた組立直して、要件を満たすものを作ればよいのです。
当然、テストはコーディング以上に慎重になる必要はありますけど、これはまた別の話ですので。
最近、参画する案件は自由でモノづくりしやすい環境が整っている現場が多く、自分の考えが少しずつ変わってきたので、こんな記事を書いてみました。