質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

代入しない時の「++a」と「a++」の違い(前置と後置き)

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 347

gvaslkjlie

score 4

発生している問題

問題1:代入しない時の「++a」と「a++」の違いがわからない
問題2:値を増加させた時にalertさせるのと、値を増加させた変数をalertすると数が違うのも理解できない。
for文などでは「i++」と、代入しないで増加させることが多い。
for文はよく使うので理解しておきたい。

問題1の検証(前置)

var a = 1;
++a;
alert(a);//2が表示された。

問題1の検証(後置)

var a = 1;
a++;
alert(a);//2が表示された。

問題2の検証1

var a = 1;
alert(a++);//1が表示された。

問題2の検証2

var a = 1;
a++;
alert(a);//2が表示された。

試した事

前置・後置について検索するも、数字を入れた変数に対して、増加させる時に別の変数に代入する場合ばかりで、別の変数に代入させない場合の挙動が不明だった。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+7

a++ と ++a は式です。

式と演算子 - JavaScript | MDN

式というのは大雑把に言うと、「評価できる値を持つもの」です。

式 (プログラミング) - Wikipedia

a++ の値は演算する前の a の値で、++a の値は演算する前の a の値に 1 を加えたものです。
++ は前置後置のどちらも a の値を 1 増やすという副作用を持ちます。
副作用とは、式の値と無関係に何か状態を変化させるもののことです。

副作用 (プログラム) - Wikipedia

つまり、代入や演算など式として評価した際には前置と後置は違う値を示しますが、その副作用は変数の値を 1 増やすという同じものです。

値は違うけれども副作用は同じなので、値を考えない場合、この二つは同じものであるといえます。for (let i = 0; i < 10; i++) の場合、i++ の値は捨てられています。よって副作用のみが意味を持つため、この場合前置と後置は同じものと言えます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/23 23:54

    ご回答ありがとうございます。参考URL先のページを読んでみようと思います。理解に時間がかかりそうなのでしばらくお時間いただきます。拙い質問にお付き合いくださりありがとうございました。

    キャンセル

  • 2020/07/24 00:05

    JavaScript には参照渡しが無いので書きにくいのですが、後置インクリメントは次のように書けます。

    let a = 3;

    const plusplus = () => {
    const result = a;
    a = a + 1;
    return result;
    };

    この場合、関数の戻り値は 3 です。しかし、関数終了後、a は 4 になります。この関数は値が a の元の値で、副作用が a に +1 すること、つまり a++ と同じ処理をします。

    では評価と副作用の順番を見てください。評価は関数が終わってからなので、副作用の方が先ですね?

    しかし、副作用が終わっているにもかかわらず、戻り値は a の元々の値に等しくなります。

    この関数がブラックボックスでこれ以上分割できない時、評価と副作用はどちらが先でも実用上何の違いもないわけです。ということは、実際の処理に合わせて順序を最適化してもいいわけです。結果は同じです。

    キャンセル

  • 2020/07/24 01:04

    ご回答ありがとうございます。いただいたコメントの文章「評価と副作用はどちらが先でも実用上何の違いもない」の"評価"を下記の「評価B」、"副作用"を下記の「副作用A」として解釈してみました。
    ------------
    let a = 1;
    alert(a++);
    ------------
    とした時に下記1〜3の順序で処理される。

    順序1:a=1を評価(aに1を代入)

    順序2:a++を評価(下記[2-1]〜[2-2]の順で処理)
     [2-1]・・・aの値を保管
     ↓
     [2-2]・・・下記「副作用A」と「評価B」を"同時"に実行
     副作用A=aの値を「[2-1]で保管した値に1加算した値」に変更する
     評価B=「[2-1]で保管した値」を返す(alertの引数となる)

    順序3:alert(1)を評価(1が出力される)
    ------------
    結論:上記「副作用A」と「評価B」はどちらが先でも結果は変わらないので気にしなくていい。

    キャンセル

+1

問題1:どっちも一緒。悩まんでもよろしいです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/23 20:29

    ご回答ありがとうございます。「別の変数に代入しない場合」は同じ挙動ということでしょうか?

    キャンセル

  • 2020/07/23 20:32

    そういうことですね。

    文の中にそれが記述してある場合は、
    ++x  xを+1してから文を実行
    x++ 文を実行してから xを+1
    という動作になります

    キャンセル

  • 2020/07/23 20:37

    ご回答ありがとうございます。問題1の検証で結果に違いがなかったことは気にしないことにします。ありがとうございました。

    キャンセル

0

どっちも同じです。

  • 中身を評価してから、加算(a++)
  • 加算してから、評価(++a)

評価結果を使えば、違いますが、使っていないので。
お好きな方を。(以前、宗教論争があった気もするが、良く知らない)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/23 20:41 編集

    前置/後置した式の結果の取得。 Zuishinさんの回答が詳しいでしょうか。
    --- 以下、誤り --
    「評価」とは、変数の中身の取得です。変数にしか使えないので、ちょっと適切でなかったかも。

    キャンセル

  • 2020/07/23 20:48 編集

    コメント削除

    キャンセル

  • 2020/07/23 20:55

    ご返信ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る