kozawa のたまに気になること

リンクの少ないでもぶろぐ・・・にせぶろぐ?
スポンサーサイト

一定期間更新がないため広告を表示しています

| - | | - | - |
読みやすいソースコード?

読みやすいソースコードとはって一部にやたら好きな人がいて、まぁでも宗教論争にもなり得て、色々あれですね。

個人的には「ロジックと書式において書き方の思想が一貫しているコード」が汎用的に読みやすいのルールになりますね。
プログラミング言語によっても読みやすさは変わってくるとか色々条件がありますが、ある一連のコードの中で前述のが一貫しているコードは慣れないスタイルは最初とまどっても慣れれば読めるようになったりします(まぁ例外はありますが細かいことをいうときりがない…)。

CとかJavaとかの例で以下ずっと話をしますが、書式の一貫性って、まぁわかりやすいところで言えば

if ( )
{
if ( ) {
が何の法則もなく無秩序に混じっていると読みにくいですよねって話です。インデントしかり。1行何文字を超えたら改行するのかetc。
※それはもちろん、例えば、1行の文字数の最大を考えるのにはディスプレイサイズとか解像度とか、場合によっては印刷した時に1行に入る文字数を考慮するのはありだと思います。コードの上の方と下の方途で改行位置が無秩序に違うと読みにくいかと思います。

読む方がルールを読み取りやすければ読み取りやすい程、読み手にとって読みやすいです。ただ、これは読み手の力量や習熟度によっても違うことなのでどれが正解というのと一概に決めるのがいいとは言いませんが、でも例えば同じ関数の中でとかっていう一定の範囲においてその範囲の中の全体の中での一貫性を考えずに書いたコードよりは考えた方が読みやすさは上がるという一般的法則はあるとは言ってよいかと思います。それが「どの程度か」「考える時間を投じるだけ価値があるか」という話になるとケースバイケースで、まじめに測定しようと思うとそれこそ大がかりな実験が必要になって、まぁそういう実験はそれはそれで興味深いですが、(測定という意味における)素人目に勝手に断言しても何もおいしくないなぁと思ってます。

ロジックにおいて一貫している、の例
コード例 A-1

int calc(int input)
{
    if (input == 1) {
        return 253;
    }

    if (input == 2) {
        return 24;
    }

    if (input == 3) {
        return 783;
    }

}

コード例 A-2
int calc(int input)
{
    int returnValue;
    if (input == 1) {
        returnValue = 253;
    }

    if (input == 2) {
        returnValue = 24;
    }

    if (input == 3) {
        returnValue = 783;
    }
    
    return returnValue;
}
とではどっちが読みやすいでしょうか。switchにしろとかって話はもあるでしょうそもそもどっちも突っ込みどころがあるのですが、ここでは二択で考えてください。まぁ私はA-1が好みですが、この例ではぶっちゃげどっちでもいいです。ちなみに私がA-1が好みな理由は「(1)変数が少ない(2)全部を読めばわかるけれど上から読んでいて二つ目のif文に着た時にはまだ一つ目のif文の結果trueの場合もfalseの場合も覚えていなければいけないけど、returnしていればそれは忘れていい」みたいなものです。まぁ反論もあるかと思いますがそれは今回書こうとしている内容と関係がないからいいです。

問題は、
コード例 A-3

int calc(int input)
{
    int returnValue;
    if (input == 1) {
        return 253;
    }

    if (input == 2) {
        returnValue = 24;
    }

    if (input == 3) {
        returnValue = 783;
    }
    
    return returnValue;
}
こういうのです。私はこれはやめてほしい。A-1かA-2にしてほしい。私がいう「ロジックの一貫性」は例えばこういうのです。もちろん、こんな簡単なのはぶっちゃげどうにでもなって、もっと複雑な例になるとA-1かA-2かどっちかに簡単には寄せられない場合もあるので、仕方がない場合はあろうかと思いますが、A-3よりはA-1やA-2を選ぶ。これがロジックの一貫性の考え方です。もちろんこういう一貫性を考える条件は色々あるわけで、複数のifの中に共通ロジックがあったときの共通化とか考えると、結果的にA-1、A-2式に無理に倒すよりA-3式の方が読みやすいこともあるかもしれませんが、考えた結果であることが重要だと思ってます。もちろん、結果的に大差がないことはあります。大差がないことに考える時間を費やすことにたいした意味がないことももちろんあります。それでも、考えないよりは考えた方が保守性があがる、という一般則はあろうかと思っています。

各種コーディング規約や読みやすさに言及した書籍やブログとかの内容を色々読んで考える練習をするのは糧になるかもしれません。

| 言語 | 20:03 | comments(0) | trackbacks(0) |
スポンサーサイト
| - | 20:03 | - | - |









http://kozawa.jugem.cc/trackback/560
Firefox3 Meter レビュープラス
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< December 2017 >>
+ NEW ENTRIES
+ CATEGORIES
+ ARCHIVES
+ LINKS
+ PROFILE