1. Ifadələr vs Əmrlər
Cavada bütün əmrlər iki kateqoriyaya bölünür: əmrlər (Statement) və ifadələr (Expression). Əmr haqqında adətən deyilir ki, o icra olunur, amma ifadə haqqında isə — onun hesablanması deyilir. Amma əsas məsələ bu deyil.
Əsas fərq ifadə ilə əmr arasında ondan ibarətdir ki, ifadənin hesablama nəticəsi var. Və bu nəticənin, birincisi, bir tipi var, ikincisi, bu nəticəni harasa mənimsətmək və ya başqa bir ifadədə istifadə etmək olar.
Nümunələr:
Kod | Qeydlər |
---|---|
int x; |
Əmr |
(a < 10) |
İfadə, tipi boolean |
i++; |
İfadə, tipi i dəyişəninin tipi ilə eynidir |
x = 5; |
İfadə, tipi x dəyişəninin tipi ilə eynidir |
Bəs bizə bu nə verir?
Birincisi, biz çoxlu əmrlərin əslində ifadə olduğunu (hesablama nəticəsinə malik olduqlarını) istifadə edə bilərik. Məsələn, belə bir kod işləyəcək:
Kod | Qeydlər |
---|---|
|
|
İkincisi, ifadənin hesablanan nəticəsini əhəmiyyət vermədən ata bilərik, əgər istəsək.
Kod | Hesablama nəticəsini atdığımız kod: |
---|---|
|
|
İfadənin hesablanan nəticəsini atılmaq lazım ola bilər, məsələn, əgər ifadə nəticə ilə yanaşı başqa bir faydalı iş görürsə və bizə bu fəaliyyət önəmlidirsə, amma nəticə — yox.
2. Ternar operator
Bu məsləhət əvvəlkindən bir az daha maraqlıdır. Java-da xüsusi bir ternar (üçlük) operator mövcuddur. Bu, bir növ qısaldılmış if–else
operatoruna bənzəyir:
Şərt ? İfade1 : İfade2;
Əgər şərt doğru olarsa, ifade1 icra olunur, əks halda isə ifade2 icra olunur. Şərtdən sonra sual işarəsi gəlir, və iki ifadə iki nöqtə ilə ayrılır.
Ternar operatorun if-else
operatorundan əsas fərqi ondadır ki, ternar operator bir ifadədir və nəticəsini hər hansı dəyişkənə mənimsətmək mümkündür.
Məsələn, iki ədədin minimumunu hesablamaq istəyirik. Ternar operator istifadə etməklə bu kod belə görünəcək:
int a = 2;
int b = 3;
int min = a < b ? a : b;
Yaxud deyək ki, hər hansı şərtə əsasən dəyişkənə müxtəlif dəyərlər mənimsətməlisiniz. Necə etmək olar?
Birinci variant — if-else
operatorundan istifadə etmək:
int age = 25;
int money;
if (age > 30)
money = 100;
else
money = 50;
İkinci variant — ternar operator istifadə etmək, yəni if-else
operatorunun qısaldılmış formasından yararlanmaq:
int age = 25;
int money = age > 30 ? 100 : 50;
Bəs hansı daha yaxşıdır: if-else
operatoru, yoxsa ternar operator? İcra sürəti baxımından, elə də böyük fərq yoxdur. Burada əsas məsələ kodun oxunaqlılığıdır. Bu çox vacib məqamdır: kod təkcə düzgün işləməməli, həm də digər proqramçıların asanlıqla oxuya biləcəyi şəkildə yazılmalıdır.
Ən sadə meyar belə ola bilər: əgər kod bir sətirə yerləşirsə — ternar operator istifadə edin, əgər bir sətirə artıq yerləşmirsə — daha yaxşısı if-else
istifadə etməkdir.
3. Real ədədlərin müqayisəsi
Əvvəl deyildiyi kimi, real ədədləri sadəcə belə müqayisə etmək olmaz: onların üzərində əməliyyatlar apararkən hər zaman bəzi gözlənilməz effektlər ola bilər, çünki mənalı rəqəmlərin bir hissəsi atılır.
Ona görə də, sınanmış bir yanaşma var. Əgər iki real ədəd çox kiçik bir fərqlə fərqlənirsə, bu ədədləri bərabər hesab etmək olar. Misal:
double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
System.out.println("Ədədlər bərabərdir");
else
System.out.println("Ədədlər bərabər deyil");
Amma bu hələ tam deyil: ədədlərin fərqi mənfi ədəd ola bilər. Ona görə də belə yanaşmanın işləməsi üçün sadəcə fərqi yox, fərqin modulunu müqayisə etmək lazımdır: |a-b|
Java-da modul tapmaq üçün xüsusi metod var — Math.abs()
:
int m = Math.abs(dəyər);
Ona görə də yuxarıdakı misalın düzəltilmiş variantı belə olacaq:
double a = 1.000001;
double b = 1.000002;
if ( Math.abs(b - a) < 0.0001 )
System.out.println("Ədədlər bərabərdir");
else
System.out.println("Ədədlər bərabər deyil");
GO TO FULL VERSION