問題タブ [operator-precedence]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - int [] arr = {0}; int value = arr [arr [0] ++]; 値=1?
今日、私はEric Lippertによる、演算子の優先順位と評価の順序の間の神話を明らかにしようとしている記事に出くわしました。最後に、私を混乱させた2つのコードスニペットがありました。最初のスニペットは次のとおりです。
ここで、変数値の値について考えるとき、単純に1と計算します。これが私がそれが機能していると思った方法です。
- まず、arrを1つの項目を含むintの配列として宣言します。このアイテムの値は0です。
- 次に、この場合はarr[0]-0の値を取得します。
- 3番目にarr[ステップ2の値]の値を取得します(これはまだ0です)-arr[0]を再度取得します--まだ0です。
- 4番目に、ステップ3(0)の値を変数値に割り当てます。--value=0になりました
- ステップ2の値に追加します1---ここでarr[0]=1です。
どうやらこれは間違っています。インクリメントが実際にいつ発生するかについての明示的なステートメントをC#仕様で検索しようとしましたが、見つかりませんでした。
2番目のスニペットは、このトピックに関するEricのブログ投稿のコメントからのものです。
配列を宣言し、iに1を割り当てた後、このプログラムがどのように実行されるかを次に示します。[私と一緒にplzクマ]
- データを取得[i]-1
- ステップ1の値に値5--6を追加します
- data [i](まだ1)にステップ2の値を割り当てます--data [i] = 6
- インクリメントi--i=2
私の理解によると、この配列には値{11、27、33}が含まれているはずです。ただし、ループして配列値を出力すると、{11、38、33}が得られました。これは、配列を逆参照する前にポストインクリメントが発生したことを意味します。
どうして?この投稿の増分は投稿であると想定されていませんか?つまり、他のすべての後に起こります。
私は何が欠けているのですか?
python - Python 文字列の書式設定と文字列の乗算の奇妙さ
Python は、数値の乗算を行うと思われる場所で文字列の乗算を行っていますが、その理由はわかりません。
型を整数に強制しても何もしません。(私はこれが冗長であることを理解していますが、それは私にとってばかチェックです:
明らかに私は問題を解決しました (括弧を追加すると解決します) が、ここで何が起こっているのでしょうか? これが覚えておかなければならない単なる癖であれば、それで問題ありませんが、この背後にあるロジックを理解したいと思います。
c# - この Console.WriteLine ステートメントのどこにバグがありますか?
次のコードを実行すると、出力が得られます。
答えは次のとおりです。 <br>
<br>
2 行目に何が起こったのか、次のようになると予想されます。
答えは次のとおりです。 <br>
疑問に思っているサーファーのために答えを明確にするために:
として評価されている
c++ - 式(++ x)+(++ x)+(++ x)の結果をどのように説明しますか?
出力はであると思いますが11
、実際は12
です。なんで?
c++ - 初期化子リスト *引数* 評価順序
そのため、C++ 標準では、コンストラクターの初期化子リストに記載されている順序ではなく、クラスで宣言されている順序でクラス メンバーを初期化する必要があります。ただし、これは、これらの初期化への引数が評価される順序については何も意味しません。シリアル化オブジェクトへの参照を頻繁に渡すシステムで作業しており、オブジェクトのフィールドにビットが書き込まれる順序とは無関係に、ビットが正しい順序で読み取られるようにできるかどうか疑問に思っています。
ints
明らかに、宣言内のやのようなものを並べ替えるdoubles
のはそれほど大したことではありませんが、より大きなオブジェクトや動的割り当てを必要とするものは、場合によってはそうなる場合があります。
perl - Perl は式中の項を評価する順序をどのように決定しますか?
コードを考えると:
私は次のよう$x
になると思います180
:
しかし、そうではあり30
ません。ただし、用語の順序を変更すると、次のようになります。
私は得180
ます。私が混乱している理由は、それperldoc perlop
が非常にはっきりと言っているからです:
Perl では TERM が最も優先されます。それらには、変数、引用符および引用符のような演算子、括弧内の式、および引数が括弧で囲まれている関数が含まれます。
は括弧内にあるため($x += 5)
、項である必要があり、式の順序に関係なく最初に実行されます。
linq-to-sql - linq2sql は FK のみを含むテーブルをどのように処理しますか?
次のようなマッピングテーブルがあります。
Article_to_Categories
記事 ID カテゴリ ID
linq2sql を使用してこのテーブルに挿入するにはどうすればよいですか?
javascript - Javascriptで等しいタイムアウトが順番に実行されますか?
私がそうするとしましょう
foo が bar の前に実行を開始することを確認できますか? バーに 0 の代わりに 1、10、または 100 のタイムアウトを使用するとどうなりますか?
簡単な実験によると、タイムアウト値が等しい場合、タイムアウト ターゲットは setTimeouts 自体と同じ順序で実行されますが、この動作に依存しても安全ですか?
javascript - JavaScript 三項演算子での演算子の優先順位
三項演算子と組み合わせて、このコードの最初の部分 ( += ) に頭を悩ませているようには見えません。
このコードが機能すると思う方法は次のとおりです。
しかし、コンソールにエラーが表示されるため、それは正しくありません。
私の質問は、このコードを正しく解釈するにはどうすればよいですか?
c# - 各ループのC#は、どのような順序でリストを反復処理しますか?
C#のforeachループがSystem.Collections.Generic.List<T>
オブジェクトをループする順序について疑問に思っていました。
同じトピックについて別の質問を見つけましたが、それが私の質問に満足のいく答えになるとは感じていません。
誰かが順序が定義されていないと述べています。しかし、他の誰かが述べているように、配列を通過する順序は固定されています(0から長さ-1まで)。8.8.4foreachステートメント
順序のある標準クラスにも同じことが当てはまるとも言われています(例List<T>
)。それをバックアップするためのドキュメントが見つかりません。ですから、今はそのように機能するかもしれませんが、次の.NETバージョンでは異なる可能性があります(可能性は低いかもしれませんが)。
私もList(t).Enumerator
運がなくてドキュメントを見ました。
別の関連する質問は、Javaの場合、ドキュメントで具体的に言及されていると述べています。
List.iterator()
このリストの要素に対して適切な順序でイテレータを返します。」
私はC#のドキュメントでそのようなものを探しています。
前もって感謝します。
編集:すべての回答をありがとうございました(私が非常に多くの返信を受け取ったのは驚くべきことです)。すべての回答から私が理解しているのは、List<T>
常にインデックス付けの順序で繰り返されるということです。ただし、のJavaドキュメントList
と同様に、これを示すドキュメントの明確な平和を望んでいます。