R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

暗に型を設ける(その2)

http://blogs.wankuma.com/rti/archive/2007/06/20/81431.aspx
暗に型を設ける

の続きです。

本当は続く予定はなかったんですが、皆さんのコメントを読んでいるうちに便利さがわかってきました。
なので、再度この件について考えてみようと思った訳です。

確かに


BaseClass a = new MyClass();


と書く場合よりも


MyClass a = new MyClass();


と書く場合の方がダントツに多いです。

と言うことは、


var a = new MyClass();


と書いても良いですね。

それに、クラス名は厳密さを求めるために、つい長い名前をつけてしまうことが多いので、上記のように書けるのは良いですね。

値型の初期化をする場合も、


var i = int.MinValue;
var s = string.Empty;
var l = 15L;


のように書けば曖昧さも排除できます。
(それに変数名が揃って見た目も奇麗w)

最も使用するであろう

使い捨て変数

においても便利かもしれません。

小さいブロックの中だけで使用するような変数の場合、型の選択を厳密に行う必要もなく、単に int にしていたりする訳ですから、同じ感覚で var としてしまっても、あまり変わりは無いような気もしてきました。

投稿日時 : 2007年6月21日 13:19

Feedback

# re: 暗に型を設ける(その2) 2007/06/21 15:02 とりこびと

>小さいブロックの中だけで使用するような変数の場合、
>型の選択を厳密に行う必要もなく、単に int にしていたりする訳

ん~???ちょっとよくわかりません。
ブロックの大きさで、変数の型の厳密さが変わる・・・ということですか?

# re: 暗に型を設ける(その2) 2007/06/21 15:09 HiJun

var a = new MyClass();
としたときのa.disppose();みたいな開放処理って
できるのかが気になってしまった...
でも環境ないし...

# re: 暗に型を設ける(その2) 2007/06/21 15:28 R・田中一郎

とりこびと さん

>ブロックの大きさで、変数の型の厳密さが変わる・・・ということですか?

その解釈は微妙に違います。

if (i) {
  int i = 5;
  ・・・ 
}

たとえば上記の場合において、i は byte 型でも十分だから byte型を用いるべきだという人はいませんし、殆どの場合は int で十分です。
同じような感覚で var を使えばいいんじゃないかということです。

-----------------------------------------
HiJun さん

>でも環境ないし...

僕も環境を作ろうかと思っています。
なのでまだ試していません。

が、

>var a = new MyClass();

これは、

MyClass a = new MyClass();

として型推論される訳だから、Dispose() できますよ。
(と試さずに言ってみるテスト)

>としたときのa.disppose();みたいな開放処理って

厳密に言うと、上記ではコンパイルエラーになりますが。

# re: 暗に型を設ける(その2) 2007/06/21 16:10 じゃんぬねっと

> コンストラクタだけを書けば良いというのは楽ですね。

???

# re: 暗に型を設ける(その2) 2007/06/21 17:03 Orator

> if (i) {
>  int i = 5;
>  ・・・ 
> }

CS0136 / CS0029 かな?

# re: 暗に型を設ける(その2) 2007/06/21 17:15 R・田中一郎

じゃんぬねっと さん

修正しておきました。

--------------------------
Orator さん

>CS0136 / CS0029 かな?

単なる間違いです。

# re: 暗に型を設ける(その2) 2007/06/21 19:41 かるあ

クラスのフィールドやプロパティ以外は var でいい気がする。
あとは匿名型との絡みの部分があるかな。

> R さん
> > としたときのa.disppose();みたいな開放処理って
> 厳密に言うと、上記ではコンパイルエラーになりますが。

なぜコンパイルエラー?ってスペルミスかw

# re: 暗に型を設ける(その2) 2007/06/21 23:57 Kazuki

>かるあさん
確かローカル変数でしかvarは使えないようになってます。

class R {
var name = "Rさん"; // コンパイルエラー

public void Foo(var a) { } // コンパイルエラー
}

# re: 暗に型を設ける(その2) 2007/06/22 0:17 かるあ

> Kazuki さん
はっ!!そうでしたね。ありがとうございます。
っていうことはどんどん使っていこうってことか。

もっとも一つのメソッドが数百行あるようなメソッドは別

# re: 暗に型を設ける(その2) 2007/06/22 14:52 R・田中一郎

30日に登壇予定のかるあ先生

>あとは匿名型との絡みの部分があるかな。

匿名型は、今日のネタにしちゃいました。

---------------------------------------------
Kazuki さん

>確かローカル変数でしかvarは使えないようになってます。

逆に「せめて、これくらいの制限を付けてもらわないと、という気もしていたり。

# re: 暗に型を設ける(その2) 2007/06/22 18:59 Kazuki

> っていうことはどんどん使っていこうってことか。
1画面に収まる程度のメソッドではガンガン使っていきましょうね!

> 逆に「せめて、これくらいの制限を付けてもらわないと、という気もしていたり
ですね~。
な制限なくしたらスクリプト言語になってしまいますよね。

# re: 暗に型を設ける(その2) 2007/06/25 14:31 R・田中一郎

Kazuki さん

>1画面に収まる程度のメソッドではガンガン使っていきましょうね!

ってことは、皆さんorcasで開発しているってこと?

# re: 暗に型を設ける(その2) 2007/06/26 20:44 Kazuki

正式版が出たらってことで(笑
家と会社のPCにはコッソリBetaを入れてます。
おかげで.NET関係の環境があやしいのなんの。

仕事はJavaの人なんで実害なしです♪

# re: 暗に型を設ける(その2) 2007/06/27 16:36 R・田中一郎

Kazuki さん

>おかげで.NET関係の環境があやしいのなんの。

やっぱり orz

# re: 暗に型を設ける(その2) 2007/06/27 20:00 Kazuki

とりあえず.NET2.0の環境にOrcasを入れたら…
1.ASP.NET2.0のアプリがIIS上で動かなくなる。
(aspnet_regiis -i で復活する)
2.コンパネの管理ツールの.NET2.0構成を開くと「スナップインを作成できませんでした」と表示される。

といったことが起きてます。
後は、普通に動いてるっぽいかな…

# re: 暗に型を設ける(その2) 2007/06/29 14:11 R・田中一郎

その程度なら、入れちゃおうかなー
と、言うことで近日中に実施予定。

# re: 暗に型を設ける(その2) 2007/07/02 13:38 かるあ

実機に入れるな Beta2 まで待ったほうがいいよ。

その後のリリースのインストールで
めんどくさい作業が発生するってのが今までのパターンだし。

# re: 暗に型を設ける(その2) 2007/07/02 14:23 R・田中一郎

かるあさん

遅かったです。
しかも、インストール終盤にエラーが発生したために、動いてしまうという最悪の状況になっていますorz

タイトル  
名前  
Url
コメント