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

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

ただいまの
回答率

90.51%

  • JavaScript

    20387questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

評価とは

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 592

aaaaaaaa

score 469

javascriptにおいて式を使って値を算出すること、つまり演算のことを評価するというみたいですが、パーフェクトjavascript097pによれば、「&&演算子、||演算子、?:演算子の三つを除いてオペランドを演算する前に評価する」とあります。
「演算する前に評価」ということは、前提は違うということでしょうか。それとも演算することも含め、複数の意味があるのでしょうか。演算する前に、式を構成する要素のうち演算子を除いたオペランドを評価するとは、どういう意味なのでしょうか。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • think49

    2016/07/26 12:57

    https://teratail.com/questions/41969 で同様の質問をしているようですので、本質問にも何らかの解を出した方が良いと思います。

    キャンセル

  • aaaaaaaa

    2016/07/26 13:05

    返信有難うございます。
    解というのは、ベストアンサーということでしょうか。
    ご回答してくださったraccyさんにベストアンサーを行いたいと思います。

    キャンセル

  • think49

    2016/07/26 13:13

    解というのはベストアンサーではありません。aaaaaaaa さんの中で疑問に対して 納得する回答が得られたのならその回答をベストアンサーに選べばよいと思います。まだ、理解できてないのならベストアンサーを選ばず、コメントで補足要求/追加質問すればよいと思います。
    本回答が理解できているのでしたら、https://teratail.com/questions/41969https://teratail.com/questions/41847 はその理解を踏まえた上でもう少し具体的な質問が出来ると思います。

    キャンセル

回答 2

checkベストアンサー

+6

たとえば次のような式があったとします。

a.f("42") + z(b[2])

上の式において、「オペランドを演算する前に評価する」というのは、オペランド+の演算をする前に、a.f("42")z(b[2])をそれぞれ評価し、その結果の値を使って、+の演算を評価するということです。これを先行評価とか正格評価と呼びます。それぞれがわからなければ足し算はできないため、当たり前と言えば当たり前のように思えますが、この当たり前のことを言っています。しかし、足し算ではないような演算ではそうではないときがあります。
※ なお、JavaScriptではa.f("42")z(b[2])この順番で評価されますが、他の言語では評価の順番が保証されない場合があります。

例外になる&&を見てみましょう。

a.f("42") && z(b[2])

a.f("42")がもし偽に相当する値であれば、それで結果が決まってしまうため、z(b[2])を演算する必要がありません。そこで、&&の演算は、はじめにa.f("42")のみを評価し、その結果で、z(b[2])を評価せずにそのまま返すか、z(b[2])を評価してそれを値にするかを決めます。これを短絡評価といいます。短絡評価は副作用がある式では重要な意味を持ち、また、評価されない分のパフォーマンスもあるため、区別して考えるべきと言うことです。

なお、Haskellなどの遅延評価がある言語では、上とはまた別の形で評価されるようになっていきます。興味があれば調べてみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/06/30 16:27

    ご回答有難うございました。
    つまり、関数を実行(関数の評価)し、演算可能な値が算出できたら演算(演算子の評価)するわけなのですね。

    キャンセル

+2

わかりにくいですよね。

func1() > func2() だったら、 func1という関数を評価し、func2という関数を評価して、その結果をもって、 この比較演算子の演算を行い、式の評価とするわけです。
この左側のfunc1()はいくつかなというのが 左オペランドの評価を行うというところです。

で、&&演算子の場合は、先に左右の評価を行うわけではなく、
左の評価がfalseならば 右の評価は行わないのです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/06/30 16:44

    ご回答有難うございました。関数の評価とは、つまり演算できる数値を算出するために関数を実行している、ということですね。

    キャンセル

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

  • JavaScript

    20387questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。