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


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

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



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

過去スレ
その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/


357 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 14:29:26 ]
あー、プログラムの文脈以外に、識別子に意味もつけられたら便利かもと、唐突におもた

358 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 16:23:43 ]
boolean型で変数名 flag

これ最強。

359 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 23:58:23 ]
俺の bool b とどっちが強いかな??

360 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 00:08:23 ]
5行くらいの関数で使うんならアリだぜ。

20行越えてたら殺す。

361 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 00:12:51 ]
悪い、40行くらいのコードでも普通に使い倒してる。
二回死んどくから勘弁してくれ。

362 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 00:31:39 ]
許す。

363 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 00:54:44 ]
String s = new String();
s = "foobar";

364 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 00:57:24 ]
void foo() throws Exception { ... }


365 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 06:28:02 ]
今時、for文でループまわしているのを見たとき



366 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 07:10:51 ]
>>365 kwsk

367 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 07:35:18 ]
>>366
eachとかforeach使えってこと。
iteratorでも可
まあ、今時、それらができない言語は時代遅れだと思う

368 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 07:44:09 ]
階乗の計算をeachやforeachで書ける?

369 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 08:58:17 ]
>>368
もちろん、書かない。
わざわざ適していない方法で書く必要はない。
そういうときは、適している方法で書く。
例えば、再帰で書く

370 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 09:15:02 ]
for文でループまわす必要があるのはリストよりはマップ。
キーと値を特定の順序で取り出したい場合は eachやforeachは弱い。

371 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 09:15:39 ]
若者の都会かぶれが流行ってると聞いちょるがここまで進んでるたぁ、おれぁもうガマンならねぇ!
出直してけぇな>>369さん!

372 名前:386 mailto:sage [2006/10/08(日) 09:26:45 ]
>>368
そういうのはfold_left系の関数の出番だな。
 ruby
(1..n).inject(1){|x,y|x*y}
 C++
#include<boost/iterator/counting_iterator.hpp>
#include<numeric>
#include<functional>
int fact(int n){
    return std::accumulate(
        boost::make_counting_iterator(1),
        boost::make_counting_iterator(n+1),
        1,std::multiplies<int>());
}

373 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 09:28:24 ]
>>372
おっと名前欄にほかのスレの数字残ってたな。
その辺はスルーしといてくれ

374 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 10:01:34 ]
うあ、面倒くさっ!

375 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 10:04:28 ]
> (1..n).inject(1){|x,y|x*y}
うぉ。こんな風にかけるんだ



376 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 10:09:03 ]
haskellだと
factorial n = product [1..n]
haskell万歳!

>>372
int fact(int n)
{
 int res = 1;
 for(int i=2;i<=n;++i)
  res *= i;
 return res;
}

と書いたら「ヘタだなぁ」と思われるの?

377 名前:372 mailto:sage [2006/10/08(日) 10:25:22 ]
思われない思われないw 俺もネタ以外では普通にそうやる。
関数型言語っぽいやりかたはC++ではまだまだ面倒だからね。

378 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 11:02:23 ]
普通に末尾再帰で書けばいいじゃん。
#include <cstdio>
#include <cstdlib>

template <typename T> inline T factrial(int n, T s = 1)
{
return n > 1 ? factrial(n - 1, s * n) : s;
}

int main(int argc, char ** argv)
{
printf("%d\n", factrial<int>(atoi(argv[argc - 1])));
printf("%.20g\n", factrial<double>(21));
return 0;
}

今時のコンパイラならループに展開するだろ。

379 名前:デフォルトの名無しさん [2006/10/08(日) 11:41:00 ]
末尾再帰の最適化って関数型言語限定だと思ってた…
今まで再帰のほとんどをループに直してた僕の努力は一体orz

380 名前:デフォルトの名無しさん [2006/10/08(日) 11:52:17 ]
Javaで、
引数、ローカル変数をできる限りfinalにしてない
コードをみると

あ、こいつはダメだ。

と思う。


381 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 12:17:21 ]
引数までfinal化する必要があるかは程度問題だと思うんだが。
ローカル変数も同じ。

Java使ってまでC++と同じ流儀で徹底しないでもいいだろ。
C++でconstつけない奴は尻が二つに割れるまでチョップの刑だが。

382 名前:380 [2006/10/08(日) 12:37:24 ]
>381
いや俺はできる限り、あらん限りの方策で
すべてfinal化するべきだと思っている。

383 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 13:24:59 ]
うむ

384 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 13:47:24 ]
Delphiで、引数にconstつけて周る俺がきましたぉ

385 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 13:59:43 ]
なんでconsomeはないの?



386 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 18:29:22 ]
>>376 378
下手かどうか以前にバグってるぞ

387 名前:378 mailto:sage [2006/10/08(日) 21:01:10 ]
>>386
どっかバグってた?
#関数名以外でw

388 名前:デフォルトの名無しさん [2006/10/08(日) 22:09:01 ]
C++でクラスにする必要のない処理をわざわざクラス化してるとき

389 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:21:19 ]
>>376 ++i  を使ってる時点で俺的にoutなんだが

390 名前:デフォルトの名無しさん [2006/10/08(日) 22:23:22 ]
*=ってなんでつかwwwwww

391 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:27:46 ]
>>389-390
素人は帰れ。

392 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:35:47 ]
resはどこで確保されてるか

393 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:37:08 ]
>>389
C++の勉強をしましょう。
>>390
Cの勉強をしましょう。

394 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:37:52 ]
>>392
>390が指摘している行の2行上。

395 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:44:24 ]
はいはい、i++と++iは同じです。



396 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:50:20 ]
>>395
C++の勉強をしましょう。

397 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:56:04 ]
>>396
その話題飽きた

398 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:00:15 ]
勉強しても++iとi++は同じであることがわかるだけだけどな。

399 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:02:50 ]
>>398
C++の勉強をしましょう。

400 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:03:40 ]
先に加算するか後で加算するかの違い
なんて関係ないことがほどんどだよな

401 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:05:07 ]
C++の勉強をしましょう。

402 名前:デフォルトの名無しさん [2006/10/08(日) 23:06:31 ]
>>376がC++で書いたとは限らない

403 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:23:53 ]
>>402
C++ですが、なにか?

404 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:29:36 ]
>>401
何が違うのか説明してみろ。

405 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:30:20 ]
この場合は何もかわらんな



406 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:30:37 ]
しょうがないな、正解を言うぞ、
i++; は tmp=i,++i,tmp; という命令、階乗は ((1 + n) * n) / 2 で求まる。

うはっWWWオレ天才WW

407 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:33:43 ]
中学の数学の勉強をしましょう。

408 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:35:01 ]
>>400
i++の式値はi
++iの式値はi+1

前とか後とかじゃない、式値が違うだけだ

409 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:37:01 ]
>>408
で、>>376の文脈で違いはあるのか?

410 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:38:00 ]
>>409は400か?
>>400では>>376に言及してないぞ?
急に文脈を無視して>>376に関連付けられても困る

411 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:39:06 ]
>>410
流れ嫁

412 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:39:31 ]
shine!

413 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:42:05 ]
0!が考慮されてないって意味じゃね?

あと++iとi++は戻り値が違う。

414 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:42:45 ]
>>413
で、>>376の文脈で違いはあるのか?

415 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:43:12 ]
>>414
無いね
それがどうしたの?



416 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:44:30 ]
>>415
別に。
じゃ、この話題終了。

417 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:46:23 ]
ここはぱっと見のコードの質を云々するスレなのだから、充分違うと思うが。

418 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:46:27 ]
ところで int *iってして、*(++i++)はどんなのになるの?
文脈的に考えて

419 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:46:53 ]
何が違うの?

420 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:47:49 ]
>>418
Cを勉強しましょう。

421 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:49:29 ]
>>420
答えられないということですね。

422 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:50:33 ]
夏だなあ

423 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:50:33 ]
「〜しましょう」とか言ってる奴うぜー

424 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:51:25 ]
鹿児島商

425 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:56:18 ]
>>418
「i++が右辺値になり、それに前置++を使用しているのでコンパイルエラー」だと思う。



426 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 00:07:48 ]
なんかこの話題最近見たきがするなぁ。

427 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 00:10:16 ]
C++におけるpre/post incrementの知識を披露したいんでしょう。

428 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 00:10:45 ]
このスレの80%はループでできて略

429 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 01:31:43 ]
しかし無知が間違いと確信してるとこを指摘して
突っ込まれているところをニヤニヤしてる分には
ループでもいい

430 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 17:31:25 ]
>>429
あんまり生産的なやり取りじゃないから
見てて気分よくないけどな。

431 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 17:42:01 ]
馬鹿がうつるってのはあるけどな

432 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 03:04:39 ]
つまり良くねーんじゃねーか。

433 名前:あぼーん mailto:あぼーん [あぼーん]
あぼーん

434 名前:349 mailto:sage [2006/10/11(水) 10:48:49 ]
あぁ、ここに書き込んでたのか。
クラス名・変数名スレに書き込んだつもりだったんだけど
どこいったんだかわからなくなってた。

で、だ、これ、適当にしたほうがっていうのは
名前に関して2時間とか3時間とか1日とか悩んでも
結局変更することになるんだからほどほどにしとけって意味。

# ていうか、俺が悩んでつけた名前って言うのは
後から見るとピントはずれなことが多い。

リファクタリングをしないって意味じゃない。
Cだとリファクタリング大変だけど・・・。

435 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 16:25:58 ]
もういいって。



436 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 22:28:55 ]
>>434
>俺が悩んでつけた名前って言うのは
名前で悩む前に設計がそれで適切なのかを考えてはどうか。
どの変数・関数がどんな役割を持つのかハッキリしないから
どんな名前つけて良いかが分からない。
役割がハッキリしてればその役割をそのまま名前に落とせば良い。

命名に詰まる時は、設計見直しのサインだよ。

437 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 01:49:11 ]
他人が書いたコードを整理していると、しばしばネーミングに困る。

438 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 02:47:24 ]
>命名に詰まる時は、設計見直しのサインだよ

悩んだ末にすっきり名前が決まると、なんつーかこう、宿便が抜けたような爽快感。
それだけで仕事が終わった様な気持ちになれるな。

いや、冗談抜きで名前が決まった時点で仕事の何割かは完了してるわけなんだけどさ。

439 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 21:34:09 ]
lpszStrButtyakeBuririant0001->getSTRLFSPACETABCOMMA(index)->getSTRCONTROLSHIFTTAB(index_ind)->getChar(index_chr);

440 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 15:46:28 ]
うわー。。。

441 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 18:35:19 ]
malloc 関数で確保してるのに開放は delete 演算子。
2つのメンバ関数間でしか使われてないのでスタック割り当てで十分なはずだが、なぜかメンバ変数。
単体の画面アプリで外から呼ばれるはずもないのに、全てpublic関数。
const の検索結果0件。#DEFINEすら使ってない。何もかもリテラル。
default 句のない switch 文。default が不要な理由などどこにも書いてない。
JOIN すれば一発なのに、単体テーブルアクセスを内部で毎レコード繰り返してるDB参照処理。

どう見ても作り直しです。本当にありがとうございました。

442 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 18:41:50 ]
つ ラップしちゃえ!

443 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 04:26:42 ]
malloc(strlen(p)))

444 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 01:52:02 ]
>>443
それだけ見ても、下手かどうか判断できないが。
例えばfgets()の直後に、改行文字を取り除いた文字列の複写を得たいのなら、妥当じゃないか。

445 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 13:04:04 ]
>>444
その処理なら strdup でいいと思うが。



446 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 18:14:51 ]
>>445
strdup がなかったら?

447 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 18:40:47 ]
↓ strdup無いなんてどんな環境だよ
↓ ○○環境にはないんだよボケ
↓ だったら自分でやりゃいいだろボケ
↓ ○○も知らないくせに下手なコードとか言うなボケ
↓ (グダグダな流れが続く)

という予感

448 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:39:16 ]
>>446
>strdup がなかったら?

malloc(strlen(p)+1) と strcpy だな。

449 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:48:18 ]
>>448
長さ覚えといてmemcpyの方がだいぶ速いことがあるよ。

450 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:02:11 ]
for(;;){
if(judge){
break;
}
〜〜〜
〜〜〜
}

451 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:09:22 ]
>>450
そういうのは終了条件( if(judge){ break; } に相当するトコ)が
複雑になる可能性があるときに書くことあるなぁ。


452 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:13:26 ]
>>451
理解の範囲を越えています。

453 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:21:05 ]
>>443
コンパイルエラーじゃね?

454 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:53:55 ]
>>453
その根拠は?

455 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 23:53:49 ]
閉じ括弧が1つ多い。



456 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 01:01:21 ]
セミコロンがない

457 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 11:19:53 ]
セミコロン
は文の区切りです






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

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

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