■80776 / inTopicNo.4) |
Re[1]: string()とは? |
□投稿者/ 魔界の仮面弁士 (808回)-(2016/08/10(Wed) 12:29:48)
|
■No80764 (あ さん) に返信 > これらの違いについて教えてください。 表現が違うだけで、コンパイル結果は完全に同一です。
それに VBA においても、「配列を返す Function」を作る場合には、 Function GetLines() As String() という記述が使われますよね。
そういえば Java の配列も「int x[];」と「int[] x;」の両方が使えた気が。
> 同じものでしょうか? どちらの記法を使うにしても、開発時に IntelliSense で型情報を表示した場合の見え方は一緒ですし、 コンパイル結果としても完全に同一です。ですから、どちらを使って頂いても構いません。 (IntelliSense での見え方は、VS バージョンによって異なりますが)
ただ、一つのソースの中で両方の記述を混在させるのは見苦しいので、 特に理由がない限りは、いずれかの記法に揃えた方が良いでしょうね。
Microsoft 提供のサンプルでも、執筆者などで記述が異なったりしますので、 サンプルを切り張りした際に混在させないように注意しましょう。
> どちらを使うべきでしょうか?
統計を取ったわけではないので、どちらの勢力が優勢なのかは判断しかねますが、 以下、個人的な見解を:
歴史的な文法構文の背景事情もあり、BASIC 系言語を 主とする開発現場では、変数側に括弧をつける 『Dim x() As Integer』形式の記法が良く使われるようです。 その方が、VBA や VB6 からの移植の際に都合が良いでしょうしね。
また、文法上は Dim x As Integer?, y As Integer(), z As Integer といった宣言を Dim x?, y(), z As Integer のようにまとめられるといったメリットもあります。
それに、Dim x(8) As Integer というコードを As Integer() 構文で書くと冗長になってしまいます。 https://msdn.microsoft.com/ja-jp/library/0h95tbbb.aspx
VB しか使わないのであれば、変数側に付けた方が便利でしょうね。
その一方で、C# を併用するような開発現場の場合は、上記とは逆に、 『Dim x As Integer()』形式が好まれたりします。
これは、C# の言語仕様が、型に括弧をつける 『int[] x;』形式の構文なので、VB 側も合わせておいた方が 分かりやすいというのが要因の一つです。 (もっとも、C# と VB では使う括弧記号が異なりますが…)
.NET の型システムとしては、型の方に括弧を付けるようになっていますのし、 複数の言語を扱う場合には、こちらの記法の方が統一感があって良さそうです。
とはいえ、C# でも変数側に括弧をつける事はあるのですけれどね。 「private fixed string x[30];」のように。 特殊な構文なので、あまり見かけるものではないですけれども。
ちなみに、VB2005 当時、マイクロソフトとしては https://msdn.microsoft.com/ja-jp/library/h63fsef3%28vs.80%29.aspx https://msdn.microsoft.com/en-us/library/h63fsef3%28vs.80%29.aspx 》 配列指定子は、次のように、型ではなく変数に指定します。 》 Dim letters3() As String = {"a", "b", "c"} 》 次のような記述は避けます。 》 Dim letters4 As String() = {"a", "b", "c"} という方針を取っていました。
しかし 2010 を境に、現在では上記の方針を逆転させています。 現在の方針はこちらをご覧ください。 https://msdn.microsoft.com/en-us/library/h63fsef3.aspx
現在は "Roslyn" が採用されていますし、今後は As Integer() 形式に シフトしていくのかもしれませんね。
蛇足ですが、CodeDOM 開発環境によって自動生成される VB コードにおいては、 変数側にカッコをつける配列宣言が採用されています。
たとえば下記のコードを実行すると、 '配列宣言 Dim Test() As Integer と書かれたコードが生成されます。
'==== CodeDOM によるコード生成 Imports System.CodeDom Imports System.CodeDom.Compiler Imports System.IO
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim provider As CodeDomProvider provider = CodeDomProvider.CreateProvider("VisualBasic") 'provider = CodeDomProvider.CreateProvider("C#") 'provider = CodeDomProvider.CreateProvider("C++") 'provider = CodeDomProvider.CreateProvider("JScript")
Dim sw As New StringWriter()
Dim com As New CodeCommentStatement("配列宣言") Dim var As New CodeVariableDeclarationStatement(GetType(Integer()), "Test")
provider.GenerateCodeFromStatement(com, sw, Nothing) provider.GenerateCodeFromStatement(var, sw, Nothing)
Dim GeneratedSource As String = sw.ToString() Clipboard.SetText(GeneratedSource) Label1.Text = GeneratedSource End Sub End Class
|
|