#12 – Ko’plik va O’zgarmas. Umumiy dasturlash teoriyasi. Dasturlashni o’rganish kursi

Ushbu darsning video variantini keyingi yo’llanma orqali ko’rishingiz mumkin: https://www.youtube.com/watch?v=3yBgzHLevME


O’ZGARMAS
(eng: Constant, рус: Константа)

Esingizdami o’zgaruvchanlar haqida gapirgandik? Dasturlashda “o’zgarmas”lar ham bor. O’zgaruvchandan bitta farqi uning qiymati faqat bir marta beriladi va boshqa uni o’zgartirib bo’lmaydi.


class Foo
{
    const int BAR = 10;
}

Sinf ichida o’zgarmas yaratish, o’zgaruvchan yaratishga juda o’xshaydi, faqat o’zgaruvchan oldidan const kalit so’zi qo’yiladi. Yana bir jihat, o’zgarmas nomlari odatda katta harflar bilan yoziladi.


Foo foo = new Foo;
foo.BAR = 20; // xato

Agar o’zgarmasning qiymatini o’zgartirishga harakat qilsak, kompilyator bizga “o’zgarmasning qiymatini o’zgartirish man etiladi” degan ma’nodagi hatolikni ko’rsatadi.


class Foo
{
    final int BAR = 10;
}

PHP va C# da const kalit so’zi orqali yaratiladigan o’zgarmaslar, Java tilida final kalit so’zi orqali yaratiladi.


SINF ELEMENTLARI HUQUQI

Har bir sinf elementi, yani o’zgaruvchanlari, o’zgarmaslari yoki usullarining huquqlarini ko’rsatishimiz mumkin. Buning uchun ular oldidan public (o’zb: ommaviy), ya’ni istalgan joydan foydalanish mumkin deb belgilashimiz mumkin. Yoki, protected (o’zb: himoyalangan), ya’ni faqatgina ushbu element yaratilgan sinf ichida foydalanish imkoni, yoki ushbu sinfni kengaytirayotgan sinflarda foydalanishi mumkin ekanligini belgilaymiz. Va uchinchi variant private (o’zb: shaxsiy), ya’ni faqatgina element yaratilayotgan sinfda foydalanish mumkinligini belgilab qo’yishimiz mumkin.


class Foo
{
    private int bar = 10;
    protected string name = "hello";

    public void baz()
    {
        print bar;
    }
}

class Foo2 extends Foo
{
    public void baz2()
    {
        print this.name;
    }

    public void baz3()
    {
        print this.bar;
    }
}

Foo2 bar = new Foo2;
print bar.bar; // xato

Xato chiqadi: ushbu elementga faqat sinf ichidan murojat qilish mumkin


bar.baz(); // 10

ekranga 10 raqami chiqadi. Baz usuli bar xususiyatiga murojat qilmoqda. Bunga uning huquqi bor. Chunki ikkovi ham bir sinf ichida joylashgan.


print bar.name; // xato

Xato. Chunki protected deb e’lon qilingan elementlarga faqat sinf ichidan, yoki uni kengaytirayotgan sinf ichidan murojat qilishimiz mumkin.


bar.baz2(); // hello

baz2() usuli name xususiyatiga murohat qila oladi. bar2 usuli va name xususiyatlari har hil sinflarda yaratilganiga qaramay, ular bir biriga begona emas. Foo2 sinfi Foo sinfini kengaytirmoqda. Demak baz2 usulining name xususiyatiga murojat qilish huquqi bor.


bar.baz3(); // xato

Yana xato bo’ladi. Sababi Foo2 va Foo sinflari bir biriga begona bo’lmasada, Foo sinfining bar o’zgaruvchani private shaklida e’lon qilingan. Unga faqatgina Foo sinfi ichida murojat qilinishi mumkin. Shuning uchun ham bar.baz() usulini chaqirganimizda, hamma narsa ishlagan edi.


KO’PLIK
(eng: Array, рус: Массив)

Bir o’zgaruvchan o’zida har hil ma’lumot saqlashi mumkin ekanligini ko’ruvdik. Misol uchun obyektlarning o’z o’zgaruvchanlari bor edi. Lekin soddaroq variantlari ham bor, masalan ko’plik. Ko’plik bu bir turdagi ko’p ma’lumotlarni bir o’zgaruvchanda saqlash.


int foo[3];

Bu yerda int turida mansub foo ko’pligini yaratdik. Kvadrat qavslar ichidagi raqam, nechta ma’lumot saqlamoqchiligimizni ko’rsatadi. Biz 3 raqamini yozganmiz, demak 3 hil ma’lumot saqlamoqchimiz.


foo[0] = 10;
foo[1] = 22;
foo[2] = 78;

Mana ma’lumotlarni joyladik. Ushbu 0 dan 2 gacha bo’lgan raqamlar – indeks deyiladi. Bir hil payt kalit degan atama ham ishlatiladi. Misol uchun “ko’plik kaliti”, yoki “ko’plik indeksi” deyilganda – ushbu raqamlar nazarda tutilgan bo’ladi. Esingizdan chiqmasin: dasturlashda sanoq 0 dan boshlanadi.


print foo[2]; // 78;

Keling ikkichi indeksimizni ekranga chiqaramiz. Ekranga 78 raqami chiqadi.


PARAMETR VA ARGUMENT

void foo(string param1, string param2)
{
    // kod
}

Funksiya yaratayotganimizda uning parametrlarini ko’rsatishimiz mumkin degandik.


foo("arg1", "arg2");

Uni chaqirayotganda esa qiymat yuborishimiz mumkin deganmiz. Ko’pchilik boshlovchi dasturchilarni argument atamasi chalg’itadi. Shuning uchun bu atamani odatda kursning ohirrog’ida ishlataman. Gap shundaki funksiyani chaqirayotganda yuboradigan qiymatimiz – argument deyiladi.

Dasturlashda keyingi so’zlarni o’qib qolishingiz mumkin: “foo funksiyasining param1 nomli parametriga argument sifatida arg1 qiymatini yuboramiz”.

Aslida nafaqat boshlovchi dasturchilar, balki bir necha yildan beri dasturchi bo’lib ishlab kelayotganlarda ham, ushbu ikki atamani tushinmaslik ko’rinib qoladi.


void foo(string arg1, string arg2)
{
    // kod
}

Ko’pincha yuqoridagi kabi kodlarni ko’rish mumkin. Ya’ni ular parametrni adashib argument deb atashlari mumkin. Yoki bo’lmasam, argumentni adashib parametr deyishlari mumkin. Hattoki biror bir tilga ofitsial dokumentatsiyalarda ham shunaqa chalkashishlar uchrab turadi. Shuning uchun ham tushungan bo’lsangiz – ofarin, chalkashayotgan bo’lsangiz bu ikki atamaga, hechqisi yo’q – bu odatiy hol.


HULOSA

class Foo
{
    const int BAR = 10;
}
Foo obj = Foo;
obj.BAR = 13; // xato: o’zgarmas qiymatini o’zgartirib bo’lmaydi

Bir marta qiymat berib, uni boshqa o’zgartira olmaydigan elementlar – o’zgarmaslar deyiladi. Ruschasiga “Константа”, ingiliz tilida “Constant” nomli atamalar ishlatiladi. Ular o’zgaruvchanlardan ajralib turishi uchun – odatda katta harflar bilan yoziladi.


void foo(string param1, string param2)
{
    // kod
}

foo("arg1", "arg2");

Funksiya bosh qismida ko’rstilgan o’zgaruvchanlar – parametrlar deyilsa, ushbu funksiyani chaqirayotgan paytimizda, parametrlarga yuboradigan qiymatlar – argumentlar deyiladi. Lekin ko’pchilik ushbu ikki atamani chalkashtirib ishlatishadi.


int foo[3];

foo[0] = 10;
foo[1] = 22;
foo[2] = 78;

print foo[1]; // 22;
foo[1] = 13;
print foo[1]; // 13;

Bir o’zgaruvchanda bir nechta qiymatlar saqlashimiz mumkin. Bu turdagi o’zgaruchanlar – ko’plik deyiladi. Ingiliz tilida “Array”, ruschasiga “Массив”. Ko’plik qiymatlari indekslar orqali ajralib turadi. Ushbu indekslar bazida kalitlar ham deyiladi.

21+

Fikr bildirish