• ベストアンサー

変数の宣言はすべきでしょうか?宣言することの功罪について教えて下さい。

変数の宣言はすべきでしょうか?宣言することの功罪について教えて下さい。 また、宣言するべきというアドバイスの場合、どのように宣言するのがスマートでしょうか。 みなさんのご意見をお聞かせ下さい。

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

  • ベストアンサー
  • durarara
  • ベストアンサー率47% (21/44)
回答No.5

書き込みがあったので追加で。 具体的な位置はなるべく範囲をせまくすることを目指すべきです。 グローバルな変数よりも、モジュール(またはクラス)レベルの変数、 モジュールレベルよりもプロシージャ(メソッド)レベルの変数、 さらにそれよりもUsingやTry、Forなどの中で、 という風にブロックレベルを目指すことになります。 VB6.0の頃はUsingなどがなかったので プロシージャの途中で宣言すると変数を把握しにくくなるということで プロシージャレベルまでいったらプロシージャの先頭に まとめることが多かったです。 しかしVB.NETではJavaなどと同様に 使う直前に宣言して、使用したら即破棄するという方法が やりやすくなったので、最近ではこちらのほうがいいでしょう。 あとVBでは下記のように変数宣言は縦に並べるほうがオススメです。 (グローバル、モジュール、プロシージャレベルの場合です。) Dim test_var as string DIM test2_var as byte 1行ごとにコメントにできたり、型の宣言なども見やすくなります。 変数が多い場合にExcelやテキストエディタを使った編集がしやすかったりもします。 あとは自分以外の人がみることを考えると分けたほうが把握しやすいでしょう。 ただし言語によっては1行に詰めて書くのを好む場合もあります。 最後に参考URLです。 第 6 回 様々な変数宣言 ~バージョン アップに伴う変化~ http://msdn.microsoft.com/ja-jp/ff384144.aspx

参考URL:
http://msdn.microsoft.com/ja-jp/ff384144.aspx
nbsp0606
質問者

お礼

またしてもありがとうございます。 まだまだ未熟な私には、ちょっと難しい内容でしたが、 今後、ジワジワ効いてきそうなお話でした。 経験値がある方だからこそ分かること、を教わることができた、 そんな風にも思いました。 頂いた回答はどちらも、他の言語との兼ね合いなども考慮されていて、 その辺りも大変参考になりました。 ありがとうございます。 参考URLもチラっと見てきましたが、 今、私が知りたいことが詰まっているような内容でしたので、 あとで、じっくり読ませて頂こうと思います。 貴重な回答をどうもありがとうございます。

その他の回答 (6)

  • durarara
  • ベストアンサー率47% (21/44)
回答No.7

今日は時間があるので、さらに。 変数は先頭に、これは大事ですね。 しかし、たとえプロシージャの先頭にまとめたとしても 同じ変数がモジュールの先頭にあったら同じことです。 VB6.0の時代はこれを頭文字(プリフィックス)で カバーすることが多かったです。 先ほどの回答にも重なる箇所があるのですが、VB.NET以降では これについては変数の範囲(スコープ)を意識することで 解決しましょう。 ブロックレベルであろうとプロシージャレベルであろうと 「使う範囲の先頭」で宣言すること。 モジュール(クラス)レベルの変数を使う場合は thisなども意識的に使う必要があります。 PHPでも基本は同じです。 なるべく使う範囲はせまくする。 初期値を代入したりする必要がある場合は先頭のほうにまとめる。 ファイル全体に渡る場合はファイルの先頭にまとめる。 PHPは変数がいきなり代入されるところから登場したりしますよね。 それによって別の場所で同じ変数が使われてバグになることも 確かにあります。 ただ、その場合はひとつの関数が大きくなっていませんか? 行数が多くてスクロールしていかないと全体を把握できないとか。 ひとつの関数にはひとつの役割、という考えが推奨されることが多いです。 クラスや関数をわけることにより、一度に扱うコードの量が減り、 変数の重複などが起こらないように注意することもできます。 ここまで来ると、適切な設計ができているのかとか、 変数名や関数名が妥当なものであるのかとか、 変数の宣言だけの問題ではなくなりますね。 よい変数宣言をするためにはコーディング全体の知識、 さらには設計やテスト、などなど...と、突き詰めると壮大な話に。 がんばってください。

nbsp0606
質問者

お礼

またしてもありがとうございます。 >などなど...と、突き詰めると壮大な話に。 まったく、その通りですよね。 質問時点では、カンタンに考えていたため、ザックリな質問になっていますが、 今回、皆さんから回答をいくつか頂いてみて、文法の基本事項も含め、 もっと深く、また広く考えるべきことが他に沢山ありそうだなと痛感しました。 特にdurararaさんからは、的を射た貴重なアドバイスをして頂いていることはよく分かるのですが、 私がまだ未熟であるためにそのアドバイスに対して的確にレスポンスできないことに歯がゆさを感じています。 今、私が使っているのは、おそらくVB6.0だと思うのですが、 私はその6.0と.NETの違いすらよく分かっていない状態なので、 この辺りもしっかり勉強していかなければなりませんね。 ちなみに、VBは、エクセル2003付属のVBAとして使っています。 なお、近い将来、C++にも手を出してみたいなと考えています。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.6

> 変数宣言の位置と、その書式についてもアドバイス頂けると大変ありがたいです 宣言の位置は先頭に集めておかないと同じ名前の変数を使いそうで怖いです。 書式は、単純な役割の変数は , で区切って宣言したりしますが、基本的には一変数一行でタイプごとに固めます。

nbsp0606
質問者

お礼

リクエストにお応え頂き、ありがとうございます。 >宣言の位置は先頭に集めておかないと同じ名前の変数を使いそうで怖い 確かに、そうですね…。(笑) 実際にも、私はそうしたミスをしたことがあるため、その怖さはよく分かります。

  • kuro-pon
  • ベストアンサー率0% (0/4)
回答No.4

変数は宣言すべきと言うのは先に回答された方々の仰る通りです。 では、どのようにすべきかと言うことですが 自分では必ず1変数1行にしています。 カンマで繋げる事も可能ですが、可読性が悪くなりますので。 また、プロシージャなどの先頭に纏めるようにしていますので、コードの途中では宣言しません。 要は自分以外の人にも読み易くすることを心掛ければ良いと思います。

nbsp0606
質問者

お礼

具体的なアドバイスをどうもありがとうございます。 変数宣言は1行1つ、 また、その位置はプロシージャなどの先頭にまとめて宣言。 やはり、これが良さそうでしょうか。 今のところ、私もその方向で検討している所です。

  • durarara
  • ベストアンサー率47% (21/44)
回答No.3

VBの場合は他の方と同様で変数の宣言はすべきだと思います。 開発の段階でバグの可能性はなるべく減らすべきです。 エラーなのに正常に処理されても困ります。 カテゴリがVisualBasicなので、頭文字や_などは不要だと自分は思います。 言語やその他のツールなどで用意されているプロパティや メソッドなどとかぶっても問題ありません。 そのかわりNamespaceやクラス名などを意識して使うことになります。 Importsなどにも関わってくるでしょう。 しかしVBScriptやJavaScriptなどでは 名前のバッティングが問題になるので 頭文字(プリフィックスとも呼びます)などを利用したほうがいいでしょう。 VB6.0の頃はIntegerだったらintをつけるなどもありました。 これらは言語やバージョンなどによって主流となっているものが違います。 コーディング規約(規則)、命名規約などで調べてみるといいでしょう。 さらに一般的なこれらよりも優先するのがチームでの決まりです。 もしあなたがチーム等で開発する場合はプロジェクトごとや 会社ごとなどの決まりを優先することが大事です。 一般的なものと違っていて苦痛なこともありますが仕方ありません。 あまり回答になってないので最後に補足で。 どのように宣言するのがスマートかというのはこの回答では 語りきれないぐらいのボリュームがあります。 保守が容易なコードだとか、きれいなコードだとか 適切な名前の付け方とか、スコープの問題とか、 上記に書いたような言語ごとの慣習とか。 設計がしっかりできているかどうかによっても変数の量が変わったりします。 ちょうど4月前後に発売された雑誌の中には コーディングの基礎を取り扱ったものもあります。 そういったものを色々読み漁ってみるのもいいと思います。

nbsp0606
質問者

お礼

多岐にわたるアドバイスをありがとうございます。 仕事でプログラミングされている方なのでしょうね。 私は日曜プログラマですが、色々と参考になりました。 私はVB以外には、PHPを使うこともあるのですが、 PHPは、変数を割と大雑把に使える言語なので、VBではどうしたら良いだろうかと 迷っていました。 チームでの決まりや、他者に対する配慮などは、 PHPの習得の際に色々と調べたことがあり、 そのあたりの概念的知識は、多少はあるとは思いますが、 PHPのそれとはまた違った慣習などがありそうですね。 >どのように宣言するのがスマートかというのはこの回答では 語りきれないぐらいのボリュームがあります。 言わんとすることは、よく分かります。 私に分相応なレベルで、少しずつ、より良いスタイルを築けていければと思います。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

変数は宣言するようにして宣言が無いとエラーになるようにしたほうがベストだと思います。 そうすることによって変数のタイプミスによるエラー(分かりにくい)がなくなります。 変数名は自分の頭文字を一文字加えて内容が分かりやすい文字列にしたほうがいいでしょう 頭文字と"_"などをを加えることによりプロパティやメソッド名とバッティングしなくなります。

nbsp0606
質問者

お礼

変数をより限定的にすることで、そこからハズレタ時にはエラーが発生しますから、 そういうスタイルにすることで、タイプミスによるエラーの回避率を上げられる、 というお話ですね。ごもっともです。 また、変数名の頭文字に自分独自の文字を加えるというのは、 いわゆる、自分流のコーディング規約を作る、という考え方ですね。 これにより、名前の重複によるエラーを回避しやすくなりますね。 こちらも勉強になります。 なお、下の回答に対する「お礼」の所でも書かせて頂きましたが、 変数宣言の位置と、その書式についてもアドバイス頂けると大変ありがたいです。 もし、また機会がありましたら、教えて下さい。 回答ありがとうございました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

変数は名前と属性を宣言します。暗黙宣言だと属性が仮定されて意図した属性にならない場合があり、結果がおかしくなることがあります。 変数をきちんと宣言することが他の言語を利用する際にも役立ちます。

nbsp0606
質問者

お礼

VBを始めて1ヶ月強が経ち、ようやくVBに慣れてきた所です。 回答、読ませて頂きました。 思わぬエラーを招かないためにも、 また、コード内容を正確に把握しておくという意味でも、 変数宣言は重要なのですね、よく分かりました。 それと、他の言語を使う時のことも考慮し、慣れておいた方が良いということですね。 同感です。 では、具体的に、その宣言する位置についてなのですが、 変数を使う直前で、変数宣言すべきか、 プロシージャの先頭に、その中で使う変数をすべてまとめて宣言するような形にすべきかで、迷っています。 他にも、 (1) Dim test_var as string,test2_var as byte (2) Dim test_var as string DIM test2_var as byte (1)と(2)では、どちらの方が良いか、ということでも迷っています。 もっとも、両者のどちらを選ぶかは好き好きだとは思いますが、 その好き好きの根拠などをお聞かせ頂けると、大変ありがたいです。 「根拠」の部分は、経験値がモノを言うと思いますので…。 もし、また機会がありましたら、教えて下さい。 回答ありがとうございました。

関連するQ&A

  • 変数の宣言箇所

    javaの変数の宣言箇所についてご意見をお聞かせください。 javaでメソッドの先頭で変数を纏めて宣言しているのを良く見かけますが、これは何故でしょうか。 自分は変数を使う時に一緒に宣言する方が見やすいと思いますし、ifやfor文の中で変数を宣言すると抜けたときに開放されると思います。 見やすさ、効率等を考えても、変数を使用する時に一緒にする方がよい と思いますが、如何でしょうか。 C言語とかの習性でしょうか。 ご意見、宜しくお願いします。

    • ベストアンサー
    • Java
  • 変数の宣言について

    変数の宣言のことなんですけど,何個ぐらい宣言できるのでしょうか?相当な数を宣言するとメモリ不足になってしまうそうで・・・。これから作ろうとしているプログラムは変数を相当数(それこそ万単位)なもので。ご回答の方,よろしくお願いします。

  • 変数の宣言について

    VBですけれども 変数の宣言なしに For i  ・  ・   ・ Next i などを記述しますと「変数の宣言がされていません」 というメッセージがでるのですが、テキストなどでは 変数の宣言などしていなくとも動作しますこれはどうして どういうことなのかご存知の方教えてください。 Dimとかの宣言もなしにです。 著書は 独習Visual Basic 6.0 などです。

  • パブリック変数を宣言する時に・・・

    エクセルVBAの質問です。 モジュールAとBがあるとしまして、 Aの中にあるプロシージャからBの中のプロシージャを呼び出す場合、 変数を引き渡したいとしたらパブリック変数を使いますよね? この場合宣言は、 Aの宣言セクションでするのか、 Bの宣言セクションでするのか、 あるいは両方で同じ変数を宣言するのか、 どれなんでしょ?

  • 変数宣言について

    宣言セクションに変数の宣言を強制する命令とはどういう意味でしょうか?

  • 配列変数の宣言「その1」

    「その1」 僕の見たことのある配列変数の宣言の仕方は2種類あります。 (1)・・・ int hairetu[]; (2)・・・ int [] hairetu; 現在は配列変数であることが分かりやすいという点で (2)が推奨されているというようなことは本で読んだことがあります。 今まではどちらかというと(1)をよく使っていました。 そこで、みなさんのご意見を聞いて、 今後どちらを使うのか考えてみたいと思いました。 (1)の良い所や良くない所、(2)の良い所や良くない所などもあれば教えてほしいです。

    • ベストアンサー
    • Java
  • 変数の宣言

    mdb内でsql文を使って、DeleteしたりInsertしたりしたいんですが、 Set 変数=CurrentDB の変数の宣言文は、どう書いたら良いのでしょう(?_?) どなたか、Help Me!!

  • 実際に宣言した変数を使ってない場合

    vbaです。 標準モジュール内で Public str tmp As String 等で宣言しているのに、 実際に宣言した変数を使ってない場合があるのですが それを見つけ出すことはできますか? 宣言だけしていて使ってない変数が知りたいです。 ひとつずつ検索していくしかないのでしょうか?

  • 変数宣言の var は必ずつけるものなのでしょうか

    ・関数の外で変数宣言する場合、「varありなし」で違いはあるでしょうか? ・変数宣言の var は必ずつけるものでしょうか? 理由も教えてください ・コーディング規約等に明記してどちらかに統一する類のものでしょうか? あるいは「暗黙の了解」というか「常識の範囲」の話になるのでしょうか?

  • vbscriptの変数宣言

    教えてください。 プログラム初心者です。 vbscriptで変数をDimで宣言しているものと。Dim無しの変数宣言していないく、 いきなり代入して使っているものもあります。宣言して使うものと使わないものの違いは何でしょうか? よろしくお願いします。

専門家に質問してみよう