1. 式とステートメント

Java では、ステートメントという 2 つのカテゴリを区別すると役立ちます。通常、ステートメントは実行されると言われますが、式は評価されると言われます。しかし、それが最も重要なことではありません。

ステートメントと式の主な違いは、式を評価すると結果が得られることです。この結果には型があり、変数に割り当てたり、他の式で使用したりできます。

例:

コード ノート
int x; 声明
(a < 10) 型が次の式boolean
i++; i変数の型と同じ型の式
x = 5; x変数の型と同じ型の式

そして、これは私たちに何をもたらすのでしょうか?

まず、多くのステートメントが実際には式である (つまり、値に評価される) という事実を利用できます。たとえば、次のようなコードは機能します。

コード ノート
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

次に、必要に応じて、式の評価結果を無視できます。

コード 結果を無視するコード:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

たとえば、式に何か有益な動作が含まれている場合、式の評価の結果は無視されますが、結果自体ではなく、このアクションが重要です。


2. 三項演算子

このライフハックはすでに前のライフハックよりも興味深いものになっています。Java には特別な三項演算 子があります。その構文は、次のステートメントの構文と似ていますif-else

Condition ? Expression 1 : Expression 2;

条件が true の場合は式 1 が評価され、それ以外の場合は式 2が評価されます。条件の後には疑問符が続き、2 つの式はコロンで区切られます。

三項演算子とステートメントの主な違いはif-else、三項演算子が式であることです。つまり、その結果を何かに割り当てることができます。

たとえば、2 つの数値の最小値を計算するとします。三項演算子を使用すると、このコードは次のようになります。

int a = 2;
int b = 3;
int min = a < b ?  a : b;

または、何らかの条件に応じて変数に異なる値を割り当てる必要があるとします。どうやってそれを行うのですか?

1 つのオプションは、次のステートメントを使用することですif-else

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

2 番目のオプションは、三項演算子、つまりステートメントの短縮表現を使用することですif-else

int age = 25;
int money = age > 30 ? 100 : 50;

if-elseそれでは、ステートメントと三項演算子のどちらを使用するのが良いでしょうか? 実行速度に関しては、それほど違いはありません。これはコードの読みやすさの問題です。これは非常に重要な点です。コードは正しく動作するだけでなく、他のプログラマーにとって読みやすくなければなりません。

最も単純なルールは次のとおりです。コードが 1 行に収まる場合は、三項演算子を使用します。ただし、1 行に収まらない場合は、ステートメントを使用することをお勧めしますif-else



3. 実数の比較

前述したように、実際の数値を取得して比較することはできません。一部の有効数字が破棄され、予期しない副作用が発生する可能性が常にあります。

だからこそ、実績のあるアプローチがあるのです。2 つの実数の差が非常に小さい場合、それらは等しいと見なすことができます。例:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");

しかし、数値の差がマイナスになる可能性も十分にあるため、心配する必要があるのはそれだけではありません。したがって、このアプローチを機能させるには、数値の差だけでなく、数値の差の絶対値を比較する必要があります。|a-b|

Java には、数値の絶対値を計算するメソッドがありますMath.abs()

int m = Math.abs(value);

その結果、上記の例の修正バージョンは次のようになります。

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");