Javascript nail Mammadov


Function Expression və Function Declaration



Yüklə 1,07 Mb.
Pdf görüntüsü
səhifə7/7
tarix06.06.2020
ölçüsü1,07 Mb.
#31757
1   2   3   4   5   6   7
Javascript


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. 
 

Yüklə 1,07 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin