配列について への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 よねKEN  ()
投稿日時
2008/7/11 18:33:00
>>1
> ただしこちらの記法だと、初期配列サイズを指定する
> 記法は使えません。(Dim a As Integer(5) は NG)
型に()を付ける書き方の場合に同様のことをやるには、
Dim a As New Integer(5){}
というふうに記述することになりますね。
これは、
Dim a As Integer() = New Integer(5){}
という記述を略したものです。
> ただしこちらの記法だと、初期配列サイズを指定する
> 記法は使えません。(Dim a As Integer(5) は NG)
型に()を付ける書き方の場合に同様のことをやるには、
Dim a As New Integer(5){}
というふうに記述することになりますね。
これは、
Dim a As Integer() = New Integer(5){}
という記述を略したものです。
投稿者 よねKEN  ()
投稿日時
2008/7/11 18:28:00
> Dim aaa() As Integer
> Dim bbb As Integer()
見た目が異なるだけで動作上はまったく差はありません。
どちらの記述が一般的か?については簡単には決められません。
前者の書き方は.NET Framework対応版でないVisual Basic 6.0以前からある書き方です。
従来のいくつかの他の言語でも同様に、変数に対して括弧を付けることで配列を表す
言語は多いので、一般的にも馴染みのある書き方だと思います。
後者の書き方は.NET Framework対応版のVisual Basic.net2002から書けるようになった書き方です。
.NET的には後者の記述方法の方が、型システムの考え方に一致する書き方です。
従来の変数に括弧を付けて配列と表現する方法ではなく、
「xxxの配列」というように配列を専用の型と見る考え方であると言えます。
仕事での開発なら、その仕事の中での流儀に合わせた書き方にするべきでしょう。
個人の趣味の開発なら、どちらでも好きな方を使えばよいと思います。
> Dim bbb As Integer()
見た目が異なるだけで動作上はまったく差はありません。
どちらの記述が一般的か?については簡単には決められません。
前者の書き方は.NET Framework対応版でないVisual Basic 6.0以前からある書き方です。
従来のいくつかの他の言語でも同様に、変数に対して括弧を付けることで配列を表す
言語は多いので、一般的にも馴染みのある書き方だと思います。
後者の書き方は.NET Framework対応版のVisual Basic.net2002から書けるようになった書き方です。
.NET的には後者の記述方法の方が、型システムの考え方に一致する書き方です。
従来の変数に括弧を付けて配列と表現する方法ではなく、
「xxxの配列」というように配列を専用の型と見る考え方であると言えます。
仕事での開発なら、その仕事の中での流儀に合わせた書き方にするべきでしょう。
個人の趣味の開発なら、どちらでも好きな方を使えばよいと思います。
投稿者 魔界の仮面弁士  ()
投稿日時
2008/7/11 18:26:00
> Dim aaa() As Integer
> Dim bbb As Integer()
違いは全くありません。
コンパイルすると、どちらも同じILに変換されます。
VB においては歴史的な経緯から、変数名に括弧をつけた
Dim a() As Integer
のコードが多く使われます。初期配列サイズを指定する
Dim a(5) As Integer
の記述が行えるのも、こちらの記法のみです。
では、Integer() の記法はどのような時に使うかというと
Function Test() As Integer()
のように、配列を返す関数を定義する場合などです。
また、C# の配列宣言では、型名の方に括弧が付くため、
複数の言語を使い分ける人達の間では、統一感のために
Dim a As Integer()
の方の構文を好む場合もあるようです。
ただしこちらの記法だと、初期配列サイズを指定する
記法は使えません。(Dim a As Integer(5) は NG)
なお、みどりさんが書かれた ReDim を使う初期化や
Dim a() As Integer = {1, 2, 0}
Dim a As Integer() = {1, 2, 0}
といった初期化については、変数名括弧と型名括弧の
どちらの表記法でも利用できます。
> Dim bbb As Integer()
違いは全くありません。
コンパイルすると、どちらも同じILに変換されます。
VB においては歴史的な経緯から、変数名に括弧をつけた
Dim a() As Integer
のコードが多く使われます。初期配列サイズを指定する
Dim a(5) As Integer
の記述が行えるのも、こちらの記法のみです。
では、Integer() の記法はどのような時に使うかというと
Function Test() As Integer()
のように、配列を返す関数を定義する場合などです。
また、C# の配列宣言では、型名の方に括弧が付くため、
複数の言語を使い分ける人達の間では、統一感のために
Dim a As Integer()
の方の構文を好む場合もあるようです。
ただしこちらの記法だと、初期配列サイズを指定する
記法は使えません。(Dim a As Integer(5) は NG)
なお、みどりさんが書かれた ReDim を使う初期化や
Dim a() As Integer = {1, 2, 0}
Dim a As Integer() = {1, 2, 0}
といった初期化については、変数名括弧と型名括弧の
どちらの表記法でも利用できます。
投稿者 みどり  ()
投稿日時
2008/7/11 16:54:00
配列についての質問なのですが、以下の宣言方法に違いがあるのでしょうか?
どちらも同じような動作をしているようなのですが、何か内部的には大きな違いがあったり、動作速度やメモリの消費に違いがあるのでしょうか?
また、もし違いがないのであればどちらの記述方法が一般的なのでしょうか?
Dim aaa() As Integer
Dim bbb As Integer()
ReDim aaa(1)
ReDim bbb(1)
aaa(0) = 1
aaa(1) = 2
bbb(0) = 10
bbb(1) = 20
Trace.WriteLine(aaa(0))
Trace.WriteLine(aaa(1))
Trace.WriteLine(bbb(0))
Trace.WriteLine(bbb(1))
どちらも同じような動作をしているようなのですが、何か内部的には大きな違いがあったり、動作速度やメモリの消費に違いがあるのでしょうか?
また、もし違いがないのであればどちらの記述方法が一般的なのでしょうか?
Dim aaa() As Integer
Dim bbb As Integer()
ReDim aaa(1)
ReDim bbb(1)
aaa(0) = 1
aaa(1) = 2
bbb(0) = 10
bbb(1) = 20
Trace.WriteLine(aaa(0))
Trace.WriteLine(aaa(1))
Trace.WriteLine(bbb(0))
Trace.WriteLine(bbb(1))
将来はC#にもトライしてみたいしので Integer() の記述に統一していきたいと思います。
ちなみに、自作を含めて、クラス変数(?インスタンス)の定義の場合も同じなのでしょうか?
クラスについてはいまいち理解できていないのですが...