C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: VB 変数について


(過去ログ 141 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■82719 / inTopicNo.1)  VB 変数について
  
□投稿者/ AA (1回)-(2017/01/31(Tue) 10:56:42)

分類:[.NET 全般] 

初心者です。 参考書やサンプルを調べながら作成していて混乱してしまったので質問しました。
VBを使用して変数に任意の値をキーボードから入力して計算させて、その結果を他のPCに送るプログラムを作成しております。
変数について2つ教えて頂きたいです。
@Formに貼りつけたTextBOXに変数に入力した値や計算結果を表示させる場合 変数は文字型であるstring型に変換しなければなりませんか??今はdouble型です。 double型をそのまま入れても表示されていますがinteger型やdoble型をTextbox.textに入れても問題ないのでしょうか??
A入力した値を入れておく変数や計算結果を入れておく変数、通信時に使用した変数等使用する変数はプログラムを閉じるときに0を入れたり" " を入れたりして値をクリアーな状態にしなければなりませんか??
うろ覚えで自信が無いのですが変数の値を初期化しないとバグの原因になると習ったような気がするのですが、この考え方であったおりますか?

ご回答よろしくお願いします。

引用返信 編集キー/
■82721 / inTopicNo.2)  Re[1]: VB 変数について
□投稿者/ Jitta (268回)-(2017/01/31(Tue) 11:11:53)
No82719 (AA さん) に返信
> @Formに貼りつけたTextBOXに変数に入力した値や計算結果を表示させる場合 変数は文字型であるstring型に変換しなければなりませんか??今はdouble型です。 double型をそのまま入れても表示されていますがinteger型やdoble型をTextbox.textに入れても問題ないのでしょうか??

VBというツールは、元々ソフトウェア開発者以外の人をターゲットに作られたものです。
感覚的に「こうしたらこうなってほしい」を実現できるように作られています。
本来は、TextBoxに表示するのは(入力できるのも)
数値ではなく文字としての数字ですが、
前述の理由で、暗黙のうちに文字列へ変換されます。
option strict on で、エラーになります。


> A入力した値を入れておく変数や計算結果を入れておく変数、通信時に使用した変数等使用する変数はプログラムを閉じるときに0を入れたり" " を入れたりして値をクリアーな状態にしなければなりませんか??
> うろ覚えで自信が無いのですが変数の値を初期化しないとバグの原因になると習ったような気がするのですが、この考え方であったおりますか?

プロセスが終了するとき、そのプロセスが確保したものは解放されます。
COMオブジェクトなどを使用しているなら、それらはそれら用の解放ルーチンを通します。
そういうことではない?
引用返信 編集キー/
■82723 / inTopicNo.3)  Re[2]: VB 変数について
□投稿者/ AA (2回)-(2017/01/31(Tue) 11:23:29)
No82721 (Jitta さん) に返信
回答ありがとうございます。
textbox1.text=X  のように文字型以外の変数Xを入れたとしても自動的に文字型に変換してくれるのですね。
>
>
>>A入力した値を入れておく変数や計算結果を入れておく変数、通信時に使用した変数等使用する変数はプログラムを閉じるときに0を入れたり" " を入れたりして値をクリアーな状態にしなければなりませんか??
> プロセスが終了するとき、そのプロセスが確保したものは解放されます。
> COMオブジェクトなどを使用しているなら、それらはそれら用の解放ルーチンを通します。
> そういうことではない?
解放ルーチン以外の計算で使ってる変数については気にしなくても良いですか?
計算で使用した変数に X=0 を入れたり 文字列を保存した変数に y= " " を入れて中身を消す必要はないですか??
引用返信 編集キー/
■82724 / inTopicNo.4)  Re[3]: VB 変数について
□投稿者/ w1016 (1回)-(2017/01/31(Tue) 11:31:21)
2017/01/31(Tue) 12:12:14 編集(投稿者)

□投稿者/ w1016 (1回)-(2017/01/31(Tue) 11:31:21)

>■No82723 (AA さん) に返信


>文字列を保存した変数に y= " " を入れて

必要性以前に、半角スペースの代入では「消す」という意図から外れていると思います。

y = ""

の間違いでしょうか?
引用返信 編集キー/
■82725 / inTopicNo.5)  Re[4]: VB 変数について
□投稿者/ AA (3回)-(2017/01/31(Tue) 11:41:50)
No82724 (w1016 さん) に返信
> ■No82723 (AA さん) に返信
>>■No82721 (Jitta さん) に返信
>
> >文字列を保存した変数に y= " " を入れて
>
> 必要性以前に、半角スペースの代入では「消す」という意図から外れていると思います。
>
> y = ""
>
> の間違いでしょうか?
すいません。 はい そうです。
引用返信 編集キー/
■82730 / inTopicNo.6)  Re[5]: VB 変数について
□投稿者/ 774RR (473回)-(2017/01/31(Tue) 13:26:25)
C などで free() 済みポインタなどを再利用させないというか、誤って再利用したらエラーになるように

free(p);
p=NULL;

などと言うコードを書くことが推奨されていた例もあるっちゃーある。

.NET の世界ではまるっきり不要と考えてよい、んぢゃないかな。早期に gc してもらう目的で

x=0; とか
y=null; とか

書く必要はまったく無い。

Dispose は必要なんだけどたいていの場合は using を使うほうが良かったりするんで。
引用返信 編集キー/
■82737 / inTopicNo.7)  Re[6]: VB 変数について
□投稿者/ Jitta (269回)-(2017/01/31(Tue) 14:50:49)
ひとつ大きな間違いがあると思います。
変数を解放する必要はありません。
変数で参照しているオブジェクトが、解放しなければならないかもしれません。

プロセスを終了するときに変数を「初期化」しても仕方ありまん。
もう使わないのですから。
初期値に戻さなければならないなら、Sub や Function の終わりでも同じ様にしなければなりませんが、それはナンセンスです。

入力に制限のある端末なので、
後で時間が取れたら、また書き足すかも。
引用返信 編集キー/
■82747 / inTopicNo.8)  Re[1]: VB 変数について
□投稿者/ Jitta (270回)-(2017/02/01(Wed) 14:15:52)
No82719 (AA さん) に返信

> A入力した値を入れておく変数や計算結果を入れておく変数、通信時に使用した変数等使用する変数はプログラムを閉じるときに0を入れたり" " を入れたりして値をクリアーな状態にしなければなりませんか??
> うろ覚えで自信が無いのですが変数の値を初期化しないとバグの原因になると習ったような気がするのですが、この考え方であったおりますか?

 一般的に、プログラムコードで書く変数は、2種類の領域のどちらかの領域を使用します。
スタック領域、または、ヒープ領域です。
スタック領域に確保されたものは、変数の生存期間が過ぎると、自動的に回収されます。
C/C++ などでは、ヒープ領域を確保した場合、明示的に確保を解除しなければなりません。
しかし、VBは、前述のように、職業プログラマではない人が直感的にアプリケーションを作れることを目標にしていますので、メモリの管理ということに気を使う必要はありません。
また、.NET Framework では、プログラマがメモリ管理に気を割かなくてもいいようにしています。
この仕組みを実現するために、「参照されなくなったメモリは解放する」ようになっています。
そのために、その場所を参照している変数に Nothing を入れるなどで、参照を外してやります。
このことは、プログラマには内緒で行われますので、通常は気にしなくていいのですが、画像などの大量のメモリを使用する場合は、明示的に Nothing 代入を行って、不要領域の切り離しを行う方がよいとされています。
「変数に0などを入れて値をクリアーな状態にする」というのは、この、明示的にメモリ参照を切り離すことを指していると思われます。
しかし、32ビットアプリケーションでは、プロセスごとにメモリは独立していますので、プロセス終了時にはプロセスが参照していたメモリは解放されます。
よって、「プログラムを閉じるときに0を入れたり" " を入れたりして値をクリアーな状態にしなければなりませんか」は、No です。

 しかし、.NET Framework では、IDisposable インターフェイスというものがあり、これを実装しているクラスのインスタンスは、プログラマが不要になったと判断するタイミングで、Dispose メソッドを呼び出さなければなりません。
これについては、「使用中」であることがプロセス外でマークされていることがあるので、プロセス終了前にすべて終了処理をしておきます。
先の話は「メモリ」管理に関する話ですが、これは「リソース」管理に関する話です。
ただし、0や""を代入するというものではありません。

 「変数の初期化」ということに関しての話が、また別にあります。
C/C++ では、変数の「宣言」をすると、ある領域をその変数用に確保するだけで、初期化は行われません。
よって、以前にほかの変数のために使われていた領域が再割り当てされると、以前の内容が残っています。
たいていの場合、プロセスを起動したときには0の値が割り当てられています。
それを期待して、例えばループの中で総和を計算するのに用いていると、結果が異なってしまいます。
(Deug モードで起動した場合、0以外の値になって、こういうミスを検出できる。)
通常は、0に初期化をしてから使えばいいのですが、使い終わってから0を代入しておけば、結果は正しいものになります。
しかし、「初期化」は、文字の通り初期に行うべきものですから、やはり、使い終わってから0を入れるのは不要です。
また、「プログラムを閉じるとき」には、もう使われないのですから、やはり不要です。


 以上、「メモリ管理」、「リソース管理」、「変数の値管理」の3つが入り混じっているように思いました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -