■69524 / inTopicNo.4) |
Re[3]: VB.NETについて |
□投稿者/ 魔界の仮面弁士 (480回)-(2014/01/06(Mon) 14:33:08)
|
■No69517 (シーマ さん) に返信 >>どうしても VB.NET でなければならないという理由がなければ、C# をお勧 >>めします。 > 自分もCを習得したいのですが、時間がかかりそうなので
C# は、C より習得しやすいと思いますよ。
>>> 更に自分の場合、変数の宣言はプロシージャの先頭部分に纏めて記述していたのですが、
.NET 以前において先頭にまとめることが多かったのは、暗黙変数利用時(Option Explicit 無し) それも DefInt 等が使われていた時代の名残です。このモードでは、特別扱いしたい変数 (配列にしたい場合など)は、明示的に変数宣言を行う必要があり、そのデータ型を 早期に(暗黙定義されるより前に)決定しておくために、先頭に記載することが多かったようです。
このほか、先頭でしか変数宣言できない他言語(C99 以前の ANSI C など)との互換性や、 変数リソースに制限のある時代のBASICで、資源管理をやりやすくする目的などの説もありますが、 理由はどうあれ、実際、かつての VB2 のヘルプ(Dim ステートメント)には、 | | ヒント プロシージャ内に Dim ステートメントを記述するときは、 | プロシージャの先頭に記述するのが、プログラム作法上、望ましいことです。 | との説明があり、VB6 のヘルプにも | | メモ プロシージャ内で Dim ステートメントを使用する場合は、 | 通常、Dim ステートメントをプロシージャの最初で記述します。 | とありました。なので、旧VBにおいて、そのようなコーディングが多いのは事実です。
しかし VB.NET では、コード ブロック内の変数スコープが導入されたこともあり >>> 実際に変数を使用する箇所に記述するコードをよく見ます のような書き方が増えています。私も直前派です。
「コード ブロック内の変数スコープ」については、下記などを参照してみてください。 http://support.microsoft.com/kb/311331/ja
変数の「宣言」と「実際に使われ始める位置」が離れてしまうと、その変数が どこで使われる物なのかあとで分かりにくくなるため、直前で宣言する (できれば、変数の初期値も同時に与えておく)ことが望ましいという考え方です。
とはいえ、プロシージャの先頭から最後まで長い間使われる重要な変数は、 先頭に纏めることもありますし、そもそも長すぎるプロシージャは、それ自体が 見直すべき対象ですので、どちらのコーディングでも間違いと言うわけではありません。
# ちなみに VBScript だと、変数利用箇所の後に Dim があっても構わないというカオス仕様…。
>>> Dim strFN As string = "ABCDE" >>> また、VB6.0時代も普通の事だったのでしょうか?
いいえ、VB6 時代にはなかった記述方法です。
> とりあえず、個人の好み位しかない感じでしょうか?
できれば両方の使い方を学んでおいてください。
後で代入する記述方法は、その変数のデータ型が明確な場合に限られます。 匿名型や Linq 構文などの場合、そもそも「As 句」を記載することができないため、 その場合には一行で無ければ書けないことになります。
Dim postItem = New With {Key .No = 69505, .Title = "VB.NETについて", .Poster = "シーマ"}
ちなみに、VB2008 以降では、 Dim a As Integer = 10 Dim b As String = "abc" といった宣言に対して、As 句を省略して Dim a = 10 Dim b = "abc" と書けるようになりました。
これは「ローカル型の推論」と呼ばれており、変数宣言時の初期値によって 適切なデータ型がコンパイル時に決定される機能です。この機能を利用する場合は 変数宣言時に初期値を割り当てておく必要があります。
この型推論の機能により、For 文のループ変数の記述方法にも変化が生じています。 http://www.gizcollabo.jp/vbtomo/boards/vbchoshoqa.php?do=leaf&num=8372
>>> コンパイル=ビルド >>> と思って間違いないでしょうか? コンパイルやリンクを行う一連の作業を指して、ビルドと呼びます。 強いて言えば『コンパイル≦ビルド』のような感じでしょうか。
VB6.EXE でビルドする際には、VB6 と同じフォルダ内に配置された VBコンパイラ(C2.EXE)と VBリンカ(LINK.EXE)が内部的に呼ばれています。 (ただし VB6 時代は、この一連の作業をコンパイルと呼んでいました)
VB.NET でビルドする際には、Visual Studio あるいは MSBuild.EXE から VBコンパイラ(VBC.EXE) が呼ばれています。また、中間言語にコンパイルされた VB アプリは、実行時に JITコンパイラ によってネイティブコードへ変換されます。
> 現在、自分が使用している環境はWindows7 32bit + VB.Net 2008 Express Editionですが、 > この環境で作ったプログラムは64bit環境で動作させるためには、コンパイルの仕方が > 違うのでしょうか?それとも64bit環境では動作させる事は無理なのでしょうか?
よく使われるのは、以下の 3 種類ですが、2008 Express で作られたアプリは、 既定で AnyCPU ビルドとなります。
・32bit専用(x86ビルド) … 常に32bit動作(64bit環境では、"WOW64"による32bit環境として動作) ・64bit専用(X64ビルド) … 常に64bit動作(32bit環境では動作しない) ・両対応(AnyCPUビルド) … 64bit環境では64bit動作、32bit環境やWOW64環境では32bit動作。
Express よりも上位のエディションであれば、開発環境から変更できますが、 Express の場合は、既にご存知のように、.vbproj 内の <Platform Target> タグで 指定することになります。
※注※ 実際のタグ名には空白が含まれません。ここの掲示板では、アール・エム・ティーという 文字列を含んでいると投稿できないため、意図的に空白を加えて投稿しています。
|
|