GNUのコーディングスタイルが気持ち悪いです。

なんであんなスタイルなんでしょうか?

特に{ }の置き方が生理的に受け付けられません。
{ }を独立した行に置くのはまだしも
for(i = 0; i < 10; i++)
   {
    hoge();
   }
|<->|

この|<->|の間。{ }自体にもインデントをつけるのが
気持ち悪くて仕方がありません。

それでも、なんらかの利点や意味があって
あのようなスタイルにしているなら
理解したいと思います。

あのスタイルに何の利点や意味があるんでしょうか?
宗教論争や趣味や主観の問題は排除して
利点や意味を論理的に説明した回答を求めています。

あるいはこのスタイルのルーツがわかればそれでも可です。

http://www.hatena.ne.jp/1118328745 の再質問です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答9件)

id:gio No.1

回答回数236ベストアンサー獲得回数0

id:aukjs

この回答が質問の趣旨にあっていると本当に思っているんですか?

2005/06/10 21:42:47
id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301

ポイント5pt

http://www.hatena.ne.jp/経験則だけで済みませんが・・・:detail]

(1)

for(i = 0; i < 10; i++)

  { ←forの中の処理ということでインデント

    hoge(); ←{の中の処理ということでインデント

  }

入れ子構造になっている際にインデントを入れるという書き方になっています。

(2)

私個人的には

for(i = 0; i < 10; i++)

{

  hoge();

}

が好みですが、Perlなどで文書構造解析させてインデントをつけなおしたりする際には入れ子になればインデントをつけるという(1)のほうが楽ですから、テキスト処理的に(1)が採用されているのではないかと思われます。

(3)

処理系さえ対応しているのであれば、

for(i = 0; i < 10; i++){hoge();}

などという書き方もOKですが「処理系さえ対応しているのであれば」という条件が付いてしまいますし、独自スタイルを進めてしまっては他人が作ったコードを見るときに辛くなってしまいますので、後々の事を考えれば出来る限りスタンダードとされている形でコーディングされるのがよろしいのではないでしょうか。

id:aukjs

なぜ、

{ ←forの中の処理ということでインデント

が必要なんでしょう。。。

2005/06/11 07:19:45
id:unknown2171 No.3

回答回数26ベストアンサー獲得回数0

ポイント5pt

{} のインデントは中カッコがどれに対応しているかわかりやすくするためだと思います。if文の中にまたif文があるのが数回続いたときなどは、

インデントが付いていたほうがわかりやすいです。

id:aukjs

わかりやすさの理由が無いと

主観の域を超えていないです。

2005/06/11 07:21:39
id:mizuna_moge No.4

回答回数9ベストアンサー獲得回数0

ポイント50pt

http://www.hatena.ne.jp/1118405076#

人力検索はてな - GNUのコーディングスタイルが気持ち悪いです。 なんであんなスタイルなんでしょうか? 特に{ }の置き方が生理的に受け付けられません。 { }を独立した行に置くのはまだしも..

 URLはダミーです

 昔何かの本で、このスタイルを推奨しているものがあって、対応する括弧を見つけやすくするため、という理由がついていたような気がします。


 読んだときには、自分のスタイルが既にできていたし流し読みしちゃってたんで、文献が提示できないんですけど、今考えてみると括弧のためだけのインデント位置があるので、例えば閉じ括弧から開き括弧を探すのに見落としが少ない、とかそういうのがあるのかもしれませんね。自分は対応する括弧の検索に苦労したことがないので、想像ですけど。

id:aukjs

> 括弧のためだけのインデント位置があるので、

> 例えば閉じ括弧から開き括弧を探すのに見落としが少ない、

ふむふむ。

2005/06/11 07:25:15
id:argrath No.5

回答回数8ベストアンサー獲得回数0

ポイント50pt

リンク先の中ほどに、


”We find it easier to read a program when it has spaces before the open-parentheses and after the commas.”

(直訳:我々は開き括弧の前とコンマの後ろにスペースがあるとプログラムがより読みやすいことを発見した。)


とあります。


だから利点は「読みやすいから」なのでしょう。私にはそうは思えませんが。

id:aukjs

URLが提示され根拠に近づいた感じがします。たしかに、

We find it easier to read a program when it has spaces before the open-parentheses and after the commas

の理由が知りたいですね。

2005/06/11 07:31:55
id:tailliar No.6

回答回数109ベストアンサー獲得回数0

利点の説明になってないので質問に添えているかわからないですが、私はプログラマですが、いままでそのインデントスタイルを推奨してる人には出合ったことがないです。

初心者~中級者向けの本や上のアドレスでは、わざわざ例をだして「よくない例」と説明してることさえあります。

id:aukjs

まったく、利点の説明になっていません。

2005/06/11 07:32:38
id:pyopyopyo No.7

回答回数377ベストアンサー獲得回数98

ポイント50pt

http://www.hatena.co.jp/

米ぬか酵素温浴の普及を目指すグループ

GNUを立ち上げた リチャードストールマンたちの妙なスタイルがそのままGNUスタイルになっただけだったと思います.


GNUコーディング規約の「ソースコードの整形」の節で,この妙なスタイルの利点について幾つか利点が書かれています.


ただこれらの利点は,やや後付けな感があります.GNUコーディング規約も含めて,コーディング規約の存在意義は,「一つのプログラムでスタイルを混ぜて使うと読みにくくなる」から,何か統一されたスタイルを使ってコーディングできるようにすることにあります.


ですので,スタイル自体に長所短所があるわけでは無く,GNUものが全てGNUスタイルで統一されていることに利点があると考えた方が良いと思います.

id:aukjs

統一されていることに利点があるのは理解できますが、なぜそのスタイルなのかと。

2005/06/11 07:48:06
id:asakura-t No.8

回答回数151ベストアンサー獲得回数2

http://dummy/あくまで想像ですが:detail]

あくまで想像になってしまうのですが、

1. 関数を示す{}はインデントを下げない(関数名と同じカラム)

2. 制御構造を示す{}はインデントを下げる

ということなのではないでしょうか?

id:aukjs

あのスタイルをそのまま説明しただけでにしか聞こえませんが。

2005/06/12 16:38:28
id:asakura-t No.9

回答回数151ベストアンサー獲得回数2

ポイント50pt

http://dummy/すみません:detail]

すみません。

つまり、関数定義なのか制御構造が一目で分かるというメリットがある、ということを言いたかったのです。

id:aukjs

>関数定義なのか制御構造が一目で分かるというメリットがある、

なるほど。

-------

出尽くした感があるので終了します。

・括弧のためだけのインデント位置があるので、

例えば閉じ括弧から開き括弧を探すのに見落としが少ない。

・Formatting - GNU Coding Standards の一説。”We find it easier to read a program when it has spaces before the open-parentheses and after the commas”で読みやすいという主張がある。

・GNUを立ち上げた リチャードストールマンたちの妙なスタイルがそのままGNUスタイルになっただけだった(説)

・関数定義なのか制御構造が一目で分かるというメリットがある

回答をしていただいた方々にはもうしわけありませんが

いずれも、強いて言えば的な感はぬぐえなかったです。

もともとスタイルなど好みの問題ということもあるでしょうが。

2005/06/12 16:38:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません