JavaScript introduction

Zöhrab Səmədzadə
Pragmatech
Published in
7 min readAug 6, 2022

JavaScript (çox vaxt JS-ə qısaldılır) birinci dərəcəli funksiyaları olan lightweight, interpreted, object-oriented language və ən yaxşı Veb səhifələr üçün script dili kimi tanınır, lakin bir çox qeyri-brauzer mühitlərində də istifadə olunur.

JavaScript Interpreter dildir. Bu ifadənin mənasını anlamaq üçün əvvəlcə gərək Tərcüməçilərin nə olduğunu və Interpreter sözünün mənasını başa düşək və Interpreter dan əlavə nəyin olduğunu bilmək lazımdır.

Compiler, Interpreter, high-level dillərdə yazılmış proqramları kompüterin başa düşdüyü maşın koduna çevirirlər. Assemblerlər isə aşağı səviyyəli və ya montaj dilində yazılmış proqramları maşın koduna çevirirlər. Kompilyasiya prosesində bir neçə mərhələ var. Proqramçılara səhvsiz kod yazmağa kömək etmək üçün alətlər mövcuddur.

Assembly dili maşından asılıdır, lakin orada təlimatları təmsil etmək üçün istifadə olunan mnemonica maşın tərəfindən birbaşa başa düşülən deyil və yüksək səviyyəli dil maşından müstəqildir. Kompüter maşın kodundakı təlimatları başa düşür, yəni 0 və 1-lər şəklində. Kompüter proqramını birbaşa maşın kodunda yazmaq yorucu bir işdir. Proqramlar əsasən Java, C++, Python və s. kimi yüksək səviyyəli dillərdə yazılır və mənbə kodu adlanır. Bu mənbə kodu birbaşa kompüter tərəfindən icra edilə bilməz və icra olunmaq üçün maşın dilinə çevrilməlidir. Deməli, yüksək səviyyəli dildə yazılmış proqramı maşın koduna çevirmək üçün xüsusi tərcüməçi sistem proqramından istifadə olunur və proqrama Dil Prosessoru və maşın koduna çevrildikdən sonra proqram (obyekt proqramı/obyekt kodu) deyilir.

Programlaşdırma dillərində ümumiyyətlə 3 cür tərcüməçi növləri mövcuddur.

  1. Interpreter

Mənbə proqramının tək bəyanatının maşın koduna tərcüməsi dil prosessoru tərəfindən həyata keçirilir və növbəti sətirə keçməzdən dərhal əvvəl yerinə yetirilir, Interpreter adlanır. İfadədə xəta olarsa, interpreter həmin ifadədə tərcümə prosesini dayandırır və error mesajını göstərir. Interpreter yalnız səhv aradan qaldırıldıqdan sonra icra üçün növbəti sətirə keçir. Interpreter proqramlaşdırma və ya script dilində yazılmış təlimatları əvvəlcədən obyekt koduna və ya maşın koduna çevirmədən birbaşa icra edir. Məsələn: JavaScript, Python, Perl, Matlab.

  • Interpreter eyni anda proqramın yalnız bir ifadəsini maşın koduna çevirir.
  • Interpreter mənbə kodunu təhlil etmək üçün çox az vaxt aparır. Bununla belə, prosesin yerinə yetirilməsi üçün ümumi vaxt daha yavaşdır.
  • Interpreter vasitəçi kod yaratmır. Beləliklə, Interpreter yaddaşı baxımından yüksək səmərəlidir.
  • İlk səhvlə qarşılaşana qədər proqramı davamlı olaraq tərcümə etməyə davam edir. Hər hansı bir səhv aşkar edilərsə, işləməyi dayandırır və beləliklə, debugging asan olur.

2. Compiler

Yüksək səviyyəli dildə yazılmış tam mənbə proqramı bütövlükdə bir anda oxuyan və onu maşın dilində ekvivalent proqrama çevirən dil prosessoru Compiler adlanır.

Compiler’da mənbə kodu səhvlərdən azad olarsa, müvəffəqiyyətlə obyekt koduna çevrilir. Compiler mənbə kodunda hər hansı xəta olduqda kompilyasiyanın sonunda errorları sətir nömrələri ilə müəyyən edir. Compiler mənbə kodunu yenidən uğurla tərtib etməzdən əvvəl errorlar aradan qaldırılmalıdır. Məsələn: C, C++, C#, Java.

  • Compiler bütün proqramı skan edir və bütün proqramı bir anda maşın koduna çevirir.
  • Compiler mənbə kodunu təhlil etmək üçün çox vaxt aparır. Bununla belə, prosesi yerinə yetirmək üçün sərf olunan ümumi vaxt daha sürətlidir.
  • Compiler həmişə vasitəçi obyekt kodu yaradır. Əlavə əlaqə tələb edəcək. Buna görə daha çox yaddaş tələb olunur.
  • Compiler səhv mesajını yalnız tam proqramı skan etdikdən sonra yaradır və buna görə də Compiler-la işləyərkən debugging nisbətən çətindir.

3. Assembler

Assembler, Assembly dilində yazılmış proqramı maşın koduna çevirmək üçün istifadə olunur. Mənbə proqramı assembler dilinin təlimatlarını ehtiva edən assemblerin girişidir. Assembler tərəfindən yaradılan çıxış kompüter tərəfindən başa düşülən obyekt kodu və ya maşın kodudur. Assembler əsasən insanlarla maşınla əlaqə qura bilən 1-ci interfeysdir. İnsan və maşın arasındakı boşluğu doldurmaq üçün bir Assembler lazımdır ki, onlar bir-biri ilə əlaqə saxlaya bilsinlər. Assembly dilində yazılmış kod ADD, MUL, MUX, SUB, DIV, MOV və s. kimi bir növ mnemonikadır (təlimatlar). və assembler əsasən bu mnemonikaları Binar kodda çevirə bilir. Burada bu mnemonika həm də maşının arxitekturasından asılıdır.

Məsələn, intel 8085 və intel 8086-nın arxitekturası fərqlidir.

Ümid edirəm ki tərcüməçilər haqqında müəyyən biliklərə yiyələndik və sırada Interpreter və Compiler tərcüməçilərinin fərqlərini öyrənməliyik. Bu fərqləri aydınlaşdırdıqdan sonra yeni programlaşdırma dilinə keçid edən zaman (JavaScript-dən Java-ya, yəni Interpreter-dən Compiler-a) yeni dilə adaptasiya çox daha asan olacaqdır.

Interpreter:

  • Interpreter mənbə proqramı götürür və onu sətir-sətir yerinə yetirir, hər sətri ona gələn kimi tərcümə edir
  • Interpreter mənbə kodunu təhlil etmək üçün daha az vaxt tələb edir, lakin proqramın ümumi icra müddəti daha yavaşdır.
  • Error aşkarlanana qədər proqramı tərcümə etməyə davam etdiyi üçün onun Debug prossesi daha asandır.
  • Interpreter, compiler-dan daha az yaddaş tələb edir, çünki heç bir obyekt kodu yaradılmır.
  • Intermediate object kodu yaradılmır.
  • Interpreter təhlükəsizlik vəziyyətində bir az həssasdır.

Compiler:

  • Compiler proqramlaşdırma dilinin bütün mənbə kodunu CPU üçün icra olunan maşın koduna çevirən proqramdır.
  • Compiler bütün mənbə kodunu təhlil etmək üçün çox vaxt tələb edir, lakin proqramın ümumi icra müddəti nisbətən daha sürətlidir.
  • Compiler error mesajını yalnız bütün proqramı skan etdikdən sonra yaradır, ona görə də səhvin aradan qaldırılması nisbətən çətindir, çünki səhv proqramın hər hansı yerində ola bilər.
  • Compiler error mesajını yalnız bütün proqramı skan etdikdən sonra yaradır, ona görə də error’un aradan qaldırılması nisbətən çətindir, çünki error proqramın hər hansı yerində ola bilər.
  • Intermediate object kodu yaradılır.
  • Təhlükəsizlik üçün Compiler daha faydalıdır.

JavaScript Variables

Variables digər adı ilə dəyişənlər JavaScriptdə ən önəmli mövzulardandır. Variables nə deməkdir sualını versək cavab olaraq deməliyik ki, variables məlumatların saxlanılması üçün konteyner rolunu oynayır. Yəni əgər dəyişənə 5 dəyəri vermişiksə həmin dəyişən 5 dəyərini özündə saxlayır və çağırıldığı zaman o dəyərdən istifadə edir.

JavaScript-də dəyişənlərin təyin olunmasının 4 üsulu vardır.

  1. var keyword
  • ES6-nın gəlişindən əvvəl var bəyannamələri hökm sürürdü. Var ilə elan edilən dəyişənlərlə bağlı problemlər var. Buna görə dəyişənlərin elan edilməsinin yeni yollarının ortaya çıxması zəruri idi.
  • var dəyişənləri yenidən elan edilə və yenilənə bilər. Bu o deməkdir ki, biz bunu eyni miqyasda edə bilərik və error almayacağıq.

Məsələn:

Və ya:

Bu kod nümunələrində də göründüyü kimi var istifadəsində daha kompleks kod yazdıqda problemlərlə qarşılaşmaq mümkündür hansı ki, heçkim qarşılaşmaq istəməz. Alınan nəticələr təəccübləndirici ola bilər.

Hoisting, kodun icrasından əvvəl variable-ların və function declaration-larının əhatə dairəsinin yuxarı hissəsinə köçürüldüyü JavaScript mexanizmidir. Bu o deməkdir ki, əgər bunu etsək:

var ilə bağlı problem:

Burada da göründüyü kimi var ilə 1-dən çox eyni adda variable təyin olunduqda düzdür kod işləyəcək amma alınan nəticə sizi təəccübləndirəcək. Buna görə də var yerinə let və ya const ifadələrini işlətmək daha məntiqlidir.

2. let keyword

  • let indi dəyişən elanı üçün üstünlük verilir. Təəccüblü deyil ki, bu, var bəyannamələrinin təkmilləşdirilməsi kimi gəlir. O, həm də indicə əhatə etdiyimiz var ilə problemi həll edir. Çünki bunun səbəbi let-in var-dan fərqli olaraq scope-u block scope-dur. Yəni variable yalnız təyin olunduğu yerdə icra oluna bilər ‘{}’ curly braces daxilində.

Məsələn:

  • Bu misalda da göründüyü kimi var-dan fərqli olaraq let {} daxilində təyin olunduğu zaman yalnız təyin olunduğu scope daxilində çağırmaq mümkündür.
  • let-in value-si update oluna bilər amma yenidən təyin oluna bilməz.

Məsələn:

Yox əgər bu formada yazsaq:

Error-u ilə qarşılaşacağıq

  • Əgər fərqli scope-da eyni value-a malik let ifadələri varsa heç bir error ilə qarşılaşmayacağıq.

Məsələn:

  • Niyəmi error ilə qarşılaşmadıq. Çünki fərqli scope-larda olan let ifadələrinin variable-ları eyni adda olsa da fərqliymiş kimi davranırlar. Bu da let-in var-dan daha üstün və yaxşı olduğunun sübutudur. Həmçinin let ilə eyni variable adında 1-dən çox təyin edə bilmədiyimizə görə var-dakı problem ilə qarşılaşmırıq.
  • let var kimi təyin olunduğu zaman çağırıldığı zaman üstdə olmalıdır. Yoxsa var-dan fərqli olaraq Reference error ilə qarşılaşacağıq. “Cannot access ‘any name’ before initialization”.

3. const keyword

  • const ilə təyin olunan variable-lar sabit value-lar saxlayırlar. Bu value-lar yenidən təyin oluna bilməzlər. const keyword-u bir növ let-ə bənzəyir.
  • let kimi const da block scoped-dir yəni təyin olunduğu scope-da çağırıla bilərlər.
  • const yenidən təyinə oluna və update oluna bilməz.

Məsələn:

Həmçinin belə:

Və belə:

  • let var kimi const da çağırıldığı zaman üstdə olmalıdır və value-su olmalıdır.

4. Heç bir xüsusi keyword-dən istifadə etmədən

  • Heçbir xüsusi keyword istifadə etmədən də yazmaq mümkündür.

Məsələn:

var, let const keyword-lərinin ən əsas fərqləri.

  • var declaration-ları global scope və ya function scope-unda, let və const isə block scope-dadır.
  • var variable-ları onun əhatə dairəsində yenilənə və yenidən elan edilə bilər; let variable-ları yenilənə bilər, lakin yenidən elan edilmir; const variable-ları nə yenilənə, nə də yenidən elan edilə bilər.
  • Onların hamısı öz əhatə dairəsinin üst hissəsinə qaldırılıb. Lakin var variable-ları undefined ilə başlasa da, let və const variable-ları işə salınmır.
  • Var və let başlatmadan elan edilə bilsə də, elan zamanı const başladılmalıdır.

Bəs var əvəzinə let-dən istifadə etməyin faydaları nələrdir?

  • var haqqında da let haqqında da yuxarıda tam açıq şəkildə məlumat paylaşdım. var əvəzinə let istifadə etmənin ən böyük özəlliyi düzgün kod yazma strategiyasının olmasıdır. var ilə eyni variable-da fərqli value-lar saxlana bilsə də let-də bu belə olmadığından kod strukturu düzgün alınacaq və kod düzgün yazılıbsa gözlənilməz təəccüblü nəticələr ilə qarşılaşmayacağıq.

--

--