- PR -

インスタンスに対する変数型は、本当に、一意に決まるのか?

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 14:30
引用:

Jittaさんの書き込み (2006-01-12 19:35) より:

var s = new StringBuilder(); よりも、
StringBuilder s = new(); のほうがいいなぁ。。。


私も型が「先」のスタイルである後者の方が違和感がなくて良いと思います。
VB は型が後のスタイルだから、ああなっているだけですので、VB に合わせる必要はありません。

殆どの場合、宣言型と同じ型のインスタンスが入りますからこれは是非採用して欲しいです。
特に、using への効果が期待できます。

コード:

    using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection("..."))

               ↓

    using (System.Data.SqlClient.SqlConnection connection = new("..."))


ああ、なんてスッキリなんでしょう。(^ω^*)

引用:

渋木宏明(ひどり)さんの書き込み (2006-01-14 13:01) より:

# Vote しますよ


Vote してください。(^^)

  Suggestion Details : 同じ型のインスタンスを宣言と同時に生成する時、型を省略したい

何なら周辺の MVP に Vote を呼びかけるように言おうかな。(^^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-14 16:39
StringBuilder s = new();
の件ですが、私は反対に一票です。

実際の型が何かを決定すべきなのは、参照側ではなく、インスタンス側がいいです。
(参照側、インスタンス側とは変な言葉ですが、ここでは C# で TypeName t = new TypeName() と書いたときの、左辺を参照側、右辺をインスタンス側とします。)

参照の使用者は、実際の型が何かは明確に分からなくても使用できるべきです。
器が、コーヒーカップか牛乳瓶かボールなのかは知らないが、液体を入れることは知っている。

器 u1 = new 牛乳瓶();
器 u2 = new 麦茶入れ();

var は、液体を入れられる事すら分からないので、変な気持ちになるんでしょうか。

よって、反対と書きましたが、一つ制限を加えてもらえれば賛成です。
StringBuilder s = new();
とかけるのは、型 が sealed(NotInheritable) のときのみ。どうでしょう。

_________________
囚人のジレンマな日々
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2006-01-14 16:44
引用:

Jittaさんの書き込み (2006-01-12 19:35) より:

var s = new StringBuilder(); よりも、
StringBuilder s = new(); のほうがいいなぁ。。。


StringBuilder s();
でも書けると楽、私の右手の小指が楽。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 16:53
引用:

囚人さんの書き込み (2006-01-14 16:39) より:

器 u1 = new 牛乳瓶();
器 u2 = new 麦茶入れ();


器 u3 = new 器(); のように同一の時だけという意味だったのですが...
派生した型であれば、上記の u1, u2 で書けば良いかなと。

それでも、LINQ のことを考えると微妙かな。(~-~;)
一貫性という意味では現状でもマイナスという意見には賛成。(C# では)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-14 17:04
引用:

器 u3 = new 器(); のように同一の時だけという意味だったのですが...


いえ、これは「現C#」のコードを書いただけです^^;

宣言型とインスタンスが同じ型のとき、且つ、型が sealed という制限を設けておくと、過度に使用する機会が減るのではないかと。
ポリモーフィックに書けるのに、new() と書いた事によって云々…とならないように。

もしや var みたいにローカル変数限定とか?


_________________
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-01-14 17:06 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 17:15
引用:

囚人さんの書き込み (2006-01-14 17:04) より:

いえ、これは「現C#」のコードを書いただけです^^;


やはり、次期のことを睨んでの発言ですか。
確かに一貫性がなくなるという点では反対です。
そういうレベルだと、var で対応させた方が遥かに良いかも。

引用:

もしや var みたいにローカル変数限定とか?


個人的には、using ステートメントで欲しいだけですから。(^^;)
using が改良されればそれでヨシとも言える...

必要であれば、Product Feedback Center の内容を Edit してください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-01-14 21:09
出遅れましたが、私は、キーボードのタイピング数を少なくするために言語仕様を変えることにはメリットを見出せません。ソースコードは1回だけ入力して、デバッグ時には複数回それを見て解釈することがほとんどですから、見て解釈するときにいかに解釈しやすいかというメリットがあるかどうかで、言語仕様を決めたほうが良いと思います。

したがって、言語仕様は、

StringBuilder s = new StringBuilder();

のままでいいと思います。
IDE が、入力時のインテリセンスを効かせてくれて、また、IDE がソースコードを表示時に、

StringBuilder s = new 左辺と同じ();

か、

右辺と同じ s = new StringBuilder();

みたいに表示してくれれば良いと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-15 01:58
やっぱり var で回答が来ちゃったか...
using だけ横長 || 改行を防ぐことができれば満足なので、まあいいかな。
ちなみに、私はタイプ数なんてものは気にしていません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)