ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9718  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

ネタ元
自称勝ち組の R.田中一郎さんのエントリ。
私も、out, ref はあまり使いたくないので、お気持ちは良くわかります。
ですが、コメントの「is の結果と Parse の結果をひとまとめにする方が違和感があります」というのも、なるほどなぁと思います。

じゃあ、こういうのはどうでしょう?
public class ParseResult {
    protected ParseResult() { }

    public ParseResult(object resultValue) {
        _resultValue = resultValue;
    }

    private object _resultValue;

    public static readonly ParseResult FailedResult = ParseFailedResult.Singleton;

    public virtual object GetResultValue() {
        return _resultValue;
    }
}

internal class ParseFailedResult : ParseResult {
    private ParseFailedResult() : base() { }

    internal static readonly ParseFailedResult Singleton = new ParseFailedResult();

    public override object GetResultValue() {
        throw new InvalidOperationException("Parse 失敗だってばよ");
    }
}
いわゆる null オブジェクトと同じですね。
成功時は値を持った ParseResult を返し、失敗したときはシングルトンである ParseResult.FailedResult を返してやる。
使用側は下記の様に判別すればよいと。
ParseResult result = OriginalParse(numberText);
if (result != ParseResult.FailedResult) {
    int resultValue = (int) result.GetResultValue();
    // some process...
}
投稿日時 : 2007年4月20日 21:10

コメント

# re: これならどうかなぁ? 2007/04/20 23:43 通りすがり
へぼろっぱぁさんの見て、以下を思いつきました。
Nullable を返してくれる TryParse です。
この方がシンプルじゃないですかぁ?

// 失敗かどうか知りたいし、値が欲しいという欲張りな人用
int? result = int.TryParse(s);
if (result != null)
return (int)result;

// 失敗かどうかなんて関係ない人用
int result = int.TryParse(s) ?? 0;

C#3.0 の拡張メソッドで実装してみたいな。
(オーバーロードはだめだったかな?)


# re: これならどうかなぁ? 2007/04/20 23:51 通りすがり
> へぼろっぱぁさんのを見て・・・
私、大きなミスをしてますねw > THREE-ONE さん
失礼しましたっ


# re: これならどうかなぁ? 2007/04/21 0:16 THREE-ONE
サイトの名前もハンドルも似たようなもんですw
御気になさらず

Nullable もはじめは考えたのですが、null を返すってのは個人的にあまりしたくないのですよ。
それに null = 失敗ってぱっとイメージしにくいかなぁと。

好みの問題ですね

# re: これならどうかなぁ? 2007/04/21 14:34 R・田中一郎
THREE-ONE さんのサンプルは、結構僕の好みだったりします。
読んでいて、すんなり入って来るように思います。

ちなみに、parl だと受け取り側も引数と同様に複数設けられるんですよね。

(a, b, c) = GetHogeHoe(1, 2, 3);

それと、通りすがり さんは、コテハンになるのかな?
全然、通りすがってない気がしますwww

>自称勝ち組の R.田中一郎さんのエントリ。

何の話だろう?w

# re: これならどうかなぁ? 2007/04/21 17:19 じゃんぬねっと
CanParse のあとに Parse の方が直感的。

# re: これならどうかなぁ? 2007/04/22 17:18 THREE-ONE
>R.田中一郎さん
田中一郎さんの意見にちょっと乗っかった感じですからね。

>じゃんぬねっとさん
確かに CanParse → Parse のほうが直感的ですね。単純だし。
Parse 処理に Parse がつくメソッド二回も呼び出すのはなんかなぁという気もしますが。

# re: これならどうかなぁ? 2007/04/22 22:39 じゃんぬねっと
「確認する」 というひとつの動作です。
「Parse する」 というひとつの動作です。

Parse が目的ならば、TryParse メソッドで検証結果を受け取らなければ良いのでは...?

# re: これならどうかなぁ? 2007/04/22 23:41 THREE-ONE
> Parse が目的ならば、TryParse メソッドで検証結果を受け取らなければ良いのでは...?
そもそも今回の話は、TryParse の out があんまり好きじゃないよねーってとこから始まってると思ってます。
out を使わずに TryParse と同じことをやるには、どうするのが一番いいだろう?って立場で書いています。
なので、これはちょっと関係ないというか元も子もないというか本末転倒な気がします。

> Parse 処理に Parse がつくメソッド二回も呼び出すのはなんかなぁという気もしますが。
これが余計でしたね。
じゃんぬねっとさんのおっしゃるとおり、CanParse → Parse が一番直感的で素直だと思います。

Post Feedback

タイトル
名前
Url:
コメント: