1 :
仕様書無しさん :
2007/08/14(火) 23:48:45
for(;;) System.out.println("
>>1 乙");
while(!1) printf("
>>1 \n乙");
あらすじ 西暦2922億年、人類は滅亡していた。 天皇陛下は長生きしてください。消費税の増税には反対です。 つーかもうスレ終わりじゃないか
>6 終わらせてどーすんだよっ!! (1..1000).each {|n| puts ">1乙"}
2000億年後なんかどうでもいいが、天皇なんて近い将来死ぬって分かってるんだから 元号の処理くらいちゃんとやっておけよ
>(1..1000).each {|n| puts ">1乙"} ↑これ糞コードっぽくね?
一瞬何語かわからなかった俺にはどうでもいい
まぁ 1000.times { puts "乙" } でいいな。
puts "乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙乙"
while True: print "乙"
そういやだいぶ昔に星新一が 2001年になったら「日扇(にせん)」と改元すればいい なんていってたなぁ
今は年号も数十年は続くけど、江戸時代以前なんてコロコロ変わりまくりだったんだぜ その頃の日本人にとっては時間の概念はそこまで重要ではなかったんだろうけどな
大規模な天災があるたびに改元とかな。
17 :
仕様書無しさん :2007/08/15(水) 05:15:45
For i=0 To 2
Print "
>>1 乙"
i=i-1
Next i
税率、元号以外の時限爆弾って何があるかな?
道州制とか? まだ当分先だろうけど
ISBN13桁化でちょっと大変だった
改修費用が発生する(=仕事が発生)から税制改正は賛成。 増税は反対。 消費税は円周率派。
そういや「ケータイ、PHS、11桁〜♪」なんてCMが流れた頃もあったな
>18 サマータイム
俺は関わったことないけど、市町村の合併(の特例)(→市町村コードの新設・廃止)は まだ継続中らしいね。
買掛金の支払管理で 銀行合併の大ブームにぶちあたって 支店情報も含めての統合機能が 土壇場で追加になって死ぬかと思った。
>>15-16 改元が数年に1回とかが当たり前だったら、
最初からそれを織り込んで作るでしょう。
昭和天皇が長生きだったからな ついつい、天皇はいつまでも生き続けてるんじゃないかって錯覚に陥るのさ
>>18 人工キー、自然キーって言葉おれも最近知ったけど、人工キーは全部爆弾になりえると思ったほうがいいね。
それは人工キーの作り方があまりにヘタクソなんじゃないか?
>>30 まちがえた。人工キーと自然キーが逆だった。
前スレ989 >いまだに内部は昭和で動いてるシステムもありそうだなあ もし年2桁で今昭和64+18=82年・・・ あと18年か。 むしろ元号変わるタイミングでリプレースできりゃいいけどな。
東大前にある喫茶店を思い出した レジがやたら古くて 380円のものを注文すると3.80と印字したレシートになる 380円を3円80銭と入力して今でも使ってるんだよな 趣があっていいぞ
>>32 18年後には、内部は昭和で動いていることすら忘れ去られていそうな罠…
てか、それまでに1回くらいはリプレースのチャンスあるでしょ。多分…
紀元もあと30年くらいか。
カフェ本?
37 :
仕様書無しさん :2007/08/15(水) 23:47:49
元号って単に、表示時等に動的に充てるだけであって 元号込みのデータを内部で使ったりはしない・・・・よな さすがに無いと信じたいw
コボラが 01 GENGOU 05 MEIJI PIC X(3) VALUE "メイジ" 05 TAISYOU PIC X(5) VALUE "タイショウ" 05 SYOUWA PIC X(4) VALUE "ショウワ" 05 HEISEI PIC X(4) VALUE"ヘイセイ" みたいなことしてるかも…
>>38 ある。それを知っているからこそ、話題になるんじゃまいか?
そいやJavaもやっと年号ロケールをランタイムのレベルで対応したんだっけ? 遅いよな。
去年の6でJapaneseImperialCalendarが実装されたな。 いままでIBMのICUしかなかった。
ルオーだろ。
>32 昭和127年や昭和255年までなら大丈夫じゃないかなw
COMP-3で持ってるかも・・・
カフェ本は喫茶店じゃねえだろ
public xl as Object
HogeHoge=HogeArr(i)(j)(0) FugaFuga=HogeArr(i)(j)(1)
それは進駐軍が放出したレジなのかと。
>>39 こら、キャラ数合わせないと帳票ずれるでしょ
すまん出力領域へMOVEするから関係ないのな。
つーか
>>39 コンパイルエラー
行の最後は必ずピリオドで終わるなんて信じていると F通COBOLでは痛い目見るぞ。 コンパイルエラーすら出ないで通るし...orz
随分コボラが多かったんだなこのスレ。
58 :
仕様書無しさん :2007/08/19(日) 18:26:31
コボラは老害。死ぬかさっさと去るべき。
滅びても 第二・第三のコボラが・・・・
コボラは滅びぬ。何度でも甦るさ。
ロ○テ コボラのマーチ
立ち位置的にはオロナミンCぐらいじゃないの? なんでまだ残ってるんだコンナモンみたいな
有毒だな。食べた会社は死んでしまう
残ってると言うより、企業によっては増え続けてますよ。
癌細胞みたいだな。w
なんかコボラの描いたソースは無条件にこのスレテーマに該当しそうな勢いだな。
コボラ出血熱
スペースコボラ
エボラに失礼
刃こぼら
「コボちゃん」 の名前の由来って・・・
コボルで動いてるからでしょ?
田畑小穂だっけ?
COBOLが動くのか凄いな
去年までUNIXでCOBOLつかってましたよ。 その時点でやめたくなりました。
あんな糞言語があんな高価な理由が解らん<COBOL
>61 マーチはマーチでもデスが付くマーチなんだろうな…
糞言語というよりは「古代言語」と言うべきかな?
フォートランもそう呼ばれることはあるけど、コボルよりは読みやすいね
で、その古代言語で書かれた古文書の解読に今日も俺はいそしむわけだ…
富士通日立はCOBOL好きだからなぁ
COBOLの新しい規格って現場じゃ使われてるのかな?
知らんフフフフフフフフフフフフフフフフフフフフフフフフ
ああ、ここもついに犯され始めたかフフフフフフフフフフフフフフフフフフフフフフフ
コボラ捨てたいフフフフフフフフフフフフフフフフフフフフフフフ
寿司食いたいフフフフフフフフフフフフフフフ
いあ。いあ。ふんぐるい むぐるうなふ こぼる ふたぐん
本当の悪夢はコボ会社が唐突にJAVA開発始めたとき マヂシヌル
Javaで(辞めたいほどの)糞コードって書けるの?
伝統の数千行main()とか、catch(Exception e){} とか 興味深いコードは沢山あるぞ
本物のコボラはどんな言語の上でもCOBOLプログラムを書ける。
どんな言語もCOBOL風にやっちまうんだよな 変数も定数も全部大文字とか 数値をいちいち文字列に変換してから処理とか
>>88 ガリでも食ってろフフフフフフフフフフフフフフフ
VBみたいな自動文字整形されちゃうのは無理だろとか思ってたら コメントに大文字英数でCOBOL訳が書いてあった。
すげぇ執念((((;゚Д゚))))
∩(・∀・)∩いあ!こぼる!こぼる!!
COBOL対訳付きのソースなんて・・・
訳が許されるのはアセンブラまでだよね〜
コボラの執念は異常
怨念だろ...
上司「新しい案件の話なんだが、某社にてコボルで作成された古いシステムがある」 俺「(あー、リプレースか・・・)」 上司「で、そいつが寿命と言う事もあり、リプレースの時期にある。」 俺「(流行でJavaでWEBとか言うんだろうな、糞)」 上司「そこで、新しくコボルでリプレースする事になった」 ・・・・は? 俺「いや、自分も周りもコボル使える人なんていないんですが・・・」 上司「大丈夫。俺でも読める」 辞めるかな、この会社。 って辞めたくなった上司の一言のネタだな、こりゃ
COBOL ON RAILS
ACAX
皆大文字使うんだな、流石だ。
>106 逆行しとるがなw
C言語において、、、 ヘッダファイルにグローバル変数が"定義"してある。(externはなく、staticでもない) そのヘッダは #ifndef XXX_H の様な記述は無く、多重includeの対策は無い。 標準ライブラリで定義済の変数を、何故か自分で定義している。 バグがあり、症状も現れている。(テストしてないだろてめぇぇぇ) 潜在バグも既に発見されている。(ローカル配列のポインタを返すなど) 必要も無いのに、全レコードを読み込んで保持する。(reallocを繰り返す) そのreallocは ptr = realloc(ptr, size); 文字列リテラルの連結 "AAAA" "BBBB" をいちいち、strcatなどで連結する。 一つめのifで確定した条件をネストしたifでもう一度聞いている。 関数一つが数百行。 ifやfor/whileのネストは8段階くらい。 コメントアウトされた部分が、実際に生きているコードより長い。 原則1プログラム1ソースファイル。 など。
111 :
仕様書無しさん :2007/08/22(水) 00:18:02
>>92 >catch(Exception e){}
ん、これ何か問題が?
>ヘッダファイルにグローバル変数が"定義"してある。(externはなく、staticでもない) gccなんだろうかねぇ・・・。
>>111 例外の握りつぶしは犯罪
100歩ゆずってもログに吐け、なにが起きたか解らないだろ・・・
「全盛期の糞コード」スレみたいな ・あまりにコンパイルエラーが出るからエラーでもバイナリ生成 ・ソースファイルを保存しただけでOSがフリーズした
115 :
仕様書無しさん :2007/08/22(水) 00:23:47
>>113 再スローすれば握り潰しにはならないぞ。
エクセプションは例外の種類別に処理するのが望ましいというだけで・・・。
オマエの発言は厨臭いな。
>>115 > catch(Exception e){}
このコードのどこが再スローしてるんだよw
情報漏えい対策とかで、爆弾みたいなツールを導入された なにかやる度に動き始めて、PCの起動に約10分 ソースは全て暗号化されているから、都度解凍しなくてはならない パスワードも凝っていてフザケンナ で、ソースも暗号なんですよw
>>115 >catch(Exception e){}
ブロックの中身を省略してレスしたわけじゃなくて、
ホントに何の処理もしないcatchが入ってるってことじゃないか?
>>115 > catch(Exception e){} ←
跡形もなく握りつぶしてますがなw
> catch(Exception e){} の時点で糞だろ 再スローしたとしても、throws Exception と記述するハメになる
シェルスクリプトにて、 複数あるシェルスクリプトの共通的な環境変数も、いちいち其々に書く。 テンポラリファイルを消さない。(消すJOBを別定義してある) 変数を必要もないのに環境変数化にする。 必要もないのにawkなどを使いたがる。 引数かリダイレクトで済むのに、なぜか cat file | grep ..など シェルスクリプトを「シェル」と(ry
122 :
仕様書無しさん :2007/08/22(水) 00:29:50
>>116 あぁ。すまんな。
このスレでは過去から何度も(Exception e)について議題に上がってたんだよ。
もう、ずっと前の過去スレから。
そんなトコにツッコミ入れるとは思いもよらなかったよ。
>>122 思い込みでソース書きそう。
しかも自分の思い込みが常に正しいと思ってるな。
一緒に仕事したくないタイプ。
と思い込みにより断定してみた。
禿同
125 :
仕様書無しさん :2007/08/22(水) 00:43:51
>>109 それがさ、情報処理試験の選択肢から
PL/I が既に消えてるからって理由らしいんだよ…
確かに COBOL はまだある…あるけどさ…?
>>127 オマエのようなバカで厨にはちょうどいいんだよ。
catch(Throwable e){}
そこまでやればもう拍手をやりたいなw
>>113 会社に握り潰しどころか、正常値返して何事もなかったかのように振る舞うソース書くツワモノが……
でも、返す値が出鱈目だから、結局駄目なんだけど
>>131 それは正常値を捏造してんじゃなくて、
エラーの時はエラーコードを返すって
懐かしい習慣を今の世に伝えようと
しているんではないかと。
で、コメントにエラーコードとエラー内容の
対応が書いてあったりしてなあ。
>>132 いや、理解しがたいかもしれないがマヂ
例外起きるとDBの値を適当に持ってきてやがった
orz
>>110 > そのreallocは ptr = realloc(ptr, size);
何か問題が? realloc ってそういうもんだよね。
reallocならmemcpyもしてくれるし。
memcpyが要らない場合でも、memcpy は普通無視できる程度の時間しかかからないし。
> 文字列リテラルの連結 "AAAA" "BBBB" をいちいち、strcatなどで連結する。
場合によってはそういうのもアリじゃないか?
目くじら立てるほどとは思えん。
もちろん、バッファ境界を気にしてなくてバッファオーバーフローが起きるなら別だが。
俺C++使いだが、stream に連続して << 操作したり、
std::basic_string<T> に連続して += したりするぞ?
その方が意味が明確になる場合もあるからな。
>>135 realloc() が失敗したら漏れる。
>>135 文字列リテラルは並べて書くだけで連結できる。
>>134 それ、プログラマーとしてってより
人間として失格だよ!
>>136 reallocが失敗するような状況で、それが何の問題が?
ptr1 = realloc( ptr, size ); if( ptr1 ) { ptr = ptr1; } else { // ptr に有る情報は何かに使う } とか? もっとも malloc() がコケた以上先の処理がまともに動くとも思えんけど しかし1レコード読むごとに realloc() してたら殺したくなるな
>>110 のようなソースの修正やってて文句言いながらやってたら
リーダーに「人のソースにいちいち腹が立つような人は要らない。他にも人間はいる」
とかいわれて別チームに振りなおされた漏れ
まさかそのソース、お前が書いたのか?
出来ることって、せいぜい free して、 アプリケーションを終了するくらいだな キャッシュとかのためにメモリバカ食い設計になっているプログラムなら、 キャッシュを解放して再挑戦する価値はあるかもしれないが、 それでもフラグメンテーションがすごそうだからやっぱり何も出来ないかもしれないな
/* ここから先は見ちゃイヤン */ ってコメントがついた、そりゃーもうすんばらしい若気の至り満載な関数がorz
>>142 >free して、
>アプリケーションを終了
やめとけ。
(以下、例のループ)
さぁ、fjに行こうかw
>>120 int a = 10; // default value
try {
a = Integer.parseInt(aStr);
} catch (NumberFormatException e) {}
はやるなぁ。
147 :
110 :2007/08/22(水) 20:19:19
realloc と文字列連結の話は、
>>136 ,
>>137 の通りです。
mallocで最初に150MB程度確保、その後reallocで25MBずつ拡張、最終的に350-400MB程度まで確保です。
reallocで失敗したらすぐ終了してるんですが、reallocとかmallocで確保した領域は、
freeしなくても、プログラムの終了時に自動解放される(または場合が多い)、
との事ですが実際のところどうなんでしょうね?
>>141 あなたを苦労させているのは、私じゃありませんよ。
私も(心の中で)グチりながらやってます。
>>146 場合によるけど起こりえないならRuntimeExceptionでラップして投げとく方がいいし、入力側でチェックしたり先に変換しておくほうがベターだろ
>>148 その入力時チェックと、NG時の値の設定を同時にやりたいんだろう。
と言うか俺もやるよこれ。楽で。
もちろん、すごい回数やるような時には使わないが。
全角通っちゃうけど
職場じゃないし議論しても意味はないけど 例えば「20」と間違えて全角で入れてしまった場合、ユーザーには何の警告も出さずにデフォルトの10に設定されてしまうが、それでいいの?
いい。 指示されてない以上それでまったく問題ない。 気を利かせて作ってあげてもまったく感謝しないのだから、そこは追加料金貰う。 それが業界標準。
そりゃ、そんな会社は辞めたくなるな
知識も技術もない奴が書いたならば仕方ないとも思うが、解っていて書くのマとしてどうよ?
>>147 fj.lang.c malloc free でぐぐる。
>>149 にしてもちょっと判りにくい。
catchの中で10を入れてもらった方が
やりたい事が素直に伝わる。
ユーザーは間違いを指摘されると苛つくもんだ。 黙ってデフォルト値のほうがマシなケースも多い。 金とか命がかかってるなら別だけどね。
でもデフォルト値に変更されたことを報知する仕組みはあったほうがいいよな
間違いを指摘されて苛立つと文句くるくらいなら入力させなきゃいいんじゃねw
一般的なユーザ ↓ ヤダャダー! 〃〃∩ _,,_ ⊂⌒( `Д´) `ヽ_つ⊂ノ 間違いを指摘されるのは _,,_ 〃〃(`Д´∩ ⊂ ( ヽ∩ つ でも黙って デフォルト値を入れられるのもいや 〃〃∩ _,,_ ⊂⌒(つД´) `ヽ_ノ⊂ノ 可愛い彼女も欲しい … ∩ ⊂⌒( _,,_) `ヽ_つ⊂ノ ... ... zzz… ∩ ⊂⌒( _,,_) `ヽ_つ⊂ノ
>でも黙って >デフォルト値を入れられるのもいや >〃〃∩ _,,_ > ⊂⌒(つД´) > `ヽ_ノ⊂ノ 大丈夫だよ、君は気づかないw >可愛い彼女も欲しい 禿同
162 :
147 :2007/08/23(木) 00:29:06
>>162 釣り? またループしたいの?
あなたの使おうとしているOSや処理系のマニュアルを読みなさい。
Cの規格をいくら読んでも無駄。
「fj行こう」=「富士の樹海行こう」だと思った
え?違うの?
166 :
仕様書無しさん :2007/08/24(金) 11:53:53
そんな貴方に uwarite
167 :
仕様書無しさん :2007/08/24(金) 20:56:34
うわらば
少しは関数名を考えろと思った int fuck() { //何かのチェック処理 }
func fund fune funf fung funh 連番にするなと言っておいたら、こんなん書かれた事ある。 書いた奴はぶん殴ったのは10年以上前の思い出
「funeです。来週のサザエさんは、funf, fung, funh の三本です。」
俺だったら褒めてやるけどなwww
どんだけ天邪鬼w
for (int i = 0; i < nSize; i ++) { //設定値読み込み Dokjinoyomikomikansuu(); //正式名称は忘れた //処理・・・ } ってのを見たことがある。同じ設定を何度も何度も、ループで読んでる。 しかも、そのループ自体が別の関数からループで呼ばれている…… 設定情報って一度だけ読めばよかったんじゃないのか?
ちなみに、設定値読み込みはファイルから読み込んでいる。
別スレッドで設定が更新される可能性があるんでしょ。ないんだろうけど。
>>171 来週もまた、見てくださいねー!
fungっfunf
179 :
仕様書無しさん :2007/08/26(日) 01:27:45
会社の業務システムの年号が昭和。 印刷すると伝票が昭和で出てきて、みんな修正テープで手修正。 直すように俺が投入されたが・・・スパゲッティだし・・・
20年近く放置かよwwww
出力直前に63引いて平成にするだけってことでなんとか・・・・
それ「だけ」のことすら簡単にいかないのが スパゲティのスパゲティたる所以かも。
>>179 それって最近の話?もう平成19年なんですが...
古いシステムでソースも見にくいものに限って、仕様書/設計書もない。
ってパターンかな、、、
だろうな。 印刷した紙の隅っこに昭和と平成の変換式を出力汁
いやもう、印刷だけの処理なら、新しく書き直しちゃった方が早いかもね。
>185 印刷だけで1実行モジュール? 何を呑気な まず間違いなく入力参照更新印刷、全部1つに詰め込まれてるだろうさ。 昭和時代のスパゲッティにMVC分離なんて念仏にもならんよorz
だろうなー 大丈夫だろうと63引いてみたらば、予期せぬ所で計算が狂うとか確実に出そうだ
年をループカウンターに使ったりとかあったりしてなw
夢は膨らむなw
190 :
仕様書無しさん :2007/08/26(日) 05:03:34
悪夢だな…
どうせなら西暦に直せよ。 4桁にするのは無理っぽいかも知れんがな…。 年号だとまた変わるぞ。
192 :
仕様書無しさん :2007/08/26(日) 07:15:37
>>187 その - 63 を書くべき場所が、1ヶ所ならいいけど
どうしてみんな元号が好きなのかよくわからん。 規定かなんかあったっけ?
官公庁の風習
JCLの印刷機に対応したDD文をファイルに変更。 そのファイルを読み込み、昭和=>平成変換プログラムに通す!
キリスト教国でもないのに キリスト暦を使うわけにもいかんだろ
ここはユリウス通日で通すしかないな。
神武紀元があろう
防衛庁納入では必須だよ
unixタイムでいいよ
わかってたらもっとマシな回避方法を取れとw 変換が増えて面倒そうだし
>>202 予測しておきながらそんな解決方法を取るってのはアホだな。
分かってて何もしないのよりもよっぽどマシだと思うがこれは酷いww
一瞬「2038年問題よりも先まで耐えられる分マシじゃん」と思ったが、 time_tもそろそろ64ビット以上で定義するのが当たり前になってきてるんかな。
いくらなんでもこのシステムやコードはリプレースされてるのでは? 1970年代だし…
そういって動き続けているコードがどれだけあることやら
#include "stdafx.h" class f{public:void oO(char*c){printf(c);return;}}; int main(){ f(O_O); (O_O).oO("定時まであと1時間半、どうやって潰そう・・・。") ;for(;;);return 0; } 仕事しろ仕事。
>>211 ボイジャー2号は1977年打ち上げ
それ以前に起動完了して未だに動いてるのは知らね。
ボイジャーとかはレアケースだろとかいわれそうだけど 普通の業務システムで30年以上動いてる相手に 仕事したよ。 足りない機能をJavaで作ったんだけど、なんかMQとかで つないでるらしい。 リプレースすりゃいいじゃんって話にはなかなかならないって。
「動いてるものは下手にいじくるな」つーのが鉄則だし
そして手遅れになる
派遣だが、思いっきり派遣先に内緒でソースコード全部書き換えたよ。 あまりにも糞過ぎるコードなんだもん……期限は特に切られてなかったし、 少々時間かかっても、ソースコードが書き換わって、試験成績書と設計書(もちろん、なかった) が添付されてればOKだよな? 別に全部書き換えるなとは言われてなかったし。 たかだか、2,3万行のプログラムだったし……
相談もなしってのはなぁ
信頼され具合とか仕事の任され具合とか会社の文化とか 他にも色々と絡んで来るだろうけど 一般論だとNGだろうなぁ。
どこかに話通さないと大変そうだなぁ
内緒ってのはマズいよなぁ。
話通そうとしても絶対NG返ってくるだろうしなぁ
あ、言っておくが指示そのものが曖昧だったんだぞ。 おまけに、結果論だが改修よりも工数がかからなかった。 さらに、バグも減りまくった。 ついでに言うと、改修要求のうち一つがかなり深い部分までプログラムを書き換えないといけないところだったために、 全改修でなくても、どのみち、同じぐらいの改修は必要になっていたよ。 まぁ、でも相談は必要だったろうな……
まあ、相談せずにやっておいて、承認でたら置き換えて終了ってのはよくやる。 指示が曖昧で何も決まらず時間だけが過ぎているから、とりあえず改修してしまっておくのは仕方ないわ
まぁ味方になってくれそうな上司に前のものと新しい設計書渡して「こんなんどうですか?」 とか聞いて、説得して、「実わ出来てるんですが」とか
>>224 > さらに、バグも減りまくった。
減りまくってもゼロじゃない限り、何か起きたときに責任問題になる。
「以前のソースを改修すればこのバグは無かったんじゃないのか?」とかとか...
相談しておかないと結局は痛い目を見る事になる。
揚げ足取る奴はどこにでも居るからな。
> さらに、バグも減りまくった。 この言い回しで程度が知れるな。
229 :
仕様書無しさん :2007/08/28(火) 10:40:13
ソースコード云々より、まず給料が出ないので、、、
230 :
226 :2007/08/28(火) 12:50:00
これさ当人以外に、「問題なし」と思っているやつはいるのか?
「問題なし」は知らんが「やむなし」はいそう
勝手に修正し後日別料金請求して 「おまいは悪徳リフォーム屋か」 と褒めて欲しかっただけじゃないかなと思ってる
>「実わ出来てるんですが」 馬鹿?
既存プログラムの修正:如何に少ない修正で所望の変更を行うかに全力を注ぐ 新規プログラム(既存に類似機能あり):如何に少ない追加で所望の機能を得られるかに全力を注ぐ 新規プログラム(既存に類似機能なし):如何に似せたソースコードで所望の機能を得られるかに全力を注ぐ 新規プロジェクト:好きなだけ新しい手法・コーディング・クラス設計その他をぶっこんで、決まったルールに従い好きなようにコーディングする 以上俺ルール
やむなしはあるな、どうやっても直せなそうなコードってあるだろ、あべし製とか
>既存プログラムの修正:如何に少ない修正で所望の変更を行うかに全力を注ぐ >新規プログラム(既存に類似機能あり):如何に少ない追加で所望の機能を得られるかに全力を注ぐ 典型的な失敗プロジェクト
>234 漏れなら設計、実装(修正)、試験、(客や上司・メンバーへの)説明、 のトータルコストで考える。
あべし(ノ∀`)
>>234 >既存プログラムの修正:如何に少ない修正で所望の変更を行うかに全力を注ぐ
悲しいかな、漏れもそれを考えてやってるだ。
コードの修正箇所増=ドキュメント増&確認工数増とかって理由でな。
理想をいうと、所望の変更ってのが当初から与えられていたとしたときに書くコードを、
修正のときにも書くべきだと思ってるんだが。
理想と現実のギャップが大きすぎるなあ。
>>234 めっちゃリアルやな。
ソースレビューやってソース管理して技術者を萎縮させてるNECや日立がやりそうなこと
>>235 「直せる人、手を挙げて〜」ってやって誰も手を挙げなかったから、リーダーが折れて
作り直しになったことがあるな…。既に玉砕者が2人くらい出てたし。
読むだけで狂いそうになるくらい、糞なコードだった。
> ソースレビューやってソース管理して これが技術者を萎縮させるのか・・・?
ソースレビュー&管理は必要だと思うんだが、 ソース読まない(読めない)人にレビューさせると、うるさくてかなわんと思うことはあるかな。
異常なソース管理するとうんざりだなw
異常な「ソース管理」? 「異常なソース」管理?
修正箇所は「修正begin/end」のコメントで囲む。 元のソースはコメントとして残す。 diffも残す。 なんて管理があったな。 svn使っているのにヽ(`Д´)ノ
マイクロソフトにもメンテあきらめたコードがなかったっけ? Java関係のIEモジュールかなんかで。 第一人者の大学教授に開発してもらったけど、他のプログラマがメンテできないコードなので、 サポート終了することにしたって話。
それがどうした?
過去ソースの復旧作業で納期前の1週間を潰した俺が通りますね
Hoge val; val = new Hoge(); if(hogeDict.TryGetValue("a", out val)) { val = HogeDict["a"]; ... }
だってvalが好きなんだもん!ほっといてくれよ!
>>250 何言語か分からんけど、察するに、
アウトパラメータなのに、直前にインスタンスをわざわざ作ってる。
ってあたりが嫌なのだと見た。
そして成功したら多分、valには既に HogeDict["a"]が入っているので、
if内 val = HogeDict["a"]が不要。
憶測ですがあってる?
bufなアナタはC/C++派。 tmpなアナタはVB派。 foo/barなアナタはPerl派。 ローマ字なアナタはCOBOL派。
>>253 ローマ字以外当てはまる私は何派でしょう?
ごった煮派
カオス派
ファンタジーと呼ばれるものをするよ派
ビューティを紡ぎ奏でるよ派
260 :
仕様書無しさん :2007/08/31(金) 23:41:31
懐かしいなw で、結局するの?
$url="doc_root"; $url="doc_root"."img/game"; $url="doc_root"."img/game"."/m"; $url="index.php"; header(Location : $url);
まて下から2行目は書き損じじゃないんだな? 本当にこの通りなんだな?
>>246 「だって印刷したときに履歴が追えないじゃないか。」
(cvsやsvn=ソース共有ツールという認識っぽい)
中には、納品物が揃って初めてコミットなんてプロジェクトも…
そうしないとCVSのリビジョン番号が揃わないからだってさ。
>>263 うちはもっと緩いから良いのかも知れないけど、
時々CVSとかにコメント無しでコミットする人を見ると
粉炉したくなる...
と言うか、氏ね と思わないこともない。
実行もしないし、思わないんだけどね!
>>263 なるほどリビジョンをタグがわりに使うわけか。
新しい。
あーでも次のリリースは どうせリビジョンそろわないじゃん。
どっかにスペースでも入れて、本質的に変わらんモンをcommitしなおしたりすんじゃねーの?
インデント調整とか本質は変わらんでも、意味がある修正もあるがな
リビジョンが1つ上がることに、空行のスペースが1個ずつ増えるんだよ
>>269 どっかのメールソフトみたいだな。
「 Re:Re:Re:Re:Re:Re:」
「印刷したとき」のために プログラムとして必要なく、可読性を下げるコードを残すのか┐(´・∀・`;)┌
関数のヘッダーコメントに 「関数内で呼び出してる関数(標準関数とかは除く)の名前と機能を書け」 って指示がプログラム完成後に出た。 俺以外の人が書いたソースは1関数500行以上とかなんで それぐらいたいしたことないね、みたいな感じなんだけど ある程度真面目に関数分割した俺はすごくガッカリ 俺だけ量多すぎて手伝ってもらうことになったんだけど 「なんでこんな手間のかかる書き方するんだよ。 センスないんじゃないの?」 って言われた。手伝ってもらってる手前、反論もできなかった まさか自分が書いたソースコードがきっかけで会社辞めようと思うことなるとは
かわいそす
>>272 >1関数500行
これ後で読む人もかわうそす
>>272 その指示の意図が全く解らん
上司も1関数500行タイプで嫌がらせされたとしか...
>>275 1関数500行だから、何やっているのかわからなくて
レビューできなかったんじゃないか?
長文読んでいただきありがとうございます
指示の大元は客
1関数500行を苦にするのは俺ぐらいで他の人は全員平気
なんで
>>274 かわいそうなのは俺ぐらい
新人もこういう書き方がプロなんだと思って育つ
>>275 意図は多分なし
少なくとも俺個人攻撃はなさそう
>>276 レビューなんかしない職場
仮にレビューなんかやったら
「お前のソースはあちこちに処理が飛ぶから読みにくい」
って俺が吊るし上げ食らうだろうけど
職場を変えるか変わるかどっちかにしなきゃ。 まぁとりあえず頑張れ。
頑張っては駄目だ
だいたい完成後にコメントとはいえソースの変更を易々と受け入れるようなところは話にならない
その話にならない会社が多いから話になる訳で・・・
コメントの条件が
「そのコメントを見て同等の関数をかけること」
なら、
>>272 が圧倒的有利なんだけど、
そういう理想論は残念ながら(業務の世界では)現実には即していないからな……。
500行の関数とかだと、関数名から動作の推定は厳しいだろうし
コメントも内容を全然表していないだろうしな…。
#define IF if( #define THEN ){ #define ELSE } else { #define ELIF } else if ( #define FI ;} #define BEGIN { #define END } #define SWITCH switch( #define IN ){ #define ENDSW } #define FOR for( #define WHILE while( #define DO ){ #define OD ;} #define REP do_lbr #define PER }while( #define DONE ); #define LOOP for(;;){ #define POOL }
ワラタ
むりくり違う言語にしようとしてるのかwww
Steve Bourne キタコレ
288 :
283 :2007/09/04(火) 17:32:23
ちっ、ばれちまったか。
ん?もしかして、このプリプロセッサ使って sh書いたの?うわー。
>>283 こんな感じでC言語モドキのソースが大量生産されている職場とか普通にあるから困るw
懐かしいな、このホンどこいっちゃったかな。
#define MOD(M, N) (M-(int)(M/N)*N) #define RAND(N) MOD(rand(), N) #if 0 #define randn RAND #else // MODが直るまでこっちを使え int randn(int n) { int x; do { x = RAND(n); } while (x >= n); return x; } #endif
>>293 直るまでといっても、randnの中でMODが使われてる気配。
#defineの引数がかっこで囲まれてないから 優先順位が低い演算子がきたら項が分断されて、あぼん。
MODなんて自作する必要あるん? %じゃだめなんだろうか
だめなんですよ。
シェフのこだわりである。
なぜに?
レポーターはそう尋ねた。
なぜに?ってベル研究所の人にも いってやりたいよなw
modで少数以下?
MODで小数って新しい概念だなぁ
少数の何が新しいのかわからん俺に詳しく。 3.5 mod 2 = 1.5 とか普通だろ?
>305 それを小数以下というのか・・・ 何だかなぁ(。-_-。)
java で試したら、 3.5 % 2 == 1.5 だったよ。
とはいえ、近似値である小数の剰余って使いにくそう
mod本来の意味から外れててなんだか気持ち悪いです
小数点以下ならfmodでいいんじゃ?
会社を辞めたいとは思わなかったが… ある案件の障害対応で、カバレッジを通そうとした時、用意されたテストケースで どうしても通らないところがあって、実際には業務的に通らないと判明した時、泣きたくなった。 更に、もう1個の修正対象ソースはそのソースのコピペな上に、今度はテストケースがコピペ。 おまけに、今度は通らなかったロジックを通す必要がある。 不審に思って以前にテストした担当者に聞いてみたら、 丸々のコピペだからかたっぽはテストしていないと判明orz ええ、泣きながらテストケース作り直して全部通しましたとも。 あん時、顔は笑っていたけど、目に殺意が入っていたかも・・・
>>316 そんなんで鉄拳制裁していた手がいくつあっても足りないな、うちの会社の場合。orz
クロスカウンター方式を提案します。 一定期間ごとに実施すれば各期間で必要な手は最大でも一つでとても経済的です。 導入されてはいかがですか?
テストケース 〜〜であることを確認する ○ ←レッツコピペ!! 〜〜 〜〜 〜〜 〜〜
○×は面倒だからどうしてもコピペになっちゃうな まだOKNGのほうがいい
システム全体がフランケンシュタインを髣髴とさせるコピペばかりのソース もちろんドキュメント一式も上記怪物の生まれ変わりのよう 現在も増改築の真っ最中
で、ある日突然崩壊する。
if (a == 0) hoge(); みたいなコードがあったら、 条件:a == 0 → 結果:hoge()をコールする のように、コードそのまんまのテストケースを書くように指示されていたので、 言われたままに書いていたけど、バグの数も基準があって、バグが0だとまずいといわれた。 こんなテスト仕様書で、どうやってバグをだすんだよ。
俺が昔やった方法を教えてやろう。 つ テスト仕様書にバグを含める バグの発生率が2〜5%程度にならないと、充分に試験ができていない、と見なす某大手
>>324 >>323 は、テスト仕様書も、コードと突き合わせながらレビューをして、それでOKをもらう必要があるので、
そのワザは使えません。
仕切ってる人が、単体テストの意味を取り違えてるとしか思えない…
そういう事なら、その仕切ってる人がバグだな
>>325 出来上がった成果物を信用していないというか、
ソースコード自体を信じてないみたいなテスト仕様書だな
ソースコードをじゃなくてコンパイラとか言語そのものを信じてないんだと思うよ。
>>323 じゃないけど
hoge = "test";
で「hoge変数に test という文字列が格納されていること」
みたいな試験項目を見たことあるから分かる
ちょっとつきあった某社:「コンパイラを信じてなにかあったらどうするんだ?」って、 未だにASMオンリー。 しかもそれがルネサスとかじゃなく、LSIC80でさえも。 親分がJRじゃなければとっくにつぶれてるぞ。
そこまで言うなら、 「アセンブラを信じてどうするんだ?ハンドアセンブルだろ....」 って言い返せよ。
多分最適化でおかしくなっちゃうコードでも書いてるんだろ
332 :
仕様書無しさん :2007/09/07(金) 07:53:07
「機械を信じてどうするんだ!手で計算しろ!」
333 :
仕様書無しさん :2007/09/07(金) 08:15:09
ICなんか信用ならん タイガーを使え!
他人なんか信用するな! 頼れるのは己の力のみ!
そこ、開発成果のリリースまでどれくらいかかってるんだろ?
>>329 RADを要求される案件が多いので、VBやC#にどっぷりの漏れ。
ASMでどれほどのRADができるのか知りたい。
336 :
仕様書無しさん :2007/09/07(金) 11:27:54
どんな開発環境で作ってもプログラムは最終的に機械語になるわけで、 既存の開発環境でできる事は機械語と1対1対応できるアセンブラにできない事はない
マ板でコスト無視な発言はイタイですよ
どの板でもネタにマジレスは痛いんだぜ
>>335 そんな馬鹿丸出しのことを言っているのは上の方だけで、現場では普通に
Cで開発、上には -S したアセンブリソースしか見せない、みたいな予感。
>>327 そもそもそのソースが本当に仕様を満たしてるかどうかがわからんのに
なんでソースを中心にテストを作るのか
きっと辞めたくなる会社の上司だな
>323 どーしよーもない場合は 「テストケースを想定して、そこで見つかるようにわざとバグらせておく」 もうちょっと前向きな意図で、「ベバッグ」と称してそういうことをすることがある、らしい。201の鉄則本にあった。 この場合は……hoge();の前に;でも入れておくかな。
それはコンパイル通らんような気が
テストを別の人がする時には、テストする人をテストするバグを混ぜることもあるよね 境界条件の以下と未満を置きかえるような、まともにテストすれば必ず見つけられる簡単なバグ ただ、バグを入れたことを忘れる俺のバグが問題なんだよな
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| この 故意バグ一覧.xlsとはなにかね?
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・ハ・) ∧ ∧ < あ・・・いや・・・・
( ⊃ ) (゚Д゚;) \_______
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\|
>>346 |\
 ̄ ======= \
仕様の正に要の部分がバグってる(別の案件のテスト中に見つけた)のに、 1年以上も、バグのまま動いてるプログラムがある。 テスト実績はすべてOKで残っている。 実質、業務では使っていない項目ということで、放置したままだ。。
でもバグ一覧は作っておいたほうがいいな 報告済みかそうでないか分かるだけでも安心感が増す
>>349 作るな!
バグ・トラッキング・システムを使え!
おれ、バグ見つけるのも再現させるのも、そしてそれを直すのも得意なんだけど、 何故かみんなから嫌われてる...orz
人には「自分とは異質なもの(自分に出来ないことをやっちゃう奴・ 自分には理解できない話をする奴・自分の知らないことを知ってる奴) を嫌ったり排除したりする」傾向があるからな...しかも馬鹿な野郎ほどその傾向が強い。
その傾向に陥ってないか自問自答するのは容易じゃないよね.
354 :
仕様書無しさん :2007/09/08(土) 10:11:13
351じゃないけど、 バグ出しを続けた結果、そのシステムは作らなかったことになったことがあるな。 一つ直させると二つ壊れてくるというゴールドラッシュだったな。
1つで2つならば少ないんじゃない? 少しでもいじるとシステムが動かなくなるのがデフォってのもあるわけで・・・
>>350 開発部署で用意されてるBTSに入れてるんだけどさ、見てくれないし全部スルーされちゃうんだよね
>>356 それはきっと
バグ
たっぷりで
際限が無い
からだよ
>>350 でも結局報告するときは結局BTSからバグ一覧を作成することになる場合が多い希ガス。
csvとかで。
>>358 なるよな。。
なんか紙で出てこないと不安らしい。
我慢できる限界がエクセルの一覧表。
しょうがないから、BTSのxmlからcsv吐き出すスクリプト組んだよ。。
余計な仕事させやがって。
/* if いふ else えるす while わほいる? do どー fopen ふぉーぷん fread ふれっど fwrite ふうらいと fclose ふくろーず */ なにこのカンペ……
「わほいる?」に萌えた 語感がかわいい わほいる
微笑ましいが・・・・他所でやって欲しいな
/* */ ってVC2005だと 行選択時の//の一括付加・削除のときに巻き込まれて /* → * になったりするから使いづらい ゲイツ死ね
/*横綱.c/* #include <朝青龍.h>
>>360 do どー
fclose ふくろーず (梟?)
がチョット好き
>>365 /* 横綱.c/* これコメントとして間違ってない?
下の行もコメントアウトしてるのか。
どう見ても間違ってますw
>>360 ふくろーずってバンドの名前みたいだなw
きっと甲本ヒロト。
ギリギリガガンガン
ソースというよりmakefileなんだけど、 依存関係が間違ってるとか、は当然のごとくあり。 今日見たのは、 CFLAGS= としてオプションも消しているのを見た。 コメント化してデフォルトを有効にすると、警告がでるわでるわ。 コンパイラを誤魔化すためにやってるんじゃないかと思った。 もともとバグのあるソースだし、表面的にでも動くように、見なかったことにしました。 (ほんとはバグも表面化してるけどw)
今更だけど、なんで日本のソフトウェア業界ってこんなに壊滅的なの?
どこの国も変わらんと思うぞ。 派手さでいえば米国の方が上だし。
C言語で作ってあったプログラムで、makefileでヘッダの依存関係が無かったので depend追加したら毎回全てのソースがコンパイルされるようになった。 なんでかな〜、と思って調べてみたら、依存関係のトップにあるヘッダが make時に毎回自動生成されてやがる。 こんなmake環境にした開発者、氏ね。
>>373 米国の場合は、それを埋め合わせるセンスがあるんじゃないかと思ってる。
着眼点や、機能のまとめかたやUIの作りなどのセンス。
これがスマートだと、バグが判明しても、使い続けざるを得ないという気になってしまう。
使い物にならない奴が志望してくるのがいかん。 大学で切り落とせ。 アホに単位をやるな。
未経験者をいきなり実戦投入するとひどいのが出来上がる。 俺自身「今ならもっと上手く書けるのに」「あの時これを知ってれば」って思い出すことがある。 そんな自分と比べても、酷すぎるのが今の職場...orz
>376 そこでFizzBuzzですよ
新人が使えないのは仕方ないが 使えないベテランが沢山いる、不思議なこの業界
>379 「ベテラン」というのが履歴書に書かれた経験年数に基づく呼称でないのなら 確かに不思議だが
使えない奴は派遣するってことで
>>374 正直makefileって規模でかいとよく分からなくなるのがデフォというか
新たな仕様にしてほしいぐらいだ
今のパソコンなら速いから、全コンパイルのbatでもすぐ終わるでしょ。 俺はmakeとbatと両方用意して、「makeを知らない保守者はbatでいいよ」と書き添えてる。
扱うファイルが、100個ぐらいとか、依存関係がシンプルなものだけなら、makefile もまだ手軽で良いけどね。 それ以上で makefile 使ってるプロジェクトに関わると眩暈がするな。 世の中、もうちょっとマシなものが、いくらでもあるのによりによって makefile かよって。
>>384 んなもん、規模や開発環境によるだろ
うちのプロジェクトはフルコンかけると2時間くらいかかるぞ
重要なヘッダが更新されると、すぐにフル逝っちまう orz
ヘッダの切り分けがおかしいんだろ
フルコン2時間って携帯? 規模に対して環境が貧相な現場って他に浮かばないんだけど 昔、入った携帯の現場で warning が10000超えたのは笑ろた
少ねえ少ねえ
コンパイルのバグか何かで、6万後半あたりでwarningの数が一旦0になったこともあったな。
臨海値65535か 16bit unsigned
コンパイラをバグらせるとは・・・ コンパイラ「想定の範囲外です・・・」
臨海値
むしろfloatで
今はlong long があるじゃまいか!
遊戯、もうやめて! コンパイラの示す warning は既に臨海値よ!!
const TYPE const*const&;
/* index.html */ #html head() { style;style.css } body() { test. } #html
これは新しい言語
#define head nanntoka #define style kanntoka #define css kanntoka #define body foo #define test bar #include "index.html"
#include "mychtml.h" int main() { html( head(title("Test Page")), body("Hello, world !!!<BR>\n") ); }
Const Arr = "a,b,c,d" function aaa() for i = lbound(split(arr,",")) to ubound(split(arr,",")) if split(arr,",")(i) = "a" then aaa = split(arr,",") end if next end function こんなん
ソースコードがスパゲッティ!でもそんなの関係ねぇ!
これはあれだ、きっとsplit呼び出しの結果が全て同じだと判断して、 自動的に一回の呼び出しに纏めてくれる、素晴らしいコンパイラが存在するんだよ!
それでも最適化なら・・・最適化ならきっとなんとかしてくれる・・・!!
探すと本当にあるから困る
最適化? こんぱいる? くっふふふ VBScriptというものは ひとたび構文木にさえ解析されてしまえば 二度とは 二度とは
スパゲティと申したか
#ifndef Hoge typedef struct tag_Hoge { (略) } Hoge; #endif え〜っと。
・・・きっとCは初めてなんだよ。 先週入門書を読み終わったばかりなんだ。 きっと、きっと・・・
ifndefが嫌いだ なんでifnodefじゃねぇんだ ややこしいよ #if !definedのほうがマシだ。 どうせ多重防止とかだったらpragma onceで事足りるからいいけど
>>412 そのソースの意図がさっぱりわからない。
#define と typedef を混同したのだろうか…
>>414 リリース版を表すNDEBUGの方が…
標準に従うと、デバッグ版のみ有効にするのに
#ifndef NDEBUG
...
#endif
と否定が2回来て嫌な感じだ
結局可読性とかで _DEBUG が使うんだけどな
って脱線しすぎか。
NDEBUGは<assert.h>が見るんだっけか。
そういうレベルが普通なのか?
>>415 ,418
??。何をやろうとしてるのかすらさっぱりわからんのだが・・。
>>420 たぶん
>>415 の言うとおり#defineとtypedefを混同してるんだと思う。
・・・typedefを何回も呼ぶつもりなのか???
後から呼んだ方が有効になるなら、実害はなさそうだけど・・・
と思って試してみたら、さすがに名前が衝突してるってエラーが出た。
「Hoge」がまだ定義されてなければtag_Hoge型の構造体としてHogeを定義、ってことだろう 何をしたいと思ったかは分かっても何に使うはさっぱりわからんw
Hogeが定義済みだったときにどんな動作をするんだろうな
なるほど、こういうレベルが普通なんだな……
425 :
仕様書無しさん :2007/09/21(金) 13:07:19
public String getErrorMessage() { // TODO 自動生成されたメソッド・スタブ return null; }
Cで継承とかしようってことかな。 #include "FooExt.h" #ifndef FOO #define FOO typedef strcut foo{ method1, method2, }Foo; #endif で、FooExt.hとかで typedef strcut foo{ method1, method2, method3, }Foo; #define FOO とか。。 考え過ぎか?。
>>425 ???
・・・catchしたいのかなぁ・・・
>>425 が何を言いたいのかさっぱりわからない
これってIDE(eclipse,netbeans,etc)で自動生成されたメソッドでしょ?
納品されたソースにこんなのがあったら嫌だけど、開発中なら腐る程あるよ
private String errorMessage; から自動生成されたのは分かるが戻り値がぬるぽ
もう辞めた会社のソースだけど、何年も運用を続けてきたシステムの仕様変更があるからと、 俺も参加することになったときに、一月に現行処理のバグを200くらい報告したことがある。 仕様変更自体よりバグとりの時間の方が長い位だった。 そのためだけに一月くらい時間をもらえたのが幸運だったけど。 あと今の現場。JSPのソースが全部スクリプトレット。全部 out.println とかで書いてありやがる。 ほとんどCGI気分だっ。
>>428 保守するコードを開いてみたらTODOだらけってのはよくある話。
藤堂さんのおおいしょくばなんだね…
手順書はsudoさんだらけだしな
作業始めたら安藤さんのお世話になりっぱなしだ
うちには後藤さんが多いから困る
んなこたー知らねーよ
三木だったり後藤だったりする
// クローズ処理 if(rs != null){ rs.close(); rs = null; } (;^ω^)・・・
旧VBっぽいアレだな
もうやめたけど前の会社 面接でC++が出来るかどうか聞かれて、出来ますと答えて入社。 引き継いだコードの cout を printf で書き直したらただの C になった。
>>438 これはwindowsのリソース関係の処理?
windowsはよく知らないけど、きっと delete this; してるんだよ。そう願いたい。
>>438 javaではよく見るな。
優先的にGCの対象にするためにわざと参照を外しているらしい
>>443 インスタンス変数に持つとかアホな状況でなければ、変らないけどなー
そうなんだけど、今のプロジェクトでは 必要でなくなった変数にはnullを入れるというコーディング規約 さらにハンガリアン記法も強制 定数名が60文字以上ある状態なのに80文字で折り返し強制 ほか多数 バカ(というか時代遅れ?)が上に立つとろくな事にならんという見本
446 :
仕様書無しさん :2007/09/23(日) 13:08:40
長くても分かりやすい名前をつけろというけどさ、 その上でコードは80文字で折り返せって言うのも訳が分からん話だな。
>>445 なるほど、改善提案もできないコミュニケーション能力の欠如した引っ込み思案の自分を
棚上げしてこんなところで文句を垂れる君はバカではないんだw
60文字の定数のどこが分かりやすいんだ?
450 :
仕様書無しさん :2007/09/23(日) 14:06:28
451 :
仕様書無しさん :2007/09/23(日) 14:32:22
CHogeClass::CHogeClass() { delete m_pPtr; ... } いきなりdelete。 リリースモードだと奇跡的に動くがデバッグモードだと動かない。 そこで、コードを修正するのではなく全員リリースモードだけで開発し始めた。 当然数ヵ月後僕はその会社にいなかった。
453 :
438 :2007/09/23(日) 14:56:56
>>439 >>442 >>443 >>445 438です。
コメント部分が冗長すぎただけで、処理事態は問題はないです。
rs に null を入れるのは メモリ使用量の多いオブジェクトを、
早めにガーベージコレクションの対象にするためで
間違ってはいないと思います。
ただそれだけでした><
454 :
仕様書無しさん :2007/09/23(日) 15:04:54
455 :
仕様書無しさん :2007/09/23(日) 15:06:41
>>453 コメントも別に冗長じゃないけど。
他の処理との兼ね合いで書いているだけでしょう?
//ここでクローズ処理してます。ガベコレ対策でnullいれとります。
//なにか問題でも?
とか書いてあったら冗長だけどな。
無意味なコメントはよくあるよな。 // ストリームを開く。 public OutputStream openStream() { ...; } アホか。
457 :
仕様書無しさん :2007/09/23(日) 15:16:15
>>456 コメントを抽出するソフトとかあるんだけど、それは知らない?
よーし、修正しちゃうぞ。 //! ストリームを開く。 public OutputStream openStream() { ...; }
>>457 抽出して削除&書き直しするの?
僕のばあいは、もともとソフト会社じゃないから、Delphi、shのスクリプト、C、C++、C#、JavaScript、MATLAB
、WindowsScriptとか、あとNastran等々みんな適当なコードが残ってる。
「お前出来るだろ」ってほとんどコメント無しでの糞コードでくるから、リファクタリングとかだけでも
「無理っす。無理っす。無理っす。」を連発してる。
てか、いろいろ言葉が通じない。みんな言葉が通じるだけましだよ。
461 :
仕様書無しさん :2007/09/23(日) 15:51:28
>>459 それは奢りだと思うよ。
誰でもコード読めるわけじゃないしね。
「このブロックでは、○○の処理をしています」って書いてある事で
とりあえず数十行が簡単に読み飛ばせるなら、その方が効率がいいのは自明。
あなたの理想は以心伝心っと同じで、まあある種ありえない理想だと思うよ。
それ言ったらドキュメントも折衝も要らないからね。
全ては「ソースみろ」で済む。
実際はそうあいかないよ。
462 :
仕様書無しさん :2007/09/23(日) 15:53:25
>>460 抽出してドキュメントを作る参考にするんだよ。
それで処理のサマリーが分かれば、読むときに楽でしょ?
仮に明日全く知らない言語の修正依頼が来たらどう?
適切なコメントがあったら、楽だと思わない?
言語の勉強をゼロから初めて、それからソース読むよりはさ。
日本人で
>>459 を実践したい人には
「なでしこ」
ちょーお奨めです。
>>462 書いてること正しいと思うけど、
”言語を全く知らない人”を想定してコメントを書くって作業は(個人的に)勘弁して欲しい。
466 :
仕様書無しさん :2007/09/23(日) 16:22:27
>>465 だから、それがセンスとバランスなんだって。
//ファイルオープン
//読み込み
//整形
//出力
とかブロックごとにあったら、知らなくても概要は理解できるし、
知っている人にも(余程無能でなければ)邪魔にもならないでしょ。
全く知らない人に完璧に理解させるのは無理でも、手助けにはなる。
VBAとかExcelマクロも数えると、過去にやった言語は20くらいになるし、
極端に多いとも思わない。
ちょっとしたマクロの手直しのために、一からその言語の勉強やるのは厳しいしね。
コメント要らないなら、そもそも、除去なんて簡単にできるしね。
無いコメントを生成はできないけど。
467 :
459 :2007/09/23(日) 16:22:30
>>461 私も、コメント無しで完全に理解できるコードは不可能だと思っています。
ただし、
「処理フローが明らかであるのにコメントを付けては、
品質が下がるだけでメリットがない」
ということを言いたかっただけです。
>コメントは,コードの概観と,
>コード自体からは読み取ることのできない付加的な情報を与えるものであるべきである.
この考えが伝わるつもりでレスしましたが、
文章が至らず誤解させてしまったようです。申し訳なかった。
468 :
仕様書無しさん :2007/09/23(日) 16:24:56
>>467 書いた側と読む側が非常に優秀ならコメントなしでも読めるよ。
そんで俺の言ってる必要なコードは、あなたの言っている「コードの概観」の話だしね。
「コメントがあるほど可読性さがる」ってのが間違いだって言うなら別にいんだけど。
469 :
仕様書無しさん :2007/09/23(日) 16:26:32
>>466 センスとバランスとかSEとは思えないアバウトな表現。
JAVA言語を知っているというのは、コードを読む上では必須でしょ。
言語を理解した上で
「スパゲティコードだからコメントつけないとわからん」
というならわかるけど。
君の理論だと、コメントの統一性が保たれない。
プロジェクトが始まる前に
このメソッドを使うときは コメントを付ける、つけないとか
全てのクラスに対して説明しなければいけない。
こんなコードはコメントが必須(実話) // foo に bar を代入し、計算結果をDBに格納する public getPoo() { // ながーいコード }
まぁ、見た限りだと 「JAVA初心者のためにコメントをつけて仕事を早く回す」か 「品質のために冗長なコメントはつけない」 の意見がわかれてるだけでしょ。 前者も後者も言い分はわかるけどね。 そもそも2人の目的からして違ってるから結論でないでしょ。
おっと訂正。 // foo に bar を代入し、計算結果をDBに格納する public void getPoo() { // ながーいコード }
中小企業なら前者の考え(コーディングを早く終わらせてコスト削減) 大企業なら後者の考え (早く終わらせるよりも品質確保) でいいじゃん。
>>472 // foo に bar を代入し、計算結果をDBに格納する
public void getPoo() {
}
どこが get してるんだよww
475 :
仕様書無しさん :2007/09/23(日) 16:52:11
>>471 いや、その場合品質って何?って話だと思うけど。
よっぽど冗長じゃなきゃ読み飛ばせばすむコメントで品質さがるかな?
そこまでストイックに減らすのって正直自己満足の世界だと思うんだけど。
//このブロックで、先頭の不要行を削除
で10行さらっと読み飛ばせるコメントをつけないメリットの方が
大きいとは思えないな。
476 :
仕様書無しさん :2007/09/23(日) 16:54:34
別につけたくないならつけないでいいけどさ。 もっとも害なのは変なこだわりとか自己満足をおしつけて 「俺はこれが正しいと思う。だから全員これをやれ。 これ以外はクオリティが下がるのでダメだ」って奴だと思う。 真面目な話。 そしてそういう奴は大抵「いや、あんたそれ以前にマシなコード書いてよ」 って奴なんだよな。 自己満足と自己肯定ばっかりで、「いや、もしかしたらこっちの方がいいのかも」 とは少しも考えない。 俺は人に押しつけまではしないけどね。
>>475 >よっぽど冗長じゃなきゃ読み飛ばせばすむコメントで品質さがるかな?
下がるわ。コメント範囲の大小は関係ない。
478 :
仕様書無しさん :2007/09/23(日) 16:58:19
>>475 に同意。
三行ごとにコメントがついてるとかの極端な話じゃなければ、ついてて良いと思う。
何事もないよりある方がマシ。
>>476 だから、自己満足じゃなくて、Sunの規約に準じてるだけでしょ?
そこを無視するとかプログラム的にはありえんわ
480 :
仕様書無しさん :2007/09/23(日) 17:00:31
ま、sunの言う通りにやればいいんじゃないの? とにかくsunが言うんだから間違いないよねぇw
なでしこ使うんだ。 なでしこなら冗長なコメントなんか付けなくなる。
482 :
仕様書無しさん :2007/09/23(日) 17:02:47
ちなみにCOBOLでコード書く場合もsunの規約に従う必要あんのかな? Java限定の話だったっけ?
自分の理論で「これはこうあるべき」って書くから駄目なんでしょ。 自己流コーディングはよくないよ。 Sunの規約として用意されてるなら使うべきだし、 そのプロジェクトの規約として別な方法が記載されていたらそっちを優先すべき。
484 :
仕様書無しさん :2007/09/23(日) 17:04:43
>>483 プロジェクトの規約も使用言語も一切無視して、とにかく「コメントは少ない方がいい。
sunがいうんだから間違いない!!」ってキチガイさんに言ってやってくださいw
>>482 COBOLはその言語に適した規約があるでしょ。
言語によって保守や拡張性に対する考え方も違うしね。
486 :
仕様書無しさん :2007/09/23(日) 17:07:07
>>485 だよね。
それを無視して「コメントは少ない方がいい!」ってほえてるのって馬鹿過ぎだよね。
いつからJavaの話になったんだか。
>>484 だからさ・・・
「プロジェクトの規約として別な方法が記載されていたらそっちを優先すべき」
って言ってるでしょ。
そりゃクライアントがそういう風に指定したらそっちを使うのが当たり前っしょ。
わざわざ指定されてるのに別な書き方してたら訴えられるそ。
おまえはどんなプロジェクトだろうと自己流コードをかいてりゃいいさ
>>482 sunのガイドラインがどうこう言う前に、コボルは旧コードをコメントアウトして残すのを辞めれ。
MSのハンガリアンマンセーに従ってた奴乙
491 :
仕様書無しさん :2007/09/23(日) 17:09:44
>>488 > だからさ・・・
> 「プロジェクトの規約として別な方法が記載されていたらそっちを優先すべき」
うん。
だから言っている内容を変更したわけだよね?
それって後付けだよね?
だとしたら、最初に言った「コメントは少ない方がいい」って間違えたんだよね?
>>486 いや、
>>485 は君と対立してた俺なんだけど・・・
Javaの話してたんじゃないの?
そういうことならすまんかったわ。
あくまで俺のはJava限定の話ね。
自分がコメントあったほうが読みやすいから、そうしてる 規約でダメなら渡すときにコメント全削除してやるからいいよ
495 :
仕様書無しさん :2007/09/23(日) 17:11:50
>>492 そうか。
Java限定なんて前提は初めてだけど、君が前提を間違えていたと言う事ね。
なら仕方ない。
もっともJava限定でも当初の「コメントは少ない方が良い」って間違えているけどね。
プロジェクト規約の方が優先度高いんだから。
ま、今は理解したらしいけど、少なくとも最初は間違えて書いたのは事実だよ。
気をつけてねw
496 :
仕様書無しさん :2007/09/23(日) 17:12:43
>>493 天才児あらわるw
>>494 その前からJava前提で書いているよ。
そんな話どこにもなかったのにね。
>>495 プロジェクトの規約に従うのは前提条件でしょ?
後付けで、
「プロジェクトとしてまったく異なる規約が存在しているとしたら?」
と言われても困るわ
そりゃ、どんな間違った書き方でも仕様でも、客が指定してきたら従うよ。
その点については君と同意。
ただし、特に指定されてないならSun準拠にしとけば間違いないでしょ。
ちなみに俺もいちいちほかの人の書いたものを指摘はしないけどね。
お金くれるなら別だけど。
499 :
発端 :2007/09/23(日) 17:27:12
>>438 >>453 >>459 です。
私の書いたことが原因でスレが荒れてしまい申し訳ないです。
みなさんそれぞれの意見が聞けたことで大変勉強になりました。
このスレは好きなスレの一つなので、
上記の件については終わりということでお願いしますm(__)m
流れていたときにリアルタイムで読んでなかったのでタイミングを逃したけど。
>>461 >誰でもコード読めるわけじゃないしね。
>「このブロックでは、○○の処理をしています」って書いてある事で
>とりあえず数十行が簡単に読み飛ばせるなら、その方が効率がいいのは自明。
○○を名前にしたメソッドに切り出す。
というのが定石で、Sunのなんたらってのも、そういうコーディングが前提かと。
まあ、我々はネイティブではないので
メソッド名でわかるコードを書くというのは現実的には敷居が高いが、
Javadoc をちゃんと書けばそれほど無茶な話でもないと思われ。
悪いコメントの例 言語はC int wrk_COUNTER1; /* カウンタ1 */ 具体的な文言はともかくこのレベルのコメントが実在した。 どんな言語だろうとコレはさすがに....ていうか変数名からしてヤバい。 しかもコレグローバル変数なんだぜ! ほかにも /*ファイルを開く */ /* 変数をインクリメント */ 納品するソースを練習台にするなよorz
ステートメントレベルコメントの問題は ・コードとコメントを同期させて管理していくのが手間 ・コメントを付ける基準の統一が難しく、個々のコーダー任せになる かな。 前者は関数レベルでも同じじゃないかと思うかもしれないけど、 関数レベルというのは設計段階で fix されているべきもので (少なくとも理屈では) そこが頻繁に更新されるというのは、コメント以前に別の問題がある。
コードの方をわけ分からなくすれば解決だぜ! // ストリームを開く。 public T0000 F0000() { ...; }
>>503 本気であるので困る
// 検索結果を取得する
public D001_0012 F001_0012(I001_001 arg0) {
}
当然、Excelの管理台帳(笑)で管理される
これはひどい・・・
ちなみにサーバーサイドJavaだったんだが、表示するJSPも G001_002U.jspとかだぜ。 あわせてG001_002U.jsがそれぞれセットになっているからカオスすぐる で、Gなんだが良く解らないから聞いてみたんだ。 「画面のGだろ、そんなことも解らないのか?」と怒られた(´・ω・`)
508 :
507 :2007/09/23(日) 19:43:19
思い出せばもっと色々あったぞ。 ・変数は全て文字列(当然DBも) ・親会社のバグだらけの怪しいフレームワーク強制 で、オチだったんだが、中国へのオフショア(笑)で夜逃げされた。
なんというコボル脳…。
画面のGとか凄すぎるフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
printf("HelloWorld!!フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ\n");
512 :
507 :2007/09/23(日) 19:51:11
もっと晒すぜ、ヒャホー データ構造定義(笑)はこんな感じ データ構造定義ID D001_0012 項目ID 長さ (中略) 備考 D001_0012_001 18 (中略) 商品ID(9桁)
まぁアレだろ。Fだろ。
Gって言ったらゴキブ ぅゎぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
誤: printf("HelloWorld!!フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ\n"); 正: printf("HelloWorld!!\n");フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
寿司食いたいフフフフフフフ
printf(buf); buf内に%sが入って死亡・・・・・・
祭りに乗り遅れた・・・
// ずっと俺のターン while (1) printf'("フ");
ガリでも食ってろフフフフフフフ
G001_001???ってのは、 画面IDをそのまま名前にしてるんなら保守はしやすいのかもしれん。 もちろん画面IDがきっちり管理できてるのが前提だけど。
ID項目それぞれに対する説明の文書なりpdfがあるんじゃないの それなら分かる
>>524 わかりやすい命名になってればその文書自体不要になるか、
大幅に簡略化できる。
なまじ素直な性格だと、
「業界の先輩たちが長いことやってることだから、なにかよいことがあるんだろう」
って思っちゃうんだよなあ…
昔々、ディレクトリというものが無く、
データ領域につける名前に大文字と数字6文字とか8文字とかしか
使えなかった時代の習慣を引きずってるだけなんだが。
コボルのコメントってどう書くんだっけ。さすがに38年も書いてないと忘れた。
*
きたねえ穴だな
>>522 氏ね
せめて、ItemList_02.jsp とかある程度はまとめた上での連番にするべきだろ
>526 行番号の直後の桁にアスタリスク
532 :
仕様書無しさん :2007/09/24(月) 12:07:51
>>530 きたねえ穴だな // じつは入れたいと思っている気持ちの裏返しの発言
// キーボードの状態を取得する bool getKeyboardStatus() { //キーボードの状態がおかしい if (status_ == RESPONSE_ERROR) { // 投げる throwKeyboard(); } return status_; } みたいな名前と処理が一致しない関数が 山ほどあって気が抜けない (´Д`;)
535 :
仕様書無しさん :2007/09/24(月) 13:17:56
while (1) { int nRet; nRet = 仕事(); if (nRet == ERROR) { int nMood = Get今の気持ち(); if (nMood == BUTIKIRE) { throwMouse(); throwKeyboard(); beatNeighbor(); quitJob(); break(); } } }
while(辞めない) { while (1) { int nRet; nRet = 仕事(); if (nRet == ERROR) { int nMood = Get今の気持ち(); if (nMood == BUTIKIRE) { throwMouse(); throwKeyboard(); beatNeighbor(); quitJob(); break(); } } } }
537 :
仕様書無しさん :2007/09/24(月) 14:02:06
>>536 \ ∩─ー、
\/ ● 、_ `ヽ
/ \( ● ● |つ
| X_入__ノ ミ 俺は釣られないクマ ・・・
、 (_/ ノ
\___ノ゙
/ 丶' ⌒ヽ:::
/ ヽ / /:::
/ /へ ヘ/ /:::
/ \ ヾミ /|:::
(__/| \___ノ/:::
538 :
526 :2007/09/24(月) 17:28:31
int mind; mind = kokoro() while (1) { mind -= 1; if (mind < 0) { takeMedicine(); goHospital(); if (mind < 0) { quitJob; break(); } } }
541 :
仕様書無しさん :2007/09/24(月) 20:42:13
>>540 これバグってるだろww
仕事してないのになんで mind-=1 なんだよ。
仕事しろ仕事w
542 :
仕様書無しさん :2007/09/24(月) 20:50:48
>>540 Jobインターフェースが実装されてません。
java.neet.helloworkパッケージからインポートして実装してください
NoSuchMethod : kokoro()
今システムテストしてるソース群みてびっくりしたよ、 ぜんぜんエラーハンドリングしてないの 最近の奴らは戻り値とか関係なしか?
俺は自分がデバッグする時楽するために 必ず戻り値のチェック入れてる
レスをスルー 例外もスルー
「この子画面処理中に異常が発生したらどうすべきか」全く書いてないから実装してあげませんw
レスをスロー 例外もスロー
まぁ、なんでもかんでもCatchすりゃいいって考えるのは厨だね。 本来どっかでバグがあってこけることでそのバグを見つけるかもしれないってのに Catchして適当な処理したら、何年たっても見つからない可能性がある。
catch 厨
551 :
仕様書無しさん :2007/09/25(火) 00:14:56
>>549 戻り値を監視しながら処理を進めるのが普通だと思ってたが
転職先ではエラー処理は書かないのが基本だった…
郷に入れ歯
C系だとアサーションは入れるけど 結局リリース時には素通りだったりするよね
>>552 だったりと言うかリリースならアサーションはスルーされて当然じゃ?
>>554 開発・テスト時に異常にならなければそれでOKじゃね?とエラー処理入れないままなパターン。
たまに実行時エラーにアサーション入れたりする奴がいるから困る。 つか、リリースモードでリリースする、 っていう確約が何も無いのにアサーション入れたりする奴がいるけど、 全くもって正気かどうか疑いたくなる。
557 :
仕様書無しさん :2007/09/25(火) 02:37:16
>>556 リリース版で最終テストしてリリースするっていうのは、
ものすごく基本的な話なんじゃないのか?
世の中には、
『デバック版でしか動かないからそのままリリース』
という輩も居るらしいが…
msvcrtd.dll(デバッグ版Cランタイム)は再配布禁止…らしいな。
FILE1 とか RET2 とか…ソレは何のファイルなのか、どんな戻り値なのか。 辞めようとまでは思わないけどさ。
560 :
仕様書無しさん :2007/09/25(火) 14:13:53
ABAPで例外を拾おうとあくせくした日々が懐かしい。 そもそもまともに例外を拾う気の無いツールでそんなことするのは無駄だった。
スレ無いから聞いてみるけど、"QAC"ってどうなの? そこそこ使えるようだが俺的には hoge==TRUE を問題として検出しないツールはあまり信用できない。 (ほかにも=と==の間違い疑惑を指摘しなかったりとか) で、うちの会社アホみたいにこのツールの出力結果を信奉している。 相当投資したみたいだから盲信したくなるのはわからないこともないがね。
562 :
仕様書無しさん :2007/09/25(火) 17:36:06
TRUE==hogeを俺は認めないぞ 可読性が著しく低下する。 そんなソースは書いたことがないぞ。
TRUE==hogeってことは…TRUE値と、他の真の値を区別したい場合だよな、きっと?
もしも真実がホゲだったなら...どうする!?
QACを参考に修正したことなど一度も無いな。 開発内テストが終わった後にかけるので意味が無い。 というかこれユーザインタフェースが終わってる。 使いづらいったらありゃしない。
・副作用がある ・定数として評価できる
「hoge==TRUE」よか「=と==の間違い疑惑」のほうが重要じゃね? 後者に引っかからなくていいから前者に引っかかって欲しいの? 変数同士になっても有効なのは後者じゃ? ま、どっちでもええか
>>561 たぶん検出のための設定があると思うぞ。
bool check(hoge){ bool TRUE; if (hoge >= 0 && hoge <= 100){ TRUE = true; } else { TRUE = false; } return TRUE; }
うわすっげえむずむずするコード
>>569 きもちわりぃw
定数左派の人って範囲チェックのときはどうかくの?
( 0 < hoge && 100 > hoge )ってなるのかな?
==の時だけ定数左?
for文書くときもやっぱ for(int i=0;10>i;i++) みたいに書くんだろうか?
gccで動かしててC99仕様で書いてる。 QACにかけるとエラーだらけ。。
C99はできる子。
>>572 周りに定数左派がいないもんで、ちょいと疑問に思っただけなんだ。
気分で左右を入れ替える俺は駄目人間だぜ
統一感が無いのはいかんな
i++ でも ++i でもいいときに ++i を使う人ってどれくらいいるかな
そもそも++i 自体使わなければならない場面はゼロに近いし・・・ わんらいなー気取りで可読性を低くしているのに気付かないだけ
「間」なんかは数学では ( 0<x<100 ) とか書くでしょ。だからcでも ( 0<x && x<100 ) って書く。
iteratorを進めるときは使うなぁ、++i。
普通の組み込み型等なら後置、イテレータだったりオーバーロードされテルものだったら前置
これはイテレータとか、区別するのも性能劣化も嫌だから、 どちらでも良いときは常に前置。
同じく無駄な性能劣化は嫌だし、区別するのも面倒だから前置 最近の賢いコンパイラなら後置でも最適化で一時オブジェクトつくらずにやってくれるかもしれんが
>そもそも++i 自体使わなければならない場面はゼロに近いし・・・ for (int i = 0; i < N; ++i) なんて頻出じゃないのか? C#やJavaのforeach(相当)構文や、C++のgenericを使いまくるんなら別だが。 それでも数値インデックスが必要な場合は結構あると思うけど。
性能劣化のは ++i より i++ が遅いってやつ?
i++ はもとの i を返すために operator++ 内で一時オブジェクトを作るからな int 程度だったら無視しても構わない劣化に過ぎないだろうが、 オブジェクト(よく使うのは iterator)のコピーなんてさせたらどれだけ劣化するか。 それが最適な構文なら、富豪的プログラムの観点からは問題無いんだが i++ と ++i ってソースの可読性上は大した違いは無いから、 必要以上に自ら望んで劣化させる必要も無かろうと。 個人的には後置++ はあまり必要ないんだよな。 int j = i++; とか書かれると一瞬思考が止まる。 漏れのアホな頭ではどうにも評価順が自然に解釈できないらしい。
どうしても後置がいいっていうのは array[ index++ ] = x; みたいなときだな
>>589 なるほど。
普段からjava使ってるから operator オーバライドの影響は頭から飛んでたわ。
++i 派から i++ に矯正された身でやんす。
do { } while( (++n)<(sizeof hoge) ) なんてよく書くから、けっこう使うな。
for文でやれ
forだと初期化のあとケツの判定に飛ぶのがイヤン。初期化のあとに1回判定が入る展開もあったり。 do whileだと静的にも動的にもキレイ。
なぜか俺の教育係だった人はfor文を嫌っていた。 俺が下についていたとき、ほとんどのループ処理をwhileで書いてた。 コメントを見ると”とりあえず”って言葉が多くて大丈夫かいな?って思ってた。
そういわれるとforって異質かなという気がしてくる。 ( ; ; )セミコロンが気に入らんとか?w
>>595 「とりあえず」は俺もよく使う。
検索とかに使うキーワードというか、いわばタグ的に。
統合開発環境のブックマーク機能を使えという話もあるが
作業ファイルをクリーンすると飛んでしまうこともあるから、と言い張って
俺様専用的に使わせてもらってる。
「せっかくだから」とか使おうかしら
某IDEに毒されたか、VBでも「' TODO:」ってやっちまう最近の俺
600 :
595 :2007/09/27(木) 00:33:01
>>596 いやーなんでだろうね。いまだにわかんない。
今は管理役(≠管理職)になってるからコード書かなくなったから、
一緒に仕事することもほとんどないし。
そうそう、if文とかwhile文の後ろが処理1つで済むとき(nNum++とか)は
スコープは絶対につけないというこだわりも持ってた。
こんなことを新人の頃のコードレビューで何度指摘されたことか。。。
なるべくforよりforeachを使うぜ! perlはお呼びでない?そんな……
602 :
595 :2007/09/27(木) 00:43:30
>>597 "とりあえず"ってコメントは、今となっては俺も使っちゃうんだけど、
今一緒に仕事してる人から
「問題見つけたときに直す気なのかなって思うと指摘しづらいし、
勝手に直していいのかもわからないからやめて」
っていわれたよ。
うちは検索キーワードはプロジェクト始まるときに、
各機能ごとに決められてそれ以外使えなくなるよ。
"とりあえず" "取り急ぎ" "おそらくこれでOK" "暫定"
"やらなきゃいけない" おまえがやれ
"なぜか動くのでこのまま"
"ここでぬるぽ発生の可能性あり"
"後で書き直す" …いつ?
"怒涛のごとく改変"
609 :
仕様書無しさん :2007/09/27(木) 07:40:25
>>603 w
言われてみれば確かに使う
ずーっといつまでも「とりあえず」のままだなw
"適当に埋めてみた" 書いた奴を土に埋めたくなる……
コメントスレになっとるw そういや、笑ったコメント晒すスレ落ちちゃったね
建てようとしたら規制かかってたorz
"俺はもうだめだ・・・あとは・・・頼む・・・ぞ・・・・"
コメントスレ需要有るんなら立てよっか
c++でさ。メンバ変数ってどれぐらい公開する? 1) 全て非公開private or protected 2) 状況によりけり 3) 全て公開 public 俺は今まで、3は有り得ないと思ってたんだけど、 どのソースも3ばっかなんだ。誰か何とかしてくれ……
(1)のつもりで作る 流動的に(2)へ移行することもある
C++じゃgetメソッドいっぱい作っても使いにくいだけだし
俺のいる職場のjavaでかかれたコードは public static だらけだよ。 public final static String sShopNo = "ShopNo"; とか言うのがズラーっと並んでて、 文字列連結の + でつないでSQL文をつくってる。
(1)だろ (2)だって可能な限り避ける (3)は確かに辞めたくなる...
全部公開ってstructじゃん
622 :
616 :2007/09/27(木) 23:42:58
やっぱそうか……色々といいたいことはあるコードばっかなんだが、やっぱりそうなんだな。 あと、もう一つ気になるところがある。 この会社では、同じ処理を書くときに、一から書き直す風習があるんだわ。 これもどうかなぁ……って思ってしまうよ。
コピペじゃなくて新しく書くってこと?
>>623 イエス。全く処理内容が同じなのに、新しく書き起こしている。
理由がさっぱり分からん。
ステップ数(笑)稼ぎ
>624 版管理とは別な意味でソースコード管理が下手なのかも。 「自社のコード」を蓄積しないで、「顧客に納めるコード」ばかり書いていて 結果、別PJで書いたコードは流用できないから毎回フルスクラッチとか……
>>624 元のコードに問題が見つかったとか。
少しでも改善出来る部分があったとか。
新人の練習台にしてるとか。
そうでもしないと余る人員がいるとか。
>>626 正解かも……
あれだ。顧客に納めるで思ったんだが、ソース納品な案件があれば少しは変わるような気がしてきた。
まぁ、あんなコードは外部に見せられないけど……
>>627 そういうんじゃないんだよ。
例えば、ログ出力処理があったとするだろ。
そしたら、ある場合はグローバル関数にかかれてたり、ある場合はクラス化されてたり、
ある場合はダイアログクラスのメンバ関数に埋め込まれていたり。DLLになってたり……
いや、全部同じ処理なんだぜ。全く……何回読んでもこぴぺで良いじゃんって思えるコードなんだぜ……
おっと、途中で投げてしまった。 そんなだから、人員が余る・新人の練習以外は全て違うんだよ。 ちなみに、中途採用ばかりで新人もいない会社だから、その理由で新人の練習という理由もない。 いつも人員不足で悩んでるところだから、人員が余るもない。
>>629 いや、そこはコピペじゃなくてDLLでいいじゃんとかクラスでいいじゃんじゃないのか?
>>631 そうなんだけどね。要はつまり、とにもかくにも再利用しないとこだと言いたかった。
カプセル化って大原則だと思ってたが 案外、世の中には浸透してないのか? カプセル化されてないソースを読むなんて神業だろ。
>638 日本は神の国で八百万の神が、ってのはあながち嘘でもないってことか あれを読む程度で神と言えるのなら……
八百万ステップなら神
ロギング処理がダイアログのメンバ関数。 プログラミングできない連中麦価なんじゃないか? 単純に
ダイアログごとにロガーがあるのか?
ぬるぽ
>>634 はこの3文字からあれだけの情報量を読み取ったのか
妄想が激しすぎるな
上司 『こんなところでレス返してる暇があったら、もっとステップを稼げッ』
ステップ♪ステップ♪ランランラン♪
また1名旅立たれたようです
「来週あたり各自宅のPCの検査いくんで」 これはない
void reduce(int*number, int*denom){int a,b,tmp; a=abs(*numer); b=abs(*denom); /*a>=bとなるように入れ替える*/ if(a<b){tmp=a; a=b; b=tmp;} /*互除法で最大公約数を求める*/ do{tmp=a%b; a=b; b=tmp;} while(b!=0); /*約分する*/ if(a>1){*numer/=a; *denom/=a;}} 実際は途中改行なしで1行1関数 最初見たときプロトタイプ宣言が並んでるのかと思ったら 関数定義だからびっくりしたわ
そして、それらは全てコメントアウトされていた。ってオチとか
>>644 winny関連?家庭訪問みたいでやだなw
hoge.asdf(fuga); x piyo.method(); 果たして彼は x と書いてある行にあった文字列を切り取り出来たのであろうか・・・・。
辞めようとは思わないソースだけどw ってかコンパイル通らなくね?defineされてるとか?
>>645 改行がアレだけど、中身は以外と、まともっぽい。
>>557 亀レスだが、
Xbox360のバグまみれソフトだった、カ○ドセプトサー○がそうだったらしい。
なにしろ、Releaseビルドだと、起動すらしなかったとか。
冗談だろ・・・って言ったら、冗談じゃねぇ・・・と言われたときはさすがにあきれたねぇ。
ちなみに聞いた奴はあのバグまみれ騒動以来会社辞めたらしい。(そりゃそーだ)
653 :
仕様書無しさん :2007/09/29(土) 08:51:25
カプセル化不要な方向に進んでいるのはあるけど、データの分離は別の話だと思うが? しかし、プログラマのレベルが低すぎるからこそカプセル化が必要なんだと思われ。
VBだが文字列の切り出しに何でもかんでもMid使ってる Mid(str, 1, 1)……ってLeft知らんのかこいつは……
てか、VBの場合ついLeft$, Mid$, Right$, String$って書いてしまうのは漏れだけか?
ロートル
>658 「1」が変数なら間違いとは思わんが、直値なら・・・ まぁいいか、VBならw
$つけないとVariant型が返ってくるぜ
>658 ノシ ……でも元ソースが全体に$なしがはびこってたり そもそも、「そんなに文字列と数値をごたまぜで扱いたいならPerlで書けよ」 って言いたくなるよーなのだと諦めて$なしで書くorz String型で計算の時だけCCurかましてずーーーーっと数値保持してるのを見たときなんてもうね(つ´д`;)
今調べたんだけど Mid てステートメントもあるんだね。
>>657 Leftって文字列を扱うクラス以外にもあったから
VB6みたいにLeft()って書いてもエラーになる
名前空間とクラス名を指定しないとダメだから
そいつは使えないと判断したんじゃね
えーっと VB.NET?
microsoft.visualbasicはいらんぜよ
VS2005は無料版があるけど、インストールがマンドクセーから試してねぇな 仕事で使ったことも無いな
VC6のときのPlatformSDKがほしい
VSEE2008インスコしたけど・・・どうなの?
>668 CD取り寄せできるお Feb 2003がVS6対応最後のPlatformSDK めりけんからの送料掛かるけどなorz
671 :
仕様書無しさん :2007/09/30(日) 09:23:37
>>662 VB6の本質はVariantだった。
それが理解できずに普通の型チェックを期待して四苦八苦した時期がありました・・・
672 :
仕様書無しさん :2007/09/30(日) 10:32:47
単発ならLeft$使うけど 周囲にMid$があるなら敢えてMid$統一しておく VB6の案件は厨や新人にお鉢が回るかもしれんから
>>657 そのレベルだとどっちでもいいと思うが・・・
どっちかってとあとは本人の好みの問題。
Midが周囲で使われてるからって、leftをmidに直しても、何もいいことないだろ?
675 :
仕様書無しさん :2007/09/30(日) 13:54:25
可読性があがる VBで開発する以上、低スキルな保守要員が宛てがわれる可能性は考えとくべきじゃね? 昨日HelloWorldした新人でも違いが解りやすいじゃん
Mid(str, 1, 1) なんて書いてあると、何か意味があるのかと悩んでしまうな。 意味がわかるような関数を使おう。 似たような事例で、PEARに登録されているPHPのライブラリのひとつだが、 こんなん書いてあって意味がわからなかった。 substr_replace('string', 'replace', 0, 0); 関数の意味は名前のとおり、第三引数はstart、第四引数はlength 実際のコードは第一引数は文字列の配列だった。
677 :
仕様書無しさん :2007/09/30(日) 14:20:44
何か意味があるのかと悩む理由が解らんな 自作関数ならともかく。
それはお前が何も考えて無いからだなw 低脳コーダー乙
新人でも文字列操作関数ぐらい全部わかるだろw
680 :
仕様書無しさん :2007/09/30(日) 14:32:07
動けばどっちでもいいと思うけど。 くだらん
>>644 ありえねぇーwwww
んなこと言うような企業は間違いなくDQN
>>644 言われても嫌だが、ソースコードに書いてあっても嫌だな...
>>683 仕事なのに「動けばいい」「スパゲティだからってゼロから作り直すのは駄目」とか
それなのに「機能追加しろ」とか言われ、選手交代になった派遣社員が通りますよ…
leftとmidを混在させないで、midに統一したら読みやすくなるって説は、 leftとmidの機能を思い出しながら読むのが大変って意味か?
固定長テキストファイルを読み出すときに、 Left$(str, 10) Mid$(str, 11, 10) 〜 Mid$(str, 101, 10) とかずらずら書いて、一番上のLeft$をMid$にしたら、 引数の数もそろって綺麗なんじゃね? って10秒くらい考えたけど、 ばかばかしいのでそのままテストをした覚えはある。
あー位置が揃うとか、そういう意味か。
この場合だったら for i = 1 to 10 hoge(i) = mid$(str, i*10+1, 10) next とか書けばすっきりじゃね?
若人の俺は、VBのファニー文字みたいな奴がよくわからん。 体型立てて勉強しようにも、そういった資料が少なくない?
ファニー文字って、$とか%とか? ヘルプに載ってるんじゃないの?
692 :
687 :2007/09/30(日) 18:47:14
>>688 そういう意味で悩んだけど、可読性があがるとは今でも思わないな俺は。
>>689 昔のコードなんで覚えてないからてきとーに書いたんだけど、
文字長ばらばらで、forでまとめるわけには行かなかったと思った。
そうであって欲しい。 そうでなければ悲しすぎる。
もし使ってる言語に、midやらsubstring相当の機能しかなかったら、leftやらrightやらって ルーチンを自作して使う。 機能が限定されてるルーチンのほうが意図が伝わるから。
顧客 「開発方法はLyeeとありますが?」 カテナ「はい。Lyeeです。」 顧客 「Lyeeとは何のことですか?」 カテナ「理論です。」 顧客 「え、理論?」 カテナ「はい。理論です。開発期間が従来の5分の1〜10分の1です。」 顧客 「・・・で、そのLyeeは当社での開発で何のメリットがあるとお考えですか?」 カテナ「はい。設計もテストも不要です。」 顧客 「いや、そもそも設計やテストは貴社の担当です。それに設計書が無いのは不安ですね。」 カテナ「でも、業務知識がなくても開発可能ですよ。」 顧客 「いや、可能とかそういう問題じゃなくてですね・・・」 カテナ「ドキュメント量が100分の1ですよ。」 顧客 「ふざけないでください。それに100分の1って何ですか。だいたい…」 カテナ「1%です。保守資料無しとも考えられます。深層心理においては…」 顧客 「聞いてません。帰って下さい。」 カテナ「あれあれ?怒らせていいんですか?使いますよ。Lyee。」 顧客 「いいですよ。使って下さい。Lyeeとやらを。それで満足したら帰って下さい。」 カテナ「運がよかったな。今、撤退を決めたみたいだ。」 顧客 「帰れよ。」
>>694 Lyeeでググってみたけど、UMLからソースコード生成するのと似たようなもん?
完全生成できたとしてもシステムテストとかはするよな、普通。
思い出した! VBで「こうやんないとうまく動かない」みたいな(正確には覚えてないけど)関数名があった。 コメントならまだしも、勘数名でこれとは...
>>694 普通はこうなる。
顧客 「開発方法はLyeeとありますが?」
カテナ「はい。Lyeeです。」
顧客 「Lyeeとは何のことですか?」
カテナ「理論です。」
顧客 「え、理論?」
カテナ「はい。理論です。開発期間が従来の5分の1〜10分の1です。」
顧客 「つまりその分開発費用も安くなると言うことですか。すばらしい。よし採用。けってーい。」
まあ、Lyeeなんてしらんがなw
Lyeeって情報システム板でやたらスレが荒れてた記憶があるな。
だってあれは・・・良く見てみれば。プリコンパイラにしか過ぎない。
てst
701 :
仕様書無しさん :2007/10/01(月) 12:41:33
>>670 >>701 スレ違いになってしまったけどサンクス
これでCPANの古めのモジュールがmakeできるかもしれん
>>696 そういえばあの関数なぜかうまく動かないからその関数は自分で作ったよ。
傍から見たらライブラリにあるのになんで?って思われるだろうな。
Cで関数定義の頭に概要の説明が書いてあるソースがあった。 /* -- 概要 共通ログ出力関数 呼び出し方法: void logfunc(int errcd, char *funcname); 引数:なし 戻り値:0:正常 -1:異常 */ void outlog(int errcd, char *funcname) { ...以下定義 もう一つ /* 呼び出し方法: int func(void) 戻り値:0:正常 -1:異常 */ void func(){/* 定義 */} ..で実際の呼び出し箇所にいくと func("XXXX"); 1つ2つならまだいいけど、万事がこんな感じ。コメントウソ書きすぎ。 わざとやってるんじゃないかと疑いたくなってくる。
「苦肉の策」とか「後で修正しておくこと」とかもう諦めてるんだけど、 「苦肉の策!(笑)」とか「後で修正する必要アリ(´д`)」とかになってるとマジ辛い。 昨日も昼ごろ似たようなコメント見つけて午後ずっと気分悪かった。
気持ちに余裕がないのね
>>707 コーディング規約や開発者のコード管理能力の問題だろ。
C#に限らず、どんな言語を使ったって、混沌とさせる奴はいる。
それを解決できるツールがたまたま(同じ必要性を感じた)先人によって作られているか、
そんなツールを見つけられるかどうかで、問題を糊塗できるかどうかの違いだけだ。
>>708 何が原因でそんな混沌としたプロジェクトになったかなんて興味なくて、
そいうプロジェクトにいたら会社辞めたくなるだろうなってことだよ。
C#は知らないけど、C#だからこそ何を削除したらいいか検索するのが不可能って流れになってるじゃん。
少なくともC++やVBだったら不要メソッドのリストアップは簡単に出来ただろうにね。
(Javaも知らないけど、Javaもそうなのか?)
C#コワーw
コードの7割くらいがコメントアウトされた過去のコードのプロジェクトに入れられた… #if 0〜#endifで除外されたブロックも多数あって発狂しそう orz
スレ違いっぽい話題を引きずることになるかも知れないけど C++やVBだと不要メソッドのリストアップにどういう方法があるの?
>C#だからこそ何を削除したらいいか検索するのが不可能って流れになってるじゃん。 どこにそんな流れがあるんだ
つーか、リフレクションを駆使するようなチームだったら、コードをクリーンに保つくらいすると思うんだが。
不要社員のリストアップに
>>708 この前、fxcopとかってツールをためしに使ったら、使われてないメソッドとかは指摘されてたような。うろおぼえ。
>>711 C++はおろか、Javaや最近のVBですらリフレクションが実装されていることを知らないこと、
それ以前に問題の本質を見つけられない濁った目、そして文中に漂う全角アルファベット、
おまえ、もしかしてコボラだなww
こぼらがいっぴき こぼらがにひき… この辺で…俺のはじめてのプロジェクトは火を噴いてあたりを転げまわりだした。
ぇ、C++ってリフレクションあったっの? C++/CLIじゃなくて?
本当に関係ねえ
>>725 先輩だか上司だかに、添削と言って、こんなソースにされたら、やめたくなるよ。
dim strTemp(10) as string const intTemp as integer = 10 for i as integer = 1 to intTemp strTemp(i) = "" '処理 next
どの辺が気に入らないんだろう
VBなところ
for i as integer = 0 to intTemp
for i as integer = LBound(strTemp) to UBound(strTemp)
VBの文字列って初期化されてることが保障されてなかったっけ?
for i as integer = 0 to intTemp-1
綺麗なコーディングしてるだろ バグってるんだぜ、これで…
VBって確か、 配列宣言時に指定する数が、 要素数じゃなくて添字の最大値なんだよな
dim a(3) なら a(0) 〜 a(3) だっけ? 昔のベーシックで a(0) を無しにしてメモリを節約するとかいう セコいオプションがあったような記憶がある。
VBでは、option base で配列の添字を 1〜にするか0〜にするか変更できる。
もうすぐ64ビットが当たり前になる時代にそんなオプション意味あるんか?
メモリの1バイトは血の一滴だ!
おしい 血より精液のほうが説得力あったのに
初期化が保証されてても初期化、ということにはあまり文句は言わない でも過保護言語のVBだし事情が違うのかな
初期化で思い出したけど MFCとかでポインタ先が破棄済みかどうかに( pTest )ってやってるの困る 解放後の0割り当てなんてコード全体で徹底するのか? いずれにせよMFC内部で delete this とかやるのあったらダメ
メモリ管理もろくに出来ない無能な人間のための言語というアピールはひしひしと感じる 便利だから使うんじゃない,それしか使えないんだ,てな
管理以前にそもそもメモリの概念が分かっていません。
メモリの節約、スレッドの節約、etc...
給料の節約、残業代の節約、etc...
>>744 > 内部で delete this とかやるのあったらダメ
そうか?
750 :
仕様書無しさん :2007/10/07(日) 03:47:54
751 :
仕様書無しさん :2007/10/07(日) 07:16:38
> 解放後の0割り当てなんてコード全体で徹底するのか? 逆に delete して NULL 入れてないやつはぶっ殺したくなる
自所持ポインタをNULLにしたところで その参照先を他のやつもポインタで参照してたら・・・・そっちが自動でNULLになってくれるわけじゃないから NULL当てはめて安心するなんて無意味っちゃ無意味
意味不明。 自ポインタで必要なくなった参照先は、他のやつでも必要なくなるって決め付けてるのか? そんなもん、プログラムのロジックによりけりだと思うが。他では保持する必要があるかもしれないし。 NULL当てはめて安心したいのは、処理が他の参照先に移ってるのに自ポインタが保持してるせいで 誤ってアクセスするというようなことを起こさないための防衛策もあるだろ。 「この会社辞めようと思った」の90%くらいは真実だと思うが、10%くらいは「辞めようと思った」奴の レベルが低すぎるんじゃないかと思うことがある。
言ってることが全然分からんな。 よほど内部・詳細設計が腐っていると見える。
Javaで、1000行以上のメソッド(この時点でどうかとおもうが)を抜ける時に 一々オブジェクトにnullを入れて片付けているのを見たとき。 そんなどうでもいい気を使う前に、そのくそ長いメソッドを見直せと。
Javaは変数スコープ明確にしてGCに任せるだけだから楽だな
gcなんて訳の分からんもんによくお任せできるな お前は通りすがりのオヤジに家の留守番を頼めるのか?
いや、javaは別にgc依存でいいんじゃないか? そういう言語なんだし。
同じアドレスを共有しているポインタがあるのに delete するって それだけで重大な設計ミスだな 所有権移行なら、delete せずに権限渡して 自分のポインタは NULL 設定とかする(auto_ptr がこうなってるな)し、 複製ならオブジェクトのコピーするだろ、普通 複数箇所で共有するなら、いいからスマートポインタ使っとけって話だし
>>757 スマートポインタも使わないのか?
参照カウンタだって立派なGCだが。
>>758 それを言い始めたらコンパイラも実行環境も何もかも信用できなくなるよ
764 :
仕様書無しさん :2007/10/07(日) 13:42:04
ぬるぽ
お前らはデンマークの2流都市出身の禿や カナダの糞田舎で育ったキモいオッサンの作った言語なんて信用できるのか?
malloc/freeのペアを使っていた時代は、freeの後にNULLは設定していたなー 論理的な異常処理とかでやむを得ず処理を終了する場合は、 ポインタ参照用変数がNULLじゃなけりゃ取りあえずfreeしまくってexitしていた。 まぁ、三つ子の魂百までじゃないけど、たまにそうコーディングして苦笑する事が最近はある。
最初に疑うべきはいつの時代でも自分のコーディングだけどな!
ポインタをNULLクリアしなきゃならないコードの書き方を疑え。
>>763 どんなコンパイラも実行環境も最初は通りすがりのおっさん程度の信頼性しかないものだ。
それが大勢に使われて、もまれて、信頼できる警察官になるんだよ。
いまどき C++ で自分で delete 書いてる時点で何かおかしいと疑ったほうがいい。 std::auto_ptr, boost::scoped_ptr, boost::shared_ptr で全部済ませとけ。
boost の利用は標準に取り込まれてから考える
std::auto_ptr を delete 書くのを省くためだけに使うんだったら帯に短し襷に長しだな
>>772 へ?その目的で使ったら十分だと思うよ。
本人の意思とは関係なく例外安全性が付いてきたりするけど、別に余計なもんじゃないし。
まぁでもエラー処理とか例外安全とか一切考慮してないような自作スマートポインタクラスを使うのもなぁ〜
普段ウォシュレットを使い慣れている奴はたまに駅の便所で拭かずにパンツを上げるらしい。 もしくは美味く拭けずに手にウンコ付けまくりんぐとか。 一番多いのが、ちゃんと拭いて流したつもりでも毛に残ったウンコでパンツが黄色いとかだな。
エクセルが信用できないので計算機で出した値を手入力してます GCが信用できないので(ry
GCはいつインスタンスが破棄されるか分からんのでデストラクタ使い辛いのがなぁ・・・
778 :
仕様書無しさん :2007/10/07(日) 18:33:56
ところでここはいつから"この会社辞めようと思った自分の一言"スレになったのですか?
779 :
仕様書無しさん :2007/10/07(日) 18:41:25
javaやC#も、スコープ抜けたら、デストラクタ(相当)がコールされる仕組みを作ってくれたらいいのに。 メモリ以外のリソースの開放がかえってめんどくさくなったな。
1メソッドだらだら1000行とか書くやつは害虫としか思えん。 自分が辞めるよりそいつを駆除したほうがいいだろ普通。
782 :
仕様書無しさん :2007/10/07(日) 18:51:41
783 :
782 :2007/10/07(日) 18:52:39
と思ったけど動くタイミングが微妙だな
784 :
仕様書無しさん :2007/10/07(日) 19:52:52
C++/CLIを使えばいいじゃない
>>775 普通はウンコ吹いてからウォシュレット使うでしょ
>>780 C#のusingでスコープ囲む奴じゃダメ?
>>785 最初にウォシュレットで残留物を洗い流してから、
紙に色が付かなくなるまでふきふきしてる。
>>786 usingでもいいけど、開放したいのが複数あったらネストが深くなるからね。
using (IDbConnection conn = new ・・・) {
conn.Open();
using (IDbCommand cmd = conn.CreateCommand()) {
cmd.CommandText = "・・・";
uding (IDbDataRedader reader = cmd.Execute・・・) {
while (reader.Next()) {
・・・
}
}
}
}
C++/CLI や D みたいにやれたらいいのに。
>>788 順序は無視して、単純に開放したいのが複数あるときは
using( ... )
using( ... )
{}
って出来たと思う。的外してたらすまんす。
exit(-1);
>>777 デストラクタは破棄される自分自身が保持してるものをアボンヌする「のみ」・・・のはずだから
まぁタイミングなんて別にいいじゃん・・・・。いや実際処理入れられるけど、出来るけれど
自分の持っているもののみを開放するのみとは言え、 class CFile { public: CFile() : m_fileptr(NULL) { } ~CFile() { Close(); } // まさに開放するのみ bool OpenForRead(const std::string &path); bool OpenForReadWrite(const std::string &path); void Close(); private: FILE *m_fileptr; }; CFile *file = new CFile(); file.OpenForReadWrite("/tmp/hoge"); // ここで GC の対象になったとして CFile *file = new CFile(); file.OpenForRead("/tmp/hoge"); OpenForReadWrite, OpenForRead は Reader-Writer Lock で flock かかるとして、 OpenForRead が成功するか失敗するかわからん、 というのが悩みどころなのでは。 いや、この場合は明示的に Close してやればいいんだけど。 # C/C++ しかわからんので C++ + GC という謎の物体でスマン
実処理の発動はともかく破棄権を与えるタイミングは把握できるはずだから問題ない・・・と思うんだけど
># C/C++ しかわからんので C++ + GC という謎の物体でスマン 途中まで読んで、最近はgc付きのC++なんてのがあるのかと思ったぞ
796 :
仕様書無しさん :2007/10/08(月) 03:54:21
// cnt が 0 より大きかったら処理する if (cnt > 0) { }
if (cunt < dick) { // や〜ん、こわれちゃう! }
デバックの結果、不等号の向きが逆、ってのはよくある話で
// 余計な物がありますよ if( a < 20 ); { return hogehoge.detteiu( pero-n, a ); }
>>796 見りゃわかるから、そんなコメントいらね!ってこと?
もしくは、 0 < cnt のほうが見やすいだろ!ってことか?
>>800 そんなこともわからんのも
まずいと思う。
>>gc付きのC++ C++/CLI でもこれはやるのかな?
804 :
仕様書無しさん :2007/10/08(月) 12:21:43
if (cnt > 0) { } 何の問題もないだろ、 おれもこう書くが?
ネタはコメントの方だろ
俺の部署のコーディングルールだと直値は禁止なので0じゃなくて if(cnt > (int)NUMBER_ZERO){ } とかにしないといけない。
> NUMBER_ZERO
808 :
仕様書無しさん :2007/10/08(月) 12:31:41
> if(cnt > (int)NUMBER_ZERO){ > } > とかにしないといけない。 まったく意味無しのウザイルールだな。 仕様が変わって 1 より大きくなったら、 if(cnt > (int)NUMBER_ONE){ } ってすべて書き直すんだな。 あほだ
古典的な誤りだな
810 :
仕様書無しさん :2007/10/08(月) 12:37:36
別にいいんだけど、NUMBER_ONEとかってセンスないっていうか、 ちょっとウケるな。 そもそもそこを閾値として、THRESHOLDなんたらとかにしておけば、仕様が変わった場合、 その定数の定義を変えるだけでいいが、NUMBER_ZEROだったら、 結局全部探して直さなきゃならないから、全く意味ないと思うが。
> 仕様が変わって 1 より大きくなったら、 いやーこうじゃないか? #if 0 #define NUMBER_ZERO 0 #endif /* 2007/10/08 nanasi808 */ #define NUMBER_ZERO 1
812 :
仕様書無しさん :2007/10/08(月) 13:34:14
#if 0 #define NUMBER_ZERO 0 #endif /* 2008/10/08 洋司 */ #define NUMBER_ZERO 1
813 :
仕様書無しさん :2007/10/08(月) 13:35:56
>>811 定数名と内容が一致してないだろ。
ダメダメなコードの典型だと思うぞ。
814 :
仕様書無しさん :2007/10/08(月) 13:38:30
#if 0 #define NUMBER_ZERO 0 /* 2008/10/08 洋司 */ #define NUMBER_ZERO 1 /* 2009/10/08 洋司 */ #define NUMBER_ZERO 2 /* 2010/10/08 洋司 */ #define NUMBER_ZERO 3 #endif /* 2011/10/08 洋司 */ #define NUMBER_ZERO 4
#defineでてきたか・・・、そんなことで#define使うなよ その部分のソースのみを見て名前から動きが理解できないじゃないか・・・
816 :
仕様書無しさん :2007/10/08(月) 13:40:25
洋司うるさいw
洋司はもうちょっと検討段階で頑張れよw
818 :
仕様書無しさん :2007/10/08(月) 13:46:51
#if 0 #define NUMBER_ZERO 0 /* 2008/10/08 洋司 35歳*/ #define NUMBER_ZERO 1 /* 2009/10/08 洋司 36歳*/ #define NUMBER_ZERO 2 /* 2010/10/08 洋司 37歳、リストラされる*/ #define NUMBER_ZERO 3 #endif /* 2011/10/08 陳姪用 */ #define NUMBER_ZERO 4
そういうところは仕様は絶対かわなんないんだよ。
もしNUMBER_ZERO で定義してるんだったらNUMBER_ONEってのもどっかにあるだろうし。
よほど変なコーディングでない限り、その部分が24になったり10456になったりとか
することはないよ。変わる仕様だったら別な名前でちゃんと定義してるだろ。
自分も
>>808 と似たようなところだが、
どんな数字も全部そう書くようにする規約があるからわかるんだが
1回しか登場しなくてどうやったって誰が書いてもどんなに仕様が変わっても
そこだけは必ず0から始まるようなものって結構あるんだよ。
たとえばゼロ割を回避するためだったり。
820 :
仕様書無しさん :2007/10/08(月) 13:49:01
引き継ぎcomplete!!
821 :
仕様書無しさん :2007/10/08(月) 13:49:36
822 :
仕様書無しさん :2007/10/08(月) 13:50:52
>>819 元の書き込みはそうだろうが、俺らが文句言っているのは
>>808 に対してなので、
その辺、勘違いしないでよね!!
823 :
仕様書無しさん :2007/10/08(月) 13:52:10
>>819 NUMBER_ZEROってのが一般的に利用するcommon的なソースであって絶対に変化のない物なら理解できる
だが、そのシステムに特化したソース内では利用すべきじゃないと思う
それならば別の名前を付けることもできるだろうし、ゼロってのは数字であって名称ではないし
825 :
仕様書無しさん :2007/10/08(月) 13:54:40
826 :
仕様書無しさん :2007/10/08(月) 13:55:21
おれは洋司とは仕事したくないぞ
827 :
仕様書無しさん :2007/10/08(月) 13:56:00
>>824 そうだね。
そのゼロがなんなのか分かる名前なら意味あるけど、
ただNUMBER_ZEROじゃ、打つのが面倒なだけで、0って直書きするのと変わらない。
しかし、これがNUMBER_ZEROでなく(int)NULLだとさらに混沌の度が増す……
829 :
仕様書無しさん :2007/10/08(月) 14:30:39
「FIVEは5か?」は昔からある教訓で、
>>819 の考えは適切ではない。
定数ゼロを使う場合なんて大半は マクロ定義改変でゼロ以外に変更してコードの理屈が通るとは考えられないしなぁ 必要かどうか、なら要らないわな
831 :
811 :2007/10/08(月) 14:44:24
完全にネタのつもりで書いたのに。マジレスしてるやつは議論の余地があるとでも思ってるのか?恐ろしい。
NUMBER_ZERO この名前に誰も突っ込まないのがなあ。 SECTION_ZEROとかROW_ZEROとかのグループ的な意味を持つ場合ならいいけど そうじゃないイミフな定数は定義した意味が半減するし
>>832 みんな突っ込んでるだろ。
ZEROと書いといて、仕様変更で「0」以外の値になることは考えないのか?という話で。
代案もセンス悪い。
漏れだったら、COUNTER_START_NUM か何か、ZEROを含まず機能を類推できる名前にする。
現実に周囲を見回すと、物に名前を付けるって意味について二通りの意識を持つコーダーがいる気がするな 今後の拡張等を踏まえて、利便性を追求するのためにとりあえず名前を付ける人 ソースを分かりやすくするために適切な名前を付けようとする人 で、前者は大抵ワガママなソースになりがちで嫌われると思う
>誰も突っ込まないのがなあ 突っ込んでんじゃん 文盲か?
>SECTION_ZEROとかROW_ZEROとかのグループ的な意味を持つ場合ならいいけど いいのかよw
釣れるのは雑魚ばかりか
関数は50行ぐらい、多くても100行までにしてくれ、と言っても 理解できない奴が多すぎて困る。 1000行とか天才かよと。
関数分割って結構難しいと思う。 ノッて書き出すと1関数でずっと続けちゃうし、分割した方がいいと思っても、 バグ発生や見通しが悪くなるのが怖くてなかなか踏み切れない。 できるかできないかがプログラマのセンスの差なんだろう。
そういう問題じゃねぇだろ
> バグ発生や見通しが悪くなるのが怖くてなかなか踏み切れない。 釣りか?
関数分割で見通しが悪くなる、ってどんだけ
839だけど、俺くらい技術の低いプログラマだと、そういうレベルで 悩んでしまうってことです。 バグ発生は、同じ変数を他所でいじってるんじゃないかと取り越し苦労して、 見通しが悪くなるのは、機能を適切に分割できなくて、引数が複雑に なったり、戻り値が凝ってる割にたいしたことやってなかったり拡張性が 悪い物だったりする。
分からんなら分かる奴とかPGの取りまとめとかに聞け。 分からんからといって問題を放置されるのが一番タマラン。
大きな関数をセンスで分割するというアプローチが既に誤り 目に見えない制約がたくさんあって、それを遵守すると機械的に 小さな関数群になる、という感じ
こういうアクションで呼ばれた(たとえば、ボタン A が押された)ら、 「こうしてこうしてこうする」、というのを関数にして、 それぞれの「こうする」をさらに「こうしてこうする」にして… というのを (OS なり何らかのライブラリなりの) API に達するまで繰り返す というのを基本としたら、必然的に小さく収まるよなぁ あー、何か俺自身感覚で分割してるような気になってきた
>>844 すいません、今の職場、俺以外にPGいないんです。
社内間接部門で、他の人は仕様とりまとめて俺に卸してきます。コーディングは
Excel の自動生成マクロをちょっと手直しして使えるってれベルです。
プログラムは全部俺に任せるって言われてます。関数分割も含め、日々試行錯誤です。
OSSのソース読んだりして勉強してるつもりなんですが、外に出て実戦するのがいいのかなぁ。
初心者が自己流だけでいくのは将来危険。 いろいろ回って経験積んだ人にまかせた方がいいと思う。 その経験積んだ人にまかせるのだって、ほんとは危険。 一人にやらせるってのがそもそも危険。
プログラミングは危険。超危険。
俺が今日作った関数500行ぐらいある。 疲れた。そして明日からももっと疲れるだろう。
もはや釣りかネタとしか思えん
>>801 本気でわからんので回答ください。
800 :仕様書無しさん :2007/10/08(月) 09:40:32
>>796 見りゃわかるから、そんなコメントいらね!ってこと?
もしくは、 0 < cnt のほうが見やすいだろ!ってことか?
801 :仕様書無しさん :2007/10/08(月) 11:29:35
>>800 そんなこともわからんのも
まずいと思う。
803 :仕様書無しさん :2007/10/08(月) 12:16:56
>>801 や、すまん。俺も悩んだ。
見りゃわかるからだろ どうでもいいとこにコメント書きまくってる奴に限って 本当に必要な所にはコメントなかったりするんだよな
たいてい関数は短くするけど ロジック的なものじゃなくて力任せにいろいろ構成を書いていく部分のコードだと長くなる 300とか
ライブラリとか低位レイヤの関数は短いよね? 業務レイヤになってくると分割が意味を成さないような処理もあるから ちょっとだけ長くなるよね? ね?(一連動作を明示する意味もある!?) 短いとか長いとか両極端に走っちゃだめだよね? ね?
>>855 本来、業務ロジックなんか一番短くなってしかるべき
長い関数の中の一行を修正しなくちゃならんという時、 その一行で使われている変数が前後でどう使われているか 普通チェックするもんじゃない? 関数が短ければ追っかけなきゃならんロジックが減って あとで楽できると思うんだが。 俺だったらhoge()っていう300行の関数作らず 100行ぐらいのhoge_a(),hoge_b(),hoge_c()を作って それを順番に呼び出すだけのhoge()を作るなぁ。
>>855 ログ吐く
処理1を呼び出す
結果を見てエラーがあればコードに応じて処理を書く
ログ吐く
ログ吐く
処理2を呼び出す
・
・
・
みたいな感じで長くなることはあるな
「他人に分からせる気はこれっぽっちもない」けど「懇切丁寧ぶったコードには見える」んだよ ククク
// cnt が 0 より大きかったら処理する if (cnt > 0) { ここの条件分岐が、実際の業務と直接リンクする場合は上のようなコメントを書くと思う。 そういうのはあり?たとえば「じいちゃんがココで死にそうだったら110番する」みたいな。
でも0 ゼロだぞ 「○○がまだ残っている場合」とか そういう書き方にならね
>>862 それはありだと思う。
「(金額) cnt が 0 より大きかったら処理する」のように、cnt がもつ情報が類推できるような場合だよね。
ただし、それは他のコードやコメントと読み合わせてはじめて理解できるものじゃない?
コード例だけだと、類推のための手がかりがないから、論争になってるわけで。
変数名がcntだから、count=「個数」であることは確か(なはず)なので、 金額は例としてはまずいな。 しかし、個数である場合に、 「あれば〜」とか「残っていれば〜」 などでなく本当に 「0より大なら〜」 というコメントにすべき例を思いつかない。
カウンタ絡みのテキトー変数名でcntがついても不思議じゃない
つまり、cntが何を表すか、処理ってどんな処理か書けっって言いたいんだろう。
>>862 でいう「じいちゃん」とか「110番」って情報が抜けてる。
// まだ在庫があれば、賞味期限を確認する if (cnt > 0) { /*賞味期限確認*/ }
// cntが0以上だったら処理する // 19XX.X.X. レビューで修正 //if (cnt > 0 || cnt == 0) { if (!(cnt < 0)) {
おまいら、なんか丁寧な議論をしてて好感が持てるぞ。 要は内部的な単なる処理に自明なコメント付けるなってことだよね。 i=i+1; //iに1を加算する みたいな。
howじゃなくてwhatを残すんだろ コメントの基本
>>868 コメントを書きたくなったら変数名や関数名を考え直すんだ。
こんなかんじで。
if (zaiko > 0) {
shoumikigen_kakunin();
}
修正前の方がまだマシのような気が・・・
指摘した人間の想定の遙か上をいくアホであったのかも
>>869 自分は今までIFは肯定文と否定文両方必要だと思ってたけど
今いるところで、無駄な文は作るなと直された。
SQLだと否定文を書くのはNGだけど
今の規約ではJavaの方は否定文なら否定文だけ書かされる(当たり前だが)
if (!methodA()) {
// 処理
}
ちょい上のほうで関数分割ネタがあるんだが、 今漏れが見てるソースにおもろいのがあった。 VB6ですまんが Sub calc() 処理1 ・ ・ 処理10 Call calc2 End Sub Sub calc2() 処理11 ・ ・ 処理20 Call calc3 End Sub Sub calc3() 略 これは関数分割といっていいのか?w
>>879 分割なのかと言われると確かに分割してるなw
>>879 そんな感じで分割(?)されてて、しかも連番の振り方が処理内容ではなく改修の順番だったというクソコードのメンテさせられたことがある。
>879 calc2がcalc以外からも呼び出されるなら、まあ許せる範囲にはいるかもしれん
ぱっと見てどれほどの量の処理なのかわかんないから、 どんどん続きの処理が出てきてウヴォアァってなるなー メンテでそんなコード見たくないねぇ
>>877 条件式は!と<さえあれば表現できるので、
わざわざ==や!=や>のような余計なものを使って
初心者を混乱させるべきでない
とか?
4種類の単品マスターをセット組する処理で 単品マスターがカナとコードで検索が可能で 検索結果の並び順をカナ、コード、更新日時順で指定可能 24個のコピペ関数がKensaku1とかSearch2とかって名前で存在し、 cmdKensaku1で呼んでるのがKensaku4だった ぐわーっとコメントアウトして書き直してしまった。
>>885 俺、perlでそういうのに出会ったことがある。
正直あれは思い出したくない。
あー。あるある。
//if (cnt > 0 || cnt == 0) { って結構見た目綺麗だよなぁ、と思ったりw >=ってなんかキチャナイ気がするし
左辺がもっと長かったら2回書くのは鬱陶しいよ 評価するために何らかの処理が走る場合は2回走っちゃうし(一時変数使えばいいけどやっぱ手数が増える)
890 :
879 :2007/10/09(火) 05:50:29
>>880 ,882
一応きりのいいところできられてるっぽいが、
変数のスコープが狭くできているとかいうこともない。
calc2以下は前の関数から呼ばれることを前提に作られている。
関数分割のメリットはどこにあるのやらw
>>881 うっ・・・こっちのほうがまだましだったか
当時の事情はよくわかんねえんだが、たぶん、
関数の長さが長すぎるといけない、とかいうんで無理矢理ちぎった
というのがオチだろうと思います。
case型構文があるときはどうすんの? ちょんぎれないよね。
ちょんぎるんじゃない、構造を見直すんだ
case文ひとつで何百行にもなるのなら、その時点でおかしい。 ちょんぎるとかいうレベルじゃない。
だって100とおりのcaseなら各中身が平均4行だって500行ぐらいすぐなるじゃない。 コマンドが何十種類とか。caseの数が多いこと=設計ミスとは決めつけられないでしょ。
決め付けはできないけど、大抵の言語でダメだよ
>>894 それはcase文ひとつで数行である、ってことでは?
>>896 WndProc か?
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
switch(msg) {
case WM_PAINT: return OnPaint(hWnd, wp, lp);
case WM_SIZE: return OnResize(hWnd, wp, lp);
default: return DefWndProc(hWnd, msg, wp, lp);
}
}
ってするな、俺は。
実際には WPARAM や LPARAM をそのまま渡したりはせずに
MSDNの記述に従って分割してから渡すけど。
仮に処理するウィンドウメッセージが多くて、
この case が 1000 個連なったとしても OK だろ、この場合は。
よくあるプログラミング講座みたいに case の中につらつら書くのはダメだ
>>898 それって非常にありがちだけど、個人的にはそういう書き方は自己満足にしかなってないと思うなあ。
一度反省的に自分のそういうコードを見直してみて欲しいよ。
一箇所からしか呼ばれないコードを関数に括りだすことが本当に可読性に資するのか。
むしろ、コードを読む際にそこに飛ぶ手間を増やしているだけじゃないのか。
「caseの中につらつら書いた」コードが本当に読みにくいのか。
むしろ教条主義的にそう思い込んでるだけじゃないのか。
抽象ってどういう意味か考えてみて欲しいね 「読まければ意味がわからない関数」は括り出す意味は無い 可読性をあげるためには、「今まさに関心のある」レイヤ以外に存在する 関数について、「読む必要性自体」を消し去る必要があるのだが
「コードを読む際にそこに飛ぶ」のにそんなに手間がかかるのかw
>>894 俺ならcaseマッチングのテーブルを挟んでループさせるな。
マッチングオブジェクトは当然処理関数への参照を持たせる。
マッチングしたら対象オブジェクトの処理を呼び出す。
C/C++なら普通に書ける関数テーブル。
処理部分はスマートになるし、定義部分ではコメント多用して
逆に分かり易く表現出来る。
VBはしらねーよw
OOPLにおいては、 どうやって分岐するか、と分岐した先で何をやるか は、分離しとかないと基本的にはOCP違反になる
関係の無いメッセージに対する処理を脳内でスキップする方が 関数1個参照に行くよりよほど時間かかるよな 何のサポートもしてくれないエディタ使ってる場合はどうか知らんが 長大な関数は変数のスコープなんかで 気にしないといけないことも爆発的に増えるし
>>902 状態遷移表の実装なんかで俺もソレ良くやるけど、
関数ポインタ(Cなんで)使うと、静的解析で処理が追い辛くなるのが難点かねぇ。
こういうときデリゲートとかラムダ式があれば… boost禁止だしのぅ
>>904 分かってないね。
「関係の無いメッセージに対する処理をスキップ」する必要性は
各メッセージの処理を関数に括り出そうがなくならない。
ただエディタ上で「読み飛ばす」行数が減るだけの効果しかないんだよ。
それに、ウィンドウプロシージャのような定型的で分かりきった処理は
行数が増えてもコードの見通しは悪くならない。
実際試せば実感できると思うけど、
こういう場合はむしろ関数呼び出しによる抽象化の方がコードの不透明性を高めるから
読んでイライラする蓋然性が上昇するよ。
>>907 わかってないのはお前だ。だまされたままで良いから周囲にあわせとけ。
んー・・・凄い個人的な主観的な話になるけど、 caseとcaseの間がエディタの半ページ以内なら気にならない。 1つのcaseでエディタ1ページを超えると途端に読み辛くなる。 開発環境によってエディタの行数変わるんだけど (WindowsだとVCかサクラ、Linuxだとemacsとか)、 俺は大体こんな感じ。
>>907 ガラクタを無秩序に押入れに押し込むことを抽象化と呼ぶのなら
お前のいうとおりだろうな
関数名に連番とか振ってないだろうなw?
>>910 >ガラクタを無秩序に押入れに押し込むことを抽象化と呼ぶのなら
そんなトンデモな前提に立った議論ではない。
君とか904は、まあダメなプログラマにありがちだけど
暗黙のうちに「プログラムを書いている時点の視点」に立っている。
確かにプログラムを書いている時点に限定すれば、ほとんどの場合は
関数に括り出した方が読みやすいし、見た目にもスッキリする。
「caseの中につらつら書いた」コードなんて醜いし見難いように思われる。
ところが同じコードを一年後に読むと評価が逆転するんだなこれが。
なにそれ、全然理由になってない
>>910 >関数名に連番とか振ってないだろうなw?
関数名、変数名がすべて [A-Z]{2,3}[0-9]{5} なコードの保守ならやらされたことがある。
それはともかく、case 文の中身が10行超えたら、普通 state か command か chain of responsibility あたりを使わね?
case 1: { } break; case 2 { って最初に作っておいたらスコープ付くしbreak強制になるから便利
>>911 オブジェクト指向にOCPってあるんだけど、きいたことある?
いろいろ勉強して、実践して、その上でいってるのか心配になっちゃうんだけど
デリゲートを条件に使われる定数をインデックスにして連想配列にぶちこむのは一種のストラテジーパターンらしい
>>915 そいつのレスはムダに長いが、主張したいことは最後の1-2行だけ。
そこ見たらこれ以上そいつにかまう必要が無いことがわかる。
>>899 >
>>898 > 一箇所からしか呼ばれないコードを関数に括りだすことが本当に可読性に資するのか。
Testability
>918 君の一言を待っていた
( ゚д゚ )
この類の話は
センスがない人にはいくら説明しても理解できないんだよね。
たぶん
>>899 ,907,911は文系か元コボラ。
厳しいこといえば、センスとか言ってるやつもヤバイ 基本中の基本だ
こういうやつらが消火の悪いスパゲティ作るんだろうな
燃え盛ったときに消しにくいんだな
負け組PGの揚げ足取り乙
>>899 逆でしょw
武道みたいにプログラミングでもスタイルや「型」は大事だし、
それらはほとんどの場合正しいが、いつでも正しいわけじゃない。
意味を持った処理は関数に括り出して抽象化することによって読みやすくなる、
という「型」はほとんどの場合正しいが、いつでも正しいわけじゃないんだが、
自分の頭で考えられない教条主義者(=「センス」を欠いた人間)にはそれが
判断できないし、そういう発想が頭をよぎっても抑圧してしまうんだね。
王様は裸だ、と言えないのと同じ心理的メカニズムが作用するからねw
何が「逆」なのか、説明してくれ
おまえら、当然ファウラーの「リファクタリング」を読んだ上で発言しているだろうな。
> 教科書主義
いくら教条主義はNGだからつって、そもそも教科書読んでねえやつは論外なわけだ
同意
>>927 あいかわらずムダな長文だな。自分にレスして楽しいか?
俺には無意味な事を二度書いて、
最後に無関係なたとえ話をしている様に見える。
誰か
>>927 をリファクタリングしてくれ。
case毎の処理を関数に切り出すと読み辛くなるってのは、 caseの切り分け方がおかしい証拠に他ならんと思うのだが。 あと >927 >意味を持った処理は関数に括り出して抽象化することによって読みやすくなる、 >という「型」はほとんどの場合正しいが、いつでも正しいわけじゃないんだが の「正しくないケース」ってどんな時さ。 抽象化によって読み辛くなるのは、抽象化の仕方がおかしい時だけでしょ。
WTLのメッセージマップとか激しく便利だお
>>936 正しくないケースを考えてみた。
1.
>>927 みたいな奴しかいない現場
2. 作成した関数を全て紙で管理している現場
3. 将来メンテする奴への嫌がらせ
4. リソースがカツカツ
5. そもそもサブロジックを切り出せない言語だ
6. コンパイラの限界に挑戦中
こんなもんか?
942 :
936 :2007/10/12(金) 02:21:01
>941 納得してしまった。w
>>941 >5. そもそもサブロジックを切り出せない言語だ
そうかN88-BASICだったんだ
N88-BASICじゃ仕方ないなw N88-BASICでも、変数名と戻り値代わりに使う変数名を工夫すれば GOSUB との組み合わせで何とかなるかもしれんが 本質じゃない不毛なコードが大量生産されそうだ
いろんな火災現場を転々としてるダメPGが言うのもなんだけど
どちらの書き方でも、どんなに拘りの秘伝のソースでもいいが
可読性の無いソースを書くのはやめて欲しい。。
>>944 BASICの頃でも、ON (式) GOSUB *Label...でサブルーチン化はしてたよ。
>945 >可読性の無いソースを書くのはやめて欲しい。。 無理。 自分の常識は他人の非常識である場合が多い。 # だからflgで3値を返すなとあれほど・・・
いやそもそも可読性が無ければ保守不能だし。「可読性が低い」だろ。 じゃあその可読性の水準を向上させるためにはどうすれば良いか。 という話になるけど。これは99%以上が独学だろ。 スレの上のほうに出てきた本を読んでおくのは当然。 OSSという容易に読めるコードもあるじゃないか。
int what_length_willie( const string& name ) { if( name.compare( str_me ) == 0 ){ return LENGTH_OF_MY_WILLIE; } return LENGTH_OF_YOUR_WILLIE; }
if(orz = 3){...}
バロスwww
よくあること。
こそっとネタ投下。 以前の案件で、進捗が遅れているためにUTのお手伝いをすることに。で、UTなんでソースも見てみる。 Cで書かれていて、1つの関数がえらい長い。まぁ、これはよくある話だと思っていたから、気にしていない。 あの、開発言語C++なんですよね・・・ 「クラス設計」くらいしろよグォラァ〜
C89ではコメントに//が使えないんだよぉ
引数が全て値渡しになってた……参照渡しも知らんのかなぁ
955 :
仕様書無しさん :2007/10/14(日) 12:25:19
>>952 おもしろくない。ひとヒネリして投下しろ。
>>952 int CWillie::what_length( const string& name ) {
if( name.compare( str_me ) == 0 ){
return E_LENGTH_OF_MINE;
}
return E_LENGTH_OF_YOURS;
}
こうのがいいか int CWillie::Length( const string& name ) const { if( name.compare( str_me ) == 0 ){ return E_LENGTH_OF_MINE; } return E_LENGTH_OF_YOURS; }
いや、こうか? int CWillie::what_length( const string& name ) const { if( name.compare( str_me ) == 0 ){ return m_my_len; } return m_your_len; }
いや違うな、yourが入る時点でクラス設計が変か
こうか int CWillie::Length() const { return m_length; }
>>948 -のコードは何が面白くてやってるの?
俺には正直サッパリ理解できん。
ウンコだチンコだ言ってれば嬉しくなっちゃう永遠の精神年齢12才ってこと?
しかし、それならこのスレとマッチしてないと思うんだけど。
真面目にどうするのが理想か書いてただけ
チラシの裏でやれよ
int cal(int a, int b, int c) { int d = 0; if (a == 1) if (b < c) d = b; else d = c; else if (a == 2) if (c > b) d = b; else d = c; else if (a == 3) if ((b + c) % 2 == 0) d = (b + c) / 2; else d = (b + c) / 2 + 1; return d; }
int call(int a, int b, int c) {
int cal(int a, int b, int c) { int result = 0; // 結果 switch (a) { case 1: if (b < c) result = b; else result = c; break; case 2: if (c > b) result = b; else result = c; break; case 3: // b+c が偶数の場合 if ((b + c) % 2 == 0) result = (b + c) / 2; else result = (b + c) / 2 + 1; break; } return result; } そもそもaがb,cと同列の扱いじゃなくて条件だからa,b,cなんて並べた変数名からしてイヤだよね
?: つかえば? それよりそのcase 1,2,3を個別の関数にしたほうが良さげだな。
変数名の話なのか? if (a == 1) if (b < c) d = b; else d = c; else if (a == 2) if (c > b) d = b; else d = c; 処理同じやん
#define CAL_MODE_MIN 1 #define CAL_MODE_MAX 2 #define CAL_MODE_MIDDLE 3 int cal(int mode, int x, int y) { switch (mode) { case CAL_MODE_MIN: return x < y ? x : y; case CAL_MODE_MAX: return x > y ? x : y; case CAL_MODE_MIDDLE: return (x + y) / 2 + (x + y) % 2; default: return ERROR; } }
俺の前任者がやってたJAVAのソース。 a,b,c という3つの項目について、それぞれ4通りの分岐があったとき、 a,b,c は依存関係がなく、4通り×3項目=計12の分岐になれば良いのに、 4×4×4=64通りの分岐書いてやがったよ。if分のネストして良く頑張ったよね。 ゴッソリ消して書き直したけど。
>>971 その手のやつで、項目ごとのビットフラグと独自定義の分岐番号を両方使っている
おバカ仕様のプログラムをメンテさせられたなあ。
ご丁寧に内部仕様書まであった。
項目を増やす度に作業量が指数関数的に増えていくって、どんだけ〜w
8項目くらいまでは耐えたけど、16項目とかふざけた話になったので、さすがに
キレて全面改訂させてもらった。
#define MAX_XXX_SIZE 255 typedef struct HogeHoge { hoge_str[MAX_XXX_SIZE]; hoge_str[MAX_XXX_SIZE]; ...... } HOGEHOGE; struct HogeHoge hoge; //初期化 memset( (char*)&hoge.hoge_str , 0x00, MAX_XXX_SIZE); memset( (char*)&hoge.hoge_str , 0x00, MAX_XXX_SIZE); ...... 泣きたくなった。
いや、コンパイル通らないだろ
いや、名前の重複とかはクリヤしたとして、でしょ。
>>973 は、memset( (char*)&hoge, 0, sizeof hoge ); でいいのに、とか言いたかったのかな。
まず、構造体のメモリ領域をゼロフィルする必要があるかどうか、だな。
hoge_str 型はどうなってんだよ?
客より先にコンパイラに怒られるよな
struct HOGEHOGE { name[MAX_NAME_LEN + 1]; ID[MAX_ID_LEN + 1]; ・ ・ ・ } struct HOGEHOGE hoge; memset(&hoge, 0x00, sizeof(hoge)); ファイルに書くときとか、終端文字入れる分余分を定義したときに使う
いや、コンパイル通らないだろ
しーーっ
>>980 型名がないとか、セミコロンがないとかは置いといて、、、
その [MAX_NAME_LEN + 1] って書き方は、俺の居る現場でも見る。
俺のところは [100 + 1] ってリテラルになってるけど。。。
>>983 名前の最大長+1って書き方は、終端文字分ってことで、13とか書くよりは想像しやすいとは思う
あとリテラルよりは定数のがいいだろね
次スレ立てよっか?
986 :
985 :
2007/10/16(火) 13:04:15