-2


1

まだ実装されていない便利な演算子

C#に「but」演算子のためのスペースがC#にありますか?

すなわち:

if (checkBox.Checked but comboBox.SelectedItem == null) { ... }

とは対照的に

if (checkBox.Checked == false || (checkBox.Checked && comboBox.SelectedItem != null)) { ... }

現在存在しない他の演算子は、読みにくいステートメントを入力する手間を省くのに役立ちますか?

更新 + KennyTMはhttps://stackoverflow.com/questions/4071185/useful-operators-not-yet-implemented/4071203#4071203[excellent alternative]を投稿しましたが、私が提案した「しかし」演算子ですが、それは親切ですveポイントがありません。 既存の演算子を組み合わせて_any_式を作成できることを知っています。コードが意図をより良く表現できるのではないかと思っています。

I.e. _ "チェックボックスがチェックされていないか、何も選択されていない場合" _はスキャンされません。

  • UPDATE 2:* +「and」は「but」と同じだと言う人のための更新です。 私は論理的にそれが正しいことに同意します(そして、この問題を再開するつもりはありません)。

_ http://twitter.com/#!/Plip/status/40030894798544896 [お客様の食堂でランチにカレーを食べました。 それは猫の病気に少し似ていました*しかし*それはかなり美味しかったです。] + _Phil Winstanley-2011年2月22日 __

どうもありがとう。 :)

5 Answer


9


(a but b)  ==  (!a || (a && !b))
           ==  ((!a || a) && (!a || !b))
           ==  (!a || !b)

それゆえ

if (!checkBox.Checked || comboBox.SelectedItem != null) { ... }

これは、新しい演算子を作成するよりもはるかに読みやすいものではないことがわかります。 さらに、「and」、「or」、「not」はブール変数のプログラミング言語では十分に確立された意味を持ちますが、「but」はそうではないため、「(a but b )==(!a ||!b) `、全員に「a &&!b」または「a && b」の代わりに。 それは価値がありません。


4


But Extensionメソッドの記述を妨げるものは何ですか?

public static bool But(this bool original, bool secondExpression)
{
  return original || (original && secondExpression));

}

私の意見では、これは1つの言語を使用するのとは反対の言語へのプログラミングを促進するため、より優れています。


2


「しかし」は「と」と同じ意味だと思います! E.g. 「私はC#が好きですが、私はC が嫌いです」とは「私はC#が好きで、C が嫌いです」と同じことを意味します。 両方とも接続詞(結合ステートメント)です。

あなたの例では、コンボボックスがチェックされているが選択されたアイテムが存在しない状況でのみifステートメントの本体を実行したいのでしょうか? これは、ファイル化するために、コンボボックスをチェックする必要があることを意味します。すなわち:checkBox.Checked && comboBox.SelectedItem == null

したがって、「しかし」を何に翻訳すべきかのあなたの例は間違っていると思います。

私のC#は錆びていますが、C#でマクロのようなものを定義する方法があれば、 "but"を "&&"のエイリアスとして定義できますが、メリットはほとんどないと思います。


1


ここから始めると、どこで終わりますか。 しかし、あなたがそのようなものが好きなら、多分ブーはあなたのためです。 これにより、独自の構文を追加できます。


0


Perlでは、次のように書くことができます。

if ($checkBox.Checked) doSomething() unless (!$comboBox.SelectedItem);

個人的には、より表現力豊かな言語に非常に賛成していますが、http://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it [TMTOWTDI]によって引き起こされる痛みとバランスを取る必要があります。