CodeGym /Kurslar /Java SELF AZ /Həyat Hackləri: kodu necə daha yaxşı və tez yazmaq olar

Həyat Hackləri: kodu necə daha yaxşı və tez yazmaq olar

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

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
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1));

İ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:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

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

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION