評価の概念についての質問

このQ&Aのポイント
  • 評価とは、変数やリテラルの表記や型、値を解釈することです。
  • 式を評価するには、変数やリテラルの型や値を解釈するだけでなく、演算を行って結果を求めるプロセスも含まれます。
  • 評価の概念について複数の仮説がありますが、変数やリテラルの解釈と演算結果の求め方が重要な要素です。
回答を見る
  • ベストアンサー

評価の概念について質問

前回も評価の概念について質問しました。ご回答いただいた方へ、誠にありがとうございます。 自分の中でその答えを整理した上で、総仕上げの質問といきます。 質問1:評価とは、「リテラルや変数について、それが『何の表記』で『何の型』で『いくつの(どのような)値』であるかを解釈すること」でしょうか? 例えば、・ソースコード中に 'A' という単語(token)が登場したなら,それは英字表記を用いたchar型の文字値 A だと解釈する 質問2;「式を評価」とは、以下の2つの仮説のうちどちらでしょうか?またどちらでもなければお答え示してくだされば幸いです。 仮説1:「その式を構成する変数やリテラル全てについて、それ等が『何の型』で『いくつの(どのような)値』であるかを解釈すること」 仮説2:仮説1に加え、それ等のリテラルや変数を用いて演算し、答えを求めるプロセスも含む。

  • Java
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

ANo.1の補足の質問2 たとえば a*b+c という式があったら aを評価→bを評価→cを評価→*の演算→+の演算 という順番で実行が進むと思っていますか? それなら間違いです。 aを評価→bを評価→*の演算→cを評価→+の演算 という順番になります。 a+b*c だったら aを評価→bを評価→cを評価→*の演算→+の演算 となって、a、b、cの評価を終えてから*や+の演算を実行しますが。 そもそも、以前の質問にあった&&や||、あるいは?:の例を見れば、全ての部分式の評価が終わってから演算を実行するのではないことは分かるはずです。 以前のQ&Aの復習からやり直してください。 質問者さんが思うような「個々の要素を全て評価し終えてから演算を行う」プログラム言語を設計することは可能ですが、Javaの仕様とは異なります。

wantanton
質問者

お礼

お礼遅れてしまい大変申し訳ありません、、 そしてかなり望んでいた回答をくださりまことにありがとうございます! 評価と演算の関係がわかってよかったです! やっぱ詳しい人はいるものなんだな、、

その他の回答 (3)

回答No.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"を使うのは、実にアメリカらしいと言うか、、、 そもそも外来語を和訳しようというところに無理があると思いますが、 プログラムが走るとか、パソコンが立ち上がるとか、ある意味、変な訳し方になるのは良くあることだと思います。 なんか説明になってないですね。 全文余談ってことで、駄文失礼しました。

wantanton
質問者

お礼

丁重で興味深い回答ありがとうございます! 和訳の問題もありますよね、、 あと余談かなり面白かったです 笑 ためになります!

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.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: 構文解析機能)というものを勉強することになると思います。

wantanton
質問者

お礼

アドバイスありがとうございます! そして、お返事おくれてしまい大変申し訳ありません、、 たしかに、引用のURLかなり興味深いです。熟読して理解を深めます! パーサーについての勉強も始めてみます!

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

回答1. 質問文は,対象物を指し示さず「評価とは、」という言い方で一般化していますが,私は下記で,それは「リテラルを評価する」ことだと回答しました。 http://okwave.jp/qa/q6836558.html の私の過去の回答ANo.2 回答2. 仮説1のように,個々の要素(変数やリテラル)の解釈が決まればそれで評価は完了,ということであるなら,質問者がこれまで問題にしてきた演算子の優先順位の高低,同じ優先順位の演算子が並んだときの結合順などは,そもそも問題にならないわけで。 個々の要素が吸引力もなしにただバラバラに群れているのではなく,決められた演算子規則に従ってまとまり,まとまったものがさらに定められた順序に従ってまとめられる。そのような全体としてのかたまりを「式」として認めるわけです。 よって仮説2の説明の方が適切です。

wantanton
質問者

補足

丁重なご回答誠にありがとうございます!いつも的確でわかりやす回答で感謝します!待ってました! 回答を見て、追加で疑問がわきました! 質問1:「変数の評価」とはなんですか?リテラルの評価とどう違いますか? 質問2:式の答えが出るまでのプロセスは以下のような認識でokですか? 個々の要素(変数やリテラル)を左から順に「全て評価」 ↓ 個々の要素の評価が「全て完了」したら、優先順位や結合規則に基づいて、演算 ↓         答えが出る このようなプロセスでしょうか? 質問3:評価とは、個々の要素(変数やリテラル)を評価するだけでなく、演算し、答えを出すまでのプロセスとのことですが、ということは、「優先順位を考慮する」という行為も当然「評価」ということになりますよね?

関連するQ&A

  • 評価について質問

    質問1:式を構成する要素(変数やリテラル)の評価と演算について、左から右に評価していく過程で、その式の演算子の優先順位の高い順から、その演算子の取るリテラルの評価が終わり次第、計算をする。 よって、オペランドを取る演算子の位置によっては、評価と演算が交互に行われることもある。 たとえば a*b+cという式があれば、 aを評価→bを評価→*の演算→cを評価→+の演算という計算プロセス。 これはつまり、*は、この式において最も優先順位が高いから、aとbを評価した直後、演算を実行したといえる。 何故僕はこんな質問したかというと、全ての要素の評価が終わってから、演算が実行されるものだと思ったからです。 質問2:「式を評価する」とは、変数やリテラルの評価と優先順位を考慮した演算を実行し、そしてその式の答えを求める一連のプロセスのことでしょうか? 質問3:変数の評価とは、「ソースコードの中でその単語(token)を変数だと解釈することで、そのtokenがjavaの変数名の規約に従っていることかつ、それが事前に宣言されていることを 検査した上で、その変数の値を解釈する」こういうことですか?

    • ベストアンサー
    • Java
  • 「評価」とはどういう意味ですか?

    質問1:初心者にわかりやすいように説明してください。 言語仕様書みてもちんぷんかんぷんでした。。 質問2:評価とは、主に2つの意味があり、1つ目は「演算子がオペランドを演算する事」、2つ目は、式を構成する変数やリテラルについて「その値がいくつであるかを得ること」でしょうか? 例えば、論理演算について、int a=1,b=0,c=0のとき、a==1 && b==3 || a==1 && b==0の論理式があったとします。このとき、評価とは a==1がtrueがfalseかを評価する、→trueの値を得る。 こういった意味でしょうか? 質問3:「リテラルを評価する」というのはどういうことでしょうか?

    • ベストアンサー
    • Java
  • 文字を整数として扱う場合の演算について質問

    javaの参考書に、文字を整数として扱う場合の演算についての解説があり、疑問点があったので質問します。 質問1:何故char型の変数は、キャストしなくてもint型のリテラルを代入することができるのか?      例えば、 以下の演算はキャストしなくてもこのまま代入できます。 char ch='a'; ch=98; でも、以下の演算はキャストしていないのでエラーになります。      char ch='a'; ch=ch+1; これは何故ですか?参考書に記載されていた理由として、「byte,char,short、 これ等の型の変数や値を使って計算すると、それ等は一度intに直して計算されるから」というような趣旨の事が書いてありました。 つまり、char型の変数には、キャストしない限りint型の数値を代入できないということですよね? でも前者のソースコードは、chはchar型であるにもかかわらず、int型のリテラル98を代入できています。 これは何故ですか? 質問2:javaの参考書に、インクリメント・デクリメント演算子と複合代入演算子は、型を保存するという解説がありました。これはどういう意味ですか? 僕の仮説では、例えば、      char ch='a';      ch+=5; であれば、5は、char型のまま代入されるということでしょうか?

    • ベストアンサー
    • Java
  • 優先順位の概念について質問

    質問1:優先順位や結合の規則とは、本質的に「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であり、「演算実行の優先順位」ではありませんよね? 何故そう思ったかというと次の論理式をご覧ください。 a==1 && b==0 || a==1 && b==0 ※int a==1,b==0 この論理式がtureになるプロセスとして、 a==1を評価→true    ↓ b==0を評価→true ↓ &&は、a==1 && b==0の論理式をtrueと評価 ↓ ||は、左側の論理式a==1 && b==0がtrueだから、論理式全体がtrueだと判断し、 右側の論理式の評価を行わない。 プロセスとして、こうだと思うんですけど、優先順位として||は&&より低いですよね? 優先順位が「演算実行の優先順位」を意味するならば、右側の論理式のa==1 && b==0を評価してから||の演算をするはずで矛盾します。 よって、優先順位とは本質的に、「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であり、「演算実行の優先順位ではない」といえる。 質問2:「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であれば、例えば、上記の論理式の左側を例に挙げていえば、 b==0は&&と||の2つが共有してるが、&&の方が優先順位が高いから、b==0を先に結び付けてる、その意味でも「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」 は正しいですか?

    • ベストアンサー
    • Java
  • 論理演算について質問

    何度もすみません。 また質問します。これで最後にしたい、、 質問1:&&や||等の論理演算子は、その両側にある2つの“boolean型の式(関係式等)”に対して論理演算を行う。 評価は、両側の式に対して並列に行うのではなく、1つづつ行って行く。 因みに、||は「論理式」を論理演算するこどができる。例えば、 int a=1,b=0,c=0のとき a==1 && b==3 || a==1 && b==0 の論理式があったとします。 この論理式の||は、即に演算されたa==1 && b==3とa==1 && b==0の論理式を演算の対象としている。 質問2:「評価」と「論理演算」って意味は同じですか?違いますか?違うならその違いは? 質問3:a==1 && b==0 || (a==1 && b==0)の論理式は、先に(a==1 && b==0)の論理式を論理演算すると思ってました。でも、以前そのような仮説をもって質問したら、回答者の方に実際違うと指摘されました。何故ですか?だって()の中の論理式なんだから、優先的に演算されるはず。

    • ベストアンサー
    • Java
  • 問題がとけません

    以下の設問に答えよ。 型はC言語の基本型でchar型を除いたもので答えよ。 1.次の演算結果の型と値を求めよ。 100/10*5 2.次の演算結果の型と値を求めよ。 1.0f/2 3.次の演算結果の型と値を答えよ。 100/10*5.0 4.次の演算結果の値を答えよ。 54321-54321/100*100 5.次の演算結果の値を答えよ。※(int)(式)は,式の値の小数点以下を切り捨ててint型に変換する。 (int)(123/5.0+0.5) 6.次の演算結果の型と値を答えよ。 5<2 7.次の演算結果の型と値を答えよ。 5.0>2 8.変数a,b,cに関して,a<b<cの真偽を評価する論理式を書け。 9.次の文が実行された後,変数i,kの値はいくらになっているか。変数はどちらもint型とする。 i=0; k=0; k=5+(++i); 10.次の文が実行された後,変数kの値はいくらになっているか。変数はどちらもint型とする。 i=5; k=5; k *= i<0 ? (-i) : i; 11.次の文Aは実行されるか。kの型はintである。文法的な誤りはない。 if(k = 0)  文A

  • 論理演算について質問

    今度こそ最後にします、、 質問:&&や||等の論理演算子は、「その両側にある2つの型booleanのオペランドに対して論理演算する」こういうことでしょうか? YESかNOでお答えいただいた上で、補足があればお願いします^^ 質問2:私は、括弧内の式が優先的に計算されると思って、その旨の質問をしたところ以下のような回答が返ってきました。 「優先されるのは結合順であって、評価順序ではないです。例えば、a==1 && b==3 || a==1 && b==0の式ににかっこを追加して、a==1 && (b==3 || a==1) && b==0とすると||の第1オペランドは b==3、第2オペランドは a==1 に変わります。」 ここでいう「結合順」の「結合」とはどういう意味ですか? 私の仮説では、「ある演算子がオペランドを結合している」、こういうことでしょうか? そして、括弧を用いることにより、ある演算子のオペランドの結合を変化させ、演算子は その括弧内の両側のオペランドをつなぐ、こういうことでしょうか? YESかNOかでお答えください。その上で何か補足があればお願いします^^

    • ベストアンサー
    • Java
  • C言語の演習問題(C言語)について質問です。

    以下のプログラムは数字と演算子を配列に入れているプログラムです。 このプログラムを式を入れて四則演算のみで計算させるプログラムを作成してるのですがご指導お願いできますか? 例:8/3*3enterkey 答え:8 変数の型は変更しないで行うとの指示のことなので、変数は増やしても構いませんが、変えないでお願いします。 http://codepad.org/Iks8CtjT

  • 論理演算子の変数等を結ぶ個数について質問

    int a=1,b=0,c=0のとき a==0 && (b==0 || c==0) a==0 && b==0 || c==0 の2つの論理式あったとします 質問:論理演算子は、必ず「左右2つの変数しかつなげない」のですか? 例えば、前者の論理演算子なら、&&は、a==0とb==0をつないでる。 後者の論理演算子なら、||はb==0 とc==0をつないでる。 質問2:質問1の仮説が正しいとすると、前者も後者も論理演算子&&は、論理演算子||とb==0を共有してますよね?

    • ベストアンサー
    • Java
  • 論理演算について質問

    int a=1,b=0,c=0のとき a==1 && b==0 || (a==1 && b==0) の論理式あったとします 質問1:&&や||の論理演算子について、その『両側』にある2つの関係式を「1つ1つ評価」することにより論理演算する。この認識で正しいですか? 質問2:論理式 a==1 && b==0 || (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? (a==1 && b==0)のa==1を評価しtrue、次にb==0を評価しtrue。 よってこの論理式はtrue      ↓ a==1 && b==0 のa==1 を評価しtrue、b==0 を評価しtrue。 よってこの論理式はtrue      ↓ ||は、右の論理式((a==1 && b==0))がtrueで左の論理式(a==1 && b==0 )もtrueだから、論理式全体はtrueで確定しているので、評価を行わない。

    • ベストアンサー
    • Java

専門家に質問してみよう