Programming TypeScript


Download 1.81 Mb.
bet133/206
Sana01.11.2023
Hajmi1.81 Mb.
#1737990
1   ...   129   130   131   132   133   134   135   136   ...   206
Bog'liq
Boris Cherny Programming TypeScript Making Your JavaScript Applications (1)

ruxsat bering sana = yangi Sana ( tug'ilgan kun ) agar ( ! isValid ( sana )) { qaytish []
}
qaytish [ sana ] }
ruxsat bering sana = tahlil qilish ( so'rash ())
sana
. xarita ( _ => _ . toISOString ())
. har biri uchun ( _ => konsol . ma'lumot ( 'Sana' , _ ))
S iz sezganingizdek, Variantning salbiy tomoni shundaki, bizning dastlabki null -returning yondashuvimizga o'xshab, u iste'molchiga nima uchun xatolik yuz berganini aytmaydi; bu shunchaki biror narsa noto'g'ri ketganligini ko'rsatadi.
Variant haqiqatan ham bir qatorda bir nechta operatsiyalarni bajarishingiz kerak bo'lganda porlaydi, ularning har biri muvaffaqiyatsiz bo'lishi mumkin .
Misol uchun, ilgari biz taklif har doim muvaffaqiyatli bo'ladi va tahlil qilish muvaffaqiyatsiz bo'lishi mumkin deb taxmin qilgan edik. Ammo agar tez yordam muvaffaqiyatsiz bo'lsa-chi? Agar foydalanuvchi tug'ilgan kun so'rovini bekor qilgan bo'lsa, bu sodir bo'lishi mumkin - bu xato va biz hisoblashni davom ettirmasligimiz kerak. Biz buni boshqa variant bilan modellashimiz mumkin !
funktsiyasi ask() {
ruxsat bering natija = so'rov ( 'Tug'ilgan kuningiz qachon?' )
agar ( natija === null ) {
qaytish []
}
qaytish [ natija ] }
// ... so'rang ()
. xarita ( tahlil )
. xarita ( sana => sana . toISOString ()) // Xato TS2339: "ToISOString" xususiyati "Sana []" turida mavjud emas.
. forEach ( sana => konsol . ma'lumot ( 'Sana' , sana ))
Ha, bu ishlamadi. Biz Date s ( Date[] ) massivini Date s ( Date[][] ) massivlari bilan taqqoslaganimiz sababli, davom etishdan oldin uni yana Date s massiviga tekislashimiz kerak :
tekislash ( so'rash () . xarita ( ajralish ) )
. xaritasi ( sana => sana . toISOString ())
. forEach ( sana => konsol . ma'lumot ( 'Sana' , sana ))
// Massivlar massivini massiv funksiyasiga tekislaydi tekislash < T > ( massiv : T [][]) : T [] { qaytish Massiv . prototipi . konkat . amal qilish ([], massiv )}
Bularning barchasi biroz noqulay bo'lib bormoqda. Turlar sizga ko'p ma'lumot bermagani uchun (hamma narsa oddiy massiv), bu kodda nima sodir bo'layotganini bir qarashda tushunish qiyin. Buni tuzatish uchun, keling, nima qilayotganimizni - konteynerga qiymat qo'yish, ushbu qiymat bo'yicha ishlash usulini va konteynerdan natijani olish yo'lini ochib berishni - hujjatimizni hujjatlashtirishga yordam beradigan maxsus ma'lumotlar turiga o'rab olaylik. yondashuv. Uni amalga oshirishni tugatganimizdan so'ng siz quyidagi ma'lumotlar turidan foydalanishingiz mumkin bo'ladi:
so'rang ()
. flatMap ( tahlil qilish )
. flatMap ( sana => yangi Ba'zilar ( sana . toISOString ()))
. flatMap ( sana => yangi Ba'zilari ( 'Sana ' + sana ))
. getOrElse ( 'Ba'zi sabablarga ko'ra sanani tahlil qilishda xatolik' ) Variant turini quyidagicha aniqlaymiz :

  • Variant ikki sinf tomonidan amalga oshiriladigan interfeysdir: Some va None ( 7-1-rasmga qarang ). Ular ikki xil Variant s. Some - bu T tipidagi qiymatni o'z ichiga olgan Variant va None - qiymatsiz variant bo'lib , u muvaffaqiyatsizlikni bildiradi.

  • Variant ham tur, ham funksiyadir. Uning turi oddiygina Ba'zi va Yo'q ning supertipi bo'lib xizmat qiladigan interfeysdir . Uning vazifasi Option turidagi yangi qiymat yaratish usulidir .


7-1-rasm. Variant ikkita holatga ega: Ba'zi va Yo'q Keling, turlarni chizishdan boshlaylik:

Download 1.81 Mb.

Do'stlaringiz bilan baham:
1   ...   129   130   131   132   133   134   135   136   ...   206




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling