パスワードを忘れた? アカウント作成
532622 journal

oldwaveの日記: ifは関数じゃない 10

日記 by oldwave

今の職場ではPHPがメインの開発言語なんだが、複数のプログラマが平然と次のようなコードを書いている。

if($x==0) {
    echo "xは0です。\n";
}

僕がどうしても気になるのはifの直後に空白がないことだ。「ifは関数じゃないから、そこに空白をおかないとヘンだよ」と説明しても、ピンとこない人が多い。

しかし、PHPの公式マニュアルでも、ifと条件式の間には空白があるのに、誰が空白を置かないスタイルを普及させたんだろう。どこかに犯人がいるはずなんだが...

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by pukupun (9919) on 2006年04月14日 12時42分 (#921475)
    「if は関数じゃない」.なるほどー.
    しかし,「return は関数じゃない (から括弧は書くな)」論よりも説得力が弱いような.いや,特に主張があるわけじゃありませんが.

    思うに,C にゆかりのある人は if/for/while 等の後に空白を入れないような傾向がある気がします (そいういコードを見ながら覚えたような).

    逆に
    if( c != EOF ){
    strcpy( a, b );
    みたいに括弧内部に空白入れたり.

    自分が「if空白」を見たのは java 触り始めてからのような気がします.初めて見たときは「うわ,気持ち悪ぅ」と思ったものです.

    てか,今でも空白いれないですけどね….
    是非,洗脳して欲しいです :-)
    • Kernighan & Pikeの「プログラミング作法」 [bk1.co.jp]でも、ifの後には空白があるんですよ。今、手元にないんで確認できませんが、K&Rでもifの後に空白はあったような気がします。

      今、手元にあったbashのソースあたりを見てもifの後に空白はありますね。だから「Cにゆかりのある人」説はちょっと弱いかなあ...

      親コメント
      • by Anonymous Coward on 2006年10月24日 20時30分 (#1043993)
        http://www.google.com/codesearch?hl=en&lr=&q=%22if+(%22&bt... [google.com]
        "if (" 3,640,000

        http://www.google.com/codesearch?hl=en&lr=&q=%22if(%22&btn... [google.com]
        "if(" 1,430,000

        lang:hoge
        を追加するとfortran、jsp、asp、javascript、smalltalkは同数、
        c#、lisp、ruby、matlabは空白無しが多い

        ざっと見た感じはこうでした

        統合開発環境を使わずに使う人、言語規約とか自己流で生産性あげてる人、
        言語屋じゃないがニッチなので仕方なく個人的用途に言語を使う人、
        そういう人が選ぶ言語なのか?な?
        あとの言語規約とか知っている人が多い業務用途、参考にしたソースがそうなっていたから、
        って初心者がどっと流入したりで母数が大きくなってる奴は解らないですね。
        親コメント
      • by Anonymous Coward
        Linuxカーネルやドライバのソースの場合は、
        $ indent -kr -i8 ソース
        で整形しろと、リー茄子さんがいっておりますね。
        (kr はカーニハンとリッチーのスタイル
          i8 は8文字インデントをタブで)
        これで整形すると、ifのあとにはスペースがつきます。
        なので、昔の人はスペース入れていたみたいです。
  • by argon (3541) on 2006年11月13日 1時20分 (#1056754) 日記
    古い Unix Style だと、関数名と括弧のあいだに空白があったような。

    ANSI C 以前なので、1980年代の話ですけど。

    int foo ( )
                    int i;
    {
                    int j;
                    j = bar ( i );
                    return j;
    }
  • by Anonymous Coward on 2006年04月14日 14時52分 (#921580)
    ifの後の空白は、タブは4タブか8タブかの論争に近いものがありますが、
    結果的にはどのスタイルガイドで育ったか?によるものでしょう。

    この手のスタイルガイドの範疇にあるものは、
    書き手としてはコンパイルエラーにならない限りどちらでも良いという認識であり、
    一貫した利用方法であるならばどういう書き方でも問題ないという考えなのでしょう。

    もっとも、昨今はスタイルガイドがどうのこうのというよりは、単に書籍等で見たとか、
    記述の手間や本人の見た目の感性の占める比重が大きいものとも感じます。
    #使用しているモニタやフォントによる見易さで左右されることも。
    #エディタの文字間スペースで見やすさは大きく異なりますし。

    昔は有った「~の記述に従って書く」ということが少なくなりましたからね。

    #更にオブジェクト指向が加わってから関数の地位も低くなりましたし。
    • by Anonymous Coward
      今の自分のコードは
      if( i == 0 ){ return true; }
      とかいう(多分、他の人から見て気持ち悪い)コードです。

      >ifは関数じゃない
      関数じゃないんですけど、"英単語+("という表記としては同じもので
      見た目的には統一したい(関数であろうが無かろうが)
      という意識が働いています。

      >結果的にはどのスタイルガイドで育ったか?
      な気もするんですけど、他のソースを見ても
      あんまりこの書き方が見当たらないというか。

      >書き手としてはコンパイルエラーにならない限りどちらでも良い
      本当は「この書き方じゃないとダメだ!」という規定されたものがあると、単純にそれにしたがって書くんですけど。
      (他の人とコードが混ざった時に、美しくないので、その時だけ他の人に合わせたりしてるので)

      • by Anonymous Coward
        まあスタイルガイドと言っても有名なものから単に身近に有ったものまで様々でしょうから、
        探すといっても見当たらない可能性の方が高いかと。
        第一、ifなどの後の括弧についてはtabの間隔や複数の条件文の様に論議の活発なものでもないし、
        各種コンパイラでも許されている、いわば「ゆらぎ」の部分ですから、
        その根拠を求めるのであれば確率論に行き着く可能性もそれなりにあるものと考えます。

        >本当は「この書き方じゃないとダメだ!」という規定されたものがあると、単純にそれにしたがって書くんですけど。
        >(他の人とコードが混ざった時に、美しくないので、その時だけ他の人に合わせたりしてるので)

        その姿勢は"the Indian Hill C Style and Coding Standards"の改訂版の末尾にもある様に、
        「スタイルを混ぜるのは、単一のどんな悪いスタイルを使うことより悪い。(和訳版)」
        なのでいいんじゃないかな。
        • 私も空白抜きですね。私はプログラムを誰かに教えてもらったことがほとんどないので、自分なりの美学で書いちゃってるんですよね^^;

          昔QuickBasicを使っていた頃に、自動でコード修正されてやたらと空白突っ込まれるのが嫌だったので、無駄なスペースが嫌いだったりすることもあって。

          私が重要だと考えるのはifではなく後の条件文なので、if(はどうでもよかったんでしょうね(笑)
          --
          # てれっててれっててー --- macohime(#cpdz)
          親コメント
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...