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
