こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2010-05-21 19:12:19

QNo.5911534

困ってます

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

書き込みがあったので追加で。

具体的な位置はなるべく範囲をせまくすることを目指すべきです。
グローバルな変数よりも、モジュール(またはクラス)レベルの変数、
モジュールレベルよりもプロシージャ(メソッド)レベルの変数、
さらにそれよりも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

投稿日時 - 2010-05-21 20:42:41

お礼

またしてもありがとうございます。
まだまだ未熟な私には、ちょっと難しい内容でしたが、
今後、ジワジワ効いてきそうなお話でした。
経験値がある方だからこそ分かること、を教わることができた、
そんな風にも思いました。

頂いた回答はどちらも、他の言語との兼ね合いなども考慮されていて、
その辺りも大変参考になりました。
ありがとうございます。

参考URLもチラっと見てきましたが、
今、私が知りたいことが詰まっているような内容でしたので、
あとで、じっくり読ませて頂こうと思います。
貴重な回答をどうもありがとうございます。

投稿日時 - 2010-05-21 21:08:26

このQ&Aは役に立ちましたか?

19人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

今日は時間があるので、さらに。

変数は先頭に、これは大事ですね。
しかし、たとえプロシージャの先頭にまとめたとしても
同じ変数がモジュールの先頭にあったら同じことです。
VB6.0の時代はこれを頭文字(プリフィックス)で
カバーすることが多かったです。

先ほどの回答にも重なる箇所があるのですが、VB.NET以降では
これについては変数の範囲(スコープ)を意識することで
解決しましょう。

ブロックレベルであろうとプロシージャレベルであろうと
「使う範囲の先頭」で宣言すること。
モジュール(クラス)レベルの変数を使う場合は
thisなども意識的に使う必要があります。

PHPでも基本は同じです。
なるべく使う範囲はせまくする。
初期値を代入したりする必要がある場合は先頭のほうにまとめる。
ファイル全体に渡る場合はファイルの先頭にまとめる。
PHPは変数がいきなり代入されるところから登場したりしますよね。
それによって別の場所で同じ変数が使われてバグになることも
確かにあります。
ただ、その場合はひとつの関数が大きくなっていませんか?
行数が多くてスクロールしていかないと全体を把握できないとか。
ひとつの関数にはひとつの役割、という考えが推奨されることが多いです。
クラスや関数をわけることにより、一度に扱うコードの量が減り、
変数の重複などが起こらないように注意することもできます。

ここまで来ると、適切な設計ができているのかとか、
変数名や関数名が妥当なものであるのかとか、
変数の宣言だけの問題ではなくなりますね。
よい変数宣言をするためにはコーディング全体の知識、
さらには設計やテスト、などなど...と、突き詰めると壮大な話に。
がんばってください。

投稿日時 - 2010-05-21 21:56:12

お礼

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

>などなど...と、突き詰めると壮大な話に。

まったく、その通りですよね。
質問時点では、カンタンに考えていたため、ザックリな質問になっていますが、
今回、皆さんから回答をいくつか頂いてみて、文法の基本事項も含め、
もっと深く、また広く考えるべきことが他に沢山ありそうだなと痛感しました。

特にdurararaさんからは、的を射た貴重なアドバイスをして頂いていることはよく分かるのですが、
私がまだ未熟であるためにそのアドバイスに対して的確にレスポンスできないことに歯がゆさを感じています。

今、私が使っているのは、おそらくVB6.0だと思うのですが、
私はその6.0と.NETの違いすらよく分かっていない状態なので、
この辺りもしっかり勉強していかなければなりませんね。
ちなみに、VBは、エクセル2003付属のVBAとして使っています。
なお、近い将来、C++にも手を出してみたいなと考えています。

投稿日時 - 2010-05-21 22:36:07

ANo.6

> 変数宣言の位置と、その書式についてもアドバイス頂けると大変ありがたいです

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

投稿日時 - 2010-05-21 20:52:45

お礼

リクエストにお応え頂き、ありがとうございます。

>宣言の位置は先頭に集めておかないと同じ名前の変数を使いそうで怖い

確かに、そうですね…。(笑)
実際にも、私はそうしたミスをしたことがあるため、その怖さはよく分かります。

投稿日時 - 2010-05-21 21:12:00

ANo.4

変数は宣言すべきと言うのは先に回答された方々の仰る通りです。

では、どのようにすべきかと言うことですが
自分では必ず1変数1行にしています。
カンマで繋げる事も可能ですが、可読性が悪くなりますので。
また、プロシージャなどの先頭に纏めるようにしていますので、コードの途中では宣言しません。

要は自分以外の人にも読み易くすることを心掛ければ良いと思います。

投稿日時 - 2010-05-21 20:21:15

お礼

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

投稿日時 - 2010-05-21 20:57:15

ANo.3

VBの場合は他の方と同様で変数の宣言はすべきだと思います。
開発の段階でバグの可能性はなるべく減らすべきです。
エラーなのに正常に処理されても困ります。

カテゴリがVisualBasicなので、頭文字や_などは不要だと自分は思います。
言語やその他のツールなどで用意されているプロパティや
メソッドなどとかぶっても問題ありません。
そのかわりNamespaceやクラス名などを意識して使うことになります。
Importsなどにも関わってくるでしょう。

しかしVBScriptやJavaScriptなどでは
名前のバッティングが問題になるので
頭文字(プリフィックスとも呼びます)などを利用したほうがいいでしょう。

VB6.0の頃はIntegerだったらintをつけるなどもありました。

これらは言語やバージョンなどによって主流となっているものが違います。
コーディング規約(規則)、命名規約などで調べてみるといいでしょう。

さらに一般的なこれらよりも優先するのがチームでの決まりです。
もしあなたがチーム等で開発する場合はプロジェクトごとや
会社ごとなどの決まりを優先することが大事です。
一般的なものと違っていて苦痛なこともありますが仕方ありません。

あまり回答になってないので最後に補足で。
どのように宣言するのがスマートかというのはこの回答では
語りきれないぐらいのボリュームがあります。
保守が容易なコードだとか、きれいなコードだとか
適切な名前の付け方とか、スコープの問題とか、
上記に書いたような言語ごとの慣習とか。
設計がしっかりできているかどうかによっても変数の量が変わったりします。

ちょうど4月前後に発売された雑誌の中には
コーディングの基礎を取り扱ったものもあります。
そういったものを色々読み漁ってみるのもいいと思います。

投稿日時 - 2010-05-21 20:20:22

お礼

多岐にわたるアドバイスをありがとうございます。
仕事でプログラミングされている方なのでしょうね。
私は日曜プログラマですが、色々と参考になりました。

私はVB以外には、PHPを使うこともあるのですが、
PHPは、変数を割と大雑把に使える言語なので、VBではどうしたら良いだろうかと
迷っていました。

チームでの決まりや、他者に対する配慮などは、
PHPの習得の際に色々と調べたことがあり、
そのあたりの概念的知識は、多少はあるとは思いますが、
PHPのそれとはまた違った慣習などがありそうですね。

>どのように宣言するのがスマートかというのはこの回答では
語りきれないぐらいのボリュームがあります。

言わんとすることは、よく分かります。
私に分相応なレベルで、少しずつ、より良いスタイルを築けていければと思います。

投稿日時 - 2010-05-21 20:54:20

ANo.2

変数は宣言するようにして宣言が無いとエラーになるようにしたほうがベストだと思います。
そうすることによって変数のタイプミスによるエラー(分かりにくい)がなくなります。

変数名は自分の頭文字を一文字加えて内容が分かりやすい文字列にしたほうがいいでしょう
頭文字と"_"などをを加えることによりプロパティやメソッド名とバッティングしなくなります。

投稿日時 - 2010-05-21 19:28:18

お礼

変数をより限定的にすることで、そこからハズレタ時にはエラーが発生しますから、
そういうスタイルにすることで、タイプミスによるエラーの回避率を上げられる、
というお話ですね。ごもっともです。

また、変数名の頭文字に自分独自の文字を加えるというのは、
いわゆる、自分流のコーディング規約を作る、という考え方ですね。
これにより、名前の重複によるエラーを回避しやすくなりますね。
こちらも勉強になります。

なお、下の回答に対する「お礼」の所でも書かせて頂きましたが、
変数宣言の位置と、その書式についてもアドバイス頂けると大変ありがたいです。

もし、また機会がありましたら、教えて下さい。
回答ありがとうございました。

投稿日時 - 2010-05-21 20:11:26

ANo.1

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

投稿日時 - 2010-05-21 19:19:43

お礼

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)では、どちらの方が良いか、ということでも迷っています。

もっとも、両者のどちらを選ぶかは好き好きだとは思いますが、
その好き好きの根拠などをお聞かせ頂けると、大変ありがたいです。
「根拠」の部分は、経験値がモノを言うと思いますので…。

もし、また機会がありましたら、教えて下さい。
回答ありがとうございました。

投稿日時 - 2010-05-21 20:05:37

あなたにオススメの質問