C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.63530 の関連記事表示

<< 0 >>
■63530  Re[2]: CBoolについて(#63492スレ:63519より分岐)
□投稿者/ shu -(2012/09/04(Tue) 15:48:04)
    No63529 (魔界の仮面弁士 さん) に返信

    > shu さん的には、下記の因数判定関数(IsFactor)の実装も NG であろうかと予測します。
    > http://msdn.microsoft.com/ja-jp/library/cc344148.aspx
    >
    > もしこれが、奇数判定(IsOdd)の場合はどうでしょう?
    > Mod 2 なら、答えは 0 / 1 の二値になりますが…。
    Mod 2の答えは余りでありTrue,Falseを表すものではないのでNGです。



    >
    > >>>何を Boolean 型に変換する事を目的としているのでしょう。
    > >>
    > >> この質問に対する答えもお聞きしたいです。
    > >>
    >>変換元の集合がTrue,Falseに対し1:1で対応していて
    >
    > 1 対多の場合は使用するべきでは無く、
    > 1:1 となる場合にのみ使用するべき、という話ですね。
    >
    > ・「True なもの、False なもの、どちらでも無い物」に分かれる集合は除外される。
    > ・「True なもの/False なもの」だけの集合であっても、
    >  True / False それぞれを表す表現が複数あった場合は除外される。
    >
    > データ型に着目して考えてみた場合は、
    >
    > ・String 管理されたデータを変換する場合は、
    >  Boolean.TrueString / Boolean.FalseString の二値の場合のみ使用する。
    >
    > ・整数型の場合は、「0」と「0以外の特定の1つの数値」の場合に限定して利用。
    >  たとえば 0 / 1 や 0 / -1 や 0 / 9 などで使用するのは良いが、
    >  0 / 1〜9 などのパターン(No63518 など)では使用しない。
    >
    > という認識でよろしいでしょうか。
    良いと思います。


    > # 実数型の場合は、今回触れていなかったので考慮外。
    > # Decimal のように、0 と 0.00 とで別のバイナリになる場合もあるので、
    > # 下手に触れるとややこしいことになりそう。(^^;
    >
    >
    > 上記のとおりだとしたら、「e.State And DrawItemState.Selected」の結果は、
    > DrawItemState.None / DrawItemState.Selected のどちらか二値である
    > という見方をすることで許容されそうにも感じますが、これは不味いのでしょうか。
    見方としてNone(=0)をFalseに対応させ、SelectedをTrueに対応させる
    ということが出来なくはないですが、そう考えてしまうと
    A And Maskの結果が論理上、
    Integerになったり (Maskが2つ以上のフラグ(B or Cなど)の値である場合)
    Booleanになったり (Maskが1つのフラグである場合)
    してしまい分かりにくくなるということになります。
    ※Booleanになるというのは前述した1:1の関係を保ちつつBooleanへの変換が可能なことを
     言うとします。


    >>Cboolでの変換で思ったとおりに変換が出来るときに使用することを
    >>目的としていると思います。
    > こちらは、誰にとっての「思ったとおり」でしょうか?
    >
    > ある開発者が「予想」した変換規則があって、それと同様の
    > 動きを見せた場合に使うべき、という話でしょうか。
    > (開発者Aと開発者Bの「思ったとおり」は、異なるかもしれません)
    プロジェクト内での仕様で考えればよいと思います。


    >>Object型にBox化されたBoolean値をUnBox化するときに使うのが良いのではないでしょうか?
    > 私は逆に、ボックス化解除の目的では CBool を使いたく無い派です。
    >
    > IL 的には unbox だけで済む処理が、わざわざ VB の変換サービスを
    > 通すことになってしまいますので、そのような場合には
    > 型変換(CBool / CType)ではなくキャスト(DirectCast / TryCast)を好みます。
    >
    >
    > ただ、それだと読みづらいという意見が出たこともあるので、多少の
    > パフォーマンス劣化は無視して、あえて CBool を使う事はありますけれども。
    私もどちらかというとDirectcastを使うようにはしています。


    >>(明確な仕様がFrameworkレベルで定められればCBoolの方が確実ですが)
    > CBool は言語固有実装なので、Framework 側では定義されないでしょうね。
    > (VB の仕様については、先述したとおり)
    >
    > .NET Framework の場合は、
    >  Convert.ToBoolean(Int32) →0 は False、それ以外は全て True。
    > が明文化されていますね。
    >
    > IL レベルでは、native int の 0 は false 、それ以外は true です。
    > If 文相当の条件分岐としては、
    >  0x39(brfalse / brnull / brzero) → 0 ならばジャンプ
    >  0x3A(brtrue / brinst ) → 0 以外ならばジャンプ
    > が用意されています。
    仕様としてはFalseを0に対応付けするのはいろいろ内部処理上都合がよいので
    変わることはないでしょうね。
記事No.63521 のレス /過去ログ106より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -