Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

PrivateとDimの違い

タグの編集...

投稿者 ほわ   (中学生)   投稿日時 2012/6/16 10:06:09
題名の通りです。

PrivateとDimの違いを教えてください。

投稿者 るきお   (社会人)   投稿日時 2012/6/16 10:23:11
変数を宣言するときのPrivateとDimは同じ機能です。

Private X As Integer

という書き方は、
Private Dim X As Integer

の省略形なのです。
ただし、実際にPrivate Dim…と入力するとVBが勝手にDimを省いてしまうので簡単に試すことはできません。

一方、
Dim X As Integer

という書き方は適用範囲がPrivateであるとみなされるため、結局
Private Dim X As Integer

と同じ意味になります。

したがって適用範囲がPrivateの変数はPrivate X…と書いてもDim X…と書いても意味は同じになります。

SubやFunctionの中ではそもそもPrivateは使えないので、Private Dim…とは書けずDim…と書きます。

紛らわしいのでこのルールをもっとわかりやすいものに変えた方がいいのじゃないかと思うのですが、Dimには伝統の重みがあるのとDimがなくなったら気持ち的にVBではないような気がしてしまうのとで微妙です。

以上は変数を宣言するときの話に限定して説明しましたが、ほわさんの聞きたいことと合っていますでしょうか?

Privateは変数のほかにもConstやFunction、Subなどと組み合わせて使うこともよくあります。このほかのものと組み合わせることもあります。

投稿者 魔界の仮面弁士   (社会人)   投稿日時 2012/6/16 10:38:11
Dim は変数の宣言にしか使えませんが、
Private は、Sub や Function などに対しても使えます。(VB2 などは除く)

変数の仕様に限定してみると、Dim はプロシージャ内では利用できますが(ローカル変数)、
Private はプロシージャの外(クラスやモジュールレベルのフィールド)でしか使えません。

また、変数のスコープ(有効範囲)という点で見た場合の差異もあります。
Dim という宣言の場合、その記述位置によっては、Private 相当のスコープになることもあれば
Public になることもあります。

Public Structure 構造体
    Dim a As Integer    'これは Public a As Integer 
End Structure

Public Class クラス
    Dim b As Integer    'これは Private b As Integer 
End Class


そのため、スコープをわかりやすくするためにも、上記のようなパターンでは
Dim ではなく Private/Public などを使うことが望ましいです。

投稿者 (削除されました)   ()   投稿日時 2012/6/16 14:43:35
(削除されました)

投稿者 ほわ   (社会人)   投稿日時 2012/6/16 14:45:23
すごいわかりやすかったです!

ありがとうございました(^^*)

投稿者 m190   (社会人)   投稿日時 2012/6/17 14:02:40
> Dimには伝統の重みがあるのとDimがなくなったら気持ち的にVBではないような気がしてしまう
この一節、何だミョーに納得してしまいました。

とくに私は「何はともあれ、とりあえず Dim!」と、何やら居酒屋のビール(生中)と勘違いしてるような所がありまして。。。(汗
だって Dim だったら変数を、マウスのドラッグでプロシージャから出したり引っ込めたり出来きちゃうので、
とっても便利な、、、ってここら辺がそもそも、私の計画性のなさを物語ってるんだなってことに気が付きました。


> スコープをわかりやすくするためにも、上記のようなパターンでは
> Dim ではなく Private/Public などを使うことが望ましいです。
そうですよね、気を付けなきゃな、と反省はするのですが、
こういうのって継続的に意識し続けないと、なかなか体の方が覚えてくれません(涙

#やっぱり自己流のプログラミングって、事故の元なんでしょうね。。。


投稿者 ゆうと   (小学生)   投稿日時 2020/10/31 13:21:51
たしかに、これは僕も気になりました
だれか教えてください。