トップページ⇒tech
1001コメント291KB

ぱっと見て「ヘタだなぁ」と思うコード

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/03/09(木) 10:16:55
基礎編
・サブルーチン(関数)が数百行
・ネストが深い
・マジックナンバーが使われまくり
・識別子(変数名、関数名)が意味不明
・グローバル変数使われまくり

↓応用編、詳細編どうぞ

0232デフォルトの名無しさん2006/03/11(土) 16:14:50
>>230
「まとも」が何かによるけどな。
コーディングスタイルの流行なんて、すぐ変わるものだし。
0233デフォルトの名無しさん2006/03/11(土) 16:19:34
エラー処理のコードが書いてないソースほど演算子がくっついていたり
if(){
}
みたいなキモいコードブロック書いてるよな。
タブの代わりにスペース2個とか。視ねって。
0234デフォルトの名無しさん2006/03/11(土) 16:20:48
>>232
#includeの後にスペース入れるか入れないかなんて、流行すたりはないよ。
0235デフォルトの名無しさん2006/03/11(土) 16:21:32
標準的なスタイルなんて、Unix/Windows/Mac/組み込み etc..で変わるもんだしな。
0236デフォルトの名無しさん2006/03/11(土) 16:25:09
こういう瑣末なところにのみ執着する奴らはダメだな
0237デフォルトの名無しさん2006/03/11(土) 16:43:44
astyle でも使えばいいだけの事
0238デフォルトの名無しさん2006/03/11(土) 16:49:58
>>231
そらどうでもいいからな。
0239デフォルトの名無しさん2006/03/11(土) 16:58:38
なんで

#include<hoge.h>

はくっつけたらダメなの?

逆に、離したら何がいいの?

論理的に説明できずに、感覚的にキモイとか言ったら低脳認定。
0240デフォルトの名無しさん2006/03/11(土) 16:59:47
>>233
エラー処理かかないのと、スタイルは関係ない。
ただの言いがかりをつけるやつは人としてダメだな
0241デフォルトの名無しさん2006/03/11(土) 17:33:29
>>238
いや、議論するまでもなく意見が一致するから。
二項演算子の両脇を詰めろってヤツが混じってたら、かなり紛糾すると思うけど。
0242デフォルトの名無しさん2006/03/11(土) 17:34:27
>>236
瑣末だと思ってるあたりがダメ。
0243デフォルトの名無しさん2006/03/11(土) 17:39:58
>>241
自分のスタイルを他人に強要して、詰めろ、というバカが居たらそうだろう。

同様に、自分のスタイルを他人に強要して、空けろ、とかいうバカが居ても紛糾するよ。

このスレのように。
0244デフォルトの名無しさん2006/03/11(土) 17:47:11
>>242
これが瑣末だと思えない時点で、プログラマ失格。

多分姑になるといいよ。嫁いびり上手そう。
0245デフォルトの名無しさん2006/03/11(土) 17:49:30
ところでこういうスレだと誰か一人は
「Cプログラミング診断室」を引用するもんだけど
もうそういう時代じゃない?
0246デフォルトの名無しさん2006/03/11(土) 17:49:53
だから、好きなスタイルにツールで翻訳すりゃいいじゃない。

そういう機械で出来るような部分に価値を見出してもしょうがないぞ
0247デフォルトの名無しさん2006/03/11(土) 17:52:05
スタイルは統一することに価値はあっても
特定のスタイルに固執することに価値はない。
それがわからないのは趣味グラマだけだろう。
0248デフォルトの名無しさん2006/03/11(土) 17:54:03
オプソの世界では原作者への感謝と義を通すため、
元ソースのコーディングスタイル(変数名等の付け方も含む)を
踏襲するのが普通だと思うんだが…。(つまり、スタイルを気にしてない)

職業PGだって、規定があればそれに従うのみだろ…。

ここでキモイとかいってるやつは行数を増やすことだけに熱心な
アホ会社に勤めるカス職業PGか?
0249デフォルトの名無しさん2006/03/11(土) 17:56:14
行数が増えたっていいじゃねーか。
べつに行数で金取るわけじゃねぇし。
ま、行数カウントして試験計画に反映することは良くあるけどな。
0250デフォルトの名無しさん2006/03/11(土) 17:57:35
>>243
> 自分のスタイルを他人に強要して、詰めろ、というバカが居たらそうだろう。

数人で作業をやるとか、コーディングルールを決めるような状況ならある程度「強要」はあるだろ。
そういう状況でも、二項演算子の両脇を開けるとか、カンマの後ろを空けるとかは
常識のレベルだから、紛糾なんてない。
あまりに常識過ぎて、言及しないこともあるけど。
(まともなところならね)
0251デフォルトの名無しさん2006/03/11(土) 18:00:15
だいたいスタイルを強要するしないって話じゃなくて、
単にまともなプログラマーなら、こう書くって話だし。
0252デフォルトの名無しさん2006/03/11(土) 18:01:33
命名規則なら決める意味はあると思うけど、
そもそもコーディングスタイル決める意味ある?
0253デフォルトの名無しさん2006/03/11(土) 18:03:39
うわぁ、そっから話をしなきゃならんのか・・・
0254デフォルトの名無しさん2006/03/11(土) 18:04:43
結論: indent使え
0255デフォルトの名無しさん2006/03/11(土) 18:04:45
おまえらは人の読まれても恥ずかしくない自信があるコードを書くためにどんなことに気をつけている?
0256デフォルトの名無しさん2006/03/11(土) 18:06:04
訂正:おまえらは人の読まれても恥ずかしくないコードを書くために、どんなことに気をつけている?
0257デフォルトの名無しさん2006/03/11(土) 18:06:46
>>256
訂正:おまえらは人に読まれても恥ずかしくないコードを書くために、どんなことに気をつけている?
0258デフォルトの名無しさん2006/03/11(土) 18:06:46
人の
0259デフォルトの名無しさん2006/03/11(土) 18:08:43
春真っ盛り
0260デフォルトの名無しさん2006/03/11(土) 18:09:33
コーディングスタイル云々は、>254で全て解決する結論でましたので、無しでいきましょう。

>>255
publicな関数やクラスは、doxygen相当のツールで拾えるドキュメントを必ず記述する。
privateも自明なの以外はつける。

関数内にコメントは記さない。
コメントがなくても自明なコードとなるようにする。
0261デフォルトの名無しさん2006/03/11(土) 18:15:16
訂正:おまえらは人の読まれると恥ずかしいコードを隠すために、どんなことに気をつけている?
0262デフォルトの名無しさん2006/03/11(土) 18:32:44
>>261
二重に意味わかんね。
ソースを隠したところでasmでは(時間かかるけど)バレバレだしな。
0263デフォルトの名無しさん2006/03/11(土) 18:46:26
>>248
> 元ソースのコーディングスタイル(変数名等の付け方も含む)を
> 踏襲するのが普通だと思うんだが…。(つまり、スタイルを気にしてない)

それはまともなスタイルだからだろ。
二項演算子の両端を空けないポリシーで、世間で評価されてるオープンソース
のプロダクツとかある?
0264デフォルトの名無しさん2006/03/11(土) 18:52:42
まったくないな。

そもそもオープンソースの作者ってのは変質者が多い。
露出狂とでも言うか

なかにはオープンソースを餌にしてこんなオナニーを見せて喜ぶ奴もいる
#define BEGIN {
#define END }
0265デフォルトの名無しさん2006/03/11(土) 18:54:02
ホントあほらしい議論。
 色分けしてくれるエディタ使えば、演算子の前後に空白があるだの無いだの気にする必要もない事だろ
0266デフォルトの名無しさん2006/03/11(土) 19:03:50
>>263
君はgrepを知らんのか。それともオプソのソースが手元に一切ないのか。
それくらい調べればすぐにわかるだろう。
0267デフォルトの名無しさん2006/03/11(土) 19:06:32
>>265
議論というか、空白無いとダメなんだもん!君が喚いてるだけ。
皆、どうでもいいだろ、どうしても嫌ならツール使えよ、とやさしく諭してあげてる。
0268デフォルトの名無しさん2006/03/11(土) 19:10:01
まあ読み合わせするのにいちいち印刷して配る所もあるんだろ
0269デフォルトの名無しさん2006/03/11(土) 19:52:06
もうコーディングスタイルなんていいじゃん
それで「ヘタだなぁ」って思うやつが結構いるということは分かったから
0270デフォルトの名無しさん2006/03/11(土) 20:16:08
>>266
そんなことは、演算子の両脇を詰めるのがまともだと思ってる人に言ってください。
0271デフォルトの名無しさん2006/03/11(土) 20:20:42
>>269
けっこう多いっていうか、まともな人は、ほぼ全員へただなぁ、素人っぽいなあって思うんじゃない?
0272デフォルトの名無しさん2006/03/11(土) 20:31:12
>>267
> どうしても嫌ならツール使えよ、

変な書き方してる連中って、ツールも使ってないってことだろ?
0273デフォルトの名無しさん2006/03/11(土) 20:37:50
>>269
そうなの? 俺は変だなとは思うけどヘタとは思わない
同じソース中でバラバラだったら素人っぽいと思うけど
0274デフォルトの名無しさん2006/03/11(土) 20:39:31
日本人でまともなコード書く人って少ないよな。
0275デフォルトの名無しさん2006/03/11(土) 20:42:43
演算子の両側を詰める人のもたれる印象
・へた
・素人
・変
0276デフォルトの名無しさん2006/03/11(土) 20:44:46
てか下手な書き方して読みづらいっていわれてるのに
何で平気でツール使えとか言えるのかがわからん。
責任感って物がないのか?

てか単項演算子の両端をあけないのって小さくて単純なプログラムしか組んだこと無いからだろ。
そりゃたしかに
n = n + m; とか
for(n = 0 ; n < MAX; n++)
みたいなんじゃぁ間抜けにみえるかもな。
0277デフォルトの名無しさん2006/03/11(土) 20:44:50
>>270
オレは2項演算子の両脇を詰めるのが自分のスタイルだと言ってるだけで、
まともとかとかそういう話はしてない。

仕事でコーディング規約でそうあるならそれに従うが、
そうでない以上、こんなのは好みの差にすぎない。ギャーギャー騒ぐことではない。

つーか、「まともな人」とか笑わせんなよ。
論理的な理由も示せず、感覚的にキモイって理由で
批判するなんて、まともな人間のすることじゃない。
0278デフォルトの名無しさん2006/03/11(土) 20:44:57
>>263
nnnesterJは元が*nix系の書き方なのに、
途中で変数名がM$お得意のb〜とか、i〜とか入ってきて
ヘタとかじゃなく非常識極まりないものになってる。
こんな状態になると、演算子で詰めるかどうかの議論なんてアホらしくなってくる。
0279デフォルトの名無しさん2006/03/11(土) 20:47:23
自分のやり方以外の一切を許容できないのはただのアスペだろ。
なるべく一緒に仕事をしたくない類の人間だな。
0280デフォルトの名無しさん2006/03/11(土) 20:48:42
>>276
コーディングスタイル以前に、まともな知識付けた方がいいのでは?
0281デフォルトの名無しさん2006/03/11(土) 20:54:09
演算子を詰めて書くことに関して
延々とファビョってるのって213だろ
これだから腐女子は嫌なんだ
0282デフォルトの名無しさん2006/03/11(土) 20:56:03
>>271
お前の意見って、全部根拠ナシのただの主観だよなぁ。
そういう意見つて、そっくりそのまま逆に言い替えれるんだよなぁ。



空白があろうがなかろうがどうでもいい人って、けっこう多いっていうか、
まともな人は、ほぼ全員どうでもいいなぁって思うんじゃない?

こんな空白無いと「へただなぁ、素人っぽいなあって思う」人をへただなぁ、素人っぽいなあって思うんじゃない?
0283デフォルトの名無しさん2006/03/11(土) 20:56:26
sizeof (char)
0284デフォルトの名無しさん2006/03/11(土) 20:57:47
むしろ「どうでもいい」とか「人にどうこう言うな」みたいなコトを言いながら、
書き込みせずにいられない人のほうがアレなんじゃないの?
0285デフォルトの名無しさん2006/03/11(土) 20:59:13
とりあえず何が何でも上司に逆らってでもルールを破ってでも
詰めて書く派はいないんだろ。
あとは何が何でもあけないと気がすまない派という痛い存在が
いるかどうかでないの。
そこんとこどうなの?
0286デフォルトの名無しさん2006/03/11(土) 20:59:52
>>282
いや、世間でそれなりに評価される本とか、プロダクツのコードで、
二項演算子の両脇を詰めてかいてるのってある?
0287デフォルトの名無しさん2006/03/11(土) 21:03:11
とりあえず、最近見た「ヘタだなぁ」と思うコード
>>276
> n = n + m;
0288デフォルトの名無しさん2006/03/11(土) 21:10:24
>>286
今見てる、「Perlクックブック」は、
大体においてPerlのガイドラインの通り、演算子は空けているが、
空けていないところもある。

ま、重箱の隅をつつくなってことじゃね?
0289デフォルトの名無しさん2006/03/11(土) 21:11:22
>>286
>>266

まぁいいか。手元にあったオープンソース見てみた。
例えばこれは演算子の空白の数はアバウトな感じだけど。
http://www.codercorner.com/Opcode.htm

お前がなんて言いそうか大体想像つくなぁ。
0290デフォルトの名無しさん2006/03/11(土) 21:16:15
もう止めろよお前ら
実に禿げな議論だ
0291デフォルトの名無しさん2006/03/11(土) 21:23:16
議論というか、何が何でもあけないと気がすまない派という痛い存在が騒いでるだけ。
0292デフォルトの名無しさん2006/03/11(土) 21:24:55
>>276
だからさ、読み辛いのは、それを読んでるオノレの問題だろ?
少なくともオレの問題じゃない。
オレはカラーで表示されるエディタで見てるから何の問題もないんだからさ。

オノレが読みづらいならそれは自分で解決すべき問題だ。
なんで責任感が無いなんてわけの判らん発言になるんだ?
0293デフォルトの名無しさん2006/03/11(土) 21:31:03
>>289
ああ、それは知らなかった。
0294デフォルトの名無しさん2006/03/11(土) 21:31:56
コーディングスタイルなんて美的センスの問題だから決着がつくわけない。
どっちかが妥協しないとな。
0295デフォルトの名無しさん2006/03/11(土) 21:32:56

ほんとに読み辛いと思うのは

http://pc8.2ch.net/test/read.cgi/tech/1141740363/35
この35からの質問者のような 書き方だ。

>
ある角度αで回転した四角形があります
左上角を(x,y)とします
上辺の中心を(x',y')とします
この中心をドラッグし移動するとマウスと上辺は交差する位置を維持します
下辺2点は固定です
この時いまマウスがいる座標を(x'',y'')とします
この座標と交差する上辺の左角の座標を求める計算式を提示してください
-----------------------------
言葉が足りない上、交差する位置 とか謎言葉がちりばめられた文章

まあでも、お客様からの文章からは、こんなものは序の口。
そっから真意を探り出してくるんだぞ。

演算子の左右に空白が無いとかで読み辛いとか、ホント笑っちゃうよ
0296デフォルトの名無しさん2006/03/11(土) 21:37:02
やっぱり
a*b + c*d
だよなぁ。
0297デフォルトの名無しさん2006/03/11(土) 21:38:06
>>294
演算子の両側のスペースなんて、その手の宗教論争とは違うだろよ。
「変数名は内容を表すようにつける」とか「サブルーチンは適切な単位に分ける」とか、
そういうレベルの話。
0298デフォルトの名無しさん2006/03/11(土) 21:40:44
boostもばらばらだけど読みやすいから
スタイルなんかより設計が全てだな
一貫してるMFCやATLの読みにくいこと。
0299デフォルトの名無しさん2006/03/11(土) 21:41:00
>>297
そうだね。 演算子の両側のスペースなんて
「変数名は内容を表すようにつける」とか「サブルーチンは適切な単位に分ける」とか、
そういうレベルの話とは全く違って、全く意味の無い話だ。

演算子の両側にスペース入れるのは簡単なプログラムを作れば自動で出来るが
前者2つを自動でやるのは、現時点では不可能だし
それが出来るならプログラマなんて不要になってるだろう
0300デフォルトの名無しさん2006/03/11(土) 21:41:41
「演算子の両側のスペースは宗教論争ではない」教?
0301デフォルトの名無しさん2006/03/11(土) 21:42:43
>>297
ツールで完全に自動でどうとでもなるものを、それらと同列に?マジかよ。

0302デフォルトの名無しさん2006/03/11(土) 21:47:10
いいか、
プログラミングというのは >>295のような曖昧かつ漠然としたところから

「内容を適切な単位に分けて明確にしてそれに名前をつける」

という作業をする事であって
少なくとも、演算子の両端に空白を入れる事に必死になる事じゃないんだよ
0303デフォルトの名無しさん2006/03/11(土) 21:47:46
ツールでどうにでもなるって言ってるのは、上のほうで、人のコード読むんだから、
かってに整形すればいいって言ってるのと同じ思考なんだろうか。。。
0304デフォルトの名無しさん2006/03/11(土) 21:48:56
>>303
反論があるんなら、モゴモゴ言わずに、ちゃんと意見を言え。

ちんちん付いてるんだろ? しゃぶるぞ!
0305デフォルトの名無しさん2006/03/11(土) 21:49:12
>>302
> 少なくとも、演算子の両端に空白を入れる事に必死になる事じゃないんだよ

必死になってやるんじゃなくて、とくに意識しなくても当たり前にやるんだよな。
0306デフォルトの名無しさん2006/03/11(土) 21:51:32
>>305
読みやすいコードを書くように意識しろよ。
0307デフォルトの名無しさん2006/03/11(土) 21:52:19
何が何でもあけないと気がすまない派という痛い存在は確実に居るようです。
0308デフォルトの名無しさん2006/03/11(土) 21:53:56
>>307
逆もまたしかり。
0309デフォルトの名無しさん2006/03/11(土) 21:59:00
統計では開けてる人が90%で開けて無い人が10%ぐらい
0310デフォルトの名無しさん2006/03/11(土) 21:59:33
>>308
何が何でもあけないと気がすまない派
と
どうでもいい・気にしてない派
だけどな
0311デフォルトの名無しさん2006/03/11(土) 22:01:28
本当にどうでもいい人は書き込んでない。
0312デフォルトの名無しさん2006/03/11(土) 22:01:55
>>305
あなたが意識しなくても入れるというのはあなたの問題。
あなたが人のコードで空白を入れてないのがダメってのもあなたの問題。
そのコードを見て 下手だなと思うのもあなたの問題。

自分の問題をさも他人の問題のようにいわないでくれ
0313デフォルトの名無しさん2006/03/11(土) 22:03:53
>>310
ちがうでしょ
そういう対比じゃなくて、

何が何でもあけないとダメだとか、責任感が無いとか

それは違うでしょと。
0314デフォルトの名無しさん2006/03/11(土) 22:04:03
>>309
もっともっと少ないんじゃないの? (まともなのでは)
0315デフォルトの名無しさん2006/03/11(土) 22:09:41
・何が何でもあける。
・適度にあける。
・何が何でもくっつける。
・どうでもいい。
0316デフォルトの名無しさん2006/03/11(土) 22:11:29
xを8で割った余りを計算するのに

x %= 8; でも x&=(8-1); でもいいけど x&=7; はチョッと嫌だなとか

10回のループを表現するのに

for(i=0;i<10;i++) ..... でも
for(i=01i<=10;i++) ..... でも いいけど

for( i = 0 ;i <= 9 ; i++ ) ..... はちょっとダメだとかは思うけど


空白が入ってる、入ってないが価値基準ってのはどうかと思うけどね
0317デフォルトの名無しさん2006/03/11(土) 22:15:32
まだやってんのか。時間の使い方がヘタだなぁ。
0318デフォルトの名無しさん2006/03/11(土) 22:16:17
あと、3次元ベクトルを処理するコードで

#define _DIM 3 とかヘッダで定義して

for(i=0 ; i < _DIM;i++)... とか書くの 2とか4にする場合があるなら別だけど

for(i=0 ; i < 3 ; i++)... と 数字の3書いた方が何倍も読み易いのに
0319デフォルトの名無しさん2006/03/11(土) 22:17:39
756 名前: [sage] 投稿日:2006/03/11(土) 22:16:28
このプログラムについてprintf下3つが理解できないので、どのような動きを
しているのか、解説をして頂きたいのですが、お願いします。

#include <stdio.h>

char *c[]={
     "ENTER",
     "NEW",
     "POINT",
     "FIRST"
};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
main()
{
     printf("%s",**++cpp);
     printf("%s ",*--*++cpp+3);
     printf("%s",*cpp[-2]+3);
     printf("%s\n",cpp[-1][-1]+1);
}
出力  POINTER STEW
0320デフォルトの名無しさん2006/03/11(土) 22:20:48
>>319
ヘタ以前に人格を疑うな…。
つーか、ポインタの宿題じゃねーの?
0321デフォルトの名無しさん2006/03/11(土) 22:21:36
>>316
> for(i=01;i<=10;i++) ..... でも いいけど

唐突に8進数でてくるのはどうかと
0322デフォルトの名無しさん2006/03/11(土) 22:24:24
>>321
ホント色別けしてくれるエディタは有難いね。 昔は2桁の8進数を間違って使ってなかなか気付かなかった
0323デフォルトの名無しさん2006/03/11(土) 22:32:05

else 節が多いと、なんか主張が弱いというか視点のハッキリしていない人の意見を聞いてるようでイライラする


あと、条件判断で && || を同じ行で使うのも、なんか下手っぽい

if( XXX && XXXX) 使うなら

if(XXX )
if(XXXX) と書く方がいい。  実際、 && || は良く間違って使われてる。
0324デフォルトの名無しさん2006/03/11(土) 22:36:55
>>316
> 10回のループを表現するのに

その三つの例は全部ダメだろ。やざとやってんのか?
0325デフォルトの名無しさん2006/03/11(土) 22:38:42
下手とかそういう問題か?
if( XXX && XXXX){
} else {
}
こう書きたいときは二段ifにするわけにはいかない。

>&& || は良く間違って使われてる
あまりにレベルが低いのを引き合いに出されてもな。
ああ、そういうスレか
0326デフォルトの名無しさん2006/03/11(土) 22:40:09
for (i = 10; i; --i) ...
0327デフォルトの名無しさん2006/03/11(土) 22:41:01
>>316>>318
空白の有無よりも数値の意味を明確するほうが大事だと言いたいのかもしれんが、
統一されてないのはやっぱり問題だと思う。
特に ; の前後の空白が全く統一性がないのがあれだな。

プログラムでも英語の文法に従うとするなら、
句読点の前には空白を入れず後ろには空白を1つ入れることになる。
0328デフォルトの名無しさん2006/03/11(土) 22:43:01
>>325
 だからそれ1個だけならいいよ。 
 一つの手続き内に そんなのが沢山あるとか
 ダラダラ 入れ子にして るコードとか

それからチャンスがあるなら 他人のコードで バグ取りをする時は、 && || を使ってるとまず疑うといいよ
0329デフォルトの名無しさん2006/03/11(土) 22:45:13
>>328
&&はifをネストすればいいけど、||はどうしてるの?
0330デフォルトの名無しさん2006/03/11(土) 22:45:35
>>326  PICではそんな感じに書かないと最適化が働かないから、必須な場合もあるね

>>327 統一しないとダメな人は、自分でツールに通せばいいじゃない。
  そんなの変換するの一瞬でしょ? そんなことに時間を使うのは勿体ないよ
0331デフォルトの名無しさん2006/03/11(土) 22:47:36
>>330
スタイル統一するのに、時間かかっちゃう人なのか。
■ このスレッドは過去ログ倉庫に格納されています