[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 17:18 / Filesize : 89 KB / Number-of Response : 310
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2007/10/25(木) 03:35:55 ]
禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名

過去スレ
その5: pc11.2ch.net/test/read.cgi/tech/1155315371/
その4: pc8.2ch.net/test/read.cgi/tech/1153312202/
その3: pc8.2ch.net/test/read.cgi/tech/1149986051/
その2: pc8.2ch.net/test/read.cgi/tech/1142741989/
初代 : pc8.2ch.net/test/read.cgi/tech/1141867015/

159 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:41:01 ]
>>148
レビューしてすら、さくっとスルーされそうなことはわかりますた。
>>149
yes. 問題は、コレと同レベルのコードがと某社のおひさるなサイト上で動いてたってことなんだ。
さらに恐しいことは、a, bは日付を8桁の整数に変換したものだったりしたんだ……。
>>154
条件式が足りてないれす。こんな感じ?
int d = b - a; if (0 <= d && d < 3) ...


160 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:47:51 ]
というか、何をしたいコードなのか教えてくれないと、144のコードが正しいか間違っているかは判断できないぞ。


161 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:50:10 ]
正しいか間違ってるかの問題じゃなく
冗長すぎるのを問題にしていると思う

162 名前:144 mailto:sage [2007/10/27(土) 01:59:48 ]
>>159
あ、「日付を8桁の整数に」ってのは、20071027みたいなやつ(YYYYMMDD)のことね。為念。

163 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:02:36 ]
冗長かどうかも、何がやりたいのかが分からないと、何とも判断できないからね。
問題によっては、冗長に見えるやり方が最適解になったりすることもあるし。


164 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:05:19 ]
でもあれはさすがに型も明示されてるし言い逃れようがないでしょ

165 名前:144 mailto:sage [2007/10/27(土) 02:11:50 ]
>>161
です。冗長過ぎるというより、きっぱりはっきり無駄かつ無意味。
>>160>>163
一般論としてクソコードであると賛同を得られないことに絶望した。
つか、釣りか? 釣りなのか?

166 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:18:21 ]
>>165
このスレになじまない内容なので、あまり興味を持たれなかっただけかと

167 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:18:22 ]
お前が釣ろうとしてるのかと深読みしてしまったよ



168 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:24:40 ]
>>144はこのスレで希に見る良題だと思ったけど
あぁ、希だからか

ちなみに自分は144ではないです

169 名前:149 mailto:sage [2007/10/27(土) 02:29:03 ]
>>165
俺は賛同するぞ。
簡単な処理をあんなに難しく実装する才能はある意味凄いと思う。

170 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:32:58 ]
if (cond) for (;;) {
} else {
}
とか
for (;;)
 if (cond1)
 if (cond2)
{
}
ってありなの?

171 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:34:06 ]
>レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?
これは質問じゃなくてただの皮肉だったのか

172 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:34:05 ]
つーか、条件式の定数を左に書くのは、代入文の検出とかいってる奴なんなの?
レベル低すぎてどうしようもない。ちげーだろ。

if( NULL == hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) )
{
}

if( hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) == NULL )
{
}

前者と後者、どっちが読みやすいかって話だ。
そもそも関数の引数が多すぎる、とか言われても困るぞ。
Win32APIとかだと、引数8個程度のなんてゴロゴロあるからな。
あと、後者だと、環境によっては==NULLがエディタの外に出てしまって、見えないことがあることも付け加えておく。

173 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:39:46 ]
>>172
関数より定数の方が長い場合もあるわけで

174 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:41:33 ]
>>170
文法的には間違っては無さそうだが、ひどく読みづらいな。

175 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:41:49 ]
>>173
その場合は定数を後ろに書けば良いだろ。

176 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:43:44 ]
>>172の言いたいことがケースバイケースであるなら正解
定数左が当然といってるのなら>>173が正解

177 名前:デフォルトの名無しさん [2007/10/27(土) 02:50:31 ]
ったくもう、まだ続ける気かよ。

>>172
こういう発想は無いの?

if( hoge_func(hoge_arg1
 , hoge_arg2
 , hoge_arg3
 , hoge_arg4
 , hoge_arg5
 , hoge_arg6
 , hoge_arg7
 , hoge_arg8) == NULL )
{
}



178 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:51:18 ]
だいたいさ、お前ら良く考えてみろよ。
疲労困憊のときに>>172の後者の文を見て、本当に==NULLを読み飛ばさない自信が有るか?
==NULLはエディタの外に出てしまっていて見えてないかもしれないんだぞ。
必ずスクロールして確かめる自身はあるか?
また、他人が読んだとき、必ずスクロールしてくれる自身はあるか?

そんなリスク背負うぐらいなら、場合によっては定数を先に書いても良いんじゃないか?
コーディングスタイルに拘るあまり、意固地になっちゃってどうするの。

179 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:57:03 ]
つか、Win32APIを使ってる時点で、何と比較するのか判っているのだから、定数が左にある必要は無いと思うが?

CreateWindowを使った後にHWNDを定数と比較する
その定数は何かなんて、誰だって判る問題だ
ファイルポインタを定数と比較する
その定数はなんなのか判らない奴は、Cで真面にプログラム組む事が出来るとは思えない

変な定数と比較するのなら、定数を前に持っていくより、何のためのテストかコメントを残す方が余っ程気が利いている


180 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:59:16 ]
>>177
どこで折り返すかって話になるが、
結局、自分のプログラムが何処で誰に読まれるか判らない以上、
「何列以上になったら折り返す」ということを語るのは難しい。
読み手のエディタのサイズを予測するすべは無い。

それに、どの様な書き方をしても、後に書くものは先に書くものに比べて
目立ちにくいということには変わりない。
条件式の場合は、関数の引数よりも条件そのものの方が大事だから、
大事なものを先に書いちゃおうという視点から、読み手のことを考えれば、
定数は自然と左に出てくる。逆に自分のスタイルを貫けば右に行く。

181 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:02:31 ]
>>179
なんでWin32API限定で話を進めるんだよ。
>>172のどこにもWin32APIに限定しますなんて書いてないだろ。
離散数学の基礎からやり直してください。

182 名前:デフォルトの名無しさん [2007/10/27(土) 03:02:42 ]
いや、昔は80桁越えたら折り返すってルールがあったんだが。

マウスの付いてるパソコンしか使ったことの無い世代が増えたなぁ。
・・・しみじみ。

183 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:04:58 ]
>>182
今の人だけど、常識としてちゃんと知ってるよ。受け継がれてるから安心して。

184 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:09:37 ]
それを強制したら老害だけどね

185 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:10:42 ]
>>181
別にWin32API限定でなくても、定数を比べる場合はif文以前に比べる定数は決まってるだろう
自分で作った関数だろうと、人の作った関数だろうと、定数で比較する時点で、どんな定数と比較するのか決まっているじゃないか


186 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:17:30 ]
そもそもさ、条件式の定数を右に書くか左に書くか、必ずどっちかに統一しろって言ってる人達は何なの?
繰り返し文は、かならずfor文で書くべきで、whileとかdo-whileを使うなとか言うのか?
(俺は繰り返し文は全部forで書くがな)
分岐は必ずifで行うべきで、switchは使うなとか言うのか?
(俺はswtich文嫌いだがな)
gotoだって、使うなといわれてはいるけど、例外処理に使うのならなんら問題ない。

どうして、場合場合によって使い分けようとしないの?

187 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:22:49 ]
>>172
「普通の感性を持っている人」は、そういう場合は次のようなコードを書くから、なんら心配することはありません。

void *p = hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8);
if (p == NULL) {
}

理解できましたか?




188 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:25:32 ]
>>185
全ての関数の仕様が頭に入ってる人なんて居ない。
他人の使っている関数の仕様まで全部事細かに覚えてる人なんて居ない。
比べる定数は決まっているが、それはあくまで仕様上での話。
今、バグを防ぎたいと考えているのだから、全てのプログラマが仕様を完全に網羅しているとは
考えるべきではない。そういう甘い考えがバグを生む。

それから、プログラマの集中力の問題もある。
先に書いたものの方が、高い集中力を持って読んでもらえる可能性が高い。
だから、条件式の条件は成るべく先に持っていったほうが良いだろう。
長い長い関数呼び出し部を読み終わったころには、集中力がなくなっているかもしれないから。

189 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:27:31 ]
>>144
おまえ自身が
> 本質的な部分だけ抜粋してるのだが
と言っているんだよな。

本来のコードだと
for (int i = 0; i < 3; i++) {
}
の中で重要な処理をしているかもしれない。
144は本質じゃないと切り捨てたかもしれないけど、その判断が間違っている可能性は高いわけだ。
だから、何をしようとしたコードなのか分からないと、冗長かどうかの判断は出来ないといっているのだが。
ここまで丁寧に説明してあげれば、144も自分のおろかさを理解してくれるかな?


190 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:28:23 ]
>>187
そう書くのが一番良いんだけど、書かない奴も居るだろ。

191 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:32:51 ]
とは言ったものの、わざわざ
int ret = strcmp(str1, str2);
if(ret == 0){}
なんて書く奴がどれだけ居るのか気になるが。

192 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:35:07 ]
>>191
その程度なら、
if (!strcmp(str1, str2)) {}
と書くのが一番分かりやすいから。


193 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:40:29 ]
>>192
つまり「程度」によるわけだよな。
だから、程度によっては定数を左に持ってきても良いだろ。

それから、
if (!strcmp(str1, str2)) {}
が許されるなら、
if (0==strcmp(str1, str2)) {}
も許されるだろ。
if ( strcmp(str1, str2) ! ) {}
と、後ろに「!」は書かないからな。

後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
考える人も多いだろう。

194 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:42:30 ]
>>178
NULLとの比較は読み飛ばしにくくなるかもしれんが
hoge_arg8を読み飛ばす可能性はかなり大きくなるだろ?

引数8つもある関数を直接ifに入れるって事は
文脈上ifよりも関数呼び出し自体が重要って事だろ

それなら、エラー処理系であろうifの条件よりも
hoge_arg8が見えやすいほうが良くないか?

195 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:43:07 ]
あとさ、定数左禁止派はさ、do-whileはどうなのよ。あれは良いのか?
あっちのが色物に思えるが。

196 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:43:16 ]
つか、無闇矢鱈と左に定数を置きたがる奴は、出してくる例題を間違えとる

if ((LOW_AGE < age) && (age <= HI_AGE)) {}
こういう場合は、定数が左にあることに対して意味があるが

if (NULL == pointer) {}
この場合は、定数が左にあることの意味は無い
しいて言うならば、コードを何れだけ見づらくできるか位の意味はあるかもしれない
(我々は、NULLがポインタなのかを知りたいのではなく、ポインタがNULLであるのかを知りたいのだから)

197 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:50:28 ]
>>193
そもそもstrcmpって定数が右を想定した作りだと思う

  if (0<strcmp(str1, str2)) {}

どっちが大きい時ifの中に入るかすぐわかるか?



198 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:50:48 ]
>>193

C FAQより
----------
17.3:
ほら、このわざを見て。

if(!strcmp(s1, s2))

これはよい書き方?
とくによい書き方ということはない。ただし人気のある書き方ではある。このテストは、二つの文字列が同じときに成功する。しかしこの 形は等しくないことをテストしているようにみえる。

より優れた選択肢としては以下のようなマクロを使うことがある。


#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)

コーディングスタイルに関する考え方は、宗教に関する考え方と同じ で、議論に終りがない。よい書き方は価値ある目標であるし、たいて いは見ればよいか悪いかわかるが、文章にすることはできない。質問 17.10も参照のこと。
----------

どこにもif (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいとは書いてありませんが?
より良い書き方としてあげている例も、
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
と、定数は右側に来ていますよ。


199 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:50:53 ]
>>194
hoge_arg8は見えにくくなるが、引数が途中で切れている場合、プログラマは気づく。
だって構文的に変なところで切れているからね。
だけど、==NULLがあるかないかまでは想像が及ばないかもしれない。

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) )

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL)
は、エディタ上では同じに見えるからな。
実は後者だったのに、早とちりして、前者だと思い込んでしまうかもしれない。

200 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:51:32 ]
ケースバイケースなのはわかったから
どこまでが左でどこからが右なんだ

201 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:51:39 ]
ついでに、定数の左置きに対して。

--------------------------------------------------------------------------------
17.4:
どうしてif(x == 0)と書くかわりに、if(0 == x)と書く人がいるのか。
A:

これはよく以下のように書いてしまうことを防ぐためのコツである。
if(x = 0)

定数を==の前に持ってくる習慣を付けておけば誤って、
if(0 = x)
と打ち込むとコンパイラが文句を付ける
どうやら2回=を打ち込むことを覚えるよりは、テストのオペランドの順をひっくり返す ことを覚えることのほうがやさしい。
(訳注:本のほうには、これは特によい書き方というわけではないと書 いてある。実際これでは両辺が変数の場合のif(a = b)という誤りを 捉えることはできない。こんな技を覚える暇があれば、lintの使い方 を覚えること。)


202 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:53:55 ]
>>199
てゆうか、折り返しもできずに、右端がスクロールしないと見えないような腐ったエディタは使うなよ。。。


203 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:54:12 ]
>>196
だけど、NULLと比べてポインタがどうなのか? という考え方をすれば、NULLが先に来る。
逆に、ポインタと比べてNULLがどうなのか? とは言わない。
ポインタが先に来るときは、ポインタがNULLであるか? と言う。
つまり、どっちでもいいということだ。

204 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:55:19 ]
>>200
ケースバイケースで、比較の主体が左にきたり右にきたりするソースが、一番見難い(醜い)です。


205 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:57:02 ]
>>198

>>193のどこにも

>C lang FAQ に if (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいと書いてある

なんて書いてないだろ。本当に離散数学の基礎からやり直せ。
何を述べていて、何を述べていないのかの判断ぐらいつくようにしろよ。
じゃないと議論も糞も無い。

206 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:57:10 ]
>>199
ああ、確かに
つまりあなたは「{」の前に改行すべきではない、と俺に言わせ
別の論争を勃発させたいのだなw

207 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:00:11 ]
>>201
C langage FAQ なんてみんな一通り目を通してるんだよ。
一々貼り付けんでも良い。
今時定数を左に持ってくる人達は、>>201のような理由で左に持ってきているわけではない。
左に書いたほうが目立って言いと考えたから、左に持ってきているだけ。
それ以上でもそれ以下でも無い。目立つか目立たないか、ただそれだけ。

>>202
visual studio の初期状態ではそうですよ。



208 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:02:06 ]
>>204
ケースバイケースで、繰り返し文がforになったりwhileになったりdo-whileになったら
読めない人ですか?
ケースバイケースで、分岐がifになったりswitchになったりすると、読めない人ですか?

209 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:04:08 ]
>>206
改行しなくても一緒だよ。
・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) ){

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL){
は、エディタ上では同じに見えるからな。
俺も通常は改行させないな。

210 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:04:58 ]
おまえら一晩中こんなくだらない論議してたのか?
夜はちゃんと寝なさい。

211 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:06:48 ]
だいたいさ、定数なんて右でも左でもどっちでも良いだろ。
それより、do-whileの方が気持ち悪くないか?
いやマジで。
do{
}while(exp); ← このセミコロンとか。
これは良くて、定数左は駄目とか言ってるやつって、どういう思考なのかわからん。

212 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:09:18 ]
>>209
「,」で終わってたらその後に続くのはいやでも解るでしょ
端を見ようとしないのはそいつの責任だよ

213 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:16:44 ]
>>208
そうだよな
繰り返し文なんていっぱいあるもんなー

#define loop(x) for(int iloop=0;iloop<(x);iloop++)
#define twice loop(2)
#define infinite for(;;)
#define never for(;0;)
#define strpatrol(s) for(char *strpatrolp=(s);*strpatrolp;++strpatrolp)

214 名前:デフォルトの名無しさん [2007/10/27(土) 04:16:58 ]
>>205
だんだん苦しくなってきたね。論理が破綻してきたよ、キミ。今夜が山だ。

>後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
>こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
>考える人も多いだろう。


215 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:17:24 ]
俺がなぜ定数が右にしているか考えてみた
a=1;は「aに1を入れる」と読むなら
if(a==1)は「aに1が入っているなら」と読むからであって
=と==を混同させたいんだよ
そもそも混同させたくて同じ記号を使ってるんじゃないかと思えてくるほどだよ

216 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:17:37 ]
>>212
続いていても、==NULLがあるかないかは、スクロールしてみるまで判らない。
引数がそれほど重要でない場合なら、スクロールを惜しむかもしれない。
実際、もうへとへとの状態でプログラムを読んでる場合だってあるわけで。
他人の責任だから関係ない、とは言っても、プロジェクトが停滞すると、
結局自分も巻き込まれるわけで。誰の責任かは正直どうでも良い。

217 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:19:59 ]
>>205
おいおいw

それじゃあ、>>193が全くの主観で何の根拠も無いって事を白状しているだけじゃないかw
で、より良い例として挙げられているコードでは、定数が右側に来ているのは、軽くスルーですか?
FAQを根拠に!strcmp()を否定するなら、よりよい書き方についてもFAQを根拠にしたほうがいいんじゃないかね?




218 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:20:57 ]
>>214

>後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
>こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
>考える人も多いだろう。

のどこをどう読んだら、

>C lang FAQ に if (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいと書いてある

という意味になるの?
ねぇねぇ教えて。中学生とか? 日本語読める?
「〜の方がまだマシ」という表現を使っているわけだから、よりベターな方法があることも
暗に示しているのだが。

219 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:21:09 ]
NULLとかなら見りゃわかるからいいけど
変数っぽい面して実はconstでしたみたいなのが右や左にいるとうざいから
ある程度統一するのはいいんじゃないの?

220 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:21:41 ]
>>216
だから、単体テストをすればちゃんとエラーは検出できますよ。
テストをやらないって企業文化なら、仕方ないかもしれませんが。


221 名前:デフォルトの名無しさん [2007/10/27(土) 04:21:52 ]
あした早起きして遠足だってのに・・・

こんなくだらない事で眠れなくなっちまった・・・

222 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:23:30 ]
>>203
だから、なんでNULLとポインタを比較するのかが問題なんだろ
ポインタが有効なのか無効なのかを知りたいんであって、NULLと比較してポインタがどうなのかを調べたい人は誰一人居ない

定数が左にあって、唯一読みやすいのは、変数が一定の値の範囲内にある事を知りたい場合のみだろ
それ以外で、定数が左にあっても、読みにくいことはあれ、読みやすく感じることは有り得ない(そのコードを書いた奴だけは、読みやすいのかも知れないが)


223 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:26:28 ]
>>208
例えば、10回処理を繰り返す部分で、
for (i = 0; i < 10; i++) {}

i = 0;
while (i < 10) {
i++;
}
の両方が適当に使われたとしたら、読む人は苦労するだろうな。
forとwhileの使い分けにどんな意味が隠されているのか悩むだろうか。


224 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:26:29 ]
==の話ばかりするからダメなんだ
一時的に条件式を無効にしたくなったらどうする?
誰だってif(0&&condition)って書くよな?
定数0を左に書いた方がいいことは分かり切っている

225 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:27:25 ]
>>217
>>193 の 後半は余談だよ。
if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね、てこと。
それならまだ定数左派の方が信用できるよねって。
ロジカルに何か述べているわけではなくて、単に人格批判です。

だけど、if (!strcmp(str1, str2)) {} なんてコードをシレっと書いちゃうやつの言うことなんて、
信用できないよね。読みやすいコードを書くためのスタートラインにも立ってない。

226 名前:デフォルトの名無しさん [2007/10/27(土) 04:28:03 ]
>>218
もうヤケクソ?

>>193 「〜の方がまだマシ」

そりゃ確かに、「〜の方がいい」 とは書いてないけど。
「いいとは書いてない、マシと書いた」ってアンタ、小学生の喧嘩レベルやんw
眠いの?

227 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:28:33 ]
>>224
書かないよ。




228 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:29:43 ]
>>220
何いってんの?
だったら初めからコーディングなんて拘らなきゃいいだろ。
どうせ単体テストするので、好きにやればいいじゃないという話になる。


229 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:29:50 ]
つーかさ
もうif(0 == a || a == 0)でよくね?
右にも左にも定数が来てて完璧だろう

230 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:31:12 ]
>>225
> if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね
根拠は?

単に俺が気に食わないだけ、なんて言わないよねw
もしかして、==とか<とか>=なんかが書いてないと、条件文が理解できない人ですか?


231 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:31:43 ]
>>224
//if (condition)
if(0)

232 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:32:32 ]
>>216
引数よりも==NULLの方が重要ならifの中に
関数呼び出しを丸ごと入れたりなんてしないでしょ

人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
そんな人のケアをする自信なんて、俺にはないな

233 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:32:51 ]
>>222
ポインタが有効か無効かを知りたい、と考えることも出来るし、
逆に、有効なポインタなのか、無効なポインタなのか、と考える人も居るかもしれない。
どっちで考えてもいいし、何の問題も無い。

234 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:33:34 ]
>>228
単に、「プロジェクトが停滞する」に対する反証をしただけですよ。
こんなことも読み取れないなら、ひとまず睡眠を取って、頭をクリアさせたらどうですか?

え、クリアさせても今と変わらない?
それは、もう、どうしようもないかな。


235 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:35:06 ]
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆          ___________
      ∧_∧ | |         /          / おらっ!出てこい
     (   )| |_____    ∧_∧   <  Cマガジン ●田
     「 ⌒ ̄ |   |    ||   (´Д` )    \ おまいのせいで、こんだけ・・・
     |   /  ̄   |    |/    「    \      ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |

236 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:36:29 ]
こんな醜い争いが二度と起こらないように
C++0xでは定数をLvalueにしてもらうしかないな

237 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:36:45 ]
>>233
無効なポインタがどれかを調べたいなら、
if (NULL == xxx)って書いたほうが分かりやすいかもね。




238 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:37:29 ]
>>223
後者のケースだと、for文を使うべきだよ。
whileを使う時は主にカウンタ変数がいらない時だな。
forとwhileを使い分ける人が居るように、
定数を右に書いたり左に書いたりする人が居ても良いだろ。
そして、定数が左だからってそんなに怒るほどのものでもない。

239 名前:デフォルトの名無しさん [2007/10/27(土) 04:40:31 ]
電車の座席に座るヤツが居るように
電車の床に座ってもいいだろ!
公園のベンチに座るヤツが居るように
コンビニの駐車場に座り込んでもいいだろ!
そんなに怒るほどのものでもない。

240 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:43:02 ]
>>226
眠いのはお前だろ。眠くてしょうがないお前が勝手に勘違いしただけだろ。
「AよりBの方がまだマシ」という言い方をした場合、
「Bが良い」と主張しているということには決してならないよ。

糞と尿、どっち食うかと言われて、
「糞より尿の方がまだマシ」と答えた場合、
「尿が良い」と言うことにはならないだろ。

要はお前が勝手に勘違いしてるんだよ。
お前みたいなおっちょこちょいが居るから、文句言われようとも、
わざわざ定数を左に書かざるを得なくなる。その辺わかれ。

241 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:43:16 ]
もう「比較演算子の左オペランドに定数を置く奴は死ね」スレでも立ててそっちでやってくれんかね

242 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:46:20 ]
>>240
おまえ、実は>>80だろ?
もう、定数を左に置いても苛めないからさ、どこの会社かだけは教えてくれ。
お前を真人間に教育するよりも、関係を持たないようにする方が、遥かに安上がりだわ。


243 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:46:23 ]
寿司食いたいフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ

244 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:48:19 ]
if (0 == a)
  ↑  ↑
  糞  尿

245 名前:デフォルトの名無しさん [2007/10/27(土) 04:49:43 ]
俺なら尿を選ぶ。糞はちょっとな・・・

246 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:52:19 ]
>>230
230は単に釣りだと信じたいのだが・・・。
strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、
正真正銘、整数としての戻り値を返す。
だから整数と比較するべき。
意味上も型上も正真正銘整数なものを、
ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。

逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。
Cの禁じ手全部 OK じゃね?
定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。

247 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:58:36 ]
やばい、真性のキ印だったのか。

>>246
そもそも、Cにはboolなんて型は存在しないぞ。
ifとかの条件式は、単に0か非0かを見ているだけ。




248 名前:デフォルトの名無しさん [2007/10/27(土) 05:01:44 ]
>if (!strcmp(・・・)) と書くのが一番わかりやすい
てのは、いくら何でも間違いだろ。
勢いで書き込んだ後、おっといけね、strcmp だった〜orz ってとこだろね。

249 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:02:52 ]
>>232
>引数よりも==NULLの方が重要ならifの中に
>関数呼び出しを丸ごと入れたりなんてしないでしょ
そうとは限らんよ。関数として見れば、関数が大事だし、
if文として見れば、条件が大事だ。

>人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
>そんな人のケアをする自信なんて、俺にはないな
改修するならしっかり読むが、さらっと目を通すだけという場合も有るだろ。
おっちょこちょいなやつは何処にでも居るもので、そういう奴が変な勘違いを起して、
面倒を起したら困る。
実際、このスレにも自分の反論しようとしている相手の文章すら、
まともに読まない奴が居るわけで。
んで、自分のミスなのに、「お前の書き方が悪い」と開き直る。
だから、自分から相手が読みミスらないような書き方をする必要が出てくる。
結局こっちにも火の粉は飛んでくるからね。

250 名前:デフォルトの名無しさん [2007/10/27(土) 05:05:45 ]
最高にド低脳な発言してください in ム版(XVII)
pc11.2ch.net/test/read.cgi/tech/1179424842/

125 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/27(土) 05:00:40
 strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、
 正真正銘、整数としての戻り値を返す。
 だから整数と比較するべき。
 意味上も型上も正真正銘整数なものを、
 ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。

 逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。
 Cの禁じ手全部 OK じゃね?
 定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。

↑最高にド低脳な発言!

251 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:09:05 ]
>>250
ワロタ

自分で「ド低脳」って認めてどうするw

252 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:09:26 ]
>>234
だから好きにやれば良いじゃん。

ウマいコードってのは、プロジェクトが停滞しづらいコードだろ。
逆にヘタなコードってのは、プロジェクトを停滞させるコードだろ。

あなたにウマいコードは必要ないじゃない。

253 名前:デフォルトの名無しさん [2007/10/27(土) 05:10:09 ]
オチがついたところで、また明日。おやすみなさい。

254 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:11:08 ]
>>239 は コンパイルエラー

255 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:13:27 ]
>>242
違う。
この議論は前スレから永遠と続いている。
というか、このスレは今現在俺だけで持ってるようなものなんだけど、
前スレからの流れを見てもらえれば、俺が>>80でないことは分かる。
物事への認識のレベルが違いすぎるからすぐ判るはず。

256 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:18:14 ]
>>247
boolが無いから整数で代用しているんだろ。
>>247の2行目に、
>boolを整数で代用している
という文がちゃんと入ってるだろ。
単に整数値といっても、C言語の場合は、意味の上では、整数だったりboolだったりするから、
その辺は使い分けるべきだろ。
その程度の意識も無いのに、ウマいもヘタも無いね。
そういうやつは定数が左にきたぐらいでグダグダいう立場に無い。
糞食いながら、「しょんべんマズー」と言ってるようなものだ。

257 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:27:13 ]
つーかもう今日は寝る。
返事はまた明日気が向いた時に返すかも。

今日は張り合い無かったなぁ。
if (!strcmp(str1, str2)) {} が 汚いって事すらもわからないような奴では、
ちょっと流石に相手にならないよ。
そういうやつが、他人のコードを綺麗汚いと、いきり立ってるのかと思うと、泣けてくるね。
身の程をわきまえるべき。

>>250>>125 をド低脳スレに貼ったらしいが、この始末どうつけるつもりなんだろうな。
他の右派(というか、単なるアンチ俺、もとい、暇つぶしの友)が可愛そうだ。



258 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:35:47 ]
仮にif (!strcmp(str1, str2)) {}がif (0==strcmp(str1, str2)) {}に劣るとしても、
if (0==strcmp(str1, str2)) {} がif (strcmp(str1, str2)==0) {} に劣ることには変わりないのに。

259 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 07:33:42 ]
変数左辺派による工作
ja.wikipedia.org/w/index.php?title=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E4%BD%9C%E6%B3%95&diff=15617960&oldid=13976161






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<89KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef