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


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

くだすれVB6.0以前(超初心者向け)



1 名前:d mailto:age [2008/03/30(日) 09:01:59 ]
このスレッドはVBについて、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
VB使いが優しくコメントを返しますが、
お礼はVBの布教はしなくてよいので、初心者の救済をお願いします


前スレ
くだすれVB6.0以前(超初心者向け)
pc11.2ch.net/test/read.cgi/tech/1165574205/

139 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:15:00 ]
Newしなくても使えるのが標準モジュール

140 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:17:14 ]
>>139
本気でそう理解してる人が多くて困るんだよなw

141 名前:デフォルトの名無しさん [2008/10/04(土) 11:39:14 ]
VB6はすばらしいと思う。。趣味でやってる人ならポインタや構造体で挫折してもVB6ならその悩みは一蹴。
まさか参照とかでつまづく人はいないと思うけど。

やっぱ用途だよ。ゲームづくりだとVB6は物足りないけど、ツール製作ならNO.1だよ。


142 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:03:27 ]
意味不明な機能は使うなと言われて使用禁止されるのがクラスモジュール

143 名前:デフォルトの名無しさん [2008/10/04(土) 17:25:27 ]
バカだな。
標準モジュールはクラスモジュールの意味が理解できないアホ専用モジュール。

99%の実装はフォームとクラスモジュールだけで作れるし、作るべきだ。
同じ機能を持つインスタンスを複数作れるということのメリットを理解しろ。
それにクラスモジュールだとC++などのオブジェクト指向言語への移植性が格段に良くなるから、
VB6がWindows7で動かないとしても、移植作業であまり困らない。

144 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 17:54:05 ]
>>143
君VBでまとまった量のコード書いたことないでしょ?w

145 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:45:23 ]
おれがみてきたほっとんどのプログラムは、クラスモジュール0、標準モジュール200
とかそんなんだ。

146 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 21:55:01 ]
>>144
今メンテしてるのだと、クラスモジュール80、フォームモジュール20のアプリが俺一人で作ったものでは一番大きい。
今それをVC++に移植してるが、クラス名やソースファイル構成をほとんどそのままで一対一に移植できてる。
VBのクラスはhas-a構造しか持てないが、これだけで十分にオブジェクト指向ライクなプログラミングはできるからな。
クラスモジュールを使ってなかったら、オブジェクト指向言語への移植はまず無理だったろう。

ま、標準モジュールだけでスパゲッティプログラムを作って、DoEvents地獄に陥るアホな開発者は
この先生きのこれないのは確実。

147 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:05:02 ]
>>146
やっぱり分かってないね。

クラスモジュールを積極的に使え、までは正論なんだけど
「標準モジュールはクラスモジュールの意味が理解できないアホ専用」(=標準モジュールを使うな)
は全く正しくない。

VBって言語は嫌でも標準モジュールを使わないとまともなコードは書けないようになってるんだよ。
理由はいくつかあるが、

- VBのクラスは静的メソッドが書けない。
- Win32APIの宣言は標準モジュールにしか書けない。

この二つが大きいかもしれない。



148 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:07:55 ]
というかJavaとかやればVBでも自然とクラスモジュールは
使いたくなる。というか使わないとやってられなくなる。


149 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:47:05 ]
>>147
>Win32APIの宣言は標準モジュールにしか書けない。

すぐばれる嘘をつくな。

150 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:57:28 ]
標準モジュールにしかかけないのは、コールバック関数だっけか?

151 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:58:58 ]
言葉遣いも知らない奴みたいだね。

別に嘘を書いたつもりはないが、VB6を触らなくなって久しいので
間違っているかもしれん。

いずれにせよ、public staticなメソッドが書けるのは標準モジュールだけだ。

152 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:37:52 ]
VB6でクラスモジュールを「使うこと」にこだわってるのってあんま意味がないように思えるが。
例えば、桁数合わせ(左スペース埋めみたいな)関数とか桁数切り取り(左7バイト切り取り)関数のようないわゆるよくある共通関数は標準モジュールに並べるほうが良いと思う。
単なる関数群をクラスモジュールに記述されていると、何か意図的なものがあるのか考えてしまう。


153 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:48:58 ]
共通関数はUtilクラスにまとめる

154 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:02:14 ]
>>153
なんであえてクラスなの?

155 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:05:03 ]
変数関数ともにC#やC++のstatic、VB.NETのsharedに当たる機能がない。
VBのStaticキーワードは別物。たまにそれでバグを作ってるのを見かける。
少なくともUtilクラスをNewして使うようなことはしたくないな。
そんなときはモジュールでしょ。

156 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:08:47 ]
本来staticは無いほうがいいんだよ

157 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:19:28 ]
VB6のクラスをCOMコンパチにしてしまったのが広まらなかった原因のように思えるな。




158 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:00:49 ]
なんつーか、>>146みたいな考え方するやつって何で多いんだろう。
そういう奴って言語仕様とか特性って考えないのかな。
今流行のコーディング思想とかには言語の垣根をすぐ越えて飛びつくけど、
自分が開発している言語でいかにいいプログラムを作るかを考えようとは思わないよな。
保守性、拡張性、メモリの取り方や開放の仕方・タイミングなどなど。
今関わっているプロジェクトに今使っている言語でいかにいいものが提供出来るか、という前提のもとに開発しているとは思えん。
そんなやつはどこいってもただの半端者だろう。
オブジェクト指向とか言語の移植とかを自慢げに語っている時点でピントがずれてる。
そんな大層なことでもないしw

159 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:07:06 ]
まあ、向上心もなくVB6しかやったことなければ
クラスモジュールなんか使わないよね。
使わなくてもものは作れるもん。でもそれでいいのかな。

160 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:15:05 ]
>>159
クラスも使うし、JAVAとVB.NETもメインでやってるけど、
VB6で開発する時にオブジェクト指向を意識することはない。

161 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:23:30 ]
今の言語と比べるのは酷というものだ

162 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:23:33 ]
>>160
オブジェクト指向って意識してやるもんでもないでしょ?
自然とオブジェクト指向脳になるでしょ?


163 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:31:27 ]
>>162
オブジェクト指向脳って言われても困るが、
無意識にクラスを多用してるかと言われるとそうなのかもしれない。
でも、クラスモジュールにする必要がなけりゃ標準モジュールで実装するよ。

164 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:31:32 ]
Utilクラス作って、標準モジュールでインスタンス化して使いまわすんでしょ。

165 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 12:49:29 ]
Utilクラスなんて作りません。

166 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 13:17:37 ]
>>158みたいな人も困るw

>>146はたぶんVBでそれなりの規模のコードを書いたことがないだけで、
言ってることがそんなに間違ってるわけじゃないよ。

167 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 13:33:00 ]
大規模なコードを書けば書くほど、標準モジュールを多用するのが適切だというのか?
アホじゃないの?逆だろ。
規模が大きくなるほどカプセル化して依存性やソース変更の影響範囲を狭めようとするのが常識。
どこからでも直接呼ばれ得る膨大な関数群で出来てる巨大プロジェクトなんて
絶対メンテしたくねーw

てゆうか、すでに死んだ言語の標準モジュールの是非について熱く語るのもアホらしい。。



168 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 13:35:49 ]
>>167
だからそこはお前さんの言ってることは正しいから
意味なく煽るような書き方するなって。

自分が幼稚なガキじゃないと思いたいならね。

169 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 14:12:29 ]
クラスを使う使わないで盛り上がれるのはVB6だけ!

170 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 14:17:39 ]
訂正)VB6で盛り上がれるのはこのスレだけ! 

171 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 14:22:41 ]
>>167
意味的なまとまりごとにmoduleを分ければいいだけの話

172 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 14:27:17 ]
そういう問題じゃない。

173 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:55:56 ]
どういう問題だよ

174 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:59:46 ]
クラス分けは一種の差別だから撤廃しましょうって問題。

175 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 17:20:49 ]
>>167
それは合ってる。
だが逆に極端な例を出せば、標準モジュールのmainに100step程度書けば実装出来るようなものも出来るわけだ。
要するにクラスを使う→正、標準を使う→誤 みたいな固定観念を持っていること自体がおかしいのよ。
それに気づいてくれ。

176 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:53:16 ]
クラスモジュールを一度も使ったことが無く、存在意義も知らない奴が多いことを問題視してるんだが。
>>142みたいに使うことを禁止してるような職場など論外。
よほどレベルが低い人間が集まってるんだろう。

「クラスモジュール使わなくても大規模なソフトを作れてるよ。特に困ってないよ。」
とかいうけど、そういう考えの奴がチームに一人でも居ると、まともなプログラマが迷惑するんだよ。

今時オブジェクト指向を理解しようとしない奴なんてプログラム書く資格ないよ。

177 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:57:53 ]
資格とか、そういう非技術的な話題はどうでもいいよ。



178 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:27:56 ]
短納期で納品後あぷでーとなし。顧客の満足するバグがでないプログラムであったら、
ソースがどんな書き方されててもかんけーねーよ。メンテしないんだから。
俺はその手の納品を何件もみてきたが、C長くやっててクラスがなんたるか理解できて
ないけど、腕はたしか。で、標準モジュールだけでかかれてた奴が軽快に動作して
バグなし、しかも短納期なのをみてると、ほんと口だけの奴はどーでもいいよ。

ま、しかし、どとねっと案件は、怖くて発注できませんわなw

179 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:32:18 ]
煽るつもりはないけど、>>178ってダメグラマーの典型的な言い訳に聞こえるよ。

180 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:38:26 ]
俺の経験したのは、
ほとんどの関数をCで書いてDll化。
DeclareでVBから呼び出し。Formがほとんど。
っていう納品のされ方なんだが、DllのソースがVC++なんで
メンテのときVBと両方みるのが素人のおれには、ややつらい。
構造体の受け渡しとかめんどーなんだよな。

181 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:42:27 ]
>>178のようにはなりたくないと素直に思った。

182 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:48:12 ]
VB6でちょっと手の込んだようなことやろうとするとどうしてもWin32APIの
お世話にならんといかんからなー。じゃ、結局C++でやっちゃえよ、って
ほうにいってから作るから180みたいなのは非常に多い。

183 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:50:26 ]
全部VC++でいいじゃんと思うのだけどなぁ
わざわざDLLにして呼ぶくらいならなぁ
MFC使えば生産性も2倍も変わらないと思うんだけどなぁ

184 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 02:33:29 ]
自分のレベルでも人のレベルでもなく、中間のレベルに皆が合わせて開発すればうまくいくんじゃね?

185 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 03:14:45 ]
問題は、中間というのが皆の思う所より随分低いようだということ。

186 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:45:29 ]
メンテもいらないし軽快に動いてるから
グローバル変数やgoto文使いまくりでもOKと同類の主張する人がいるスレはここですか?

187 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:10:16 ]
偉そうなおまいらはそんなことはないと思うが、
一応それなりの数のソース見てきた俺としてはだな。
コメントは「コメント」をつけろ!
ゴミ変数残しとくな!
これ出来ていないソースがむっちゃくちゃめちゃいけ多い。
'ここで日付の入力を非活性化にする とか

とか書いてんの。アホか。ソースの日本語訳なんていらんわ!



188 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:30:29 ]
なんでそこで「めちゃイケ」入れたん?

189 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:51:28 ]
動かない綺麗なコードより、動くコードのほうが金になる。

190 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 22:00:08 ]
>>187
コメント無しのソースを、読む練習をすると良い。
まぁ、変なコメント付いてるといらつくんだが、修正跡は全文残しておいて欲しいし(その一つの修正がバグの原因になる事も多い)
書いてる人が読めないソースになるのも本末転倒だしな。
愚痴るよりは、その人にソースの書き方をアドバイス。

  上司だったりしたら目も当てられんが。

191 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 22:29:41 ]
修正跡はCVSのほうでコメント残ってりゃいいや

192 名前:デフォルトの名無しさん [2008/10/07(火) 23:42:23 ]
本当にカナリの初心者で
最近クラスについて勉強中なのですが
ちょうどクラスモジュールと標準モジュールのことが話題に
のぼっていたので質問させてください。

私の中では
「クラスモジュールでやれることはクラスモジュールでやり、
それ以外は標準モジュールで」
という認識でした。
あとは、標準モジュールは
・プログラムで汎用的に使われるメソッドや変数
をおくべき場所なのかなぁって。

結局のところ上の議論が集結していなくて答えが分からなかったのですが
認識は正しいのでしょうか?
クラスモジュールと標準モジュールの使い分け方や
クラスについて正しい理解がしたいので教えてください。

193 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 23:49:47 ]
そんなことはいいから他の言語を学べ
そうすれば自然にわかってくる

194 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:13:06 ]
言い方はどうかと思うがその通りだね。

そもそも今からVB6を学ぶってどうなの、って感は否めないけど
仮にそれが避けられないとしても、先にC#なりVB.NETなりで今時のプログラミングの
考え方をマスターしてからやった方が、回り道のようで案外早いと思う。

まあ、VB.NETとかに慣れちゃうと、なまじ中途半端に似てる分
VB6のダメさが目についてイライラするかもしれんけど。

195 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 01:26:32 ]
>192
>・プログラムで汎用的に使われるメソッドや変数
メソッドはともかく変数はどうだろうな?と個人的には思うなぁ。
標準モジュールにPublic変数の宣言書いちゃうのは個人的には禁止したい。

196 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 10:57:14 ]
標準モジュールに書いていいのは
sub main()

だけ

197 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:23:35 ]
クラスモジュールのグローバルなインスタンスを標準モジュールに書くということはある。



198 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:57:55 ]
グローバルのインスタンスが許されるのは1個まで

199 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 18:29:17 ]
何いってんだ?
グローバル変数はすべての基本。
全てグローバル使ってこそ本物。

200 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 21:10:10 ]
>>199
了解した、その手筈でやってみるZE!

201 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 15:37:04 ]
グローバルマンセー!!!

202 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:08:55 ]
VBのまともなソースを未だにみたことないので参考にしたいのですが
どなたかありませんかね?リンクでもいいです。

203 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:06:51 ]
>>202
まず202氏の書いている『まともなソース』を頼む。

204 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:42:01 ]
VBでまともなソースってそもそも無理難題。ましてや絶滅寸前でメンテナンス案件しか残ってないんだし。

205 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:20:50 ]
俺はまともだ

206 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:27:17 ]
VB6の最終使用日みたら2072年になってた

207 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:05:05 ]
つまり、目の前にあるぐちゃぐちゃなソースはまともなソースである可能性が高い。
そういうことでしょうか?



208 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:10:13 ]
ぐちゃぐちゃなら、まともではないでしょ。

209 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:13:50 ]
みてみたい、みてみたいのぅ。まともな奴を、一生に一度でも。。。

210 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:15:56 ]
歌丸です?

211 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:27:36 ]
homepage2.nifty.com/nonnon/
例えば、このあたりのソースは、どんなもんです?
英単語の綴りミスや、関数のコメントが冗長なのが気になりますが
結構好みです。

212 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:44:39 ]
>>211
暗号のやつとかみてみたけど、それほどきれいじゃないね。

213 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:48:54 ]
俺は、コメントがC++風なのが好みだな
html埋め込みも可
'///////////////////////////
'//
'///////////////////////////

もしくはJavaDoc風。 C#風なのはいいのだがXMLがださい。

214 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:55:56 ]
>211
そのサイトのどれだろう
FTPと文字列変換クラスしか見てないけど、いいと思う。
機能数が増えてもこの感じを維持できれば十分だ。

215 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:07:56 ]
もうちょっと大きい規模の良ソースあればなー。
オープンソース文化がVBになかったのが、技術あがらない原因のひとつだとはおもう。

216 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 00:53:03 ]
そんなことはない。
3年ぐらい前まではインターネット上にVB6のソースがどの言語のソースよりも豊富にあった。
ほとんどが英語圏だけどな。

217 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 00:56:37 ]
FTPのをちょっと見ただけだけど、
「好みかどうかで言えば」個人的にはいまいちかなぁ。

関数はcallをきちんと書きたいし、
変数宣言は先頭でまとめたい。
if A then B も
if A then
B
end if
と書きたいかな。

エラー処理はよく出来ているが、ErrRaiseのあとにExit Subが書いてあるのが残念な気がする。



218 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:02:26 ]
お前のソースを出してもらおうか?

219 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:03:00 ]
こういうこと言う奴が現れると思った・・・

220 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:25:30 ]
出せよ

221 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:50:12 ]
たっても無いのにそんなに急に出せないっすよww

222 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:31:22 ]
>>217
「1行で完結するからインデントする必要ない」として、解釈するようにしている。
インデントはIf〜End If等の構造の始点と終点を見るための物なので、
Ifを1行だけの場合は、EndIf含めて3行も使う必要性が無い。
ソースを縦に延ばすと逆に見難くなってしまう挙句に
If文如きでインデントしてると(If文は頻繁に出てくる傾向があるので…)インデントが不必要に多くなってしまって
忘れた後でソースを見た時に目も当てられん状況になる。

私的にはこの様な感じで構造的な形式を取る場合以外はEnd Ifが出てくる状況を避ける様にしている。
 If hoge = n Then
  If hogehoge = nn Then
   hogehogehoge = nnn
  End If
 End If

1行で済ませるのが通常の条件判定、
End Ifが含まれるのが構造の条件判定…と言った形もお勧めしてみる。

223 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:53:51 ]
Call使いたがる人って、引数の括弧が無いと落ち着かない人かな?
組み込み関数もCallしてるの?

224 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:05:52 ]
>>223
人それぞれだろうね。
自作した関数の呼び出しはCallでやってる人とか、
戻り値を捨ててる目印にしている人とか。

225 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:42:56 ]
俺は、ピーターノートンで学んだから
if A then
B
end if
派だな。
あと引数をはっきりとわからせるようCallも付ける派。

226 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:36:08 ]
というか、callを省略するメリットってどれほど?
関数を明示することと、callをつけて戻り値有無を表すといったメリットをなくすほどのものなのか
俺はコメントをきちんと書くのと同じレベルの感覚だから、ちゃんとつけるってだけ。

227 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:39:15 ]
わざわざCallを付けるほうが、何かの意図があるかと思うけどね。
Functionの戻り値を無視する意図があるとか。



228 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:44:28 ]
質問です。

if((条件式A = False ) or (条件式B = False ) ) then
  処理(チョメチョメ)
end if

こういうif文で、条件式A、BそれぞれがBoolean値を返す関数
であった場合、デバッグ時の処理の流れとビルド後のEXEの
処理の流れが変わることがあったんです。

デバッグ時は条件式Aの後に条件式Bの順番だったんだけど
EXEでデバッグポイント代わりのmsgboxをいれてたら
条件式Bを示すmsgboxの後に条件式Aのmsgboxが出てきた
ので、デバッグ時と異なっているのは明らかなんです。

こういう現象の発生する原因って何だろうと思ったんですけど
ご存知の方いらっしゃいますか

また、環境ですが
開発PCがXPPro(SP3) ,VB6(SP6) ,IE7
実可動のPCが2003R2(SP2) ,IE7

となります。
よろしくお願いします。


229 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:49:56 ]
そこから導き出される結論は、特定の評価順所を期待したコードを書いてはいけないってことになるのでは?

230 名前:228 mailto:sage [2008/10/15(水) 10:43:03 ]
ごめんなさい、今起きました。
(久々の休みだったもので・・・)

>>229
そのとおりです。

条件式Bはその直前の条件式Aによって出力値の影響を受けてしまいます。
ちなみに、この現象XPでExeを走らせると発生しなくて、2003でExe走らせると
おきたんです。

ちなみに、似たようなソースを書いて検証したのですが、それでは
EXE環境でもXP,2003問わず、こちらの意図している
「条件式Aの評価」後に「条件式Bの評価」を行うのです。

なので、余計に前述の現象が奇異なものにみえたので
この現象が「なぜ起きるんだ?」という知的探究心(好奇心のほうが正しい?)
と気になったわけなんです。

ソースはけっきょく
if 条件式A = false then
if 条件式B = false then
ちょめちょめ
end if
else
いやんばかん
end if

になりました。

231 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:17:27 ]
賭けてもいい。
絶対228の勘違いだと思う。

232 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:41:01 ]
> 条件式Bはその直前の条件式Aによって出力値の影響を受けてしまいます。
こういう設計って一般的なの?

233 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:41:49 ]
a + b のどっちが先に評価されるかなんてことに依存するコードを書こう
なんてやつを相手にすんな

234 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:47:11 ]
>>232
それは普通。VB.NETなら
if 条件式A AndAlso 条件式B then


235 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:45:53 ]
副作用を伴って、なおかつお互いに関連がある関数は、複数if-conditionには書かないのが
どんな言語でも普通。

236 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:07:50 ]
>>235
15年くらい前ならそう言ってもよかったんだが、
最近はショートサーキット演算子があるのが普通だな。
PerlあたりのLL、Java、JavaScript、VB.net・・・例外はCくらいか。


237 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:10:38 ]
だよねえ。
ってああ、思い出した、これだ。

msdn.microsoft.com/ja-jp/library/sect4ck6.aspx

> トラブルシューティング
>
>  実行順序。Visual Basic では、演算効率を高めるために数式が自動的に
>  並べ替えられることがあります。このため、変数の値を変えてしまうような
>  Function プロシージャを数式の中で実行しないようにしてください。



238 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:12:17 ]
>>237のだよねえは>>235宛だったんだけど>>236に否定されてるな。まあいいか。

239 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:20:53 ]
そしてリンク先がVB2008のヘルプだった。まあ該当部分はVB6でも一緒なんで。






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

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

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