みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

評価の概念について質問

前回も評価の概念について質問しました。ご回答いただいた方へ、誠にありがとうございます。
自分の中でその答えを整理した上で、総仕上げの質問といきます。





質問1:評価とは、「リテラルや変数について、それが『何の表記』で『何の型』で『いくつの(どのような)値』であるかを解釈すること」でしょうか?
例えば、・ソースコード中に 'A' という単語(token)が登場したなら,それは英字表記を用いたchar型の文字値 A だと解釈する


質問2;「式を評価」とは、以下の2つの仮説のうちどちらでしょうか?またどちらでもなければお答え示してくだされば幸いです。

仮説1:「その式を構成する変数やリテラル全てについて、それ等が『何の型』で『いくつの(どのような)値』であるかを解釈すること」
仮説2:仮説1に加え、それ等のリテラルや変数を用いて演算し、答えを求めるプロセスも含む。

投稿日時 - 2011-06-29 16:33:34

QNo.6843157

すぐに回答ほしいです

質問者が選んだベストアンサー

ANo.1の補足の質問2

たとえば
a*b+c
という式があったら
aを評価→bを評価→cを評価→*の演算→+の演算
という順番で実行が進むと思っていますか? それなら間違いです。
aを評価→bを評価→*の演算→cを評価→+の演算
という順番になります。

a+b*c
だったら
aを評価→bを評価→cを評価→*の演算→+の演算
となって、a、b、cの評価を終えてから*や+の演算を実行しますが。

そもそも、以前の質問にあった&&や||、あるいは?:の例を見れば、全ての部分式の評価が終わってから演算を実行するのではないことは分かるはずです。
以前のQ&Aの復習からやり直してください。

質問者さんが思うような「個々の要素を全て評価し終えてから演算を行う」プログラム言語を設計することは可能ですが、Javaの仕様とは異なります。

投稿日時 - 2011-06-29 21:49:56

お礼

お礼遅れてしまい大変申し訳ありません、、
そしてかなり望んでいた回答をくださりまことにありがとうございます!

評価と演算の関係がわかってよかったです!
やっぱ詳しい人はいるものなんだな、、

投稿日時 - 2011-07-02 15:53:11

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

たぶん、プログラム言語の仕様書や解説書を和訳したときの、その言い回しの問題だと思います。
英文ではevaluate an expression(式を評価する)と言います。

evaluationを英英辞典で引くと、judgement about how good, or successful something [= assessment]
assessmentを意訳すると、人物や物事が有効かを判断するとなります。

つまり。
「評価」とは、「物事が有効かどうかを判断すること」という意味になります。
、、、それでもわかりにくいですが、、、


estimate、能力を『評価』するなどの意味
evaluation、鑑定、『評価』

たぶん、evaluationを評価すると訳し、それを読んだ人(質問者さん含めて?)がestimateの意味でとらえて、何だそれは?となったのではないかと思います。



参考:
ジーニアス和英辞典第2版
ジーニアス英和辞典第4版
ロングマン現代英英辞典4訂増補版
ロングマン英和辞典


>質問1:評価とは、「リテラルや変数について、それが『何の表記』で『何の型』で『いくつの(どのような)値』であるかを解釈すること」でしょうか?

それでいいと思います。


以下余談。
最近はプログラムをrunするって言わないのかな。。。
JavaScriptではイベントを発火する(fire an event)ってよく言われてます。
発行や呼び出しを意味する言葉ではなく"fire"を使うのは、実にアメリカらしいと言うか、、、

そもそも外来語を和訳しようというところに無理があると思いますが、
プログラムが走るとか、パソコンが立ち上がるとか、ある意味、変な訳し方になるのは良くあることだと思います。


なんか説明になってないですね。
全文余談ってことで、駄文失礼しました。

投稿日時 - 2011-06-30 02:42:41

お礼

丁重で興味深い回答ありがとうございます!
和訳の問題もありますよね、、

あと余談かなり面白かったです 笑

ためになります!

投稿日時 - 2011-07-02 15:55:59

ANo.3

> 「変数の評価」とはなんですか?

ソースコード中のその単語(token)が変数だと解釈すること。
言い方を変えるなら,そのトークンがJavaの変数名の規約に従っていること,かつ,それが事前に宣言されていることを検査すること。

> リテラルの評価とどう違いますか?

そのトークンがJavaのリテラル記述の規約に従っていること,と,
そのトークンがJavaの変数名の規約に従っていること,とは違いますよね。

----------------
> 「優先順位を考慮する」という行為も当然「評価」ということになりますよね?

はい,その通りです。

----------------
> 式の答えが出るまでのプロセスは以下のような認識でokですか?

いいえ,違います。

私は ANo.2 で指摘のあった「以前の質問にあった(中略)?:の例を見れば」というQ&Aを知りません。質問者はけっこう以前から疑問をお持ちだったと言うことでしょうか。

であるなら,私はこう思うのだけれどどうか? ではなく,Javaはソースコードをどう解釈しているのかという解説を読んで理解した方が話が早いのではないですか。

キーワード「Java 式」でGoogle検索して3番目にヒットした次のページの
http://www.y-adagio.com/public/standards/tr_javalang/15.doc.htm
「15.6 評価順序」などは,コード例を提示した興味深い解説だと思います。

もっとしっかり理解したければ,上記ページにも用語が登場する,パーサー(parser: 構文解析機能)というものを勉強することになると思います。

投稿日時 - 2011-06-29 23:34:06

お礼

アドバイスありがとうございます!
そして、お返事おくれてしまい大変申し訳ありません、、


たしかに、引用のURLかなり興味深いです。熟読して理解を深めます!


パーサーについての勉強も始めてみます!

投稿日時 - 2011-07-02 15:54:45

ANo.1

回答1.
質問文は,対象物を指し示さず「評価とは、」という言い方で一般化していますが,私は下記で,それは「リテラルを評価する」ことだと回答しました。
http://okwave.jp/qa/q6836558.html の私の過去の回答ANo.2

回答2.
仮説1のように,個々の要素(変数やリテラル)の解釈が決まればそれで評価は完了,ということであるなら,質問者がこれまで問題にしてきた演算子の優先順位の高低,同じ優先順位の演算子が並んだときの結合順などは,そもそも問題にならないわけで。

個々の要素が吸引力もなしにただバラバラに群れているのではなく,決められた演算子規則に従ってまとまり,まとまったものがさらに定められた順序に従ってまとめられる。そのような全体としてのかたまりを「式」として認めるわけです。

よって仮説2の説明の方が適切です。

投稿日時 - 2011-06-29 17:47:45

補足

丁重なご回答誠にありがとうございます!いつも的確でわかりやす回答で感謝します!待ってました!
回答を見て、追加で疑問がわきました!

質問1:「変数の評価」とはなんですか?リテラルの評価とどう違いますか?




質問2:式の答えが出るまでのプロセスは以下のような認識でokですか?

個々の要素(変数やリテラル)を左から順に「全て評価」

個々の要素の評価が「全て完了」したら、優先順位や結合規則に基づいて、演算

        答えが出る


このようなプロセスでしょうか?


質問3:評価とは、個々の要素(変数やリテラル)を評価するだけでなく、演算し、答えを出すまでのプロセスとのことですが、ということは、「優先順位を考慮する」という行為も当然「評価」ということになりますよね?

投稿日時 - 2011-06-29 20:03:34

あなたにオススメの質問