- - PR -
インスタンスに対する変数型は、本当に、一意に決まるのか?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-12 01:04
私も C#3.0 の var 等に若干批判の気持ちがあるのは確かです。
あまり詳しくないですが、「型が推論できるから var と書ける」というのはどうかなぁと。 コンパイラはそれで型推論ができたとしても、「人間に推測させる」のは少し頂けない。 var a = 1; を人間が見たら、「aは1。多分 int」 より。 int a = 1; 「aは1。絶対 int」 と心の中で思えたほうが気が楽ですね。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-01-12 08:06
まったく同感です。 ですが、LINQ 導入のためにはどうしても必要な前フリなので、致し方ないところなのかなぁと。 (今更特例設けて型無しに走るよりはましだし。。。) でも、タイプ数が少ないのもスキなので、最終的には書けるところには var って書いてしまいそうな予感です (^^;;; | ||||
|
投稿日時: 2006-01-12 19:15
objectです。
>囚人さん 私も全く同感です。 後の問題は、 「var」 の使用が 「どの様な状況の中で許可されるか」 でしょうか? >渋木宏明(ひどり)さん >ですが、LINQ 導入のためにはどうしても必要な前フリなので、致し方ないところなのかなぁと。 >(今更特例設けて型無しに走るよりはましだし。。。) 何らかの「前フリ」が必要なのは、私も理解しますが、 今回の場合、少し問題があるのではないでしょうか? >でも、タイプ数が少ないのもスキなので、最終的には書けるところには var って書いてしまいそうな予感です (^^;;; 仰ってるのは、ただ単に 「タイプ数が少ない」 という事では無く 「必要なタイプは」 という事、つまり 「不必要なタイプ迄自分では作りたくない」 という事ですよね。 それなら、同意します。 この辺をシッカリ整理して欲しいですね。 >ALL 私が問題だと考え出したのは、実はもっと前の 「ハンガリアン記法不採用」 --- (1) の時からです。 表現するのが、少し難しいので、簡単に書きます。 私は、「ハンガリアン記法」の目的は、「プルグラム上」に 「インスタンス情報」と「タイプ(型)情報」 の双方を明記し、 「具象・抽象レベルでの動きを、同時に観察出来るベース」 を作り、 最終的には、 「リファクタリングの実践場とする事」 だと考えています。 つまり、 「インスタンス情報、タイプ情報」 双方がセットとして存在する事は、 「本質的に必要である」 と考えています。 しかし、(1)によって 「タイプ情報が、インスタンス情報から除去され」 今此処に来て、 「定義に於けるタイプ(型)情報迄が省略される」 「可能性」が出て来た訳です。 これは、大問題だと思います。 #これでは、VBユーザーだけで無く、C#ユーザー迄もが、 #抽象的に考える機会を奪われる可能性があるのではないでしょうか? それから、 「型推論」 と言いますが、 「型推論」がどんなに完全でも、 それを以って 「設計意図」 となる事は有り得ません。 #プログラムで重要なのは、その意図を明確にする事だと思います。 これは、所詮コンパイラは、 「補助的な役目しか出来ない」 という事でもあると思います。 兎に角、この辺りの変更は 「シッカリ議論をしてからにして欲しい」 と私は思っています。 | ||||
|
投稿日時: 2006-01-12 19:35
そういうときにこそ、MVP を使ってください。MVP は、強い口調でマイクロソフトに意見することが出来ます。マイクロソフトにとって、MVP はバックに多数のユーザがついている、ユーザの代表なのです。 あと、ご案内。 「C#の設計者 アンダース ヘルスバーグ に聞きたい事」 http://vsug.jp/tabid/63/forumid/45/postid/1423/view/topic/Default.aspx 私としては、囚人さんのを見て思ったのですが、 var s = new StringBuilder(); よりも、 StringBuilder s = new(); のほうがいいなぁ。。。代入しようとしている型から s の型が推論できるなら、宣言している型から作らなければならない型を推論することも出来るのでは? ___________________________________ □ written by Jitta on 2006/01/12 _________________ | ||||
|
投稿日時: 2006-01-12 20:03
StringBuilder s = new とタイプした段階で StringBuilder s = new StringBuilder() ってインテリセンスが働けば それですむように思ったりする | ||||
|
投稿日時: 2006-01-12 20:35
VS2003 の IDE 上で、C# にはこのインテリセンスの機能が既にあります。 インテリセンスに凝ったハズの VB は何故かありませんが... IDE 上の話であり言語の文法上の話と完全に直結はできませんが、 2005 ではさらにインテリセンスが強化されているようです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-12 22:14
インテリセンスのある環境なら、ね(負け惜しみ) 「何かの型 s に、StringBuilder の新規インスタンスを代入する」 より、 「StringBuilder のインスタンス s を新規作成する」 と読める方がいいなぁ、、、という趣旨です。 VB なら、宣言は Dim から始まるので、 As New CLASS という書き方が出来るのは、意味があると思います。 そうではなく、わざわざ var として宣言する意味がわからない、ということです。LINQ をやれば、わかるのかな? | ||||
|
投稿日時: 2006-01-12 22:28
LINQでしょう。 宣言型を推論しなければならない(コード上にかけない)、と。 --追記 varは、いってみればVBでのDimの代わりですよね。 [ メッセージ編集済み 編集者: なちゃ 編集日時 2006-01-12 22:29 ] |