ページ 11

{}の位置

Posted: 2012年7月17日(火) 20:43
by ta
皆さんは、下記の場合、どちらの書き方で書いてらっしゃいますか?
私的には、下の書き方の方が見やすいのですが、上の書き方の方が多い気がします。
やっぱり慣れでしょうか?

コード:

#include <stdio.h>

int main(void)
{
	if (x == 10) {
		printf("10です。\n"); 
	} else {
		printf("10ではありません。\n");
	}
}

コード:

#include <stdio.h>

int main(void)
{

	if (x == 10)
	{
		printf("10です。\n"); 
	}
	else
	{
		printf("10ではありません。\n");
	}
}

Re: {}の位置

Posted: 2012年7月17日(火) 20:54
by kerotan0820
私は

コード:

for()
{
       printf("こちら派です¥n");
}
中格好の範囲が一目でわかるのでこちらのほうが好みです。

ただ、ifの多分岐の際は

コード:

if( ~ ){
       printf("\n");
}else if( ~ ){
      printf("\n");
}else{
      printf("\n");
}
このように書いています。

Re: {}の位置

Posted: 2012年7月17日(火) 21:00
by beatle
使ってる言語や計算機、コミュニティーなどでも大きく変わる問題だと思います。
例えば上のような書き方は行数を削減しやすいため、昔の計算機のように画面が小さかったころには好まれたと読んだ記憶がありますし、
Visual C#のエディタでは下のようなフォーマットを強制してきます。
私は既存のソースコードを編集する場合はそのソースコードの形に合わせ、新規に書く場合は下のような書き方にする場合が多いです。
慣れ、趣味、一番最初に出会った教科書からの影響、憧れの人の書き方などなど、いろいろな要因があります。

Re: {}の位置

Posted: 2012年7月17日(火) 21:03
by softya(ソフト屋)
インデントスタイルですね。
上のがK&Rのスタイルと呼ばれていて、下のがBSD/オールマンのスタイルです。
「字下げスタイル - Wikipedia」
http://ja.wikipedia.org/wiki/%E5%AD%97% ... 4%E3%83%AB

どっちが正解と言うわけではないですが、会社orチームorグループごとに決めている場合が多いようです。
K&Rのスタイルの方が多くの行を一度に見れるので私は好きですね。

【補足】
少なくともプロジェクト単位ではルールを統一して一貫性を持たせたほうがバグになる可能性が低くなります。
それと途中でスタイルが変わるとなんか見なおした時に気持ち悪さを感じます。
※ 多人数でメンテしてスタイルがぐっちゃに成っているソースコードはとても気持ち悪いです。

Re: {}の位置

Posted: 2012年7月17日(火) 21:07
by nil
僕は
if(...){
}
else if(...){
}
else{
}
みたいな感じですね。
僕はHSPでプログラミングを始めたので、
こういう書き方が強制されてたのもあって、ですね。

あと、
{}の前にあるのがifなのかforなのかもすぐ分かりますし。

個人でプログラムを組むのであれば自身のお好きなように、
サークルや集団に入るならばそこでのルールに従うべきではないかと。

Re: {}の位置

Posted: 2012年7月17日(火) 21:11
by ミーン
ふむ。これは意見が分かれそうなトピックですね。

僕はこんな感じです:

if(condition = 0)
{

} else if(condition = 1) {

} else {

}

Re: {}の位置

Posted: 2012年7月17日(火) 21:20
by みけCAT
どっちでもありません。私はこうです。

コード:

#include <stdio.h>
 
int main(void) {
    if(x==10) {
        printf("10です。\n"); 
    } else {
        printf("10ではありません。\n");
    }
}
オフトピック
思いっきりコンパイルエラーになるのは気にしない。

Re: {}の位置

Posted: 2012年7月17日(火) 22:39
by へにっくす
私は最初は詰めてたけど
最近はカッコが縦で分かるように整形してるなあ。。

コード:

int main(int argc, char *argv[])
{
	if (true)
	{
	}
	else
	{
	}
}
どっちがいいということはないね。
みんなそれぞれのスタイルがあるでしょうから。

Re: {}の位置

Posted: 2012年7月18日(水) 00:27
by jay
確かにこれはその時に適応されるルールによるでしょうね
ただ「完全に自分が自由に決めていい場合」ではどちらが多いのか、と言うのは1人のプログラマーとしてちょっぴり気になる所ではありますが(笑)


僕の場合はこんな感じです

コード:

#include <stdio.h>
 
int main(void)
{
 
    if (x == 10)
    {
        printf("10です。\n"); 
    }
    else
    {
        printf("10ではありません。\n");
    }
}
つまるところは対応する括弧同士は縦に位置を揃えます
ついでに言うならif文やfor文の後が1行だけなら括弧は省略する派ですね

Re: {}の位置

Posted: 2012年7月18日(水) 06:30
by nullptr
コレはたしかに気になりますよね~

完全にルールのない自由な場合(更に言えばC++の場合)、私は

コード:

// class
class Hoge
    :public Oya
{
private:
    int hoge;

public:
    Hoge( hogeee )
        :Oya()
        ,hoge( hogeee )
    {
        // inline method
    }

    int getHoge() const;
};

// method
int Hoge::getHoge() const
{
    if( true )
    {
        //
    }
    else // まずこんな書きかたする人他にいないと思うんだけど、ifが重なるときはifの位置を揃えたくなってしまう...
    if( true )
    {
        //
    }
    else
    {
        //
    }

    if( true ) return1; //一行

    // 実はifよりswitchのcaseの方が気になる
    switch( this->hoge )
    {
        case 1:
        { // ブロック作らないと問題が起きることがあるし、ケース毎の区切りがハッキリ見やすいので私は常につける
            //
        }
    
        default:
        {
            //
        }
    }

    for( ; 1 ; )
    {
        //
    }

}
こんなんですかね。

Re: {}の位置

Posted: 2012年7月18日(水) 14:09
by 沖 滉均
私は下の例の書き方が好きですね(個人的な話です)

コード:

for (;;)
{
    hoge;
}

if (hoge)
{
    fuga;
}
むしろ、switch~case文の方が気になる…

コード:

switch (hoge)
{
    case 1:
        break;
    default:
        break;
}
/*
Visual Studio 6.0なんかだと強制的に以下のように調整されるのが気に食わない
switch (~)
{
case 1:
    break;
default:
    break;
}
*/
オフトピック
beatleさんのC#は強制してくる言われている点については、デフォルト設定がそうなっているだけで書式設定で変えられる。
私はオブジェクトの初期化子とかは並べて書きたい場合があるから勝手に改行を入れないように設定している。
結構細かく変えられるのでオプションの[テキストエディタ]→[C#]→[書式設定]→[改行]のあたりをいじってみるのも良いかもしれない。

Re: {}の位置

Posted: 2012年7月18日(水) 18:05
by MoNoQLoREATOR
私は{}は縦に揃えない派閥ですね。
これは参考書の影響です。

コード:

//class
class Class :public parent {
    Class(int param) :parent(),var(param) {
        //todo
    }
 
    int func()const;

private:

    int var;
};
 
//method
int Class::func() const {
    if(~){
        //todo
    }
    else{
        //todo
    }
    else{
        if(){
            //todo
        }
    }
    // else if    は絶対に使いません
    //ただし、下のように書くことはあります 
    if(~) return true;
    else if(~) return false;
 
    //switch-case
    int damy
    switch(damy){
    
    case 1:

        //todo
        break;
    
    case 2:

        //todo
        break;
    }
    //クラスでラベルを指定するときと同じようにします
}

Re: {}の位置

Posted: 2012年7月18日(水) 19:00
by たかぎ
私は後者ですが、はっきりいってそんなことはどうでもよいと考えています。
一貫性がないのは困りますが、どちらかにそろえておけばそれでよいと思います。

Re: {}の位置

Posted: 2012年7月18日(水) 19:12
by nil
一回投稿したのですがswitchの話があったので……

VC++2008使ってた時には

コード:

switch(a){
    case 0:
        hoge();
        break;
(以下略)
}
みたいな感じだったんですが
今は

コード:

switch(a){
case 1:
    break;
}
ですね。
ちなみに関数定義の時の{}も改行はしません。
ifやforは中身が1行なら{}を省略してます。
クラスのコンストラクタは

コード:

class A{
	A() : a(0), b(0){}
	//	あんまり行数が多いと
	A()
		: a(0),
		b(0){
			//	こんなかんじですね
	}
};
こんなかんじです。
関係無いですが個人的には3項演算子を多用する方です。

Re: {}の位置

Posted: 2012年7月18日(水) 19:26
by softya(ソフト屋)
こういう話は宗教論争のように落ち着くところが無いんですよね。
あんまりスタイル固執しすぎると読みづらくなる場合があるので時と場合によると私は思います。
気にしているの一点、後々の自分にも他人にも読みやすいコードを書いているかです。
あと1つのプロジェクト内でスタイルは変更しない。

コード:

//	日頃はこうですが。
if( a==1 ) {
	b = 2;
}
//	連続する時など、こっちが見やすければこっちを使います。
if( a==1 ) b = 2;
if( a==2 ) c = 2;

//	同様に涼雅さんの様に日頃はこうですが。
switch(a){
case 1:
    break;
}

//	見やすい場合なら、こうします。
switch(a){
case 1: b=2; break;
case 2: c=2; break;
}

Re: {}の位置

Posted: 2012年7月20日(金) 15:50
by ta
下の書き方は少数派なのかな?と思っていましたけど
下の書き方をしておられる方もいて、少し安心しました。(^-^