CodeGym /Kurslar /JAVA 25 SELF /Kompilyator və şərhlər

Kompilyator və şərhlər

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. Java kompilyatoru

Yeri gəlmişkən, siz hələ dəfələrlə eşidəcəksiniz ki, Java-nın digər dillər qarşısında danılmaz üstünlüyü — bu, multiplatformalılıqdır. Bəs bu nədir və necə işləyir? Uzaqdan başlayaq.

Məsələ ondadır ki, kompüter yalnız ən sadə əmrləri yerinə yetirə bilir.

İtlər üçün “Yana”, “Pəncə” və başqaları kimi komandalar var — it bu sözləri eşidəndə nəsə vacib bir hərəkət edir. Kompüterdə isə belə əmrlərin rolunu rəqəmlər oynayır: hər bir əməl müəyyən bir ədəd ilə kodlanır (buna maşın kodu da deyirlər).

Proqramı rəqəmlər şəklində yazmaq çox çətindir, buna görə insanlar proqramlaşdırma dillərikompilyatorlar fikirləşiblər. Belə bir dil bir tərəfdən insana, digər tərəfdən isə kompilyatora anlaşılandır. Kompilyator — proqramlaşdırma dilində yazılmış proqram mətnini maşın kodları toplusuna çevirən xüsusi proqramdır.

Adətən proqramçı proqramı proqramlaşdırma dilində yazır, sonra isə kompilyatoru işə salır; kompilyator isə proqramçının yazdığı fayllar əsasında maşın kodlarından ibarət tək bir fayl — yekun (kompilyasiya olunmuş) proqram yaradır.

  • Proqram dilində C++
  • Kompilyator
  • Maşın kodlarından ibarət proqram
C++ dili üçün kompilyasiya mərhələləri

Nəticədə alınan proqram dərhal kompüterdə icra oluna bilər. Bu yanaşmanın mənfisi ondadır ki, alınan proqramın kodu prosessordan və əməliyyat sistemindən güclü asılıdır. Windows üçün kompilyasiya olunmuş proqram Android-li telefonda işləməyəcək.

Əgər siz Android üçün proqram yazmısınızsa, o, Windows əməliyyat sistemində işə düşməyəcək!

Amma Java-da daha innovativ yanaşma var.

  • Proqram dilində Java
  • Java‑kompilyator
  • Proqram, xüsusi kodlardan ibarət (bayt‑kod)
  • Java VM
  • Proqram, maşın kodlarından ibarət
Java dili üçün kompilyasiya mərhələləri

Java kompilyatoru bütün sinifləri maşın kodlarından ibarət tək bir proqrama çevirmir. Bunun əvəzinə, o, hər sinifi ayrıca kompilyasiya edir və maşın kodlarına yox, xüsusi aralıq koda (bayt-koda) çevirir. Maşın koduna kompilyasiya isə proqram işə salınanda həyata keçirilir.

Bəs proqram işə salınarkən onu maşın koduna kim çevirir?

Bunun üçün JVM (Java Virtual Machine) — Java Virtual Maşını adlı xüsusi proqram var. Əvvəlcə onu işə salırlar, sonra isə bayt-koddan ibarət proqramı. Və elə JVM lazım olan proqramı icradan əvvəl maşın koduna kompilyasiya edir.

Əgər sizdə daha geniş əmrlər dəstini dəstəkləyən güclü prosessor varsa, “ikinci kompilasiya” zamanı məhz sizin prosessor və ƏS nəzərə alınaraq maşın kodu generasiya ediləcək. Elə buna görə də Java bəzən dərhal maşın koduna kompilyasiya olunan və yalnız ən geniş yayılmış prosessor əmrlərindən istifadə edə bilən C++-dan daha sürətli olur.

2. Kompilyasiya zamanı tipik səhvlər

Sürət və optimizasiya hələlik o qədər də vacib deyil, amma vacib olan odur ki, kompilyator proqramınızı səhvlərə qarşı yoxlayır. O, kodu düzgünlüyə görə yoxlayır və ən kiçik bir səhv tapsa belə, onu irəli buraxmayacaq.

Səhv nümunəsi:

Siz yalnız mətn saxlaya bilən dəyişənə rəqəm mənimsətməyə çalışırsınız.

String userName = 42; // Ay! Belə olmaz.

Kompilyator dərhal tiplərin uyğun gəlmədiyini bildirəcək: Cannot implicitly convert type 'int' to 'string'.

Başqa bir nümunə — println komandasında yazı səhvi:

System.out.printline("Salam!"); // Metodun adında səhv

Kompilyator deyəcək: “Belə metod yoxdur — sintaksisi yoxla!”

Səhvləri necə oxumaq?

Əksər kompilyatorlar səhvin kodun harasında olduğunu göstərir, hətta bəzən düzəliş variantları da təklif edirlər. Səhvlərdən qorxmayın: onların hər biri — maariflənməyə və daxili “boss”unuzu keçməyə doğru atılan addımdır.

3. Şərhlər

Belə təsəvvür edin: siz mürəkkəb bir proqram yazırsınız. Hər şey işləyir, siz — dahisiniz! Amma bir ay sonra həmin kodu açırsınız və... heç nə başa düşmürsünüz. Burada bir neçə sətir kod, orada qəribə dəyişən. Beyninizdə ancaq bir fikir: “Bunu kim yazıbsa, mən deyiləm!”. Elə bu anda şərhlər köməyə çatır.

Şərhlər — sanki dərsliyin kənarındakı qeydlər və ya soyuducudakı yazılar kimidir (“Pivə. İçmə. Səhərə!”). Kompilyator onları görməzlikdən gəlir, insanlar isə əksinə. Şərhlər kodun mənasını izah etməyə, vacib detalları qeyd etməyə və hətta hissələri silmədən “söndürməyə” imkan verir.

Vacibdir: heç bir kompilyator şərhlərinizi oxumur, onlar tamamilə yox sayılır!

Bir sətirli şərhlər

Java-da iki növ şərh var — bir sətirli və çox sətirli. Bir sətirli şərhlər iki əlçim // ilə başlayır və sətirin sonuna qədər davam edir. //-dan sonra olan hər şey şərh sayılır və tamamilə kompilyator tərəfindən görməzlikdən gəlinir.

Nümunə:

System.out.println("Salam, dünya!"); 	// Bu, salamlamanı ekrana çıxarır

Burada // Bu, salamlamanı ekrana çıxarır — şərhdir. Əgər kodda sətirin nə üçün lazım olması aydın deyilsə, bax belə yazın!

Daha bir nümunə:

int x = 42; 	// Proqramçının yaşı üçün dəyər

Bir sətirli şərhləri ayrıca sətirlərdə də yazmaq olar:

// İstifadəçi adını saxlayan dəyişənin ilkinləşdirilməsi
String userName = "Vasya";

Demək olar ki, ssenaridəki replikalar kimidir: şərh nə üçün və nəyə görə olduğunu izah edir.

Çox sətirli şərhlər

Bəs çox şey toplanıbsa? Həqiqi bir hekayə? Bunun üçün /* ilə başlayan və */ ilə bitən çox sətirli şərhlər var. Bu simvollar arasında olan hər şey kompilyator tərəfindən, bir neçə sətir olsa belə, görməzlikdən gəlir.

Nümunə:

/*
  Burada istifadəçinin adını ekrana çıxarırıq.
  Əgər ad yoxdursa, "Qonaq" yazacağıq.
*/
System.out.println("Adınızı daxil edin:");

Və ya belə:

int age = 18; /* Yeni istifadəçi üçün yaşın ilkin dəyəri
                 üçün */

Diqqət: çox sətirli şərhləri bir-birinin içinə yerləşdirmək olmaz. Kompilyatordan daha hiyləgər olmağa çalışmayın — bu, işləməyəcək.

İllustrasiya:

Növ Sintaksis Nümunə
Bir sətirli
// şərh
int x = 1; // izah
Çox sətirli
/* burada hər şey */
/* burada istədiyiniz hər şeyi izah edə bilərsiniz */

4. Həyatdan nümunələr

Kod sətrini “söndürmək”:

Bəzən siz müəyyən bir kod fraqmentinin müvəqqəti icra olunmamasını istəyirsiniz. Elə şərhlər burada yerinə düşür:

// System.out.println("Müvəqqəti lazım olmayan mətn");

Sətir qaldı, amma kompilyator onu “görmür”.

TODO və FIXME qeydləri

Proqramçılar da insandır və bəzən özlərinə xatırlatmaq lazımdır ki, kod hələ tam deyil və ya burada bir bug var. Bunun üçün tez-tez belə yazırlar:

// TODO: boş daxil etməyə yoxlama əlavə et
// FIXME: bu funksiya cəmi səhv hesablayır

Bir çox redaktor və IDE hətta bu sözləri vurğulayır!

Proqramçılar zarafat edir

// Bu kod üçün məsuliyyət daşımıram. Onu istəksiz yazmağa məni məcbur ediblər.
// Əzizim, men_gələcəkdənəm! Xahiş edirəm, bu kod üçün məni bağışla.
// Əgər bunu bir də görsəm, işə silah gətirməli olacağam.
// Əgər bu şərt nə vaxtsa yerinə yetirilərsə, zəhmət olmasa, mükafat qarşılığında mənə tel. xxx-xxx-xxx nömrəsinə xəbər verin.
// Əziz proqramçı:
//
// Bu altproseduru “optimizə” etməyi bitirdikdən sonra
// və bunun nə qədər böyük səhv olduğunu başa düşəndə,
// xahiş edirəm, aşağıdakı sayğacı
// növbəti adama xəbərdarlıq olsun deyə artır:
//
// kolichestvo_chasov_potrachennykh_zdes = 42
// Mən bunu yazmağa başlayanda yalnız Allah və mən nə etdiyimi anlayırdıq. 
// İndi yalnız Allah qalıb
// Bəzən mənə elə gəlir ki, kompilyator bütün şərhlərimi görməzlikdən gəlir
// Mən bütün kodumu, bütün işimi həyat yoldaşım Darlinə həsr edirəm, 
// bu production-a gedəndə məni, üç övladımızı və iti 
// o dolandırmalı olacaq.

Bəli, şərhlər çox gülməli ola bilər. Axı onları canlı insanlar yazır.

1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
Əmrlər və ilk proqram
Əmrlər və ilk proqram
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION