VBプログラマ質問スレ(Ver.6.0 まで) part60

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
ここは Visual Basic 〜6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。

VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。

○ 質問者の心得
 一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。
 二.VBScript、インストーラーなどはこのスレでOK。
 三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。
 四.荒らしは相手しない。

○ 回答者の心得
 一.答えられない質問は無駄に罵倒せずスルー。無理するな。
 二.代用法を強制しない。
 三.回答する上で必須ではない情報をむやみに聞き返さない。
 四.荒らしは相手しない。
 五.VB情報募集中。
 六.回答は質問者が理解できるよう具体的に。

MSDN Online Japan ホーム
 http://www.microsoft.com/japan/msdn/default.asp
Visual Studio 6.0 Service Pack 6
 http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
Google
 http://www.google.co.jp/

※「まず自分で調べる」クセを身につけよう。
2デフォルトの名無しさん:2012/10/27(土) 17:46:05.40
Part 1 http://piza2.2ch.net/tech/kako/968/968328471.html
Part 2 http://piza2.2ch.net/tech/kako/990/990793224.html
Part 3 http://piza2.2ch.net/tech/kako/1000/10005/1000523122.html
Part 4 http://pc.2ch.net/tech/kako/1006/10069/1006922992.html
Part 5 http://pc.2ch.net/tech/kako/1010/10106/1010624646.html
Part 6 http://pc.2ch.net/tech/kako/1013/10138/1013844542.html
Part 7 http://pc.2ch.net/tech/kako/1015/10158/1015836357.html
Part 8 http://pc.2ch.net/tech/kako/1018/10187/1018794901.html
Part 9 http://pc.2ch.net/tech/kako/1020/10208/1020830472.html
Part10 http://pc.2ch.net/tech/kako/1022/10221/1022127528.html
Part11 http://pc.2ch.net/tech/kako/1024/10243/1024380249.html
Part12 http://pc3.2ch.net/tech/kako/1026/10266/1026642565.html
Part13 http://pc3.2ch.net/tech/kako/1029/10292/1029241786.html
Part14 http://pc3.2ch.net/tech/kako/1030/10309/1030947162.html
Part15 http://pc3.2ch.net/tech/kako/1032/10327/1032706491.html
Part16 http://pc3.2ch.net/tech/kako/1034/10343/1034302532.html
Part17 http://pc3.2ch.net/tech/kako/1036/10361/1036154952.html
Part18 http://pc3.2ch.net/tech/kako/1038/10381/1038103769.html
Part19 http://pc3.2ch.net/tech/kako/1039/10398/1039859691.html
Part20 http://pc2.2ch.net/tech/kako/1041/10418/1041879465.html
Part21 http://pc2.2ch.net/tech/kako/1044/10440/1044028945.html
Part22 http://pc2.2ch.net/tech/kako/1046/10463/1046354784.html
Part23 http://pc2.2ch.net/tech/kako/1047/10477/1047743187.html
Part24 http://pc2.2ch.net/tech/kako/1050/10501/1050151126.html
Part25 http://pc2.2ch.net/tech/kako/1052/10526/1052627913.html
Part26 http://pc2.2ch.net/tech/kako/1055/10551/1055145106.html
Part27 http://pc2.2ch.net/tech/kako/1058/10586/1058674927.html
Part28 http://pc2.2ch.net/tech/kako/1061/10612/1061296197.html
Part29 http://pc2.2ch.net/tech/kako/1065/10654/1065446334.html
3デフォルトの名無しさん:2012/10/27(土) 17:48:06.25
Part30 http://pc2.2ch.net/test/read.cgi/tech/1069160036/
Part31 http://pc2.2ch.net/test/read.cgi/tech/1073732636/
Part32 http://pc5.2ch.net/test/read.cgi/tech/1077216109/
Part33 http://pc5.2ch.net/test/read.cgi/tech/1080606445/
Part34 http://pc5.2ch.net/test/read.cgi/tech/1084544243/
Part35 http://pc5.2ch.net/test/read.cgi/tech/1087519251/
Part36 http://pc5.2ch.net/test/read.cgi/tech/1092906058/
Part37 http://pc5.2ch.net/test/read.cgi/tech/1090286450/
Part38 http://pc5.2ch.net/test/read.cgi/tech/1095673000/
Part39 http://pc5.2ch.net/test/read.cgi/tech/1099737063/
Part40 http://pc5.2ch.net/test/read.cgi/tech/1106748775/
Part41 http://pc8.2ch.net/test/read.cgi/tech/1112414085/
Part42 http://pc8.2ch.net/test/read.cgi/tech/1116924129/
Part43 http://pc8.2ch.net/test/read.cgi/tech/1123952677/
Part44 http://pc8.2ch.net/test/read.cgi/tech/1130231657/
Part45 http://pc8.2ch.net/test/read.cgi/tech/1133977286/
Part46 http://pc8.2ch.net/test/read.cgi/tech/1138975113/
Part47 http://pc8.2ch.net/test/read.cgi/tech/1141320612/
Part48 http://pc8.2ch.net/test/read.cgi/tech/1146678926/
Part49 http://pc8.2ch.net/test/read.cgi/tech/1152667953/
Part50 http://pc10.2ch.net/test/read.cgi/tech/1161517193/
Part51 http://pc11.2ch.net/test/read.cgi/tech/1169949451/
Part52 http://pc11.2ch.net/test/read.cgi/tech/1179563617/
Part53 http://pc11.2ch.net/test/read.cgi/tech/1187667616/
Part54 http://pc11.2ch.net/test/read.cgi/tech/1204552981/
Part55 http://pc12.2ch.net/test/read.cgi/tech/1247487156/
Part56 http://hibari.2ch.net/test/read.cgi/tech/1275397597/
Part57 http://toro.2ch.net/test/read.cgi/tech/1304095827/
Part58 http://toro.2ch.net/test/read.cgi/tech/1328782534/
4デフォルトの名無しさん:2012/10/27(土) 17:49:04.36
VBプログラマ質問スレ(Ver.6.0 まで) part59
http://toro.2ch.net/test/read.cgi/tech/1344325875/
5デフォルトの名無しさん:2012/10/27(土) 23:31:18.86
もつ
6デフォルトの名無しさん:2012/10/28(日) 12:26:52.82
駄スレが立った、また、立った
1 おつ
7デフォルトの名無しさん:2012/10/29(月) 02:21:22.30
これでVB6の構文は全部捉えきれるかな?

function run(id1,id2) {
 var textarea1 = document.getElementById(id1);
 var textarea2 = document.getElementById(id2);
 var v = textarea1.value.match(/([a-zA-Z][a-zA-Z0-9_]*([\$\#\!\&]|)|[0-9]+(\.[0-9]+|)([\$\#\!\&]|)|\.[0-9]+([\!\#]|)|"[^"]+"|[\>\<]\=|\=[\<\>]|\<\>|\>\<|[\+\-\*\/\\\(\)\=\<\>\.:,_]|'.+| +)/g);
 var t = '', i;
 for(i=0;i<v.length;i++) {
  t += i + ' = "' + v[i] + '"\n';
 }
 textarea2.value = t;
}
8デフォルトの名無しさん:2012/10/29(月) 12:10:12.85
Win8買ってVB6を入れてみた。
相変わらずProgram Filesには入れられないが、
他のフォルダなら普通に通った。
まだ現役だ。
9デフォルトの名無しさん:2012/10/29(月) 12:20:56.03
もう捨ててやれよ・・・
10デフォルトの名無しさん:2012/10/29(月) 13:10:31.72
>>8
>相変わらずProgram Filesには入れられないが、

入りますが何か?

しれとも入れ方を知りたくてわざと馬鹿なカキコしたのかな?

教えないから安心してね。
11デフォルトの名無しさん:2012/11/04(日) 03:02:54.10
来週からVBの仕事なのに久しぶりにVB立ち上げたらなにもかも忘れてた...死にたい。
12デフォルトの名無しさん:2012/11/04(日) 08:26:42.19
>>11
死ねば?
13デフォルトの名無しさん:2012/11/04(日) 12:57:18.64
CreateObjectで指定できるProgIdの一覧ってどこかにまとめられていませんか?
14デフォルトの名無しさん:2012/11/05(月) 16:28:29.72
>>13
なんでも一覧を欲しがる奴っているよね?
そういう奴に限ってみんなのために自分が一覧を作ろうとは思わない。
利己主義者。エゴイスト。あーやだやだ。
15デフォルトの名無しさん:2012/11/05(月) 23:38:08.06
>>11
久しぶりにVB触ったら、UBoundでとれる配列の数が、配列のindexの最大値か
配列の数そのものか忘れてた。
16デフォルトの名無しさん:2012/11/06(火) 00:25:12.30
たまにはLBoundも思い出してやってください
17デフォルトの名無しさん:2012/11/06(火) 00:28:13.76
ひろしです
18デフォルトの名無しさん:2012/11/06(火) 12:25:12.17
Lsetって便利だけど.netへの移行時に死ぬような目に遭う。
これって変じゃね?
19デフォルトの名無しさん:2012/11/06(火) 14:25:15.95
はあ。
20デフォルトの名無しさん:2012/11/07(水) 11:49:47.70
>>10>>12>>14
ここらへんが人間のクズってやつやね
あーやだやだ
21デフォルトの名無しさん:2012/11/07(水) 11:56:57.50
>>20
全部俺のカキコじゃねーか?コラ
22デフォルトの名無しさん:2012/11/07(水) 12:15:11.71
>>18
移行なんて考えてはダメだ。
23デフォルトの名無しさん:2012/11/07(水) 22:29:32.72
VBドカタってなんでプログラムができないの?
24デフォルトの名無しさん:2012/11/07(水) 23:11:29.69
他の言語のスレと違って、オブジェクト指向をあんまり理解しない人が
いるのが、このスレの住人の特徴です。

25デフォルトの名無しさん:2012/11/07(水) 23:18:28.09
上を目指さないから
26デフォルトの名無しさん:2012/11/07(水) 23:40:36.19
【 注意 】
飼育管理していますので
勝手に猿に餌を与えないよう願います
27デフォルトの名無しさん:2012/11/08(木) 01:30:50.60
猿が餌を欲しがっています。
>>24に餌を上げていいですか?
毒餌さですがwwww
28デフォルトの名無しさん:2012/11/08(木) 09:03:12.64
オブジェクト指向の適切な使い方を知らないで使いまくっているアホを見ると
元からオブジェクト指向を知らないプログラマの方が
安心して仕事を任せられるから不思議
29デフォルトの名無しさん:2012/11/08(木) 14:08:55.01
以前にObjectにNothingの代入が必要か不要かで議論になったけど
Terminateイベントを早めに起こすという理由のためにNothingを入れてる先生がいるけど
あれって正論なのかな?

http://jeanne.wankuma.com/tips/vb6/directory/delete.html
30デフォルトの名無しさん:2012/11/08(木) 17:07:25.86
「不要になった時点」と関数の最後の間にコードがなければ
そのコードを実行する前に開放してくれるんだから効果はあると思う。
冗長にはなりそうだが。
31デフォルトの名無しさん:2012/11/08(木) 19:46:08.48
>>29>>30
一つのモジュールにダラダラとクソ長いコードを書く初心者がVB6使いには
多いので、使い終わった時点でNothingしとけよっていう教え方は
     せ ざ る を 得 な い
ところだと思う。
32デフォルトの名無しさん:2012/11/08(木) 20:40:32.29
>>29
VB6とVB.NETを混同してるでしょw
VB6の場合は議論の余地はない
33デフォルトの名無しさん:2012/11/08(木) 21:01:16.69
馬鹿が構築したオブジェクトと、継承にはうんざり
34デフォルトの名無しさん:2012/11/08(木) 21:37:07.25
>>33
VB6までに継承なんてあったっけ?
35デフォルトの名無しさん:2012/11/08(木) 21:51:14.24
"有る" と言って、お前は納得するのか ?w
36デフォルトの名無しさん:2012/11/08(木) 21:57:50.50
>>32
いや、その先生はVB6でNothingの早期代入を推奨してるんだが???
.Netはガーページコレクションに任せればいい(任せなければならない)ので
議論の余地がないのは分かるけどね。
37デフォルトの名無しさん:2012/11/08(木) 21:58:43.97
>>34
実装継承は無いがインタフェース継承はある。俗に言うテンプレートみたいなやつ。
3834:2012/11/08(木) 22:23:33.85
>>37
そか。あれも継承っていうんだ。さんくす。
39デフォルトの名無しさん:2012/11/08(木) 22:31:06.76
継承は良くない
40デフォルトの名無しさん:2012/11/08(木) 22:33:16.73
君が理解できないからか?
41デフォルトの名無しさん:2012/11/08(木) 22:34:07.39
継承を安易に使う奴に警鐘を鳴らせ
42デフォルトの名無しさん:2012/11/08(木) 22:50:03.81
馬鹿なのは羹にこりて膾を吹く奴。
さらに馬鹿なのは、羹が何か理解できないくせに羹に懲りてる奴w
43デフォルトの名無しさん:2012/11/08(木) 22:55:59.26
失敗すらできない臆病チキンの輩が何か言ってら
44デフォルトの名無しさん:2012/11/08(木) 22:57:44.31
我家のなますはたこ入りでした。
45デフォルトの名無しさん:2012/11/09(金) 01:28:53.69
>>29
今更の話題。とっくに答えは出てるね。

そのコメントだけじゃ判断できなくて、
Nothingを代入する意味が正しくわかっているなら、
Terminateイベントを早めに起こすというのは間違いじゃない。

だけどよくある勘違い、つまりNothingを代入した時点で
Terminalイベントが発生すると思っているのであれば間違い。
Nothingの代入は、Terminalイベントを発生させる命令ではない。

Newしたオブジェクトは、複数の変数に代入することで
複数の変数からオブジェクトを参照することが出来る。
Terminalイベントが発生するのは、どこからも参照されなくなった時。

時間がかかる処理の前に(Nothingを代入することで)どこからも参照されなくなれば
早く開放される。それが目的なら使わなくなったときにNothingを代入するのは意味がある。
(あと循環参照を断ち切ったりグローバル変数を開放するためにNothingを代入することもある)

スコープが終わるタイミング(変数がなくなるのでNothingをするのと同等になる)で
参照を破棄されるのが問題ないのであればわざわざNothingを代入する必要はない。
46デフォルトの名無しさん:2012/11/09(金) 09:15:20.92
>Newしたオブジェクトは、複数の変数に代入することで
>複数の変数からオブジェクトを参照することが出来る。

詭弁だな。

あたかもNEWしたオブジェクトを別の変数に入れる事で
別の用途に同時使用できるかのような書き方だ。
初心者はこういう語学に問題のある筆者の本を読んで間違いに走る。
後で修正するのは我々なんだよな。
47デフォルトの名無しさん:2012/11/09(金) 09:18:36.38
>>46
オブジェクトを使用する場合、特に初心者に向けての忠告であれば
宣言1回、SET1回で終わるのが大抵なのだから
あえて複数SETで多参照とか前提にして
簡単な事をあえて難しく見せることに意味はないよね。
単に天邪鬼って事でFA?
48デフォルトの名無しさん:2012/11/09(金) 09:20:05.66
たぶんあの時ドヤ顔でNothing不要論を唱えてた輩でしょ?
今頃まともなツッコミが入ったので慌ててるんでしょう。
触らぬアホに祟り無しといいます。
49デフォルトの名無しさん:2012/11/09(金) 09:23:24.65
>今更の話題。とっくに答えは出てるね

答えが出てなかったから、今頃慌てて補足しているくせにwww
50デフォルトの名無しさん:2012/11/09(金) 09:27:37.49
この例なんか見ると執拗なほどにNothingを代入しているね。
http://jeanne.wankuma.com/tips/vb6/directory/getfilesystementries.html



どうやら、Objectは不要になった段階でNothingを代入する派に軍配が上がったね。
51デフォルトの名無しさん:2012/11/09(金) 10:05:59.84
>>50のサンプルコードだけで一つのプロシージャならわざわざNothingしなくてもという気がするのだが
52デフォルトの名無しさん:2012/11/09(金) 10:19:17.78
>>51
気になったんで、その執筆者 「 不要になった時点で参照を解放する (Terminate イベントを早めに起こす)」
について、連絡をするフォームから問い合わせていた件で回答が来た。

要約すると、VB6の場合でもオブジェクトが使い終わった時にどこからも参照されない事を明確にする意味で
Nothingを代入するように心がけた方が良いとのお話。実際に早期にNothingを代入した場合とそうでない場合とで
VB Decompiler でコードを追いかけてみたところ、明らかにリソースの解放タイミングが早期に行われるようになっていた。
ロジック的にはNothingを代入しようとしまいが関係はないが、システムリソースに気を配った優しい設計を
心がけるように自分はしているとの事でした。僕も見習っておうしようと思います。
53デフォルトの名無しさん:2012/11/09(金) 10:21:42.54
結局、Nothing代入不要論者は優しくない女にもモテないブサイク君って事か?
だから魔界の仮面弁士たる彼はオペラ座の怪人みたく仮面をかぶってるわけな。
54デフォルトの名無しさん:2012/11/09(金) 10:26:47.21
>>53
魔界の仮面弁士さんのVB6スキルは半端なく凄いけど
あの人って一体どんな仕事してるんだろうね。
5551:2012/11/09(金) 10:29:03.15
>>52
なるほどなぁ。納得。
新規の仕事になら適用してもいいかな。
改修の仕事でそれをやるとソースコードレビューで他とやり方が違うとか叩かれて
元に戻されるのがオチだろうし。
56デフォルトの名無しさん:2012/11/09(金) 11:35:51.29
>>55
>ソースコードレビューで他とやり方が違うとか叩かれて

そんな目を皿のようにしてソースを見て叩くクライアントがいるのか?
客選べよw
57デフォルトの名無しさん:2012/11/09(金) 11:43:24.41
つまり、mallocしたものはfreeしろと。
malloc/free論争。
58デフォルトの名無しさん:2012/11/09(金) 11:43:30.97
>>52
単純に終焉処理を先に行っておけということでしょ?
http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/instance_02.html

参照回数がどうたらこうたらとトンチンカンな事をのたわまるアホがいるから複雑なだけで
単純にオブジェクトのデストラクタ処理を前倒しで行っておけば
プロシージャ―~出る時にデストラクタのラッシュを回避できるって事だろう。
平たく言えば、フォームを閉じるときになかなか閉じないキレの悪いソフトでなく
スパッと終了するソフトを作るような心がけって事だろうな。
59デフォルトの名無しさん:2012/11/09(金) 12:54:12.63
まあ、関数内でnewしたFSOの変数にNothingを代入するのはやりすぎだわな。
何かの強迫観念か。
60デフォルトの名無しさん:2012/11/09(金) 12:59:43.53
FSOとて例外ではなかろう
61デフォルトの名無しさん:2012/11/09(金) 13:01:04.83
.netのプログラムでもNothingを代入してるのをたまに見かけるけど、アレって一体???
62デフォルトの名無しさん:2012/11/09(金) 13:06:06.57
アピールじゃないかな
63デフォルトの名無しさん:2012/11/09(金) 13:18:49.75
>>45
>どこからも参照されなくなれば早く開放される。

おまい、オブジェクトと共有DLLをごっちゃにしてないか?頭大丈夫か?
64デフォルトの名無しさん:2012/11/09(金) 13:23:12.40
>>59
Nothingの代入がその関数の一番最後に配置するのだったらやり過ぎという感はあるけど
他はNothingを代入しているのにそこだけ代入していなかったら
コーディングミスだと思われても仕方ないだろう。
あるいはコメントに、「ここは関数の最後なのでNothingを代入しても意味が無いので代入しません」
とでも書くか?
65デフォルトの名無しさん:2012/11/09(金) 15:23:57.69
使い終わったらNothingを代入するという社内コーディング規則を決めたのなら徹底すべき。
66デフォルトの名無しさん:2012/11/09(金) 15:29:00.69
>>64
君って、mainの最後でfreeする派?
67デフォルトの名無しさん:2012/11/09(金) 15:41:32.12
Nothing代入しろ派の人達は、C++のスマートポインタなんか気持ち悪くて使えないでしょうね。
68デフォルトの名無しさん:2012/11/09(金) 15:48:13.84
Nothing代入しろって奴は、当然
string_value = vbNullString
variant_value = Empty
もやってんだろうな?
69デフォルトの名無しさん:2012/11/09(金) 15:50:53.68
>>68
その発想はなかったわ
70デフォルトの名無しさん:2012/11/09(金) 16:30:05.75
>>68
.net 小僧は i = Nothing とかやってそうで恐いわwww
71デフォルトの名無しさん:2012/11/09(金) 16:30:48.66
>>68
次元が違うだろ
精神病?
72デフォルトの名無しさん:2012/11/09(金) 16:31:48.57
mainの最後でfreeとかC++のスマートポインタとか引用する奴はたぶん病気。
空気脳病。
73デフォルトの名無しさん:2012/11/09(金) 16:32:23.95
ここには魔界の仮面弁士はいないの?
74デフォルトの名無しさん:2012/11/09(金) 16:51:06.32
>>72
freeはともかく、smart pointerはわかるよ。
nothing代入派は、生ポつかって早くdeleteしたいんだろ?
75デフォルトの名無しさん:2012/11/09(金) 16:57:37.70
「Nothingを代入するのはお作法です」←思考停止
76デフォルトの名無しさん:2012/11/09(金) 16:58:33.27
>>68
メモリ解放と関係なくね?
77デフォルトの名無しさん:2012/11/09(金) 17:03:57.46
>>76
StringやVariantに値を代入したら、メモリが確保されるのだが。
78デフォルトの名無しさん:2012/11/09(金) 17:09:55.36
mk:@MSITStore:C:\Program%20Files\Microsoft%20Visual%20Studio\MSDN98\98VS\1041\vbenlr98.chm::/HTML/vadatvariant.htm

Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の変数を示します。
Empty 値を含むバリアント型の変数は、数値データと共に使われるときは 0、文字列データと共に使われるときは長さ 0 の文字列 ("") として扱われます。

Empty 値をNull 値と混同しないでください。Null 値は、バリアント型変数に有効なデータが意図的に格納されていないことを示します。
79デフォルトの名無しさん:2012/11/09(金) 17:12:22.11
>>74
生ポとか関係のない話題を引き合いに出してまで

自分の意見を通そうとするかふつう?
80デフォルトの名無しさん:2012/11/09(金) 17:14:40.52
Sub Foo(x As integer, y As integer)
 x = 5 ' コードは、
     ' Main のローカル変数である z を
  y = 6 ' x と y の 2 とおりの名前で参照します。
End Sub
Sub Main
  Dim z As integer
  Foo z,z
End Sub
81デフォルトの名無しさん:2012/11/09(金) 17:17:26.57
>>78
何を言いたいのかわからないが、Emptyを代入すればVariantに代入されていたものが解放される。
vbNullを代入すると、「vbNull」という値が代入され、その分のメモリが使われる。

>>79
生ポ=生のポインタ
82デフォルトの名無しさん:2012/11/09(金) 17:27:12.73
まあそういうのどうでもいいよ。
それより、以前のスレでNothingを代入しないとメモリリーク起こすと言ってた奴はどこいったんだ?
早く根拠示してくれよ。
83デフォルトの名無しさん:2012/11/09(金) 17:30:37.66
気になってググったら、一番上にヒットしてたやつにこんな書き込みが。

> 魔界の仮面弁士 2004/05/29(土) 14:33:26
> Nothingすればリークしない、という物でもありませんし、逆に
> Nothingしなければリークする、というわけでもありません。

魔界の仮面弁士というのはこいつかwww
84デフォルトの名無しさん:2012/11/09(金) 17:38:37.24
VB6でサーバアプリ作るんなら、念のためNothingを代入してやってもいいって感じ
85デフォルトの名無しさん:2012/11/09(金) 18:05:23.85
Nothingを代入しないのは時間で微分した場合は一種のメモリーリークだろ?
単位次元をかえてみろっつーの。物理が分からんプログラマーは話していて疲れる。
86デフォルトの名無しさん:2012/11/09(金) 18:06:44.61
>>85
それだとオブジェクトをSetすること自体がメモリーリークになってしまうけど?
87デフォルトの名無しさん:2012/11/09(金) 18:07:56.24
>>83
>魔界の仮面弁士というのはこいつかwww

少なくともオマエよりはデキル感じが汁!
88デフォルトの名無しさん:2012/11/09(金) 18:23:49.30
まあNothingして早めにメモリを解放して、リソースの無駄遣いにならないように
するのはわかったが、ダラダラと糞長いプロシージャを書かなければいいって
事だよな。適切に機能ごとにプロシージャに分けて、スコープ最小になるように。
89デフォルトの名無しさん:2012/11/09(金) 18:44:17.12
>>88
そんな事は百も承知だけど、無理な納期設定で
じっくり考える時間もない中で仕上げなければならない現実。
もうかれこれ5年やってるけど、いままで自分が満足するものを作ったことがない。
納期を無視すればいくらでも自己満足なコードは書けるだろうな。
プログラミングを趣味でやれる人たちと俺とでは生きてるステージが違うのかも。
90デフォルトの名無しさん:2012/11/09(金) 19:16:47.92
仕事も趣味もプログラミングだから頭がヤバい
91デフォルトの名無しさん:2012/11/09(金) 19:47:44.47
重箱の隅を突っつくヤツはVB6の作法に合わないから反省しろよ
92デフォルトの名無しさん:2012/11/09(金) 21:00:55.13
重箱じゃないから騒がれる。ダンボール箱に住む浮浪者に暴力を振るうって感じ。
93デフォルトの名無しさん:2012/11/10(土) 08:41:31.43
>>47
> オブジェクトを使用する場合、特に初心者に向けての忠告であれば
> 宣言1回、SET1回で終わるのが大抵なのだから
> あえて複数SETで多参照とか前提にして
> 簡単な事をあえて難しく見せることに意味はないよね。

関数を使わない初心者?
さすがにそんな初心者は想定してなかったなw

VBの構文忘れたから適当に書くけど

sub func1
 Dim a As Cls
 c = new Cls
 func2(c)
 set c = Nothing '最後の参照がなくなった時点でTerminateが発生する
end sub

sub func2(c)
 func3(c)
 set c = Nothing ' Nothing代入してもTerminateは発生しない
end sub

sub func3(c)
 func4(c)
 set c = Nothing ' Nothing代入してもTerminateは発生しない
end sub
94デフォルトの名無しさん:2012/11/10(土) 08:47:36.45
>>66
> 君って、mainの最後でfreeする派?
mainとfreeは話が違うだろ。

Nothingを代入する行為は
”全く意味が無い”ことが多いってこと。

関数の最後の直前にNothing入れたって意味ないよ。
閉じるのを早くするためにNothingを早くすると言っている人がいるが、
それをしたいのであればグローバル変数を使わなくするだけでいい。

そうすれば、「一つの関数」の中で中盤に開放されるか
後半に開放されるかの違いでしかないだろ。
95デフォルトの名無しさん:2012/11/10(土) 08:50:31.59
Nothingを代入 = スコープが抜けて自動的に変数削除(GC)

スコープを小さくしておけば、
どっちみちスコープが終わった時に
自動的にNothing代入されるよ。

だからこれ(自動的なNothing代入)も
Nothing代入の一つと考えればいい。

ということで俺はNothing代入を書かずに
スコープを小さくして自動的なNothing代入に任せる派
96デフォルトの名無しさん:2012/11/10(土) 08:51:47.27
>>89
自分の技術力の無さを
納期のせいにするな。
97デフォルトの名無しさん:2012/11/10(土) 09:09:37.88
>スコープを小さくして自動的なNothing代入に任せる派

必ずしも踏襲できんだろうが。出来ないケースの方が圧倒的に多いだろうし。氏ねアホ。
98デフォルトの名無しさん:2012/11/10(土) 09:13:15.72
>>96
技術力と任される仕事の納期とどんな関係があるとでも?
これだからアマチュアプログラマは困る。
先日3日で図書館のライブラリ管理システムを構築しろと言われたわ。
プログラム組むだけならまだしもDB設計やLAN構築まで3日以内に完了せよだとか。
これ、アシスタント女性一名でやれっつーんだから。うちの会社は。
99デフォルトの名無しさん:2012/11/10(土) 09:14:49.83
>>93
VBの構文忘れたという前置きがあねれば
どんだけ未熟なVBプログラマ化と小一時間バカにするところだった。
良かったな。
100デフォルトの名無しさん:2012/11/10(土) 09:19:50.62
>>98
そんな会社に居なきゃいけないってことは技術力が無いってことだね。
101デフォルトの名無しさん:2012/11/10(土) 09:20:41.60
>>93は上級者に間違いない。
文法を忘れたと油断させて、罠を仕掛けている。
102デフォルトの名無しさん:2012/11/10(土) 09:38:20.33
>>101は何の罠に気がついたの?
103デフォルトの名無しさん:2012/11/10(土) 09:39:55.06
>>98
だから関係ないでしょ?

お前の会社なら技術力がある人のところにも
同じような司令が下るでしょ?
104デフォルトの名無しさん:2012/11/10(土) 09:43:03.85
>>97
> 必ずしも踏襲できんだろうが。出来ないケースの方が圧倒的に多いだろうし。氏ねアホ。

えっと関数は一画面で見れる程度の行数にするのが普通ですよね?

目指すべき所が間違ってる。
長い関数を見た時、やるべきことはNothing代入とかいう
小手先の技術ではなく、関数を小さくすることだ。

Nothingを代入して置かなければ不安というのは、
関数が長いという問題の兆候かもしれんな。
105デフォルトの名無しさん:2012/11/10(土) 10:07:53.19
>>104
>えっと関数は一画面で見れる程度の行数にするのが普通ですよね?

そんな常識論はないよ。解像度によって画面に表示できる行数は違うし。
俺はモニターを縦にして3台並べてコーディングしているが、
一面内に収まらない関数の方が圧倒的に多い。
医療のCT映像処理で縦に撮影した数百枚の画像を
横から輪切りにしたイメージに変換してDICOM化するなんてことを
一週間納期で任される事もあるが、普通のプログラマなら一生涯かけても無理な事を
短期間にやり遂げる俺にとっては関数の行数なんて論旨に足らん話に過ぎない。
106デフォルトの名無しさん:2012/11/10(土) 10:09:31.16
>長い関数を見た時、やるべきことはNothing代入とかいう
>小手先の技術ではなく、関数を小さくすることだ。

短い関数でもNothingは代入した方がいいのでは?
Terminateイベントを侮るなかれ!
107デフォルトの名無しさん:2012/11/10(土) 10:10:03.55
>>102
その罠に気づけない己の未熟さを知れ
108デフォルトの名無しさん:2012/11/10(土) 10:28:59.80
>>106
だから代入してるよ。
関数の最後に自動的にNothingが代入される。
109デフォルトの名無しさん:2012/11/10(土) 10:30:30.94
>>108
だからその自動で代入されるNothingが罠なんでしょ?
自分で明示的に代入したNothingと暗黙のスコープエスケープ時のNothing代入。
割り当てられるコード量に3倍ちょいの違いがあるって話ではなかったのかい?
110デフォルトの名無しさん:2012/11/10(土) 10:32:14.28
明示的代入: アーリーバインド(アクセスするメモリーの範囲がローカルチック)
暗黙の代入: レイトバインド(なぜかマーシャリングが発生する)
111デフォルトの名無しさん:2012/11/10(土) 10:34:49.54
>>110
暗黙の代入だと、対象がどんなタイプのオブジェクトかわからないので最大公約数で処理する。
この場合、最大と認定されるのはなんとOLEDB。FSOを暗黙でNothing代入しても
システムはOLEDBでも扱えるルーティンで対応するとか馬鹿仕様にも程がある。
112デフォルトの名無しさん:2012/11/10(土) 11:11:35.09
VB6ってもう完全に終わった言語かと思ってたのに
Nothing一つでここまで深い事実があってそれを語ることができる人たちが生き残ってることに驚いた。
もっと驚かせてくれ。
113デフォルトの名無しさん:2012/11/10(土) 11:19:30.76
.Netの最大の欠点
それは外部DLLを参照する都度アンマネージドのメモリー領域へのマーシャリングが発生すること。
.Netアプリが最大の利点を得られるのはアセンブリしか使わない完全マネージドの閉じた環境のみ。
多くのアプリではこれを踏襲できるから無問題かも知れないが、そうでないアプリは今でもVB6を使っているよ。
114デフォルトの名無しさん:2012/11/10(土) 11:21:11.30
>>109
> だからその自動で代入されるNothingが罠なんでしょ?
なにが罠なの?

関数を抜けたら変数はなくなって
グローバル変数は関数を抜けても値はそのままってだけだよね?
115デフォルトの名無しさん:2012/11/10(土) 11:22:48.57
見かけの振る舞いを内部の動きとイコールに考えてる初心者が少なくない事がわかった。
116デフォルトの名無しさん:2012/11/10(土) 11:25:03.69
>>111
なんでOLEDBがでてくるのかわからん。


変数があってその変数がなくなる(=同時にNothing代入される)
そのタイミングでVBはオブジェクトに参照してる人が一人減ったと通知する。
ここまでがVBの仕事なんだが。

その後の仕事はどっちも同じだよ。
オブジェクトはどこからも参照されなくなったと知ることができるから
終了処理をオブジェクトが行う。
117デフォルトの名無しさん:2012/11/10(土) 11:37:03.54
OLEDBはSP6からだな
118デフォルトの名無しさん:2012/11/10(土) 11:39:21.98
>>116
一人減る時の減り方まで考えがおよばないみたいね。十代かな?
リストラを考えてみよう。
ある人は黙っていなくなるが、ある人はジタバタ騒いで訴訟問題にまで発展させて減る。
外見からは同じように一人減っているが内情は大きく異なるって事。
119デフォルトの名無しさん:2012/11/10(土) 11:50:54.89
>>118
理解してないようだから(だから変な喩えを言うのかな?w)
もう一度書いておくね。

終了処理自体はオブジェクト自身が行うから
正しく終了処理は行える。

VBはオブジェクトに対して使っているか使っていないかを
通知するだけでいい。
120デフォルトの名無しさん:2012/11/10(土) 11:53:05.75
どちらも正しく処理してるんだけどね。
通知と処理、この違いが同じだと思ってるのね。
アサハカ
121デフォルトの名無しさん:2012/11/10(土) 11:55:14.00
明示的なNothing代入時: フラグが立つだけ。スコープから出るときに1回の処理でOK。
暗黙のNothing導入時:  オブジェクトの数だけ開放処理が行われる。
122デフォルトの名無しさん:2012/11/10(土) 11:56:30.64
>終了処理自体はオブジェクト自身が行うから

いや、間違ってるだろ?呼び出し側の処理が殆どでは?
123デフォルトの名無しさん:2012/11/10(土) 11:57:18.42
やっぱりこいつ意味わからんw

SetによるNothingの代入と
変数がスコープから消える=Nothingの代入

はどっちも同じでオブジェクトに対して
参照のデクリメントを ”通知” してる。

その後の ”終了処理” はオブジェクト自身が
参照カウンタが0になった時に行うものでどちらも同じ。

俺は明らかに通知と処理を区別して
書きましたよw
124デフォルトの名無しさん:2012/11/10(土) 11:59:00.82
>どっちも同じでオブジェクトに対して
>参照のデクリメントを ”通知” してる。

やっと癌細胞を摘出できましたよ。苦労しました。
125デフォルトの名無しさん:2012/11/10(土) 11:59:51.96
初心者VB6プログラマならその理解で十分だろ?癌は言い杉。
126デフォルトの名無しさん:2012/11/10(土) 12:00:14.17
>>122
終了処理っていうのは、オブジェクト内部の終了処理だぞ。
オブジェク自身以外の誰が、オブジェクト内部の事を知ってると言うんだ?

>>124
感想を述べるだけで言い返せないのは、負けだって聞きましたw
127デフォルトの名無しさん:2012/11/10(土) 12:00:53.06
参照カウンタが0とか・・・。たぶん共有DLLと勘違いしてる。
でもそういう時期があっても人生、いいと思ふ。
128デフォルトの名無しさん:2012/11/10(土) 12:02:03.13
>終了処理っていうのは、オブジェクト内部の終了処理だぞ。

みかけはそうだが実際のコード進行は全然番うよ?
VB Decopilerで見てみれば分かる。
129デフォルトの名無しさん:2012/11/10(土) 12:04:08.19
とりあえず単芝使いはそれだけで頭悪い
130デフォルトの名無しさん:2012/11/10(土) 12:07:40.02
Nothigの代入が参照カウンタのデクリメントを通知しているってことは、
例えばこんなコードで証明できます。

Sub Hoge
 Dim cls1 As ClassA
 Dim cls2 As ClassA

 Debug.print 1
 Set cls1 = New ClassA  'ここでClassAのInitializeが呼び出される
 Debug.print 2
 Set cls2 = cls1      'ここは何も表示されない
 Debug.print 3

 Set cls1 = Nothing    'なにも表示されません
 
End Sub
         '関数が終わったらcls2がなくなる=Nothing代入と同じなので
         'ClassAのTerminalが呼ばれます。


[ClassA]
Private Sub ClassA_Initialize()
 Debug.print "Initialize"
 '初期化処理
End Sub
Private Sub ClassA_Terminate()
 Debug.print "Terminate"
 '終了処理
End Sub
131デフォルトの名無しさん:2012/11/10(土) 12:10:59.13
Set cls2 = cls1みたいな事を実際のコーディングでやるかっつーの?
意味の無い比喩。何が面白いのか?煙に巻いて逃げる気か?
132デフォルトの名無しさん:2012/11/10(土) 12:11:46.28
>>105
いや、俺も関数は1画面内に収まるようっていう指導のもと、今がある。
今では長い関数みかけたらダサく思えるようになった。

まあ、俺も全てが1画面に収まるわけではないけど、
少なくとも2画面には収まる。

関心の分離ってわかるか?

糞長い関数を書く人が多いのもVB6スレの特徴。
133デフォルトの名無しさん:2012/11/10(土) 12:11:52.75
VB6の内部処理の話までくると、日本で話してる人は少ないからねぇ。

参照カウンタと言えばCOMが持ってるインターフェースAddRef()とRelease()の話になる。

これは以下でも述べられてるようにSetで参照が増えた時にAddRef()が呼ばれ
Nothingを代入した時(スコープから外れた時に行われる暗黙のNothing男優でも同じ)に
Release()が呼ばれる。そしてCOMオブジェクトは内部のカウンタが0になった時に
自分自身の終了処理を行う。

http://stackoverflow.com/questions/7189196/addref-in-vb6

I'm fairly sure that VB6 doesn't support directly accessing the
IUnknown methods. But the workaround is simple. Add this declaration to a Module:

Dim ReferenceHolder As Variant

And then get AddRef() to get called with a simple assignment

Set ReferenceHolder = someObject

Reversely, get Release() to get called with

Set ReferenceHolder = Nothing
This is normal VB6 memory management at work.
134デフォルトの名無しさん:2012/11/10(土) 12:12:08.13
自分の発言内で自己破綻してるな

>デクリメントを通知
その言い分だとデクリメント毎にClassAに何らかの通知が行ってる証明にならないだろ
全体を見る脳がなさそうだ
135デフォルトの名無しさん:2012/11/10(土) 12:13:52.51
フィールド変数をグローバル変数という奴がいるのもVB6スレの特徴。
136デフォルトの名無しさん:2012/11/10(土) 12:14:33.72
>>134
何かの通知が行われていることは
COMSpyを使えばわかるよ。

SetによるNothing代入でも変数のスコープが外れた時の
暗黙のNothing代入でも、同じようにReleaseが呼ばれてる。
137デフォルトの名無しさん:2012/11/10(土) 12:15:41.60
頭悪杉るのにも程があるな・・・

Sub Hoge
 Dim cls1 As ClassA
 Dim cls2 As ClassB

 Set cls1 = New ClassA
 Set cls2 = New ClassB
 Debug.print 1

 Set cls1 = Nothing     'ClassAのTerminalが呼ばれます。
 
End Sub
         '関数が終わったらcls2がなくなる=Nothing代入と同じなので
         'ClassBのTerminalが呼ばれます。


[ClassA]
Private Sub ClassA_Initialize()
 Debug.print "Terminate"
 '終了処理
End Sub
Private Sub ClassA_Terminate()
 Debug.print "Terminate"
 '終了処理
End Sub
138デフォルトの名無しさん:2012/11/10(土) 12:16:12.30
>>136
>>130のレスの中でそれを言えてないのに言えてる気分になってドヤ顔してるってこと。
139デフォルトの名無しさん:2012/11/10(土) 12:18:46.89
>>137

 Set cls1 = Nothing     'ClassAのTerminalが呼ばれます。

これってClassAのインスタンスへの参照カウンタが0になったからだね。

もし参照カウンタが0にならないときは
ClassAのTerminalは呼ばれないよ。

Nothingを代入しても、参照カウンタが0にならないときって
どんな時か思いつく?
140デフォルトの名無しさん:2012/11/10(土) 12:19:57.18
>>139
気安く質問してんじゃねーぞコラ。厚かましい初心者だわ。
141デフォルトの名無しさん:2012/11/10(土) 12:19:59.12
> Nothingを代入しても、参照カウンタが0にならないときって
> どんな時か思いつく?

それが>>130だろ?
142デフォルトの名無しさん:2012/11/10(土) 12:23:37.14
ということで、ここまでの例>>136>>130から
結論付けられることは、Nothing代入(暗黙のNothing代入含む)は
単純なTerminalイベント呼び出しではなく
参照カウンタのデクリメントを行ってるにすぎないということだ。

その結果(参照カウンタが0になった場合に)Terminalイベントが引き起こされる。

実際に行うことと、その結果発生することは
区別して考えた方がいい。
143デフォルトの名無しさん:2012/11/10(土) 12:24:35.96
やっと理解できたようだな。ヤレヤレ。
144デフォルトの名無しさん:2012/11/10(土) 12:26:22.13
だからとっくに答えは出てるってw

45 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/09(金) 01:28:53.69
>>29
今更の話題。とっくに答えは出てるね。

そのコメントだけじゃ判断できなくて、
Nothingを代入する意味が正しくわかっているなら、
Terminateイベントを早めに起こすというのは間違いじゃない。

だけどよくある勘違い、つまりNothingを代入した時点で
Terminalイベントが発生すると思っているのであれば間違い。
Nothingの代入は、Terminalイベントを発生させる命令ではない。

Newしたオブジェクトは、複数の変数に代入することで
複数の変数からオブジェクトを参照することが出来る。
Terminalイベントが発生するのは、どこからも参照されなくなった時。

時間がかかる処理の前に(Nothingを代入することで)どこからも参照されなくなれば
早く開放される。それが目的なら使わなくなったときにNothingを代入するのは意味がある。
(あと循環参照を断ち切ったりグローバル変数を開放するためにNothingを代入することもある)

スコープが終わるタイミング(変数がなくなるのでNothingをするのと同等になる)で
参照を破棄されるのが問題ないのであればわざわざNothingを代入する必要はない。
145デフォルトの名無しさん:2012/11/10(土) 12:27:07.43
バスターミナルじゃないんだから、Terminalイベントとか言うのをます止めろよ初心者君。
146デフォルトの名無しさん:2012/11/10(土) 12:27:36.31
100レスかかって
答えが出てる話題に戻っただけかw
147デフォルトの名無しさん:2012/11/10(土) 12:28:23.82
初心者Terminal君ときたらもうねwwwww

恥ずかしい人。
148デフォルトの名無しさん:2012/11/10(土) 12:29:22.65
低次元な話してるな
お前ら他の言語もやれ
そしたらGCの動きなんか常識過ぎてこんな話題出ること自体が恥ずかしいことだとわかる
149デフォルトの名無しさん:2012/11/10(土) 12:29:55.24
おっと上のをコピペしてたら移ってたwww
ま、Terminal君の話の内容に
反論してる人が消えたならそれでいいかなw
150デフォルトの名無しさん:2012/11/10(土) 12:31:09.33
自分を自分でTerminal君って呼ぶなよ。恥ずかしいだろ?
151デフォルトの名無しさん:2012/11/10(土) 12:31:50.56
反論は? もう終わり?
152デフォルトの名無しさん:2012/11/10(土) 12:32:07.70
○○君って呼ぶ人間て自分が古臭いって気付かないのかな
40〜50代だろどうみても…
153デフォルトの名無しさん:2012/11/10(土) 12:32:50.71
元から破滅してる論旨に論破は不要だろうよ?ターミナル。
154デフォルトの名無しさん:2012/11/10(土) 12:33:55.68
>>152
おそ松くんとか言いたいのかな?ターミナルは次元が低いな。
155デフォルトの名無しさん:2012/11/10(土) 12:35:31.43
?
156デフォルトの名無しさん:2012/11/10(土) 12:36:14.50
>>153
論破というのは、「論旨が破綻している」と
周りに認めさせる行為のことですよ。

論破しない(不要)というのなら
周りは誰も論旨が破綻しているとは
認めてくれません。
157デフォルトの名無しさん:2012/11/10(土) 12:36:45.68
でもその初心者は今後絶対にTerminateをTerminalと間違えないだろう。
これだけ公衆の面前で恥をかかされたのだからな。
彼の人生にとっては良い出来事であったに違いない。
良かったな。
158デフォルトの名無しさん:2012/11/10(土) 12:37:43.25
論破って>>45の内容にか?

言ってることが正しいのに、
いうことがあるわけ無いだろwww


こういう流れで良かったですか?
159デフォルトの名無しさん:2012/11/10(土) 12:38:33.63
>>156
それ以前にTerminalイベントなんてこの世に存在しないイベントを誰も認めてはいないよ?
160デフォルトの名無しさん:2012/11/10(土) 12:38:42.10
>>157

>>45の内容も忘れないでくださいねw
161デフォルトの名無しさん:2012/11/10(土) 12:39:51.67
>>158
>>45の内容は正しくないよ。

Terminalって単語の部分だけだけどな!


こういう流れで良かったですよw
162デフォルトの名無しさん:2012/11/10(土) 12:40:46.75
>>158
>論破って>>45の内容にか?

その内容にあるTeminalイベントの数を数えてみろ。論破以前に破綻してるだろ?
大丈夫か?専門学校生よ。
163デフォルトの名無しさん:2012/11/10(土) 12:41:18.38
どうやら間違いを認めて黙った人と、
ターミナルという揚げ足を取る人の
2つにわかれたようだ。
164デフォルトの名無しさん:2012/11/10(土) 12:42:25.34
>>162
破綻の内容をちゃんと書いてくれ。

お前の口から「Terminalというスペルミス」について
文句を言ってるんだって。聞きたいよ。
165デフォルトの名無しさん:2012/11/10(土) 12:43:07.30
166デフォルトの名無しさん:2012/11/10(土) 12:52:25.84
>>163
俺は単芝がきもいから最初から揚げ足取りに専念してたよ
どうやって全単芝野郎から生きる気を奪えるかにしか興味ないわ
16745:2012/11/10(土) 13:12:03.16
めし買いにって、なんて書いてあるか期待して
このスレを見た時の、残念感
168デフォルトの名無しさん:2012/11/10(土) 13:14:30.18
Sanba規制でアク禁止食らってた負け惜しみ。ばいばいサルさん。
169デフォルトの名無しさん:2012/11/10(土) 13:16:37.21
俺も今、セブンイレブンから398円の幕の内弁当を買って帰ったところだ。
別に500円の弁当でも良いのだが、「これで398円は安い!」と思うとつい買ってしまう。
金が貯まってしまって仕方ない。
170デフォルトの名無しさん:2012/11/10(土) 13:19:52.08
Sanba規制ってなに?
書き込み多すぎってやつのことなら

IPアドレス変えて違うブラウザから
やれば大丈夫でしたよ。

IPアドレスもクッキーも違うから
連投判定は難しいと思う。
171デフォルトの名無しさん:2012/11/10(土) 13:23:34.40
なんかIPアドレスとクッキだけがSanba規制の条件だと思ってる2ch初心者がいるね。
VB6初心者ぶりはよくわかったけど、何もここで2chの無知ぶりまで披露しなくてもいいのにね。
恥さらしもいいとこだわ。
172デフォルトの名無しさん:2012/11/10(土) 13:24:27.11
>>169
それだと500-398 =102円。一年間で37,230円しかたまらないじゃないか。

俺は別に5000円の弁当でもいいんだけど398円の弁当を買って
一年で約168万円も、金が溜まってしまって仕方ない。
173デフォルトの名無しさん:2012/11/10(土) 13:25:17.43
>>171
僕、2ちゃんねるのプロじゃないんでw

君とは違うよ。君は凄いね。いつも何してんの?
あ、プロかw
174デフォルトの名無しさん:2012/11/10(土) 13:31:48.18
VB6もプロじゃないだろ。その頭で金取ってたら詐欺だわ。
175デフォルトの名無しさん:2012/11/10(土) 13:32:58.43
>別に5000円の弁当でもいい

安倍のカツカレーを思い出したわ
176デフォルトの名無しさん:2012/11/10(土) 13:33:51.52
なんかこのスレらしい間抜けなやり取りだな。

ところで、VB6って以下の場合どうなるんだっけ。
下図のようにメインフォームがA、AがBをそれぞれ参照している場合を考える。
A、Bはそれぞれ他からは参照されていないとする。

メインフォーム ← A ← B

こうい場合、必ずしもAのTerminateでBへの参照を開放する必要はないんだっけ?
要するに聞きたいことは、メインフォームがAへの参照を開放した場合にA、Bが
リークするかどうかってことだけど。

っていうか俺はこの話が始まった時に、当然今書いたようなこと話題にしてるんだとばかり
思い込んでたんだけど、とんだ勘違いだったなw
177デフォルトの名無しさん:2012/11/10(土) 13:34:34.42
単芝うぜぇ
178デフォルトの名無しさん:2012/11/10(土) 13:36:22.82
当然、A、B間で循環参照がないという前提ね
17945:2012/11/10(土) 13:41:32.51
>>176
今までの話は、俺が>>45で言った
とっくに答えが出てる話をしていただけ

この前提は間違ってないのだから反論しないでくれ。意味が無い。
100レスかかって>>45にたどり着いたのがその証拠だろ。

それを理解しているのを前提として話をしたい。

君がその前提を理解してるのであれば話ができる。

だが、俺は今から出なきゃいかんw
帰ってくるまでに話が変わっていなければ
続きをしよう。
180デフォルトの名無しさん:2012/11/10(土) 13:46:52.73
100レスかかってたどり付いたのはTerminalイベントではなくてTerminateイベントだっけ学習した結果だけだろ。
幼稚園を早く卒園してこい。話はそれからだ。
181デフォルトの名無しさん:2012/11/10(土) 15:47:54.85
>>171
sanba とか言ってる奴が

> 2chの無知ぶりまで披露しなくてもいいのにね。

とか、ウケ狙いか?
182デフォルトの名無しさん:2012/11/10(土) 16:12:41.22
Terminate → Terminal よりマシじゃね?
183デフォルトの名無しさん:2012/11/10(土) 18:02:11.34
>>176
GCの気持ちになって考えろってこった
C++やってるなら参照カウント方式のスマートポインタの動作だ
184デフォルトの名無しさん:2012/11/10(土) 18:13:13.84
>>93
clsって予約語じゃなかったっけ?
185デフォルトの名無しさん:2012/11/10(土) 19:43:27.40
本当に物の分かっているやつの2、3のレスで片付く話がオレオレ解釈が入り乱れてここまで
カオス状態になる現象のほうがむしろ興味深い。 これはしばしば一般社会にも起こる現象だろう。
頭のいい人が社会科学的に究明していったらノーベル賞のひとつや二つ取れるやもしれんなw 
シェークスピア的に言うと、にちゃんねる劇場もいろんな役者が立ち現れては消える舞台ってとこか
カオス状態が必ずしも悪いというわけでもない。その混乱ぶりに我慢できず真打の役者が現れて詔を発する
事態に。すると、急にその場の喧騒が収まり演目は終焉を迎えるというわけだ。
その騒乱の中で出たがりの喜劇大根役者が他の役者の足を引っ張ったり奇声を発したり、
舞台を意味も無く走り回ったりする(本人的には主役のつもりだったりするのが滑稽ではあるがw)
のもいらん存在だがご愛嬌の内だろうw
186デフォルトの名無しさん:2012/11/10(土) 19:48:50.69
まあお前は頭悪いよ
187デフォルトの名無しさん:2012/11/10(土) 20:10:02.47
長文だしな。
188デフォルトの名無しさん:2012/11/10(土) 20:28:57.61
>>185
本質馬鹿だが小賢しいからノーベルやらシェークスピア等まで引っ張り出す。
お前の文章の一行目を引用すると
本当に物が解っている奴なら、お前の話も二・三行で片付く話だ。
189デフォルトの名無しさん:2012/11/10(土) 20:42:58.93
>>184
画面が消えそうな予感w
190デフォルトの名無しさん:2012/11/10(土) 20:55:12.50
>>189
一瞬「?」と思ったがああそうかと気づくことができた漏れはオッサン
191デフォルトの名無しさん:2012/11/10(土) 21:19:59.66
>>190
このDOS野郎がw 
192デフォルトの名無しさん:2012/11/10(土) 22:02:23.65
もっと前のMS BASICじゃないの
193デフォルトの名無しさん:2012/11/10(土) 23:01:48.62
>>192
何歳?Almost 還暦?
194デフォルトの名無しさん:2012/11/10(土) 23:35:37.02
普通に端末でclsって打ち間違えるからエスケープシーケンスで画面消去されるようにaliasしてる
195デフォルトの名無しさん:2012/11/11(日) 03:46:52.55
VB6にもClsメソッドは存在するんですけど・・・
196デフォルトの名無しさん:2012/11/11(日) 03:51:17.17
だから?
197>>45(ターミネーター):2012/11/11(日) 03:53:46.34
>>176
帰ってきたぞ。

フォームの場合はフォーム特有の問題がある。

まずフォームはクラスを拡張したものと考えていい。
だからフォームはクラスの性質をすべて持っているが
それに加えて変な性質が追加されている。

その話の前に先に>>176の答えから。
> 下図のようにメインフォームがA、AがBをそれぞれ参照している場合を考える。

Bを参照しているのが本当にAだけならば(ここ重要な所)
AのTerminateでBへの参照を解放する必要はない。


しかし、ここでフォーム特有の罠がある。(これは古いVBとの互換性維持のための仕様だろう)

まず確認しないといけないことは、フォームBを参照している変数はどこで定義(Dim)されているかということ。
それがちゃんとフォームAのクラス変数かローカル変数にあるのならおめでとう。
それはフォームAが消えた時に自動的に消える変数だ。

もしフォームAのどこにも定義されていないとしたら、それはグローバル変数だろう。
グローバル変数(スコープがアプリケーションスコープである変数のこと)から
参照されているのであれば当然アプリ終了まで参照は続く。

注意が必要なのが、フォームAを作るとDim FormA as New FormAというコードが
見えないところに作られるということ。FormAというクラスのFormAというグローバル変数が自動的にできる。
グローバル変数を定義したつもりはなくても勝手に作られるから注意。
このFormAというクラスとFormAという変数をごっちゃにしている人が結構多い。
Unload Meをしなければいけない場面でUnload FormAをしたり、その逆をしていたりする。
198>>45(ターミネーター):2012/11/11(日) 03:56:12.89
そしてもう一つ。フォームにはロード状態というものがあるということ。
ロード状態というのは「ウインドウ」が生成された状態と言い換えてもいい。
Windowsからそこにウインドウがあると認識できる状態。

ロード状態になると、グローバル変数のFormsコレクションに参照が勝手に追加される。
フォームBがロード状態にあるのなら、フォームAが消滅することで”フォームAが持つフォームBへの参照”が
なくなっても、別の所が参照しているから注意が必要。
ロード状態かつ非表示になってるフォームが残っていてアプリが終了しないと言ってる人もよくいる。


ロード状態からアンロード状態にするには、フォームを閉じるかUnload命令を使う必要がある。
逆にロード状態にするのは、Load命令と・・・ここがまた罠なんだが、フォームがもともと持っているプロパティと
そのフォームの中にあるコントロール、コントロールのプロパティを読み書きすると勝手にロード状態になる。
(自分でフォームに追加した変数であれば読み書きしてもロード状態にならない)

フォームをUnloadしたはいいが、そのあとでフォームのプロパティを参照してしまったり、
フォームのTerminateでフォームのプロパティを参照してしまい、
終了するつもりが勝手にロードされてしまって終了しないという罠にはまってる人もよくいる。


話をまとめると、本当にフォームAの変数だけからフォームBを
参照しているのであればクラスと同じような動きをする。スコープを抜けたr勝手に消えるしリークもしない。
だけどフォームは勝手に参照が追加されてしまう罠が多いから注意が必要ということ

この罠を理解せずに、「とりあえずNothing入れとけばなんとかる」と言ってる奴は、
「Nothingを入れても解放されないことがある。VBのバグだ」などとよく騒ぐ。
199デフォルトの名無しさん:2012/11/11(日) 03:57:33.60
mk:@MSITStore:C:\Program%20Files\Microsoft%20Visual%20Studio\MSDN98\98VS\1041\vbcon98.chm::/Html/vbconcodebasics.htm

フォームやコントロールを作成するときには、予約キーワードと同じ名前を付けることができます。たとえば、Loop という名前のコントロールを作成できます。
ただし、Visual Basic では、Loop という名前を使うと Loop キーワードと見なされてしまうので、通常の方法ではコードからこのコントロールを参照することはできません。たとえば、次のようなコードではエラーが発生します。

Loop.Visible = True ' エラーが発生します。

予約キーワードと同じ名前を持つフォームやコントロールを参照するには、名前の前に修飾子を付けるか、または角かっこ ([ ]) で囲む必要があります。たとえば、次のコードではエラーは発生しません。

MyForm.Loop.Visible = True ' 名前の前にフォーム名を付けます。
[Loop].Visible = True ' 角かっこを付けます。

前の例のように予約キーワードと角かっこが使えるのは、予約キーワードと同じ名前のフォームやコントロールを参照する場合です。
ただし、変数の宣言やプロシージャの名前には、角かっこを付けても、予約キーワードと同じ名前を使うことはできません。
角かっこは、ほかのタイプ ライブラリで定義されている予約キーワードと同じ名前を、Visual Basic で使用するときにも使います。
200デフォルトの名無しさん:2012/11/11(日) 03:59:09.21
予約キーワードをコントロールやフォームの名前にする利点が分からないのだが
201>>45(ターミネーター):2012/11/11(日) 04:00:04.01
>>176
最後に「要するに」の方への答え

> メインフォーム ← A ← B
>
> 要するに聞きたいことは、メインフォームがAへの参照を開放した場合にA、Bが
> リークするかどうかってことだけど。

メインフォームがAへの参照を開放した場合に、
A、Bはともに開放される。

ただし、罠によって違う場所に参照が残っていないならば。
あと>>178に書いてあるように循環参照がないという前提で話している。
202>>45(ターミネーター):2012/11/11(日) 04:02:48.21
>>200
> 予約キーワードをコントロールやフォームの名前にする利点が分からないのだが

俺の知らない時代の話だが、VBは昔クラスがなかった。
フォームもクラスではなく一つしか作れなかった。

つまり、Form1を作ったら、それはForm1という名前のインスタンスだった。
というかインスタンスという考えもなく、単にForm1を作った。という認識だった。

その頃のコードをそのまま動くようにしつつ、
クラスを導入してフォームもクラスの一種にするには
こうするしかなかったのではないだろうか?
203>>45(ターミネーター):2012/11/11(日) 04:03:38.80
おっとw

俺のレスに対する話じゃなかったw
>202は忘れてくれ。
204デフォルトの名無しさん:2012/11/11(日) 05:02:49.56
ターミネーターをNGにぶっこんだ
205デフォルトの名無しさん:2012/11/11(日) 05:47:14.16
>>199
これは知らなかったわ
206デフォルトの名無しさん:2012/11/11(日) 07:24:37.49
相互参照は開放されないって言えば済む事を長々と書き出すやつ()
207デフォルトの名無しさん:2012/11/11(日) 14:09:15.81
相互参照(循環参照)が開放されないってのは>>45ですでに指摘済み
参照カウンタ方式のGCでは他の言語でも一般的な話だから
ここはVBスレなわけで、今話してるのはVB特有の問題の話。
208デフォルトの名無しさん:2012/11/11(日) 14:43:54.85
相互参照をFormを例に必死に説明してただけでしょそれはVB特有の話じゃない
長文書いて気持ちよくなりたかっただけだよね?
209デフォルトの名無しさん:2012/11/11(日) 15:19:26.73
>>208
お前ちゃんと読んでないでしょw
相互参照の話はフォームの話の中にはどこにも出てきてないんだよ。

    フォームA → フォームB

フォームAがフォームBを参照しているだけのように見えて


    (見えないグローバル変数)
      ↓      ↓
    フォームA → フォームB

気づいていないグローバル変数が存在して
いつの間にかそこから参照されているって話なんだから。
どこにも「相互」な参照は存在しない。
210デフォルトの名無しさん:2012/11/11(日) 15:26:24.88
このあとのレスを想像

Q.なんだよ見えないグローバル変数ってわけわからん

A.だからVB特有の話だって言ってんだろ。
Form1フォームを作った時に勝手に作られるForm1変数とか
ロード時に登録されるFormsコレクションのことだよ。
これが他の言語にもある話か?相互参照の話か?
211デフォルトの名無しさん:2012/11/11(日) 17:09:02.83
>>197
やっぱりTerminate後にクラスのメンバ変数は自動的にNothingになるんだね。
まあある意味当然か。

あんまり関係ないが、VB.NET使ってると俺が時々やってしまうポカにWitheventsな
フィールドへのNothingの入れ忘れがある。

特にフォームでこれをやるとFormClosed後でも参照してるオブジェクトのイベントを拾ってしまって
既にハンドルが破棄されたコントロールを更新しようとして例外なんてことになるが、
VB6の場合はこれはないわけか。
212デフォルトの名無しさん:2012/11/11(日) 18:33:22.45
なんだデフォルトインスタンスの話しか
その話ならどっかで参照持ってるやつがいるならGCが回収しないのは一般論だし長文書く必要もないだろ
長文オナニー楽しいでしょ
213デフォルトの名無しさん:2012/11/11(日) 18:46:46.98
>>212
長文にならない方法で説明して欲しいw
少なくともお前の文章ではForm1のこともFormsのことも
分からない。
214デフォルトの名無しさん:2012/11/11(日) 21:00:01.39
フォームは、ロード状態と表示状態が別々にあるから気をつけろ。
フォームのプロパティに触れると勝手にロードされるから気をつけろ。
あとは、クラスと同じ注意が必要。

と言うだけでしょ。

Forms なんて、システムが勝手にやる話だから、説明してもしょうがない。
215デフォルトの名無しさん:2012/11/11(日) 21:29:45.86
>>214
それがNothingの話とどう関係があるんだ?

それが抜けてるだろ。
お前はフォームの話をしているに過ぎない。
216デフォルトの名無しさん:2012/11/11(日) 21:38:08.08
> あとは、クラスと同じ注意が必要。
217デフォルトの名無しさん:2012/11/11(日) 22:00:12.57
だからクラスには無い問題があって、
それがどうフォームのロードとつながるのかって
話をしないとダメだろ。

Formsもちゃんと説明しないと、だってそこに
参照ができるんだからさぁ。

元々の話わかってる?
フォームの話じゃなくて参照の話だよ。
218デフォルトの名無しさん:2012/11/11(日) 22:14:39.08
>>217
ダメだと思ってるのは君だけ。
219デフォルトの名無しさん:2012/11/11(日) 22:21:58.74
だめかどうじゃないくて
フォームとNothingの関連性が
説明されてないって言ってるんだが。
220デフォルトの名無しさん:2012/11/11(日) 22:26:34.28
Nothing の話は

> あとは、クラスと同じ注意が必要。

で充分だろ。

頭に血が上ってるのは判るけど、ちょっと冷静になれよ。
221デフォルトの名無しさん:2012/11/11(日) 22:42:30.83
まあ揚げ足取りしてる変な奴もどうかと思うが....

どちらの人も言ってないと思うけど、Formの特殊性は参照されてなくても
生存し続ける必要があるという機能的な要請から来てるんだよね。
222デフォルトの名無しさん:2012/11/11(日) 22:55:18.01
このスレの住人は絶対自分の意見を曲げないアスペだからしょうがなし
223デフォルトの名無しさん:2012/11/11(日) 23:25:55.74
>>220
クラスと違う部分の話は?
224デフォルトの名無しさん:2012/11/11(日) 23:33:57.04
>>223
不要でしょ。

必要だと思うなら、君が説明すればいい。
225デフォルトの名無しさん:2012/11/11(日) 23:37:33.12
>>224
すでに説明済みw
226デフォルトの名無しさん:2012/11/11(日) 23:53:31.51
すでに説明済みw
227デフォルトの名無しさん:2012/11/12(月) 00:04:23.94
本当に>>197-198で説明済みだったな。
228デフォルトの名無しさん:2012/11/12(月) 01:17:02.04
ぐぐればなんでも説明済みw
2度手間乙w
229デフォルトの名無しさん:2012/11/12(月) 01:18:15.58
ぐぐるまでもなく、このスレで説明済みだろw
230デフォルトの名無しさん:2012/11/12(月) 11:44:24.40
>>105
> 医療のCT映像処理で縦に撮影した数百枚の画像を
> 横から輪切りにしたイメージに変換してDICOM化するなんてことを
> 一週間納期で任される事もある

へー、それVB6でやってんだ。
231デフォルトの名無しさん:2012/11/12(月) 11:50:51.00
お前らほんと何回も何回も同じ議論ごっこして飽きないのな。
お前らが話してることなんかどうでもいいんだよ。
問題は、こういう主張してる奴がいるって事。

・Nothingを明示的に代入することと、スコープを外れたときの処理とでは内容が異なる
・Nothingを代入しないとメモリリークする

本当なら、根拠を示してくれよ。
232デフォルトの名無しさん:2012/11/12(月) 14:03:52.45
CやC++じゃあるまいし、オブジェクトを利用し終わったら取りあえずNothing入れとけとか...
Nothingキーワードの意味を調べとけって感じだな...
233デフォルトの名無しさん:2012/11/12(月) 14:18:14.37
>>230
VB6は医療系に強いよ。
無茶な納期要求、スカラー型を主に使えばネイティブCコンパイラ高速処理が可能だし
医療系OCXも充実している。
234デフォルトの名無しさん:2012/11/12(月) 14:22:34.91
>>231
人に聞かないで自分で試して論拠を提示しなよ。能無しの雑魚が。
235デフォルトの名無しさん:2012/11/12(月) 14:23:17.92
>>232
CでNothing代入とか言ってる貴様の空気脳にはマイッタヨ。
236デフォルトの名無しさん:2012/11/12(月) 14:25:50.07
>>235
ひどいアスペを見た
237デフォルトの名無しさん:2012/11/12(月) 14:28:56.90
>>235
C++とCを混同してるんだろ?ほうっておけ。バカが移るぜ?
238デフォルトの名無しさん:2012/11/12(月) 14:30:18.10
>>237
C++でも処理系を限定しないならNothingは関係ない。
純粋に言語仕様で物を考えられない初心者と
説明下手な長文さんの巣窟だねここは。
239デフォルトの名無しさん:2012/11/12(月) 14:41:21.92
ヤレヤレ ┐(´ー`)┌
240デフォルトの名無しさん:2012/11/12(月) 14:43:08.20
NothingはVB6にとどめておけよ。
Cキチガイまで参加してきたらオワルぞココ。
241デフォルトの名無しさん:2012/11/12(月) 14:51:26.88
まとめると、VB6でオブジェクトが不要になった時は
Terminateイベントを早期に発生させるためにNothingを導入するが正解なのね?
この結論のためにどんだけ無駄スレ消費してるのよ君ら?
そのエネルギーを仕事に使えばいいのに。
242デフォルトの名無しさん:2012/11/12(月) 16:53:44.24
>>241
> まとめると、VB6でオブジェクトが不要になった時は
> Terminateイベントを早期に発生させるためにNothingを導入するが正解なのね?

不正解
243デフォルトの名無しさん:2012/11/12(月) 16:56:50.38
ホントageてる奴って馬鹿ばっかだな
244デフォルトの名無しさん:2012/11/12(月) 17:00:16.12
ホントsageてる奴って暗い奴ばっかだな
245デフォルトの名無しさん:2012/11/12(月) 17:00:27.52
>>242
正解だろ?

アホかよ?
246デフォルトの名無しさん:2012/11/12(月) 17:03:19.67
難しい事は判らないが...たぶん不正解だろ
247デフォルトの名無しさん:2012/11/12(月) 17:16:48.85
>>245
また最初から繰り返すつもりか?

不正解だ馬鹿。
248デフォルトの名無しさん:2012/11/12(月) 17:17:14.98
真昼間からおまえらみんな暇人だな
249デフォルトの名無しさん:2012/11/12(月) 17:23:14.78
malloc/free論争でも、ど素人に近づくほどfree必要派が増えてくのと似た感じ
250デフォルトの名無しさん:2012/11/12(月) 17:23:34.41
オブジェクトが使ってるメモリを一刻も早く解放したけりゃNothingしておけばいいんでね?
251デフォルトの名無しさん:2012/11/12(月) 17:26:26.41
>>247
正解にしとけ。WEBサイトで堂々とアピールしている先生様の面子も考えてやれやwwwwww
252デフォルトの名無しさん:2012/11/12(月) 17:27:09.90
>>249
つ、mallocしたらfree必須だろうが?アホか貴様は?
253デフォルトの名無しさん:2012/11/12(月) 17:27:22.71
>>250
Nothingしてもメモリは解放されない
254デフォルトの名無しさん:2012/11/12(月) 17:32:13.91
Nothingして「ほかに参照がないなら」メモリは解放だっけ?
255デフォルトの名無しさん:2012/11/12(月) 17:34:13.38
Nothingしなければ参照ポインタが0になっても解放されない。
256デフォルトの名無しさん:2012/11/12(月) 17:35:20.22
参照ポインタが0になったら即座に解放してほしければNothingを代入しなければならない。
257デフォルトの名無しさん:2012/11/12(月) 17:42:38.05
>>255
質問!
それは、オブジェクトを返す関数を作ると、メモリがリークするって事か?
258デフォルトの名無しさん:2012/11/12(月) 17:49:43.86
>>257
なぜそういう疑問になるか意味不明。参照の意味わかってないのね?
259デフォルトの名無しさん:2012/11/12(月) 17:56:38.38
>>255
Nothingしなければ参照ポインタが0に(なった時点では)解放されない。
260デフォルトの名無しさん:2012/11/12(月) 17:59:27.94
Nothingしなければ参照ポインタが0になっているのならスコープを外れるときに解放される。

Nothingすれば参照ポインタが0になっているのならその時点で解放される。

参照ポインタが0になっていないのなら何をどうしようが解放されることはない。これがメモリーリークだ。
261デフォルトの名無しさん:2012/11/12(月) 18:34:50.03
>>252
> ずいぶん前、fj.comp.lang.c++で大規模なフレームがあった。malloc/freeについての論争である。
> mallocでメモリを確保した後にfreeをしなければならないのか、そうではないのかという、今でも
> 時々蒸し返される定番の話題だ。
>
> この当時、初心者にはmallocと対応させてfreeをすることを教えない方が良いとする意見が
> Guruたちの間では優勢であり、その中の一人にまつもとさんもいた。

http://handasse.blogspot.com/2008/06/mallocfree.html
262デフォルトの名無しさん:2012/11/12(月) 19:42:23.90
>>261
それってmallocで実際にメモリが確保されるタイミングが分からないからという事?
まだ確保されていないのにfreeしたらイカンという事なら
元々そういう確保ディレイが生じるシステムではfreeもディレイされるよう設計されているから問題無い。
逆にそうなっていないとしたらシステム側の問題であってプログラマに責任はない。
つ、そんなシステム、誰も相手にシンクなるから放っておけば淘汰される。
基本、mallocにfreeは絶対必要と考えていい。
263デフォルトの名無しさん:2012/11/12(月) 19:51:18.14
>>262
freeしたところで実際にはメモリをシステムに返さないから意味ないから書かなくていいという考え方みたい。
そもそも実装とコーディングは別次元の話なので、freeが不要だという考えは間違っている。
しかし間違えた方がエレガントに見えるので、問題が無いのであれば間違いを受け入れることを
あえて初心者にすすめる人もいる。

世の中で自分目線で正しい事が、必ずしも世の中に対する正義にはならないのと同じ。
264デフォルトの名無しさん:2012/11/12(月) 20:22:41.33
それって
A: 「私は私を眠らす」
B: 「私は眠る」
上では、Bの方がエレガント、みたいな話?
265デフォルトの名無しさん:2012/11/12(月) 20:41:39.91
グローバル変数・・・アプリが終了されるときに解放される
クラス変数・・・クラスがなくなるときに解放される
ローカル変数・・・関数が終了するときに解放される

・変数の生存時間

(短い)ローカル変数 < クラス変数 < グローバル変数(長い)

ようするにこういうこと。

ローカル変数の場合、変数の生存時間が短いことが多いわけだから
Nothingを代入する必要は殆ど無い。
もし代入した後ですぐに関数が終わるようならやる意味は無いと言い切って良い。

クラス変数の場合、変数の生存時間はローカル変数より長い。
だけど、クラス変数の場合はたいがいクラスが生きてる間は参照先を使う事が多い。
もしTerminateなんかでNothingを代入しているようならそれは意味が無い。
クラスは生きているが参照先が不要になった(ただしローカル変数ではない)って時だけ
Nothingを代入する必要がある。

アプリが終了するまで参照が消えない。これは長時間だが
そもそも、グローバル変数を使うときは、長時間何かのオブジェクトを使いたい時。
長時間使う必要がないのに、グローバル変数になっているのは設計がまずい

結局どのパターンも ”早く解放したいという理由で” 明示的にNothingを代入することはまずない。
266デフォルトの名無しさん:2012/11/12(月) 20:43:48.05
>>258
> Nothingしなければ参照ポインタが0になっても解放されない。
細かいようだが、この文では、Nothingしない限りメモリは解放されないと読める
267デフォルトの名無しさん:2012/11/12(月) 20:45:00.35
クラス変数よりローカル変数の方が生存期間が永いケースなんて山ほどある
268デフォルトの名無しさん:2012/11/12(月) 20:45:43.63
まーは不完全な理論展開か?また荒れるぞ!
269デフォルトの名無しさん:2012/11/12(月) 20:46:34.31
>もしTerminateなんかでNothingを代入しているようならそれは意味が無い。

正しいと言えるのはココだけかな?
270デフォルトの名無しさん:2012/11/12(月) 20:48:50.42
>>265>>267の立場が、まるで違うと言う事だけは、はっきり判るw
271デフォルトの名無しさん:2012/11/12(月) 20:49:02.59
誰にレスしたらいいかわからんから適当に。

C言語におけるmallocとfreeの話は
VBのNew、Nothingの話とは違う。
なぜならC言語にはGCがないからだ。

http://www.kouno.jp/home/c_faq/c7.html
> 7.24:
> プログラムが終了する前に、確保したメモリを解放しなければならな いか。
> A:
> その必要はない。まともなオペレーティングシステムならきっとプロ グラムが終了した時点で
> すべてのメモリを取り返すだろう。にもかか わらず、個人向けコンピュータ(PC)の中には
> メモリを取り戻すことが 確実にはできないものもあるようである。ANSI/ISO C規格から
> 結論つ けられることは、解放してくれるかどうかは「実装の品質がどれくら い高いかによる」ということだけである。

freeしなくてもいいという理由「まともなOSならOSがやってくれるから」であり、
GCが自動的にメモリ解放してくるからという理由ではない。
272デフォルトの名無しさん:2012/11/12(月) 20:49:10.13
>>269
Terminateイベントを早めに出すためにNothingの代入が必要だということは認めてるんじゃね?
あくまでTerminateイベントが出たからってメモリから解放されないと言いたいのでは?
あまり煽るとまたTerminalとか言ってきそうなので程々になwww
273デフォルトの名無しさん:2012/11/12(月) 20:49:38.18
>>267
> クラス変数よりローカル変数の方が生存期間が永いケースなんて山ほどある
ないだろw
274デフォルトの名無しさん:2012/11/12(月) 20:51:47.08
クラスに定義した変数よりも
クラスに定義した関数の中のローカル変数のほうが
生存時間が長い?

不思議なコードだなw
書いてみて。
275デフォルトの名無しさん:2012/11/12(月) 20:54:10.56
>>272
> あくまでTerminateイベントが出たからってメモリから解放されないと言いたいのでは?

Terminateイベントはメモリ解放の直前に発生するんだぞ。
Terminateイベント発生時はメモリ解放されてないの当たり前だし、
イベントが終了したらメモリは解放される。

そしてTerminateイベントが発生するタイミングは
誰からも参照されなくなった時。
276デフォルトの名無しさん:2012/11/12(月) 20:55:21.78
>>272
なるほど。

>>273
ほとんどないだろうがシステム側の定義が無い以上絶対にないとは言い切れないな。
たとえばローカル変数と言っておきながらシステム的にはスコ―プが外れても開放しない。
理由はまたプログラムがローカル変数を定義するかもしれないからそのままにしておくという。
CPUのレジスタを使うかメモリを使うかは処理系任せなのだし、コーディング上であれやこれや言っても
机上の空論におわりそうだな。
277デフォルトの名無しさん:2012/11/12(月) 20:56:32.93
GCを搭載している言語は
わざわざメモリ解放を手動でやったりしないよ。
それが答えじゃないか?
278デフォルトの名無しさん:2012/11/12(月) 20:58:04.99
> 理由はまたプログラムがローカル変数を定義するかもしれないからそのままにしておくという
ローカル変数は、関数が終わったら自動的に消える
(オブジェクトならNothingされる)って知ってますか?

どうやってそのままにするの?
ちょっと具体的にコード書いてみて。
279デフォルトの名無しさん:2012/11/12(月) 20:58:46.74
>>276は「ローカル変数」と「ローカル変数の参照先」の区別がついてないんだろうな。
280デフォルトの名無しさん:2012/11/12(月) 20:58:55.45
>>276
VB6という処理系に限定してもローカル変数の生存時間が非常に長い事がありますよ。
たとえば局所的にローカル変数を数百個定義した場合などがそれで
VB Decompilerで見るとなんとローカル変数を開放していないばかりかスタックにもなっていない。
そう、mallocで確保したメモリをローカル変数に使ってるのですよ!
こうなるともうfreeが要不要論にまで発展してしまい、それこそ収拾がつかなくなりますわ。
281デフォルトの名無しさん:2012/11/12(月) 20:59:44.16
>>280

だからローカル変数と、ローカル変数の参照先の
区別ぐらい付けられるようになれって。

アホ丸出し
282デフォルトの名無しさん:2012/11/12(月) 21:01:07.49
「ローカル変数の参照先」とかまーた屁理屈こねだしましたよ?
突っ込まれると色んな比喩を使ってくるから分かりやすい人ですね。ふふふ。
283デフォルトの名無しさん:2012/11/12(月) 21:01:19.02
>>280は値型と参照型って言葉も知らないの?
284デフォルトの名無しさん:2012/11/12(月) 21:02:48.46
参照型を持ち出すなら剪定としてローカル変数なんて持ち出すなよ。
そのうち何でもポインターですとか言ってしまうのだろう?この青ケツ坊やは?
285デフォルトの名無しさん:2012/11/12(月) 21:02:59.06
> たとえば局所的にローカル変数を数百個定義した場合などがそれで

Dim v001 As Integer
Dim v002 As Integer
  :
  :
Dim v998 As Integer
Dim v999 As Integer

こんなコードか?w
286デフォルトの名無しさん:2012/11/12(月) 21:03:42.54
>>284
なんでそこで切れてるの?
さっきからNothingって話してるだろ。
Nohingってのは参照型にしか代入できないんだが。
287デフォルトの名無しさん:2012/11/12(月) 21:03:58.98
日本語が不自由らしい
288デフォルトの名無しさん:2012/11/12(月) 21:04:30.44
>>287
見てればわかるよw
289デフォルトの名無しさん:2012/11/12(月) 21:06:44.43
生存期間の説明にローカル変数を引き合いに出したものの

突っ込まれて慌てて参照型を持ち出す慌てよう。

見ていて滑稽。アホ丸出しですwww
290デフォルトの名無しさん:2012/11/12(月) 21:07:31.36
>>285
定義と宣言の意味さえもわからないようでつ
291デフォルトの名無しさん:2012/11/12(月) 21:07:45.64
>>289
滑稽なのはお前のことだよ。
みんなわかってるよ。
292デフォルトの名無しさん:2012/11/12(月) 21:08:21.02
>>290
C言語のように、定義と宣言が分かれてる言語なら
よかったねw
293デフォルトの名無しさん:2012/11/12(月) 21:08:24.56
みんな = おまえの妄想

大丈夫か?医者いけよw
294デフォルトの名無しさん:2012/11/12(月) 21:09:21.77
>>292
うわっ!とんでもないVB6初心者を相手にしてたのね俺。
菌が伝染しそうで恐いわ。
295デフォルトの名無しさん:2012/11/12(月) 21:09:43.78
>>293
お前以外は一人だと思ってるの?w
ちょっと頭悪いと思う。
296デフォルトの名無しさん:2012/11/12(月) 21:11:46.23
宣言というのは、今から○○という名前を使いますよこと。
定義っていうのは○○という名前のものをそこに作りますよって言うこと。

>>285はv001という変数がそこにできるから
これは定義。
297デフォルトの名無しさん:2012/11/12(月) 21:13:03.99
http://www.cc.kyoto-su.ac.jp/~hxm/cstext/prog06.html
この動作を理解するためにはオブジェクト(変数や関数)の 定義 (definition) と宣言 (declaration)の違いを きちんと区別しておく必要があります.

定義では名前(識別子)が宣言されて,実際にメモリ領域を割り当てる.
宣言では名前(識別子)が宣言されるだけで,メモリ領域は割り当てない.
298293:2012/11/12(月) 21:13:36.24
>>295
ええと、あなたに言った覚えはないのですが?見えない敵をつくらないでね。

妄想ちゃん
299デフォルトの名無しさん:2012/11/12(月) 21:15:19.99
>>298
え? 違う人がレスしたらダメなの?w
みんなでお前を叩いてるって図なんだがw
300デフォルトの名無しさん:2012/11/12(月) 21:15:51.69
昨日のターミナルくんが今日はローカル変数くんになって帰ってキタ?

連日頑張るなぁ。
301デフォルトの名無しさん:2012/11/12(月) 21:16:53.87
>>300
違うけどw
でもそう思ったお前は
連日このスレに居るってことかなw
でなきゃ連日なんてわからないよね。
302デフォルトの名無しさん:2012/11/12(月) 21:17:17.82
VB6に宣言と定義の違いなんてあるわけないだろう。
さすがこのスレというか、もう馬鹿丸出しだな
303デフォルトの名無しさん:2012/11/12(月) 21:17:29.42
>>299
語尾に草が付くようになっては心理状態がまるみえでつよ?
304デフォルトの名無しさん:2012/11/12(月) 21:18:00.34
取りあえず大切な事は
Nothingは、オブジェクトが存在しない事を示すオブジェクト型である
Nothingを代入すれば、オブジェクトは解放される場合がある
305デフォルトの名無しさん:2012/11/12(月) 21:18:13.69
>>302
いやまったく。ターミナル小僧ときたらもうね。
306デフォルトの名無しさん:2012/11/12(月) 21:18:18.59
>>302
俺も>>292でそう言ったんだが
どうやらあの馬鹿は理解できないようでね。
307デフォルトの名無しさん:2012/11/12(月) 21:19:21.59
>>303
心理状態がバレないようにわざとwを付けなかったんですねw
308デフォルトの名無しさん:2012/11/12(月) 21:19:37.25
まあ上げ足を取られる前に言っておくけど、一応外部dll内の関数を「宣言」する
構文はあるけどね
309302:2012/11/12(月) 21:19:39.74
>>306
TerminateをTerminalとスペルミスするくらいの頭だから大目にみてやろうよ。
310デフォルトの名無しさん:2012/11/12(月) 21:20:36.59
こいつが馬鹿でしたwww

290 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/12(月) 21:07:31.36
>>285
定義と宣言の意味さえもわからないようでつ
311デフォルトの名無しさん:2012/11/12(月) 21:21:45.85
ターミナル小僧のせいに
しようとしてるのバレバレw

>>290だろ。馬鹿なのは。
312デフォルトの名無しさん:2012/11/12(月) 21:22:36.77
>>311
ということはターミナル小僧だったんだな?

イヒヒ
313デフォルトの名無しさん:2012/11/12(月) 21:23:23.52
>>312
俺のカンは当たっていた!
314デフォルトの名無しさん:2012/11/12(月) 21:23:52.61
ローカル変数と、ローカル変数の参照先の
区別もつかない奴はどこに行った?
値型と参照型の区別もついてない奴だよ。

ローカル変数ではなく、参照先のオブジェクトが
ヒープに作られてるのを見つけてドヤ顔してても
周りから見ると恥ずかしいだけだよ。
315デフォルトの名無しさん:2012/11/12(月) 21:24:49.00
ターミナル ローカル ドヤ顔 (^o^)/
316デフォルトの名無しさん:2012/11/12(月) 21:27:52.79
>>314
話を蒸し返すな。
また>>280が暴れだすぞw

279 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/12(月) 20:58:46.74
>>276は「ローカル変数」と「ローカル変数の参照先」の区別がついてないんだろうな。


280 名前:デフォルトの名無しさん[] 投稿日:2012/11/12(月) 20:58:55.45
>>276
VB6という処理系に限定してもローカル変数の生存時間が非常に長い事がありますよ。
たとえば局所的にローカル変数を数百個定義した場合などがそれで
VB Decompilerで見るとなんとローカル変数を開放していないばかりかスタックにもなっていない。
そう、mallocで確保したメモリをローカル変数に使ってるのですよ!
こうなるともうfreeが要不要論にまで発展してしまい、それこそ収拾がつかなくなりますわ。


281 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/12(月) 20:59:44.16
>>280

だからローカル変数と、ローカル変数の参照先の
区別ぐらい付けられるようになれって。

アホ丸出し
317デフォルトの名無しさん:2012/11/12(月) 21:34:30.49
キチガイ↑

サワルナチュウイ!
318デフォルトの名無しさん:2012/11/12(月) 21:35:34.55
無駄に時間を消費しているだけで何も説明できてないな。
こいつら雁首そろえて馬鹿か?
319デフォルトの名無しさん:2012/11/12(月) 21:41:03.65
まあ、Nothingを
free( p )
と勘違いしてるみたいだから馬鹿には違いない
320デフォルトの名無しさん:2012/11/12(月) 21:51:15.54
スペルミス程度なら愛嬌で済んだけどなw
321デフォルトの名無しさん:2012/11/12(月) 22:29:39.52
しかし、今時どの言語スレをみてもこれだけ熱く語っている所を見た事が無い。
なぜ枯れたVB6が今これほどまでに熱いのか???
誰が三行で説明してくれ。
322デフォルトの名無しさん:2012/11/12(月) 22:31:41.02
>>321
Nothingを代入すると言語がプログラマを見て、メモリを開放するかどうか判断するところだろ?
こんなインテリジェントな言語が他にあるかっつーの。
323デフォルトの名無しさん:2012/11/12(月) 22:54:53.27
>>321
VB6使いの仕事
今はもう細かい知識を競い合う以外には
Nothing
324デフォルトの名無しさん:2012/11/12(月) 22:59:13.46
終わったVBスレがム板で5番目に勢いがあってワロタ
325デフォルトの名無しさん:2012/11/12(月) 22:59:56.16
>>323
4行。ブッブー!!!
326デフォルトの名無しさん:2012/11/13(火) 00:30:50.97
幼稚な。
327デフォルトの名無しさん:2012/11/13(火) 09:13:10.99
>>322
Nothingはメモリを開放しない
328デフォルトの名無しさん:2012/11/13(火) 09:16:01.39
するよ。それだけじゃないけど。
329デフォルトの名無しさん:2012/11/13(火) 09:20:37.58
>>328
だから、Nothingはメモリを開放しない
Nothingの代入で、メモリが開放されたように見える場合があるだけ
330デフォルトの名無しさん:2012/11/13(火) 11:45:36.27
Nothingする
参照カウンタ一つ減る
参照カウンタがゼロならメモリを解放する
331デフォルトの名無しさん:2012/11/13(火) 11:45:39.01
>>271
> C言語におけるmallocとfreeの話は
> VBのNew、Nothingの話とは違う。
> なぜならC言語にはGCがないからだ。

なぜ俺がmalloc/free論争の話を持ち出すかというと、VBでのNothingの話と、
「本質的に必要ではないfreeなのに、なぜfreeしろというのか」という文脈が同じだから。

malloc/free論争では、「使ったのだからfreeするのは当然(思考停止)」「お作法として
必要(思考停止)」と頑固に主張する人がいたため、長大な論争となった。
332デフォルトの名無しさん:2012/11/13(火) 12:00:26.16
Nothingで言うと、スコープ出る前にオブジェクトの解放が必要に決まってるのだからNothing代入が必要、って感じだな
333デフォルトの名無しさん:2012/11/13(火) 12:48:27.58
>>332
オブジェクトを返す関数の場合はどうするの?
334デフォルトの名無しさん:2012/11/13(火) 13:05:23.64
>>333
その、オブジェクトを返す関数を呼び出す関数のスコープを抜ける前にNothingの代入が必要かどうか
という問題に置き換わるに決まってるんだけど、そんなこともわからないわけ?
335デフォルトの名無しさん:2012/11/13(火) 13:09:33.72
>>329
だからメモリーは解放されるってば。タスクマネージャーで見ていても明白。
バッカジャネーノ?
336デフォルトの名無しさん:2012/11/13(火) 13:26:27.43
Nothingを代入しろ派は、C++のスマートポインタにメモリを解放するメソッドがあったら、
明示的にそのメソッドを呼びたくなっちゃうの?
337デフォルトの名無しさん:2012/11/13(火) 13:31:33.53
VB6の話題にC++を引き合いにでしてしまうアンポンタンを最近よくみかけますね。
338デフォルトの名無しさん:2012/11/13(火) 13:45:33.45
Set X = Nothingしたときに呼ばれる関数も
関数の終わりに自動実行される自動変数のデストラクタも
VB6ではなくてC++で実装されているんじゃないかね。
339デフォルトの名無しさん:2012/11/13(火) 13:54:11.25
>>338
そんなことはありません。VB6ではOLEオートメーションが呼び出されます。
その先は何をやっているのかわかりませんが単純にC++ライブラリ渡しではありません。
残念でした。
340デフォルトの名無しさん:2012/11/13(火) 14:03:37.77
>>334
ん?
オブジェクトを返す関数の戻り値としてのオブジェクトの参照にたいしてどうやって明示的にNothingを代入するのかと言うのを聞いている
Function TestFunc() as Object
Set TestFunc = New なんかのオブジェクト '<-こいつにどうやって明示的にNothingを入れるの?
'以下なんかの処理
End Function

>>335
Nothingを代入しても、参照カウンタが0にならなければ、オブジェクトの開放は行われない
VB6にはGCは無いので、参照カウンタが0になればオブジェクトは開放される
341デフォルトの名無しさん:2012/11/13(火) 14:05:07.91
>>340
アホなの?

sub foo()
set bar = testfunc()
set bar = nothing
end sub
342デフォルトの名無しさん:2012/11/13(火) 14:08:04.34
>>340
だから結局「解放される」を否定することはできないだろうって事だよ。
343デフォルトの名無しさん:2012/11/13(火) 14:13:46.81
結論。
Nothingを代入しなければいけない場合にのみNothingを代入すれば十分。

Nothingを代入しなければいけない場合の例:
http://homepage1.nifty.com/rucio/main/technique/teq_15.htm

それ以外は不要。
344デフォルトの名無しさん:2012/11/13(火) 14:15:42.71
「開放」とか書いてる奴は、オブジェクト志向とか書きそう
345デフォルトの名無しさん:2012/11/13(火) 14:26:48.66
>>343
あの例ならExcelAppを Command1_Clickで宣言すべきじゃねかと思った。
346デフォルトの名無しさん:2012/11/13(火) 14:28:57.73
VB6はExcelのVBAとは違うぞ?
そもそもVBAとは似て非なりでVBAの方が言語的には進んでいる。
構造的にはVB6が勝るが。
347デフォルトの名無しさん:2012/11/13(火) 14:30:22.69
プログラマって日本語能力が低い奴しかおらんの?
348デフォルトの名無しさん:2012/11/13(火) 14:31:46.69
いつのまにVBAの話になったの?
349デフォルトの名無しさん:2012/11/13(火) 14:34:18.91
>>341
それは、変数barにNothingを代入しただけじゃん
俺が言っているは、暗黙変数TestFuncにNothingをどうやって代入するのかだ

>>342
Nothingの代入の有無にかかわり無く、開放されるべきときに開放され、開放されるべきではないは開放されない
350デフォルトの名無しさん:2012/11/13(火) 14:36:16.14
過疎のム板で加速する旧VBスレ
351デフォルトの名無しさん:2012/11/13(火) 14:37:10.78
>>347
その代表が君か!w
352デフォルトの名無しさん:2012/11/13(火) 14:38:32.23
俺含めてこのスレの奴ら全員日本語能力が無いんじゃねえの
353デフォルトの名無しさん:2012/11/13(火) 14:39:36.06
日本語能力じゃなくコミュ力が無い
コミュニケーション、つまり意思伝達
このスレの連中は互いに意思伝達が出来てない
自分の言いたいことだけを一方通行的にわめいてるだけ
354デフォルトの名無しさん:2012/11/13(火) 14:41:31.16
言う側に難があるのか聞く側に難があるのか
355デフォルトの名無しさん:2012/11/13(火) 14:45:47.56
>>346が、なぜVBAの話を開始したのかが理解できない...
356デフォルトの名無しさん:2012/11/13(火) 14:46:52.79
>>354
両方だろう
357デフォルトの名無しさん:2012/11/13(火) 14:48:18.16
このスレの連中とはチームは組めねえ
しょうもないことで言い争いになりそうだから
358デフォルトの名無しさん:2012/11/13(火) 14:49:33.99
>>348
VB6の説明にC++を引用するアホがいたかと思えば今度はVBAを引き合にだすドアホが出る始末。
黙って見ていれば日本語不自由な奴が日本語叩き。もうなんちゅうとこなの?ココは?w
359デフォルトの名無しさん:2012/11/13(火) 14:50:00.35
どちらか一方が引けとは言わん、両方引け。互いに相手に主張が通じてないのに言い合うのは議論とも討論とも言わん。自分の主張するだけとかまるで幼稚園だぞ。
360デフォルトの名無しさん:2012/11/13(火) 14:50:01.23
>>349
> >>341
> それは、変数barにNothingを代入しただけじゃん
> 俺が言っているは、暗黙変数TestFuncにNothingをどうやって代入するのかだ

その、オブジェクトを返す関数(TestFunc)を呼び出す関数(bar)のスコープを抜ける前に(変数barに)Nothingの代入が必要かどうか
という問題に置き換わる

ってことなんだけど理解できないか?
361デフォルトの名無しさん:2012/11/13(火) 14:51:15.32
>>359
TerminateをTerminalと間違えるのも幼稚園だから?
362デフォルトの名無しさん:2012/11/13(火) 14:51:30.18
訂正。
誤: 呼び出す関数(bar)
正: 呼び出す関数(foo)

ところで、参照カウンタの話は理解してるよな?
363デフォルトの名無しさん:2012/11/13(火) 14:51:34.76
消えゆくVB6最後の花火だね
364デフォルトの名無しさん:2012/11/13(火) 14:51:46.43
>>359
コミュ力が無い相手、日本語が通じない相手に何言っても無駄です
365デフォルトの名無しさん:2012/11/13(火) 14:52:30.35
>>357
それ以前にお前さんとチームを組む必要がどこにあるんだよ?w
366デフォルトの名無しさん:2012/11/13(火) 14:53:18.40
>>364
無駄だと知りながら力説する君のその矛盾は一体なに?
367デフォルトの名無しさん:2012/11/13(火) 14:54:10.22
>>365
文面そのままの意味で受け取るとかアスペかよ
368デフォルトの名無しさん:2012/11/13(火) 14:55:48.28
>>367
アスペルガーがいることを踏まえて遠回しな表現や婉曲表現や比喩表現などは一切控えてください
369デフォルトの名無しさん:2012/11/13(火) 14:56:24.57
アスペばかりだからコミュ不全なのか。なるほど納得。
370デフォルトの名無しさん:2012/11/13(火) 14:56:27.79
>>343の例がExcelを使う話だったから、VBAがどうこうとか言い出したんじゃね?
371デフォルトの名無しさん:2012/11/13(火) 14:56:47.05
>>367
文面そのままの意味で受け取るとアスペだというお前の理論が既に崩壊している件。
372デフォルトの名無しさん:2012/11/13(火) 14:57:49.31
>>368
今度はアスペルガーと省略しない理由は別人だからと言い張るであろう予測は的中。
373デフォルトの名無しさん:2012/11/13(火) 14:58:49.94
>>371
そのレスでアスペ確定じゃねえかw >>367の真意を理解してねえじゃねえかw
374デフォルトの名無しさん:2012/11/13(火) 15:05:27.94
>>360
意味不明、俺は

Function TestFunc() as Object
Set TestFunc = New なんかのオブジェクト '<-こいつにどうやって明示的にNothingを入れるの?
'以下なんかの処理
Set TestFunc = Nothing 'まさか、Nothingを明示的に代入するという人は、こうやってNothingを代入する気なのかい?
End Function

って質問をしてるの
375デフォルトの名無しさん:2012/11/13(火) 15:09:41.43
>>374
そのコードだとオブジェクトを返してないじゃん。

アホ?
376デフォルトの名無しさん:2012/11/13(火) 15:11:19.91
それと何か勘違いしてるようだけど、俺は>>343でNothing代入不要論者だから。
377デフォルトの名無しさん:2012/11/13(火) 15:28:42.27
>>375-376
ならなんで、食いついてくる?
378デフォルトの名無しさん:2012/11/13(火) 15:30:59.92
>>377
多分、君が最初に俺(>>332)にコメントしたからレスしてるんだが。
379デフォルトの名無しさん:2012/11/13(火) 15:49:07.78
>>378
Nothing不要だと思ってるなら、「Nothingが必要だと思う人に聞いてくれ」って返せばいいじゃない
わざわざコードまで書いて質問してるんだから、コードの意図も読めよ
380デフォルトの名無しさん:2012/11/13(火) 16:10:01.74
>>379
> Nothing不要だと思ってるなら、「Nothingが必要だと思う人に聞いてくれ」って返せばいいじゃない
なんで?

> わざわざコードまで書いて質問してるんだから、コードの意図も読めよ
意図がさっぱりわかんないんだけど。

>>333
> オブジェクトを返す関数の場合はどうするの?
という疑問なら、

>>334
> その、オブジェクトを返す関数を呼び出す関数のスコープを抜ける前にNothingの代入が必要かどうか
> という問題に置き換わる
ってことであって、それ以上でも以下でもないよ?
381デフォルトの名無しさん:2012/11/13(火) 16:59:25.62
>>380
Set Bar = TestFunc()
とした場合、変数Barと、TestFunc関数の暗黙変数TestFuncは、同じオブジェクトへの参照を持つ、全く別の変数です
つまり、明示的にNothingを入れなければならないという主張を正しいと言うには、暗黙変数TestFuncへの明示的なNothing代入が出来なければなりません

で、変数Barにオブジェクトを代入した後、暗黙変数TestFuncに明示的にNothingを代入する手段は存在しますか?

まっ、サブルーチンや関数の引数にTestFunc()を直接指定すれば、暗黙変数TestFuncを明示的にNothingできるけど...それは、それでダーティーな手法だろ...
382デフォルトの名無しさん:2012/11/13(火) 17:04:29.81
>>381
> >>380
> Set Bar = TestFunc()
> とした場合、変数Barと、TestFunc関数の暗黙変数TestFuncは、同じオブジェクトへの参照を持つ、全く別の変数です

そして、この行の実行中、「なんかのオブジェクト」の参照カウントは一旦2になり、この行の実行が
完了したら自動的にTestFuncがもっていた「なんかのオブジェクト」の参照はなくなり、参照カウントが
1(Barが参照している分)になる。

つまり、>>334
> その、オブジェクトを返す関数を呼び出す関数のスコープを抜ける前にNothingの代入が必要かどうか
> という問題に置き換わる
ってことであって、それ以上でも以下でもないよ?
383デフォルトの名無しさん:2012/11/13(火) 17:31:43.98
>>382
つーかさ、勝手に質問を変えないで
俺は、暗黙変数TestFuncに対して明示的にNothingを代入する方法を聞いてるの

明示的にNothingを代入する方法が無いなら、「システムが自動で回収するから問題ない、極一部の場合を除いて明示的なNothingなんて必要ない」で話は終了するの
384デフォルトの名無しさん:2012/11/13(火) 17:51:07.42
>>383
いやいや、勝手に意味不明な質問に変えてるのは君なんだけど。

>>332
> Nothingで言うと、スコープ出る前にオブジェクトの解放が必要に決まってるのだからNothing代入が必要、って感じだな

>>333
> オブジェクトを返す関数の場合はどうするの?

>>334
> その、オブジェクトを返す関数を呼び出す関数のスコープを抜ける前にNothingの代入が必要かどうか
> という問題に置き換わる

〜という問題に置き換わるのであって、「オブジェクトを返す関数(の変数)にNothingを代入する」なんて
問題はどこにも存在しないわけだ。

存在しない問題に対しては答えられないよ。
385デフォルトの名無しさん:2012/11/13(火) 17:53:04.19
付け加えると、

>>383
> 明示的にNothingを代入する方法が無いなら、「システムが自動で回収するから問題ない、
> 極一部の場合を除いて明示的なNothingなんて必要ない」で話は終了するの

〜で話が終了しないから紛糾してるんだけど。
386デフォルトの名無しさん:2012/11/13(火) 17:54:35.89
あ、ひょっとすると、左辺値とか右辺値という概念がない人?
387デフォルトの名無しさん:2012/11/13(火) 18:02:31.88
>>384
Nothingを使う必要が無いというのは同意だが、なぜNothing使う必要が無いのか理解してないんじゃないの?
388384:2012/11/13(火) 18:06:30.73
>>387
> なぜNothing使う必要が無いのか理解してないんじゃないの?

ん、主語は俺なの?それとも彼?
彼だとしたら、説明済みなんだけど、理解できてないのかしら。

>>382
> そして、この行の実行中、「なんかのオブジェクト」の参照カウントは一旦2になり、この行の実行が
> 完了したら自動的にTestFuncがもっていた「なんかのオブジェクト」の参照はなくなり、参照カウントが
> 1(Barが参照している分)になる。
389デフォルトの名無しさん:2012/11/13(火) 18:10:08.09
>>386
それ君でしょ?
390384:2012/11/13(火) 18:11:22.35
いかん、変な奴に絡まれはじめたので、俺からのこの話題に関するレスは終了。
391デフォルトの名無しさん:2012/11/13(火) 18:12:45.86
潔く負けを認めるとは立派だなw
392384:2012/11/13(火) 18:12:50.86
最後にばしっと答えてあげとくか。

> 俺は、暗黙変数TestFuncに対して明示的にNothingを代入する方法を聞いてるの

そのような方法は無いし、そもそもそんな問題は存在しない。
さらには「暗黙変数」とかいう俺用語使うな。
393デフォルトの名無しさん:2012/11/13(火) 18:15:17.80
そいつが俺用語使うなら君の弁舌は俺擁護じゃないのか?
394デフォルトの名無しさん:2012/11/13(火) 18:16:30.06
おつかれさまw
395384:2012/11/13(火) 18:18:15.27
>>393
別に自分自身を擁護する必要なんかないわけですが。

つか、君も俺のレスの何かにコメントしたいわけ?だったらしなよ。
別角度の話題になるんだったらレスするから。
396デフォルトの名無しさん:2012/11/13(火) 18:19:33.74
結論がNothingとはこのスレらしくていいね
397デフォルトの名無しさん:2012/11/13(火) 18:23:10.13
結局は、Nothing代入は不要でいいんだよな?
代入必要派の反論ある?
398デフォルトの名無しさん:2012/11/13(火) 18:33:00.61
>>340
> オブジェクトを返す関数の戻り値としてのオブジェクトの参照にたいしてどうやって明示的にNothingを代入するのかと言うのを聞いている
多分、オブジェクトを返す関数の戻り値がスタック上にしか存在しないというのがわかってない。
呼び出しが終了すれば、スタックが破棄され参照は消滅する。
399デフォルトの名無しさん:2012/11/13(火) 18:38:06.33
初心者なもので話に全然ついていけません。要するにNothingって住所を抹消するってこと
だが住所先の種類や状態によってその意味合いが変わり、自動的に消滅するものは
Nothingは不要って話?
400桃白白:2012/11/13(火) 18:55:30.33
>>397
ケースバイケースだろ。しかしまあ、だいたいはそれでいんじゃね。
オブジェクトがメモリを大量に消費して自転車操業的に実行しなければメモリが
やばいです超やばいですってんじゃないなら問題ないだろ。

Dim o As Object
Set o = New BigMemoryConsumer
Call Use(o)
Call SuperLongTimeProcessing()

こんなときは必要なくなった時点で破棄してやらんとまずいわね。桃白白そう思うわね。
401デフォルトの名無しさん:2012/11/13(火) 19:17:02.76
>>397
反論じゃないけどNothingの代入は必要だと思ってる。
代入しなくても動くから代入しないとかいう考えはあまりにも稚拙だし。
402デフォルトの名無しさん:2012/11/13(火) 20:06:05.69
おまえら不毛な議論好きね
403デフォルトの名無しさん:2012/11/13(火) 20:17:58.19
>>402
.netがだらしないからな。しかたないよ。
404デフォルトの名無しさん:2012/11/13(火) 20:32:54.49
オブジェクト変数のスコープ抜けたら勝手にNothingしてくれるんじゃないの?
なんでわざわざという気がする。
405デフォルトの名無しさん:2012/11/13(火) 20:34:06.04
早期にTerminateイベントを出してスコープから出るときのイベントラッシュを回避するんじゃね?
406デフォルトの名無しさん:2012/11/13(火) 20:39:43.00
>>401
質問!
次のコードの場合、オブジェクトForm1は開放されないの?

Set o = New Form1
Set o = New Form2
407デフォルトの名無しさん:2012/11/13(火) 20:42:19.91
>>406
されない。
解放タイミングはそれをどこで定義したかによる。
408デフォルトの名無しさん:2012/11/13(火) 20:49:55.63
>>407
では、

Set o = New Class1
Set o = New Class2

の場合は?
409デフォルトの名無しさん:2012/11/13(火) 20:52:05.90
Terminateイベントが発生する=解放、でいいの?
410デフォルトの名無しさん:2012/11/13(火) 20:52:41.20
>>408
Set o = New Class2 の時点でClass1は解放される。
411デフォルトの名無しさん:2012/11/13(火) 20:55:46.83
>>406>>408
同じ変数を違う用途で使いまわすのはお行儀がよろしくないかと思いますことですわよ
412デフォルトの名無しさん:2012/11/13(火) 20:56:20.04
>>409
違う。解放タイミングはシステムの都合で一方的に決められる。
例えばあるサブルーチンで100のオブジェクトを個々の変数にSETした場合
スコープを抜ける時に100のTerminateイベントが一斉に発生する。
このオーバーヘッドはバカにならない。
しかし、Nothingを代入して参照カウントが0になったとしても
そのオブジェクトがメモリから解放されるとは限らない。
そしてその心配を君がする必要はない。
それがVB6プログラミングさ。
413デフォルトの名無しさん:2012/11/13(火) 21:01:04.99
つまり「解放」と言った場合に、プログラミング上で「解放」しているのと
実際にメモリがシステムによって「解放」されるのとでは
時間的に非同期という事なんだね。
414デフォルトの名無しさん:2012/11/13(火) 21:01:48.79
>>410
質問ばかりで申し訳ないが、もうちょっと付き合って

Set o = New Form1
Set o = Nothing
Set o = New Form2

この場合は?
415デフォルトの名無しさん:2012/11/13(火) 21:02:52.92
>>413
その通り。
だから、せっかくNothingを代入して解放したつもりでもされてないのなら意味が無い。
それならスコープを出たら勝手に解放される事になってるのだから
そもそもNothingを代入する意味はないと考える人たちが多いのさ。
416デフォルトの名無しさん:2012/11/13(火) 21:03:59.53
>>415
へぇーそうなのか。でもNothingを代入する人たちがいるのはなぜなの?
417デフォルトの名無しさん:2012/11/13(火) 21:06:34.23
>>416
うむ、それはだね。Nothingを代入する事にはもう一つ意味があって
Nothingを代入した時点でTerminateイベントが発生するという特徴があるんだよ。
どうせ空のイベントだからってバカにするかもしれないけど内部的にはメッセージが発生し
他の処理の妨げになることがあるので、できるだけ早めに出させて後でまとまって発生しないように
配慮しているのさ。
418デフォルトの名無しさん:2012/11/13(火) 21:07:47.79
>>417
ふーん。では例えばこのような場合、解放とTerminateイベントの発生はどうなるの?

Set o = New Form1
Set o = Nothing
Set o = New Form2
419デフォルトの名無しさん:2012/11/13(火) 21:10:54.93
>>418
Set o = Nothing の時点でForm1のTerminateイベントが発生する。
ここでプログラミング上はオブジェクトが解放されるが実際にシステムはメモリーを開放していないかも知れない。
Set o = New Form2 の時点でForm2のInitializeイベントが発生する。
Form2 の開放タイミングとTerminateイベントの発生はこれがどこで定義されているかに依る。
420デフォルトの名無しさん:2012/11/13(火) 21:11:58.79
各イベントでイミディエイトウィンドウに処理を書き出して様子を見ればいいんじゃないの
421デフォルトの名無しさん:2012/11/13(火) 21:14:40.90
オブジェクト変数のスコープ終盤まできっちりオブジェクトを参照することが多いんよな。
結局スコープ終端でしかNothingできないコードになっちまう。
422デフォルトの名無しさん:2012/11/13(火) 21:32:49.05
&gt;他の処理の妨げになることがあるので
どうせ具体例はないんだろ?
423デフォルトの名無しさん:2012/11/13(火) 21:49:51.50
>>412
> スコープを抜ける時に100のTerminateイベントが一斉に発生する。
> このオーバーヘッドはバカにならない。
0.01秒もかからずに終わったけど?
424デフォルトの名無しさん:2012/11/13(火) 21:51:17.46
> >>408
> 408 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/13(火) 20:49:55.63
> >>407
> では、
>
> Set o = New Class1
> Set o = New Class2
>
> の場合は?
>
>
>
> 410 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/13(火) 20:52:41.20
> >>408
> Set o = New Class2 の時点でClass1は解放される。

あれ? おかしくない? Nothingしてないのに
なんで解放されるの?
425デフォルトの名無しさん:2012/11/13(火) 21:58:11.14
C言語ってmallocしたあとにfreeしなくていいんだよね?って
言ってこんなコードを書いたらちゃんとfreeしろって怒られた。
どういうこと?

int foo(void)
{
 char *buf = NULL;
 buf = (char *)malloc( 100 );



 /* free( buf ); */
 return 0;
}

http://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA03.html
> 2. malloc() した後 free() せずにプログラムを終了するのはまずいのか?
> 問題ない。

矛盾してると思うけど、先輩が間違ってるの?
426デフォルトの名無しさん:2012/11/13(火) 22:00:12.95
>>425
先輩は処理系を考えて言ってる。短絡的な後輩はダメだね。
427デフォルトの名無しさん:2012/11/13(火) 22:00:53.42
>>424
そこで参照ポインタが0になるんだよ。
428デフォルトの名無しさん:2012/11/13(火) 22:13:16.81
いい加減、GCも搭載していないC言語の話をするのはやめろ。
VBと挙動が全く違う。関係ない話。
スレ違いだろ。


専用スレ立ててやったからそっちでやれやw

main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/
429デフォルトの名無しさん:2012/11/13(火) 22:13:55.86
>>427
Nothing = 参照ポインタを0にする命令でしょ?
430デフォルトの名無しさん:2012/11/13(火) 22:14:35.20
間違えた

Nothing = 参照ポインタを一つ減らす命令でしょ?
431デフォルトの名無しさん:2012/11/13(火) 22:17:18.59
>>419
> Set o = Nothing の時点でForm1のTerminateイベントが発生する。

ぶっぶー はずれwwww


なぜならForm1のInitializeには
Load MeとかMe.Caption = "タイトル”
とか書いてありましたーw

Set o = NothingしてもTerminateイベントは起こりません。
ざんねーんw
432デフォルトの名無しさん:2012/11/13(火) 22:22:59.43
>>431
>ぶっぶー

ガキか
433デフォルトの名無しさん:2012/11/13(火) 22:23:36.64
なんでそんなくだらないことでおまえら意地になってレスしまくってんの
434デフォルトの名無しさん:2012/11/13(火) 22:24:36.13
>>431
前提条件を後出しするのは脳の発達に障害があるから
人格形成上の障害も顕著にみられる
親のしつけの問題であることが多い
以上
435デフォルトの名無しさん:2012/11/13(火) 22:24:48.26
>>432
はい、ガキですが?
そのガキに反論できないあんたは何?
436デフォルトの名無しさん:2012/11/13(火) 22:25:26.91
人格おかしいというのは当たってるなw
437デフォルトの名無しさん:2012/11/13(火) 22:26:09.71
>>434
前提条件? Form1に何も書いてないなんて
一言も書いてないが?

悔しかったらなぜこの場合はTerminateイベントが
発生しなかったのか、その説明でもしたら?
438デフォルトの名無しさん:2012/11/13(火) 22:30:09.81
こりゃまたへー
439デフォルトの名無しさん:2012/11/13(火) 22:32:12.63
>>425
関数fooが終了しても、プログラムは終了しない
よって、プログラムが動作し続ける限り、関数fooが呼び出されるたびにメモリーが消費され続ける
440桃白白:2012/11/13(火) 22:34:54.47
>>437
俺はさっきじゃんけんという名の近接戦闘において握りこぶしを突き出して
見せたがそれがグーだとは言ってない、俺の頭はパーだみたいなw
441デフォルトの名無しさん:2012/11/13(火) 22:36:16.64
Form1が終了しないのは
ロード状態になるからだろう?
上のほうで丁寧に説明されていたと思うが?
442441:2012/11/13(火) 22:37:01.27
>>197-198のこと
443デフォルトの名無しさん:2012/11/13(火) 22:45:09.41
ガキでもこれだけVB6に噛みついてくれるとなぜかうれしい。
444デフォルトの名無しさん:2012/11/13(火) 22:46:46.99
アスペ同士の罵り合いか
445デフォルトの名無しさん:2012/11/13(火) 22:56:34.79
>>443
お前何がしたいの?

Perlについての質問箱 56箱目
http://toro.2ch.net/test/read.cgi/tech/1348141100/
>
> 746 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/13(火) 09:53:31.25
> >>737
> thx!
>
> 無意味なレスでも、これだけ反応してくれると不思議と嬉しい。
446デフォルトの名無しさん:2012/11/13(火) 22:57:20.02
>>445
そいつと違うぞ マジで
447デフォルトの名無しさん:2012/11/13(火) 23:01:52.79
違うのであれば、
同レベルってだけ。
どっちでもいい。
448デフォルトの名無しさん:2012/11/13(火) 23:10:45.63
ガキじゃね?
449デフォルトの名無しさん:2012/11/14(水) 03:07:23.08
いまVB6手元にないから試せないけど
Set o=New Form1 したときのoの指すインスタンスって、既定のインスタンスと同一か?
450デフォルトの名無しさん:2012/11/14(水) 08:09:58.54
>>449
Newしてるんだから違うものに決まってるさ
451デフォルトの名無しさん:2012/11/14(水) 12:56:37.48
>>412
> 例えばあるサブルーチンで100のオブジェクトを個々の変数にSETした場合
> スコープを抜ける時に100のTerminateイベントが一斉に発生する。

一斉には発生しないよね。
順繰りに発生するだけ。

> このオーバーヘッドはバカにならない。

For loopなりで回して自前でNothingを代入する処理時間は問題にしないの?
452デフォルトの名無しさん:2012/11/14(水) 13:10:05.59
>>450
.NETのどこかのバージョンで試したときに、初回のインスタンス生成が既定のインスタンス戻した事があったんだが

>>451
ユーザに100を待たせるより、1を100回待たせる方ががユーザの感覚として問題になりにくいって話だろ
453デフォルトの名無しさん:2012/11/14(水) 13:30:14.86
>>452
> ユーザに100を待たせるより、1を100回待たせる方ががユーザの感覚として問題になりにくいって話だろ

え、そんな話なの?
ということは、

For i = 0 to Ubound(objs)
 Set objs(i) = Nothing
 DoEvents
Next

とやれということなの?
一つの配列じゃなければ、set obj = nothingとdoeventsをずらずら書くの?
そんな奴見たこと無いわ。
454デフォルトの名無しさん:2012/11/14(水) 13:40:11.73
一つのオブジェクトの破棄に非常に時間がかかり(たとえば100msかかるとか)、
それをまとめて破棄しなければならないのだとしたら、それはNothingを
代入する/しないの問題じゃなくて別の問題じゃないの。
455デフォルトの名無しさん:2012/11/14(水) 13:43:05.48
オブジェクトの出来が悪いとかプロシージャの切り方に難があるってか?
456デフォルトの名無しさん:2012/11/14(水) 13:45:40.03
>>455
「プロシージャの切り方」というのが何なのかわからないけど、現実世界のリソースを解放しようとしたとき
などは時間がかかったりする。
457デフォルトの名無しさん:2012/11/14(水) 13:47:52.13
なんか言葉に厳しい人がいるみたいだから、念のため説明しておくと、現実世界のリソースとは
物理デバイスに対するクローズ処理とかだからね。
458デフォルトの名無しさん:2012/11/14(水) 13:50:02.45
参照ポインタって何だよ
459デフォルトの名無しさん:2012/11/14(水) 13:52:10.59
>>417
> どうせ空のイベントだからってバカにするかもしれないけど内部的にはメッセージが発生し
> 他の処理の妨げになることがあるので、できるだけ早めに出させて後でまとまって発生しないように
> 配慮しているのさ。

この、「後でまとまって発生する」のが悪だと思ってる人は、なぜそう思うんだろうか?
460デフォルトの名無しさん:2012/11/14(水) 13:53:21.76
悪だと思ってる人は、GCが存在する言語を使うとき、そのGCを起動するメソッドが用意されてるときは、
こまめに自分で明示的に呼び出したりしてるんだろうか。
461デフォルトの名無しさん:2012/11/14(水) 15:14:41.10
いろいろ紛糾してるが、そもそもは>>29のサイトみたいな糞コードをありがたがる奴が駄目なんだよ。
> ' 不要になった時点で参照を解放する (Terminate イベントを早めに起こす)
とか、もうアホかと。
FileSystemObjectなんか、グローバルに
Dim FSO as New FileSystemObject
と書いときゃいんだよ。
462デフォルトの名無しさん:2012/11/14(水) 15:20:25.31
まだやってる...
Nothingが参照カウンタを操作するわけでも、Nothingがメモリを開放するわけでもない
オブジェクト型の変数に、オブジェクトが存在しない事を示すキーワードがNothing
463デフォルトの名無しさん:2012/11/14(水) 15:32:39.00
>>461
糞コードとは思わんがな。ここでしか威勢を張れない役立たずのチキン野郎のお前と比べたら神だよ彼は。
464デフォルトの名無しさん:2012/11/14(水) 15:34:25.00
>>462
>Nothingが参照カウンタを操作

当たり前だろ?代入値が参照カウンタをどうやって操作すんだよ?
考えてから書けドアホ。
465デフォルトの名無しさん:2012/11/14(水) 15:35:39.59
>>462
>Nothingがメモリを開放

当たり前だろ?代入値がどうやってメモリを開放すんだよ?
考えてから書けドアホ。
466デフォルトの名無しさん:2012/11/14(水) 15:36:40.91
>>462
>オブジェクト型の変数に、オブジェクトが存在しない事を示すキーワードがNothing

Nothingは「キーワード」じゃねーよ。アホかぁ?コイツwwww
467デフォルトの名無しさん:2012/11/14(水) 15:39:25.31
Nothingが参照カウンタを操作するわけでも、Nothingがメモリを開放するわけでもない
             ,.,.,.,.,.,.,.,.,__
           ,,;f::::::::::::::::::::::ヽ
           i::::::::/'" ̄ ̄ヾi
           |:::::::| ,,,,,_  ,,,,,,|
           |r-==( 。);( 。)
           ( ヽ  :::__)..:: }
        ,____/ヽ  ー== ;  ほほう それでそれで?
     r'"ヽ   t、   \___ !
    / 、、i    ヽ__,,/
    / ヽノ  j ,   j |ヽ
    |⌒`'、__ / /   /r  |
    {     ̄''ー-、,,_,ヘ^ |
    ゝ-,,,_____)--、j
    /  \__       /
    |      "'ー‐‐---''

オブジェクト型の変数に、オブジェクトが存在しない事を示すキーワードがNothing
             ,.,.,.,.,.,.,.,.,__
           ,,;f::::::::::::::::::::::ヽ
           i::/' ̄ ̄ ̄ヾi::l
           |::| /  \,|::|
           |r-( ・ );( ・ )-|
           ( ヽ :::(__)..::  }  <・・・小学生レベルの嘘だな
        ,____/ヽ  -==- /
     r'"ヽ   t、  ヽ___/
    / 、、i    ヽ__,,/
    / ヽノ  j ,   j |ヽ
    |⌒`'、__ / /   /r  |
    {     ̄''ー-、,,_,ヘ^ |
    ゝ-,,,_____)--、j
    /  \__       /
468デフォルトの名無しさん:2012/11/14(水) 15:42:23.31
「開放」と変換する奴は糞の法則が守られた
469デフォルトの名無しさん:2012/11/14(水) 15:43:30.42
>>464-467
>>322,>>330,>>335,>>429-430
とりあえず、この辺の可愛そうな人達に教えてあげて
470デフォルトの名無しさん:2012/11/14(水) 15:50:24.79
Emptyとこんがらがっとるな
471デフォルトの名無しさん:2012/11/14(水) 15:55:22.32
>>470
「存在しない事」の表現の一つだから、呼び方なんてどうでもようがす
472デフォルトの名無しさん:2012/11/14(水) 15:59:25.96
Emptyは評価するものであって代入するものじゃないだろ?それこそキーワードだろうがw
473デフォルトの名無しさん:2012/11/14(水) 16:18:13.28
>>472
Emptyは代入できるし...
474デフォルトの名無しさん:2012/11/14(水) 16:22:48.33
>>473
やってみてよ先生
475デフォルトの名無しさん:2012/11/14(水) 16:27:14.73
>>474
Dim a As Variant
a = "Hello!"
a = Empty
MsgBox TypeName(a)
476293:2012/11/14(水) 16:27:31.02
Dim s As String

s = "Empty"
477デフォルトの名無しさん:2012/11/14(水) 16:29:48.28
>>475

Option Ecplicit を宣言するとエラーになる。
アマチュアプログラマー乙。
478デフォルトの名無しさん:2012/11/14(水) 16:35:45.15
>>477
「Option Explicit」だボケ
479デフォルトの名無しさん:2012/11/14(水) 16:39:08.58
>Option Ecplicit を宣言するとエラーになる。

なるほど、正しい事を言ってる。

罠か?w
480デフォルトの名無しさん:2012/11/14(水) 17:51:00.09
>>477
Option Explicitを宣言してもエラーにならないけど?
レス乞食?
481デフォルトの名無しさん:2012/11/14(水) 17:52:06.67
ageてる奴は糞の法則が守られた
482デフォルトの名無しさん:2012/11/14(水) 18:06:14.69
>>463
「ここでしか威勢を張れない役立たずのチキン野郎のお前と比べたら神」な人が書いたから、糞コードではないと判断してないか?
483デフォルトの名無しさん:2012/11/14(水) 18:10:27.74
このスレ、頭悪い奴しかいないな。
とか書くと、「お前もそうだ」とレスする頭悪い奴が釣れそうだが。
484デフォルトの名無しさん:2012/11/14(水) 19:12:01.05
自己紹介乙
485デフォルトの名無しさん:2012/11/14(水) 19:54:50.72
ム板で2番目に勢いのあるスレになりました!
486デフォルトの名無しさん:2012/11/14(水) 19:55:34.84
勢いのあるスレを上位からみても
このスレだけオワコン言語なのだが
487デフォルトの名無しさん:2012/11/14(水) 20:28:13.77
オワコンじゃねえよマイクロソフトですらサポート切ることの出来ないほどのあらゆる意味での人気言語だぞ
488デフォルトの名無しさん:2012/11/14(水) 21:59:37.48
>>480
Option Ecplicit を宣言するとエラーになるよ。
489デフォルトの名無しさん:2012/11/14(水) 22:20:37.39
さて問題です
>>477は何を目的に Option Ecplicit を宣言したのでしょうか?
490デフォルトの名無しさん:2012/11/14(水) 22:29:47.85
>>488
エラーメッセージとエラー番号は何よ
491デフォルトの名無しさん:2012/11/15(木) 01:29:27.29
VBってたのしいなぁ
492デフォルトの名無しさん:2012/11/15(木) 11:08:21.73
なんだろう。
「アマチュアプログラマー乙」と煽ったつもりだったのが、自分の方がド素人だったことに気づいて
話題をそらそうとしてるのだろうか。

まあ、何にせようざいから消えて欲しいんだけどな。
493デフォルトの名無しさん:2012/11/15(木) 13:11:16.60
>>492
しらんが「アマチュア」という言葉が心にグサッと刺さった事はわかった。
494デフォルトの名無しさん:2012/11/15(木) 13:42:41.62
>>493
アマチュアプログラマー乙
495デフォルトの名無しさん:2012/11/15(木) 13:44:59.38
積極的なド素人がいるとスレが崩壊の危機に瀕するの例
496デフォルトの名無しさん:2012/11/15(木) 14:54:09.34
崩壊の瓦礫も過疎スレのにぎわい
497デフォルトの名無しさん:2012/11/15(木) 15:10:08.65
ここで暴れてるVB6オタクが子供であることに期待
498デフォルトの名無しさん:2012/11/15(木) 18:14:39.20
今日は静かだったな。
やっと飽きたか。
499デフォルトの名無しさん:2012/11/15(木) 18:50:11.03
ガキが試験だろ
500デフォルトの名無しさん:2012/11/15(木) 22:05:37.54
VB6とか入手困難な言語を課題にする授業なんてするのか?
家で宿題が出来ないだろう
501デフォルトの名無しさん:2012/11/15(木) 22:23:08.51
あはは
502デフォルトの名無しさん:2012/11/15(木) 22:39:36.81
さすがに >>500 は、馬鹿と言わざるを得ないな
503デフォルトの名無しさん:2012/11/15(木) 23:35:32.09
ガキ以下だな。生きる価値なしw
504デフォルトの名無しさん:2012/11/16(金) 01:30:24.87
え?どういうことなの?
505デフォルトの名無しさん:2012/11/16(金) 01:35:50.21
まさか↓これのこと言ってたりすんの?たかだか1授業のために大金払うわけ?


なお、MSDN サブスクリプションでは、Visual Studio 6.0 を含む新旧のソフトウェアを引き続き提供しますので、旧バージョンである Visual Studio 6.0 が必要な場合は、Visual Studio .NET MSDN Deluxe Edition または MSDN サブスクリプションをお求めください。
506デフォルトの名無しさん:2012/11/16(金) 08:15:24.17
ランチャを作ってます。

1 管理者権限で起動したランチャから
 非管理者権限でプロセスを起動する方法
2 非管理者権限のエクスプローラ等からファイルをドラッグして
 管理者権限のランチャでOleDragDropを発生させる方法
3 64ビットOSでSystem32内に存在するはずの
 ファイルが見つからないというエラーの回避方法

を教えていただけませんか?
507デフォルトの名無しさん:2012/11/16(金) 09:00:46.79
2は無理。
エクスプローラのマニフェストでUIアクセスを要求する必要があると思う。
UIアクセス=trueは署名付きじゃないとダメだったと思う。
以上、自分ならランチャを2プロセス構成にしてUIを非管理者プロセスで起動します。

でもMSマウスは管理者プロセスだとスクロール出来なくなるんです。
それを盾に開き直っても良いと思います。
508デフォルトの名無しさん:2012/11/16(金) 09:19:35.14
管理者権限のプロセスから、標準モードのプロセスを起動する方法
http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+201105/11050013.txt
509デフォルトの名無しさん:2012/11/16(金) 09:23:46.47
管理者権限への昇格 (1): flow of water ブログ
http://fow.cocolog-nifty.com/blog/2009/11/1-10db.html
管理者権限への昇格 (2): flow of water ブログ
http://fow.cocolog-nifty.com/blog/2009/11/2-b3c5.html
管理者権限への昇格 (3): flow of water ブログ
http://fow.cocolog-nifty.com/blog/2009/11/3-6adf.html

UAC有効時のプロセス起動時の注意事項メモ: ブログ始めてみました!
http://k63.seesaa.net/article/56034778.html
510デフォルトの名無しさん:2012/11/16(金) 09:50:04.48
>>508
VB6で「CreateProcessWithTokenW」を使って
管理者トークンで走行するプロセスから標準モードで別のプロセスを起動したが
どうやっても管理者トークンで走行してしまう。よってドラッグ&ドロップもできない。
これはVB6では無理みたいね。残念。
511506:2012/11/16(金) 12:15:58.45
>>507
ドラッグは無理なのですね。
おっしゃるとおり、2プロセス構成にしてみようと思います。
>>508、509、510
紹介していただいた方法で、管理者プロセス起動プロセスを
実行しようと思います。
ありがとうございました。
512デフォルトの名無しさん:2012/11/16(金) 12:58:40.67
上がるのは勝手に上がるが、下げようとするとこれほど大変とはねぇ。
513デフォルトの名無しさん:2012/11/16(金) 13:11:22.95
下げるってスレのこと?他のスレを上げまくればいいだけっしょ
514デフォルトの名無しさん:2012/11/16(金) 15:10:08.69
ぼけ
515506:2012/11/16(金) 17:10:39.53
非管理者権限のプロセスから
ActiveXExeを管理者権限で起動する方法を教えていただけませんか?
EXEファイルのプロパティで管理者として実行するようにしたら
インスタンスが作れなくなってしまいました。
516デフォルトの名無しさん:2012/11/16(金) 17:32:18.62
>>513
馬鹿かお前?それとも天然か?
プロセスは管理者トークンをもつプロセスから起動されれば何をしなくても自動的に
管理者に昇格するが、管理者トークンをもったプロセスがユーザーレベルに
降格するためには恐ろしいほどのトリッキーな操作が必要って事だよ。
それに比べたら起動されたEXE時の走行レベルが管理者かユーザーかなんて議論はゴミだっつーの。
517デフォルトの名無しさん:2012/11/16(金) 20:46:30.83
Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス - 管理者権限へ権限上昇をするプロセスを起動する際の問題
http://sysneitf.ifdef.jp/os_vista_uacprocess.html
518デフォルトの名無しさん:2012/11/16(金) 21:01:29.58
>>517
その問題は製品版では治ってるよ。
519デフォルトの名無しさん:2012/11/16(金) 22:42:16.89
>>515
起動は出来てるがメッセージが遮断されるから無意味って事では?何がしたいの?

(UAC関係無かったら無視してね)
そもそもUACの警告を無視するようにユーザーに促すのは良くない。
たまに「無視して下さい」ってマニュアルを見かけるけど、何かあったらどうするの?
せめてオレンジ色のダイアログだけは回避すべき。
520デフォルトの名無しさん:2012/11/17(土) 11:40:31.21
趣味プログラミングです。アイコンが多数必要になった場合、めんどーで仕方ないです。
VB6でDephiみたく横に細長いイメージからイメージを抽出してアイコンのPictureにする方法ないの?
521デフォルトの名無しさん:2012/11/17(土) 12:08:21.53
プロのプログラミングです。VB6で作ったアプリでデスクトップに表示されるアイコンは48x48で。
ボタンに表示されるアイコンは24x24とかってする方法はさすがにありませんよね。
考えあぐねた末にでた結論が無理って事だったので、もし方法があったらショックで自殺してしまうかも。
522デフォルトの名無しさん:2012/11/17(土) 12:13:26.35
できるけどしんだほうがいいかも
523デフォルトの名無しさん:2012/11/17(土) 12:30:09.61
できないだろ。
524デフォルトの名無しさん:2012/11/17(土) 14:22:55.29
アホはそう思ってればいい
525デフォルトの名無しさん:2012/11/17(土) 15:12:22.70
そもそも、デスクトップは意味が分かるがボタンって何なんだw
526デフォルトの名無しさん:2012/11/17(土) 15:38:32.91
池沼のお前には分からないだろうな。
527デフォルトの名無しさん:2012/11/17(土) 16:17:11.45
そもそもデスクトップのアイコンのサイズはユーザーが決めることだろ?
528デフォルトの名無しさん:2012/11/17(土) 19:52:02.75
>>527
VB6の場合、EXEに複数のアイコンを組み込めないから無理って話じゃないのか?
529デフォルトの名無しさん:2012/11/17(土) 19:55:03.73
何のこっちゃ。
先週の週末の話題もあまりの低レベルさに大いに呆れたけど、今週はプログラミング以前に
日本語が不自由なんだから話にもならんな。
530デフォルトの名無しさん:2012/11/17(土) 20:00:19.02
>>529
理解できてないのはお前だけだったりしてなw
531デフォルトの名無しさん:2012/11/17(土) 20:06:08.51
アイコン自体が複数の解像度持てなかったっけ?
VB6では無理なの?
532デフォルトの名無しさん:2012/11/17(土) 20:12:15.33
そうVB関係ない。
ついでに言えば、ショートカットのアイコンは別にリンクしてるバイナリの
リソースじゃなくていいい。

っていうかボタンって何なんだだから。
533デフォルトの名無しさん:2012/11/17(土) 20:27:58.10
>>531
アイコンファイルのフォーマットであり可能
つかVB6付属のイメージエディタでアイコンファイル作れるし
534デフォルトの名無しさん:2012/11/17(土) 21:08:11.30
>>531
アイコン自体が複数の解像度を持っていたところで、フォームのアイコンやグラフィックモードに指定したボタンへ
適用するアイコンサイズを任意に指定できないことを指摘しているのではないのか?
俺の読解力が有りすぎるのか、それともよく理解しようともせずに煽ってる人たちが多いのか知らんが。
535デフォルトの名無しさん:2012/11/17(土) 21:18:22.90
おめーの文章自体が既に……
536デフォルトの名無しさん:2012/11/17(土) 21:20:21.34
ごめん。とりあえず俺はちゃんと読んでない。
なんかどうでもよくてw
537デフォルトの名無しさん:2012/11/17(土) 21:31:44.26
他の処理系からするとアイコン番号1しか使用できないVB6が糞って事なんだろよ?
例えばデスクトップには1番の48ドットアイコンが使用され、大きいアイコンで綺麗に表示して
ボタンのアイコンには24ドットアイコンで小さく表示して、フォームの左端のアイコンは16ドットとか
そういう事なんじゃねーの?俺でも分かったぜw
538デフォルトの名無しさん:2012/11/17(土) 21:40:03.28
アイコンファイルの24x24とか48x48とかの異なるサイズのアイコンを入れたやつをアプリケーションのアイコンとして設定すれば
スタートメニュー用のアイコンなりデスクトップ上のアイコンなり2種類以上表示されるよ
539デフォルトの名無しさん:2012/11/18(日) 00:14:24.40
>>538
自殺教唆
540デフォルトの名無しさん:2012/11/18(日) 01:30:42.90
>>538
ボタンに表示させるアイコンのサイズは変えられないだろ?
フォームのタイトルバー上のアイコンも変えられないだろ?
あほww
541デフォルトの名無しさん:2012/11/18(日) 01:47:55.55
>>520
Delphiで作ればいいじゃん
542デフォルトの名無しさん:2012/11/18(日) 03:32:28.07
vbNewLineって環境によって変わるの?
543デフォルトの名無しさん:2012/11/18(日) 04:35:52.89
Mac版VBAではvbNewLineが
Windows版とは違っていたはず。
544デフォルトの名無しさん:2012/11/18(日) 04:48:46.99
(´・ヘ・` *)
545デフォルトの名無しさん:2012/11/18(日) 04:54:24.72
MSDNだとvbNewLineはプラットフォーム(オペレーティングシステム)によって適切なほうを使用する(chr(13)&chr(10) or chr(13))とあるけど
これはコンパイル時の話?
546デフォルトの名無しさん:2012/11/18(日) 09:38:26.04
Windows向けにコンパイルしたものが
MacやLinuxで動くわけ無いだろw
(エミュレータは話が別)

VBAはWindowsでもMacでも動くが
そもそもスクリプトだからコンパイルはしない。
547デフォルトの名無しさん:2012/11/18(日) 13:45:51.61
えっ

えっ
548デフォルトの名無しさん:2012/11/18(日) 18:56:53.43
>プラットフォーム(オペレーティングシステム)によって

これってWindows95かWindows98かとかのWindowsのバージョンの違いとかを指してるんじゃないの?
549デフォルトの名無しさん:2012/11/18(日) 19:07:24.20
Windowsは改行全部CR LFだろ。
わざわざ別に用意してるのは、Windows以外のことを考慮してだよ。
550デフォルトの名無しさん:2012/11/18(日) 19:20:35.90
なんで知らないのにコンパイルしないって言い切るんだろう
メニューにPコードにコンパイルする項目あるにも関わらず
単芝はダメな子って噂は本当だったんだ
551デフォルトの名無しさん:2012/11/18(日) 21:02:35.27
VBAの話だぞ?
Pコードはコンパイルには入らねーよ。
552デフォルトの名無しさん:2012/11/18(日) 21:10:24.51
じゃあお前の中じゃJavaのバイトコード化もコンパイルに入らないよな?
さすがに厳しい状況に自分を置いたけど大丈夫?
553デフォルトの名無しさん:2012/11/18(日) 21:36:27.92
VBAのPコードは、Pコードのままインタプリタが実行する
Javaのバイトコードは、バイトコードからさらに
ネイティブコードにコンパイルしてから実行する。
両者は違うもの。
554デフォルトの名無しさん:2012/11/18(日) 21:46:21.34
VBのソースをPコードに変換することをなんていうの?
555デフォルトの名無しさん:2012/11/18(日) 22:08:39.56
http://www.gizcollabo.jp/vbtomo/log/archive/choshoqa_4029_0.html

> VBのコンパイルオプションにP-Codeコンパイルとネイティブコードコンパイル
> の2つがありますが、

P-Codeコンパイルだろ?
ネイティブコンパイルじゃないって
明確に書いてあるよ。
556デフォルトの名無しさん:2012/11/18(日) 22:23:01.10
>>553
それは両者がメモリにロードされた後のインタプリタの挙動の違いだろ何言ってるんだ?
javac.exeがやってることとVB/VBAがPコードを生成することはどう違うかって話。
話題すり替える能力はさすがだな。

>>555
明確にコンパイルって書いてるだろ?
ところが>>546は頑なにコンパイルはないって言ってるんだ。
557デフォルトの名無しさん:2012/11/18(日) 22:23:55.84
コンパイルと主張しているが
あれはコンパイルではない。
と言ってる。
558デフォルトの名無しさん:2012/11/18(日) 22:27:30.01
まさかマシン語に翻訳する以外はコンパイルじゃないと言ってるわけじゃないよな。
559デフォルトの名無しさん:2012/11/18(日) 22:35:08.89
compileを英語辞書で引くと、機械語に翻訳することと、どの英語辞書サイトでも出る
560デフォルトの名無しさん:2012/11/18(日) 22:36:10.65
javaは仮想マシン上の機械語コードなのでcompileの意味は通るが、VBの場合は・・
561デフォルトの名無しさん:2012/11/18(日) 22:38:33.03
例えば普通のCコンパイラは直接バイナリ吐きませんけどね。
毎度毎度このスレの話題のレベルは何か泣けてくるなしかし
562デフォルトの名無しさん:2012/11/18(日) 22:41:47.23
時代とともに言葉の意味も変わってくるもの
辞書サイトは古い辞書だから無料で公開しているわけであってだな
最新の辞書は有料でなければ引けないのだよ
563デフォルトの名無しさん:2012/11/19(月) 00:17:15.49
>>559によってJava/.NETはコンパイルされていなかったという事実が明らかになったが
Javaコードとか.NETコードがネイティブで動くボードが出来た(実際存在する)時点でコンパイルされていたということに事実が書き換わることも明らかとなった。
Pコードも同様にネイティブで実行されるボードが開発されればコンパイルされているということに事実が書き換わるらしい。複雑だな。
564デフォルトの名無しさん:2012/11/19(月) 01:29:14.96
p-codeって何ぞ?と思ったらラーニングエディションには無いのか・・・
565デフォルトの名無しさん:2012/11/19(月) 01:52:16.98
c2.exe link.exe cvpack.exeを使えばラーニングエディションでもプロフェショナルエディションと同じスイッチを使ったコンパイルが出来たりする?
566デフォルトの名無しさん:2012/11/19(月) 02:21:40.47
いくらググってもc2.exeの使い方は出てこないな・・・c2.exe用の怪しいツールはあったが
567デフォルトの名無しさん:2012/11/19(月) 02:24:32.80
Visual Basic in Deep...
ttp://www1.koalanet.ne.jp/akiya/vbindeep/

これか
568デフォルトの名無しさん:2012/11/19(月) 02:26:52.99
569デフォルトの名無しさん:2012/11/19(月) 02:29:07.60
Visual Basic - Generating Code Tutorials
ttp://www.brainbell.com/tutors/Visual_Basic/Generating_Code.htm

C2.exeの使い方はこれかな
570デフォルトの名無しさん:2012/11/19(月) 02:44:28.67
569は何気にヤバそうなサイト
571デフォルトの名無しさん:2012/11/19(月) 08:48:09.87
プロのプログラミングです。VB6で作ったアプリでデスクトップに表示されるアイコンは48x48で。
ボタンに表示されるアイコンは24x24とかってする方法はさすがにありませんよね。
考えあぐねた末にでた結論が無理って事だったので、もし方法があったらショックで自殺してしまうかも。
572506:2012/11/19(月) 08:55:36.07
>>519
>起動は出来てるが〜
ActiveXExeは起動すらしていないようです。
>そもそもUACの警告を
ActiveXExe自体の昇級ダイアログをスキップするつもりはありません。
>何かあったらどうするの?
このようなプロセス間通信を認証と暗号化なしにしたら
バックドアになるのは分かっています。
一般公開した時点で、ウィルスが作成できてしまいます。
個人で使用し、ウィルスまがいのプロテクトがかかった近年のゲームの
UACをスルーしたいだけです。

AcriveXExeにするのが、最も簡単な2プロセス構成と思っていましたが
起動できなそうなので、普通の2プロセスにしようかと思います。
573デフォルトの名無しさん:2012/11/22(木) 18:47:33.54
  ァ ∧_∧ ァ,、
 ,、'` ( ´∀`) ,、'`
  '`  ( ⊃ ⊂)  '`
574デフォルトの名無しさん:2012/11/26(月) 12:21:16.48
ここ最近のWin7アップデートをしたら、VB6で作ったソフトが終了出来なくなったとか、
そんな話をあちこちで聞いてるんだけど…
ランタイム系で変更かかったとか、ランタイムが読まれなくなってるとか?ある?
575デフォルトの名無しさん:2012/11/26(月) 13:12:33.95
言った奴に聞け
576デフォルトの名無しさん:2012/11/26(月) 16:39:44.36
>>574
うちでもそれが大問題に発展している。
VB6で作ったアプリ限定で、OLEAUTOで落ちているので
ランタイムとの不整合性が問題なのは間違いない。
MSもとうとうVB6を排除に出たのかもね。
577デフォルトの名無しさん:2012/11/26(月) 16:46:10.91
とうとうって、Windows7とかいつの話してんだよ
578デフォルトの名無しさん:2012/11/26(月) 16:48:23.20
>>576
マジですか?
なんで排除するのでしょうかね
579デフォルトの名無しさん:2012/11/26(月) 16:49:13.74
勝手にWindowsアップデートとかさせんなよ。
580デフォルトの名無しさん:2012/11/26(月) 16:52:50.39
>>578
.netに移行しろって事だろ?

>>579
IT部門が動作検証後に定期的にWindows Updateを一斉に行うが
5日ほど前に行われたアップデートからおかしくなったと騒ぎが勃発。
よくソフトの動作を検証しなかったIT部門の責任だが、
金融系なので一大事だよ。
581デフォルトの名無しさん:2012/11/26(月) 17:02:28.48
>>580
> 金融系なので一大事だよ。

自業自得
582デフォルトの名無しさん:2012/11/26(月) 17:07:54.55
Old Soldiers Never Die
http://msdn.microsoft.com/en-us/magazine/jj133813.aspx

<pre>
As Don’t Get Me Started columnist David Platt recounts in this month’s issue of MSDN Magazine,
Microsoft has formally extended “It Just Works” support for its Visual Basic 6 programming language
through the full lifetime of the Windows Vista, Windows Server 2008, Windows 7 and Windows 8 OSes.

That means the core Visual Basic 6 runtime in each OS will enjoy five years of mainstream support,
followed by another five years of extended support, from the point that a given OS shipped.
</pre>
583デフォルトの名無しさん:2012/11/26(月) 17:33:39.94
>>582
それは表向きで実は裏でVB6を抹殺する計画が進んでいる。
VB6を恒久的にサポートするという方針はWindows 8の開発責任者で
「次期CEO」とも言われたスティーブン・シノフスキー(Steven Sinofsky)氏。
ところが彼がマイクロソフトから退社することになってしまった。
公的には単なる退社として扱われていたが、真相はそんなに円満ではなく
事実上「クビ」だったそうだ。

彼がクビになった後、VB6がどのように扱われるかはだれでも想像がつく。
その第一弾が最近のWUであったという噂が飛んでいるが真偽は不明だ。
584デフォルトの名無しさん:2012/11/26(月) 17:45:42.18
VB6アプリ使いたけりゃおとなしくXP(XP Mode)つかっとけってこったな
585デフォルトの名無しさん:2012/11/26(月) 17:50:06.74
>>583
ソース出せ
586デフォルトの名無しさん:2012/11/26(月) 17:56:42.07
これがFUDか
587デフォルトの名無しさん:2012/11/26(月) 18:37:17.22
>>583
なんで抹殺する必要があるんだろう
VB6をサポートすることってそんなに大変なんですか?
588デフォルトの名無しさん:2012/11/26(月) 18:39:42.11
古いものを古いままサポートするのは儲けはまったく出ないのに経費はかさむので、大変に決まってます
589デフォルトの名無しさん:2012/11/26(月) 19:34:04.61
>>583
VB6を擁護しまくっていたスティーブン・シノフスキーの更迭と同時にVB6も更迭かよ。
まあ確かにかなりの権力がある人がVB6をマンセーしていなければ
いまだにVB6がサポートされるなんて事があり得ないというのは薄々気づいていたが
もう終わりかVB6。長い間ありがとう。
590デフォルトの名無しさん:2012/11/26(月) 19:35:38.45
>>589
もしVB6が人間だったら大往生と言われるだろうなww
591デフォルトの名無しさん:2012/11/26(月) 20:29:31.68
これの機能でWindowsUpdateあっても大丈夫なんじゃなかったの?

分離アプリケーションとSide-by-Sideアセンブリ - Wikipedia
http://ja.wikipedia.org/wiki/%E5%88%86%E9%9B%A2%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8Side-by-Side%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AA
592デフォルトの名無しさん:2012/11/26(月) 21:07:47.15
OLEAUTO.dllがSide by Side対応とか思ってる奴、現実にいるのな。驚いたわ。
593デフォルトの名無しさん:2012/11/26(月) 21:09:42.82
OS側でOLEAUTOが動かないようにするのは他愛もない事だろう。

さようならVB6!今までどうもありがとう!
594デフォルトの名無しさん:2012/11/26(月) 21:23:25.32
dllファイルって実行ファイルと同じフォルダのよりsystem32フォルダのほうが優先して使われるんだっけ?
595デフォルトの名無しさん:2012/11/26(月) 23:30:24.52
>>594
逆だろ?ボケ男。
596デフォルトの名無しさん:2012/11/26(月) 23:37:11.18
597デフォルトの名無しさん:2012/11/26(月) 23:41:49.03
カレントフォルダ優先
598デフォルトの名無しさん:2012/11/27(火) 00:31:51.36
じゃあWindowsUpdate前の問題ないOLEAUTOとやらのファイルをカレントに置けばいいんじゃないの?
599デフォルトの名無しさん:2012/11/27(火) 02:05:09.12
は?
600デフォルトの名無しさん:2012/11/27(火) 09:26:14.88
>>598
やってみてから言えやこのドアホが
601デフォルトの名無しさん:2012/11/27(火) 09:36:21.96
>アップデートからおかしくなったと騒ぎが勃発。
会社なら、マイクソソフトに高い顧問料払ってるんじゃないの?
直接問いただせばいいんじゃねーの
602デフォルトの名無しさん:2012/11/27(火) 10:28:17.91
どうおかしくなったか知りたいす
603デフォルトの名無しさん:2012/11/27(火) 10:50:20.63
>会社なら、マイクソソフトに高い顧問料払ってるんじゃないの?

そんなことねーよ。
MSDNのサブスクリプションで最高位クラスの待遇受けられるけど
実際にインシデントを使って問い合わせると、KBから問い合わせ内容を参照して
ただ引用して答えるだけで、何の意味もない事がわかる。
MSに金払えば問題が解決するとか、本気で信じている奴がいることに驚きを隠せない。
604デフォルトの名無しさん:2012/11/27(火) 11:33:04.48
>>603
> 実際にインシデントを使って問い合わせると、KBから問い合わせ内容を参照して
> ただ引用して答えるだけで、何の意味もない事がわかる。

それって、お前が知らないだけで、既知の問題だからだったからでしょ。
605デフォルトの名無しさん:2012/11/27(火) 11:51:44.57
いえてる
606デフォルトの名無しさん:2012/11/27(火) 11:56:12.23
>>604
既知じゃない問題ならわかりませんで終わるんだがな。

>>605
擁護しなき主張もできないのかよ。情けない奴。
607デフォルトの名無しさん:2012/11/27(火) 12:04:45.26
いえてるw
608デフォルトの名無しさん:2012/11/27(火) 12:43:59.84
自分の視野が世界の全部な人の典型例
609デフォルトの名無しさん:2012/11/27(火) 12:58:01.62
MSに金払えば何でも解決してもらえると信じる視野か
狭すぎだろw
610デフォルトの名無しさん:2012/11/27(火) 14:13:53.52
1,000回くらいインシデント使ったことあるなら信じてあげてもいいよpgr
611デフォルトの名無しさん:2012/11/27(火) 14:26:39.35
MSのサポートは、問題を解決するための方策の一つであって、それだけで全ての問題が解決するとか、
全く解決にはならないというのはどちらも間違い。

解決になる場合もあればならない場合もある。
自力で解決可能な問題でも、相手がそれを調査してくれるという、時間と金を交換するケースもある。
612デフォルトの名無しさん:2012/11/27(火) 17:35:24.28
ここ見るかぎりじゃ、けっこう使えるサービスだと思うが(俺は使ったことない)
http://www.microsoft.com/ja-jp/services/professional.aspx

> サポート対応範囲 Q&A
> 対応範囲やよくあるお問い合わせについて、下記カテゴリにて Q&A 形式でご説明いたします。
>
> ・トラブル原因の調査
> ・複数製品にまたがるトラブルの切り分け
> ・修正プログラム (Hotfix) の作成リクエスト
> ・デバッグ支援、コード レビュー、サンプルコード提供
> ・キャパシティ プランニング
> ・パフォーマンス/チューニング
> ・運用環境診断や製品アップグレード/システム移行の支援
> ・仕様確認
613デフォルトの名無しさん:2012/11/27(火) 17:38:09.10
そのQ&Aページ見ると、もっと金払えば(プレミアムサポート、アドバイザリーサポート)もっと対応してくれるみたいだぞ。

> Q. 要望の動作を実現するためにどうすればいいか、プログラムやアドインの開発方法、カスタマイズ方法を
> 教えて欲しい。
>
> A. 弊社公開情報 (KB、TechNet、MSDN などの弊社 Web サイトを含む) のご紹介までを範囲として対応します。
> お客様の開発要件にあわせたサンプル コードの提示については、プレミア サポートもしくはアドバイザリー
> サービスにて承ります。

もちろん俺は使ったことないが。
614デフォルトの名無しさん:2012/11/27(火) 17:44:10.80
で、そのプレミアサポートとやらが一体いくらくらいのものなのかググると、問題解決サポート50時間+
その他サポート300時間みたいな料金体系で、860万〜2,955万だった(俺調べ)。

やっぱ、金払えばそれなりのものが得られるんじゃないの?
615デフォルトの名無しさん:2012/11/27(火) 17:46:40.68
そこまでわかると、1件3万程度のインシデントがどうとかというのは、井の中の蛙もいいとこだとわかるな
616デフォルトの名無しさん:2012/11/27(火) 21:09:08.05
そんな能書きを信じて大金を払ったものの、まともなサポートを一度も受けた事の無い
某一次上場企業のF社に勤務する私がココにイル・・・。
617デフォルトの名無しさん:2012/11/27(火) 21:14:21.61
プレミア サポートとかアドバイザリーサービスって確かMSが下請けで使っている
ソフトハウスに面倒を見させるだけだったと思う。そんな鼻息荒くするようなサービスではないよ。
618デフォルトの名無しさん:2012/11/27(火) 21:24:31.67
業務用ソフトにVB6を使い続けた会社の自己責任ではないだろうか?
とは思うが、会社のマイクソ離れは加速するんじゃないかな。そうなっても
マイクソの自己責任だろw
619デフォルトの名無しさん:2012/11/27(火) 21:28:16.43
今時VB6使ってて井の中の蛙とか言ってる奴。心底笑える()笑
620デフォルトの名無しさん:2012/11/28(水) 00:33:29.79
()笑
621デフォルトの名無しさん:2012/11/28(水) 06:25:07.26
斬新だな…
622デフォルトの名無しさん:2012/11/28(水) 10:53:07.92
「下請け」の人間が程度が低いと考えてるなら、お前ら全員程度が低いわw
623デフォルトの名無しさん:2012/11/28(水) 11:43:00.41
>>616
> そんな能書きを信じて大金を払ったものの、まともなサポートを一度も受けた事の無い
> 某一次上場企業のF社に勤務する私がココにイル・・・。

まともなサポートが必要な事態がなかっただけじゃないの?

> ・キャパシティ プランニング
> ・パフォーマンス/チューニング

とか、サービス非常停止時のリカバリサポートとか使ってみた?
624デフォルトの名無しさん:2012/11/28(水) 14:06:14.95
なんかMSのサポートの質が良い事をアピールしたい工作員がいるみたいだな。
625デフォルトの名無しさん:2012/11/28(水) 14:09:41.10
>>624
ナレッジベースの棒読みと、もう少し金払う相手には外注の窓口へご案内。
626デフォルトの名無しさん:2012/11/28(水) 14:37:36.29
MSの有償サポートはかなり質がいいよ。
まあ、サポート使いたくないなら自力で頑張ればいいよ。誰も止めないし。
627デフォルトの名無しさん:2012/11/28(水) 16:23:07.35
MSはアメリカ人に弱いのでアメリカ人の同僚に頼んでネイティブイングリッシュで
無償サポート窓口へまくしたてると有償サポート窓口の担当者に回してくれる。
そこに松田さんという人がいて、かなり詳しく調べてくれて事実上有償サポートを
無償で受けることができていた。最近はこの手が使えるか試していない。
628デフォルトの名無しさん:2012/11/28(水) 17:32:13.81
どこでもごね得が通用するんだな。
629デフォルトの名無しさん:2012/12/06(木) 09:48:53.19
マウスによりTextBoxをクリックした場合に
全選択させたいのですができません。
Tabキーによる移動の場合はこれで問題なく全選択させる事ができています。
どのようにしたらいいか教えてください。

Private Sub Text4_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Text4.Enter

Option2.Checked = True
Text4.SelectionStart = 0
Text4.SelectionLength = Len(Text4.Text)

End Sub
630デフォルトの名無しさん:2012/12/06(木) 09:55:36.67
スレタイ読んでから来い。

あるいはVB6とVB.netの違いも分からんなら逝け。
631デフォルトの名無しさん:2012/12/06(木) 10:04:48.64
MouseClickイベントに書けばいいよ
632デフォルトの名無しさん:2012/12/08(土) 14:50:23.44
www
633デフォルトの名無しさん:2012/12/08(土) 21:01:58.62
Windows 9ではVB6サポート打ち切るとの正式発表が来たね。
気持ちまでブルーだわ。

もう.netへ移行するしかないのか?
やだなぁ、あの重たいフレームワーク。
バージョンもいろいろあって4は下位との互換ないし。
634デフォルトの名無しさん:2012/12/08(土) 21:06:55.66
冗談かと思ったらマジなのな。
635デフォルトの名無しさん:2012/12/08(土) 22:12:36.38
VB 9 とか出るんじゃね?
636デフォルトの名無しさん:2012/12/08(土) 22:20:41.66
普通は10年前に移行完了してるって。
何がもう.NETへ移行するしかないのかだよアホかって
637デフォルトの名無しさん:2012/12/08(土) 23:19:52.46
>>636
未だに、COBOLだFORTRANだCだ言ってる世の中だぜ
638デフォルトの名無しさん:2012/12/08(土) 23:52:49.83
Cは許してやれよ
639デフォルトの名無しさん:2012/12/09(日) 00:32:44.19
UNIX系OS使ったことないほどの情弱なんだろ
640デフォルトの名無しさん:2012/12/09(日) 08:24:34.74
だれかVB6.NETをつくれよ
641デフォルトの名無しさん:2012/12/09(日) 09:05:33.47
VisualBasic名前空間をインポートするってのじゃいかんのか?
642デフォルトの名無しさん:2012/12/09(日) 11:46:23.56
>>640
.net がヤダって言ってるのに… バカ?
643デフォルトの名無しさん:2012/12/09(日) 13:15:52.68
>>638-639
ってさ、一見話題と関係有りそうで、実際には話題と全く関係無いよね
644デフォルトの名無しさん:2012/12/09(日) 13:58:03.69
それを言うなら >>637 からだろ。
645デフォルトの名無しさん:2012/12/09(日) 19:58:46.55
>>638-639>>637の話に対してのレスだろ>>643>>637だな
646640:2012/12/10(月) 06:09:19.30
>>642
おまいが.net嫌いとか知らんがな
647デフォルトの名無しさん:2012/12/10(月) 08:52:11.34
一番場違いというか空気脳なレスは >>639 なのに、なんでスルーするの?
648デフォルトの名無しさん:2012/12/10(月) 11:36:27.68
>>633
> Windows 9ではVB6サポート打ち切るとの正式発表が来たね。

ソースどこ?
649デフォルトの名無しさん:2012/12/10(月) 12:19:22.88
>>648
MSDNに入ってないのか?
650デフォルトの名無しさん:2012/12/10(月) 12:41:17.28
>>649
個人では入ってない。

ということは、ソースはMSDNということだね。
651デフォルトの名無しさん:2012/12/10(月) 12:49:39.75
ようは自己責任でやれって事?
652デフォルトの名無しさん:2012/12/10(月) 13:05:10.37
十分に時間的猶予与えただろ
自分用のソフトで使うなら勝手だが新規で使うなよって話
653デフォルトの名無しさん:2012/12/10(月) 13:51:14.53
>>651
物理的に動かないようにする(なる)という事のようだ。
OKEAUTOが機能しないんじゃないか?
COMとかはどうなるんだろう?
654デフォルトの名無しさん:2012/12/10(月) 13:52:43.55
ごめん、OLEAUTOの間違いねw
655デフォルトの名無しさん:2012/12/10(月) 14:42:24.45
>>653
OLE/COMがダメなら、既存のアプリほぼ全滅じゃないの?
656デフォルトの名無しさん:2012/12/10(月) 14:48:31.10
Windows 9でCOMを殺すとは言われてない。
しかしVB6のランタイムはサポートされないのではなく物理的に動作しない。
可能性としてはやはりoleaut32.dllの機能抑制というところだろうか。
657デフォルトの名無しさん:2012/12/10(月) 14:50:27.84
やったー
.net置き換え案件が大量にクルー
658デフォルトの名無しさん:2012/12/10(月) 14:52:38.08
>>656
Windows 8の時もVB6を動かなくするかどうかについて議論が重ねられたようで
VB6廃止派の先導を務めていた社長が先日クビになったため
VB6存続派のバルマーがWindows 9でも当然VB6をサポートするかと思いきや
先日の驚愕のアナウンスに違和感を禁じ得ない。
659デフォルトの名無しさん:2012/12/10(月) 14:54:37.45
まさか、Windows FX 計画の再来?
660デフォルトの名無しさん:2012/12/10(月) 16:34:31.29
日本のMS公式サイトから「Windows Phone 8」の端末情報が消えたけど
それとも関係がありそうだね。

MS社内で大改革が行われようとしている…。
661デフォルトの名無しさん:2012/12/10(月) 16:48:42.26
>>660
まさか日本では出ないなんてことが無ければいいですけどね。
今後の動きに注目です。( ´・ω・)y─┛~~~oΟ◯
662デフォルトの名無しさん:2012/12/10(月) 23:13:15.08
>>646
> おまいが.net嫌いとか知らんがな

スレの流れも追えないバカ (w
>>633 見ろ。
663640:2012/12/11(火) 06:57:11.95
>>633にレスしたつもりはないのだが・・・まぁいいや。
664デフォルトの名無しさん:2012/12/12(水) 23:45:24.98
独り言ならチラシの裏へ…
665デフォルトの名無しさん:2012/12/13(木) 12:58:10.91
Windows 9 は64bit専用OS。
666デフォルトの名無しさん:2012/12/13(木) 22:26:11.77
>>665
一応、WOW64は搭載されるみたいね。
667デフォルトの名無しさん:2012/12/14(金) 10:14:08.34
Microsoft Script Control 1.0で
Eval, ExecuteStatement, Runで実行中のスクリプトを
VB側から中断させる方法はありませんか?

ScriptControl.AddObjectしたオブジェクトのメソッドを
スクリプトから呼出されている場合や、
MsgBoxで止まっている場合、VBに制御が戻るので、
そのときに、中断できるようにしたいです。

現状は、ShellExecuteとExitProcessで再起動してますが、
それでは困ることが多々。
668デフォルトの名無しさん:2012/12/25(火) 07:05:35.02
なんか変なの発見した
INIファイルのアクセスでWritePrivateProfileString/GetPrivateProfileStringを使うよね
右端に半角スペースがあるデータをWrite〜してもGet〜でカットされる仕様だけど
一度、右端に半角スペースがあるデータを書くと右端のスペースは消えない
全く別のデータを上書きしても、前のデータにあったスペースを覚えていて
新しいデータの右にそのスペースを追加してくれちゃう
読むときにカットされるから問題はないんだけど
669デフォルトの名無しさん:2012/12/25(火) 09:48:18.05
それ、変でも何でもないんだが?
670デフォルトの名無しさん:2012/12/25(火) 23:39:31.50
つまり、データの書き換えで短くなった場合は後ろにスペースを追加して
以降のデータを書き換えないで済むように小細工してるのだろう
671デフォルトの名無しさん:2012/12/26(水) 00:50:49.24
固定長データ
672デフォルトの名無しさん:2012/12/26(水) 00:54:35.10


WritePrivateProfileString 関数
http://msdn.microsoft.com/ja-jp/library/cc429952.aspx
673デフォルトの名無しさん:2012/12/27(木) 15:01:28.79
Windows8 64bitにVB6 IDEをインストールできるの?
674デフォルトの名無しさん:2012/12/27(木) 15:17:36.55
ttp://msdn.microsoft.com/ja-jp/vbasic/cc707268
動くかどうかは別問題だが、仕事として使わないな
仮想PCにXPでも入れて使えばいい
675デフォルトの名無しさん:2012/12/27(木) 15:40:24.91
Mac上の仮想PCにXPインストールしてVB6使ったら快適すぎワロタ
Superπ 100万桁やってみたら11秒だった。速すぎw
676デフォルトの名無しさん:2012/12/30(日) 17:48:15.13
>>674
そこは7しか書いてないぞ。
677デフォルトの名無しさん:2013/01/04(金) 12:32:14.41
>>649
msdnで見つけられなかった、、、
url教えてください。
678デフォルトの名無しさん:2013/01/14(月) 23:31:02.65
コンパイル中に、VBA1.tmpというファイルに、こんなエラーを吐いた

○○○○.bas(155) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'E:\8783\vc98\p2\src\P2\reader.c', line 1994)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information

○○○○.basの155行は
「 If Sgn(buf1$) <> 0 Then 'buf1$は有効か? 」

buf1$とは、Dim buf1$()と宣言してあって、
Ubound(buf1$)がエラーにならないように
この行で配列が初期化されているかのチェックをしてます(ちょっと裏ワザ的方法)
IDEでは問題なく通るのになんで?VB壊れたかな?
679デフォルトの名無しさん:2013/01/14(月) 23:53:14.71
仕様にない使い方をしたものをexeにコンパイルして配布しようとか怖いな
680デフォルトの名無しさん:2013/01/15(火) 00:17:49.05
趣味のプログラムだから、そこらへんはいいのだけど
681デフォルトの名無しさん:2013/01/15(火) 01:06:36.61
↓こいつもコンパイル出来ないって言ってるし無理なんじゃね

動的配列で空の配列かどうか確認するには?
ttp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200911/09110082.txt
682デフォルトの名無しさん:2013/01/15(火) 06:25:11.05
>>681
申し訳ない、ネットに出てましたか
以前、同じ事をして上手くいったので何故だろうと思って
前に作ったコードを探してみたところ、Sgn( )は諦めて
ReDimする毎に、配列の大きさを別変数に格納し、UBoundを使わないことで処置してました
683デフォルトの名無しさん:2013/01/15(火) 12:31:08.66
On Error Resume Next
Dim LB As Long, UB As Long
LB = 0
LB = LBound(buf1)
UB = -1
UB = UBound(buf1)
684デフォルトの名無しさん:2013/01/15(火) 22:29:26.51
正直、Resume Nextはできるならば使いたくない。
685デフォルトの名無しさん:2013/01/15(火) 23:01:03.27
エラー箇所が分かりにくいから?
686デフォルトの名無しさん:2013/01/16(水) 03:56:25.80
自分でReDim切ってるなら管理できるからいいんだが
外部から貰った配列のときにどうしようもないことがあるからなぁ
まあ、Resume Nextじゃなくてラベル切って飛ばすほうが良いけど、見通しはさらに悪くなる
687デフォルトの名無しさん:2013/01/16(水) 19:58:46.32
Resume Next有りのコーディングルールにすると
素人メンバーが単に「落ちない」ようにするだけのResume Nextの使い方を
しはじめる、というのはあるかも。

ただしもう、VB6で新規案件など無いがな。
688デフォルトの名無しさん:2013/01/16(水) 23:53:35.80
むしろResume Next使わないと今時の構造化例外構文風に書けないと思うが...
On Error Gotoでラベルにジャンプなんてそっちの方がずっとあり得ないよ
689デフォルトの名無しさん:2013/01/17(木) 00:43:16.48
Private Sub Hoge()
  On Error Goto Catch
    '処理
  On Error Goto 0
  
  
  
  Exit Sub
  
Catch:
  '例外時の処理
End Sub


問題はfinallyを実現したい時。
書けない事もないけど、Gotoを記述するところで抵抗がある。
690デフォルトの名無しさん:2013/01/17(木) 13:32:52.76
>>688
どんな書き方してるかしらんが
複数エラー発生しても最後のエラーにしか対応してない気がするな
691デフォルトの名無しさん:2013/01/17(木) 13:36:14.62
GOSUB なら普通に割り込み感覚で使えるんじゃね?
692デフォルトの名無しさん:2013/01/17(木) 17:20:03.25
今頃思い出してすまんが
前スレあたりで動的配列の初期化チェックについて
これは名案と思ったレスがあった
それは動的配列を宣言した直後に取り合えずReDim hogehoge(0)してしまう
693デフォルトの名無しさん:2013/01/17(木) 19:22:57.59
>>692
それだと空の配列じゃないだろう
694デフォルトの名無しさん:2013/01/17(木) 19:29:03.48
>>690
そんなわけないでしょ。

try...catchと同じように例外を想定している箇所のみOn Error Resume Nextと
On Error Goto 0で囲む。

こんなの当たり前だと思うが...
もっともVB6はもう10年書いてないけど
695デフォルトの名無しさん:2013/01/17(木) 19:43:31.24
>>694
On Error Resume Next
文1
文2
On Error Goto 0

こういう風に書いてるんじゃないかと想像したが
これだと文1のエラーはトラップされないんじゃね?って話だが

まあお前がどう書いてるかしらんし実際どうなのか試す気もないけど
696デフォルトの名無しさん:2013/01/17(木) 20:08:37.83
そんな間抜けなことするわけがないアホか
697デフォルトの名無しさん:2013/01/17(木) 20:16:49.63
On Error Resume Next
  Err.clear
  '文1
  If Err.Number <> 0 Then
    'エラー処理1
  End If

  Err.clear
  '文2
  If Err.Number <> 0 Then
    'エラー処理2
  End If

On Error Goto 0

これだとtry〜catch風ではないよね。
698デフォルトの名無しさん:2013/01/17(木) 20:55:18.69
エラーなし
try{} → finally{} → 次の行へ
想定のエラーあり
try{} → catch{} → finally{} →次の行へ
想定外のエラーあり
try{} → finally{} →プログラム中断
699デフォルトの名無しさん:2013/01/18(金) 10:47:51.21
>>694
> こんなの当たり前だと思うが...

コード出せば、一発でみんなを納得させることができるよ。
700デフォルトの名無しさん:2013/01/19(土) 10:32:42.21
そもそも VB でエラーが発生する文が複数連続するような状況が想像し難いんだが。

ファイル関係と件の動的配列のチェックぐらいしか使ったことないし。
701デフォルトの名無しさん:2013/01/19(土) 14:00:08.80
例外発生の可能性だけで言えば、例外を起こさない命令の方が少ないだろうが
あとはどこまで事前チェックではじけるかと、どこまで不慮の事態を想定するか
702デフォルトの名無しさん:2013/01/19(土) 16:51:41.80
>>700
DB、ネットワーク関係とかも例外発生するでしょ。
703デフォルトの名無しさん:2013/01/19(土) 21:48:03.84
例外が出るとこは全部プロシージャにまとめて外部に作ればいいのよ
704デフォルトの名無しさん:2013/01/19(土) 22:37:27.27
>>703
馬鹿だろお前
705デフォルトの名無しさん:2013/01/19(土) 23:11:29.70
>>701
基本的に事前チェックで可能な限り例外は排除する。

>>702 が言うような外部とのやり取り等は例外を排除しきれないから、
>>703 が言うように、そう言う奴はプロシージャに閉じ込める。

って言うのが、俺の方針。
706デフォルトの名無しさん:2013/01/19(土) 23:25:04.60
>>705
お前も馬鹿か。
その「例外が出るとこを全部まとめた」部分のエラー処理はどうするんだよ。
707デフォルトの名無しさん:2013/01/19(土) 23:36:00.96
> その「例外が出るとこを全部まとめた」部分

誰も言ってない部分とやらに突っ込むアホに言われてもね (w

例外を閉じ込めたプロシージャ内では、普通に On Error Resume Next で処理して、
エラーコード返すなりすれば良いだけ。
708デフォルトの名無しさん:2013/01/19(土) 23:51:13.43
>>707
だから馬鹿だろお前。

だからエラーコードを返すためには何らかの方法でエラーを検出するコードを
書かなければならない。
つまり冗長性は少しも減らない。

そもそもエラーコードを返すなんて方法は返り値がない関数にしか使えない。
709デフォルトの名無しさん:2013/01/19(土) 23:59:24.86
誰も冗長性を減らすなんて話しをしてるわけじゃないんだけど、
バカは自分のことしか考えられないんだな。

> そもそもエラーコードを返すなんて方法は返り値がない関数にしか使えない。

自分の知識のなさをいちいち披露しなくても良いぞ (w
710デフォルトの名無しさん:2013/01/20(日) 00:00:11.98
On Error Resume Next ってのは想定外のエラーが出てもプログラムを止めたくないときにしか使えないぞ
例外を閉じ込めたプロシジャーが1行しかないなら話は別だがな
そのプロシジャー内でエラーキャッチしてしかるべき処理をするべきで
On Error Resume Nextでは最後に発生したエラーが解るだけで、エラーキャッチできないんだが
711デフォルトの名無しさん:2013/01/20(日) 00:04:45.86
>>710
そんな訳ないでしょ。
On Error Resume Nextを使うってことはエラーを自分でチェックすると言うこと。
712デフォルトの名無しさん:2013/01/20(日) 00:10:31.90
>>710
> On Error Resume Next ってのは想定外のエラーが出てもプログラムを止めたくないときにしか使えないぞ

想定内のエラーでも使うだろ、「ファイル関係」「DB」「ネットワーク」とか書いてあるのも理解できてないのか?

> On Error Resume Nextでは最後に発生したエラーが解るだけで

最後、最後と連呼してるアホは、文毎にエラーチェックすることも出来ないのかよ。
713デフォルトの名無しさん:2013/01/20(日) 00:23:09.91
>>712
つまり>>697のように書くのね

文毎にエラーチェックなんて、出来ても普通はやらないって前提の話をしてるんだよな、712以外のみんな?
714デフォルトの名無しさん:2013/01/20(日) 00:28:00.17
ひょっとして「全ての文」にエラーチェック入れるとか思ってるのか?

「想定できる例外」が発生する文なんてそんなにないだろ。
715デフォルトの名無しさん:2013/01/20(日) 01:27:59.06
>>713
お前だけだろw
716デフォルトの名無しさん:2013/01/20(日) 01:33:00.00
またくだらん話で言い争いが起きるのか
変わらんね
717デフォルトの名無しさん:2013/01/20(日) 01:35:50.26
>>716
だね。前提をそろえて話しないと話がすれ違うばかりで、>>713のように
あとだしでどや顔するやからがわいてくる。
718デフォルトの名無しさん:2013/01/21(月) 00:50:24.46
欠陥言語で何を言い争ってるんだかねw
719デフォルトの名無しさん:2013/01/21(月) 14:05:33.60
予期できない例外って存在するの?
メディアがないとか異常な計測値が入ってきたとか、全て事前にチェックできるじゃん
あ、メディアがあることを確認した後で抜かれるってのがあるな
720デフォルトの名無しさん:2013/01/21(月) 22:56:16.38
まあそういう前提であれば、予期できない、ではなくて、予期しない、って言うのが正解

メモリ不足とか、非常に予期しにくい例外もあるけどな
721デフォルトの名無しさん:2013/01/22(火) 00:11:38.14
通信中にネットワークケーブルが切れるとか、どうやって予期するんだよ。
エスパーでも雇えってか?
722デフォルトの名無しさん:2013/01/22(火) 00:28:27.29
思いつける範囲は全部対処しとけばOK
723デフォルトの名無しさん:2013/01/22(火) 02:42:04.78
想定出来るもの出来ないもの
対処出来るもの出来ないもの
どれの事言ってるのか曖昧すぎるだろ
724デフォルトの名無しさん:2013/01/22(火) 05:00:11.78
VB6.0最近始めましたド素人です。
0〜100まで変化する数値をある閾値で認識し、ダイアログ表示を出すプログラム
において、同じ値が変化しない間、ダイアログを消そうとしても消えず、困っております。

値の認識を最初の立ち上がり時だけ受け取り、一度ダイアログを消したら次を無視するような記述は
どうしたらよいでしょうか?
宜しくお願い致します。
725デフォルトの名無しさん:2013/01/22(火) 05:36:47.39
フラグを使うのはどう?

if 閾値内 then
if 表示フラグ then
ダイアログ表示
end if
表示フラグ = False
else
表示フラグ = True
end if
726デフォルトの名無しさん:2013/01/22(火) 08:13:30.91
最近はじめるなよ
727デフォルトの名無しさん:2013/01/22(火) 08:27:02.83
最近VB6始めるなんてアレだな。
仕事か?
728デフォルトの名無しさん:2013/01/22(火) 18:32:03.82
  On Error Goto Catch
    '処理
  On Error Goto 0

  Goto Finally
Catch
  Select Case Err.Number
    Case ●
      'エラー処理
    Case ▲
      'エラー処理
    Case ■
      'エラー処理
    Case Else
      'エラー処理
  End Select
  'Finallyを実装したくない時はここにExit Subを設けるか、ログを吐いて処理を終了させる
Finally
  'Finally処理

'Finally終わり----------------------

   '処理の続き

End Sub



こんなんでどうよ?Try Catch風
729デフォルトの名無しさん:2013/01/22(火) 18:37:38.72
>>728
へ?Finally処理の後に処理が続くのか?
「Finally処理」が最後の処理になってないんだけど。
730デフォルトの名無しさん:2013/01/22(火) 18:47:04.69
try-finallyの実装ならそれでいいと思うけど?
731デフォルトの名無しさん:2013/01/22(火) 22:13:09.59
724です
自己解決しました。
閾値到達からタイマカウントUPされるまでの間を起動条件にして、それ以外では表示しないようにさせました。
シーケンサのノリでタイマを使ってトリガパルスを作りました。

>>727
おっしゃる通り仕事で最近使い始めました。
昔外注(派遣さん?)に作らせたものを改装しようとして、普段PLCラダーしかやらない私に振られ、困ってましたが
何とかなりました。
ド素人から レ素人くらいにはなれました。
お騒がせしました。
732デフォルトの名無しさん:2013/01/23(水) 12:40:29.74
724が理解できた725が凄いと思った
733デフォルトの名無しさん:2013/01/23(水) 12:45:19.31
俺も理解してた
734デフォルトの名無しさん:2013/01/23(水) 17:33:00.07
異常値でダイアログを表示しているが、
ダイアログを閉じても異常値は継続しているので、またダイアログが表示されて困ってる
という話か
妙な日本語使うのぅ
735デフォルトの名無しさん:2013/01/23(水) 18:49:55.73
ピクチャのLineメソッドって、コードに誤りがなくても時々
「コンパイルエラー
 引数の数が一致していません。または不正なプロパティを指定しています。」
って出るよね
プロジェクトを一旦閉じて開き直すと治るけど
736デフォルトの名無しさん:2013/01/23(水) 18:57:12.27
>>729
TryCatchFinallyからは外したい部分じゃね?

例えば
引数がnullの場合はそのまま空のCollectionを
返して、nullじゃない場合はデータベースアクセスして
結果をCollectionに入れて返す。

で、データベースアクセスでfinally内にRecordsetのclose
だとかConnectionのクローズとかを記述。
737デフォルトの名無しさん:2013/01/23(水) 19:41:25.09
>>736
> で、データベースアクセスでfinally内にRecordsetのclose
> だとかConnectionのクローズとかを記述。

これこそがFinally処理かと。

TryCatchFinallyから外したい処理があるのなら、それはこの関数内で行う処理じゃなくて
この関数をコールする関数でやることかと思うんだけど。
そうじゃないと関数がぐちゃぐちゃになっちゃう。
738デフォルトの名無しさん:2013/01/23(水) 21:03:47.90
>>737
一つのプロシジャ中にTryブロックは一つしか書いちゃいけない教の人ですか?
739デフォルトの名無しさん:2013/01/24(木) 18:31:08.26
Private Function hoge(aaa As String) As Collection
  ans As Collection: Set ans = New Collection
  
  If aaa = vbNullString Then
    '何もしない
  Else
    On Error Goto Catch
      'DBアクセス コネクションの取得とかそんなん
    On Error Goto 0
    Goto Finally
Catch
    'エラー処理
    Select Case Err.Number
      Case ●
      Case ■
      Case Else
    End Select
Finally
    On Error Resume Next
      'コネクション持ってたら解放とか
    On Error Goto 0
  End If
  
  Set hoge = ans  '戻り値のセット。一応、Finally以下に処理がくる
End Function

Finallyの後に何かある例
740デフォルトの名無しさん:2013/01/24(木) 18:39:38.37
>>739
戻り値のセットもFinally処理に入るんじゃね?
741740:2013/01/24(木) 18:50:32.72
>>739
すまん。間違えた。
Catch、FinallyをIfステートメントの中に入れるのかよ。
文法上は問題ないと思うけど、Catch、FinallyをIfステートメントの中に入れなくてはいけない理由は?
742デフォルトの名無しさん:2013/01/24(木) 19:13:43.55
>>741
入れてもいいけど、TryCatchのスコープを絞りたい。
TryCatchしたい対象を絞るって感じですね。

人によってはTryCatch使う時、メソッドの中身をガバっと
丸ごと囲ってしまうっていう事をするのはもちろん知ってる。
743741:2013/01/24(木) 19:34:57.19
>>742
これじゃダメなの?
Private Function hoge(aaa As String) As Collection
  ans As Collection: Set ans = New Collection
  
  '引数のチェック
  If aaa = vbNullString Then
    '何もしない
    Goto Finally
  End If

  'DBアクセス用オブジェクトや変数の初期化処理

  On Error Goto Catch
    'DBアクセス コネクションの取得とかそんなん
  On Error Goto 0
  Goto Finally
  
Catch
  'エラー処理
  Select Case Err.Number
    Case ●
    Case ■
    Case Else
  End Select
Finally
  On Error Resume Next
    'コネクション持ってたら解放とか
  On Error Goto 0
  Set hoge = ans  '戻り値のセット。
End Function
744デフォルトの名無しさん:2013/01/24(木) 22:43:19.53
>>743
最初のGoto Finallyが、無用で、
その使い方をすると際限なくGoto使うバカが出現しそう。

JavaのTryCatchFinallyと近い形式で記述したい。
745デフォルトの名無しさん:2013/01/24(木) 23:14:40.69
>>744
ん?条件後出しかよ。
そんなこと言ったら、Finally使ってる時点でGoToを際限なく使う奴が出てくると思うけど。
そもそもVBをJava風に書くスレでもないわけで、VBの書き方に沿えばいいんじゃねぇの?

確かにGoTo廃止論はあるけど、エラー処理、終了処理についてはGoTo使うと処理がスッキリ書ける。
最初のチェックでGoto Finallyにしたくないのなら、Exit Functionにするやり方もある。
ただし、終了処理となるFinallyラベルがあるのに最後の処理を通らず終了するのは処理の統一感が無くなってしまう。

最初のチェックでGoto Finallyを使ったのはそういった理由がある。
746デフォルトの名無しさん:2013/01/25(金) 10:31:55.16
>>739
俺ならこうするな。

Public Function GetDBConnection(connectString as String) As Boolean
  On Error Goto FATAL

  'DB接続処理

  GetDBConnection = True
  Exit Function

FATAL:
  '接続エラー時の処理
  '例外を投げても良し
End Function
747デフォルトの名無しさん:2013/01/25(金) 10:39:44.66
>>743
finally相当の仕組みを使いたいなら、Classを使ってデストラクタを定義したら?
748デフォルトの名無しさん:2013/01/25(金) 10:51:41.16
>>745
誰もお前に書けなんて要求はしてない。後出しも先出しも中出しも先っちょだけもない。
お前は勝手にゴミのような劣化したコードを書いてこれじゃダメなのと言い出した
勘違いブサイクであることを自覚しろ。
749デフォルトの名無しさん:2013/01/25(金) 11:06:52.89
ageてまで書くようなことかね
750デフォルトの名無しさん:2013/01/25(金) 11:10:40.89
>>749
上げることは特別なことだという価値観がお前の中では形成されているのか?
お前の中では?いんじゃねえのそれでも お 前 の 中 で は な。
751デフォルトの名無しさん:2013/01/25(金) 11:15:15.33
>>743
ダメに決まってんだろ。こんなきったねえコード久々に見たわ。
お前の汚い染み付きコードを見せられて気分が悪い。謝罪と賠償を要求する。
752デフォルトの名無しさん:2013/01/25(金) 11:20:33.63
>>745
お前はFinallyの意味がわかってない。
関数の終わりだからFinallyじゃねんだよ!Finally句のイディオムも理解せずに適当ぬかしてんじゃねえぞ!
753デフォルトの名無しさん:2013/01/25(金) 11:22:19.17
>>741
何お前If文のなかでTry Catchしたらいけないとでも思ってんの?
バカじゃねw
754デフォルトの名無しさん:2013/01/25(金) 11:23:42.48
>>740は今年一番のバカに決定な
755デフォルトの名無しさん:2013/01/25(金) 11:26:02.85
>>750
なんだ、ただのお子様か。
756デフォルトの名無しさん:2013/01/25(金) 12:07:43.90
>>729
そもそもこいつがTry Catch Finallyを理解せずにいちゃもんつけてんだよな

>「Finally処理」が最後の処理になってないんだけど

バカすぎるw
構造化例外処理くらい知ってろよ
757デフォルトの名無しさん:2013/01/25(金) 12:14:49.51
758デフォルトの名無しさん:2013/01/25(金) 12:38:36.67
finally厨はもういいって
759デフォルトの名無しさん:2013/01/25(金) 16:16:47.23
では頭の体操です

Debug.Print DateAdd("d", CDate("2013/1/25"), 7)

2013/02/01
ですが

Debug.Print DateAdd("h", CDate("2013/1/25"), 7)

1904/09/22 19:00:00

なぜでしょう
760デフォルトの名無しさん:2013/01/25(金) 16:36:05.11
>>759
知るかよ
761デフォルトの名無しさん:2013/01/25(金) 16:53:59.67
後出しって言われてブチギレてる奴がいるなw
762デフォルトの名無しさん:2013/01/25(金) 17:12:28.81
>>759
現実世界で誰かにかまってもらえ
763744:2013/01/25(金) 17:13:27.88
>>761
>>739を書いたのも俺なんだが、>>742を書いたのも俺。
ブチ切れた書き込みが数件あるが、いずれも俺ではない。
764デフォルトの名無しさん:2013/01/25(金) 17:17:07.30
finally厨はもういいって
765デフォルトの名無しさん:2013/01/25(金) 18:03:42.51
>>759
パラメータの順序が変ってことかな。
Date型は整数部が日数、小数部が時間で実数型と互換があるから、
それなりに動いてしまうわけだ。

Debug.Print DateAdd("h", 7, CDate("2013/1/25"))
766デフォルトの名無しさん:2013/01/25(金) 20:40:47.57
正解でございますー
767デフォルトの名無しさん:2013/01/27(日) 09:27:50.56
つか、挑戦しようが、受け取ろうがどうでもいいけどさ...
コードはもっと単純に書けよ...
On Error Resume Next
でこんがらがる様なら、そのコードそのものが間違ってんだよ...
768デフォルトの名無しさん:2013/01/27(日) 12:31:38.78
私なら多分例外だって、信じてるはずだわね、あなたも
針で刺すような 口づけの後、窓の外、気まずさを逃したの
769デフォルトの名無しさん:2013/01/28(月) 14:54:04.89
>>743
> これじゃダメなの?
ダメだよ。ダメダメ。却下。
770デフォルトの名無しさん:2013/01/28(月) 22:06:14.57
理由を言えない>>769みたいなレスを見ると
逆に良いって事なんじゃないかって思えてしまうな。
2ちゃんねるのやり過ぎかw。
771デフォルトの名無しさん:2013/01/29(火) 08:33:44.49

正論!
772デフォルトの名無しさん:2013/01/31(木) 01:25:41.60
>>770
理由はね…Javaの try-catch-finally…の働きを見てみよう。>>752
>関数の終わりだからFinallyじゃねんだよ!
とある。
もう少し言えば>>756
>Try Catch Finallyを理解せずに
と言ってる。

finallyってね、tryで囲んだ中で例外が起ころうが起こるまいが
最終的にはfinally内の処理を行うっていう記述なんですよ。

関数の終わりだからfinallyじゃないんですよ。try内の最終処理なんですよ。
tryで囲むという事は>>742が優しく教えてくれているように
>TryCatchしたい対象を絞るって感じですね
こういう事なんですよ。そこに●●の例外が起こる可能性というのを
明確に理解した上で、意図的にtry-catchで囲みます。

finallyの使い方の一例としては、既にデータベースアクセスが例に挙げられているけど
それと同じように、openしたらcloseしなきゃならないような場合、finally内に
closeの記述を入れるのは定番かと思います。例外が生じてcatchしようが
closeは必ずしなゃなんないでしょ。
773772:2013/01/31(木) 01:27:01.93
>>770
というように、理由を言えないとかではなくて、
スレを読んでいればもうそこに理由が書かれてるんですよ。
774デフォルトの名無しさん:2013/01/31(木) 05:08:51.63
そもそもVBなのにJavaのように書こうとするのが愚か。
775デフォルトの名無しさん:2013/01/31(木) 11:56:25.20
>>774
Try Catchふうに書くとこうなるねって会話が行われてたわけで
そもそもとかいうのはちゃぶ台を返すようなもの。
将棋で負けそうになって将棋盤をひっくり返すようなもの。
愚かなのはお前だけ。
776デフォルトの名無しさん:2013/01/31(木) 12:09:48.43
>>775
どうしてもJava風に書かなければいけない理由があるのか?
その背景がないのなら意味がない。
777デフォルトの名無しさん:2013/01/31(木) 12:23:43.95
>>776
会話の前提に従うことができないのならその会話に参加する意味はないな。
そりゃそうだ。
778デフォルトの名無しさん:2013/01/31(木) 12:53:08.78
>>776
try...catchはJavaだけじゃないし。モダンな構造化言語には一般的だろ。
779デフォルトの名無しさん:2013/01/31(木) 12:54:51.82
VB.NET使えよって煽りがまだなのがあれだ。

Try-Catch-Finallyを全機能コーディングで実現しようと思ったら
こんなに大変になるって言うのを証明できれば十分。
どっか漏れができるんだよね。
780デフォルトの名無しさん:2013/01/31(木) 13:55:32.64
>>778
VBにtry...catchなんてないのにアホか。
781デフォルトの名無しさん:2013/01/31(木) 13:57:18.19
>>778
finallyの部分が特に糞だと言われてんだけど
782デフォルトの名無しさん:2013/01/31(木) 14:03:30.45
on error resume next
しておいて
if err then
exit sub
end if

がよい。
783デフォルトの名無しさん:2013/01/31(木) 17:19:47.59
>>746でいいじゃん
784デフォルトの名無しさん:2013/01/31(木) 17:41:31.73
俺はプログラムのセンス無いと思ってたが
おまえらもセンス無いのな、俺と大差ない
センスある奴ってやっぱごく限られた人間だけなのがよく分かる
785デフォルトの名無しさん:2013/01/31(木) 17:59:28.69
>>782
いちいちエラーコードをチェックしなくて良いように、今の実行時エラーの仕組みがあるんだから、
それをやっちゃ元も子もない
786デフォルトの名無しさん:2013/01/31(木) 18:49:08.65
コールスタックの一番最初、例えばボタンのクリックなんかでは
sub Command1_click
on error goto err

いろいろ

 exit sub
err:
 call 共通エラー処理(err)
end sub


それ以外のコードでは以下のコードを基本として
sub foo
on error goto err

いろいろ

 exit sub
err:
 終了処理
 Err.raise Err.Number
end sub


終了処理が何も要らなければ(ほとんどがこれに当てはまる)
on error gotoしないで、エラーを無視して続行できる場合は
Err.raiseしないで処理を続行させればいいでしょ?
787デフォルトの名無しさん:2013/01/31(木) 18:54:56.00
> 終了処理が何も要らなければ(ほとんどがこれに当てはまる)

なぜ終了処理が何も要らない=ほとんど当てはまるかというとね。

たとえばデータベースの切断。
あんなのはクラスにしてしまえば、
関数から抜けた時にfinallyと同じように
terminateが実行されるんだよ。
788デフォルトの名無しさん:2013/01/31(木) 19:55:49.60
>>787
try catchできないVBでの例外処理はどうしようかって議論で
finalyな処理が必要かどうかなんて議論してないぞ

あと基本GCにメモリ掃除を任せる言語でデストラクタによるDB切断とか薦められてないからな
789デフォルトの名無しさん:2013/01/31(木) 20:11:40.95
>>788
VB6のGCは参照カウンタ式だからterminateのタイミングは
きちんとプログラムで制御できるよ。
790デフォルトの名無しさん:2013/01/31(木) 20:18:23.02
>>789
基本GCにメモリ掃除を任せる言語ってのはVBのように単純なGCではない言語って意味だったんだが
まあ、そこも議論の本題ではない
791デフォルトの名無しさん:2013/01/31(木) 20:29:26.47
>>790
VB以外の言語の話をしてそれは本題ではないといってんの? バカ?

>>788
finallyはtry catchとセットのものだ。例外処理の議論をしてて
finallyを議論しないやつはにわか。そっこくこのスレを去るべきだ。
792デフォルトの名無しさん:2013/01/31(木) 20:48:30.54
構造化例外処理ならこうだろ。

Sub A()
  Dim objConnection As ADODB.connection
  Set objConnection = New ADODB.connection
  Call B(objConnection)
  If objConnection.State <> adStateClosed Then
    Call objConnection.Close
  End If
End Sub

Sub B(ByVal objConnection As ADODB.connection)
  On Error Resume Next
  Call C(objConnection)
  If Err.Number <> 0 Then
    Debug.Print Err.Description
  End If
End Sub

Sub C(ByVal objConnection As ADODB.connection)
  Call objConnection.Open
End Sub
793デフォルトの名無しさん:2013/01/31(木) 20:51:02.12
finallyがそんなに重要とは俺は思わないね。
構造化例外処理のキモは文字通り構造化されていること。

何が起ころうと実行する必要がある終了処理を実行する必要がある構文として
finallyが優れているとは思わない。

現にusingやlockがあるC#ではfinallyってそんなに出番がない。
794デフォルトの名無しさん:2013/01/31(木) 21:03:36.58
>>791
VBスレなのに何でJavaの話をする必要があるのか解らんな。
try catchなんて論外だろw
795デフォルトの名無しさん:2013/01/31(木) 21:08:30.64
いやだからfinallyの出番が多いか少ないかではなくて
usingはおろかtry-catchすらないVBで、try-catch-finallyの機能を処理するための構造はどうするかって話をしてたんじゃないの?

だれかあれ張ってくれ、詭弁のガイドライン
796デフォルトの名無しさん:2013/01/31(木) 21:08:58.80
VBらしい使い方してあげてよ
797デフォルトの名無しさん:2013/01/31(木) 21:13:52.58
>>794
どういうのが論内?

>>793
usingがあればfinallyがいらないという関係のものじゃないだろ。
コンパイラがusingをfinallyに書き換えてんだから。finallyがなければ
usingもない。蒸気機関なんていらない汽車に乗ればいんだからと言ってるようなもの。
パンがなければケーキを食べればいいと言っているようなもの。アンネ・フランクでも気取ってるつもりか!

>>795
でっすよねー
798794:2013/01/31(木) 21:25:28.14
>>797
VBが範囲内でしょ。
何で態々Java風な書き方しなくちゃいけないんだよ、VBで。
どうしても議論したいのであれば、どうしてもJava風に書かなければいけない理由を教えてくれ。
799デフォルトの名無しさん:2013/01/31(木) 21:29:59.87
>>798
そのVBの範囲内というのはどういうの?
VB.NETにもTry Catch Finallyがあるわけで見慣れた構文なら
一般的な開発者間での意思共有がはかどりまくりだろ。はかどりまくりだろ。
2度言いたかったから2度言いました。
800デフォルトの名無しさん:2013/01/31(木) 21:44:17.89
>>799
お前の要望なんてどうでもいいんだよ。
VBはTry Catch Finallyが存在しない言語ってことが理解できないみたいだね。
推測だけど、VBをJava風にアレンジしたのがVB.NETなんじゃねえの?w
801794:2013/01/31(木) 21:47:49.81
>>799
どうしてもJava風に書かなければいけない理由になってない。
単なる要望w
802デフォルトの名無しさん:2013/01/31(木) 21:52:39.15
>>800
俺の要望て何?俺なんか要望したかな。
なるほど、Try Catch FinallyはVBに存在しない。
VBでは例外処理がどう書かれるべきだと思う?
803デフォルトの名無しさん:2013/01/31(木) 21:54:15.16
>>801
どうしてもJavaふうに書かなければいけない理由はないよ。
VBらしいすてき実装方式を教えてもらえるならそれに鞍替え
しようと思う。どう書くべきだと思う?
804794:2013/01/31(木) 21:55:19.77
>>802
話をそらすな。
どうしてもJava風に書かなければいけない理由は?
805デフォルトの名無しさん:2013/01/31(木) 21:59:42.95
>>804
  /゙ミヽ、,,___,,/゙ヽ
  i ノ       `ヽ'
  /  >   ● |    ナイヨ☆
 彡,  ミ(__,▼_)彡ミ  
 / 、   |∪|   )
/      ヽノ //
ヽ|       /
 |       /
 ヽ /  /
  / /ヽ
(´_ /ヾ_)
806794:2013/01/31(木) 22:14:34.21
>>805
だったらTry Catch Finallyにこだわる必要が全くないのだが。
普通にVBの例外処理を書けばいいだけのこと。
807デフォルトの名無しさん:2013/01/31(木) 22:15:42.42
ナイヨ☆しようと思う。どう書くべきだと思う?
808デフォルトの名無しさん:2013/01/31(木) 22:22:43.77
>>806
うん、>>794がTry Catch Finallyにこだわる必要はまったくない。
Try Catch FinallyにこだわらないふつうのVBの例外処理はどういうの?
>>794はVBにTry Catch Finallyがないという理由でTry Catch Finallyを模したもの
よりそれがすぐれていると思っている。普通にといわれても>>792>>786
普通といえば普通。>>794の頭の中にある普通のVBの例外処理はどういうの?
809794:2013/01/31(木) 22:30:55.44
>>808
>>786,792の例外処理は俺も普通だと思うよ。
で何が不満なの?
810デフォルトの名無しさん:2013/01/31(木) 22:30:58.34
構造化例外処理だろ?
finallyは必須の機能じゃないよ。

finallyがなくても構造化例外処理になる。

C++がそうだ。
811デフォルトの名無しさん:2013/01/31(木) 22:51:15.34
>>809
不満はない。>>794の考えを聞いてる。それだけ。議論というのは
ほかの人の意見を聞くことに重きが置かれるべきだと思う。だから聞いてる。
>>792は俺が書いたものだけどそれはJavaでのこの形を参考にしたもの。

try {
  try {
  
  } catch {

  }
} finally {

}

>>794は普通にVBの例外処理を書けばいいと思っていて>>792を普通のVBの例外処理
と認識するなら>>792のように書けばいいということになるから、VBには
Try Catch FinallyがないからJavaをまねをすべきじゃないということと
はちょっと矛盾するよ。
812デフォルトの名無しさん:2013/01/31(木) 23:52:01.10
デストラクタがない言語でfinallyがないとちょっとしんどい
813809:2013/01/31(木) 23:53:31.30
>>811
書いた本人だから>>792はtry catch finallyを参考にしたと言えるけど、
>>792のコード自体Java臭はしないし、普通のVBのコードだと思う。

Javaを意識せずにVBのコードを書いても>>792のようなコードはありえるものだと思う。
>>811の話はプログラムの構造の話なんで言語はそんなに問題じゃない。
今回のTry Catch FinallyをVBのステートメントに強引に置き換えようとしていたから
おかしな話になっていたんで無理にJava風にする必要はないだろと言っていただけのこと。
814デフォルトの名無しさん:2013/02/01(金) 00:26:24.37
>>813
たぶんみんな構造の話をしてるんだと思うよ。おかしな話にはなっていなかったと思うよ。
>>794はVBの例外処理をこう書くべきだというのはないの?
俺はtry catchをまねしてこう書くべきだと>>792を示した。
Javaの臭いを嫌悪する立場からこうするべきだという具体的なものはないの?
815デフォルトの名無しさん:2013/02/01(金) 00:43:37.28
Javaの嫌悪とか関係ない。

まず、try-catchはネストできるからと言ってネストするのは良くない。

なぜなら例外処理というのは正常系の流れと異常系の流れを
分離するものだから、ネストするとそれがごちゃまぜになる。

そしてVBのon errorはネストできないが、それはgotoの飛び先を変えればいい。
try-catchにかぎらずネストは浅くするもの。この程度制御できないわけがない。

そしてうまいコーディングをするのならclassのterminateを使えば
終了処理は不要になる。これはJavaにも当てはまる話。
816デフォルトの名無しさん:2013/02/01(金) 00:51:12.31
議論が煮詰まって最強のコードが出来上がったらそれをいただく
これぞまさに漁夫の利

さぁおまえらどんどん白熱してくれ
817デフォルトの名無しさん:2013/02/01(金) 00:53:58.19
Javaのコードとして>>811
微妙なんだよ。
818デフォルトの名無しさん:2013/02/01(金) 00:58:53.10
>>816
一般的な会議みたいな形だったら進行役の人がいて
これはこういうことでとまとめていくのだろうけど、
こういう議論の場だとどうなんだろうね。できあがるのは闇鍋コードになっちゃいそう。
819デフォルトの名無しさん:2013/02/01(金) 01:01:27.29
>>817
絶妙なJavaのコードはどんな感じ?その機能をVBで実装するとどう?
820デフォルトの名無しさん:2013/02/01(金) 01:03:32.65
>>819

関数1()
関数2()
関数3()
関数4()

上から関数が並んだ状態
これだとテストは一つのルートだけ
行えばいい。

条件分岐(try-catch含む)やループが
増えるたびコードは複雑になる。
821デフォルトの名無しさん:2013/02/01(金) 01:05:50.64
>>820
なるほど、俺はお前との会話をあきらめた。
822デフォルトの名無しさん:2013/02/01(金) 02:46:29.84
>>792に聞きたいんだが
たとえばデータを読み取るような、そのオープンしたコネクションを使う処理はどこに書くべきだとおもってるんだ?
823デフォルトの名無しさん:2013/02/01(金) 06:41:21.12
>>814
完全に後出しの話だろw
最初から構造的にどうする?って話じゃなかったし。
いい加減さ、人の話を利用して別の話にすり替えるのやめろよ。
824デフォルトの名無しさん:2013/02/01(金) 10:12:07.12
>>811
きたねーコードだな。
お前Javaプログラマに向いてないよ。
825デフォルトの名無しさん:2013/02/01(金) 10:54:28.79
俺なら、コネクションをラップするクラスを作るか、DB接続関連を全てラップするクラスを作るか、
接続済みコネクションを返す関数を作るかするね。
少なくとも、生のADODBという文字列が、コード中の至る所に登場するようなことにはしない。
あと、ByRefじゃないのか?
826デフォルトの名無しさん:2013/02/01(金) 12:19:37.80
>>822
オープンしたコネクションを使う処理はCに書かれるべきだと思ってる。

>>825
ByRefは参照渡しだよ。戻り値を複数返したいときにはByRefを使うけどどこをByRefにすべき?
827デフォルトの名無しさん:2013/02/01(金) 12:28:32.13
戻り値を複数返したいときにはByRefを使う
戻り値を複数返したいときにはByRefを使う
戻り値を複数返したいときにはByRefを使う
戻り値を複数返したいときにはByRefを使う

???
828デフォルトの名無しさん:2013/02/01(金) 12:29:52.77
>>827
メモリーを消費したくないという意味だろ?
国語力の無さに突っ込むな
829デフォルトの名無しさん:2013/02/01(金) 12:30:35.20
構造体って値で返せなかったっけ?
830デフォルトの名無しさん:2013/02/01(金) 12:39:03.11
>>826
ここ
> Sub B(ByVal objConnection As ADODB.connection)
> Sub C(ByVal objConnection As ADODB.connection)
831デフォルトの名無しさん:2013/02/01(金) 12:41:12.97
>>827
俺がByRefを使うときといったら戻り値を複数返したいときだな〜ていう意味。

>>828
違うよ。俺がByRefを使うときといったら戻り値を複数返したいときだな〜ていう意味だよ。
俺の国語力は108まである。
832デフォルトの名無しさん:2013/02/01(金) 12:47:59.76
>>830
ConnectionのインスタンスはAで作られるからB、Cの引数を
ByRefにする必要はないよ。B、Cの引数をByRefにするとB、Cでインスタンスを
入れ替えられる危険性が生じる。B、Cでインスタンスを入れ替えられると
Aでリソースが解放されることが保証されなくなる。だからB、Cの引数は
ByValにすべきだと俺はそう思ってる。
833デフォルトの名無しさん:2013/02/01(金) 13:05:51.47
>>832
VB6は参照カウンタでオブジェクトの解放を行うから、リソースの解放漏れはないよ。
834デフォルトの名無しさん:2013/02/01(金) 13:08:21.16
>>833
そんな話はしてない。
835デフォルトの名無しさん:2013/02/01(金) 13:14:40.81
>>834
え?
> B、Cでインスタンスを入れ替えられると
> Aでリソースが解放されることが保証されなくなる。
って書いてたから、喩えそんなことがあってもリソースが解放されないことなんてないよって書いたんだけど?
836デフォルトの名無しさん:2013/02/01(金) 13:18:05.80
>>835
うん、そうなんだろうなとは思うけど、ByValにすべきかByRefにすべきか
という話をしてるんであって、参照カウンタ行うリソースの解放と
俺が書いたAで行われるリソースの解放と言葉の定義が変わってるから
そういうのはやめてくれって意味でそんな話はしてないってこと。
837デフォルトの名無しさん:2013/02/01(金) 13:21:51.84
>>836
> 参照カウンタ行うリソースの解放と
> 俺が書いたAで行われるリソースの解放と言葉の定義が変わってるから
いや、君が思ってる通りの意味で、リソースの解放漏れは無いよって書いたつもりだけど。
それともアレなの?ADBDBって、オブジェクトが消滅してもコネクションが残ってたりするの?
838デフォルトの名無しさん:2013/02/01(金) 13:24:33.89
>>837
そういうこというと話が発散しちゃうんだよね。現にいまByValをByRefに
すべきかという話がADODBのオブジェクトがどうなんだって話になってる。
そういうのやめてくれっていってんだ。
839デフォルトの名無しさん:2013/02/01(金) 13:29:25.51
>>828
国語力の無さは関係ない。
VBという言語をきちんと理解しているかどうかだ。
840デフォルトの名無しさん:2013/02/01(金) 13:30:18.43
>>838
俺は、ByValかByRefかはどうでもいいよ。好きにやれよ。
俺はね、「リソースが解放されることが保証されなくなる」とかいう適当なこという奴に敏感なだけなんだよ。
841デフォルトの名無しさん:2013/02/01(金) 13:32:00.92
>>831
何が言いたいのかさっぱりw
ByRefってどんなときに使うのか、戻り値とは何なのかきちんと理解してないね。
こういう奴の話を聞くと疲れるだけ。
842デフォルトの名無しさん:2013/02/01(金) 13:33:06.39
>>838
あ、ひょっとして「リソースの解放がされない可能性があるから、set obj = nothingは必須」って言ってた人?
843デフォルトの名無しさん:2013/02/01(金) 13:47:25.52
>>832
> B、Cでインスタンスを入れ替えられると
> Aでリソースが解放されることが保証されなくなる。だからB、Cの引数は
> ByValにすべきだと俺はそう思ってる。

BもCも自分で書く関数なのに「入れ替えられると」なんて書くから、なんのこっちゃってなる。

書くんなら、「BもCもobjConnectionを再設定しないという表明のためByValにした」みたいに言えよ。
そういうことなんだろ?
844デフォルトの名無しさん:2013/02/01(金) 14:03:09.15
>>843
>「BもCもobjConnectionを再設定しないという表明のためByValにした」みたいに言えよ。

そう予測したということは問題なく伝わるってことだ。証明してくれてありがとう。

何かこうさまつなところにばかり噛み付いてくるな。昨日あの店で食べたアイスクリームが
おいしかったって話してたら「違う、それはバニラアイスクリームだ、バニラの香りこそが
あのアイスクリームの味を際立たせるものだからバニラアイスクリームと言うべきだ、
お前らは間違ってる」と激昂するコミュニケーションブレイカーという名前のラスボスだ。俺はビアンカ。
845デフォルトの名無しさん:2013/02/01(金) 14:28:47.52
>>844
> 何かこうさまつなところにばかり噛み付いてくるな。

みたいな愚痴いわずに、最初からちゃんと説明できるようにしような。
846デフォルトの名無しさん:2013/02/01(金) 14:36:25.14
>>845
きちんと伝わることはお前自身が証明して見せたんだから
それが説明できていることのなによりの証拠だ。
自分でその証拠を提示しておいて説明できてないと言い張る
お前はただのかまってちゃん。ByValとByRefの違いがどうでもいいと
思っているのに俺にレスしてくるお前はタダノ・カマッテ・チャン。
カマッテ・チャンという名のアクションスター。俺はビアンカ。
847デフォルトの名無しさん:2013/02/01(金) 14:45:24.05
>>846
話の流れで忖度できただけで、説明が下手なのは変わりない。
言ってくれる奴がいるだけ幸せなんだが。
848デフォルトの名無しさん:2013/02/01(金) 14:47:17.14
>>832
> B、Cでインスタンスを入れ替えられると
> Aでリソースが解放されることが保証されなくなる。だからB、Cの引数は
> ByValにすべきだと俺はそう思ってる。

だからリソースの解放はTerminateでやるべきだってことだよ。
参照が0になればリソースの解放が行われる。
849デフォルトの名無しさん:2013/02/01(金) 14:52:20.46
>>846
どう見ても、お前がかまってちゃん
長文とageるのやめろ
850デフォルトの名無しさん:2013/02/01(金) 15:01:21.10
>>815
同意。

下手な奴は、業務上想定できるエラーも例外として定義して、try-catchをネストさせ、何段階ものcatchを書き、
例外を再スローしたりしなかったりにぎりつぶしたりとか、もう混沌としてたりする。
851デフォルトの名無しさん:2013/02/01(金) 15:01:40.58
>>847
話の流れで意味がわかるんなら説明できてるってことじゃねえか。何言ってるんだ。
お前が幸せをあたえてるっていう思いに浸れるんならいんじゃねえの。
俺はそんなお前に絡まれるという不幸な目にあったビアンカだけどな。

>>848
>>832はByValをByRefにするべきかという話だったんだけど、それはどういう話?
前提が違う話をしても話がすれ違うばかりだ。
852デフォルトの名無しさん:2013/02/01(金) 15:09:35.98
つか、ByRefにするかByValにするかは、実引数そのものを変更するかしないかで選択するものにすぎないのに、
何をごちゃごちゃ言ってるんだよって話だ
853デフォルトの名無しさん:2013/02/01(金) 15:11:53.67
>>851
何度も説明を重ねないと、人に真意が伝わらないのを、普通は説明下手って言うんです。
854デフォルトの名無しさん:2013/02/01(金) 15:20:23.88
>>853
相手がこちらの意図を理解しようと努力する一般的な人であるという前提が
成立するならそのとおりだね。ByValとByRefの話をしてるときにByValとByRefは
どうでもいいといってしまう天然アスペだと前提は成立しない。
855デフォルトの名無しさん:2013/02/01(金) 15:24:00.92
>>854
間違った事を理由にしてたから、それは違うと指摘しただけだよ。
いい加減、間違いを認めろよ。
856デフォルトの名無しさん:2013/02/01(金) 15:26:12.45
俺の言ってることがわからないのは、俺が説明下手だからじゃない
お前らが理解しようとしてないだけなんだ

ってことですね、わかります
857デフォルトの名無しさん:2013/02/01(金) 15:27:55.37
つか、構造化例外の例だかなんだか知らないが、>>792のコードは筋が悪い
858デフォルトの名無しさん:2013/02/01(金) 15:38:50.71
>>855
俺はByValとByRefの話をしていて、お前はそれはどうでもいいという話をしている。
話の前提が違ってるからそもそも論理が展開される筋道が違うわけで、
トマトが甘くておいしいという話をしてる人に
「どこが甘いんだ、甘いというのはメロンのことを言うんだ」と怒りを爆発させている
大噴火おじさんでしかない。俺はビアンカ。

>>856
お前らというよりお前だけど、まあそういうこと。
859デフォルトの名無しさん:2013/02/01(金) 15:40:25.25
>>858
能書きはいいからsageろ。
860デフォルトの名無しさん:2013/02/01(金) 15:40:40.39
>>857
お前が考える筋のいいコードを見せちゃいな。
861デフォルトの名無しさん:2013/02/01(金) 15:41:19.88
「A、だからB」のAが間違ってるよと指摘するとファビョるの巻き
862デフォルトの名無しさん:2013/02/01(金) 15:41:59.05
少なくともVB6系では、オブジェクトをByValでは渡せないんだぜ...
863デフォルトの名無しさん:2013/02/01(金) 15:42:10.68
>>860
筋が悪い理由聞いた方がいいんじゃないの?
864デフォルトの名無しさん:2013/02/01(金) 15:46:03.15
説明が下手な奴の例:
・全く関係無いたとえをして、話を発散させる
865デフォルトの名無しさん:2013/02/01(金) 15:46:51.59
どうでもいいけど、sageろや
ど素人か
866デフォルトの名無しさん:2013/02/01(金) 15:49:31.18
>>862
渡せるんだぜ

>>863
コード見せてもらうほうが手っ取り早いかと思って
867デフォルトの名無しさん:2013/02/01(金) 15:57:01.42
>>865
メール欄にまで噛み付きだしたよ。天然アスペここに極まれり。
868デフォルトの名無しさん:2013/02/01(金) 16:49:35.35
> 817 :デフォルトの名無しさん:2013/02/01(金) 00:53:58.19
> Javaのコードとして>>811
> 微妙なんだよ。

> 857 :デフォルトの名無しさん:2013/02/01(金) 15:27:55.37
> つか、構造化例外の例だかなんだか知らないが、>>792のコードは筋が悪い


お前らは>>811>>792は筋が悪いと言ったが、それよりすぐれたものを書くことができなかった。
つまり、>>792>>811を書いた俺はお前らに対して完全勝利をはたした。
いまここに俺が大勝利したことを宣言する。
869デフォルトの名無しさん:2013/02/01(金) 16:52:07.13
> お前らは>>811>>792は筋が悪いと言ったが、それよりすぐれたものを書くことができなかった。

>>820に書いてあるだろ。
優れたコードってのは、何かを書くんじゃなくて
何も書かなくていいようにするってことだ。

コードは書くとバグのもとになる。
だからコードを減らすことが、優れたコードなんだよ。
870デフォルトの名無しさん:2013/02/01(金) 16:57:45.10
>>869
お前はコードを減らすという名目の元に例外処理を行う具体的なコードを
示すことができずに、条件分岐が増えるほどコードが複雑になるというプログラミング上の
ごくごくあたりまえの一般論を語ることしかできなかった。それはさながら家に火を
つければ火事になるといってるようなものであり、まったく1ミクロンも意味のない空虚な
言葉でしかなかった。つまりお前は>>792を具体的に示した俺に大敗北をきっした。
871デフォルトの名無しさん:2013/02/01(金) 17:04:16.63
>>792は汚すぎるコードだな。
まずサンプルとしてダメ。例外以外のことをやってない
例外処理が主になってる。アホらしい。
サンプル書くならこうだろ。

まずデータベースを使ったfoo()という処理を行いたい。
void main() {
 foo()
}

これがスタートとなるべきメインの処理だ。
データベース関連のコードを加える
void main() {
 Con con = new Connection();
 MyClass my_class = new MyClass(con);
 my_class.foo();
}

あ、VBじゃないというツッコミはいらんよ。
どの言語でも同じだから。
あとこれに例外処理を加える。

void main() {
 try {
  Con con = new Connection();
  MyClass my_class = new MyClass(con);
  my_class.foo();
 } catch(e) {
  共通例外処理(e);
 }
}
これがシンプルな例外処理、無意味に複雑にするのは馬鹿のやること。
872デフォルトの名無しさん:2013/02/01(金) 17:05:29.22
>>792のコードが糞なののは、

コードレビューしたら、

で? 何がやりたいの? って言われる所。

まず「何がやりたいの?」という質問に日本語で答えろ。
873デフォルトの名無しさん:2013/02/01(金) 17:06:37.51
どうでもいいけど、国語力が108って・・・。
プ
874デフォルトの名無しさん:2013/02/01(金) 17:12:48.26
>>871
例外処理をどう書くかて話なんだから例外処理が主になるのはとうぜん
のことで、fooを追加しただけでなんとかなると思ってるお前の頭は虫に食われてんのか
と心配になる。お前のfooは俺のCでしかない。そしてお前のコードはConnectionのリソースを解放せず
メモリリークするようにしただけだ。つまり俺のコードより数段劣る。俺のコードでは例外処理をした上で
ConnectionのClose処理が行われるようになっている。
875デフォルトの名無しさん:2013/02/01(金) 17:14:45.15
>>874
例外処理の正しい書き方とは、
本来のコードとは分離させること。

ネストしている時点でそれは正しい書き方とはいえない。

> Connectionのリソースを解放せず
スコープから消えたら解放される。
876デフォルトの名無しさん:2013/02/01(金) 17:17:04.23
>>872
try {
  try {
  
  } catch {
  
  }
} finally {

}
これをやりたいのと返す刀で返してレビュワーの頭をレビューするべきなんじゃないかと
手元の紙にメモる。コードレビューしたらそうなる。
877デフォルトの名無しさん:2013/02/01(金) 17:17:15.29
>ネストしている時点でそれは正しい書き方とはいえない。

そうでもない
878デフォルトの名無しさん:2013/02/01(金) 17:17:57.67
>>866
それは、気のせいだよ...
めんどくさいから詳しい説明は端折るが...ByValでも、ByRefでも、全く同じオブジェクトしか渡せないよ
879857:2013/02/01(金) 17:18:33.08
>>860
ダメだしで勘弁。

まず、A()、B()、C()にちゃんとした関数名を付けてみて。
(念のため説明すると、今A, B, Cという名前にしてるというのが悪いというわけじゃ無いぞ)

そして、オープンしたコネクションはC()で使うということだが、その使用するコードをC()に追加することを想像する。

さらに、別のオープンしたコネクションを使う場面を考える。

さて、そのコードはどうなる?
880デフォルトの名無しさん:2013/02/01(金) 17:18:51.52
>>877
正しくない。

そもそもどちらがシンプルなコードになってるか見れば答えは明らか。

力を入れる場所が違っている

俺はコードをシンプルにするようにプログラミングしていく。
馬鹿はコードを複雑に書いてどや顔する。
881デフォルトの名無しさん:2013/02/01(金) 17:20:36.61
>>875
>>871はスコープを抜けたらリソースが解放されるようになってないよ。
どの言語でも同じだっていってるけど、それは違うよ。それは気をつけないと
メモリリークするよ。
882デフォルトの名無しさん:2013/02/01(金) 17:23:06.21
>>881
> スコープを抜けたらリソースが解放されるようになってないよ。
Connectionはただのクラス。
データベースの接続オブジェクトはConnectionクラスに内包されている。
データベースの接続オブジェクトの解放はConnectionクラスの中のTerminateで行なっている。

お前にはそういうコード、作れないの?
883デフォルトの名無しさん:2013/02/01(金) 17:25:42.30
>>878
ちょっとお前がなにをいってるのかわからなくなってきた。

> 862 :デフォルトの名無しさん:2013/02/01(金) 15:41:59.05
> 少なくともVB6系では、オブジェクトをByValでは渡せないんだぜ...

> 878 :デフォルトの名無しさん:2013/02/01(金) 17:17:57.67
> >>866
> それは、気のせいだよ...
> めんどくさいから詳しい説明は端折るが...ByValでも、ByRefでも、全く同じオブジェクトしか渡せないよ


ByValではオブジェクトを渡せないと言ってたのが、
ByValでも同じオブジェクトしか渡せないと言ってる。

ByValでオブジェクトを渡せるの?ByValでオブジェクトを渡せないの?どっちなの?
884デフォルトの名無しさん:2013/02/01(金) 17:27:52.80


ある作業をするときにデータを一時ファイルに書き出し、そして処理を行う。
一時ファイルはtempディレクトリ作る。ただし名前は既存のものと被らないようにする
この時途中でエラーが起きたら、一時ファイルは削除する

俺ならこう書くね。

Sub main
On Error Goto err
 Dim p as Process
 Set p = new Process
 Call p.run
 Exit Sub
Err:
 MsgBox Err.Description
End Sub

Processクラスの内容は省略。作れないわけ無いよね?
885デフォルトの名無しさん:2013/02/01(金) 17:29:49.47
>>882
俺にはというかすくなくともJavaではできないよ。デストラクタがないから。
お前はどの言語でも同じだっていってたから、それは違うよってこと。
886デフォルトの名無しさん:2013/02/01(金) 17:30:47.70
VBで考えろよ
馬鹿なの?
887デフォルトの名無しさん:2013/02/01(金) 17:33:04.28
>そもそもどちらがシンプルなコードになってるか見れば答えは明らか。

それほど明らかでもない
888デフォルトの名無しさん:2013/02/01(金) 17:34:25.50
はい、ここで「Javaでは出来ない」という話が出て来ました。

言語的に劣っているものと同じコードを書かないといけないのでしょうか?
おかしな話ですね。

Javaではできないから、こんなふうに書かざるをえない。
だからVBでも同じようにするべきだ。
意味がわかりません。
889デフォルトの名無しさん:2013/02/01(金) 17:34:59.44
>>883
非常にめんどくさいので、説明は割愛させて欲しい...

要するにオブジェクトに関して言うと、ByValで指定しても、ByRefで指定しても、結果的には全く一緒だって事
内部の処理は、ByValはByValの処理、ByRefはByRefの処理はされているが
ByValで渡しても、ByValに期待する結果にはならない

いやVBを使う人には、ByValで期待する結果になるのか?
890デフォルトの名無しさん:2013/02/01(金) 17:35:27.58
>>879
俺終止形で命令するやつって大っ嫌い。
言いたいことあるなら質問という形にするんじゃなくて先に言って。
うぜえだけだから。あたし何歳に見えるー?と同じ。うざいだけ。
891デフォルトの名無しさん:2013/02/01(金) 17:35:40.84
デストラクタが無い言語はオブジェクト指向言語を名乗るな
http://d.hatena.ne.jp/shawshank99/20121005/1349395291

4. try-catch + リソース 文ができた。
http://d.hatena.ne.jp/shawshank99/20110808/1312769605

try catch 内でリソースを扱う場合、finaly で resource.close() をする必要がある。
場合によっては try-catch がたくさん出来たり、 try-catch のネストが発生してしまう場合があった。

しかし Java7 様のおかげで、勝手に close してくれるようになります。
C# の using 文とほぼ同等の機能。もちろん、通常終了時だけじゃなく
Exception 発生時にも close してくれる。( close 以外の場所で Exception が発生した場合 )
892デフォルトの名無しさん:2013/02/01(金) 17:37:34.63
どうや? お前が実はJavaにも
無知だってわかったかい?
893デフォルトの名無しさん:2013/02/01(金) 17:38:02.09
>>885
>>882のような処理はJava7でできるようになったで。
894デフォルトの名無しさん:2013/02/01(金) 17:39:06.46
>>888
> Javaではできないから、こんなふうに書かざるをえない。
> だからVBでも同じようにするべきだ。

これは俺が言ったことじゃなくてお前が言ったこと。
お前は意味がわからない言葉を自分で考えてそれに自分で意味がわからない
といっているだけだよ。むなしいだけだね。

JavaでできることとVBでできることとが違うっていう認識があるんなら
どの言語でも同じっていうのは成り立たないよ。
895デフォルトの名無しさん:2013/02/01(金) 17:40:36.91
http://d.hatena.ne.jp/shawshank99/20110808/1312769605
のこのコード、

public static void main(String[] args) throws IOException {
 try ( FileWriter fw = new FileWriter("sample.txt") ) {
  fw.write("hoge");
  fw.write("huga");
 }
}

発想がまるっきり>>884と同じだね。

スコープが抜けたら自動的にリソースの解放処理を行う。
この発想によってコードはよりシンプルになる。
896デフォルトの名無しさん:2013/02/01(金) 17:41:50.02
>>894
どの言語でも同じなのは考え方なw
そりゃ言語が違うんだから書き方は違うに決まってるよw
897デフォルトの名無しさん:2013/02/01(金) 17:45:51.03
>>890
> 言いたいことあるなら質問という形にするんじゃなくて先に言って。

まず、A(), B(), C()に具体的な名前を付けることができないとすれば、それはA(), B(), C()の
凝集度が低いことの証明になる。

次に、C()内部でデータベースをオープンするのはまずい。
C()と同じような立場のD()を作る事を想像すると、その呼び出しシーケンスはどうなるか?
D()でデータベースをオープンしないのなら、なぜC()ではオープンするのだろうか?
898デフォルトの名無しさん:2013/02/01(金) 17:46:51.01
>>896
うん、で、>>871のJavaで示されたコードはメモリリークするよっていってんの。
899デフォルトの名無しさん:2013/02/01(金) 17:49:04.50
どの言語でも同じ「考え方」でいうと
コードはシンプルな方がいい。

シンプルなコードを目指すとtry-catchのネストなんて
汚いコード以外の何者でもないのだ。

まあJava6まではリソースの自動解放ができなかったのだから
仕方なくtry-catchのネストなんて汚いコードを書かざるを得なかったかもしれないけど
その汚いコードと同じ書き方をするべきなんてのは間違っているわけだ。

Java7では文法が改良され、リソースの自動解放ができるようになった
それは望まれた機能だったから追加された。
そしてよりシンプルにコードが書けるようになった。

VBでもシンプルなコードにするのがいいに決まっている。
考え方は一緒だが、書き方は違う。
900デフォルトの名無しさん:2013/02/01(金) 17:49:50.88
>>897
> うん、で、>>871のJavaで示されたコードはメモリリークするよっていってんの。

Javaのコードなんて一言も言ってないけど?
コンパイル通らないでしょ。
901デフォルトの名無しさん:2013/02/01(金) 17:49:59.65
>>897
だからさ、質問という形じゃなくて考えをまとめて自分の頭の中で
結論を出してからそれを書いてよ。こうするべきだというのもあわせて
提示してもらうのが理想だけどもないならないでかまわないから、
これはこういう理由でこうするべきだっていうのを示して。
902デフォルトの名無しさん:2013/02/01(金) 17:52:34.69
>>900
ほんとだ、Javaじゃないのね、デストラクタが存在するJavaのような
コードで書くとそうなってどの言語でもそれは変わらないっていってるのね。
どの言語にもデストラクタが存在するといってるわけだから、Javaにデストラクタ
が存在しないことを述べた俺が正しいということでいいね。
903デフォルトの名無しさん:2013/02/01(金) 17:54:37.81
>>901
結論は出ている。

A(), B(), C()は凝集度が低いように見える。
だがそれは君がどういうつもりで関数分割したのかにもよる。
だから、具体名を付けてみてと言っている。

そして、C()でデータベースをオープンするのはまずい。

どうすれば良いかはあきらか。
オープンしたコネクションをC()に渡せば良い。
904デフォルトの名無しさん:2013/02/01(金) 17:55:28.82
> Javaにデストラクタ
> が存在しないことを述べた俺が正しいということでいいね。

Java7ではデストラクタの代わりとなるものがあるって
さっきリンク書いただろ。読んでないのか?
905デフォルトの名無しさん:2013/02/01(金) 17:56:21.05
> オープンしたコネクションをC()に渡せば良い。

ちょっとこれは誤解を招くので訂正する。

オープンしたコネクションを使う場合は、その関数にオープンしたコネクションを渡す仕組みにするのが良い。
906デフォルトの名無しさん:2013/02/01(金) 17:56:51.49
>>903
全くその通り

汚いコードをだして汚いコードを真似して書いてみろと
言われても、なんでお前そんなコード書くんだよ?
まず最初にお前の汚いコードから直そうなとしか思えない。
907デフォルトの名無しさん:2013/02/01(金) 18:04:31.31
つーか、関数じゃなく、クラスで処理しやがれ
908デフォルトの名無しさん:2013/02/01(金) 18:08:33.07
>>903
関数を分割した意図はこれをやりたかったから。
これで俺がどういうつもりかお前はわかるから俺が名前を変えるまでもなく凝集度がわかるな。
try {
  try {
  
  } catch {
  
  }
} finally {

}

>>904
代わりになるものだね、つまりデストラクタは存在しないということでいいね。

>>905
BでコネクションをオープンしたらErr.Numberのチェックが2つ必要になる。
VB.NETやC#ではTryブロックの中でコネクションをオープンするだろ。
つまり俺のコードは直感的にわかりやすい。お前が言ってるのはコードが
増えるだけの悪いコード。
909デフォルトの名無しさん:2013/02/01(金) 18:11:15.56
ちょっと病気かもね
910デフォルトの名無しさん:2013/02/01(金) 18:11:54.44
Bでコネクション・・・だからな
推して知るべし
911デフォルトの名無しさん:2013/02/01(金) 18:12:17.71
>>908
> BでコネクションをオープンしたらErr.Numberのチェックが2つ必要になる。

「Bでコネクションをオープンした」場合のことを言っているのでは無い。
C()でオープンするのなら、その他のコードはどうなるのかということを考えてくれと言っている。

*

もう今日は帰るので、もっと具体的に考えることができる例を書いとく。

ある画面Form1のButton1をクリックしたら、マスターのsectionsとusersを検索して
画面に表示しなければならない。

・sectionsを検索するコードはA(), B(), C()のどこに実装するのか
・usersを検索するコードはA(), B(), C()のどこに実装するのか
・Button1のクリックイベントハンドラは、A(), B(), C()のどれを呼ぶのか
・Button1のクリックイベントハンドラが別の関数を呼んで、その中でデータベースの検索をする場合、
 その呼ばれる関数には何という関数名を付け、A(), B(), C()はどう呼ぶのか
・Form2のButton1をクリックしたらusersを検索する必要があるのだが、そのコードはどうなるのか
912デフォルトの名無しさん:2013/02/01(金) 18:13:01.66
>>908
> 代わりになるものだね、つまりデストラクタは存在しないということでいいね

デストラクタの代わりになるものがあるから
同等のコードが書けると認めたってことでいいかい?

俺が言いたいのはデストラクタそのものがあるかどうかではないからさ。
VBだってデストラクタではなくTerminateだしな。
913デフォルトの名無しさん:2013/02/01(金) 18:14:04.29
>>908
> 関数を分割した意図はこれをやりたかったから。

そもそもなんでそんな汚いコードをやりたいと思うの?
まず話はそこからなんだが。
914デフォルトの名無しさん:2013/02/01(金) 18:14:10.34
ちょっと違うだろ
915デフォルトの名無しさん:2013/02/01(金) 18:14:53.28
>>908
> BでコネクションをオープンしたらErr.Numberのチェックが2つ必要になる。

汚いコードを書くお前は、やっぱり汚いコードを思いつく。
なんでそんなチェックが必要になるのか、
やっぱり根本的な発想がダメなんだろうな。
916デフォルトの名無しさん:2013/02/01(金) 18:15:30.34
>>911
もういいわお前。俺はお前の意見を聞きたいの。質問を聞きたいんじゃないの。
自分の意見をきちんと述べることができなかったお前が大敗北したということに決定な。
917デフォルトの名無しさん:2013/02/01(金) 18:16:15.22
大敗北とか
勝負してたのかね?
918デフォルトの名無しさん:2013/02/01(金) 18:16:58.19
大敗北・・・2chではあまり聞かない言葉だ
919デフォルトの名無しさん:2013/02/01(金) 18:18:29.20
>>916
まだ帰ってなかったりして。

>>911の具体例を瞬時に想定できないようなコードだから、筋が悪いと言っている。
悪くないというなら、>>911の回答を月曜までに書いといてくれ。
休みの間は2ch見ないから。
920デフォルトの名無しさん:2013/02/01(金) 18:19:03.09
コードをシンプル側に持っていくって
発想がないのかねぇ。
921デフォルトの名無しさん:2013/02/01(金) 18:19:36.99
厳密なデストラクタがある言語こそ限られてると思うが
922デフォルトの名無しさん:2013/02/01(金) 18:20:16.85
だな
それに、大学のレポートかよ?
923デフォルトの名無しさん:2013/02/01(金) 18:21:14.18
>>921
正確にはデストラクタじゃなくても
スコープを抜けた時に呼び出される仕組みがあればいいんだよ。

たとえばJava7にはそれがある。
ない言語って?
924デフォルトの名無しさん:2013/02/01(金) 18:21:52.29
なお、俺なら全然別の実装をするよ。
他の人も書いてるが、コネクションを取得する関数を別途作る。

Public Function GetConnection(connString as String) as ADODB.connection
End Function
って感じだろうか。
接続できなければ、Nothingを戻す。あるいは、実行時エラーを戻す。
どちらにするかは、そのアプリケーション全体のエラー処理ポリシーによる。
925デフォルトの名無しさん:2013/02/01(金) 18:22:53.41
>>912
うん、Java7のリソース付きtry文でcloseが呼ばれることは否定してない。

>>913
汚いコードだと思ってないからお前の質問は意味がない。はい勝利。
926デフォルトの名無しさん:2013/02/01(金) 18:24:22.60
いつもの論破君か?
927デフォルトの名無しさん:2013/02/01(金) 18:26:58.25
> スコープを抜けた時に呼び出される仕組みがあればいいんだよ。
VBもスコープを抜けたらリソースが解放されるんだが、それがわかってないんじゃないだろうか
928デフォルトの名無しさん:2013/02/01(金) 18:27:41.64
>>925
> 汚いコードだと思ってないからお前の質問は意味がない。はい勝利。

汚いコードであることは明白なので
お前がどう思っているかどうかは意味が無い。

むしろお前が汚いコードだと思ってないことは承知済み
だろうなぁって生暖かい目で見てる。
929デフォルトの名無しさん:2013/02/01(金) 18:27:43.48
だろうな
930デフォルトの名無しさん:2013/02/01(金) 18:28:27.71
勝利とか言っちゃうのは劣勢だからだろ?
もっと余裕持てよ
931デフォルトの名無しさん:2013/02/01(金) 18:28:57.82
汚いコードだと思ってないけど、お前らの質問には答えません
なぜなら質問の意味がないからです
932デフォルトの名無しさん:2013/02/01(金) 18:29:12.36
あの馬鹿に、Java7コードで
try-catchのネストを書かせばばいいじゃね?

ちゃんと具体的なコードも含めて

ま、逃げるだろうな。
933デフォルトの名無しさん:2013/02/01(金) 18:30:03.45
>>919
ふつう逆だろ、仕事のときは2chを見て、お休みのときに2chを見ないなんて
この罰当たりが!想定できなかったのはお前が悪い。俺のコードは悪くない。
お前の頭が悪い。俺のコードは悪くない。俺のコードが大勝利。早く帰れバカ。
934デフォルトの名無しさん:2013/02/01(金) 18:31:51.36
>>928
明白であることを一切示すことできていないお前の発言は
井戸の中に向かって王様の耳はロバの耳と言っているようなもの。
王様の耳はロバの耳じゃない。はい古典文学的論破。
935デフォルトの名無しさん:2013/02/01(金) 18:32:18.77
try {
  try {
  
  } catch {
  
  }
} finally {

}

俺ならこう書く

try {

} catch {

} finally {

}

もしかして1段に並べられるのを知らないのではないか?
936デフォルトの名無しさん:2013/02/01(金) 18:33:08.41
>>934
> 明白であることを一切示すことできていないお前の発言は
上で書いたでしょw

ネストするのはありえないし、
コードはシンプルにする方がいい。
937デフォルトの名無しさん:2013/02/01(金) 18:33:42.28
>>935
ありそうwww
なんかJavaにも詳しくなさそうだし。
938デフォルトの名無しさん:2013/02/01(金) 18:35:26.62
ネストさせる理由を一切書いてないからな。
ネストさせることに正当な理由があることを証明できてないのだよ。
多分これからもいろいろな文句を言って書かないつもりだろうね。
939デフォルトの名無しさん:2013/02/01(金) 18:40:25.26
>>935
それは知ってるんだけど、それについては>>739がすでに示してるんで、
同じもの書いて俺ならこう書くっていうのはそれこそ変だろ。
だから俺は>>739に対してそれ構造的に変だなんてことは言ってない。はい論破。
940デフォルトの名無しさん:2013/02/01(金) 18:44:07.03
>>938
階層を分けることによってああここはFinallyしてるだなー
ああここはCatchしてるんだーなーというのがわかるだろ。
関数の機能を一つに絞るという構造化プログラミングの王道を
示した>>792こそ優れた例外処理だということに異論はないだろ。はい論破。
941デフォルトの名無しさん:2013/02/01(金) 18:45:51.87
>>792がクソコードな理由ならはっきりしてるな。
AでnewしてAでcloseするのなら
Aでopenしないといけない。

センスが無いとしか言いようが無い。
942デフォルトの名無しさん:2013/02/01(金) 18:50:21.27
>>941
AでCloseされるからAでOpenしなければいけない理由が説明されてない。
AでCloseするのが嫌ならCでCloseすればいいだろ。はい論破。
943デフォルトの名無しさん:2013/02/01(金) 18:53:00.77
>>942
やっぱりセンス無いとしか言いようが無いな。

openとcloseというような
対応する処理を階層をまたがって実行することで
ここでOpenしてるのだからCloseもここらへんに
あるはずだよなーという想定が全く通用しなくなる。
それはコードがわかりにくいということ。
944デフォルトの名無しさん:2013/02/01(金) 18:54:57.37
>>942で言ってることが酷すぎるw
945デフォルトの名無しさん:2013/02/01(金) 18:56:35.52
>>792が書いたコードが
ことごとく糞である。
そのことを認められないので
嵐とかしてる。
946デフォルトの名無しさん:2013/02/01(金) 19:00:18.40
> AでCloseするのが嫌ならCでCloseすればいいだろ。はい論破。

こういうことかい?
Sub A()
  Dim objConnection As ADODB.connection
  Set objConnection = New ADODB.connection
  Call B(objConnection)
End Sub

Sub B(ByVal objConnection As ADODB.connection)
  On Error Resume Next
  Call C(objConnection)
  If Err.Number <> 0 Then
    Debug.Print Err.Description
  End If
End Sub

Sub C(ByVal objConnection As ADODB.connection)
  Call objConnection.Open

  objConnectionを使った何かの処理

  If objConnection.State <> adStateClosed Then
    Call objConnection.Close
  End If
End Sub
947デフォルトの名無しさん:2013/02/01(金) 19:02:26.04
>>943
うん、じゃあその非対称性が気になる問題はCにCloseを記述することで解決するな。
で、その階層をまたがるって話なんだけど、じつはVB.NETやC#ではこれは
見慣れたものだったりするだろ。ほれ、OpenとCloseの階層は異なっている。
msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection%28v=vs.80%29.aspx

つまり俺が示した>>792は例外処理のベストプラクティスといっていいわけ。はい論破。
948デフォルトの名無しさん:2013/02/01(金) 19:03:55.79
> つまり俺が示した>>792は例外処理のベストプラクティスといっていいわけ。はい論破。

ベストプラクティスであるという根拠が示されていない。
949デフォルトの名無しさん:2013/02/01(金) 19:05:37.41
>>946
うんにゃ、すこし違う。Aで行われるのはあくまでFinallyの処理
なんでAではStateをチェックしてCloseを呼ぶようにしておく。
CではStateをチェックしないでCloseを呼ぶようにする。
950デフォルトの名無しさん:2013/02/01(金) 19:06:05.47
>>947
目を凝らしてどこにcloseが書いてあるか言ってみろ。
951デフォルトの名無しさん:2013/02/01(金) 19:07:08.75
>>949
はい、じゃあそのコードを書いてください。

お前のやり方は、どんどん複雑になりますねw
952デフォルトの名無しさん:2013/02/01(金) 19:08:41.49
>>948
俺が示した>>792はマイクロソフトが示した実装例のコードとシンクロする。
つまり>>792はマイクロソフトお墨付きの例外処理といっても過言ではないわけ。
お前らのちんけな頭で考えられた中身のともなわない空疎なものとはものが違うわけ。はい論破。
953デフォルトの名無しさん:2013/02/01(金) 19:08:56.41
論破と言うまでもない戯言だろうが
954デフォルトの名無しさん:2013/02/01(金) 19:10:12.53
単にVB6板を荒らしたいだけだろう?
955デフォルトの名無しさん:2013/02/01(金) 19:11:04.19
なぜかJava族に嫉妬されるVB6.0であったwwww

は〜い、論破!w
956デフォルトの名無しさん:2013/02/01(金) 19:14:23.98
>>950
usingがfinallyになってdisposeが呼ばれてcloseが呼ばれるだろ。
openとcloseの階層が違うのは明らかなことだろ。>>947はopenとcloseの階層が
異なることを述べたわけ。はい論破。

>>951
何言ってんだお前。1行増えるだけだろ。
Sub A()
  Dim objConnection As ADODB.connection
  Set objConnection = New ADODB.connection
  Call B(objConnection)
  If objConnection.State <> adStateClosed Then
    Call objConnection.Close
  End If
End Sub

Sub B(ByVal objConnection As ADODB.connection)
  On Error Resume Next
  Call C(objConnection)
  If Err.Number <> 0 Then
    Debug.Print Err.Description
  End If
End Sub

Sub C(ByVal objConnection As ADODB.connection)
  Call objConnection.Open
  Call objConnection.Close
End Sub
957デフォルトの名無しさん:2013/02/01(金) 19:16:32.91
>>949
俺ならこうやるな。
Sub A() 'コールスタックの一番上の場合。
On Error Goto ErrHandler
  Call B()
  Exit Sub
ErrHandler:
  If Err.Number <> 0 Then
    Debug.Print Err.Description
  End If
End Sub

Sub B()
  Call C()
End Sub

Sub C(ByVal objConnection As ADODB.connection)
On Error Goto ErrHandler
  Dim objConnection As ADODB.connection ' オブジェクトは必要となる部分で作って解放
  Set objConnection = New ADODB.connection
  Call objConnection.Open
  objConnectionを使った何かの処理
Exit Sub
ErrHandler:
  Dim number As Integer: e = Err.Number
  If Not objConnection Is Nothing Then
    If objConnection.State <> adStateClosed Then
      Call objConnection.Close
    End If
  End If
  Err.Rase number
End Sub
958957:2013/02/01(金) 19:19:18.73
まあこれはちょっと長いので工夫する

Sub A() 'コールスタックの一番上の場合。
On Error Goto ErrHandler
  Call B()
  Exit Sub
ErrHandler:
  ErrLog(Err)
End Sub

Sub B()
  Call C()
End Sub

Sub C(ByVal objConnection As ADODB.connection)
  Dim myclass As MyClass
  Set myclass = new MyClass '内部でデータベースへ接続。スコープから抜けるときにデータベース切断
  myclass.foo() 'objConnectionを使った何かの処理
End Sub
959957:2013/02/01(金) 19:20:05.92
訂正w

Sub A() 'コールスタックの一番上の場合。
On Error Goto ErrHandler
  Call B()
  Exit Sub
ErrHandler:
  ErrLog(Err)
End Sub

Sub B()
  Call C()
End Sub

Sub C()
  Dim myclass As MyClass
  Set myclass = new MyClass '内部でデータベースへ接続。スコープから抜けるときにデータベース切断
  myclass.foo() 'objConnectionを使った何かの処理
End Sub
960デフォルトの名無しさん:2013/02/01(金) 19:28:00.67
>>956
汚いなぁ。
実際にやりたいことが例外処理コードに
埋もれてしまってるじゃないか。
961デフォルトの名無しさん:2013/02/01(金) 19:29:58.21
>>959
見た目はシンプルだけど、MyClassの実装はどうなってんの?
962デフォルトの名無しさん:2013/02/01(金) 19:32:42.51
>>960
Connectionを使って実際にやりたいことはCに書かれてる。
きれいに分離されてる。お前の目は節穴か?はい論破。
963デフォルトの名無しさん:2013/02/01(金) 19:48:30.38
>>961
> 見た目はシンプルだけど、MyClassの実装はどうなってんの?

private con As ADODB.connection

Private Sub Class_Initialize()
 Set con = new ADODB.connection
 con.Open
End Sub

Private Sub Class_Terminate()
 If Not con Is Nothing Then
  If con.State <> adStateClosed Then
   con.Close
  End If
 End If
End Sub

Terminateの処理がわかりづらいと思うなら、ユーティリティ関数を作れば
DbClose(con) という風に一行で書ける。

聞かれたからコード書いたけど重要なのは
見なくていいコードは隠蔽し、見なければいけな本質的な処理を見えるようにすること
そういう点で>>792のようなコードはごちゃごちゃしてるといわれる。
964デフォルトの名無しさん:2013/02/01(金) 19:53:15.25
>>959にはまだ問題点があって、
A = コールスタックの一番上 = ボタンのクリックとかのイベントハンドラ
全てに(汎用処理とはいえ)例外処理コードを書かないといけないってことだけど
今の自分なら、イベントハンドラと特定のクラスのメソッドを結びつけるクラスを作って
その間に例外処理を挟み込むことで、一つで汎用的な例外処理をかけそうな気がする。
965デフォルトの名無しさん:2013/02/01(金) 19:58:16.97
>>963
隠蔽してきれいになりましたというのは部屋中の散らかった生活物資を押入れに
しまいこんで、はいきれいといってるようなもの。俺のように整理整頓された>>792こそ
構造化プログラミングの真骨頂でありほんとうにきれいということができるコードだ。
なんならAとBを見なきゃいんだから。それはお前の努力しだいでなんとでもなる。
Openが例外を投げたときが気になるんだよなー。例外投げたけど、閉じてもないよという
ときがありそうでなんかやだ。はい論破。
966デフォルトの名無しさん:2013/02/01(金) 19:58:51.82
> 俺のように整理整頓された>>792こそ

整理整頓されたという根拠が無い
やり直し。
967デフォルトの名無しさん:2013/02/01(金) 20:00:34.21
>>966
きれいに峻別されてるだろ、ここはFinallyだなー、ここはCatchだなー、
ここが処理の中核だなー。はい論破。
968デフォルトの名無しさん:2013/02/01(金) 20:01:51.34
>>965
> Openが例外を投げたときが気になるんだよなー。例外投げたけど、閉じてもないよという

そういうのも隠蔽することでシンプルに書ける
もとのコードはシンプルなままいられる。

それに対してお前のやり方はどうだ?
○○の場合は〜、○○の場合は〜、って
コードを本質的な処理に紛れ込ませていき、
どんどん複雑になるのが目に見えているではないか。
969デフォルトの名無しさん:2013/02/01(金) 20:02:38.10
>>967
> きれいに峻別されてるだろ、ここはFinallyだなー、ここはCatchだなー、
> ここが処理の中核だなー。はい論破。

では>>792のコードで示してください。
どこがFinallyでCatchで処理の中核ですか?
970デフォルトの名無しさん:2013/02/01(金) 20:02:55.12
水出して野菜洗ってたら、鍋が噴いたから火を止めようとしたわけだが、
水もったいないかあら水とめてからって思っても、
水止めるボタンは離れたところにありますとかどうよ。
971デフォルトの名無しさん:2013/02/01(金) 20:09:46.19
>>968
隠蔽すればいいて押入れに詰め込んどけばいいといってるようなもので
コードが増えることに変わりはないだろ。>>792はOpenが例外投げたときにも
対処されるように書かれているわけで、その点で俺のコードは優れてる。
俺が優でお前が劣。はい論破。

>>969
AがFinally
BがCatch
Cが処理
972デフォルトの名無しさん:2013/02/01(金) 20:11:43.20
そもそもさ、FinallyとかCatchとかいってるから、
それらに相当する関数Aとか関数Bとかできるわけさ。

そういうマヌケなことを言わなければ、関数Aとか関数Bも不要になって
>>963のコードはここまでシンプルになる

Sub main() 'コールスタックの一番上の場合。
On Error Goto ErrHandler
  Dim myclass As MyClass
  Set myclass = new MyClass '内部でデータベースへ接続。スコープから抜けるときにデータベース切断
  myclass.foo() 'objConnectionを使った何かの処理
  Exit Sub
ErrHandler:
  ErrLog(Err)
End Sub
973デフォルトの名無しさん:2013/02/01(金) 20:15:38.11
なるほど、AとBが出来てしまった理由が
finallyやcatchを無理やり真似ようとしてしまったからなわけだな。
例外処理のためだけに関数を二つも増やしてしまったわけか。
よくわかった。
974デフォルトの名無しさん:2013/02/01(金) 20:21:25.32
処理Cに対応するAとBが必要。

追加で処理C1とC2とC3が増えました。
A1、B1、A2、B2、A3、B3、が必要です。

処理は4つですが
関数は12個必要です。

恐ろしいw

メンテナンス性低すぎだろ。
975デフォルトの名無しさん:2013/02/01(金) 20:21:35.74
>>972
うん、A、Bは不要になるけどMyClassが必要になってるわけで、
記述する量が減りましたというわけじゃない。その隠蔽体質が問題だと
認識しています。はい論破。
976デフォルトの名無しさん:2013/02/01(金) 20:24:19.40
>>975
記述量は減ってるよ。
C1とC2とC3が増えた時のことを考えてみ。

MyClassならいくつ増えても
本質的な処理しか増えないけど
お前のやり方では例外処理までも増えていく。
977デフォルトの名無しさん:2013/02/01(金) 20:29:06.45
>>976
C1の例外とC2の例外をわけたいときもあるだろ。明確に区別される
俺の記述方がはるかに優れているってことになる。はい論破。
978デフォルトの名無しさん:2013/02/01(金) 20:30:33.39
>>975
おいおいオブジェクトは、複雑な事を、単純な事に置き換えるための仕組みだぞ...
979デフォルトの名無しさん:2013/02/01(金) 20:31:53.63
>>978
だからなんだよ、はい論破。
980デフォルトの名無しさん:2013/02/01(金) 20:33:02.72
>>979
馬鹿でも判るようにする仕組みだって事だよ...
981デフォルトの名無しさん:2013/02/01(金) 20:43:47.47
論破くん、もう病気だね。はい確定。
982デフォルトの名無しさん:2013/02/01(金) 20:45:52.12
>>825
俺は標準モジュールでコネクションプーリングを実装してる。
983デフォルトの名無しさん:2013/02/01(金) 20:50:59.57
明確に分けたいときに限って俺の勝ちだ!

って言ってる馬鹿がいますねw
984デフォルトの名無しさん:2013/02/01(金) 20:54:21.94
本人は勝利宣言のつもりなんだろう。
負け宣言になってるが。
985デフォルトの名無しさん:2013/02/01(金) 20:59:37.12
>>983
それはどうとでもなるところだ。
C1とC2が増えると前提を置けば>>976が成立するし、
C1とC2が増えないと前提を置けば俺が言ってることが成立するし、それは
前提をどう置くかってことだけだから、話としてはつまんない。
何かこう斬新な例外処理とかないかな。はい論破。

>>984
なに勝利って?議論に勝ちも負けもないよ、そういうこというのって恥ずかしいだけだと思う。はい論破。
986デフォルトの名無しさん:2013/02/01(金) 21:01:23.18
C1、C2、C3が増えるたびに
例外処理まで増えるしか無いやり方のほうが負けだろう。

クラスに書いておけば、基本増えなくて、
必要があれば、違う例外処理も実行できるし。
987デフォルトの名無しさん:2013/02/01(金) 21:02:23.25
頭は悪くなさそうだが、周囲からは冷たい目で見られてそうだな
988デフォルトの名無しさん:2013/02/01(金) 21:02:26.29
なんか論破くんとその他の人に間には
10年ぐらいの技術の差がありますね。

あ、もちろん論破くんのほうが下です。
989デフォルトの名無しさん:2013/02/01(金) 21:03:21.84
上とか下とかいうこだわりは論破君の専売特許だが
仲間になりたいのか?w
990デフォルトの名無しさん:2013/02/01(金) 21:04:04.13
就職はまず無理 そんなタイプ
991デフォルトの名無しさん:2013/02/01(金) 21:04:16.99
>>986
> クラスに書いておけば、基本増えなくて、
> 必要があれば、違う例外処理も実行できるし。

話の流れからして、たぶん奴はそのことに気づいてないと思う・・・
992デフォルトの名無しさん:2013/02/01(金) 21:04:27.42
それにしても、 finally の意味を関数の終わりという意味に取り違えている

っていうしょうもない例から、よくこれだけ糞スレ展開したもんだ。

お前ら、例外処理したい範囲ぐらい絞ってtry-catchしろよ。
993デフォルトの名無しさん:2013/02/01(金) 21:07:33.19
例外処理のためだけに
関数二つ追加しちゃう
センスが無い人ですからw
994デフォルトの名無しさん:2013/02/01(金) 21:09:21.14
>>986
それはプロセッサオブジェクトを作ってその
メソッドをCの変わりに呼ぶこともできるわけで、
別にオブジェクト作るようなことになったら俺は首をくくるしかない
なんていう覚悟を持ってるわけじゃないんで、それはどうとでもなる。
例外処理としては対して違いがあるわけじゃない。ほかになんか知らない?はい論破。
995デフォルトの名無しさん:2013/02/01(金) 21:10:02.22
>>994
更に複雑にする気かw
996デフォルトの名無しさん:2013/02/01(金) 21:11:18.83
プロセッサオブジェクト(笑)
オレオレ用語出て来ましたよ。

ああいう人ならこんなこと言ってしまう
的な展開ですねw
997デフォルトの名無しさん:2013/02/01(金) 21:11:43.67
つーかさ...
tryとかcatch以前にthrowしろよ...
998デフォルトの名無しさん:2013/02/01(金) 21:12:27.69
俺はちゃんとErr.Raiseしてるというのにさ。
999デフォルトの名無しさん:2013/02/01(金) 21:13:43.45
        ____
        /     \    
     /   ⌒  ⌒ \   論破くん必死だなー
   /    (●)  (●) \     
    |   、" ゙)(__人__)"  )    ___________
   \      。` ⌒゚:j´ ,/ j゙~~| | |             |
__/          \  |__| | |             |
| | /   ,              \n||  | |             |
| | /   /         r.  ( こ) | |             |
| | | ⌒ ーnnn        |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二  _|_|__|_
1000デフォルトの名無しさん:2013/02/01(金) 21:14:24.79
>>996
オレオレだけど、わかるだろ。わからなかったらただのバカ。
オレオレだからというだけで叩こうとしたお前はスーパーバカ。
スーパーバカというのは俺が作った言葉だからお前には理解できない。はい論破。
だれか次スレ建てて。俺レベル低いから無理。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。