• ベストアンサー

型を定義しないと被る被害を明確にする方法

VBで型宣言しないで使っていますが、型宣言をしないと具体的にどういったデメリットがあるのでしょう。 個人で使っている分には全くデメリットを感じないのですが、本やサイトでは宣言することを強く勧めています。 また、パブリック変数も出来るだけ使わないようにとあるのですが、それを使うことによって被るデメリットがいまひとつ分かりません。 会社等で開発する人たちにとってそうであり、個人で使う分には特に気にする必要はないのでしょうか。 宣言をしなかったり、パブリック変数を使うことで生じるデメリットを具体的に試す方法ってありますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

型宣言が出来るVBということは、VB6.0/VBA/.NETですかね・・・。 > 会社等で開発する人たちにとってそうであり、個人で使う分には特に気にする必要はないのでしょうか。 そんなことはないです。私は個人で開発してますが、型宣言はもちろん暗黙的変換も禁止状態でコーディングしています。このおかげで、デバッグが数倍楽になりました。 またVB2005に移行してからは、インテリセンスがメソッドやプロパティ等の説明を表示してくれるので、MSDNを調べる回数も減り、結果開発速度も上がりました。 型宣言しないとインテリセンスの恩恵が受けられない、という1点においても相当なデメリットだと思います。

kurigara_k
質問者

お礼

そういうデメリットもあるんですね。有難うございました

その他の回答 (3)

  • tom951
  • ベストアンサー率30% (29/96)
回答No.4

>パブリック変数も出来るだけ使わないようにとあるのですが、それを使うことによって被るデメリットがいまひとつ分かりません。 モジュールの強度や結合度と言うのは知っていますか? まぁここら辺を書き出したら本一冊できるくらいの分量になるでしょう。ですから自分で調べてください。 でこのモジュールの強度や結合度が重要なキーワードになります。 でそれと関係しますが >会社等で開発する人たちにとってそうであり、個人で使う分には特に気にする必要はないのでしょうか。 ソースの再利用時のそのソースの扱いやすさにこのモジュールの強度や結合度が大いに関係してきます。

kurigara_k
質問者

お礼

ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

例えば1+2は何でしょう? 3ですか?「数値型」なら正解です。しかし、「文字型」だと"12"です。 VBScriptというのがあります。この言語では型宣言がありません。 私がプログラムする時は必ず「CLng(X) + CLng(Y)」のようにして 「数値型」に明示的に変換して操作します。 次にPublic変数ですが、これを乱発したプログラムの場合、いくら 自分が作ったと言え、変数名を全部覚えていられるでしょうか? 変数名を間違え、それがたまたまPublic変数名と同じだったら、 結果はどうなりますか?同じ人間が作るから似たような変数名に なりやすいのです。プログラムもコピペして作ることが多く、変数が 独立していないと困る場面が数多く出てきます。

回答No.1

宣言すると、大文字・小文字は宣言にあわせてくれるし、補完もすぐ効きます。また、よくある間違いですが、変数を間違えてしまったとき、宣言していない変数を使用不可にしておくと間違いが正されます。  型を明確にしておくため、雑なソースを受け付けません。  特にある程度大きなプログラムで時間たったときに見直すときに助かります。  パブリック変数を多用すると、どこで何をやっているのかわからなくなりますが、場合によってはパブリック変数を使ったほうが見通しがよくなることがあります。ただし、初心者はぐちゃぐちゃのプログラムを書いてしまうため、やらないほうがよいといわれているのではないでしょうか?  昔、変数宣言もなく、パブリック変数しかなかった時代のプログラムを組んでいたときはローカル変数というのは憧れでした。

関連するQ&A

  • 大量の変数を定義するにはどうしたら良いですか?

    VBA或いはVBのプログラムの最初で変数の型を定義したい場合、 変数が100個以上ある場合にはどうすれば良いのでしょうか? 100行にも渡って変数の定義を書くのはあまりにも見づらいと思います。何か良い方法がありましたら教えて下さい。

  • FORTRANのCOMMON文

    COMMON文について教えてください。 本を見ると R(2,2)という配列を共有したいとき R(2,2)を主プログラムで定義しているとき 主プログラムとR(2,2)を使うサブルーチンの 両方でCOMMON文を書く必要がある。 というような内容でした。 そこで配列を宣言して両方にCOMMON文を書くとエラーが出ます。そこで配列宣言を消去するとエラーがなくなります。COMMON文を使うときは配列(変数)を宣言する必要はないのですか?(暗黙の型宣言は使わない場合を考えています。) またCOMMON文では変数の型宣言をするとエラーが出るし暗黙の型宣言に従って使うと変数には意味を付けて使っているので都合が悪いときもあります。 倍精度で変数を使いたい時とかにも困りますし。 COMMON文で自由な型で変数を使うにはどうしたらいいのでしょうか? 教えてください。お願いします。

  • またまたVBAのデータの型変数で質問

    あるセルに「=IF(N50 =O50,"","×")」の関数が入ってます。比較して合っているならNULL、相違なら×(バツ)をいれるというものです。 質問はこのセルの値をマクロである変数に格納するにはどんな型を使用すればいいのか?です。 格納できればどんな方法でもいいです。 Dim buf as String と変数の宣言してbufに上記の関数の結果のみを入れたいのですが型が違いますとエラーがでます。セルが算術式のときの型ってなんでしょうか? 目的はNULLは大丈夫なのですが、バツ(×)を変数に格納したいです。 よろしくお願いいたします。

  • VB6.0の変数、関数の定義位置から元に戻る方法はありませんか?

    VB6.0の機能についての質問です。 ソースを見ている時に変数や関数がどの位置で宣言されているか見たくなる時がありますよね?そこでShift+F2を押すと定義されて位置まで飛ぶことができます。 で、その位置からまた元に戻りたくなりますよね?その方法がわかりません。 どなたか教えてください。お願いします。

  • 型宣言に現れる * [] () の構文要素名は?

    型宣言の中に現れる "*","[]","()" (関数型を表す丸括弧) などは, 文法上は何という名前なのでしょうか? 例えば次の型宣言 (定義) char **p; int q[8]; において,手元の「ANSI C/C++ 辞典」によると, char や int は型指定子 (type specifier), **p はポインタ宣言子 (pointer declarator), q[8] は配列宣言子 (array declarator) になると思いますが, "*","[]" 単独の構文要素名は見あたりません. 個人的には * [] () のことを「型派生子」とか,曖昧に「(型派生)演算子」と呼んでいますが, 前者は上記の本にも載っていないし,検索しても全くヒットしません. 単に「演算子」だと他人に説明するとき誤解を招きそうだし….

  • VBに詳しい方に質問です

    VBではdouble型等の型を持つ関数は宣言できるのでしょうか? C#だちできると思うのですが・・・。 また、VBでも Dim hoge as doubleなど、変数ならできると思うのですが・・。 ご存知の方、お願いします。

  • C# 変数の動的な再定義

    こんにちわ  変数の動的な再定義というものが可能かどうかお伺いしたく質問させていただきました。 具体的には宣言時にはpublic int numberと宣言しておいて、プログラムのLoad時に、プログラム内でdouble型で宣言しなおすといった内容です。 ※上記の内容は質問用のサンプルです。ジェネリックを使えばいいとかあると思いますがあくまで可能かどうかの質問です。 やりたいことは、プログラム実行時に型を決めて、コンパイルも通したいという内容です。 dynamicを使用すれば想定通りの動きのものはできましたが、別のやり方も模索しております。 プログラム内でなんとか再定義ができないものかと思ってます。

  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • 型「double」「decimal」「float」について教えて下さい

    型「double」「decimal」「float」について教えて下さい。 VB2010とSQL Server 2008 R2 で開発を行っている初心者です。 単価が銭単位(例えば0.01円=1銭)の商品の金額計算を するとき、最初に変数を「Double」を使って、最後に小数点以下 のまるめ処理を行っていたところおかしな金額計算されてしまい ました。 具体的には、 Dim intSuryo As Integer Dim dblTanka As Double Dim dblKingaku As Double Dim marumeKingaku As Double If tbSuryoArray(i).Text <> Nothing Then If tbTankaArray(i).Text <> Nothing Then dblKingaku = 0 dblKingaku = intSuryo * dblTanka Select Case intMarumeKubun Case 1 : marumeKingaku = Math.Truncate(dblKingaku) '切り捨て Case 2 : marumeKingaku = Math.Round(dblKingaku, 0, MidpointRounding.AwayFromZero) '四捨五入 Case 3 : marumeKingaku = Math.Ceiling(dblKingaku) '切り上げ End Select のコードを書いて計算すると、(単価)4.31×(数量)5000 の計算が、 本来「21550」にならなければいけないのに「21549」になってしまいます。 いろいろ調べてみた結果、変数の型を「Double」にするのがいけなくて、 「Decimal」にすると誤差がなくなるということで、変数をすべて「Decimal」 に直したところ、誤差の現象がでなくなったので問題は解決しました。 問題がもうひとつおきました。 データベースの単価の型も変える必要があるかと思い、 SQL Server内のテーブルの単価のカラムを「float」から「decimal(18,0)」に 変えたところ、既に格納されている値がすべて整数に変わってしまいました。 何やらわけがわからず戸惑っていますが、同じ「Decimal」でもVBとSQL Server では利用方法が異なるのでしょうか? またVBでの「Double」と「Decimal」の使い分け、 SQL Serverでの「float」と「decimal」の使い分け、 について教えて下さい。 よろしくお願いします。

  • 型エラーについて

    環境  IIS4.0  WIN NT  VB6.0 ASPからDLLを使用して処理を行っている際に 以下のような事象が発生しました。 VB(DLL)側で処理を行い、その結果をASPで受け取る時に エラーが出ております。 ASPではすべてVariant型なのでVBでもVariant宣言しているのに 何故か型エラーが出ています。 ASP部分をVBで記述すると問題なく動作します。 解決方法など分かりましたらご教授願います。 以下コードの一部分を抜粋いたしました。 ▼▼▼▼▼▼▼▼▼ASP▼▼▼▼▼▼▼▼▼ Dim DBErrField() DBErrField = clsSEND_SCHEDULE_T.DBErrField ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▼▼▼▼▼▼▼▼▼VB(DLL)▼▼▼▼▼▼ Private mDBErrField() As Variant Public Property Get DBErrField() As Variant() DBErrField = mDBErrField End Property ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▼▼▼▼▼▼▼▼▼エラー▼▼▼▼▼▼▼▼▼ Microsoft VBScript 実行時エラー (0x800A000D) 型が一致しません。 ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲