✍️ حالا میخوایم خواندن امن و پیشفرض دقیق را کنار هم قرار بدیم. ممکنه خود سفارش وجود نداشته باشه، یا سفارش وجود داشته باشه ولی ویژگی quantity نداشته باشه. در هر دو حالت میتونیم پیشفرض یک را انتخاب کنیم. ولی وقتی quantity صفر است، باید صفر را برگردونیم؛ صفر با نبودن داده فرق دارد.
مثال مشابه، سطح صدای تنظیمات است: صفر یعنی بیصدا، نه «تنظیم نشده». اگر برای پیشفرض از || استفاده کنیم، بیصدا بودن کاربر را ناخواسته نادیده میگیریم. ترکیب settings?.volume ?? 50 این دو تصمیم را جدا نگه میداره: اول مسیر امن، بعد انتخاب پیشفرض فقط برای مقدار غایب.
در تمرین، quantity اگر وجود داشته باشه فقط عدد نامنفی یا null است؛ پس نیازی به تبدیل رشته یا بررسی عدد منفی نداریم. روی قرارداد همین ورودی تمرکز کن. خطای رایج، اضافه کردن شرط if (!quantity) است که دوباره صفر را با نبودن داده یکی میکنه. با چند ورودی مرزی، از جمله null و شیء خالی، تفاوت را امتحان کن.
فعالیت شما
readQuantity(order) را کامل کن. order یا null است یا شیئی که quantity آن غایب، null یا عدد متناهی نامنفی است. quantity واقعی را نگه دار و فقط برای غایب/null مقدار 1 بده؛ {quantity:0} => 0، {} => 1 و null => 1.