Out of Memory

本ブログは更新を停止しました。Aerieをよろしくお願いいたします。

目次

Blog 利用状況

ニュース

2009年3月31日
更新を停止しました。引き続きAerieを御愛顧くださいませ。
2009年2月3日
原則としてコメント受付を停止しました。コメントはAerieまでお願いいたします。
詳細は2月3日のエントリをご覧ください。
2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

αετο? / aetos / あえとす

シャノン? 誰それ。

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

書庫

日記カテゴリ

is とか as とか

以下に3つのコードを掲載する。
パフォーマンスや可読性などを総合的に判断して、最も望ましいものを選びなさい。

object o = new object();
Hoge hoge = o as Hoge;
if (hoge != null)
{
    Hoge hoge2 = hoge;
}
else
{
    Hage hage = o as Hage;
    if (hage != null)
    {
        Hage hage2 = hage;
    }
    else
    {
        Hige hige = o as Hige;
        if (hige != null)
        {
            Hige hige2 = hige;
        }
    }
}
object o = new object();
Hoge hoge = o as Hoge;
Hage hage = o as Hage;
Hige hige = o as Hige;

if (hoge != null)
{
    Hoge hoge2 = hoge;
}
else if (hage != null)
{
    Hage hage2 = hage;
}
else if (hige != null)
{
    Hige hige2 = hige;
}
object o = new object();
if (o is Hoge)
{
    Hoge hoge2 = o as Hoge;
}
else if (o is Hage)
{
    Hage hage2 = o as Hage;
}
else if (o is Hige)
{
    Hige hige2 = o as Hige;
}

投稿日時 : 2007年7月11日 1:24

Feedback

# re: is とか as とか 2007/07/11 9:58 じゃんぬねっと

どれもイヤですw

# re: is とか as とか 2007/07/11 10:24 シャノン

俺もヤだけど、そこは我慢だ。

# re: is とか as とか 2007/07/11 12:43 通り*

1. 可読性:-3、パフォ:-1-1 =-2
2. 可読性:-2、パフォ:-1-1 =-2
3. 可読性:-1、パフォ:-1-1-1=-3

迷ったけど3かな。
中さんには悪いですが、私、パフォーマンスって重視してなかったり(^^;
(一応、問題にならないことの確認はするけど)

1は、良くある話だけど階層が深くなるし、
2は、取りあえず3つとも変換!ってところがしっくりしないです。
で、3は、私はisしたあとはasじゃなく絶対にキャストにするのでその分だけマイナス。

クラスを判定する目的としては、やっぱりisを使いたいって思います。
でもそういうことはこれまでにあまり無かったけど...

# re: is とか as とか 2007/07/11 12:56 シャノン

> 通り* さん
大体同じですね。俺も強いて言えば3です(それ以前に、こんなことしなきゃいけない設計を避けたいけど)。

> 私はisしたあとはasじゃなく絶対にキャスト
これはどうしてでしょう?
俺なら、isしたあとだからこそasしますけど(できる保証があるんだから)。

# re: is とか as とか 2007/07/11 12:57 シャノン

ちなみに、載せようと思ってやめた第4のコード。

object o = new object();
if( ( Hage hage = o as Hage ) != null )
{
  Hage hage2 = hage;
}

以下省略。

これ、C# だとコンパイル通らなかった。

# re: is とか as とか 2007/07/11 13:11 通り*

>(できる保証があるんだから)。
あれ? 同じ理由でキャストにしますw
私何か間違ってるのかな...

>ちなみに、載せようと思ってやめた第4のコード。
わっ、私も別パターンとしてコメントしようとしてやめてましたw
以下みたいにすればいいですが、
Hage hage; // ←ここが悲しいw
if( ( hage = o as Hage ) != null )
{
  Hage hage2 = hage;
}

# re: is とか as とか 2007/07/12 10:24 シャノン

> あれ? 同じ理由でキャストにしますw

キャストより as の方が速いとどこかで聞いたのを鵜呑みにしていますw
また、is と as は性質がよく似ているので、ペアで用いたいです。is とキャストは性質が違います。

タイトル
名前
Url
コメント