JavaRush /Kurslar /All lectures for UZ purposes /Lifxaklar: kodni yaxshiroq va tezroq yozish uchun

Lifxaklar: kodni yaxshiroq va tezroq yozish uchun

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Ibora vs Buyruqlar

Java'da hamma buyruqlar ikki toifaga bo'linadi: buyruqlar (Statement) va iboralari (Expression). Buyruq haqida odatda "bajariladi" deyishadi, ibora haqida esa — "hisoblanadi". Lekin bu eng asosiysi emas.

Buyruq va ibora o'rtasidagi asosiy farq shundaki, iborada hisoblash natijasi bo'ladi. Va bu natijaga, birinchidan, turi bor, ikkinchidan, bu natijani biron joyga tayinlash mumkin yoki boshqa bir iborada ishlatish mumkin.

Misollar:

Kod Izohlar
int x; Buyruq
(a < 10) Ibora, turi boolean
i++; Ibora, turi i o'zgaruvchining turi bilan bir xil
x = 5; Ibora, turi x o'zgaruvchining turi bilan bir xil

Bu bizga nimani beradi?

Birinchidan, ko'p buyruqlar aslida ibora ekanligini foydalanishimiz mumkin (ya'ni hisoblash natijasi bor). Masalan, quyidagi kod ishlaydi:

Kod Izohlar
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1));

Ikkinchidan, ifodaning hisoblash natijasini e'tiborsiz qoldirishimiz mumkin, agar xohlasak.

Kod Natijani e'tiborsiz qoldirgan kod:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

Ifodaning hisoblash natijasini e'tiborsiz qoldirish kerak, masalan, agar ibora natijadan tashqari boshqa foydali ish qilsa, va bu amal bizga muhim bo'lsa, natija esa yo'q.


2. Ternary operator

Bu lifhak avvalgisidan qiziqroq. Java'da o'zgacha ternary (uchlik) operator mavjud. Bir ma'noda bu if–else operatorining qisqartirilgan yozilishiga o'xshaydi:

Shart ? Ibora1 : Ibora2;

Agar shart rost bo'lsa, ibora1 bajariladi, aks holda ibora2 bajariladi. Shartdan keyin savol belgisi, va ikkita ibora ikki nuqta bilan ajratiladi.

Ternary operatorning if-elsedan asosiy farqi shundaki, ternary operator iboradir, ya'ni uning natijasini biror narsaga tayinlash mumkin.

Masalan, ikkita sonning minimumini hisoblashni xohlaymiz. Ternary operatorini ishlatib, bu kod quyidagicha ko'rinadi:

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

Yoki, masalan, o'zgaruvchiga shartga qarab turli qiymatlar tayinlash kerak. Buni qanday qilish mumkin?

Birinchi variant — if-else operatoridan foydalanish:

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

Ikkinchi variant — ternary operatorni ishlatish, ya'ni if-else operatorining qisqartirilgan yozilishi:

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

Xo'sh, qaysi birini ishlatish yaxshiroq: if-else operatori yoki ternary operator? Tezlik nuqtai nazaridan, katta farq yo'q. Bu ko'proq kodning o'qilishi masalasi. Va bu juda muhim nuqta: kod nafaqat to'g'ri ishlashi kerak, balki boshqa dasturchilar tomonidan oson o'qilishi ham kerak.

Eng oddiy mezon quyidagicha bo'lishi mumkin: agar kod bitta satrga sig'adi — ternary operator ishlating, agar bitta satrga sig'masa — if-elseni ishlatgan ma'qul.



3. Haqiqiy sonlarni solishtirish

Avvalroq aytilganidek, oddiygina haqiqiy sonlarni solishtirish mumkin emas: ularni ishlatish jarayonida har doim kutilmagan ta'sirlar yuzaga kelishi mumkin, chunki ba'zi raqamlar tashlab ketiladi.

Shuning uchun zamonaviy usul mavjud. Agar ikkita haqiqiy son juda kichik qiymatga farq qilsa, ularni teng deb hisoblash mumkin. Misol:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("Sonlar teng");
else
   System.out.println("Sonlar teng emas");

Ammo bu hali hammasi emas: sonlarning farqi manfiy son bo'lishi mumkin. Shuning uchun bunday uslub ishlashi uchun, faqat sonlar farqini emas, balki sonlar farqining modulini solishtirish kerak: |a-b|

Java'da sonning modulini hisoblash uchun maxsus Math.abs() metodi mavjud:

int m = Math.abs(qiymat);

Shuning uchun yuqoridagi misolimizning tuzatilgan turi quyidagicha bo'ladi:

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("Sonlar teng");
else
   System.out.println("Sonlar teng emas");

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION