typescript - გამოხატვის თარგმნა ternary ოპერატორიდან ლოგიკურ ოპერატორებში


მოვიძიე შემდეგი პირობითი განცხადება ტერნარული ოპერატორების გამოყენებით:

form?.label ? (isRequired ? (form.label) : customMessage) : isRequired ? ' ' : customMessage

როგორ ვწერ ამ ხაზს მხოლოდ ლოგიკური ოპერატორების გამოყენებით?

პასუხი #1

პირველ რიგში, გაითვალისწინეთ, რომ თქვენი კოდი მისი ტოლია:

isRequired ? (form.label ? form.label : ' ') : customMessage

რომელიც ოდნავ უფრო ეფექტურია, რადგან არ ტესტავს form.label, თუ isRequired მცდარია.

ახლა, form.label ? form.label : ' ' ნიშნავს, რომ ჩვენ გვინდა form.label, ან თუ მას არ აქვს მნიშვნელობა, სხვა რაღაც. ეს შეიძლება დაიწეროს საღი ლოგიკური ან ოპერატორით: form.label || ' '.

მაშ ასე ვ მიიღებთ:

isRequired ? (form.label || ' ') : customMessage

ზოგადად, c ? a : b უდრის (c && a) || b, თუ a გარანტირებულად ყოველთვის ჭეშმარიტია. ეს მუშაობს, რადგან ორი ლოგიკური ოპერატორი ლაზირებულია: თუ c მცდარია, მაშინ a არ ფასდება, რადგან c && a ვერ იქნება ჭეშმარიტი მიუხედავად b-ს; თუ c ჭეშმარიტია, მაშინ c && a ასევე ჭეშმარიტია, ამიტომ b არ ფასდება, რადგან მთელი პირობითი გამოსახულება უნდა იყოს ჭეშმარიტი მიუხედავად b-ს.

ჩვენი შემთხვევაში, (form.label || ' ') გარანტირებულად მართალია, რადგან ' ' მართალია. ასე რომ, საბოლოოდ თქვენი გამოსახვა ხდება:

(isRequired && (form.label || ' ')) || customMessage