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