1. İfadeler ve ifadeler

Java'da iki kategori arasında ayrım yapmak faydalıdır: ifadeler ve ifadeler . Bir ifadenin genellikle yürütüldüğü , bir ifadenin değerlendirildiği söylenir . Ama bu en önemli şey değil.

Bir ifade ile bir ifade arasındaki temel fark, bir ifadeyi değerlendirmenin bir sonucu olmasıdır . Ve bu sonucun bir türü vardır ve bir değişkene atanabilir veya başka bir ifadede kullanılabilir.

Örnekler:

kod notlar
int x; İfade
(a < 10) Türü olan ifadeboolean
i++; iTürü değişkenin türüyle aynı olan ifade
x = 5; xTürü değişkenin türüyle aynı olan ifade

Ve bu bize ne veriyor?

İlk olarak, birçok ifadenin aslında ifade olduğu gerçeğinden faydalanabiliriz (yani bir değer olarak değerlendirilirler). Örneğin, bunun gibi bir kod çalışacaktır:

kod notlar
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

İkincisi, istersek bir ifadeyi değerlendirmenin sonucunu yok sayabiliriz.

kod Sonucu yok saydığımız kod:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

Örneğin, ifade faydalı bir şey yapmayı içeriyorsa ve bizim için sonucun kendisi değil, bu eylem önemliyse, bir ifadeyi değerlendirmenin sonucunu göz ardı ederiz.


2. Üçlü operatör

Bu cankurtaran tüyosu şimdiden bir öncekinden daha ilginç. Java'nın özel bir üçlü işleci vardır . Sözdizimi, ifadenin sözdizimine biraz benzer if-else:

Condition ? Expression 1 : Expression 2;

Koşul doğruysa , İfade 1 değerlendirilir, aksi takdirde İfade 2 değerlendirilir. Koşulun ardından bir soru işareti gelir ve iki ifade iki nokta üst üste ile ayrılır .

Üçlü operatör ile bir ifade arasındaki temel fark, if-elseüçlü operatörün bir ifade olmasıdır, yani sonucunu bir şeye atayabiliriz.

Örneğin, iki sayının minimumunu hesaplamak istediğimizi varsayalım. Üçlü operatörü kullanarak, bu kod şöyle görünür:

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

Veya bir koşula bağlı olarak bir değişkene farklı değerler atamanız gerektiğini varsayalım. Bunu nasıl yaptın?

if-elseBir seçenek, bir ifade kullanmaktır :

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

İkinci seçenek, ifade için kısa yol olan üçlü işleci kullanmaktır if-else:

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

Öyleyse hangisinin kullanılması daha iyi - bir if-elseifade mi yoksa üçlü operatör mü ? Yürütme hızı açısından, çok fazla fark yoktur. Bu daha çok kod okunabilirliği meselesidir. Ve bu çok önemli bir nokta: kod sadece doğru çalışmamalı, aynı zamanda diğer programcılar tarafından kolayca okunabilmelidir.

En basit kural şudur: eğer kod bir satıra sığıyorsa , o zaman üçlü işleci kullanın ; ancak bir satıra sığmıyorsaif-else , bir ifade kullanmak daha iyidir .



3. Gerçek sayıları karşılaştırma

Daha önce belirtildiği gibi, gerçek sayıları öylece alıp karşılaştıramazsınız. Beklenmedik yan etkilere neden olacak şekilde bazı önemli rakamların atılma olasılığı her zaman vardır.

Bu yüzden zamana göre test edilmiş bir yaklaşım var. İki gerçek sayı arasında çok küçük bir fark varsa, o zaman eşit olarak kabul edilebilirler. Örnek:

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");

Ancak endişelenmemiz gereken tek şey bu değil, çünkü sayılar arasındaki fark pekala negatif olabilir. Dolayısıyla, bu yaklaşımın işe yaraması için, yalnızca sayılar arasındaki farkı değil, sayılar arasındaki farkın mutlak değerini de karşılaştırmanız gerekir:|a-b|

Java, bir sayının mutlak değerini hesaplamak için bir yönteme sahiptir: Math.abs():

int m = Math.abs(value);

Sonuç olarak, yukarıdaki örneğimizin düzeltilmiş hali şöyle görünecektir:

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");