2011年3月9日水曜日

プログラムを書くときのポリシーみたいなのってありますか?

先日、C言語のプログラムを書いて処理単位に関数化してコードをスッキリさせたら「わかりにくい」というまさかの指摘を受けたことを書いた

あらためて、指摘者の観点としては以下のようなもの。
(1)関数に飛ぶと、戻った時に何をしてたんだかよく分からなくなるから
(2)現在稼働中の他のプログラムが、1つの関数にまとめて処理を書いてあるから

1つ目に関しては、「それって1つの長い関数の方が途中でわけわからなくならない?」って思うし、2つ目に関してはもはや思考停止状態としか思えないわけだが、それもまぁ、育った環境と考え方次第なんだろう。セロリが好きだったりするよね。

で、意地でも「機能単位に関数化してフローを(ボク的に)わかりやすくしたコード」が嫌みたいなんで、腹が立って今日は関数化していた部分をガシガシまとめて、1000行級のモンスター関数がボコボコ続く、お望みの形にしてやったぜ!(ただ俺、これ絶対メンテできないや…)

まぁそれはそれでいいとして(良くない気もしつつ)、コードって人によって千差万別で、じゃあ俺は何でこういう書き方をしたんだろう、と自分のコード書きポリシーみたいなものについて考えてみた。

C言語の場合


  • 関数はエディタで開いて1画面に収まる長さにする
  • 意味のある機能単位に関数化して、機能をカプセル化する
  • グローバル変数は絶対に使わない(ぐらいの気迫で作る)
  • 定型的なくせに長ったらしいコードはマクロ化する


1つ目「1画面に収める」っていうのは、特にボクが今TeraTerm&viで開発してるからなんだけど、でもあんまり長い関数ってやっぱりヤだよね?viじゃなくてもやっぱり1画面になるべく収めます。
2つ目「カプセル化」は、処理を閉じ込めることでバグの影響範囲を最小限に食い止めることが出来るし、メンテもしやすいから。普通でゴメン。
3つ目「グローバル変数」は説明の必要もないかと思いますが、何と今のプロジェクトでは外だしのヘッダファイル内でグローバルな構造体が死ぬほどあって、絶対もうどうかしちゃってる。
4つ目「マクロ」は前回書いた通り、便利だから。

ざっと思いついたのはそんなとこでしょうか。ポリシーっていうか、Tipsっていうか、むしろ常識みたいな感じだけど。

Java言語の場合


  • if文が出てきたらクラス分割あるいはインターフェースの切り出しを検討する
  • インスタンス化できるクラスと出来ないクラスを明確にする

取り急ぎ考えた結果、これだけしか出てこなかったんですが(恥)、Javaの場合はカプセレーションとか、例外機構の活用(中で握りつぶさない、的な)とかは当然っちゃ当然のことなんであえて書く必要もないかと思いまして、と言い訳しておこう。



で、大したことを書けなくて今困っているんだけど、僕の周りには幸い設計をやらせたりコードを書かせたら超一級な人が何人かいるので、その人たちがこれを見て「そういえば俺はこうだなぁ」とかいう知識とか情報とかノウハウを出してくれないかなぁ、とそう目論むことにしました。

せっかくここまで読んだコード書きのアナタ、PHPでもJavaScriptでも何でも構いません、是非語ってください。そして僕に教えてください(笑)

0 件のコメント: