8.1 Psevdotəsadüfi ədədlər
Bəzən proqramçı, sadə görünən məsələlərlə üzləşir: «axşam baxmaq üçün müəyyən bir siyahıdan təsadüfi bir film seçmək», «lotereya qalibini seçmək», «smartfonu silkələdikdə mahnı siyahısını qarışdırmaq», «mesajın şifrələnməsi üçün təsadüfi rəqəm seçmək». Və hər dəfə belə sual yaranır: təsadüfi ədədi necə əldə etmək olar?
Əslində, əgər sizə «həqiqi təsadüfi ədəd» lazımdırsa, bunu əldə etmək çox çətindir. Hətta bəzi hallarda kompyuterə xüsusi riyazi koprosessorlar quraşdırılır ki, tələblərə uyğun olaraq belə ədədləri yarada bilsinlər.
Buna görə proqramçılar öz həllini tapıblar — psevdotəsadüfi ədədlər. Psevdotəsadüfi ədədlər — elə bir ardıcıllıqdır ki, onun ədədləri ilk baxışdan təsadüfi görünür, amma mütəxəssis dəqiq analiz etdikdə müəyyən qanunauyğunluqları görə bilər. Gizli sənədlərin şifrələnməsi üçün belə ədədlər uyğun deyil, amma oyunda zərin atılmasını simulyasiya etmək üçün tam uyğundur.
Psevdotəsadüfi ədədlərin ardıcıllığı yaratmaq üçün bir çox alqoritm var və onların əksəriyyəti növbəti təsadüfi ədədi əvvəlki rəqəm və bəzi köməkçi ədədlər əsasında yaradır.
Məsələn, bu proqram ekrana 1000 unikal ədəd çıxaracaq:
let a = 41;
let c = 11119;
let m = 11113;
let seed = 1;
function getNextRandom() {
seed = (a * seed + c) % m;
return seed;
}
for (let t = 0; t < 1000; t++) {
let x = getNextRandom();
console.log(x);
}
Yeri gəlmişkən, biz psevdotəsadüfi ədədlərdən yox, belə ədədlərin ardıcıllığından bəhs edirik. Çünki tək bir ədədə baxaraq, onun təsadüfi olub olmadığını anlamaq mümkün deyil.
Təsadüfi rəqəmi müxtəlif yollarla əldə etmək mümkündür:
function getNextRandom() {
return 4; # bu tam təsadüfi rəqəmdir (mən onu zər atmaqla aldım)
}
8.2 switch operatoru
switch
operatoru ifadənin dəyərinə əsasən bir neçə kod blokundan birini yerinə yetirmək üçün istifadə olunur. Xüsusilə bir dəyəri bir neçə mümkün variantla müqayisə etmək lazım olduqda faydalıdır.
Sintaksis:
switch(expression) {
case value1:
// expression === value1 olduğu halda yerinə yetiriləcək kod
break;
case value2:
// expression === value2 olduğu halda yerinə yetiriləcək kod
break;
// ...
default:
// heç bir dəyər uyğun gəlmədikdə yerinə yetiriləcək kod
}
Nümunə:
let day = 3;
let dayName;
switch (day) {
case 1:
dayName = "Bazar ertəsi";
break;
case 2:
dayName = "Çərşənbə axşamı";
break;
case 3:
dayName = "Çərşənbə";
break;
case 4:
dayName = "Cümə axşamı";
break;
case 5:
dayName = "Cümə";
break;
case 6:
dayName = "Şənbə";
break;
case 7:
dayName = "Bazar";
break;
default:
dayName = "Yanlış gün";
}
console.log(dayName); // "Çərşənbə"
8.3 ?? Operatoru
??
operatoru, ya da nullish coalescing operator, sol operand null
və ya undefined
olduqda standart dəyər təyin etmək üçün istifadə olunur. Bu, standart dəyərin digər yalan dəyərlərə, məsələn, 0
, false
və ya boş sətir (""
) üçün tətbiq edilməsindən qaçmağa kömək edir.
Sintaksis:
let result = value1 ?? value2;
Əgər value1 null
və ya undefined
deyilsə, result value1 olacaq. Əks halda, result value2 olacaq.
Nümunələr:
let foo = null ?? 'standart';
console.log(foo); // 'standart'
let bar = 0 ?? 'standart';
console.log(bar); // 0 (0 null və ya undefined deyil)
let baz = undefined ?? 'standart';
console.log(baz); // 'standart'
Logical OR (||) operatorundan fərqi
||
operatoru da standart dəyər təyin etmək üçün istifadə oluna bilər, amma bu operator hər hansısa yalan dəyər üçün sağ operandı qaytarır, məsələn, 0
, ""
, və ya NaN
.
Müqayisə nümunəsi:
let value = 0 || 'standart';
console.log(value); // 'standart' (çünki 0 yalan dəyərdir)
let value2 = 0 ?? 'standart';
console.log(value2); // 0 (çünki 0 null və ya undefined deyil)
İstifadə
??
operatoru, yalnız null
və ya undefined
üçün standart dəyər təyin etmək lazım olan, amma digər yalan dəyərləri, məsələn, 0
və ya ""
, saxlamalı olan vəziyyətlərdə faydalıdır.
Həqiqi istifadəyə nümunələr
Nümunə 1. Konfiqurasiya obyektlərində standart dəyərlər:
function configure(settings) {
settings = settings ?? {};
let timeout = settings.timeout ?? 1000;
let color = settings.color ?? 'mavi';
// konfiqurasiya loqikasının davamı
}
Nümunə 2. Funksiyalar üçün standart parametrlər:
function printMessage(message) {
message = message ?? 'Mesaj yoxdur';
console.log(message);
}
printMessage(null); // 'Mesaj yoxdur'
printMessage('Salam'); // 'Salam'
??
operatorunun istifadəsi, xüsusilə yalnız dəyərin olmamasını (null
və ya undefined
) nəzərə almaq lazım olan vəziyyətlərdə, daha təmiz və proqnozlaşdırıla bilən kod yazmağa imkan verir.
GO TO FULL VERSION