コーディング規約とメタ仕様(仮用語)
堅牢なコーディングルールを策定する方法(2) - 都元ダイスケ IT-PRESSの
まぁつまり「Javadocに書かれていない挙動をしたらバグ」です
ってのはどんな頓知だよ、というか、
僕の興味のあるところとは微妙にレイヤが違うなあと思った。
なので以降は興味のあるレイヤについて書きます。
関数がどういう挙動をするべきかというのを仕様だとすると、 その上に「どういう仕様を定めるべきか」という問題があって、 それを仮にメタ仕様と呼んでみます。 実際には「意図」って言ってることが多い気がする。
関数の引数にヘンなものを渡したらどうするべきなのか。 nullを返す? falseを返す? 例外を発生させる? 例外は組み込み例外を使う? ユーザー定義の例外を使う? なんとなくPHPを想定。 コメントに書いてあるのが正しいというのはその通りだけど、 さて、どの方針で行きましょうか。そういうレイヤの話ですね。
コーディング規約としては、このレイヤが重要な気がする。 もっと一般的な例だと、どういう基準で関数を分割する? クラスの分割は? みたいなことかな。 括弧の付け方、スペースの入れ方は、実はそんなに読みやすさに影響しないと思う。 肥大化した関数、逆によくわかんない基準でこま切れになった関数、これは困る。
ソースコードレベルの仕様は実装しながら決まっていくのだから、 いかにして仕様を定めるかということが重要になるはず。 この辺は規模・開発体制・システムの設計に依るところが大きいと思うけど。 つまり個々の開発者にどの程度の裁量があるの、という話。
んで、開発者同士は互いの意図について把握しておくべきだろうな、と思うのね。 でも規約として意識する必要もなくて、 「誰それが何月に開発した、何々モジュール」みたいな単位で、 首尾一貫している程度でよいと思ってる。 その程度の首尾一貫性があれば誰でもメンテできる。 これ以上粒度の細かいチーム開発はしたことないからよくわかんない。