Entry

歌うようにコーディングできるお作法

2007年03月10日

以前,こういうお作法を見てギョッっとしたんですけれど,割とこういうことってあるのかしらん。

int
foo(
    int arg1       // arg1 のコメント
   ,int arg2       // arg2 のコメント
   ,int arg3       // arg3 のコメント
    )
{
    int ret = 0;
    // ...
    return ret;
}

他によく言われるお作法で,こういうのは聞きますよね。

    if (3 == ret) {
        ret = 0;
    }

これもかなりギョッとします。

最初の例のメリットは,カンマの前に改行を置けば,引数を変更したときなんかに,行を丸ごと消せばいいから便利だよね,ということだそうです。ついでにコメントも付けられるから便利便利……と。まぁ,最初の引数を行を丸ごと消すのはマズいんですけど……。もうひとつ言うと,戻り値の型の後に改行を置くのは,よくあるお作法ですよね。grep(1) したときに関数を検索しやすいから,ってのがあたしが聞いた理由ですけれど,あらかたそんなところでしょうか。これは,FreeBSD の style(9) にもあるお作法なので,由緒正しい部類に入るんだと思います。

一方,後者の例は,よくある条件文の間違い(if (ret = 3))をあらかじめ予防できるのがいいんだそうです(即値に変数を代入できないからコンパイルエラーになる)。

んでもって,こういうお作法が良いか悪いかといえば,あたしの知ったことではないので,どうでもいいんですけれど,こういうコーディングをする人は,頭の中でどういうロジックが動いているのか,とても気になります。

あたしの周りにいる人で,えらくスキルのある人がいるんですけれど,その人は他人のコードを読むときに,歌うように読むんですね。「○○関数を定義します。ret に 1 を入れたら,その後グルグル回します……最後に ret を返します。」みたいな感じ。歌というと言いすぎかもしれませんけど,文章を読むような感じで声に出して読んでいくんです。で,おそらく,その人のは,自分でコーディングしている時も歌ってるんじゃないかと思うんですね。

他方で,冒頭に挙げた例に戻ると,これは歌うのがかなり難しい。「3 == ret」の例で言うと,「3 は ret と等しいよ」と歌えるでしょうか……。論理を離れた「言葉」の問題として「○と△が等しい」という場合,普通「○」には比べたいものが来て,「△」に比べる対象が来るはずです。例えば,「モマ」という動物が何と同じ動物なのか知らない人に,「モマとムササビは同じだよ」と教えることはあるけれど,「ムササビとモマは同じだよ」とはあまり言いません。後者はどこか倒置的な響きがありますから。

え?どっちも同じだって?平叙文の形だから違いが分かりづらいけれど,疑問文にすると,その違いが割と分かるかもしれません。「モマ」のことをたずねる時に,「モマとムササビは同じですか」と言うのと「ムササビとモマは同じですか」言うのの違い……うーん,分かりづらいかな。

また,冒頭前者の例でも同じことが言えて,カンマを行頭に出すと,ブレスするタイミングを失なってしまいます。行末にカンマがないから,まだ続くのかと思ったら,行頭にいきなりカンマがある……。これは「言葉」のレベルで読みづらいです(作法として正しいかはともかく)。

あたしもテクニカルなアルゴリズムをゴリゴリ書く時を除くと,コーディングする時に割と歌っているんですけれど(他人のコードを読むときは歌えない),冒頭のこのお作法では歌えないなぁ……と思ったりもします。

まぁ,歌うようにコーディングすれば優れたコードができるのかというと,そういうわけでもないんですけどね。気分の問題です。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN