Dart tiliga kirish O'zgaruvchilar va konstantalar Primitiv ma'lumotlar turlari
Download 374.15 Kb.
|
3-mustaqil ish
GenericsJeneriklar yoki generiklar sizga dasturga moslashuvchanlikni qo'shish va muayyan turlarga qattiq bog'lanishdan xalos bo'lish imkonini beradi. Ba'zan funksionallikni har qanday turdagi ma'lumotlardan foydalanishi mumkin bo'lgan tarzda aniqlash kerak bo'ladi. Misol uchun, biz identifikatorni (foydalanuvchi identifikatori) o'z ichiga olgan foydalanuvchi sinfini aniqlaymiz:
Bunday holda, id raqamli qiymat sifatida o'rnatiladi, ya'ni u 2, 5, 7 va boshqalarga teng bo'lishi mumkin. Ammo keyinchalik id turi sifatida strings yoki boshqa sinflardan foydalanishni xohlashimiz mumkin. Moslashuvchanlikni qo'shish uchun biz turga qattiq bog'lanib qolmaslik uchun dinamik operatordan foydalanishimiz mumkin:
Biroq, id maydoni qaysi ob'ektni ifodalashini bilmasligimiz mumkin, ayniqsa Person klassi uchinchi shaxslar tomonidan yozilgan tashqi kutubxonada aniqlangan bo'lsa. Va bu holda raqamni olishga harakat qilganda, biz istisnoga duch kelamiz:
Har xil turlar bilan ishlash uchun ikki turdagi Shaxsni taqdim etishingiz mumkin:
Ammo bu holda biz boshqa muammoga duch kelamiz - kodni takrorlash. Jeneriklar yoki generiklar ko'proq turdagi xavfsizlikni ta'minlaydi va kodning takrorlanishini oldini olishga yordam beradi. Keling, generiklar yordamida Person sinfining kodini qayta yozamiz:
Biz Dasturni bajarishda T o'rniga ma'lum bir tur almashtiriladi. Bundan tashqari, tur o'tkazilgan qiymatlar asosida dinamik ravishda hisoblab chiqiladi. RuntimeType maydonidan foydalanib, biz o'zgaruvchining maxsus ma'lumotlar turini olishimiz mumkin. Ob'ektlarda qanday turlar ishlatilishini ham aniq belgilashimiz mumkin:
Sinf nomidan keyin burchakli qavs ichida sinf yoziladigan tur ko'rsatiladi (Shaxs Xuddi shunday, biz umumiy usullar va funktsiyalarni belgilashimiz mumkin. Masalan, kichik ro'yxatga olish funktsiyasini aniqlaymiz va ishlatamiz:
Umumiy usulni yaratish uchun umumiy parametr nomi uning nomidan keyin burchakli qavs ichida ko'rsatiladi. Shundan so'ng, buning ichida umumiy T turi usul ichida - parametrlar yoki o'zgaruvchilar turi sifatida ishlatilishi mumkin. Jeneriklarning cheklovlari Ba'zan siz generiklardan foydalanishingiz kerak bo'ladi, lekin siz T parametri o'rniga funktsiya yoki sinfdagi har qanday turni qabul qilishni xohlamaysiz. Masalan, bizda bank hisobini ifodalovchi quyidagi Hisob sinfi mavjud:
Pul mablag'larini bir hisobdan ikkinchisiga o'tkazish uchun biz barcha operatsiyalarni bajarish uchun Hisob sinfi ob'ektlaridan foydalanadigan Transaction sinfini aniqlashimiz mumkin. Ammo Hisob sinfi ko'plab avlodlarga ega bo'lishi mumkin: DepositAccount (depozit hisobi), DemandAccount (talab hisobi) va boshqalar. Tranzaksiya sinfida qaysi hisob turlari ishlatilishini bila olmaymiz. Tranzaktsiyalar faqat talab hisoblari o'rtasida amalga oshirilishi mumkin. Va bu holda, Hisob turi universal parametr sifatida o'rnatilishi mumkin:
Endi Tranzaksiya sinfini qo'llaymiz:
Konsol chiqishi: Счет 1857: 2600$
Download 374.15 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling