oldwaveの日記: ifは関数じゃない 10
日記 by
oldwave
今の職場ではPHPがメインの開発言語なんだが、複数のプログラマが平然と次のようなコードを書いている。
if($x==0) {
echo "xは0です。\n";
}
僕がどうしても気になるのはifの直後に空白がないことだ。「ifは関数じゃないから、そこに空白をおかないとヘンだよ」と説明しても、ピンとこない人が多い。
しかし、PHPの公式マニュアルでも、ifと条件式の間には空白があるのに、誰が空白を置かないスタイルを普及させたんだろう。どこかに犯人がいるはずなんだが...
なるほどー (スコア:1)
しかし,「return は関数じゃない (から括弧は書くな)」論よりも説得力が弱いような.いや,特に主張があるわけじゃありませんが.
思うに,C にゆかりのある人は if/for/while 等の後に空白を入れないような傾向がある気がします (そいういコードを見ながら覚えたような).
逆に
if( c != EOF ){
strcpy( a, b );
みたいに括弧内部に空白入れたり.
自分が「if空白」を見たのは java 触り始めてからのような気がします.初めて見たときは「うわ,気持ち悪ぅ」と思ったものです.
てか,今でも空白いれないですけどね….
是非,洗脳して欲しいです :-)
Re:なるほどー (スコア:1)
Kernighan & Pikeの「プログラミング作法」 [bk1.co.jp]でも、ifの後には空白があるんですよ。今、手元にないんで確認できませんが、K&Rでもifの後に空白はあったような気がします。
今、手元にあったbashのソースあたりを見てもifの後に空白はありますね。だから「Cにゆかりのある人」説はちょっと弱いかなあ...
Re:そういう時こそGoogle Code Search (スコア:1, 興味深い)
"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は空白無しが多い
ざっと見た感じはこうでした
統合開発環境を使わずに使う人、言語規約とか自己流で生産性あげてる人、
言語屋じゃないがニッチなので仕方なく個人的用途に言語を使う人、
そういう人が選ぶ言語なのか?な?
あとの言語規約とか知っている人が多い業務用途、参考にしたソースがそうなっていたから、
って初心者がどっと流入したりで母数が大きくなってる奴は解らないですね。
Re:そういう時こそGoogle Code Search (スコア:1)
ありがとうございます。おもしろいですね。rubyではifの条件部分にかっこを書く必要がないので、あまり参考にならないかな。lispでifの後に空白なしでかっこを書く例が多いのはちょっと驚きました。smalltalkは...あれ?Google Code Searchが見つけているの、Cのコードだよ?
Re:なるほどー (スコア:0)
$ indent -kr -i8 ソース
で整形しろと、リー茄子さんがいっておりますね。
(kr はカーニハンとリッチーのスタイル
i8 は8文字インデントをタブで)
これで整形すると、ifのあとにはスペースがつきます。
なので、昔の人はスペース入れていたみたいです。
Old Style (スコア:1)
ANSI C 以前なので、1980年代の話ですけど。
int foo ( )
int i;
{
int j;
j = bar ( i );
return j;
}
スタイルガイド (スコア:0)
結果的にはどのスタイルガイドで育ったか?によるものでしょう。
この手のスタイルガイドの範疇にあるものは、
書き手としてはコンパイルエラーにならない限りどちらでも良いという認識であり、
一貫した利用方法であるならばどういう書き方でも問題ないという考えなのでしょう。
もっとも、昨今はスタイルガイドがどうのこうのというよりは、単に書籍等で見たとか、
記述の手間や本人の見た目の感性の占める比重が大きいものとも感じます。
#使用しているモニタやフォントによる見易さで左右されることも。
#エディタの文字間スペースで見やすさは大きく異なりますし。
昔は有った「~の記述に従って書く」ということが少なくなりましたからね。
#更にオブジェクト指向が加わってから関数の地位も低くなりましたし。
Re:スタイルガイド (スコア:0)
if( i == 0 ){ return true; }
とかいう(多分、他の人から見て気持ち悪い)コードです。
>ifは関数じゃない
関数じゃないんですけど、"英単語+("という表記としては同じもので
見た目的には統一したい(関数であろうが無かろうが)
という意識が働いています。
>結果的にはどのスタイルガイドで育ったか?
な気もするんですけど、他のソースを見ても
あんまりこの書き方が見当たらないというか。
>書き手としてはコンパイルエラーにならない限りどちらでも良い
本当は「この書き方じゃないとダメだ!」という規定されたものがあると、単純にそれにしたがって書くんですけど。
(他の人とコードが混ざった時に、美しくないので、その時だけ他の人に合わせたりしてるので)
Re:スタイルガイド (スコア:0)
探すといっても見当たらない可能性の方が高いかと。
第一、ifなどの後の括弧についてはtabの間隔や複数の条件文の様に論議の活発なものでもないし、
各種コンパイラでも許されている、いわば「ゆらぎ」の部分ですから、
その根拠を求めるのであれば確率論に行き着く可能性もそれなりにあるものと考えます。
>本当は「この書き方じゃないとダメだ!」という規定されたものがあると、単純にそれにしたがって書くんですけど。
>(他の人とコードが混ざった時に、美しくないので、その時だけ他の人に合わせたりしてるので)
その姿勢は"the Indian Hill C Style and Coding Standards"の改訂版の末尾にもある様に、
「スタイルを混ぜるのは、単一のどんな悪いスタイルを使うことより悪い。(和訳版)」
なのでいいんじゃないかな。
Re:スタイルガイド (スコア:1)
昔QuickBasicを使っていた頃に、自動でコード修正されてやたらと空白突っ込まれるのが嫌だったので、無駄なスペースが嫌いだったりすることもあって。
私が重要だと考えるのはifではなく後の条件文なので、if(はどうでもよかったんでしょうね(笑)
# てれっててれっててー --- macohime(#cpdz)