2026年1月19日月曜日

波括弧の配置のはなし

 プログラムを書く上で、Pythonを除けば、コードブロックを作る際に波括弧をどこに配置するかで「~スタイル」みたいな幾つかの派閥があったと思うんですが、コーディングルールについて調べていたのが昔のこと過ぎて、詳しいことはうろおぼえです。

 なので Wikipediaの字下げスタイルのページを眺めてみました。

 なるほど、上から4つの「オールマン」「K&R」「GNU」「ホワイトスミス」くらいまでは、なんとなく見かける気はします。まぁ、そんな名称だったんだぁ~とは思いましたけど。

 自分はオールマンスタイルで書いていることが多いのですが、パイソニスタは K&Rスタイルがしっくりくる感じなんでしょうかね。

 で、最近、ホワイトスミスでコーディングされているスクリプトを解析する機会があって、これはこれで中々便利な気がしました。

 今回は、よく見かける波括弧のスタイルの比較をしてみようかと思います。

 まずはオールマンスタイル。

proc Allman()
{
    if(0==$arg)
    {
        print("A\n");
        return "A";
    }
    else if(1==$arg)
    {
        print("B\n");
        return "B";
    }
    else if(2==$arg)
    {
        print("C\n");
        return "C";
    }
    else
    {
        print("non\n");
        return "non";
    }
}

 カッコに1行使う事に違和感を感じる人が多いかもしれないのですが、慣れてしまっているので「こんなもんだろう」といった感覚。
 そして、エディタによくある折りたたみ機能で、どんな風に畳まれるかの比較をしていきたいと思います。
 で、オールマンのこれを畳むと、こんな感じ。

オールマンスタイル

 ブロックの間が2行も開いているので、畳んでいる感じがしない・・・。なので、1行目の括弧にコメントを記入して、畳んでも処理内容が分かるようにしていることが結構あります。

 次にK&Rスタイル。

proc KandR()
{
    if(0==$arg) {
        print("A\n");
        return "A";
    } else if(1==$arg) {
        print("B\n");
        return "B";
    } else if(2==$arg) {
        print("C\n");
        return "C";
    } else {
        print("non\n");
        return "non";
    }
}

 ネットのサンプルなどでもこのスタイルで書かれていることが多い気がします。オールマンスタイルに慣れている身からすると、みっちり感が有って読むのに疲れてしまう印象を受けました。
 そして、これを畳むとこんな感じ。

K&Rスタイル

 波括弧がなんとなく目障りですが、まぁ、オールマンスタイルに比べるとコンパクトになっていて、畳んでいる感が出ています。

 最後にホワイトスミススタイル。

proc Whitesmiths()
{
    if(0==$arg)
        {
        print("A\n");
        return "A";
        }
    else if(1==$arg)
        {
        print("B\n");
        return "B";
        }
    else if(2==$arg)
        {
        print("C\n");
        return "C";
        }
    else
        {
        print("non\n");
        return "non";
        }
}

 初めて見た時は、波括弧の位置に強い違和感を受けたものですが、折りたたんでみて有用性を感じました。
 これを畳むと、こんな感じ。

ホワイトスミススタイル

 K&Rスタイルの波括弧が無くなり、更にスッキリとした見た目になっていて条件文の可読性が相当挙がっている気がします。こういった見た目になるのであれば、頻繁にデバッグなどをする場合にはホワイトスミススタイルも良いかなぁと感じました。
 先頭の If にもインデントを付ければ、条件式も比較しやすい気がします。
 ただ、括弧とコードの先頭がそろっている違和感は好きになれません。

 GNUスタイルは、オールマンとホワイトスミスの中間的な感じですが、括弧とコードのインデントが2と、なかなか特殊な処理を行っているので、専用のエディタでないと扱い辛そうではあります。


0 件のコメント:

コメントを投稿