4 :
仕様書無しさん :2007/07/06(金) 16:11:29
Try
Call 新スレチェック
Catch 1_Exception
Messagebox.Show("
>>1 乙んでれ","新スレ記念")
Finally
if
>>1 Is Not Nothing Then
>>1 .Dispose
End Try
Try
Dim i As Integer
Dim s As String
While True
i = 1 / 0
s = Nothing.ToString
Loop
Catch NRE As NullReferenceException
MessageBox.Show("ぬるぽ")
Resume Next
Catch ex As Exception
MessageBox.Show("
>>1 乙")
Resume Next
End Try
throw new NullReferenceException;
7 :
仕様書無しさん :2007/07/06(金) 23:28:18
if ( i < 8 ){ ~ } else if( i < 19 ){ ~ } else { ~ } っつーコードを今日見た。
定数直書きしてる以外は、まぁアリかなと思ってしまった。
9 :
仕様書無しさん :2007/07/06(金) 23:43:31
else ifで8以上という条件が入ってないのがいやなのかね。 それはelseが含意してるからなくても問題ないよな。
マジックナンバーがいやなんじゃない?
別に会社辞めようと思うほどではないな
かといって、「辞めようと思ったほどではないが嫌になったソースを晒せ」スレを わざわざ立てるまでもないような。
setHoge(int hoge) { hoge = hoge; } 一瞬スルーしそうになった label: for(int i = 0; ; i++) { s = fs.readline() switch (i) { case 0: ... case 1: ... ... case XX: break label; } この意味の分からない switch 文、全く関係のない VB 屋も書いてたけど、何か意味があるのだろうか
>>前スレ997 >配列参照って START TO END みたいな指定出来るん? いや、それはさすがに。 考えてることが違うと思うけど、漏れが使ってるのはこんなんです。 Dim Data1(1 to 6) As Integer Dim a As Variant For i = LBound(Data1) To UBound(Data1) a = Data1(i) Next i >>前スレ999 >あ、ごみん、そういう意味じゃなかったのね>996 >なんかボケてた済まん いえいえ、こっちこそ説明が足りなかった。
17 :
仕様書無しさん :2007/07/07(土) 02:23:21
optionで配列開始番号固定すれば良いのに。
>>16 おまえのソースで辞めたくなったヤツ多そうだな。
>>17 >>18 書いておくけど
Dim Data1(1 to 6) As Integer
の部分は前スレ998をコピーしただけだから。
while(rs.next()) { ~~ break; } を見て嫌になった。本人に↓と同じ意味だよね?と確認しつつ直した。 if(rs.next()){
>>21 詳しく書かなかったから伝わらなかったかな。
while(rs.next())
{
System.out.println("hoge");
break;
}
って書けばわかるかな。
あー、無条件にbreakしてるのか
>>23 そうそう!そうなの。そういえば更に思い出したんだけど、こんな感じだったなあ↓
while(rs.next()){
if(cond)
{
// some statement
}
break;
}
もちろんif(rs.next() && cond)に書き直した。
VB6とかやってる人間は、if(cond1 && cond2)の中身が
&&とか関係なく全て評価されると思っちゃうから、
二重if文とかを書く傾向があるように見える。
breakとcontinueは好きな奴はホント好きだよなあ
while(1){ if ( hogehoge ){
書きこんじったorz while(1){ a++; if ( hogehoge[a] ) { b++; continue; } break; }
>>24 実はその while は中で break や continue を使ってジャンプするためのもので、
そしてさらに実は別のループ文に含まれていて、内側の while を if に置き換えると
それまで配置されていた break や continue が外側のループに適用されるように
っていう悪夢が頭の中をよぎった。
>>28 文字数のカウント?
どこから教えるべきか悩むな
>>15 どの言語でも何故か
for {
case
}
が好きな奴いるよな。何故だろ
if(なんか条件) { } なにも実行しないんですか? 気になって眠れません><
>>32 その「なんか条件」の式は副作用を持っているのかなあ。
それとも将来その中に何かを書きこむのが100%確実だからそう書いているのかな?
気になって(ry
>>32 その条件のときは何も処理しないということを明示するために敢えてそういう風に書くことはあるけど
グダグダ陰口叩かれないように今度からコメントを書いておくか
>>34 if (条件) { 空 } else { 何かする } ならまだわかるけど(条件逆転しろとは思う)、
上から下に流れるだけの状況でelseもなくif (条件) { 空 } と書く理由はよく
わからんな。
空の関数DoNothing()を入れとくとか。
>>35 たしかに
if(条件){
空っぽ
}else{
処理
}
はあるけど
if(条件){
空っぽ
}
はないな
失礼した。
if (a = 0) { }
削るとバグが出るって奴か。
>>32 条件のところが関数とかメソッドを呼んでいるならば怖いね
条件式というか関数実行後の副作用がありえるし、エラーコード判定の名残の可能性がある・・・
例外使えないような連中とJavaとかやるとよく出くわすコードかも
>>40 中途半端に使えると、
} catch( Exception e ){
}
と書いて揉み消してくれるので、余計タチ悪い。w
何度出くわしたことか。orz
>7 昔DOSプログラマだったころ、MSC6でそれ書いてはめられたことがある。 オプティマイザが順番を入れ替えやがって、>7のコードでいえばi < 8のときも else if (i < 19)の部分が先に評価されて条件が成立してしまうという…。 そのときは#pragmaで部分的にオプティマイザを切ったけど、それ以来 冗長でもelse if ((i >= 8) && (i < 19))と書くようにしてた。
>41 それは中途半端に使えるというレベルでもないw
44 :
仕様書無しさん :2007/07/07(土) 21:05:11
>>42 初歩的な言語仕様から外れてるんだから
それはコンパイラのバグだと思うが。
46 :
仕様書無しさん :2007/07/07(土) 21:08:52
♪~キチガイの国~アメリカ~銃乱射~豚32匹死亡~いいザマだ~♪ ♪~キチガイの国~アメリカ~銃乱射~豚32匹死亡~いいザマだ~♪ ♪~キチガイの国~アメリカ~銃乱射~豚32匹死亡~いいザマだ~♪ ♪~キチガイの国~アメリカ~銃乱射~豚32匹死亡~いいザマだ~♪ ♪~キチガイの国~アメリカ~銃乱射~豚32匹死亡~いいザマだ~♪
47 :
仕様書無しさん :2007/07/07(土) 21:17:10
48 :
仕様書無しさん :2007/07/07(土) 21:39:55
それは見ればわかるよ
51 :
仕様書無しさん :2007/07/07(土) 21:50:48
if((((式1)&&(式2)) || ((式3)||(式4)) && ((式5)||(式6))){ --意味不明なスパゲッティが数十行-- }else if(--眩暈がするたくさんの式--){ --以下略-- } せめてコメント付けておいてください…
52 :
42 :2007/07/07(土) 21:53:07
いや、当然コンパイラのバグだよ。だからといってそのコンパイラを使うのをやめるわけには そう簡単にはいかないから、防御的プログラミングをしたっていう話で。
53 :
仕様書無しさん :2007/07/07(土) 22:11:27
>>42 コンパイラの不具合にあわせて防御的プログラムをしたのはいいと思うよ。
でもね、このスレは会社をやめようと思ったソースコードなんだよ。
そのソースコードで会社を辞めようと思ったのか?
コンパイラのバグをどうにもせず、防御的コーディングのみで 対応するような会社だったら辞めたくなるな。 まぁ、製品によっちゃどうしようも無いこともあるだろうけど。 そうだとしたら、間違って最適化された箇所を早期に 発見してくれるツールなり何かが欲しくなってくるな。
コメントも無い 変更履歴も無い あるのはコピーライトだけ
56 :
仕様書無しさん :2007/07/07(土) 22:28:24
>>54 テストをちゃんとすれば気づくだろ。
テスト時は最適化せずに、リリース時だけ最適化してコンパイルする奴ならむしろ辞めてほしい
57 :
仕様書無しさん :2007/07/07(土) 22:38:42
>>51 どうせ正解はこんな感じ。
if((((式1)&&(式2)) || ((式3)||(式4)) && ((式5)||(式6))){ //もし今年が閏年なら
--意味不明なスパゲッティが数十行--
}else if(--眩暈がするたくさんの式--){
--以下略--
}
一番辞めようと思ったというか辞めたのはアプリケーションを改修のために引き継ぐ事になった時の話だ。 外注に作らせていて炎上したらしく、酷いことはまあ予想していた。 だが、本気で辞めようと思ったのはその時が最後だ。 ソ ー ス コ ー ド が 存 在 し な い
59 :
仕様書無しさん :2007/07/07(土) 22:46:25
>>58 うちのプロジェクトではよくあることだ
10年勤めて2回はソースコードがまったく存在せず、
2回は偽物またはバージョン違い(つかそもそもコンパイルエラーが出る)のソースコードが提供された。
もちろん仕様書つきのプロジェクトなどお目にかかったこともない。
>>58 ソースコードがないのも、ソースコードのバージョン管理ができていないのも
経験したけど、
ど っ ち も 嫌 だ !
>>59 最初から組み直したほうが早いこともあるかも……。
俺が経験したのは、マシンごとバイナリが失われて、ソースコードも無くて、
あったのはインタフェース仕様書だけという、かなりアレな状況だったけど。www
>>60 >コンパイルエラーが出る
さすがに都市伝説かと思ってたけど、本当にあるんだな。w
63 :
仕様書無しさん :2007/07/07(土) 23:15:19
>コンパイルエラーが出る VisualStudioの古いバージョンで作ったのを 新しいバージョンでコンパイルしようとすると コンパイルエラーはしょっちゅうでる
>>60 そんなプロジェクトにしか回されないお前って一体・・・
ソースコードないのはないので好きだけどな。 1年ぐらい時間くれるし。ないならしかたないよねって感じで 今時年契約で5000万とかうますぎるし
コメントアウトされたコードあるのは全て糞 消せよ読みにくいんだよ
結構変更履歴として残させるとこ多いね。 ローテクな感じでかわいそう。
>64 でもそんなプロジェクトこそ実力と経験は必要だよな 全然報われないだろうけどw
>>68 コードの90%近くを書き直してコメント率が70%位行った時は、さすがにorzってなったな。
コメント率って何? ソースコード中のコメントの量?
そうだよ
もしくは各行に対してコメントの記述してある割合 // 変数i の宣言 int i ; // 変数i に0を代入 i = 0; とか死にたくなるくらいくどいソースは見たことある 肝心なi が何に使用されているかは記述されていないんだがなw
>74くらいのコメントなら自動生成できるなw そんな機能絶対いらないけどw
>>74 を短くしてみた。
// int i;
int i;
// i = 0;
i = 0
// もし a と b が等しいなら if(a==b){ // c に func() の戻り値を代入 c = func(); // それ以外なら }else{ // 何もしない } ..._| ̄|○
まともなコメントは最後のだけか
>79 最後はコメント以前にelse{}自体が要らない…
いらないけど、会社で書くことが決まってるかもよ? うちはdefaultは書く決まりになってるし。
82 :
仕様書無しさん :2007/07/08(日) 05:09:37
width を本気で ワイズと全員が言っていた時。。。
スレ違い 変な読み方スレへお帰りください
>>82 ワイドって読んでたけど、本当はなんなの?
辞書を引いてみたが、ウィドスと読むのかな? 発音記号はこんな感じだった → widθ
え、俺はずっとwithと同じ発音だと思ってた・・・やべぇw
Javaで一時的に2MBほどのbyte配列を確保しなければならなかったと言うことがある。 簡単なアップロードモジュールなんだが、実装をさせてみた所、単体テストでOutOfMemoryが炸裂。 嫌な予感がしたのでソースを追ってみた。 byte[][][] fileDate = new byte[2][1024][1024]; 協力会社からきた30台Java経験3年の奴だったんだが、Fizz-Buzzやらせて辞めさせた
>>88 それでいいんじゃねーのw?それで2MBって思えばさw
何か見落としていたらすまんが
>>88 の何が悪いのかわからん
>90 オレも分からなかった Javaの多次元配列だとなにかあるのか?
>>90 参照するたびにオフセットから3つのインデックスを算出しないといけないのはナンセンスだな。
94 :
90 :2007/07/08(日) 12:04:39
>>93 JVMの仕様はオブジェクトの構造を定めていないから実装依存だと思うんだが。
というか何がわからんかって、
>>88 のコードでOutOfMemoryが炸裂する理由がわからん。
配列アクセスで参照を辿るという「普通の実装」で考えても
byte[1024][1024][2]ならタコだがbyte[2][1024][1024]なら問題ないと思うが。
95 :
88 :2007/07/08(日) 12:07:57
訂正 byte[][][] fileDate = new byte[1024][1024][1024];
97 :
93 :2007/07/08(日) 12:15:31
4GB積んだ企業向けシステムなら問題なしw
>>88 つまり、その最初の2つのインデックスしか使用してないわけだなw
>>97 JVMって4GBもヒープとれたっけ?
>>93 それに関しては多次元配列にする方が効率が良かったりする
new byte[2*1024*1024] だと2MBの連続した領域がヒープに確保される筈
だけど、new byte[2][1024][1024]だと1KBの連続した領域がバラバラに確保されて参照されるんで、OutOfMemoryが発生しにくい
最近の実装が最適化でもするならばスマソ
88は、仕事でもタコミスを連発していることだろうな
101 :
90 :2007/07/08(日) 12:33:40
>>99 あまり詳しくないがGCがコンパクションくらいするのでは?
そもそも2MBの配列をローカルで使い捨てするようなプログラムなら
そっちの方が問題が大きい気もするが。
そもそも「2MBの配列」を
byte[2 * 1024 * 1024]で取るかbyte[2][1024][1024]で取るかというのは、
性能よりも何よりも、まずはその配列の意味を考えて決めるのが正しい姿勢だと思うが
102 :
仕様書無しさん :2007/07/08(日) 13:20:04
ファイルのアップロードという話だから new byte[2*1024*1024]のほうがストリームと つなげやすくていいんじゃないだろうか それはそうと、「fileDate」に誰もつっこんでないんだな
>>102 よくあるスペルミスだし、辞めるほどじゃないから
JavaだったらNIOのDirectByteBufferとか使うんじゃね?
105 :
仕様書無しさん :2007/07/08(日) 13:44:40
>>99 OSによるだろうが仮想メモリ空間が提供されている以上は
メモリに空きさえあればOutOfMemoryの発生頻度は同じ
>95 おいおい, 全然意味合いが違うじゃないかw >102 byte型に独自フォーマットで日付の何かを入れてるんだと解釈していた
32bitフラットメモリモデルでは、たとえば、 DLLのコード部分も同じ4GBの空間に読まれるので、 そこで仮想メモリ空間が分断化されることは多々ある。
108 :
仕様書無しさん :2007/07/08(日) 20:27:13
ソースコードじゃないが 仕様書のタイトルを♪で囲ってた時・・ ♪○○○○システム♪
109 :
仕様書無しさん :2007/07/08(日) 20:56:23
いいか、みんな (゚д゚ ) (| y |) 安部政権になれば「いい国」になると信じてたのに、 いつまでたっても苦しいままだ。 それどころか、ますます国じゅうが狂ってきて、 日本人同士が憎しみ合うようになっている。 美しい ( ゚д゚) 国 \/| y |\/ ひらがなにして ( ゚д゚) う つ く し い く に (\/\/ 逆から読むと… ( ゚д゚) 憎 い し 苦 痛 (\/\/ そういうことだったんだ。
>74 今追ってるソースがさー ' SQL文を作成 (コード略。まぁベタベタに文字列連結してると思いねぇ) ' レコードセットオープン (コード略。単にOpenメソッド呼んでるだけだが) ' フェッチループ (コード略。毎度おなじみ、Do Until .EOF~.MoveNext~Loopだ) もうDB読みに行くたびにこればっか。下の二つのコメントいらんから何がしたいのかを書けよと > 書いた香具師 明日もまた最初の「SQL文~」のとこに「何を照会するのか」書き足す作業がはじまるお……
>109 何、どの辺りが適当なわけ?
書かなくとも解るコメントって本当に邪魔だよな そんな時に限って重要なコメント(目的とか制限とか)が記述されていない
「コメントは全行に書け」という規則があったので、コーディング用紙の右側に全部 /* */ を書いた奴を大量コピーして使用。そのままパンチに出したから、隙間の所も全て 空のコメント行になってた。しかも肝心のコメント文はカタコト(w
116 :
仕様書無しさん :2007/07/09(月) 14:21:50
>そのままパンチに出したから、 50年くらい前かな?
>>116 おいおい、25年くらい前まではあったぞ。
確かに、紙カードを最後に使ったのは、25年前だなぁ
119 :
仕様書無しさん :2007/07/09(月) 17:43:30
ちょwwww お前らいったい何歳なんだ? 俺29なんだが・・・ ps.別スレに誤爆して欝なおいら
そんないい歳こいたオッサンが昼間から2chかいいご身分ですな。 しかし、五十路ニートってしゃれにならんなw
マ板で昼間からとか
122 :
118 :2007/07/09(月) 19:11:01
いや、もう引退しているから。 暇で暇で仕方がないんです。 いいご身分でしょorz
123 :
仕様書無しさん :2007/07/09(月) 19:30:43
>>122 それはそれで、先派内がうらやましい気がする
124 :
仕様書無しさん :2007/07/09(月) 20:15:17
125 :
117 :2007/07/09(月) 21:20:37
悪ぃ、俺職場から書いてる。
ベタだけど、フィボナッチ数列の一般項を求めるプログラムで再帰で書く奴はどうかと思った。その子は情報系。あ、大学での話ね。
>128 それが実際いるんだな。 「各処理が何をしているのか分かるよう、コメントを書くべき」 ということだけ知ってて 実際何を書くべきなのか全く分かっていない奴 コードを直訳しろとは誰も言ってないだろっちゅーに…
' 結果をRetに格納 Ret = MsgBox(ry ' もしRetが6なら If Ret = 6 Then ' Aに1を格納 A = 1 VBじゃもはや見飽きたコメントだな。 せめて【Retが「はい」なら】と書け… って言うかそれ以前に定数使えよと思うけど。 しかもAに1を入れる意味が何なのか書いてない。
ようはアレだろ、コメントはコードを日本語化したものを書くのじゃなく、そのコードはどういう意図なのかを書けってことだろ。 コメントは他の人にも分かるよう、コードの意味を書くのですよとか言うのを言葉どおりに受け取ってるんじゃない?
132 :
115 :2007/07/10(火) 08:49:54
>>115 が30年ぐらい前だったかな。 俺は今59だけどクミコで現役です。
小ぶりのシステム新築お任せがよく来ます。
まあ入門書丸覚えが精一杯、てなレベルの人々が多いんだろう。 入門書に書いてある、コードの直訳としてのコメントしか 見たことが無いから、『コメントとはそーゆーモンである』と 身につけてしまうのであろう。 そうなってしまわない奴こそがまっとうなプログラマーになれるわけだが...
久美子さん(59歳)まだまだ現役です。
ワロタww
ホットドックで楽しようと考えた管理者が大杉た
137 :
仕様書無しさん :2007/07/10(火) 12:02:25
えっ、そっち?うわー
>>127 再帰の練習課題なのに
一般項の公式つかって得意になってる奴?
フィボナッチ数列ぐらいの単純なものなら再帰より一般項を直接求めたほうが速いかも知れんけど、どっちでもいいよ
>一般校を直接求め どうやって?
>>139 いや、そうじゃなくて線形で書けってこと。
オーダーが全然違う
例えば (define (fib n)
線形?反復の間違いだろ
そもそも数列自体が再帰的に定義されてるから、再帰的にプログラミングすることは別に自然だと思うけどな。
言ってる意味がよくわからんが return fib(n - 1) + fib(n - 2); じゃなくて int tmp = fib(n - 2); return tmp + n - 1 + tmp; と書けってことか?
ただ、フィボナッチのプログラムを書けなら再帰で全然OK 時間のオーダーをなるたけ小さくしろなら、再帰で書く奴はゴミ虫
>>147 それ両方再帰じゃない?
再帰:
(define (fib n)
(if (<= n 2)
1
(+ (fib (- n 1)) (fib (- n 2)))))
反復:
(define (fib n)
(define (iter rersult a count)
(if (=> count n)
result
(iter (+ result a) result (+ count 1))))
(iter 1 1 1))
フィボナッチ数の一般項ならWikipediaにも載ってるよ
ただ、無理数のn乗が入ってるから余程nが大きくない限り普通に足し算したほうが速い気がするw
>>142 ・・・(^ω^;)
高校で習うから安心していいよ
寿司食いたい
>>146 自然ていやぁ自然かも知らんが、末尾再帰を再帰で書くのは阿呆。
ちょっとおもしろそうだから、再帰・反復・一般項でそれぞれ実行時間計ってみた。 再帰; 35項まで求めて9.3秒 40項は1分たっても反応無いので中止 反復; 10000項まで求めて0.14秒 一般項: 10000項は無理数の10000乗が無理だった
プログラムの頭に処理内容がフローチャートで書いてあるソース群を 渡されたのだが... 変更したら上に書いてあるフローチャートも直すのか? つーかもうあってねぇよ
イイハナシダナー
>156 直してあげなさい 後の人のために それか、チャートをDELしてあげなさい
Schemeの場合 末尾再帰は最適化でループに書き換えられなければならない という事が仕様で明示されてるから末尾再帰ならOK 末尾再帰と認められない書き方したらダメだが
>155 実際そこまで違うものなのかー
>>160 全く嘘はついていないぜ
TUTSchemeで実装&時間計測
>>155 >10000項は無理数の10000乗が無理だった
その前に、64bit double で計算してると n=71 あたりで誤差が出始めるし
そもそもほぼ O(1) なんだから 10000 までやっても意味ない気が。
ですよねー
>>162 まぁね
オーダーはexpt使ってるからlogNくらいかも。まぁ係数がかなり小さいだろうが。
n=70ぐらいでいいのなら、map が最速じゃね?
普通に反復でも0秒だけどね、70くらいなら
ここはスレ違いへの許容があるスレですね このぐらいのほうが話題が膨らんで楽しい
>>159 Cでもイマドキのコンパイラなら、最適化してくれるよ。
こんなソースがありました。 Dim iIndex As Integer For iIndex = 1 to 3 Select Case iIndex Case 1 処理1 Case 2 処理2 Case 3 処理3 End Select Next これって・・・ 処理1 処理2 処理3 でいいだろ...orz
>>169 そういうパターンって意外に多いみたいだな。
なぜそういう却って難しい書き方をしてしまうのか、理解できない。
171 :
仕様書無しさん :2007/07/10(火) 22:40:02
>>169 ばっかwww
きっと増える可能性を考慮して頑張って考えたんだよwwww
そのあと増えることは実はないのにwwwww
End Select
Next
の間に共通の処理があるならいいとおもうけどさ・・・・
172 :
仕様書無しさん :2007/07/10(火) 23:19:17
173 :
仕様書無しさん :2007/07/10(火) 23:28:08
ステップ数で金額が決まるんじゃね? どうせコボラだろ。
>>173 そんな事言ってると、
大勢のコボラーにピンセットで全身の皮膚を摘まれるぞ。
>>171 増える可能性を考慮すると、余計に
単に並べた方が良くね?
177 :
仕様書無しさん :2007/07/11(水) 12:53:19
>>176 無理やり解釈したが結構無理があったようだ
寿司食いたい
( ゚д゚)ガリでも食ってろ
char *hoge(char *inbuf, char *outbuf); コメントには入力専用と書いてあるが、 inbuf を変更されるのか気になって夜も眠れない。
while(1) printf("寿司食いたい\n");
ちょっとリアルで寿司食いにいってくるわ
while(1) printf("ウニ軍艦\n");
184 :
仕様書無しさん :2007/07/11(水) 16:20:13
寿司.Dispose
while(1) printf("かんぴょう巻\n"); printf("大トロ\n"); printf("シマアジ\n"); printf("あわび\n"); printf("ウニ\n"); printf("ぷりん\n");
/(^o^)\
先生、かんぴょう巻きがオーバーフローしました
>>185 を改善してpythonに移植。
while hara!=full:
print "かんぴょう巻き"
if hara!=full:
print "大トロ"
print "エビ"
print "トラフグ"
print "ウナギ"
189 :
仕様書無しさん :2007/07/11(水) 20:31:00
>>188 行:7ParalysisExceptionが発生しました!!
こら!!
ふぐ使うときはちゃんとキャッチしないと大ごとになるぞ?
190 :
仕様書無しさん :2007/07/11(水) 20:33:35
スレッドでグローバル静的変数が最強。
std::vectorの中身を書き換えるのがその次くらいに最強ですよ。
192 :
仕様書無しさん :2007/07/11(水) 22:23:57
ちょっと前に見かけたやつ resultset = statement.executeQuery("select a.id id1,b.id id2,a.namae namae,b.denwa denwa from tbl1 a,tbl2 b where a.id=" + param); while (resultset.next()) { if (resultset.getString("id1").equals(resultset.getString("id2"))) { namae = resultset.getString("namae"); denwa = resultset.getString("denwa"); } }
193 :
仕様書無しさん :2007/07/11(水) 22:28:43
>>192 C丼かjavaかよくわからんが、とにもかくにもSQLを見直せという事か・・・。
>>192 ループでいちいちIDチェックするくらいならJOINしろと。
>>193 の言いたいことはそういうことだよね?
あと、SQLインジェクション対策をしていないのも問題かな。
しかし、こういうSQLとロジックを思いつく方が逆に凄いと思うんだが。 COBOLerでもこんなコードは思いつかんだろう。 と思いたい。
>170 意図的に Case 2 の部分だけを動作させたいとき(デバッグの時とか)に For 文を直すだけで良い とか?
>>195 コボラはそもそも SELECT * FROM テーブル名 しか知らないからなw
テーブルの設計がヘンで
>>192 みたいな事になったことはある。
当然使いものにならなくて、最終的には全部作り直しになったらしい。
>>195 見よう見まねで内部結合しようとしたら、なんかいっぱい返ってきたから
チェックするようにしました、みたいな。
ヴビ厨が得意。
データベースを使ったデータ操作関連プログラムは、テーブルの設計がしっかり していれば糞ソースになりにくい。
いや、なるでしょ。 テーブルの設計と、プログラマが書くコードは別問題。
テーブル設計がしっかりとしたものになるかどうかは、 6割の努力と4割の運任せだよって、かあさんが言ってた。
>>205 それはブイヤベースの間違いじゃないかい?
運任せってのはわかるな。 初期設計の時は見落としていた活用の道が出てきて、転用しようとしたら設計が悪くて、再構築になることがある。 再構築しなくてよいテータベースがあると、その設計に感嘆する。 センスの差なのかもしれんね。
結局、最前線に配置されている兵隊が駄目だと、どんなに すばらしい作戦も失敗すると。
>>207 >再構築しなくてよいテータベースがあると、その設計に感嘆する。
ER図がぱっと頭の中に浮かぶんだな。
>>207 発展型の転用と、思いつきの転用の差だと思う。
ユーザーがぶれてないだけで、設計の良し悪しはあまり関係ない気がする。
テータベースに萌えた
>再構築しなくてよいテータベースがあると、その設計に感嘆する。 本来はそうなるように最初から設計しておくものだが・・・。 Excelしか触ったことなかったり、Accessが256以上のカラムが使えないから困るとか 言う人には夢の話なのかもしれんが。
213 :
仕様書無しさん :2007/07/12(木) 22:29:53
>>212 1レコード212のカラムの設計するほうが難しいと思うんだがw
でも・・・あるんだよなぁ・・・・orz
超汎用テーブルとかだれが思いつくのさ
>>213 みかか村で過去に14テーブルぐらいそうゆうのみたなw
こんなDBもあるんだからびっくりだ 名前, 種類, データ1, データ2, ・・・・, データ99, 予備1, 予備2,・・・予備99
そんな用途不明のフィールド量産してどうするんだwww 暗号か?www
データベースの設計は基本的に「1 fact 1 place」を頭に入れておけば そう難しいモノでもないのだが、どーもCOBOLerとかAccessやExcelしか 知らん人は不思議なテーブル設計をするよな。 なんでそんなに面倒で難しい方向に走りたがるのかよーわからん。
>215 予備の無意味さに吹いた
C++で、構造体にメンバ変数を追加する必要があって、 その構造体を扱っているコードをみていたら、わざわざ メンバ変数を一個ずつコピーしてる関数が。 HogeCopy(Hoge* dst, Hoge* src) { dst->a = src->a; dst->b = src->b; dst->c = src->c; : : } これ、*dst = *src; でいいだろと思ったけど、念のためにコードを確認してみると、 メンバ変数は31個なのに、コピーしてるのは29個だけ。 ただのバグだと思うけど、*dst = *src;に置き換えて全部コピーするようにして、なにか 影響があるといやなので、(影響がないか調べるのもめんどうなので)上のコードに、 追加したメンバ変数を、コピーするコードを追加しておきました。 (こうやってどんどんダメなコードになっていくんだろうなぁ)
>>217 COBOLは、レコード長固定のファイルに対して
1レコード読む→レコードを桁で区切る→処理
をすることに特化した言語だからな
予備カラムなんて考え方もそれに由来するんだろう
コボラはその考え方でしか理解出来ないからDBにまでそれを持ち込む
ポインタのコピーは、ポインタが上書きされるだけでは? それを行うならmemcpy(だったっけ)を使うのでは?
>>221 メンバ変数にCStringがあるから、それやると、逆に大惨事に。
>>221 >219 のどの辺がポインタのコピーなのかkwsk
src->aのメンバ変数aが何の型か 解からないけど実はポインタ型とか 勝手にいい方に解釈してみるテスト
>>219 数にもよるが俺ならこう書くかもしれない。
HogeCopy(Hoge * dst, Hoge * src)
{
Hoge * dstOld = dst;
// とりあえず全部コピー
*dst = *src;
// 以下2つはコピーしたくない
dst->x = dstOld->x;
dst->y = dstOld->y;
}
強い保障されたswap( )実装しろよ
227 :
215 :2007/07/13(金) 07:19:23
実はこれある大手銀行のデータベースなんだ・・・ 二度とそこには預金しなくなったYO
228 :
仕様書無しさん :2007/07/13(金) 08:34:20
>>215 前、銀行子会社のソフト会社に勤めてた。
親絡みの仕事してる事業部と、親関係ない自前パッケージ作ってる事業部があって
関係ない方にいたんだけど、親絡みの方から移動してくるコボラはそんな感じだった
内部コード、ソート順、名称、種別、区分、大分類、中分類、少分類、ステータス1、ステータス2…
内部コードとソート順にキーをはってるくせに
実際は種別でテーブル分けろよみたいな動きを切替えて
区分でみてるデータと大中小分類でみてるデータがあって
有り得ないデータの制御はアプリで規制するの
正規化とかはなにそれ?って感じなの
だって単項目マスターに全マスターほおりこむから
高望みしないからせめてソート順のキーをはずしてくれ…
意味のない内部連番キーにしてるんだから十分じゃないか
HogeCopy(Hoge * dst, Hoge * src) { Hoge * dstOld = dst; // とりあえず全部コピー *dst = *src; // 以下2つはコピーしたくない dst->x = dstOld->x; dst->y = dstOld->y; } *dst = *src した時点で、dstOldのさしている先も更新されているって…
>>224 メンバ変数aがポインタ型だったとして、
dst->a = src->a と *dst = *src がどう違うと言うんだ?
>>225 ワロタw
233 :
232 :2007/07/13(金) 14:52:49
およよ。既に突っ込まれ済みですかw
>書くかもしれない ってとこからして、間違った時のことを想定してるんじゃないの?
>>>Hoge * dstOld = dst; -- <<<Hoge dstOld = *dst;
238 :
仕様書無しさん :2007/07/13(金) 18:30:36
女なら普通に3本まではつっこめる。 男でも3本くらいはつっこめる。
・・・いぢめる?
当然だろ
>>237 そのpatchはコンパイルが通らなくなる可能性が・・・
HogeCopy(Hoge * dst, Hoge * src)
{
Hoge dstOld = *src;
*dst = *src;
dst->x = dstOld.x;
dst->y = dstOld.y;
}
か?
>>231 メンバにポインタや参照があるとシャローコピーになってしまう恐れがあるって事じゃ?
ホイコーローコピーってどんなコピーだっけ?
つーか、SQLだとテストいらなくて、同処理をするjavaだとテスト必要って ....なにが違うの?
>>245 SQLはプログラミング言語ではなく、
javaはプログラミング言語だからです。
あまり複雑なストアドは書かんでほしい。 デバッガはもちろん、printデバッグもできんじゃないか。
SQLもプログラム言語というか普通に命令セットの集合だと思うが。 つか、SQLと同処理をするJavaはそりゃテスト要るだろ。 SELECT WKDATE,DAYNAME(WKDATE),COUNT(NUM1).AVG(NUM1) FROM HOGE WHERE YEAR(WKDATE) = 2006 GROUP BY WKDATE ORDER BY WKDATE ; SQLだと1行(?)ですむ処理がjavaだと結構な行数(?)になるしな。
>>248 SQLはプログラム言語じゃないよ。
PL/SQLはプログラム言語だよ。
>>249 「~じゃない」は言えるけど、「~だ」が言えないタイプの奴だなw
脊髄反射で否定するのは得意。
まあ俺も SQL はプログラミング言語に分類するより、データベースに特化した
クエリ言語に分類するのが適当だと思うけれども。
SQLは問い合わせ言語であって、プログラム言語じゃないよ。
マシンに明確な指示を与えるための規則の集合という意味では プログラミング言語と呼んでも間違いではないと思うんだが。 クエリ言語という分類があるとすれば、集合的には、プログラミング言語とクエリ言語の積といったところか。 HTMLはプログラミング言語か―というような議論と同質だな。
>>250 アホかw
「俺も~が適当だと思う」って、お前の意見なんか聞いちゃいねーよw
SQLのことをよく知らないの丸わかりだな
>>252 htmlをプログラミング言語なんて思ってる奴なんか、何も知らない初心者だけだろう。
テキストをマークアップするだけの作業のどこがプログラムなんだ?
本に蛍光ペンや赤ペンで線引いたりするのと本質的には同じ作業だろうが。
つまりお前は何も知らない初心者と言うことだ。
>>254 様々なプラットフォームのブラウザに同一の表示結果を与えるための
マークアップは、プログラミングと言っていいと思う。
実際、たとえばOracleのcaseを駆使したSQLなんかはプログラムと言っても差し支えはないだろうが もともとそういうのはクエリを呼び出した側がやるべき処理ではあるんだよな。 SQLがどんどん高性能化していってるせいで境界線がよくわからなくなってきてる。
>>255 いいわけがない。
そもそも、htmlを読んでどう表示するかはブラウザ側の実装次第。
つまり「様々なプラットフォームのブラウザに同一の表示結果を与えるため」に必要なのは
ブラウザ開発者側の努力だよ。
だからAcid2なんてものがあるんだろ。
Acidテストも知らない新人がなに息巻いているんだ? 休日使って勉強でもしとけや
つかドラゴンブックにHTMLはプログラミング言語だって 書いてあるけどな
クエリ言語っていうかSQLの一説は構造化照会言語なんだから そのまんまな話に思えるが。 ストアドなSQLは立派にプログラム言語してると思う。
つか、字句を拾って構文を読み取る者全般を プログラミング言語って解釈だぞ。
>>261 じゃあ、面接か何かで
「プログラム言語が得意です!とくにHTMLです!」
って言ってみてよ。
俺にはできない。
それで笑われたら「字句を拾って…」って同じ反論してみてよ。
俺にはできない。
264 :
261 :2007/07/14(土) 12:35:01
俺、今はもう作ってないけど 組込み向けのブラウザ作ってた時期があった(都合により退社) んで今の会社の面接で得意な言語はなんですか?って聞かれて 最近ではHTMLですね。バリバリかけますって言ったよ。 採用担当者とエンジニアは笑ってたな。 レンダリングエンジンを作ってたのでHTMLは得意なんですよねって 言い直した。 まぁ今その会社で7年目だが文句あるか?
>>264 >最近ではHTMLですね。バリバリかけます
じゃなくて
>レンダリングエンジンを作ってた
ここが重要だったんだろ?
日本語が不自由だって自覚を持った方がいいよ。
バイナリだって言語と呼べるのかもな。
CPUが解釈できる命令のことを機械語って言ったりするし。
>>257 それはブラウザ以外にも言えることだと思う。
そもそも、機械語を読んでどう処理するかはプロセッサの実装次第。
つまり「過去のプロセッサ含め、さまざまなプロセッサで同一の処理結果を保証するため」に必要なのは
プロセッサ開発者側の努力だよ。
だから・・・なんてものがあるんだろ。(←思いつかなかったw)
>>267 スレタイも読めないんじゃ、そんなバカな書き込みもむべなるかな。
自分の固定観念で追いつけなくなるとすぐ馬鹿呼ばわりする プログラマってのはこういうのが多いなw プログラミング言語でも何でも出来合いのものを組み合わせて作るのはうまいが 自分から新しいものは作り出せない香具師が多い理由がわかる気がするわ
今までさんざんスレ違いな会話していて、俺がきたら「スレタイ嫁」かよw まあいいや、続きをドゾー。おじゃましますた^^
>>271 だって、プログラミング言語の話なのに、CPU持ち出すんだもん。
そりゃ違うじゃん。
いくらなんでも「HTMLはプログラミング言語じゃない」から
>>267 の話は飛躍しすぎ
揚げ足取りのコピペって時点でもどうかと思うが
>>257 の書き込み自体はもっともじゃないのか
アバヨいっといてまた書き込むのもアレだが、俺は端的に言語の例を挙げただけなんだがな。 プログラミング言語の範疇だとか定義だとか、これほど曖昧な物はない。 データの処理のしかたを規定するものなら、例外なくプログラミング言語だと、俺は思うんだが。 SQL然り、HTML然り、機械語然り。どれも何かを処理する手順書という点では共通。
定数が1ずつずれちゃってたときなんか修正がいやだったなあ・・・
いや、
>>245 はSQLだろうがJAVA組もうがテストしろと
言いたいだけではない
>>263 君の話は飛躍しすぎ
厳密に言えばhtmlもプログラミング言語の範疇であろうが、普段われわれがプログラミング言語として考えるところのCやJavaなどから見ればプログラミング言語らしくないというだけの話
ここで面接官がいうPLにhtmlが含まれないであろう事は当たり前である。でもそれはhtmlがPLに含まれないことを示すものではない
君の文は読み悪すぎ 厳密に言えば句読点の使い方もあやしいし そもそも適度な改行が入っていないのがおかしいという話
Q. SQLってプログラミング言語なの? A. 全然違うよ。全く関係ないよ。
この会社辞めようと思った糞議論。
「言語」と「プログラミング言語」は分けて考えようぜ。
くっだらねぇ そんな本質的でないところにこだわるなよ 議論するなら、定義を持ち出してきて白黒決着つく形で議論しろよ これだから糞文系プログラマーは面白い
公理も定義もない状態で議論しても主観によるところが大きいから、お互いの論理に矛盾無しに反立しうる。 つまりはお互い平行線のまま水掛け論になりうる。そんな無駄な議論の好むのがえてして文系。あいつらの考えることはよくわからん。
どうでもいいけどオナニー文章書いて 悦にはいるのはやめてけろ
俺、今からメロン食う みんな応援ヨロシクな
馬鹿野郎 コロッケだろ 台風なんだから
メロン半分食い終わった
俺、今からスイカ食う みんな応援ヨロシクな
Wikipediaをウィキと呼ぶプログラマが書いたソース。
>>296 おお、新しい。
メールの内容の英数字が全角半角混在のやつが
書いたソースなみにいやだなあ。
10年単位の長きに渡ってつぎ足しつぎ足しして熟成されたソース
>298 カオスっぷりが頭に浮かぶなw
プログラミング言語の定義(誰が言ったかは忘れた) 『逐次実行・条件分岐・繰り返しの構造を持つ言語』 …コレがホントかどうかも忘れた。
ダイクストラの構造化定理が似てるが、 プログラム→順次・反復・分岐で書ける という感じの命題だから、論理学的には「逆」だな。
じゃあやっぱりSQLもHTMLも含まれないでFAなんじゃん
303 :
仕様書無しさん :2007/07/15(日) 01:41:50
Programming with Stored Query Language.
プログラミング言語かどうかはともかく、テストはしなくちゃな。 JavaやSQLの記述はもちろん、iniファイルの内容を書き換えた場合ですら。 そういえば設定内容を書き換えるのは開発じゃないと思ってる輩がいたっけ。
>>304 設定ファイルを書き換えることさえ開発だって言ってたら
運用の人まで開発者になっちゃうじゃまいか
その理屈だと秀丸の背景色を変えることすらも開発さ
307 :
仕様書無しさん :2007/07/15(日) 02:07:38
ソフトを完成しさせて人手に渡るところまでは開発だろ Iniファイルだって完成前までの初期設定変更とかは開発だと思うけど そっからさきは違うだろうね
308 :
仕様書無しさん :2007/07/15(日) 02:13:49
JAVAなんてアホでも出来るように作られてる言語なんだし そんなに熱く語るほどの事かね?
>>308 そのJAVAをこれから始めてみようと思う俺が来ましたYO!
// このURLへは今後接続しないことを示す public boolean discnct(String cnurl) { try{ URL url = new URL(cnurl); HttpURLConnection urlconn = (HttpURLConnection)url.openConnection(); urlconn.disconnect(); return true ; } catch(Exception e){ return false ; } }
discnct という名前からして、いい感じに腐っている。 いまだに母音を省略する命名ルールが生きのこっているなんてガラパゴスか?
313 :
仕様書無しさん :2007/07/15(日) 10:34:14
コメントが全部、日本語をローマ字表記。 koreha, komento desu. kokode***suru [debagu yy/mm/dd]
314 :
仕様書無しさん :2007/07/15(日) 10:38:12
IME壊れたんだろう
> [debagu yy/mm/dd] にしても、これはちょっと。debug でいいやん。
せめてdebaggu
317 :
仕様書無しさん :2007/07/15(日) 12:00:17
テーブル名とかカラム名がローマ字ならよく見る TORIHIKITBLとかHURIKOMIKINGAKU CHAR(10)みたいな
それならいいけど 未だに母音抜いてTRHKとかHRKMKNGKとかの方がよく見る気がする ヘブライ語かよ
discnctについては、母音省略もアレだが、dis-を「~しない」だと思ってる のがイタイな。
>>JAVAなんてアホでも出来るように作られてる言語なんだし アホにはむり、コボラならOKの言語
>>319 disconnectは普通に「切断」という意味だが・・・?
>>323 そうだよ。
すでにつながっているものを「切断」するんであって、
最初からつながないという意味じゃない。
最初から繋がらないなんてどこに書いてあるんだ 最初から繋げない じゃないのか
メソッド名としては、testConnectibityとかの方が助かると思う。
327 :
仕様書無しさん :2007/07/15(日) 13:54:18
>>324 disableは最初から出来ないと思うよ
disableは、可能であることを出来ないようにしておくことだね。
330 :
329 :2007/07/15(日) 13:57:03
あ、it disable -> it disablesです。ごめんね。
>>327 最初から出来ないのは unable じゃ?
333 :
仕様書無しさん :2007/07/15(日) 14:27:26
>>332 ああ、そうだね。
だけど、身体障害者には生まれつきもあるわけで、
本来出来るというのは、健康な人間なら本来出来るが、その人は障害のために最初からできないわけで、
つまり、構造的に接続できるようになってる物を、切断した状態にしておくのが切断であり、
さっきまで接続していたかどうかとか、時間的経過に関係なく切断状態にあるのが切断だと思うよ。
>>324
正直どうでもいい
335 :
仕様書無しさん :2007/07/15(日) 14:30:47
>>334 名前と実際が食い違うのをいちいち関数仕様を読んで覚えたりソースコード追っかけたりするのは面倒だろ?
>>333 日本語と英語じゃ言語構造も単語の細かい意味も変わってくるので、
生半可に論じられないし、そもそもスレ違いだからEnglish板にでもいってらっしゃい。
そして、ここでdisconnectといっているのは、切断のことではなく、
「~を切断する」ということです。他動詞ですね。
>>333 disconnect(切断する)じゃなく disconected (切断状態にある)ならいいんだろうな。
元のはdiscnctだからそこまで考えてないだろうけど。
distnctにするとぜんぜん違う意味になりますな。
×disconected ○disconnected 細かい綴りの話してるときにtypoしちまったぜ orz
kiretemasu?
kiretenaissuyo
>>310 確認するけど、コメントと関数名とやってることの三つがバラバラというのが問題なんだよね?
やってることは、与えられたURLに接続してみて、
接続できたら(例外が発生しなければ)trueを返し、例外が発生したらfalseを返す。
そもそもこんないらん議論を呼ぶ 変数名つけるのが問題
もう全部 func001(); func002(); でいいよ
346 :
仕様書無しさん :2007/07/15(日) 18:31:26
・・・ if (ret == false) { // 上記の処理が以上の場合、ファルスを返す。 return ret; }
347 :
仕様書無しさん :2007/07/15(日) 18:33:59
if (ret==false) { return true; }
348 :
仕様書無しさん :2007/07/15(日) 18:57:03
>>346 ,347
変数名の付け方に問題があるかもしれんが一概に悪いとは思わんよ。
以下のような場合もあるから
bool ret = 何かの初期化メソッド();
if(ret == false)
{
// 初期化失敗
return false;
}
// ほかの処理
..
return true;
349 :
仕様書無しさん :2007/07/15(日) 19:02:26
// (略) falseを返す。 のつもりを // (略) バルスを返す。 と書いていた奴。。。(読みはファルスじゃねぇし)
>>349 いや、あれだよと突っ込んでほしいのか?
>>349 コードを追記したら
func(); // 目がぁ~目がぁ~
はお約束だな
353 :
310 :2007/07/15(日) 21:44:15
変な議論呼んだようですまん 貼った俺自身もこのメソッドが何をしたいのかよく分からなかったんだが、 呼び出し先メソッドが↓のレスなんで、 どうやら接続した後の切断処理をやってるつもりなのかなぁ、と考えてる
354 :
310 :2007/07/15(日) 21:46:05
// 接続先のファイルサイズを取得 public long getFileSize(String cnurl) { boolean isCnct = cnct(cnurl) ; // ※接続テストをしているらしい if (!isCnct) { return -1; } // 接続可能ならtrue URL url; try { url = new URL(cnurl); HttpURLConnection urlconn; urlconn = (HttpURLConnection)url.openConnection(); long fullsize = 0; Map headers = urlconn.getHeaderFields(); String key = "Content-Length" ; String e = (headers.get(key)).toString(); e = e.substring(1,e.length()-1) ; fullsize = Long.parseLong(e) ; boolean isDisCnct = discnct(cnurl) ; // ※ここで310呼び出し if (!isDisCnct) { return -1 ; } if(fullsize < 0) return -1 ; else return fullsize ; } catch (IOException e1) { } return 0; }
なんというコード・・・
何したいわけ?
cnct(対象URLに接続) ↓ getFileSize(ファイルサイズ取得) ↓ discnct(切断処理) ・・・がやりたかったのかな?
たった二十行程度のコードに 山のように突っ込みどころが・・・
>>310 のコメント
// このURLへは今後接続しないことを示す
が、
/** @return true 切断成功 false 失敗。このURLへは今後接続しない */
ならまぁよかった、ということなのかな。
つか成功したかどうかHashかなんかで管理して 余計なオブジェクト毎回接続するたびに作らないようにしね? 結果の保持が必要な場合は別途なにかクラス作って 突っ込んだ方がよくね?
あまりにひどいコードに絶望した…! でもそういうコードを以前見かけたことが あるのに気づいて更に絶望した!!
コメントにアスキーアートがはってあったぞ 「カイジ」のやつ
__,,,.... -――‐- .._ そりゃあ…かまわない /vV///∠∠彡:ニニヽ おまえらの疑問に答えること それ自体は容易い 簡単だ {/`ー-‐'''"´ 二二ニニl 例外時の処理はこれこれこう こういうメソッド行き /ー--‐''''"´ 二二ニニ| 返り値は…?パラメータは? ,/ー---‐'''"´__ ニニ二二| そんなコメントは いくらでもできる 〈べヽ l. ヾニ-‐'''ヾ> =r-、ニニ| },-o-> ヽPニニ ミ ス.|ニ二| しかし 今 オレが そんなコメントを 仮に付けたとしても . |二/,' ー― ' `に!|二ニト、 その真偽はどうする…? |/,' __ ヽ\ r<二ニ| \ | 「r---一ァ'! | \ニ| |`'ー-、__ 真偽など どうでもいいから | !` 三 ̄ l | \! | 読みたいと言うのか…? \ _.. -''" /| | _,.. ‐'''"`ー <´ / | | ククク……
>>363 一見まともなコメントにこんなの付いてたら嫌になるな。
何を信じればいいのかw
367 :
仕様書無しさん :2007/07/16(月) 12:26:01
>>354 酷いな・・・8行で済むのにそんなにダラダラと・・・
368 :
仕様書無しさん :2007/07/16(月) 13:11:02
納期は命より重いっ・・・!
ざわ・・・ ざわ・・・ ざわ・・・ 俺のバグですたorz
>>344 ローカル関数に関してはそのルールで書く人を知っている。
本人曰く、『どーせ俺しか読まねぇし』。
3年後の「俺」には読めない罠。
あるあるwww
>>372 一年後に読める自信がないです。
覚えているうちに仕様変更とかあればいいんだが…
違う仕事一個でも挟むと無理そうだ
376 :
仕様書無しさん :2007/07/17(火) 13:05:25
>>376 って言うか、たったの3連休で頭真っ白なんですが・・・
先週までの俺が何をどうしたかったか、やっと何となく解ってきたw
今週の俺によると、先週までの俺は未熟者だったらしいww
前日の日記をつけろ。毎日3行程でいいぞ。
似たようなのもう出てそうだが、 Hoge1() { __asm { : : } } Hoge2() { __asm { : : } } 7000行ほどでコメント一切無し
Cool!w
381 :
仕様書無しさん :2007/07/17(火) 19:45:12
>>379 昔は、マシンコードを定数の配列にして、関数ポインタで指してたり...
定数ならまだいいが、技術的な制限から、コードを実行中に書き換えながら走らせることもあったな。 当分使われないコードセグメントはメモリから削除して、空いた空間に別のコードセグメントをロードしたりとかもしたし。 今となってはOSが担当する処理だが、その当時はそんなトリッキーなことを強いられたもんだ。
辞めさせられないようにする為の保険か?
メモリに入りきらない。
せめてコメントぐらいはつけて欲しいな
ソースコードが残ってなくてROMがあるんだけど、バグ対処してねとかいうのもあったな。 電算室(古っ!)に配属になって初めて書いたプログラムが自己変更コードだった。指導者乙。 そういうのがお行儀悪いことだと知るのはその10年後。
10年は長いですね。
その部署の文化になってればそれが当たり前になっちゃうからなあ。
>>388 Intel 8x86 の時は、自己書き換えしても問題なかったから、メモリの制約とあいまって、
むしろあたりまえのプログラミング技法だったと思う。
80x86nになってキャッシュの概念が出てきて、メモリ上で自己書き換えしてもそのコードが
保持されないので問題が顕在化して、行儀が悪いということになった。
行儀の問題はキャッシュとは関係ないっしょ
393 :
391 :2007/07/18(水) 12:42:13
いや、この場合は関係あると思ってるんだが。 「キャッシュのために今までのノウハウが使えなくなった」が「行儀が悪い」にすりかえられた。 まあ今じゃ通用しないノウハウだし、「行儀が悪い」という言葉にはよっぽどのひねくれ者じゃなければ 逆らおうと思わないから、いいけどね。
すげーどうでもいいことだが。 x86の自己書き換えはパイプラインで問題になった。 キャッシュは最初から対策してる。
自己書き替えはそれこそZ80の時代から「行儀が悪い」とされてましたが何か
86 系で自己書き換えのときのキャッシュのフラッシュ(の欠落)が問題になったのは ハーバードアーキテクチャを初採用した Pentium から。 Mac では 68040 を積んだ Quadra から。 メモリ上の自己書き換えやコード生成は今でも結構使われていて別に問題のある技法でもない。 他により妥当な方法があるのに使いたがるのは問題ある行為かもしれないけど。
今はメモリ使い回すメリットがほとんどないだろ メモリが小さかった時代には一つのひゅほうだったかもしれないが
ひゅほうでんせつ
最近は データ領域:書き換え○ 実行× コード領域:書き換え× 実行○ みたいなことやるしな。
LISPだと自己書き換えってどういう感じに捉えられているんだろう?
すべてがS式なんだから、コード書き換えもアリとは思う。 けど、アルゴリズムとしてトリッキーに過ぎる感はあるな。 で、そういう感覚もっていることは、PGとしては大事。
longjumpで書き換えまくるのは普通だし 今でもそうゆうコード書いてる。 書くなって言われるけどなんでって思う
テクニックとしては面白いんだけどな。バッファオーバーラン攻撃の基本だし。 だからといって、製品の中に自己書き換えを組み込むのは勘弁。動的に書き換わるコードは追跡が難しすぎる。 動的コード生成にしても、機械語直接生成よりもスクリプトを吐く方が簡単に済みそう。
>>402 longjmpは自己書き換えしなくても作れるだろう。
ものすげー変なCPUまで把握してないが。
405 :
仕様書無しさん :2007/07/19(木) 02:18:03
コード書き換えはマルチタスクで動かせないだろ
iTRON準拠のマルチタスク環境では動いていたというか動かしていたよ。
>>405 >コード書き換え
と
>マルチタスク
に、まるで相関がない。
自己書き換えはすたれてるけど、コード生成自体は ATL のサンクとか JIT コンパイラ的技法とかで必要に応じて使われているよね。
HaskellのコンパイラがDEP(データ実行防止)に引っかかった。 HaskellはHaskell自身で書かれているらしいから、どうもコード生成or自己書き換えしてるっぽい。 まだまだ現役だな。
412 :
仕様書無しさん :2007/07/19(木) 23:57:15
ふとりプリキュアに見えた
うーん。「自己変更コード」とか「自己書き換えコード」とか呼ばれているけど。 誰も「自己改竄コード」とは呼ばないな。
普通は悪用目的の書き換えを指すんじゃまいか?改竄て。
進化するコード
暴走してウィルス化するなんていかにも漫画的なシチュエーションだ
ソースが貼られず自称上級者の醜い言い争いばっかりじゃねーか もっとトンデモソースで俺を癒してくれよ
switch( cValue ) { case 0: hogehoge( ); break; case 1: ・・・ case 255: hugahuga( ); break; default: ASSERT( False ); break; }
これでcValueがucharなら笑えるな
関数名が func0()~func255() じゃないってことは、コボラーじゃないのか....
423 :
仕様書無しさん :2007/07/21(土) 09:22:02
while( flg == TRUE){ switch( hoge){ case 1: hage1(); hoge = 2; break; case 2: hage2(); hoge = 5; break; ・・・・・ case 25: hage25(); hoge = 10; break; } } こんな感じのswitch文が3つあってループの関数は1000行くらいある。 当然コメントも仕様書もマニュアルも何もない。あるのはソースだけ。 VC++1.52でコンパイルするのだが、改変して行数が増えるとコンパイラがコンパイルしてくれない。 case12 とかで hoge = 0 とかしてるのと、あっちこっちジャンプしながら 最終的にcase12にたどり着くので無限ループにはなっておらず、しょっちゅうトラブるが、大抵はなんとなく動いている。 だけど何で動いているのか分からない上に、改造しようにも手がつけられない。
424 :
423 :2007/07/21(土) 09:24:38
あ、case 12ではhoge=0じゃなくてflg=FALSEだった。 ま、5年ほど前に面倒見させられたソースです。 その部分はごっそり書き直したけどね。
425 :
仕様書無しさん :2007/07/21(土) 09:25:14
>>423 コードの意味がわからないってのはわかるが、
改変して行数が増えるとコンパイラが通らないって何?
VC++1.52だと最大行数の制限があるの?
>>423 パーサーとかそんな感じで作るけど
#ifdef DEB_PRINTしこんで
コールグラフ作ればいいだろ。
んで文法作ればいい。おそらく処理しきれない
例外を見過ごして別の規則に遷移してるだけ
じゃねーの?
427 :
仕様書無しさん :2007/07/21(土) 09:28:44
16ビットの制限とかあるんじゃね?
>423 hogeX()や各case値に意味あるんだろうから、そっから状態遷移図でも描いて見れば。
>>428 hogeX()や各case値に意味あるケースは稀じゃね?w
そうなのかw
caseでのコードではこんなのあったな@Java メンテしろと言われたけど、拒否したら左遷された 後任は自殺未遂したらしいけど・・・ うろ覚え int i = 20; label WHILE_LABEL; while(true) { switch (i) { case -3: i = func3(); break WHILE_LABEL; case -2: i = func3(); break WHILE_LABEL; case -1: i = func3(); break WHILE_LABEL; // 中略 case 50: i = func50(); break; default: i = func0(); } } 423のに似ているけど戻り値がリザルトコードになっていてマジでカオス
オブジェクト指向はおろか構造化すら怪しいグラマが必死に考え出したコードっぽいな。 こんなコードが随所にあるなら431は拒否して正解だ。
433 :
431 :2007/07/21(土) 10:31:32
随所どころか、辛うじて理解できた一部だよ 結局、ほとんど理解できなかった
例はちょっと書けないけど最強にカオスなコードならあるぞ make yaccでmake+コード自動生成 生成コードmake yaccでmake+コード自動生成 ・・・ これが15回も繰り返されるカオスなコードあったよ
436 :
423 :2007/07/21(土) 12:10:28
>>425 1関数のサイズの上限が決まってたと思う
>>426 ,428
何年も前に終わった仕事について批判されてもなぁ・・・
大体1関数が1000行って時点で何かおかしいんだから直して当然だろ
関数ってどんなに多く書いても数百行で済まないか? 絶対処理分割できるぞ
438 :
仕様書無しさん :2007/07/21(土) 14:23:36
>>436 関数の制限じゃなくてswitchの制限だと思うよ。
>>437 普通に手続き言語をやってくれば、どんなに長くても数百行なんだが、
大昔のPLCしか触ったことない奴だとだらだら書く事しか知らなくて、1000行とかいく事がある。
実行される行数が50を超えたらそれは長すぎ。
441 :
仕様書無しさん :2007/07/21(土) 16:52:49
>>440 実行される行数ってコンパイルした後の話か?
実行後の行数なんて意識する必要ないだろ、50行超えたら読みにくいだけ
別にコードなんて動けばどーでもいいんだよ オマイラだってどうせ適当に書いて後は野となれ山となれだろう? この会社辞めようと思ったソースコードなんてお高くとまってないで 正直になれよ プログラムなんてちゃんと動けばそれでいいんだよ
煽り乙
>>443 中国産は長い・意味不明・動かないの3拍子揃ってるぜw
446 :
仕様書無しさん :2007/07/21(土) 18:05:21
447 :
仕様書無しさん :2007/07/21(土) 20:00:17
>>443 >プログラムなんてちゃんと動けばそれでいいんだよ
ちゃんと動かないから問題な件
プログラムはちゃんと動いて、ソースが読みやすくて、修正しやすくて、 テストしやすいのが理想ではあるな。 現実にはだましだまし動かしているプログラムが多数存在するワケで。
>>443 それぐらいならおれにもできる、いや、だれだってできるだろう。
だがきみに呼ばれて出てくるかな?
先代と先々代のコードです、参考にしてくださいと言って渡されたコード。 10年も使いまわされた割には読みやすくて、コメントも良くついてるし・・・ あれ? コメントに俺の署名があったよ。会社やめる前のコードだったけど。
そのコードで何人が辞めて逝ったのか...
if (isdate(strDate) =false) = true then なんてのが前あったけど意味がないorz
ifでboolな判定するときに比較のtrue・falseをどちらか固定にするヒトっているからそれじゃね
それって言われてもそれの意味がわからない
>>453 >boolな判定するときに比較
莫迦確定ですよ、それ。
ワロタ
>>455 ホント、バカ確定なのは確かなんだけど、
うちの会社のVBから入ってきた人間だとナチュラルに存在している。
<cond> == false ってやる奴は本当に多い。
アレかな?unlessがほしいのかな?
>>458 俺はFalseで比較することが多いんだけど・・・
bCond == False
bCond != False
True比較は使わない。
比較を書かないことはある。
=true <>true !=trueか
=false <>false !=falseのどちらか限定なら有り得る
変な書き方すると
>>452 なのかな
>>459 あえて
If Not cond_expr Then とか if( !cond_expr)
としない理由は?
== false とかのほうが見やすいから?
論理定数との比較はアホの仕業。
>>461 C使いなんで!が見づらいってのが大きいのかな?
if( !IsHogehoge( ) )
if( IsHogehoge( ) == Flase )
慣れでどうにかなるレベルだし、どうでもいいね。
スレ汚しスマソ
CでFlaseはちょっと・・・ 仕様にFlaseを返すとあるならともかく 論理的な0と非0で比較するなら漏れは明示的に0と定数で書くが。 標準ライブラリ関数はFlaseではなく0を返すわけだし。 まだFlaseの綴りにはつっこまない
VBの場合はIfの後の値を括弧で囲まなくてもいいというのと、論理否定の演算子が Notという事情があるから、シンメトリを気にすると If Hoge.Enabled = True Then ........ If Hoge.Enabled = False Then ........ とつい書きたくなるという事情があると思う。 Cの場合はそもそも論理型がないから論外だろうね。
>>464 最後の1行に「蛇足」という言葉の
真の意味を見た。
>>464 標準関数使ってないよ。ってか使える環境じゃないし。
関数はもちろんFalseを返す仕様だからそれと比較してるだけ。
そういう俺様仕様でもコンパイラ様は最適化してくれるのかなあ。 多分無理だと思うけど。。
最適化レベル0なんだけど・・・
/** 2xxx/xx/xx 俺の名前 DES:[xxxxxxxxxxx] **/ ってコードが全然関係ない一度も使ったことがない下請け Cからあがってきたw え?なんでだ?俺の名前がえーなんでだとすげー悩んだ。 んで理由が解かったんだけど、俺が新人のころに使っていた 派遣A氏が勝手にコードを持ち出して、B社に転職、B社倒産。 今回使った下請けCにコードもろもろ流出した模様。 つーことでCから俺のコードが上がってきたわけ。 俺はコードにはDESの暗号を埋め込んでるからすぐああ俺だって 解かった。こんな経験したいる?今それ関係で下請けCを扱いて やってるよ。w
>>458 VB6にはC言語の ! 演算子に相当する演算子が無い
VB6のNot演算子はC言語の ~ 演算子に相当する
>>470 規約がゆるいか、もしくは無いプロジェクトだったんだな
>んで理由が解かったんだけど、俺が新人のころに使っていた >派遣A氏が勝手にコードを持ち出して、B社に転職、B社倒産。 >今回使った下請けCにコードもろもろ流出した模様。 よく分かったね つか、そんなの調べる暇があるくらいお気楽な職場なのかな?
とデスマーチ犯が文句言っています。
>>473 そりゃ資産の流出が明るみに出たんだもん、
デスマでもなけりゃ調べるでしょうよ。
そのツッコミ箇所は傍から見てても予想外w
>>475 ,476
俺だったら「ふーん、俺のコードじゃん。どっから流れてきたのかな?」って思う程度で
それ以上突っ込んだりしないけどな。
別に俺が書いたってだけでそのコードは俺の持ち物じゃないんだからいちいち調べる気は起こらないな
会社の資産持ち逃げされてるのに問題にしないやつらって なんのために会社で働いてるの?まさか全員人工無能?
新人作成のスパゲティコードの拡散なんて 資産どころかウィルスをバラまいているようなもんだ 逆に迷惑をかけてるよ
>>478 愛社精神とか全然ないので
むしろ被害うけてたら内心プゲラです
盗まれて困るにしろ迷惑をかけるにしろ、ちゃんと管理しとけよw
管理といえばVSSが割れだったトコがあったなぁ・・・・ それとソース管理とか自体なくて共有フォルダに適当に入れとくだけのトコとかもあったなぁ
>471 論理値に対しては!演算子相当…… っても、VBのFalseは数値化すると0、Trueは-1だから結局~ってことで良くなるのかorz
>>479 辞めた会社のソースなんか知るかよ
今勤めてる会社のコードだったとしても上司に報告するだけだな。
調査して賠償させる方が得か、放置した方がましかは法律や経営の専門家に任せた方がいい。
485 :
仕様書無しさん :2007/07/23(月) 08:24:16
一つの関数が8000行 2カ月目で試用期間だが辞めたくなった
>>483 True = -1なのはBASICを小メモリで実現する技巧の一つだったと思われ
会社でVB6のヘルプみたら、bool値にnotを使ったら、論理演算してくれるようなことを書いてあったよ。
>>488 それはNotはビット演算してるだけだけど、たまたま論理演算の結果とあってるだけってツッコミ?
ヘルプには、trueをnotしたらfalse、falseにnotしたらtrueになるってはっきり書いてあったから、bool値にnotしたら、
論理演算になるんじゃないの?
たまたまじゃなくて、合うようにしたらそういう定義ってことでしょ。
どちらにしろ論理値の反転として、Notを使いなさいってこった
Const cond = 2 If cond Then WScript.Echo "cond is true." End If If Not cond Then WScript.Echo "Not cond is true." End If If cond = False Then WScript.Echo "cond is false." End If
>>492 その場合condは暗黙的にLong型だから、Notはビット反転になる(論理反転にはならない)。
Const cond As Boolean = 2
あるいは
If CBool(cond) Then
If Not CBool(cond) Then
If CBool(cond) = False Then
これでおk
案の定 false との比較の話になっててワロタ
496 :
仕様書無しさん :2007/07/24(火) 23:52:33
再帰といえば、以前、以下のようなコードをみつけたことがある。他社から派遣されてきたプログラマが書いたものだ(※2)。 void do() { // 処理 ・・・ if( 処理成功 ){ return; } // 再試行 if ( YES == message("失敗しました。再試行しますか?") ){ do(); } } do() という関数の中から、「再試行」のために do() を再帰的に呼び出している。 数回の再試行を行うだけであれば、彼の意図の通りに動作するだろう。しかし、プログラムというのは、動けばいいというものではない。 彼は、おそらく「再帰」という概念自体を持たぬまま、いや、持たぬが故に、このような変なコードを書いてしまったのだろう。 それ以前に、「関数」の概念が十分に理解できておらず、「処理に付ける名前(=ラベル)」と同じ程度にしか考えていないことが窺える。 少なくともプログラマとして他社に派遣できるようなレベルではないはずなのだが・・・。
いやまて。関数型言語使いの可能性は捨てきれないぞ。
>>497 とうぜん末尾再起でループに最適化されるのを見越して書いてますよね。
>>500 俺FizzBuzzの話聞くまで海外にもアホPGが居るって事を知らなかった。
考えてみれば当たり前か。
502 :
仕様書無しさん :2007/07/25(水) 01:14:34
福島県の会津地方のある温泉ホテル「○○○○○○ホテル」で働いたのですが、当初経理の募集で応募し、 面接、筆記試験後採用され働いたのですが、出社間近になり、経理をやるにはフロントの業務を知らないとダメだからとかいいつつ、 フロントに回され何の研修もなしにイヤイヤやっていたのですが、数日休みなしでお昼休憩も取れず一生懸命やっていて、 少し間が空いたので、奥でほんの気持ち程度休息していると、会長とやらハゲジジイに「こっち出てきてやろうよ」と言われました。 ようは休息するなってことでしょうか?、私ってかわいそうと思っちゃいました。
ハロー アイアムガイジン
>>496 496 の見積もりでは、何回くらいユーザがYESを繰り返すとスタックが
あふれると思う?
505 :
仕様書無しさん :2007/07/25(水) 14:02:27
失敗してそのまま続行しても、また失敗するんじゃね?
なんという糞実装w
おおそうか、手動無限再帰になるのか。 笑けるなあこれは。
508 :
仕様書無しさん :2007/07/25(水) 15:22:12
Yes 以外を押さない限り、再試行し続ける実装でつね。 あきらめずに続ければ、何かのタイミングでうまくいくかもしれないとあてこんでるのかなぁ。 タイムリミット値かループカウンタくらい見ればいいのに…
「ほほえみのむら」の武器防具屋のようだ
>>507 その辺は仕様だからしてコーディングがどうとかいうレベルの話じゃないよね。
496は再起による実装を問題視したんだろうけど、漏れはそれは問題とは思わないなあ。
千回YES押したら異常終了しましたなんてのは出荷判定でもOK出るだろ。
末尾再帰が叩かれるとか初めて見た
使い方を明らかに間違ってるからだろ
それはSchemeに対する挑戦か
そもそもループが無い言語と同列にしてどうする
その場しのぎのソフトとかスクリプトならむしろ 歓迎できる黒魔術だと思うけど、そうじゃないなら保守したくない。
こんなコードがあった。 Const HOGE_STR_SELECT_PHRASE = "Select * from " Const HOGE_STR_WHERE_PHRASE = " where " Const HOGE_NM_TABLE = "hoge_table" ... ' Select * from hoge_table where name = ' ... ' というSQLを作成 strSQL = HOGE_STR_SELECT_PHRASE & "hoge_table" & HOGE_STR_WHERE_PHRASE _ & "name = " & chr(39) & name & chr(39)
>>516 VBならインジェクション対策を無視るのは場合による。
ライブラリによってはサブクエリへの値の埋め込みを許さない場合があるから。
型指定が無いのと、SQLのクローズやキーワードを
いちいち定数にしているのと、定義した定数を使わずにリテラルべた書きなのと、
chr(39)なんてしているのは場合によらず問題だけど。
518 :
仕様書無しさん :2007/07/25(水) 20:56:14
いいプログラマはすべて再帰とポインタを扱えるべきであり、 これはその人がプログラマとして優れているか見分けるためのいい方法でもあると私は考えている。 しかしあいにくと最近のプログラミング言語はほとんど完全にこの技術を不要にしているというのが本当のところだ。 10年前にはコンピュータサイエンスの学生が再帰と関数プログラミングの授業を1つと、 CかPascalによるデータ構造の授業を1つ取ることなく大学を出ることはなかったのだが、 今日では、他の点では申し分ない大学の多くがJavaだけで楽に乗り切れるようになっている。
またコピペか
こういう文脈でJavaはよくバカにされるけど、Javaの動作なんか ポインタ分かってなきゃ理解できないと思うんだよなぁ。
理解できてないから「Javaにポインタは無い」とかろくでもない誤解があったりするんだろ。
再帰って木構造のデータ扱ってると自然に使ってないか?
523 :
仕様書無しさん :2007/07/25(水) 22:27:25
夏だねぇwww
緊張します
緊張の夏
再帰使ってるってだけで目の敵にされるから使わない。
再帰が問題になるのはかなり負荷のかかることをやってる場合で,それは結構な時間がかかる。 何時間何日と待たされた挙句スタックオーバーフローではキレるなというほうが無理。
>>528 つうか、開発してたらどれ位ネストしてしまうか位わかるだろうに・・・・
考えずに再帰してるやつとかいるよな
>>528 それはループに展開されない再帰を書くのが悪いんだよw
遅いしスタック溢れがあるし、使わずにすめばそっちの方がいいよな。
533 :
仕様書無しさん :2007/07/25(水) 23:40:52
オレは末尾再起を信じている。
534 :
仕様書無しさん :2007/07/25(水) 23:43:47
きちんと正規化されていない冗長テーブルで、第3正規形ならばヘッダ項目の値に相当するデータを取得するSQL。 SELECT MAX(foo) INTO wFoo FROM bar WHERE hoge = wHoge ; 同じグループのデータなら、ヘッダ項目の値は必ず一つしかないと考えていいんですね?1事実1項目の原則を無視してますが、今後にプログラムバグは発生しませんね?
|
|
∩___∩ |
| ノ _, ,_ ヽ (( | プラプラ
/ ● ● | (=)
| ( _●_) ミ _ (⌒) J ))
>>531 彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
>>531 関数呼び出しのコストを考えなくて良い言語を使っているならね。
>>521 それこそ誤解。
JavaにはCで言うポインタ相当の機能が無い=Javaにはポインタはない。
というか、Javaの言語仕様の説明で「Javaにポインタあります」なんて出てきたっけ?
リファレンスのことを言っているんでしょ?
Javaにはポインタはないけど、リファレンスはある。
まあ、名前としてだけのポインタなら、java.lang.NullPointerExceptionがあるわけだ。
C#だとSystem.NullReferenceExceptionだったっけか。
Java理解するだけならポインタなんかぜんぜん知らなくてもOKだと俺は信じている。
ただ、参照は理解しないと致命的。まともなプログラムは何も書けんだろう。
(強い, 弱い, (ソフト,) ファントム や、循環参照 とかは後回しでいい。)
539 :
仕様書無しさん :2007/07/26(木) 00:02:55
>>538 じゃヴぁ厨はアホしかいないからwww
真剣に相手にしない方がいいよw
>>537 >>528 は
「負荷のかかる処理に再帰は使われる」と言ってるのか、
「再帰だから負荷がかかる」と言ってるのかしらんけど、
どっちにしても、再帰を特別視しすぎ。
>>534 SQLの集約関数で何でもいいからグループ内で取れた値のうち1つを
とりあえず返す(パフォーマンス優先)っていう関数があればいいのになあ、と思う。
Top n とか ROWNUMとか?
またJavaにはポインタはですか、飽きましたよw
>>542 Top nの方が近いかな。
select retrieveSomeValue(expr) from ** group by ~~
で適当に値返す。最大とか最小とか意味は持たない。
返却値は実装依存。パーティション内で同一の値を持っているなら何も困らない。
まあ、こういう話はスレ違いかな。
SQLといえば、Oracle限定だが、
WHERE
1 = HOGE AND 1 = HOGE2 AND 1 = HOGE3 AND 1 = HOGE4
ってのは勘弁してほしい。
1 = ALL(HOGE, HOGE2, HOGE3, HOGE4)
って書いてほしい。あんまりこれを徹底しすぎると実行計画が最悪になるが
↑のケースだとこっちの記法の方がパフォーマンス損失なしでわかりやすい。
ポインタと参照を議論するならまず定義してからにしようぜ。かなり今更だが。 ポインタ: 意味: 符号無し整数値として表現されたメモリ上の位置。 可能な操作: - 加減算 - デリファレンス 参照: 意味: メモリ上の位置だが内部表現が隠蔽される。 可能な操作: - デリファレンス C++: どっちも有り Haskell: どっちも有り C: ポインタだけ Java: 参照だけ Perl: 参照だけ
546 :
544 :2007/07/26(木) 00:32:52
あ、ごめん。
>>544 の実行計画のよしあしはケース依存だわ。
SQL系で言えば、subquery_factoring_clause(WITH ~~)使わないとか、
やたらとselect * from が多いとか、スキーマきりまくりで
プログラム内でデータ結合してるとか、
OUTER JOIN で未だに(+)記号使ってるとか、勘弁してほしいのが多いなあ。
あとみんな INNER JOIN ~~ USING なんで使わないの?
NATURAL JOINは削除フラグとかがあるから使えないとしても、
バカみたいに同じ列の名前を = で結ぶのはなんで?
ポインタを隠蔽した方がガベージコレクションに都合が良いんだろうか?
>>545 Pascalのポインタは加減算できないぞ。
>>545 「参照」で上げてる中で明示的にデリファレンスをするのはperlだけじゃないのか?
>>549 そういえば、Perlはリストのリストとかないしな。
リストにリストの参照ならあるけど。
VB6は一方通行のポインタ(DLLに渡すだけ用)と参照があるね。
551 :
545 :2007/07/26(木) 01:13:47
>>547 ポインタの指してる場所を好き勝手に変更できる場合だと、指してる先が本当
に実在する値を指してるのかどうかを実行時に判定できる必要があるからな。
Boehm GC みたいな力技でも何とかなるが。
>>548 それは知らなんだ。そもそも Pascal にポインタあったのか。
>>549 明示的かどうかは考えてなかった。まあそれを言ったら Haskell の IORef や
TVar も明示的にデリファレンスする参照だ。
increment :: Num a => TVar a -> IO ()
increment n = atomically $
do old <- readTVar n
writeTVar n (old + 1)
CとかC++とか、むしろポインタこそ真変数ってぐらいポインタばっかだ
553 :
仕様書無しさん :2007/07/26(木) 02:50:39
FizzBuzzって何?
>>553 ググレカス!!
ウィキレカス!! ウィッキーレ!!
>>553 Google't!!!
Wiki't!!!
>>553 ラピュタ!!!!
>>553 ↑ パズーーーーーー!!!!! だから・・
>>553 オネアミスの翼!!!!
ェエェーーーー!!!!!
>>551 Pascalは確かにポインタが存在する。
特にOOPLとして拡張されてるDelphiなんかは
参照とポインタが別の物として存在してるし。
オブジェクト型はJavaのように暗黙的な参照として扱われ
ポインタは加減算出来ず、型も厳密なので限られた事しか出来んが
こちらは明示的にデリファレンスが必要。
ポインタと参照の境目は「指し示すもの」を明示的に扱うかどうかじゃね?
pascalのポインタって、演算子じゃなくて inc()とかいう関数使って加減算出来なかったかな。 それは加減算の内に入らないのかな?
とりあえずアドレスは間接参照という概念を実装するために使われる お手頃な手段であって必要条件ではないな。
Cのポインタだってアドレスになってるのは実装依存。 必ずしもアドレスになってなくてもいい。
>>557 じゃ、アドレスになっていない処理系を紹介してくれないか?
存在もしない処理系についてえらそうに語ってないことを明らかにしてくれよ。
>>558 全くの別人だし、実際にアドレスではない処理系は知らないが、
思いこんでると危険。仕様にアドレスだと記載していないのだから
違うかも知れないと思っておくのは大切。
「std::vector<T>::iterator」が「T*」では無いかも知れない
って言ってるのと同じだよ。
こっちはそうでない処理系を見つけるのは簡単だろうけど。
C/C++には「未定義の動作」が多いからね。
全く違う環境と処理系の仕事をやらざるを得なくなったときに
ハマるかどうかはそこで決まるかも。
仮想記憶だったら物理アドレスじゃねーな。
C++の参照も一般概念としての参照とはまた違うから、 参照という言葉をC++で初めて知ってそのままの香具師の言うことも怪しい。
&はそのオペランドのアドレスを返すことになってる。 Cで言うアドレスってのが何かってのは別の話だ。
ちなみに、メンバ変数/メンバ関数へのポインタは、 たいていの場合、いわゆるメモリアドレスではない。
広く意味を取るなら 参照 ∋ ポインタ にしかならないんじゃないかなと。 ただ「ポインタ」と「参照」の区別があるような気がするのは、あくまでC/C++が 議論の基底にある所為ではないかと思う。 それを敷衍して、「ポインタ = アドレス値」 や、「参照 = 暗黙的なデリファレンス」 と してしまうと、他の言語(での用語)については確かに正しく定義出来なくなるなぁ。 新語が必要?
ポインタは忘れてもいいけど ポンヨーは忘れたら恐い目にあうぞ
>>555 それは拡張された仕様だとおもわれ。
TurboPascalでも使えたのかな?
使ってた当時は、ポインタを整数やら配列にキャストしたりして、無理やりポインタの演算を
やってた記憶が。
>>558 昔はインタプリタのCがあったから、そういうののポインタは、アドレスは直には入ってないんじゃないか?
だからCのポインタの値はアドレスと規格で決まってるっての。 そのアドレスが(ry
>>564 まあ意味論的には区別する必要無いな。
ポインタの加減算とかが必要になるのは
生のメモリブロックに触ろうとしてるからだし。
>>564 だからかな?身の回りのperlerの人たちはあまり「参照」て言わない。
「リファレンス」ていう。・・・よけいややこしくなるかw
>>570 リファレンス先の実体のことをリファレントと呼ぶ。
>>571 じゃあポインタの指してる先も「リファレント」?
>>572 まあ、そうだね。
Perlだとリファレンスをデリファレンスして得られるものがリファレント。
さあ結局
>>545 が果敢に試みた定義は果たしてできるのかw
というかここしばらく誰もソースを張ってないぞw俺もな。
なんだか最近脱線しがちw
しかし『プロ』グラマらしい会話でいいじゃないか。
577 :
仕様書無しさん :2007/07/27(金) 06:26:40
プロにもなってポインタ・・・ボイン・ボイン・・・
フロにはいって・・・ボイン・ボイン・・・ に空目した。
pointer pointee reference referent ???
referとかreferrer(rは2つ。HTTPのはcreatなみに手遅れ)とかも忘れるな。
creatは、一文字でも短くというunixの慣習からだから ある程度は仕方ないにしてもrefererは単なるアホだろ。
>>579 referenceeだったら感覚的にはreferenceされるものって感じだけど、
referentはreferenceして得られるものって感じ。
>>581 Ken Thompsonは「Unixを作り直すとしたらどこを直したいですか?」と聞かれて
「creat()にeを付けたいね」と答えてる。
typoなのか制限があったのかはいまだに確定的な証拠を見たことがない。
ちなみに「一文字でも短くというunixの慣習から」という推測は見たことがないな。
システムコール名が最大 6 文字だったから一文字でも短くというのは誤りではないが creat に関しては間違って短くしすぎただけ、だと思っていたが。
ちょっとググったら CREATでクリエイトって読ませる社名が結構多い事を知った
クゥレイトォ!
アセンブラ6文字制限説に関しては、creatと同時期に6文字のシステム コールは存在するからあまり信用できんのよな。たとえばunlinkとか。 削る必要があったのならこれもunlnkとかになってただろう。
creatって書いたら、[crI:t]って発音しちゃうよな。
breadとかのノリでクレットもありそう。
ポティトゥ
トメェトゥ
トァマゴゥ
if ( height < height * 7000) ~
>>594 オーバーフローしたら偽になるってこと?
プラスかマイナスかを判定しているんじゃない?
597 :
仕様書無しさん :2007/07/29(日) 00:37:08
定数なのにいちいち計算すんなってことかな
0のときも偽になるな。
プログラム以前の問題だな。算数のレベル。
if (len != 2 || len != 3) { ... }
>>601 len != 2が評価された瞬間に割り込みでlenの値が書き換わる。
え?ローカル?割り込み無い?(* ̄- ̄)ふ~ん
!= 演算子がオーバーロードされてたり・・・ しないよな
こんな記述意味ねー、と思っているとスレッドや演算子オーバーロードで死ぬ。 それがマ板のルール。
じつはlenはワード型への参照で、lenが指す先はI/Oアドレスにマッピングされてて(ry
if(式)の式の評価順序は(ry
>>594 は if (height * height < 7000 ) の、
>>601 は if (len != 2 && len != 3) の間違い…だよなぁ
2ならlen != 2で通らないで次いく。
3ならlen != 2→len != 3で通らないで次いく。
1ならlen != 2→len != 3でifの中に入る。
結果的に
>>608 と同じになる。
何か問題でも?
俺も何に問題があるのかよくわからなかった。 結果的にSQLのLEN NOT IN (2,3)とかわらないのではないかと。
613 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 12:08:15
> if (height * height < 7000 ) それなんてサイコロ? 僕だったら if ( len == 2 || len == 3){ ; //ダミー }else{ } 限定的条件は優先判断が僕ルール。
ifの()の中を評価している最中に違うスレッドに処理が移る時ってあんの?
615 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 12:24:18
シングルコアならないだろうけどマルチコアならあるかも でも途中で変更されたからってまたそれを読みに行ったりしないだろ
コアの数がいくつだろうと切り替わるときは切り替わる可能性があるような。
コンテキストスイッチがいつ起こるかなんて完全にOSの胸三寸だろ。
だがそんな動作をするソースを見たら会社を辞めたくなると思う
610はつりだよな。
601 はCかJAVAどっち?
>612 そのSQLをCのif文に展開してみ
>>619 ん?なんか文句あっか?どこが悪いか説明もできないほどの
コミュニケーション能力のなさなのか?
\ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ そんな餌で俺様が釣られクマ―― 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ
>>624 えっ?マジなの?うそだろ・・・。
一応悪いところ書いておくけど、
610に書いてあるロジックは論理積。
以上!
あははw
ああ、よくわかった。 食事を取らない状態だとわからなかった。 {x ∈ N | x != 2 ∨ x != 3} = Nそのもの
この業界って ドモアブルの定理すら知らん奴が 給料もらってんの?
630 :
601 :2007/07/29(日) 21:45:15
ちなみに詳しく書くと if (len != 2 || len != 3) { System.out.println("error"); System.exit(1); } else { ... } 1度でも走らせれば動かないことがわかるはずなのに・・・。
>>629 ソフト屋でドモアブルの定理が必要になるのって、科学技術計算をやるとこくらいじゃね?
ハード屋は必須だけど。
でも、この業界はド・モルガンの定理を知らない奴がゴロゴロいるところが恐ろしいと思う。
>>630 意図としては2または3でないときエラーとする,かな。
if( !(len == 2 || len == 3) )
ド・モルガンは高校で習うから知らないはずはないんだが・・・
>>629 懐かしい。
が、知ってる必要はないでしょ。
問題は理数の大卒でそれを知らない奴がいることだね。
>>633 お前が割り込んだせいで俺のレスが変な感じに!
ドモアブルって (r*e^(j*x)) * (s*e^(j*y)) == (r*s)*e^(j*(x+y)) だよな。 TeX使いてー(w
唐突なド・モアブル吹いたw
>>636 いや、いいたいことはわかるが、それは違う。
それオイラーの公式を変形しただけやん。
ドモアブルは、複素数をn乗したら絶対値がn乗になって、偏角がn倍になるってやつ。
みんな優しいなw
>>629 の悲劇はうろ覚えの呼び名ではなく公式を書かなかったことか。
ぐぐってみると、ど・もあぶるは、絶対値が1のとき限定みたいな・・・
オイラはオイラー
ド・モアブルなんてどーでもいいから、毎回毎回 あ、あ、あ、あのこ、こ、このし、しようがわ、わからないので でですが? とか吃るのやめろ。まずそれからだ。
公式の名前も覚えてないのに 偉そうなこと言った俺涙目w
唐突な吃り指摘吹いたw
ド・ゴールの定理とか口走ってたら涙目じゃ済まなかったな。
>643 みんなおまいを恐れてるのさ。 まずは萌えフィギュアを机に並べて雰囲気を和らげろ。
お七夜を初七日と言い間違えた奴よりはマシだ。w
いやでも紛らわしいよな。さすがに四十九日はわかるが。
で、610=624はどこ行ったんだ?
寿司食いたい
610もああだこうだ書く前に JavascriptでもVBAでもいいから そこらへんで試してみりゃよかったのにな。
>>632 正しくは
if(!(len==2 && len==3)) {
}
で必ずtureに成る。
そのへん、賢いコンパイラならif自体消すだろうしな。
デスマってくるとわけのわからないコード書きがちだよな。 早く逃げ出したい一心で。 やはり残業はほどほどにして頭がスッキリした状態でコードを書きたいものだ。
今はみんなIF文に頼りすぎてるから論理演算が苦手になるんだろうね。 話は変わるけどC++でこういうソース見た。 CClassX* obj = GetCLassX(....... if (obj != NULL && obj->Get() != NULL) { ... } JavaとかPHPなら、先頭の評価でIF文抜けるんだけどね
>>657 C++で
if(p && p->hoge()) do_something();
は(マルチスレッドで p が書き換わる場合を除いて)安全だが?
>>658 条件は先頭から評価されていくとは限らないんじゃなかったっけ?
&&と||演算子は短絡評価になる。 &&の場合、左側の式の評価結果がfalseなら右側は評価されず ||の場合、左側の式の評価結果がtrueなら右側は評価されない。
C++の構文としては安全だから「あり」。 当然だが、意味があっているかは別問題。
トンクス。ひとつ大人になった
>>615 毎回読みに行くかどうかはvolatile修飾子や最適化の設定次第だな
>>今はみんなIF文に頼りすぎてるから >意味不明。 論理演算でかいくぐれるところも全部ifで片付けちまうってことじゃね
>>666 俺はメモリやI/Oアドレスの内容を毎回読みに行くかどうかの話をしてるだけで
コンテキストスイッチがいつ起こるかの話なんかしてない
昔ベーマガでDr.Dが 「IFは遅いから論理式を使え」 と言っていたのを思い出した。
>>667 論理圧縮して書くと奇異の目で見られるからな。
カルノー図使って説明しようとすると、「何?その怪しい図は?」って顔されるし。
仕様書通りに書けって言う気持ちはわかるけど、コードは論理圧縮して、
テストデータは仕様書通りにすれば問題ないと思うんだけどな。
どう考えても、レビュアーがコードレビューの時に頭悪いことを必死に隠す
ために言っているとしか思えない。w
そもそも仕様書書いた奴が頭悪いというツッコミはなしね。www
>>670 そのコードを書いた奴が十分に頭が良ければ、納得のいく説明を簡潔にできると
思うんだが。>コードレビュー時
やっぱ可読性悪くなるから仕事向けじゃないののかw
>>670 あんまし圧縮すると、仕様とは似ても似つかないものになったり
コードだけ読んでも把握し辛くなったりするから程々に。
>>670 読みにくくて変更しにくいから駄目なんだよ。
そのデメリットに釣り合う客観的なメリットがコメントで記載してあれば許す。
675 :
仕様書無しさん :2007/07/30(月) 21:38:53
>>630 それ、VB上がりの人だね。
VBだと動くんだよ。
677 :
仕様書無しさん :2007/07/30(月) 22:39:00
デバッグ時にコンパイルしたり実行したりするのは素人だろ。 プロは机上デバッグで納品する。
さすがプロだぜ!
机上寝バックなら任せろ。
>>675 まじ?じゃあ610がVB厨だったら、
ちゃんとコード書いて動作確認してたのかも
知れないわけか。悪いこといっちゃったなあ。
今VB厨の俺が確かめてみた(VB6) If (a <> 2 Or a <> 3) Then←Bには!=とか||ないんだよ・・・lenは予約語だし 検証:a=0~10の範囲で 結果:全部真で通りました。やったw Else通りませんね~
・・・通るわけねーだろ アホか
! はなかっただろうが Not ぐらいあっただろ
If (Not (a = 2) Or Not (a = 3)) Then←全部通るなぁ If (Not (a <> 2) Or Not (a <> 3)) Then←もちろん2,3だけ通る
>>682 の意味が今ひとつわからない。
全部真だろ。見ただけで。いや、syntaxが間違ってるとかいうなら別だが。
スレのレベルの低下が著しいな
ネタが高度すぎてついて行けない。というか
>>610-685 までのどれがどれだけネタかすら
わからない。助けてー。
オレの人生がネタ
2chの存在がネタ
そんな救いのないwいやちょっとw
もうインターネットの存在がネタ
これ他言語で試そう、っていう暇な人いる?w
>>693 もう全部ネタでいいじゃないかw そっとしとけ。
そうそう、本気だったんだから そっとしておこうよ。
ここまでオレの自作自演(・∀・)ですた
>>693 ためすまでもないよ。
やっぱVBも普通ジャン、うそつき!
もし評価に関数が入ってて 関数呼び出しが副作用を持つならVBは結果が変わるな
VBじゃなくても変わりうるがな
operator || を作れば完璧だな。 しかも副作用を伴うヤツ。
701 :
700 :2007/07/31(火) 13:08:44
operator && と operator || か。スマソ
operator || を定義しちゃうと、もう短絡評価されなくなるからなあ。 不っ細工な仕様だぜまったく。
VBは短絡評価されないが、C++もオペレータ定義しちゃえば無くなるのか。 俺普段C++やらないから知らなかったぜ。
そういう理由があるのでMore effective C++とかの本では || とか && とか , のオーバーロードは非推奨という内容のトピックを設けているようだ
>>699 CやC++の&&, ||はシーケンスポイントにもなっている。
つまり、たとえoperator &&やoperator ||をオーバーロードしようとも、 評価順は左辺が先・右辺が後ということか。左辺の結果による短絡は なくなる可能性があるとしても。
つまりオーバーロードしてネカマが小梅になっても 評価はやっくんよりも低いということか。
#define MODULE_01 { .... .... ....約1000行 } #define MODULE_02 { ... }
インライン関数の新しい手法か?w ちゃんと\つけてるんだよな?
流石の俺もこの発想はなかった
inline関数は長いと普通の関数呼び出しになるがこれは・・・ 引数が無いのがせめてもの救いか。
ブロックになってるだけまだましかねぇ...
MODULE_01 MODULE_01 MODULE_01 MODULE_01 MODULE_01
#define MODULE_02 {\ ... MODULE_01
途中でorz #define MODULE_02 {\ ...(なんかいっぱい) MODULE_01\ ...(なんかいっぱい) } #define MODULE_03 {\ ...(なんかいっぱい) MODULE_02\ ...(なんかいっぱい) MODULE_01\ ...(なんかいっぱい) }
わざわざ #define しているということは、何回か使うんだよな…。 しかも内容が 1000 行って…それだけで 1 ファイル(.c/.cpp)分になる位の容量だよな…。 マクロの引数が無いということは、その1000行はおそらくその外側のブロックの変数を書き換えたりするんだよな…。 鬱だな。 グローバル変数の悪夢。 /* 完全に完結していたらスマン。 でもそれなら完全に関数化して欲しいな。 */
Java@Eclipseもなかった時代 あるクラスのソースファイル HogeHoge.java public class HogeHoge { /* public int func001() { //酷いパスタソース } // 数千行 */}
HogeHogeを継承したクラスに処理本体が書いてあるんじゃね?
>718-719 コードをよく読もー 頭の/* に気付かずに必死にパスタをほぐしていくと 最後にうがーーーーーーーっっっっっっとなるわけだ。
日本語が文字化けしてるソース。 エラーメッセージやコメントが読めない。
char *func(){ char buf[512]; char *ret; /* bufに対する処理.. */ ret = buf; return ret; }
>>722 ローカル変数へのポインタを返すなんて猿でもやらないだろ、常考
>>722 昔のソースを見ると結構良く見る
見た目ちゃんと動いちゃうから気が付かないんだよな
725 :
仕様書無しさん :2007/08/02(木) 02:50:36
class hogehoge { } class hagehage extends hogehoge { } class tekateka extends hagehage { }
>>721 間違えた文字コードでそのファイルを開いてるだけでは?
通信中にビット化けおこしてるかも はたまた複数のエンコードが混在したソースとか
>717 色の変わらないエディタつかってたの?
729 :
仕様書無しさん :2007/08/02(木) 07:55:03
>>724 見た目もちゃんと動かないだろ。
リターンした直後に参照したとしても書き換わってる可能性高いだろ。
strcpyとかのように、スタックをあんまし使わない関数へ渡すなら 動きそうな感じもするけどね
>>722 最初はbufを直接返したけど動かなくてあわててretを追加してみたと予想。
なんか思考と行動がかわいいじゃないか。
>>729 環境によるだろうが、運が良ければ動くだろうな。
>>729 別の関数よぶまでは壊れることはない。
特権レベルのない環境では保証できんが。
そんな環境はたぶん無いと思うが、 スタックを巻き戻す時に 0x00 でクリアする 処理系もあっても不思議では無いような気はするな。
.NET のDataSet(単一のDataTable)の中にプログラム中のメッセージ定数や、Enumにあたるものを格納して、 メッセージクラスwだなんてのたまうバカ。プロジェクトの構成もいろいろと凄かった。 もう勘弁してくれよほんと。
メッセージ定数とかどこでもよくやるじゃん。
DataSetって便利だから下手なメッセージ管理クラス作られるよりいい気がする
>>728 Java1.3の時代、viで開発していましたが何か?
vimとかじゃなくて、vi?
か、漢だ……
本物のプログラマは COPY CON PROGRAM.EXE を使う
ネ木1 ネ木4 →
743 :
722 :2007/08/03(金) 00:25:33
この関数呼び出しを直接strcat(だったかな?)の引数にしていて、一応結果は正しくなっていた。 実際には buf の前後に他のローカル変数があったので、それらを犠牲に buf は生き残っていたんだと思う。
>>741 本物の例。
C>copy con #.com
テスト
^Z
1 個のファイルをコピーしました。
C># バッチファイルで '#' がコメント行に出来るようになるんだぜ
C>#スペース空けないとダメだけどな。
'#スペース空けないとダメだけどな。' は、内部コマンドまたは外部コマン
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
すげー って テ だけでいいやん
>>741 そういや昔実行ファイルをテキスト化するツールがあったな
20年ぐらい前だが
>>747 いや、パソ通のBBSにうpされたテキストを保存するだけで実行ファイルになるというやつ
>748 ish通すとかでなく? そりゃすごい。
懐かしい話してるなー それ確かに見たことあるよ 当時驚いた
おもわず eicar.com をここに書こうかと思っちゃったよ。 virus検出に引っかかるだろうからやめとくけど、 あれもtextを保存するだけで.com形式の実行ファイルになる。
>>722 記憶違いならすまんが、大分昔に、
配列宣言すると勝手にstaticになるCコンパイラ無かったっけ?
>>752 何その厄介なコンパイラ(((( ;゚Д゚))))
変数とか使う直前に書いていたら、"わかんなくなるから全部メンバーにして"って 言われた。 メソッド内でしか使用しないのに....こんなもんか?
>>754 メンバ変数をm_001~でつけてやったらよかったのにw
「全部メンバーにしておきました!」
PLCのレジスタ名みたいだな
757 :
仕様書無しさん :2007/08/04(土) 15:16:19
>>752 メイン関数で配列取ればスタティックみたいなもんだな
>>754 マジで言うとさ、そういう時ってプログラマとしての正念場だと思うわけよ。
俺はそういう書き方はできないよ、っていう態度ははっきりさせたほうがいい。
糞コードの書き逃げが通用するのはまれで、たいていはあとで自分の首を
絞めることになるよ。
759 :
719 :2007/08/04(土) 17:07:51
>>720 いやだから、後方互換性のためだけに、HogeHogeが形だけ残ってるのかと。
引き継いだソース(レガシVB)なんだけど。 とある標準モジュールの構造。数個のプロシージャに処理を切り分けてはいるものの ・全プロシージャがPublic。モジュール外からのエントリはその内1個 ・どのプロシージャにも引数一切無し、代わりにモジュールに数十個のグローバル変数 ・その変数も全部Public。クロスリファレンスなんて作ってる暇ないからはっきりとは言えんが、 90%モジュール外から見えなくておkなはず 「DATA DIVISION.」とか書いてないのが不思議でしょうがない。
全部書き換えてしまえ
public変数なのにgetterあったりする
リファクタリングでpublic変数→getterってよくあることじゃない。 だから用意周到にgetterも用意してあるんだよ。
リファクタの途中かよw
互換性のためにとりあえず残してる、じゃね?
互換性のためにしても、VBのPublic→Privateへの変更って簡単そうに思うけど。 Privateに置換して参照できないエラーが出たら、Publicに戻せばいい。 漏れの保守してるコードではそれでトラブったことないんだが、それができないリスキーな コードってのもあるの?
おや? とは思うが辞めようと思うほどかなぁ? そういう状況のソースを見たら、メンテナに聞いてみたりはするとは思うが メンテナがはっきりしなかったりしたら無視して getter/setter 使うかな
メンテナってメンターのこと?
maintainer
尹孫河
VBよくわからんがprivateにアクセスしようとするとエラーになるの? 勝手にその場で変数作られたりしない?
>>772 コードでOption Explicit を指定すれば、宣言なしの変数作成は警告が出るようになる。
このオプションは、IDEで自動入力するように指定することも可能。
…しかし、これを知らなかったり、面倒くさいという理由で無効にしてるVBプログラマも多そうだな…
オプションをさぼったせいで、仕込んだバグの発見に苦労するのは自分なのに。
Option Explicitはデフォだとおもてたよ 今やってるソース。 同業他社があまりの対応の悪さに、客に斬られた。で、ソース管理がこっちに回ってきた('A`) VBなんだけど あらゆる関数にResume Next Option Explicit?なにそれおいしいの?(゚∀゚) 起動したら初期設定で種々の設定値をDBやファイルから取得するんだが ファイルが無くてもエラーにせずそのまま処理続行 DBに接続できなくてもエラーにせずそのまま(ry ファイルにデータが入ってなくても(ry なので、最初はすんなり起動するが、画面のあちこちを触っているといきなりエラーで落ちるor 無限ループに突入してアボン 勘弁してくれorz
Unit Testの都合上、Privateで十分なものをPublicにする場合が多い。 VB6だけど orz
>>774 逆に、叱られたわけじゃないけど
昔いた会社でエラー処理が多過ぎる
って言われたことは有るな
進めたくても先に進めません
状況的に発生しえない例外まで全部捕捉しようとする冗長なコードなら幾つも見た。 適正なインデックス範囲で回してるのに ArrayIndexOutOfBoundsException を catch しようとしてたりね。 そういうのは鬱陶しいし無駄に警戒心が働くんで正直やめてほしいんだが。
まあ、RuntimeExceptionはキャッチ禁止だよね。
>>777 世の中ハードウェアもOSも信用出来ない。
もちろんアプリも信用出来ない。
子供の夢にも出てこない 大人が懐かしがることもない
>>778 基本はそうだけど、場合による。
日付などのフォーマットの間違いを例外で適当に指摘させる意味でも、
あるいはFileNotFoundな状況で自作例外をリスローすることもあるかもしれない。
まあ、NullPointerExceptionはキャッチ禁止だよね。
>>779 もうコンピュータも電化製品も文明も捨てて山に篭るしかないな
NullReferenceExceptionも叩いてください
ぬるり
ぬるりふぇらせくす
ぬりえ
>>742 それ、
ネ木1 ネ木4 →コ
にした方が、セーブ終了後にちゃんとモニタプロンプトに戻るんでオススメ。
今度試してみてね。
以前、助っ人で関わったプロジェクトでの事。 早めに当日の作業が終わったので、 プロジェクト内の他のメンバーのソースを眺めてた。 あるモジュールのソースを開いた所、ランダムに文字列が並んでおり あ、やべ、バイナリファイル開いちゃった、と思い慌てて閉じた。 ・・・ちょっと待てよ、テキストファイルしかチェックインしてないはずだぞ・・・ もう一度同じファイルを開いた。 それがソースファイルで有る事を理解した俺は「あ”~~~~~」と叫んでしまった。 皆が黙々と作業している所でだ。 隣の席の奴(彼は優秀で書くソースも綺麗)に小さい声で「このソース凄いね」と 声を掛けると、彼は俺のPCのモニタを一瞥して軽く横に首を振った。 何が凄いってインデント滅茶苦茶、空の行がやけに沢山有ったり、 反対にゴチャゴチャっと改行しないで固まってたり、 とても人間が書いたものとは思えない。 そこで、誰のモジュールか調べると・・・ えーーーー!!! プロジェクトリーダーかよwww
某ツールでCOBOLからVBに変換かけた後のパスタソースよりましだと思う
整形ツールを使えば?
スパゲッティと言うよりむしろ固焼きソバ。 ほどこうとすると砕けます。
パスタにしよう。うん、パスタ。
十割そば。 触るとすぐにブツブツ切れます。
ネストがわけわかんないソース
>797 それはお前が本物の十割そばを食ってないからだ
まさに今
>>792 と同じような状況でソース見てる
延々と300行ぐらい続くdebugPrintを
どーすっかな、これ
つーか水増し?
水増し最悪だよな NEC関連に行っていた時、リファクタリングでステップ数が減ったらば大問題になった 結局は理解してもらえずにぶち切れた開発陣は無駄コードを散りばめたというオチ どうせ下請けのプロジェクトリーダーですよ、ゴミ屑以下だから説明する権利もない
802 :
仕様書無しさん :2007/08/07(火) 17:42:00
問題になるほど減るか? 同じ開発チームで・・・ さいしょから水増しコードだったんじゃないのかと。 普通は作ってる途中はコードは少なめに作ると思うけど。 .net1.0で作ってたのをリファクタリングで2.0に変更したとかじゃあるまいし。
>>802 そうだよ、最初から水増しされていたわけだ。
コピペされていた部分をリファクタリングでまとめたら1/3程度にコンパクトになった
前任者は水増しして請求金額を多くしていたんじゃね、って感じ
俺のかかわったのは3年前くらいだあ、未だにNの見積もりって、ステップ数試算→人月計算なんだろうか・・・
水増し部分は散りばめないで、メイン部分と綺麗に切り離して読みやすさを保ってね♥ 必要な関数() { 必要な動作数行 水増し関数() } 水増し関数() { 水増し数千行 }
ステップ数で見積もるから悪い
ステップ数ってアセンブリ言語全盛期の時代の言葉のような。
みんなステップ数が悪いのは知ってるんだけど、 コード量を定量的に評価できる代案出せないのが現状だな こうやってずっと同じ愚痴を言い合うのがせいぜい(自嘲
一機能8万円でっていう企業がITProかどっかで紹介されてた。
>>800 マルチスレッドのタイミング取りかも知れないぞw
debug-print 類は大抵遅いからそのラグで別スレッドの処理が間に合ってしまうというヤツ
>>807 定量的に評価する価値があるもんとも思えないんだけどね
どれだけ複雑な処理を実装するかとソースの量は比例しないんだし
上(発注元含む)がそれを理解してはくれないんだがね…
>>810 良い代案が無いから、上もそれで諦めてくれているんだよ。
コピペ君って馬鹿だな、まで読んだ。
>>807 なんか、入力項目で何ポイント、出力項目で何ポイント、画面遷移数、
対応キーで何ポイントとか言うプログラムの工程見積もりのプランが
あったと思うが、それを洗い出して数値化する方が激しく面倒だった記憶がある。
>>814 ふぁんくしょんぽいんと法ってやつやね。
基本情報の試験で出たけど、現場ではとんとお目にかかった記憶がないww
ステップの見当はつくけど 水増ししてもメンテでつまらん手間が増えるだけで 馬鹿らしい。恥ずかしいし
水増ししてメンテどころか仕込まれまくられたら、目も当てられないんじゃないの?
さあ、抜き打ちコードレビューだ。
拒否しますw
しかし、第三者機関によるレビューって必要なんジャマイカ?と思う今日この頃
>>820 実現するにはあまりにも難しいし、誰もうれしくない。
>>821 客は嬉しいんじゃないか?
価格より質を重視する流れは多少なり出てきた
そこで全頭検査ですよ。お客さんも一緒になって。
客がコン猿みたいのを雇って、仕事の質をチェックさせればいいよ。
1次受けが大手なのが慣習 それをやると失礼に当たるんだな、美しい国では
>>807 最適化ありmake(ビルド?)後のバイナリサイズで計測するのはどーか。
>>826 巨大なビットマップをリソースに放り込まれたらどうする
>>826 ぼったくられる
でも、現状と大差はないwww
コード1行書くのに、考える時間も加えてコンマ何秒かはかかることを考えると 規模→掛かる時間の見積りに使うとこまではlocは言われるほどクソじゃない (無論、それを足がかりにそれ以前の作業量まで逆算してなんぼだが) 問題は規模と掛かる時間が出たら即→人月→コスト、と導かれてしまうので とにかくコードをやたらと書けばぼったくれる!! というアフォな発想まで導かれてしまうこと
そして、仕込まれまくる?
大雑把に 設計 + コーディング + テスト の活動を行うとして、 これに掛かる時間・コストがコーディングの生成物であるソースの「ステップ」数だけで計れると考えてる方がおかしい とはいえ、コーディングに掛かる時間・コスト×3 なら妥当なのかもしれないが...
コードの質見れる人があんまりいないということなのでは?
たとえれば建築物の見積もりが使った釘の本数に比例するみたいなもんだろうか 釘を減らした新しい工法は評価されない 水増しのために要らない所に釘を打ちまくって強度が弱くなる
>>827 使われてなかったら最適化で消えんじゃね?
VCとか良くわかんないけど。
>>831 詳細設計書なんて普通納品しないし、成果物に対して金払う考え方はアリだと思う。
個人的にはそもそも人月で金決めること自体アヤシイ気がしてる。
現実とのギャップはデカいけどな・・・
実際のところ問題は、検収の時にロクにレビューしてないことだろ。
ピアレビューじゃなくて、発注先と元の間でのレビュー。
検収時にレビューされてももう遅い。 業界全体がウォーターフォールなんだから、最初のうちにつぶさないとダメ。 それに動けばとりあえずは役目は果たしてるから、 それ以上投資したくないって考え方の人間が多いだろ。
switch (pHoge) { case 1: func1(); // 当たり前の処理1 break; case 2: func2(); // 当たり前の処理2 break; . . . default: errfnc(); // ありとあらゆる想定の巨大な関数 break; } で、errfuncがバイナリ全体の8割だったプロジェクトは知っている。 人間が操作してもdefaultに行き着く事は不可能だったよ。 論理上は必要だから最適化もかからない。
機能-->step数-->人月ってとこがウソなんだよ。
-->step数-->極小化する努力-->step数-->それを書く人月 なら妥当だけど。
見積りじゃなくて、出来た結果を最適化してそのstep数しか払わない、とか決めれば
最初からシェイプアップしたもの作るようにならないかな?
>>833 「打った釘」じゃなくて、「運び込んだ釘」の量だな。「現場のどこかに埋めた釘の山」(w
どうやって最適化する? コンパイル後のバイナリを逆コンパイル?w
最適化の意味が違ってるみたいだね。
コンパイラがやってくれるのは、サイズ/実行時間(パイプラインなんか絡むとややこしいけど) このどちらかでしょ。 ソースコードの価値は、保守まで考えたら人間にとっての可読性で、 それには「簡潔さ」が大事と思うわけよ。 必ずしも短きゃいいというものではなくて、命名の 適切さとか、部分の配置とかあるだろうね。 でもたいていの場合、「短いほうが適切・かつ 読みやす」かった。 レビューの過程で「無駄に長くしている」を摘発するのでもいいんだけど。 今まで「自分だけ」以外のプロジェクトではその逆しか出会ったことない。
可読性
>>841 の続き
求めると長くなるときがあるし、結構難しいような?
>>834 > 使われてなかったら最適化で消えんじゃね?
リソースコンパイラが最適化を行うという話は聞いたことが無い。
正直、人員の最適化から始めないとダメかも
客(仕様)を最適化しないと
無駄ソース抜くプリコンパイラ作ってくれ
ランダムに3分の1くらいで行数消せばいいんじゃね?
改行文字を消せばいいんじゃね?
可能な限りif文を3項演算子使うようにするツールでも作って
それなんて難読化w
三項演算子はいらない子
三項演算子と三原順子は似ている
三原順子と三色同順は似てない
三色ご飯食いたい
サンコンもいらない子
コンパイルすりゃif文も三項演算子も一緒
見易さがぜんぜん違うんだぜ?
場合によってはサンコンの方が 見やすく感じる時もある。
サンコン演算子って何か嫌だなw
if とは意味が違うからな どちらかの値を設定するという意味を持つ式を書きたいなら bool result; if(hoge() == 0) { result = true; } else { result = false; } より result = (hoge() == 0) ? true : false; の方が明確。 # この場合は result = (hoge() == 0); で充分だがそこは勘弁してくれ
言語によっては一緒の意味だがな 例えばRubyは↓で r に式1か式2が返る r = if 条件式 then 式1 else 式2 end
出た!! キ印言語
(set! r (if 条件式 式1 式2))
>>860 個人的には三項演算子には()付けて欲しい。
result = ( (hoge() == 0) ? true : false );
冗長なのは分かってるが、ホントに個人的な話ね。
条件式には付けるけど...
867 :
860 :2007/08/10(金) 18:34:08
>>864-966 return(value); と return value; みたいな宗教戦争になりそうだな。
そういえばifの条件式の前後のスペースもそうだな。
個人的には見ての通りのスタイルだが他人が書いたソースの
その程度の違いなら全く気にしない
アンカーミスった…orz
ポップアップレス多すぎw
>>863 Lisp系列も普通のプログラマから見るとキ印なんだよな
カッコ対応がすぐに判るエディタを使わないと修正がし辛すぎる…
Lisperにとっては「括弧? そういえばそんなものもあったな」らしいな。
ウィスパーは関係あるの?
if文が値を返す言語の1つだから出てきたんだろ
pnutsもSQLもErlangもキモ言語か
寿司食いたいフフフフフフフフフフフフフフフフフフ
>>875 ガリでも食ってろ
あとちゃんと初期化しとけ
なんだこっちにも飛火かよw勘弁してくれフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
アガリの意味しってるか? もうガリ一枚すら食えないって意味だぞ? しらねーだろ?
A gari
食えなくなるまで食うってのは動物で人間くらいなもんって話を思い出した。
人間の三大欲望の一つだからな>食う事 繁殖以外でSEX(生殖行為)するのは人間と一部霊長類(ボノボ)だけだし。 睡眠は...よくわからん
睡眠はまだまだ未解明の部分が沢山あるんだよな
三大欲求と言いつつ セックスはしなくても生きていける
おまいは生きていけても人間は生きていけなくなる
たしかに拷問として ・満足に眠らせない ・・・ つらそう... ・満足に食べさせない ・・・ ひど! ・満足にSEXさせない ・・・ ちょw て感じか。全然重みが違うなw
ソースではないが今日現地調整で 突然別の人のソースを勝手に修正しはじめたバカがいて、 「ちょwなにやってんすか!!?」 って聞いたら 「ちょっとiniファイルの設定かえたから」だって。 はぁ??? なんと彼はiniファイルの設定に強引に合わせるために、 ソースを修正しようとしていたらしい・・・
それ、iniファイルなくても動くんじゃない?・・・つーか、そいつ込みで納入しちゃいなよ
まだ可愛い。 自分のソースがコンパイル通らないから俺のヘッダーを勝手に直した馬鹿がいた。 はっきり覚えてないけどプロトタイプ宣言あたり。 当然、翌日俺のソースがコンパイル通らない。 人生で一番切れた日。
バックアップ取ってと頼んだら 取ってもらったバックアップが全て .lnk になっていた
いや、さすがにそれネタだよな…?
ローカルな配列名は、要素の型の複数形にする規約はアリだと思うんだ。 int ints[N]; とか char *strings[N]; とか。 でもな、配列(を指すポインタ)の配列はsを二つ重ねるのはやめてくれ。 ぱっと見て何のことかわからんかったorz int *intses[N];
フォルティッシシシシシモ?
897 :
890 :2007/08/11(土) 12:32:13
>>891 ネタだと思うだろ?
実話なんだぜ、それ…
1KBのファイルが列んでてさぁ~っはっはっは…
はぁ…
>>892 適当な名前が思いつかなかったときの手抜きでそういうのを使うのは分かるけど、
規約で決められるとつらいもんがあるな。
ワロスメソッド public void printasstarisk(int count){ for(int i=0;i<=count;i++) System.out.print("*"); }
なんでstaticじゃないの
てゆか printasstarisk(3) てしたら四つ出力されるじゃん てのが笑いどころだよね。たぶん。static もそうだけど。
標準出力のラッパクラスみたいなもののメソッドなら static でなくてもそんなに違和感が有るわけではないなぁ 「System.out.print を沢山呼ぶな」か「1 つ多いよ」かの どっちかが笑いどころかなぁ… Java って前者を咎める慣習ある?
単純に × printasstarisk ○ printasterisk かも。
スペル間違いは結構見かけるなぁ footer が hooter になってたり image が imege になってたり。
それで辞めたくなるの?
アセンブラのラベルでATTIとかKOTTIとか書いてるのを見たときはちょっとやめたくなったな。 ま、ゴミソースだから別にいいか。
angleがangelになってるのがあった。
それは何かステキだ
デスマで意識朦朧として天使が見えていたのかもしれん
hootersのねえちゃんはいいな。
スペルミスが多いソースはその他の部分もへぼい傾向はある
無理に英語にしようとして意図の違う単語使ってたり
とは言え、スペルミス程度で辞めていたらきりがない
スペルミス程度で辞めたくなるようじゃ会社勤めは無理だろうな 独立してやっていくしかないんじゃね?
日本人なら日本語を使え
そこでなでしこの登場ですか?
VBあたりの関数名・変数名に日本語が使える言語かも知れん
それいっちゃあjavaだって使えるんじゃね?
どっかのブログで、アルゴリズムを説明するのに、Rubyで日本語の識別子をつかって、 擬似言語風にコードを書いて、それがいい感じだったから、自分もためしにC#で日本語の 変数やらをつかってみたことあったけど、かえって読みにくいし、入力もムカつくくらいやりにくかったな。 もし日本語使うとしても、重要なところにしぼって使わないとダメだな。
俺はVBAでゴミコード書くときにたまに日本語つかう。 使うときは一応関数に限定して、関数名が長くなりそう、ややこしい機能、英単語がわからないとかって時に使ってる。
C#はUnicodeで定義されている空白文字なら 空白文字として使える優良言語。
>>921 よく C/C++ 初心者の質問で挙がる全角空白じゃエラーにならないってこと?
うん。ちなみにJavaだとエラー。
Unicodeが使えるなら必要な仕様だなあ
全角の演算子も使えるようにするべきじゃね? ∈ とか ≦ とか
UNICODE 的には「全角」とかいう概念無しにそいつらも「文字」(数学記号)だしな
あぁ、Unicodeを何か誤解して、全部全角でコーディングしたバカならいたな(遠い目 2バイト文字ってそういう意味じゃねーよw
それ全角英数字オンリーってこと? どんだけww
半角カナと全角英数字は無くすべきだなw
UNICODEには、FULLWIDTH LATIN~とかHALFWIDTH KATAKANA~とかいう グリフがあるよ。 残念でした。
そういう意味じゃねぇだろ?
unicodeの半角全角は、他の文字コードから変換したときに、情報が失われるのがまずいからだろ。
「互換性のために残しています」
互換性といえば、まず2036年2月6日6時28分15秒と2038年1月19日3時14分07秒を乗り切らなければ。 鬱になるよなー。今プログラム書いても30年後に正常に動く保障が無いんだもんなー。 最初から正常に動かないと言う指摘はスルー。
30年後は会社辞めてる予定なので自分が書いたプログラムがトラブろうがどうしようが知ったこっちゃない
今からでもtime_tは64bitにしとけばいいのにね。
たしかにな。 現在組んでいるソースで30年後が問題になるものなんてほぼないが、今から対応して 問題を無くしておくのがプログラマおよびリーダーの心得。 派遣・外注上等の業界には逆立ちしても無理だがな。
30年後かー。 俺の歳だと定年後なんで、その時には俺のコードなんかリプレースされてるだろ、 知ったこっちゃないという気になるよ。 2000年問題もこんな感じだったんかな。
さすがに今度はコボラーの出番もあるまいて
世界のあちこちで問題が起こっている中、問題が発生しなかったシステムの管理者が ソースのコメントから名前を見つけて退職後の俺に粗品とともに感謝を伝えてくれないかな …無いな。 >935 >938 まるっきり2000年問題の二の舞じゃないか?
Javaで組んでたらまず問題ない。 データベースも問題なし。 やっぱり抽象的な層をはさむ言語が有利。
942 :
仕様書無しさん :2007/08/13(月) 02:25:00
永遠に壊れない自動車ができたら、自動車メーカーは潰れる。 道路の幅が数年おきに変わって、買い換えないといけなくなれば話は別だけど。
>>942 自動車はいくら設計や機構が完璧でも
いずれ材質が劣化して壊れるよ
たとえ話が下手すぎ
>>940 他の人から見れば2000年問題だろうが2038年問題だろうが、ノートラブルでクリアして当然なので
たとえMS-DOSで動いているシステムで2038年問題をクリアできていたとしても誰も感謝などしない。
逆に、2000年問題とか2038年問題を残しておいたほうが
後で対応していない→当時の人は?→対応してよ→お金いただきます。
でも期限付きで急ぎの仕事なので、高いですよ?仕事ゲット!でウマーかもしれないwww
>>940 逆に対応してなかったら、そいつ探し出してフルボッコとかありえるw
2079年問題も考えなきゃいけない俺たち平成生まれ 問題が発覚する頃にまだ生きてる可能性があるんだよorz
平成生まれがもう就職し始めてる事に今初めて気付いた
949 :
仕様書無しさん :2007/08/13(月) 07:04:57
>>948 そういやそうだ。
80歳とか余裕で死んでる年齢だ。
たとえばWindows98が発売から10年経っても使えるけど
既に完全互換のXPでNTFS使えば済むわけで。
問題は互換性のためのファイルシステムが使えなくなること。
デジカメとか組み込みのファイルシステムがFAT・・・
2079年問題なんて初めて聞いた。 お前らが死ぬ以前にFATが死んでるから問題にはならんだろ。 俺なんざ time_t が溢れるまで生きていられるかどうか....
自分が生きてないからどうなってもいいなんてのは考え方として良くないだろう そんな事だから石油も枯渇するし大気も汚染されるんだ 売り切りでソースも二度と見なくていいし責任も問われない仕事だったら 後は野となれ山となれでやっつけ仕事をかましちまうのかおまえらは? …するかもしれんw
>>950 VC8 (最近のgccもそうかな) の time_t があふれるまで生きていたら神
>>951 そりゃぁ「かましちまう」さ。そういうビジネスだろ。生産物に対して報酬を得るビジネスだよ。
生産者は生産物の産む利得とは切り離されているからな。
生産物の産む利得の一部でも入ってくるなら「死ぬまで面倒見ます」なのだけど。
gccはまだじゃないかな? 両対応させる関係で結局VC8にも_USE_32BIT_TIME_Tつけたが。
time.h で typedef __time_t time_t; bits/types.h で typedef __TIME_T_TYPE __time_t; bits/typesizes.h で #define __TIME_T_TYPE __SLONGWORD_TYPE bits/types.h で #define __SLONGWORD_TYPE long int 結局のところ、 typedef long int time_t; なんだな。 正直、適当言ってスマンカッタ。
しかし、time_tとか typedef されているものって、 そういう将来的な変更に対応しやすくするためのものなんじゃないの? だとすれば、一般的なプログラマはそれほど大げさな対応はいらないんじゃないかな。 。。。甘い?
time_t hoge=time(NULL); fwrite( &hoge, 1, sizeof(hoge), fp ); //アーッ
958 :
仕様書無しさん :2007/08/13(月) 23:28:05
ぬるぽ
ガッ!
960 :
仕様書無しさん :2007/08/13(月) 23:42:24
*((char*)0)=1;
Access Violation... はいいんだが、
>>957 のソースって何か起きるか?
第2,3引数が逆なのが気にはなるが。
time_tのサイズが変わったらファイルに互換性がなくなる ということだろうて
>Access Violation... はいいんだが、 って何の話? >第2,3引数が逆なのが気にはなるが。 fwriteには、常にバイト数で書き込んだ値を返して欲しいから、 第二引数は常に1にしてる。
生のtime_tで保存はやっちゃった刑だよね。 現実としてはYYYYMMDDとか、time_tでもテキストだろ。 俺はそう信じて盲進するよ。
2000年問題で先送りにしちゃった系の問題のが深刻だろうな 30年あたりを境にして1900年代と2000年代を切り分けるような対処した奴、手を上げろw
現在の年に近い方でも選択すべきだった?
967 :
仕様書無しさん :2007/08/14(火) 01:01:34
年金問題スレでは0を入力すれば西暦で1を入力すれば和暦なのは当たり前で、そうしないのはクズなんだってさ。
□年 □月 □日
969 :
仕様書無しさん :2007/08/14(火) 02:27:25
30年先にもまだWindowsがあると思ってるバカ。 その前に5年でリースが切れるから心配ないよ。
組み込みでは数十年にわたって使われ続けているシステムなんてザラにあるが Windowsでも無くはないんじゃないかね MSのサポートも開発環境も満足に残ってないだろうから改修大変 完全リプレースだとしても元のソースがわからず大変
>>969 MSが嫌いのはよく分かったから、少し落ち着こうな。
Windowsも使われている組み込み機器は数十年使われる事もあるんだよ。
自分の常識に合わない人をいきなりバカ呼ばわりすると後で恥をかく事があるから今度から気をつけような。
time_t 問題はそもそも OS の設計の問題という気がするんだが、 time_t を操作するアプリの見通しの甘さは責められても OS を責める声は少ないのな みんな、OS に関してはあきらめてるのか?
974 :
仕様書無しさん :2007/08/14(火) 10:55:17
time_tで十分なサイズを取るのと引き替えに ファイル名か拡張子が短くなってもいいのか、 それとも微妙に大きいディレクトリエントリ使ってファイルアクセスのたびに割り算・・・
未だ動いている(らしい)MS-DOSの業務アプリ作ったヤツも、 そんなに長く使われているとは思っていなかっただろうな。 その時代とは違って、今は一般にも普及してしまったから、 MSもそう簡単にWindowsは切り捨てられないし、 切り捨てたとしても資産が膨大だから、 ReactOS みたいなのが使われるかもしれないし。 30年後どうなっているかはわからないけど、考えておくのは 悪いことじゃない。 そもそも、IA-32やAMD64(Intel64)アーキテクチャがどうなっているかもわからんがな。
976 :
仕様書無しさん :2007/08/14(火) 13:53:07
ウィンドァウズ ブィストァ
time_t問題って、30年後だろ? その頃は引退してるから、どうでもいいやw 原子炉とか、生命にかかわるシステム開発してる奴だけは、注意しとけよ
生命にかかわるシステム開発してるけど、周りにはそんな 危機感全く無し
979 :
仕様書無しさん :2007/08/14(火) 15:02:14
一応WindowsならFILETIMEは64ビットだからよゆー。 プログラムの修正も不要。 問題はFAT32のファイル時刻の拡張・・・ FAT32で長いファイル名に対応し、ファイル作成日時と更新日時が保存できるようになってるけど、 サイズの変更は、互換性の意味からもないのかも。
>>965 普通70年を境にするだろw
それより、消費税を固定で5%と組み込んでしまった俺・・・
time_tより、近い問題な気が・・・
64-bitでも怖いから128-bitにしておこうぜ
西暦2922億年に人類が居るとは思えないな
脱線が過ぎないか
人類の後継者がお前を呪うかもしれないぞ
消費税登録部分がモジュール化されていたのに 計算部分で*1.05とかあるでやんの 氏ねよ役立たず害虫
それは死んだ方がいいな
>>980 コードを守るためにも是非消費税増税に反対してくれ。
(減税にも反対な)
ちなみに漏れは元号が変わらないことを切に願っている
いまだに内部は昭和で動いてるシステムもありそうだなあ
消費税って率をマクロその他にでもすりゃいいのかな・・・ でも単にパーセンテージが一律変わるのみ、とは限らないのでやはり計算部自体を隔離すべきか
消費税計算部だけDLL化
前いた会社では消費税は、適用年月日と税率をあわせて外部ファイルにおいてあった。 ...でも実際のプログラムには1.05と...orz
消費税は今後品目別税率が導入されて、業務によってはもろに影響受けるだろうから、外出ししといた方がいいかもね。
データベースに元号に関するデータが入っていたんだが、変更しても反映されない。 おかしいと思って調べてみたら、JSPに直書きされてた 見なかった事にした
しかし考え方を変えれば問題が起こるその日まで問題なく動いているんだから, 工業的見地からすればポリシーとか美的感覚の問題だと考えられなくもないんじゃない? 形あるものはいつかは壊れるのだと日本人なら誰でも悟っているんだから, ハードウェアとソフトウェアの区別がつかない相手ならばそれが理不尽なことであることを意識しないんじゃない?
ユーザーが設定できるように…ってのも無理があるか 税率の変更だけならともかく品目や価格で差別化されたらソースをいじらざるを得ないだろうな
>>995 >形あるものはいつかは壊れるのだと日本人なら誰でも悟っているんだから,
>ハードウェアとソフトウェアの区別がつかない相手ならばそれが理不尽なことであることを意識しないんじゃない?
システムに関してはなぜか無謬性を求めるユーザがあまりに多いように感じるのは俺だけ…?
>>995 そりゃそうだが、同時多発テロみたく発生したらたまらんよ
つーかもうスレ終わりじゃないか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。