C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: string()とは?


(過去ログ 137 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■80764 / inTopicNo.1)  string()とは?
  
□投稿者/ あ (3回)-(2016/08/09(Tue) 22:14:31)

分類:[.NET 全般] 


VBAでは配列を定義する時に

Dim aa() as string
と書いていたのですが
VB.NETでは
Dim aa as string()
でもうまくいくようです。

これらの違いについて教えてください。

同じものでしょうか?
どちらを使うべきでしょうか?

引用返信 編集キー/
■80768 / inTopicNo.2)  Re[1]: string()とは?
□投稿者/ 真田昌幸 (23回)-(2016/08/10(Wed) 09:25:14)
No80764 (あ さん) に返信
>
> VBAでは配列を定義する時に
>
> Dim aa() as string
> と書いていたのですが
> VB.NETでは
> Dim aa as string()
> でもうまくいくようです。
>
> これらの違いについて教えてください。
>
> 同じものでしょうか?
> どちらを使うべきでしょうか?
>

過去スレ検索しましょう↓
http://bbs.wankuma.com/index.cgi?mode=al2&namber=17877&KLOG=35

べきは無いような気はします。
後ろに書く書き方は単純にC#に寄せたんじゃないでしょうか?(想像です)
integerを16bitから32bitに変えたくらいですから。

どうやら、どっちが技術的このましいとかはあまり言及されている情報は見当たりません。
気持ち悪ければ、規約で縛ってどちらかに寄せればよいかと。
これはメンバーにVB6出身者が多いか、C#、JAVA出身者が多いかによるかと。



引用返信 編集キー/
■80773 / inTopicNo.3)  Re[2]: string()とは?
□投稿者/ あ (4回)-(2016/08/10(Wed) 11:33:09)
ありがとうございます。
納得しました。
 
引用返信 編集キー/
■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
引用返信 編集キー/
■80783 / inTopicNo.5)  Re[2]: string()とは?
□投稿者/ あ (5回)-(2016/08/10(Wed) 19:27:10)
ご丁寧にご回答ありがとうございました。
参考になりました。

引用返信 編集キー/
■80788 / inTopicNo.6)  Re[3]: string()とは?
□投稿者/ あ (7回)-(2016/08/10(Wed) 21:44:41)
No80783 (あ さん) に返信
> ご丁寧にご回答ありがとうございました。
> 参考になりました。
>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -