タグ付けされた質問 「operators」

プログラミング言語に関して言えば、演算子は一般的に関数のように動作する構成ですが、構文的または意味的に通常の関数とは異なります。ウィキペディアから:http://en.wikipedia.org/wiki/Operator_%28programming%29

3
ラッパーは、同じオブジェクトをラップするときに==演算子を使用して等しいと比較する必要がありますか?
開発者がXMLから属性を簡単に解析できるようにするXML要素のラッパーを書いています。ラッパーには、ラップされるオブジェクト以外の状態はありません。 ==オペレーターのオーバーロードを含む次の実装(この例では簡略化)を検討しています。 class XmlWrapper { protected readonly XElement _element; public XmlWrapper(XElement element) { _element = element; } public string NameAttribute { get { //Get the value of the name attribute } set { //Set the value of the name attribute } } public override bool Equals(object other) { var o …
19 c#  .net  operators 

15
ビット演算子は何に適していますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 プログラミング言語には、多くの場合、さまざまなビット演算子が付属しています(ビット単位の左シフトおよび右シフト、ビット単位のAND、OR、XORなど)。これらはあまり使用されませんが、少なくとも私の経験ではそうです。これらは、プログラミングの課題やインタビューの質問で使用される場合があります。または、ソリューションで必要になる場合があります。たとえば、 等値演算子を使用せずにtrue、2つの値が等しいときに戻る関数を作成します 3番目の変数を使用せずに、2つの変数の値を交換します これらは再び、おそらく実際の使用はほとんどありません。低レベルでメモリを直接操作するため、より高速になるはずです。 なぜこれがほとんどのプログラミング言語で見つかるのですか?現実のユースケースはありますか?

6
ビット演算を使用する利点は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 最新のCodeProjectニュースレターを読んだ後、ビットごとの操作に関するこの記事に出会いました。興味深い読み物になります。整数が偶数か奇数かをチェックすることの利点は確かにわかりますが、n番目のビットが設定されているかどうかをテストしますか?これの利点は何でしょうか?

3
C ++の矢印演算子が単なる*。のエイリアスではないのはなぜですか?
c ++では、反復子などで*演算子をオーバーロードできますが、矢印(->)(。*)演算子は*演算子をオーバーロードするクラスでは機能しません。プリプロセッサは->のすべてのインスタンスを(* left).rightに簡単に置き換えることができ、それによりイテレータの実装が改善されると思います。->が異なる実用的な理由はありますか、それとも言語/デザイナーの特殊性ですか?
18 c++  operators 

2
ビットごとのORとフラグの追加
私は他の人がビットワイズORを使用してフラグを結合する前に見ました: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN | JUMP | SHOOT; それも私がやる方法です。 しかし、追加を使用してフラグを結合する(あまり多くない)ものも見ました: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN + JUMP + SHOOT; どちらが「読みやすい」のですか?(より多くの人が認識すると思いますか?)それを行う「標準的な」方法は何ですか?あなたはどちらを好みますか?
16 c++  operators 

2
C#の暗黙的な型変換演算子はいつ使用する必要がありますか?
C#では、暗黙的な変換演算子を次のようにオーバーロードできます(MSDNの例): struct Digit { /* ... */ public static implicit operator byte(Digit d) // implicit digit to byte conversion operator { /* ... */ } } したがって、型(カスタム値型)を使用して、自分自身を別の(無関係な)型に魔法のように変換し、観客を戸惑わせたままにすることができます(舞台裏を覗き込んで暗黙の変換演算子を見るまで)。 私のコードを読む人を戸惑わせるのは好きではありません。多くの人はそうは思わない。 問題は、コードを理解しにくくすることのない暗黙の型変換演算子のユースケースは何ですか?
14 c#  operators 

7
演算子はキーワードや関数よりも読みやすいですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 それは少し主観的ですが、どの要因がオペレーターを使いやすくするのか、鈍くて難しくするのかをより明確に理解したいと思っています。私は最近、言語の設計を検討してきましたが、私が常に振り返る問題の1つは、言語の重要な操作をいつ演算子にするか、キーワードや関数をいつ使用するかです。 Haskellは、カスタムオペレーターの作成が簡単であり、多くの場合、新しいデータ型が複数のオペレーターで使用できるようにパッケージ化されるため、これについてはやや悪名高いです。たとえば、Parsecライブラリには、パーサーを結合するための多数の演算子が付属して>.おり、.> 今のような宝石を覚えていますが、今の意味を思い出すことさえできませんが、彼らは実際に意味します。などの関数呼び出しleftCompose(parser1, parser2)は改善されましたか?確かにより冗長ですが、いくつかの点で明確です。 Cライクな言語での演算子のオーバーロードも同様の問題ですが、おなじみの演算子のよう+な意味を通常とは異なる新しい意味でオーバーロードするという追加の問題によって混同されます。 新しい言語では、これはかなり難しい問題のように思えます。たとえば、F#では、キャストはC#スタイルのキャスト構文または冗長VBスタイルの代わりに、数学的に導出された型キャスト演算子を使用します。C#:(int32) xVB:CType(x, int32)F#:x :> int32 理論的には、新しい言語にはほとんどの組み込み機能の演算子があります。変数宣言の代わりにdef、decまたはvar変数宣言のために、なぜそうでない! nameか、@ nameまたは類似した何か。それは確かに、宣言に続くバインディングを短縮します。@x := 5代わりに、declare x = 5またはlet x = 5 ほとんどのコードは多くの変数定義を必要とするでしょう。 オペレーターが明確で有用なのはいつですか?


4
ヌル結合演算子を使用したヌルオブジェクトのインスタンス化
次の典型的なシナリオを検討してください。 if(myObject == null) { myObject = new myClass(); } null合体演算子を使用した次の置換についてはどう思われますか? myObject = myObject ?? new myClass(); 2番目のフォームを使用する必要があるかどうかはわかりません。それはいい速記のmyObject = myObjectように思えますが、最初の構造は少しコード臭いのようです。 これは合理的なことですか、それとも私が見逃しているより良い略記ですか?または、「3行です、乗り越えてください!」 編集:前述したように、おそらくこれを典型的なシナリオと呼ぶのは誇張の言葉です。私は通常、まだ参照されている場合とされていない場合がある子参照型プロパティを持つデータベースからエンティティを取得するときに、この状況に遭遇することを発見します。 myClass myObject = myClassService.getById(id); myObject.myChildObject = myObject.myChildObject ?? new myChildClass();
12 c#  operators 

11
意味のある演算子のオーバーロードの例[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 C#を学習しているときに、C#は演算子のオーバーロードをサポートしていることがわかりました。私は良い例に問題があります: 意味をなす(例:羊と牛という名前のクラスを追加する) 2つの文字列の連結の例ではありません 基本クラスライブラリの例は大歓迎です。
12 c#  .net  operators 

1
C#で複合代入演算子をオーバーロードできないのはなぜですか?
タイトルは誤解を招く可能性があるため、質問全体をお読みください:-)。 「複合代入演算子」によってop=、たとえばこのような構造を念頭に置いてい+=ます。純粋な代入演算子(=)は私の質問に属していません。 「理由」とは、意見ではなく、デザイナー(またはその同僚)が推論(つまり、デザイン選択のソース)を表明する際のリソース(書籍、記事など)を意味します。 私はC ++とC#に見られる非対称性に困惑しています(はい、C#はC ++ 2.0ではないことを知っています)-C ++では演算子+=をオーバーロード+し、事前に定義された演算子に依存する適切な演算子をほぼ自動的に記述します C#では逆になります-オーバーロードし+、+=合成されます。 私が間違っていない場合、+=新しいオブジェクトを作成する必要があるため、実際の場合、後者のアプローチは最適化の機会を殺します。そのため、このようなアプローチには大きな利点がありますが、MSDNはあまりにも恥ずかしがり屋なので、それについて話すことはできません。 そして、その利点が何なのか疑問に思います-だから、C#の本、テクトークビデオ、ブログエントリで説明を見つけたら、参考に感謝します。 私が見つけた最も近いものは、Eric Lippertブログへのコメントです。C#でオーバーロードされた演算子が常に静的なのはなぜですか?トム・ブラウン。静的なオーバーロードが最初に決定された場合は、構造体に対してどの演算子をオーバーロードできるかを単に指定します。これにより、クラスで何をオーバーロードできるかがさらに決まります。

3
<< >>乗算と除算の速度
を使用&lt;&lt;して&gt;&gt;、Pythonで数値を乗算およ​​び除算するために使用できます。バイナリシフトを使用すると、通常の除算または乗算よりも10倍高速です。 なぜ使用している&lt;&lt;と&gt;&gt;多くのよりも速く*と/? 背後で進行しているプロセス*と/それによって非常に遅いプロセスは何ですか?

2
Pythonのパワーオペレーターを右に関連付ける理由は何ですか?
数式文字列を解析するコードを書いていますが、Pythonでチェーンされたべき乗演算子が評価される順序がExcelでの順序と異なることに気付きました。 http://docs.python.org/reference/expressions.htmlから: 「したがって、括弧で囲まれていない累乗演算子と単項演算子のシーケンスでは、演算子は右から左に評価されます(これは、オペランドの評価順序を制約しません)。-1 * 2の結果は-1になります。」* つまり、Pythonでは次のよう 2**2**3に評価されます。2**(2**3) = 2**8 = 256 Excelでは、それは逆に動作します:2^2^3として評価されます(2^2)^3 = 4^3 = 64 次に、自分のパーサーの実装を選択する必要があります。Excelの順序は、乗算の評価順序を反映しているため、実装が簡単です。 事務所周辺の何人かに評価の感触を聞いてみたところ、2^2^3さまざまな反応がありました。 Pythonの実装を支持する正当な理由や考慮事項を知っている人はいますか?あなたは答えを持っていない場合や、結果としてくださいコメントあなたは腸の感じから取得する- 64または256?

4
2つの引数のみでPHPの三項演算子を使用する
私は最近、いくつかのコードをレビューしていましたが、ぼんやりとした感覚で、次のような構造を残していることに気付きました。 $guid = empty($subscription-&gt;guid) ? : $subscription-&gt;guid; さて、これはそれがはずのものをやっていなかったとされ、間違ったが、そのプロパティは常に設定されましたので、それは罰金を働いていた、と理由の5.3以来、何の構文エラーがない、次の変更は: PHP 5.3以降、三項演算子の中間部分を省略することが可能です。式expr1?:expr1がTRUEと評価された場合、expr3はexpr1を返し、そうでない場合はexpr3を返します。 私はこの変更を認識していませんでしたが、今、それを使用する必要があるかどうかに興味があります。これは私が痛んで、あなたが例えばを行うことができますルビーのような言語から欠落していたものですa = b || cいずれかを取得するbかcではなく、「本当の」ブール。ただし、3項演算子に選択した構文は、私には少し直観に反しているようです。これを製品コードで使用する必要がありますか?偶然見た時は間違いなく自分を投げました。

6
Cでは、*は演算子ですか、それとも宣言の型の一部ですか?
Cでは*、間接演算子または間接参照演算子と呼ばれます。ステートメントで使用した場合の動作を理解しています。*por * pは、単項演算子であることを考えると、意味があります。 ただし、宣言で*は、a が使用されることがあります。 void move(int *units) { ... } または int *p = &amp;x; ここで演算子を使用しているのは不思議です。次のようなことはできません void move(int units++) { ... } どこ++にも単項演算子です。これ*は間接演算子でも*ありますか、それともポインタの型について何かを言っている別の意味がありますか?(これが当てはまる場合、私はたとえばint* units宣言などで使用することを検討していますが、int x = *p;それ以外は明確にするためです。) で、この答えはと言われています C標準では、*演算子に対して2つの意味のみを定義しています。 間接演算子 乗算演算子 これ*は実際にはタイプの一部であると主張する人々も見ました。これは私を混乱させます。
9 c  pointers  operators 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.