1. C#-da Funksiyalar/Metodlar
Artıq sən C#-da bir çox komandanı öyrənmisən, yəni kifayət qədər mürəkkəb proqramlar yaza bilirsən. 10, 20, 30 sətr kod — elə də böyük proqram deyil, düzdür?
Amma 100+ sətrlik proqram artıq böyükdür və kodunda baş çıxarmaq bir az çətindir. Bəs çoxlu kod olan proqramları yazmaq və oxumağı necə asanlaşdıra bilərik?
Bəli, burada bizə metodlar (funksiyalar) kömək edəcək.
Bəs metod nədir? Çox sadə desək, metod — unikal adı olan komanda qrupudur. Başqa sözlə, bir neçə komandadan ibarət qrupu birləşdiririk və ona unikal ad veririk. Vəssalam — metod hazırdır.
Tutaq ki, sənin pişik çəkmək üçün kodun var:
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
Bax, bu kod belə çıxış verir:
|\__/,| (`\
|o_o |__ _) )
(____/ (_/
Sadəcə bunu ayrıca metoda köçürə bilərsən və istədiyin qədər pişik çəkə bilərsən:
void WriteCat()
{
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
}
//üç pişik çəkirik
WriteCat();
WriteCat();
WriteCat();
Proqram işə düşəndə, hər dəfə WriteCat() komandası işlədikdə, o, WriteCat() metodunun içindəki bütün komandaları icra edəcək. Sadəcə bir neçə komandadan ibarət yeni komanda (metod) yaratdıq.
Funksiyaların mənası nədədir:
- Proqramı hissələrə bölürlər, hər hissə öz işi ilə məşğul olur.
- Təkrar istifadəni asanlaşdırır: bir dəfə yazdın, istədiyin qədər istifadə et.
- Səhv ehtimalını azaldır: funksiyadakı bug-u bir yerdə düzəldirsən.
- Mürəkkəb əməliyyatlara "ad" verirlər — oxunaqlılıq kəskin artır.
Terminologiya: funksiya, metod, prosedur
C#-da funksiya və metod adətən eyni şeyi bildirir, amma kiçik fərqlər var.
- Metod — klasa və ya obyektə aid olan funksiya (C#-da demək olar ki, hər şey metoddur).
- Prosedur — heç bir dəyər qaytarmayan funksiya (void-metodlar).
- Funksiya — geniş mənada, çağırıla bilən, adı olan proqram hissəsi.
Rəsmi olaraq C#-da bunların hamısına metod deyilir, amma haradasa "funksiya" görsən — qorxma!
2. Metodun elan sintaksisi: addım-addım izah
Gəlin ən sadə funksiyanı, klassik "Hello, World!"-ü götürək, sadəcə çıxışı ayrıca metoda verək:
using System;
class Program
{
static void Main()
{
PrintHello();
}
static void PrintHello() // Hello, World! mətnini çıxarırıq
{
Console.WriteLine("Hello, World!");
}
}
Sintaksisin izahı:
| Hissə | Nümunə | Təsviri |
|---|---|---|
| Modifikator | |
Metodun klasa aid olduğunu göstərir (ətraflı — sonra) |
| Qaytarılan dəyərin tipi | |
Metod heç nə qaytarmır |
| Metodun adı | |
Metodu çağırmaq üçün istifadə olunan ad |
| Parametrlər | |
Argumentlər (boşdur — argument yoxdur) |
| Metodun gövdəsi | |
Metod çağırılanda icra olunan kod |
Analogiya:
Metodu kofe avtomatı kimi təsəvvür et: pul (argument) atırsan, düyməni basırsan (metodu çağırırsan), avtomat kofe bişirir (metodun gövdəsi), nəticəni verir (qaytarılan dəyər) — və ya heç nə vermir, əgər void-metoddursa!
3. Metodları necə çağırmaq olar
Metodu çağırmaq — sadəcə adını və mötərizəni yazırsan vəssalam:
PrintHello(); // Parametrsiz metod
int sum = Add(2, 3); // Parametrləri və nəticəsi olan metod
Vacibdir: metodu yalnız elan edildikdən sonra (və ya kodda "yuxarıda" yerləşirsə, ya da eyni klasa daxildirsə) çağırmaq olar.
4. Parametrləri olan metodlar
Metoda parametrlər ötürmək olar. Bu, metodun davranışını çevik və hər vəziyyətə uyğun edir. Əslində parametrlər — metodun dəyişənləridir, çağıranda onlara dəyər verilir. Parametrləri metod yaradanda göstərmək lazımdır.
static void Greet(string name)
{
Console.WriteLine($"Salam, {name}!");
}
// İstifadə:
Greet("Alisa");
Greet("Bob");
Parametrlər — çağıranda metoda ötürdüyün dəyərlərdir.
| Hissə | Nümunə | Təsviri |
|---|---|---|
| Parametrin tipi | |
Qəbul olunan dəyərin tipi |
| Parametrin adı | |
Metodda istifadə üçün ad |
Çağırışlar:
Greet("Alisa"); — name dəyəri "Alisa" olur.
Birkaç parametr
Bir neçə parametri vergüllə ayırıb elan edə bilərsən:
static void PrintSum(int a, int b)
{
Console.WriteLine($"Cəm: {a + b}");
}
// İstifadə:
PrintSum(5, 7); // Cəm: 12
5. Dəyər-parametrləri və istinad-parametrləri
Funksiyanın parametrləri — adi dəyişənlərdir və onlara digər dəyişənlərə aid qaydalar tətbiq olunur.
Yəni yadında saxla: metoda massiv ötürəndə, istinad ötürürsən, yəni metod massivə dəyişiklik edə bilər. Sadə tiplər üçün (int, double) isə dəyər kopyalanır.
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Əsas massivi dəyişir!
}
// İstifadə:
int[] a = {1, 2, 3, 4, 5};
ZeroFirstGrade(a);
Console.WriteLine(a[0]); //çıxışda 0 olacaq
Əslində burada belə olur:
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Əsas massivi dəyişir!
}
// İstifadə:
int[] a = {1, 2, 3, 4, 5};
//ZeroFirstGrade(a);
int[] grades = a;
grades[0] = 0;
Console.WriteLine(a[0]); //çıxışda 0 olacaq
GO TO FULL VERSION