![]() ![]() ![]() ![]() |
Java 言語のナットとボルト |
式によってJava プログラムの仕事が行なわれる。特に、式は計算や変数に値を代入したり、 プログラムの実行の制御を助けるために使用される。 式の仕事には、式の要素が示 す計算を実行して値を返すという 2重の機能がある。
定義: 式は、1つの値を評価する一連の変数、演算子、およびメソッド呼び出 し(言語の構文に応じて作成される)である。
前のページで学習したように、演算子は値を返すので演算子の使用は式である。 例えば、文字数を 数えるプログラムにある次の文は
式である。 演算をする前に、この式はcount++;count
の値を評価する。式が返す値のデータ型は式で使用する要素に依存する。
++
はそのオペランドと 同じデータ型の値を返し、count
が整数なので、式count++
は整数を返す。 他の式は論理値、文字列などを返す。
count++
の式のほかに、文字数を数えるプログラムには次のような式が含まれて いる。この式は実際に2つの式から成り立っているので興味深い。 最初の式はメソッド呼び出しである。System.in.read() != -1メソッド呼び出し式ではメソッドの返り値を評価する。したがってメソッド呼び出し式のデータ型は、 そのメソッドの返り値のデータ型と同じである。System.in.read()System.in.read()
メソッドは整数を返すと宣言されるので、式System.in.read()
は整数を評価する。文
System.in.read() != - 1
に含まれた2 番目の式 は!=
演算子の使用である。!=
は 2 つのオペランドを比較して、等しくないかどうかを判定することを思い出しなさい。 問題の文にあるオペラン ドはSystem.in.read()
と- 1
である。System.in.read()
が式であり、整数を評価するので、System.in.read()
は!=
の有効なオペランドである。 それでSystem.in.read() != -1
は 2 つの整数、System.in.read()
が返す値と- 1
を比較する。!=
が返す値は、比較の 結果に依存しtrue
あるいはfalse
のいずれかである。以上のことから、Java では式の一部によって要求されるデータ型が他のデータ型と一致する限 り、さまざまな小さな式から複合式や文を作成することができる。 さらに、前の例から複合式が評価される順序が重要であるということが言える!
次の複合式を例に取る。
乗算の結果は順序には依存しないので、この例では式が評価される順序は重要でない。乗算にどのような順序を適用しても出力結果は常に同じである。 しかし、これは、次のような式については真ではない。x * y * zこの式では、最初に加算あるいは割算を実行するかによって、異なった結果を得る。 1対の括 弧x + y / 100(
と)
を使用して、式の評価方法を明示的に Java コンパイ ラに指示することができる。 例えば前の文を明確にするために、(x + y)/ 100
と書くことができる。明示的に演算を実行する順序をコンパイラに示さなければ、式内で使用されている演算子と他の要素に割り当てられている優先順位に基づいて決定される。 高い優先順位を持つ演算子が最初 に評価される。 例えば、除算演算子は加算演算子より優先順位が高いので、上記の複合式
x + y / 100
ではy / 100
が最初に評価される。 したがっては以下と同等である。x + y / 100コードの読み易さや保守を容易にするために、最初に評価する演算子を括弧で囲んで明示的に示すべきである。x + (y / 100)次のチャートは Java の演算子に割り当てられた優先順位の一覧である。 この表の演算子は優先順位の順序で示されている。表の上位にある演算子はより優先順位が高い。 高い 優先順位を持っている演算子が、それよりも低い優先順位の演算子の前に評価される。 同じ行にある演算子 は等しい優先順位を持っているが、左から右の順序で評価される。
「保留:演算子の優先順位チャートが正しいか確認する。」
「保留:メソッドコールがこのチャートのどこに入れるか。」
Java における演算子の優先順位. [] () ++ -- ! ‾ instanceof new, (type) * / % + - << >> >>> < > == != & ^ | && || ? : = += -= *= /= %= ^= &= |= <<= >>= >>>=
![]() ![]() ![]() ![]() |
Java 言語のナットとボルト |