1. C#-kompilyator
Kompüter insan dilini başa düşmür. Kompüter hətta proqramlaşdırma dillərini də başa düşmür. O, yalnız maşın kodlarında yazılmış proqramları — yəni sıfır və birlərdən ibarət proqramları başa düşür.
İtlər üçün "Yanımda", "Pəncə" və başqa komandalar var, hansı ki, it eşidəndə nəsə vacib bir şey edir. Kompüterdə isə belə komandaların rolunu ədədlər oynayır: hər bir komanda müəyyən bir ədədlə kodlaşdırılıb (buna maşın kodu da deyirlər).
Proqramı ədədlərlə yazmaq çox çətindir, ona görə insanlar proqramlaşdırma dilləri və kompilyatorlar fikirləşiblər. Belə bir dil, bir tərəfdən insana aydındır, digər tərəfdən isə kompilyatora. Kompilyator — bu xüsusi bir proqramdır ki, proqramlaşdırma dilində yazılmış proqram mətnini maşın kodları toplusuna çevirir.
Adətən proqramçı proqramı proqramlaşdırma dilində yazır, sonra isə kompilyatoru işə salır, hansı ki, proqramçının yazdığı kod faylları əsasında bir maşın kodlu fayl — yekun (kompilyasiya olunmuş) proqram yaradır.
- C++ dilində proqram
-
Kompilyator
- Maşın kodlarından ibarət proqram
Nəticədə alınan proqram dərhal kompüterdə işləyə bilər. Bu yanaşmanın mənfi tərəfi odur ki, alınan proqramın kodu prosessordan və əməliyyat sistemindən çox asılıdır. Windows üçün kompilyasiya olunmuş proqram Android telefonunda işləməyəcək.
Əgər sən proqramı Android üçün yazmısansa, Windows əməliyyat sistemində o işləməyəcək!
Amma C#-da daha innovativ bir yanaşma var.
- C# dilində proqram
-
C#‑kompilyator
- Xüsusi IL-kodlardan ibarətproqram (bayt‑kod)
-
CLR
- Maşın kodlarından ibarət proqram
C# kompilyatoru bütün klassları bir maşın kodlu proqram halına gətirmir. Onun əvəzinə sənin kodunu maşın koduna yox, xüsusi aralıq IL-koduna (bayt-kod) kompilyasiya edir. Maşın koduna kompilyasiya proqram işə düşəndə baş verir.
Bəs proqramı işə salanda onu maşın koduna kim kompilyasiya edir?
Bunun üçün xüsusi bir proqram var — CLR (Common Language Runtime) — C# üçün virtual maşın. Əvvəlcə onu işə salırsan, sonra isə bayt-koddan ibarət proqramı. Və artıq CLR lazım olan proqramı icra etməzdən əvvəl onu maşın koduna kompilyasiya edir.
Əgər səndə güclü prosessor varsa və daha çox maşın komandalarını dəstəkləyirsə, "ikinci kompilyasiya" zamanı məhz sənin prosessor və əməliyyat sisteminə uyğun maşın kodu yaradılacaq. Məhz buna görə C# bəzən C++-dan daha sürətli olur, çünki C++ dərhal maşın koduna kompilyasiya olunur və yalnız ən geniş yayılmış prosessor komandalarından istifadə edə bilir.
2. Kompilyasiya zamanı tipik səhvlər
Hələlik kodun sürəti və optimizasiyası bizim üçün o qədər də vacib deyil, amma vacib olan odur ki, kompilyator sənin proqramını səhvlərə görə yoxlayır. O, kodu düzgünlüyə görə yoxlayır və hətta kiçik bir səhv tapsa, onu irəli buraxmayacaq.
Səhv nümunəsi:
Sən bir dəyişənə, hansı ki, yalnız mətn saxlaya bilər, ədəd verməyə çalışırsan.
string userName = 42; // Ayda! Belə olmaz.
Kompilyator dərhal səhv verəcək ki, tiplər uyğun deyil: "Cannot implicitly convert type 'int' to 'string'".
Başqa bir nümunə — komandada yazı səhvi WriteLine():
Console.WriteLin("Salam!"); // Metodun adında səhv
Kompilyator deyəcək: "Belə metod yoxdur — sintaksisi yoxla!"
Səhvləri necə oxumaq olar?
Əksər kompilyatorlar kodda səhvin harada olduğunu göstərir və bəzən hətta düzəliş variantları da təklif edir. Səhvlərdən qorxma: hər biri — daxili "boss"unu keçmək və aydınlanmağa bir addımdır.
3. Şərhlər
Belə təsəvvür et: sən mürəkkəb bir proqram yazırsan. Hər şey işləyir, sən — dahisən! Amma bir ay sonra həmin kodu açırsan və... heç nə başa düşmürsən. Burda bir neçə sətr kod, orda qəribə dəyişən. Başında yalnız bir fikir: «Bunu yəqin ki, mən yox, kim isə başqa yazıb!». Bax, məhz burada şərhlər köməyə çatır.
Şərhlər — bu, sanki dərsliyin kənarında qeydlər və ya soyuducuda yazılar ("Pivə. İçmə. Səhərə!"). Kompilyator onları görmür, amma insanlar — əksinə. Şərhlər kodun mənasını izah etməyə, vacib detalları qeyd etməyə və hətta proqramın hissələrini "söndürməyə" imkan verir, onları silmədən.
Vacibdir: Heç bir kompilyator sənin şərhlərini oxumur, onlar tamamilə nəzərə alınmır!
Tək sətrlik şərhlər
C#-da iki növ şərh var — tək sətrlik və çox sətrlik. Tək sətrliklər iki slash // ilə başlayır və sətrin sonuna qədər davam edir. // sonra olan hər şey şərh sayılır və tam kompilyator tərəfindən nəzərə alınmır.
Nümunə:
Console.WriteLine("Salam, dünya!"); // Bu, ekrana salam verir
Burada // Bu, ekrana salam verir — şərhdir. Əgər kodda sətrin niyə lazım olduğu aydın deyilsə, belə yaz!
Başqa bir nümunə:
int x = 42; // Proqramçının yaş dəyəri
Tək sətrlik şərhləri ayrıca sətrlərdə də yazmaq olar:
// İstifadəçi adının dəyişəninin ilkinləşdirilməsi
string userName = "Vasya";
Demək olar ki, ssenaridəki replikalar kimi: şərh izah edir, nə üçün və niyə.
Çox sətrlik şərhlər
Bəs əgər səndə çox şey yığılıbsa? Həqiqi bir hekayə? Bunun üçün çox sətrlik şərhlər var, hansılar ki, /* ilə başlayır və */ ilə bitir. Bu simvollar arasında olan hər şey kompilyator tərəfindən nəzərə alınmır, hətta bir neçə sətr olsa belə.
Nümunə:
/*
Burada istifadəçi adını ekrana çıxarırıq.
Əgər ad yoxdursa, "Qonaq" yazacağıq.
*/
Console.WriteLine("Adınızı daxil edin:");
Və ya belə:
int age = 18; /* Yeni istifadəçi üçün yaşın ilkin dəyəri */
Diqqət: çox sətrlik şərhləri bir-birinin içinə yerləşdirmək olmaz. Kompilyatordan ağıllı olmağa çalışma — bu, işləməyəcək.
İllüstrasiya:
| Növ | Sintaksis | Nümunə |
|---|---|---|
| Tək sətrlik | // şərh |
int x = 1; // izah |
| Çox sətrlik | /* burda hər şey */ |
/* burda istədiyinizi izah edə bilərsiniz */ |
4. Həyatdan nümunələr
Kod sətrinin "söndürülməsi":
Bəzən istərsən ki, hansısa kod hissəsi müvəqqəti işləməsin. Şərhlər burada çox kömək edir:
// Console.WriteLine("Müvəqqəti lazım olmayan mətn");
Sətir qalıb, amma kompilyator onu "görmür".
TODO və FIXME qeydləri
Proqramçılar da insandır və bəzən özünə xatırlatmaq lazımdır ki, kod hələ tam deyil, ya da burada 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
Çoxlu redaktorlar və IDE-lər belə sözləri hətta xüsusi qeyd edir!
Proqramçılar zarafat edir
Və əlbəttə, bəzən kodda çox maraqlı şərhlər rast gəlinir:
// Mən bu kod üçün cavabdeh deyiləm. Məni bunu yazmağa məcbur etdilər.
// Əziz, men_gelecekden! Zəhmət olmasa, bu kod üçün məni bağışla.
// Əgər bir də belə bir şey görsəm, işə silah gətirməyə başlayacağam.
// Əgər bu şərt nə vaxtsa yerinə yetərsə, zəhmət olmasa, mənə tel. xxx-xxx-xxx ilə xəbər ver, mükafat verəcəyəm.
// Əziz proqramçı:
//
// Sən bu subproqramı "optimallaşdırmağı" bitirəndə
// və bunun nə qədər böyük səhv olduğunu başa düşəndə,
// zəhmət olmasa, aşağıdakı sayğacı artır
// növbəti oğlan üçün xəbərdarlıq kimi:
//
// burada_xərclənən_saatların_sayı = 42
// Mən bunu yazmağa başlayanda, yalnız Allah və mən başa düşürdük nə edirəm.
// İndi yalnız Allah qalıb
// bəzən mənə elə gəlir ki, kompilyator bütün şərhlərimi görməzdən gəlir
// Mən bütün kodumu, bütün işimi həyat yoldaşım Darlinə həsr edirəm, hansı ki,
// məni, üç uşağımızı və iti saxlamalı olacaq,
// bu prodakşna gedəndə.
Bəli, şərhlər çox gülməli ola bilər. Axı onları canlı insanlar yazır.
GO TO FULL VERSION