Sual-cavab-1

Bir neçə gün bundan qabaq bir sual paylaşmışdım. Bu yazmıda həmin sualın cavabını və izzahını verəcəm. Sualı aşağıdakı kimi idi. 

class Program
{
    static void Main(string[] args)
    {
        string name = "Eldaniz";
        ChangeString(name);
        Console.WriteLine(name);
          
        Console.ReadKey();
    }

    static void ChangeString(string param)
    {
        param = "Ismayilov";
    }
}

Sizcə consola Eldaniz yoxsa Ismayilov çıxacaq? və niyə?

Suala cavab verənlərin bir çoxu düzgün cavab vermişdi amma bu düzgünlük həmin kod blokunun həqiqətən necə işləməsini bilərəkdən olmadığı aydın olurdu. Düzgün cavab verənlərin yarısı düşünürdü string value type-dır. Qalan yarısı isə ya kodu yazıb test edib cavabı yazmışdılar ya atmışdılar ya da ümumiyyətlə referance type-ın nə olduğunu bilmirdilər. 

Düzgün cavab Eldaniz-dir. Əsas məsələ bunun niyə belə nəticə verdiyini izzah etməkdir. Çünki  string referance type-dır. Əslində sualı bir az çətinləşdirən də budur.

Suala cavab vermək üçün value referance type-ların işləmə prinsiplərinə baxmaq lazımdır. Bəzən proqramçılara sual verəndə ki, value və referance type işləmə prinsiplərin deyə bilərsiz? onların bir cavabı olur value type-lar stack-də, referance type-lar isə heap-də saxlanılır. Bu düzgün cavabdır amma dərin cavab deyil. Dərin cavab belədir. Value type-lar dəyərin kopiyalanması prinsipini, referance type-lar isə referance-in və ya yolun kopiyalanması prinsipin yerinə yetirirlər. Yəni bizim misalımızla baxsaq ChangeString metodumuz çağırılan zaman string value type olsa idi param adlı dəyişənə name adlı dəyişənin dəyəri kopiyalanacaqdı. Sonradan həmin param dəyişəninin dəyərini dəyişəndə name adlı dəyişənə təsir etməyəcəkdi. Amma string referance type-dır. Yəni ChangeString metodu çağırılan zaman name adlı dəyişənin referance(yolu) param adlı dəyişənə kopiyalanır. Aşağıdakı şəkildəki kimi bir görünüş yaranır.

Bundan sonra ChangeString metodunun içərisində İsmayilov sözünü param adlı dəyişənə bərabərləşdirən zaman siz param adlı dəyişənə yeni instance vermiş olursuz. Başqa sözlə desək param adlı dəyişənin referance-sını dəyişmiş olursuz. İsmayılov sözü set olunduqdan sonra görnüş aşağıdakı kimi təsvir etmək olar.

ChangeString metodu öz işini bitirdikdən sonra main metodunda növbəti sətir işləməyə başlayacaq yəni name adlı dəyişənin dəyərini ekrana çıxaran kod sətiri. Sonuncu şəkildən də göründüyü kimi name adlı dəyişənin referance-i Eldaniz sözünə uyğundur. Buna görədə nəticə Eldaniz olur.

2 thoughts on “Sual Cavab 1”

  1. Programlaşdırmaya təzə başlıyan şəxsin başa düşmədiyi yöndən başa salırsınız. Uzun sözün qısası heçdə anlaşılası bir cavab olmadı qısacası, desəydinizki linkvari tiplər öz məlumatlarını istənilən dəyişənə ötürə bildiklərindən dəyər tiplərindən fərqləri bunlardır.

    1. Anar bəy, bu məqaləmiz yeni başlayanlar üçün deyil. Bu daha çox proqramlaşdırma sahəsində təcrübəsi olanlar üçündür. Yeni başlayanlar üçün olan məqalələrimizi xüsusi kategoriya(Yeni başlayanlar üçün) ilə ayırmışıq.

Bir cavab yazın

Sizin e-poçt ünvanınız dərc edilməyəcəkdir. Gərəkli sahələr * ilə işarələnmişdir