|
123. Struct vs Class
|
Sana | 15.05.2024 | Hajmi | 1,24 Mb. | | #236047 |
Bog'liq Class vs Struct
123. Struct vs Class
Struct va Classni method va propertieslar guruhi desak ham buladi.
Structda propertieslani shunchaki qiymat bermasdan e’lon qilsak buladi. Lekin classda buni iloji yo bzga xatolik beradi. Xatolikni yo’qotish uchun initialize qilishimiz kk böladi.
Mana structda xatolik bermaydi shunchaki health va attackStrange propertieslari e’lon qilib qoyilgan. Endi shuni classga almashtrsak bizga xatolik beradi.
Xatolikni yoqotish uchun buni initialize qilishimiz kerak buladi.
Endi shuni main qismida initialize qilganimizda bizadan so’raydi qiymatlarini :
Keyin biz bunga o’zimiz istagan qiymatlarni berib chiqamiz.
Health: 100, attackStrange: 15 deb qiymat beraylik masalan.
Classlar structlarga nisbatan murakkabroq va xatoga juda moyildr.
Havfli deyilishiga misol tepada berilgan. Bunda 2 lasini ham healthini 70 chiqarib beradi :
Chunki komplyator hamma kodlani bir boshidan o’qib ketaveradi. 5 nchi qatorga kelganda skeletondan 10ni ayiradi 90 qoladi, 7nchi qatorga kelganda esa yana 10 ni ayiradi 80 qoladi, 8nchi qatorga kelganda skeleton2 dan 10 ni ayirishi kk, buning uchun komplyator qaytib 3nchi qatorga ko’tariladi, biz 3nchi qatorda skeleton 2 ni skeleton 1 ga teng deb olganmiz. Shundan foydalanib skeleton dan 10 ni ayirsam skeleton2 ni healthiga teng buladi deb o’ylaydi va qaraydi skeletonni healthi hozirda nechchi? Hozir skeleton 2 ni healthi 80 ga teng. Kn 80 dan 10 ni ayiradi 70 qoladi. Bu 70 skeleton ning healthini qiymatidir. Kn skeleton2 ga skeletonni qiymati tengligidan foydalanib printga 70 chiqaradi. Skeletonning ham hozirgi qiymati 70 ga tengligidan foydalanib 2 lasigaham 70 chiqarib beradi bizga.
------------------------------------------------------------------------------------------------
MyEnemy classini structga o’zgartirsak bizga boshqa bir xatolik beradi :
Yani struct immutable bo’lganligi uchun methoddagi propertieslani shunchaki o’zgartirolmaymiz buning uchun methodni oldin mutable qilishimiz kk. Bu misolda ham funksiya oldidan mutating kalit so’zini qo’yishimiz kk.
Endi esa bizga yangi xatoliklar kelib chiqadi. Masalan takeDamage methodini mutable qilganimiz bilan teppa qismda biz skeletonlarni let kalit so’zi bilan elon qilgan biza ushalani varga o’zgartirib chiqishimiz kk. Chunki letni o’zgartirishni iloji yo.
letlani varlaga o’zgartirganimizdan kngi holat barcha xatoliklar yoqolgan :
Natija :
Structures
|
Classes
|
Immutable - o’zgarmas
|
Qiymat qaytarishi malumot orqali. Yani : rasmni qiymatini qaytarmoqchi bo’lsak structda rasmni nusxasini qaytaradi, nusxasini o’zgartrsak ham asl nusxaga tasiri yoq bo’ladi. Classda esa rasmni joylashgan joyi beriladi, silka orqali uni o’zgartrganimizda asl nusxa ham o’zgaradi.
|
Structda qiymat nusxa ko’chirib qaytariladi
|
Classda meros olinadi va beriladi.
|
|
| |