Function Expression və Function Declaration
Function Expression və Function Declaration arasındakı fərqlərə baxaq.
İlk əvvəl sintaksis: Kod yazılışında fərqlər vardır.
Function Declaration: function ilə digər kodlardan ayrılmış kod blokudur.
// Function Declaration
funtion cem (a, b) {
return a + b;
}
147
Function Expression: bir ifadənin içərisində vəya başqa ifadələr içərisində
yaradılmış funksiyadır. Burada funksiya dəyişənə bərabər olur:
Ən əsas məqam isə Javascript engine tərəfindən bir funksiyanın
yaradılmasıdır.
Function Expression ifadəsinə dəyişənə bərabər edilib və bundan sonra
istənilən yerdə istifadə edilə bilər.
Function Declaration fərqlidir.
Bu funksiya scriptdə (vəya kod blokundadırsa, onun tərkibində) istifadə edilə
bilər
Başqa sözlə, Javascript faylı vəya kod blokunda yazmağa başladıqda əvvəlcə
Funksiyalar (proseslər) yazılır. Bu “başlanğıc” olaraq başa düşə bilərik.
Bütün bunları başa düşdüksən sonra anlayırıq ki , Function Declaration digər
funksiyalara görə sürətli çağırılır.
Məsələn nümunə:
// Function Expression
let cem = funksiya (a, b) {
return a + b;
};
salamDe ( "Nail"); // Salam Nail
function salamDe (ad) {
alert (`Salam, $ {ad}`);
}
148
Javascript scripti işə başladığı andan Salam dəyəri yaranmışdır.
Function Expression olsaydı bu proses baş verməzdi:
Function Expression funksiyalarımda proses onlara çatdıqda yaradılır. Yəni
proses bir düz xətt üzərində baş verir. Bu isə çox gecikməyə səbəb olur.
Function decleration kod blokunun içərisində (skope daxilində) hər yerdə
görülür.Ancaq blokdan kənarda görünməyəcəkdir.
Bəzən yalnız blokda lokal olaraq funksiya yararlı ola bilər. Ancaq bu
xüsusiyyət problemlərə səbəb ola bilər.
Nümunə olaraq proses zamanı aldığımız yaş dəyişəninə bağlı olaraq,
xosGelmisiniz() funksiyasını bildirmək lazımdır. Daha sonra isə istifadəyə
başlıyaq.
salamDe ( "Nail"); // xəta!
salamDe = function (ad) {// (*) artıq proses xəta
aldı!
alert (`Salam, $ {ad}`);
};
149
Aşağıdakı kod işləmiyəcəkdir :
Bunun səbəbi Function Declaration yalnız içərisində olduğu kod bloku
görməsidir.
Let yaş = = prompt ("Yaşınız neçədir?", 18);
// Şərt elavə edin
if (yaş <18) {
function xosGeldiniz() {
alert ( "Salam!");
}
} else {
function xosGeldiniz() {
alert ( "Salamlar!");
}
}
// ... daha sonra istifadə et
xosGeldiniz (); // Xəta: xosGeldiniz undefined
150
Başqa nümunə:
xosGeldiniz funksiyasının kənardan if-i görmək üçün nə edə bilərik ? Sonun
əsas məqama çatdıq. Funksiyadan skop-dan kənarda təsir göstərməyə
baxacıq. Salam dəyişəninə dəyər verə biləcik.
let yas= 16; // nümunə olaraq 16
if (yas <18) {
xosGeldiniz (); // \ (işləyəcək)
function xosGeldiniz () {
alert ( "Salam!"); // | Function Declaration kod blokunda görür
} // | bütün parametrlər blokun daxilində idi
// |
xosGeldiniz(); // / (işləyəcəkdir)
} else {
function xosGeldiniz () {// yaş = 16 üçün, " xosGeldiniz" funksiyası
işləməz
alert( "Salamlar");
}
}
// Skoplar bitti
// Bu səbəblə artıq funksiyamız işləmiyəcəkdir
xosGeldiniz (); // Xəta: xosGeldiniz undefined
151
Aşağıdakı nümunədə kimi işlədə bilərik:
? operatorundan istifadə edərək prosesi sadələşdirə bilərik.
let yash= = prompt ("Yaşınız?", 18);
let salam;
if (yash <18) {
salam = function () {
alert ( "Salam!");
};
} else {
salam = function () {
alert ( "Sağolun!");
};
}
xosGeldiniz(); // bitdi
152
Nə zaman Declaration funksiyası əvəzinə Expression funksiyası istifadə
edilməlidir?
İlkin qayda olaraq funksiyamızı yazdıqda diqqətə alınması ən böyük
qaydalardan biri funksiyanın işləmə proses ardıcıllığıdır.
Kodumuzun ardıcıllığında heç bir qayda yoxdur. Çünki bu cür funksiyalarımızı
bildirmədən belə çağıra bilərik.
Kodda f (…) {…} funksiyasına baxmaq, let f= function (…) {…} funksiyasına
nisbətən sadə yazılmışdır.
Decralation funksiyasının işlənmə yerinə bəzən Expression funksiyasıda işlənə
bilər.
Arrow (Ox) Funksiyaları
Funksiyaları yaratmaq üçün sadə ox funksiyasıdan istifadə edə bilərik. Bu
funksiyaların ox funksiyalarının adlandırılması aşağıdakı nümunədə
anlayacaqsınız.
let func = (arg1, arg2, ... argN) => expression
let yash= = prompt ("Yaşınız?", 18);
let salam = (yash <18)?
function () {alert ("Salam!"); }:
function () {alert ("Sağolun!"); };
xosGeldiniz(); // tamam şimdi
153
… Bu, arg1..argN arqumentlərinə sahib funksiya yaradıldı və sağ tərəfdəki
funksiyaya dəyərlər verikdikdən sonra nəticəni verəcəkdir.
Başqa sözlə yuxarıdakı ilə eynidir:
let func = function (arg1, arg2, ... argN) {
return expression;
};
… Tək bir fərqi daha qısa olmasıdır.
Nümunəyə baxaq:
cem = (a, b) => a + b;
/ * Ox funksiyası daha yazılış şəklidir:
cem = function (a, b) {
return a + b;
};
* /
alert (cem (1, 2)); // 3
Tək arqumentimiz varsa, skoplar atıla bilər:
// eyni ilə yazırıq
// let double = function (n) {return n * 2}
let = = n => n * 2;
alert (double (3)); // 6
154
Əgər arqument yoxdursa, skoplar boş olmalıdır.(Ancaq onlar olmalıdır):
Ox funksiyaları Expression funksiyaları ilə eyni şəkildə istifadə edilir.
Nümunə olaraq salam() ilə yazılmış funksiyaya baxaq:
Ox funksiyalarına fərqli gələ bilər. İlk baxışda qarışıq gələ bilər. Ancaq gözlər
strukturda işlədikcə öyrəcəkdir.
Hər söz üçün fərqli sətirdə yazmaq yorduğundan sadə tək sətirlik funksiya
daha rahat olacaqdır.
Çox sətirli ox funksiyaları
Yuxarıdakı nümunələrdə => - in solunda şərt yazıldı və sağ tərəfində ifadə
dəyərləri yazıldı.
let salam = () => alert ("Salam!");
let salam();
let = = prompt ("Yaşınız?", 18);
let salam = (yaş <18)?
() => uyarı ('Salam'):
() => alert ("Salam!");
xosGeldiniz(); // bitti
155
Bəzən çox ifadəyə eyni zamanda yazmaq lazım olur. Bu cür qarışıq ifadələri
yazmaq mümkündür. Ancaq oları dırnaq içərisində yazmalıyıq. Sonra
içlərində normal olaraq return-dən istifadə edə bilərik.
Bunun kimi:
Burada ox funksiyaları haqqında qısa məlumat verdik. Sonrakı bölmədə ox
funksiyaları haqqında ətraflı məlumat verəcik.
Nəticə
Funksiyalar dəyərdir. Kodun istənilən yerində istifadə edilə bilər,
kopyalanabilər və bildirə bilərik.
Funksiyalar kodun tərkibində fərqli ifadə olaraq bildirilsə, buna “Declaration
funksiyası” deyilir.
Funksiya ifadənin tərkibindən ayrılmayıb bir bildirilsə, buna “Expression
funksiyası” deyilir.
cem = (a, b) => {// skopların olması çox sətirli funksiyalar üçün
açılır.
let result = a + b;
return result; // skopdan istifadə edirsinizsə, nəticəni almaq
üçün returndən istifadə edin.
};
alert (cem (1, 2)); // 3
156
Declaration funksiyaları kod bloku işə salınmadan işə düşür. Blokun hər
yerində görünə bilir.
Expression funksiyaları yalnız prosesin onlara çatdığı anda işə düşürlər.
Çox zaman Declaration funksiyasından əvvəlcədən bildirilmə lazım olduqda
istifadə etmək daha çox rahatlığı və ümumilikdə oxunarlılığı artırır.
Bu səbəblə Expression funksiyası yalnız Declaration funksiyası uyğun
olmadığı hallarda istifadə etməliyik. Bu bölmədə bir neçə nümunə gördük və
gələcəkdə daha çox nümunlərə baxacıq.
Ox funksiyaları tək sətirlik kodlar üçün istifadəsi verimlidir. İki növdə yazılır:
1. Skoplar olmadan (...args) => espression – sağ tərəfdə ifadədir: funksiya
onun dəyərləndirir və nəticəni göstərir.
2. Skoplarla: (...args) => (...args)=> {body}- skoplar funksiyanın tərkibində
çox ifadənin yazılmasına imkan verir. Ancaq nəticəni almaq üçün
return-dən istifadə edilməlidir.
157
20. Xülasə
Bu bölmədə indiyənə qədər öyrədilmiş dərslərin əsas hissələrinə qısa olaraq
baxacıq.
Kod strukturu
İfadələr nöqtəli vergüllə sonlandırılır:
Ümumlikdə sətrin sonu bitməni bildirir. Bu səbəblə də yenə işləyəcəkdir:
“Avtomatik vergül əlavə etmə” belə problemlərin həllidir. Məsələn:
alert ('Salam');
alert ('Dünya');
alert ('Salam')
alert ('Dünya')
alert ("Bu mesajdan sonra xəta olacaqdır")
[1, 2]. forEach (alert)
158
Developerlərin çoxu hər ifadədən sonra nöqtəli vergül qoymaqla oxunarlılığı
artırıldığını söyləyir.
Nöqtəli vergül {...} bunun kimi kod bloklarında sonra lazım deyildir:
… Ancaq istənilən bir yerə bilməyərəkdən “əlavə” nöqtəli vergül qoyarıqsa,
diqqətə alınmayacaqdır.
Daha ətraflı: Kod strukturundadır.
function f ()
// funksiyadan sonra nöqtəli vergülə ehtiyac yoxdur.
}
for (;;) {
// alqoritmadan sonra nöqtəli vergül lazım deyildir.
}
159
Use Strict Mode
Müasir Javascriptin bütün xüsusiyyətlərini tam olaraq işə salmaq üçün script
fallarının əvvəlində “use strict” -dən istifadə etməliyik.
Təsir edəcəyi kodun vəya funksiyanın başında yazılmalıdır.
“use strict” olmadan hər şey işləyəcəkdir. Ancaq bəzi xüsusiyyətlər əvvəlki
xüsusiyyətlərini əvvəlki şəkildə istifadə edəcəkdir. Ümumi olaraq kodlarda
use strict moddan istifadə edirik.
Dilin bəzi müasir xüsusiyyətlərinin (sonrakı bölmələrdəki kimi classlardakı
kimi) use strictlə istifadə etmək mümkündür.
Daha ətraflı: use strict mode bölməsinə baxa bilərsiniz.
'use strict';
...
160
Dəyişənlər
Aşağıdakılarla bildirilərək istifadə edilə bilər:
• let
• const (sabit, dəyişilməz)
• var (köhnə metod, yazıldıqdan sonra görünəcəkdir)
Dəyişənlərin adlandırılaması :
• Hərflər və rəqəmlər. Ancaq ilk simvol rəqəm olmamalıdır.
• $ və _ simvollarından istifadə edə bilərsiniz.
• Latın əlifbasında başqa hərflərə icazə verilir ancaq çoxda istifadə edilmir.
Dəyişənlər dinamikdir. İstənilən dəyəri saxlaya bilərlər :
7 məlumat (Data) tipi vardır:
• Rəqəm – kəsr və tam ədədlər,
let x = 5;
x = "Nail";
161
• Yazılar – String,
• Məntiqi dəyərlər- Boolean (true/false),
• null - "boş" vəya "olmayan" mənasına gələn və yalnız null dəyərinə sahib
tipdir.
• undefined – Bilinməyən dəyər olan “ bilinməyən” mənasını verən tipdir.
• Object və symbol – Qarışıq dataların saxlanması və oxşarı olmayan
dəyərləri saxlayan data tipidir.
Typeof operatoru iki istisnadan başqa, dəyərin hansı tipdə olduğunu bildirir:
Daha ətraflı: Dəyişənlər və Data tipləri bölməsindən baxa bilərsiniz.
typeof null == "object" // dildə xətadır
typeof function () {} == "function" // funksiyalar xüsusi olaraq
yoxlalınılır.
162
Alert, Prompt, Confirm
Brauzerdə işləyən sadə Uİ elementləri ilə hazırlanmış sadə funksiyalardır:
prompt(sual, [default])
Sual soruşduqda – istifadəçi tərəfindən yazılmış dəyər vəya cancel -dəyəri
geri döndürülür.
confirm (sual)
Sualın nəticəsinin Bəli vəya Xeyr olaraq alınması üçün istifadə edilir.
alert (mesaj)
Bildiriş mesajı çıxacaqdır.
Bütün bu funksiyalar modaldır. Kodun işləməsini dayandırır və istifadəçinin
cavab verməsini gözləyir.
Nümunə:
Daha ətraflı: Alert, Prompt, Confirm bölməsindən baxa bilərsiniz.
let istifadeciAdi = prompt ("Adınız?", "Nail");
let cayİsteyen = confirm ("Çay istəyirsiniz?");
alert ("İstifadəçi:" + istifadeciAdi); // Nail
alert ("Çay istənildi:" + cayİsteyen); // true
163
Operatorlar
JavaScript aşağıdakı operatorları dəstəkləyir:
Aritmetik
Normal: * + - /, Qalıq % və ** qüvvət operatorları.
+ operatoru iki string birləşdirir. Dəyərlərdən biri stringdirsə, digərinidə
stringə çevirəcəkdir:
Bərabərlik
Dəyər vermə : a=b və a*=2 kimi qısaltma vardır.
Bitwise
Bitwise operatorları ən kiçik 32 bit səviyyəsində işləyir. Ehtiyac olarsa
dokumentariyasına baxa bilərsiniz.
alert ('1' + 2); // '12', string
alert (1 + '2'); // '12', string
164
Şərt
Üç parametrli tək operator : cond? neticeA:neticeB.Nəticə düzgündürsə
neticeA əks halda isə neticeB nəticəsini verəcəkdir.
Məntiq operatorları
Məntiqi VƏ && və VƏYA || qısa məntiqi əlaqə qura bilərsiniz və nəticəni
istəyinizə uyğun dəyərləndirə bilərsiniz. Məntiq NOT! Operatoru boolean
dəyəri alır və tərs dəyəri verir.
Müqayisə operatorları
Bərabərlik yoxlaması etdikdə (==) dəyişən tiplərinin nəticəsi fərqli tipə
çevriləcəkdir. (Bir-biri ilə bərabər olan və null vəya undefined istisna
olmaqla),
Bu səbəblə bunlar bərabərdir:
Digər müqayisələrdə ədədə çevirir.
alert (0 == false); // true
alert (0 == “ ”); // true
165
Qatı bərabərlik operatoru ( == ) : Fərqli tiplərdə olan dəyərlər bu operator
üçün fərqli dəyər almasını bildirir.
Null və undefined birbirinə bərabərdir və başqa heçnəyə bərabər olmurlar.
Digər Operatorlar
Vergül operatorları kimi bir neçə operator vardır.
Daha ətraflı: Operatorlar , Müqayisə , Məntiqi Operatorlara baxın.
166
Alqoritma
Aşağıda 3 fərqli alqoritma yazdıq:
// 1
while (şərt) {
...
}
// 2
do
...
} while (şərt);
// 3
for (let i = 0; i <10; i ++) {
...
}
167
for (let ...) alqoritmasında verilmiş dəyişən yalnız alqoritma daxilində
görünür. Ancaq olan dəyişən buraxa bilərik və yenidən istifadə edə bilərik.
Alqoritmada break/continue ilə istifadə edərək qırmaq və davam etdirmək
mümkündür.
Daha ətraflı : Alqoritma: while və for bölməsinə baxın.
Daha sonra isə objectlərlə əlaqələndirmək üçün daha çox alqoritma növü ilə
işləyəcəyik.
168
“Switch” strukturu
“Switch” strukturu birdən çox if olarsa, istifadə edilir.
Müqayisə üçün === istifadə edilir.
Nümunə:
Daha ətraflı : “Switch” strukturundan baxa bilərsiniz.
let age = prompt ('Yaşınız?', 18);
switch (age) {
case 18:
alert ("İşləmiyəcəkdir"); // istənilən dəyər tipi rəqəm
deyil string istəyir.
case: "18"
alert ("Bu işləyəcəkdir!");
break;
default:
alert ("Yuxarıdakılardan heç biri uyğun olmadığı
halda bu işə düşəcək dəyər");
}
169
Funksiyalar
Javascriptdə funksiya yaratmağın 3 yolu var:
1. Declaration funksiyası: Əsas kodun tərkibində yazılan funksiya
2. Expression funksiyası:
function cem (a, b) {
let cem = a + b;
return cem;
}
let cem = function (a, b) {
let cem= a + b;
return cem;
};
170
3. Ox funksiyaları:
Funksiyalar local dəyişənlərə sahib ola bilərlər. Öz tərkiblərində yaradılır. Bu
dəyişənlər sadəcə funksiyanın daxilində görülür.
Funksiyalar default (ilkin) dəyərə sahib ola bilərlər. Function cem (a=1, b=2)
{...}.
// İfadə oxdan sağ tərəfdə yazılır
cem = (a, b) => a + b;
// vəya {...} ilə çox sətirlik kod yaza bilərsiniz. Ancaq
bu zaman returndən istifadə edilməlidir:
let cem = (a, b) => {
// ...
return a + b;
}
// Asılı olmayan dəyişənlər olmadan
let sayHi = () => alert ("Salam");
// tək arqumentlə
let = = n => n * 2;
171
Funksiyalar hər zaman dəyər qaytarır. Return ifadəsi yoxdursa, nəticə
undefineddir.
Daha ətraflı : Funksiyalar, Funksiya ifadələri və ox funksiyaları bölməsindən
oxuya bilərsiniz.
Dostları ilə paylaş: |