القيم الافتراضية للمعاملات
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 26 من 73.
بينما تتيح لك المعلمات الاختيارية اختيار ما إذا كنت تريد تقديم قيمة أم لا، فإن المعلمات الافتراضية تذهب بهذا المفهوم إلى أبعد من ذلك من خلال توفير قيمة احتياطية تلقائيًا عند عدم تمرير أي وسيط. وهذا يجعل الدوال أكثر ملاءمة للاستخدام مع الحفاظ على سلامة الأنواع.
لإنشاء معلمة افتراضية، تقوم بتعيين قيمة مباشرة في توقيع الدالة باستخدام علامة التساوي. يستنتج TypeScript تلقائيًا نوع المعلمة من القيمة الافتراضية:
function greet(name: string, greeting = "Hello"): string {
return greeting + ", " + name;
}
function calculateArea(width: number, height = 10): number {
return width * height;
}في هذه الأمثلة، تكون قيمة greeting الافتراضية هي "Hello" (يتم استنتاجه كـ string) وتكون قيمة height الافتراضية هي 10 (يتم استنتاجه كـ number). عند استدعاء greet("Alice")، فإنه يستخدم التحية الافتراضية تلقائيًا، ولكن لا يزال بإمكانك تجاوزها باستخدام greet("Alice", "Good morning").
المعاملات الافتراضية هي اختيارية فعلياً - لا تحتاج إلى استخدام صيغة ? لأن القيمة الافتراضية تضمن أن المعامل يمتلك دائماً قيمة. هذا النهج أنظف من المعاملات الاختيارية عندما يكون لديك قيمة افتراضية منطقية، حيث أنه يلغي الحاجة للتحقق من undefined داخل الدالة الخاصة بك.
التحدي
سهلأنشئ دالة باسم calculateTax تأخذ معاملين: price من النوع number (مطلوب) و rate من النوع number بقيمة افتراضية هي 0.05. يجب أن تعيد الدالة مبلغ الضريبة كرقم مع تحديد نوع القيمة المرجعة بشكل صريح.
يجب أن تحسب الدالة الضريبة بضرب السعر في المعدل.
أنشئ دالة أخرى باسم formatGreeting تأخذ معاملين: name من النوع string (مطلوب) و timeOfDay من النوع string بقيمة افتراضية هي "Hello". يجب أن تعيد الدالة سلسلة نصية للترحيب منسقة مع تحديد نوع القيمة المرجعة بشكل صريح.
يجب أن تعيد الدالة الترحيب بالتنسيق التالي: "[timeOfDay], [name]!"
أنشئ دالة ثالثة باسم calculateShipping تأخذ ثلاثة معاملات: weight من النوع number (مطلوب)، و distance من النوع number (مطلوب)، و expedited من النوع boolean بقيمة افتراضية هي false. يجب أن تعيد الدالة تكلفة الشحن كرقم مع تحديد نوع القيمة المرجعة بشكل صريح.
يجب أن تحسب الدالة تكلفة الشحن باستخدام هذه الصيغة: (weight * 0.5) + (distance * 0.1). إذا كانت قيمة expedited هي true، اضرب النتيجة في 2.
اختبر دوالك عن طريق استدعائها بالقيم التالية وطباعة النتائج:
- استدعِ
calculateTaxمع100(باستخدام المعدل الافتراضي) - استدعِ
calculateTaxمع200و0.08 - استدعِ
formatGreetingمع"Alice"(باستخدام وقت اليوم الافتراضي) - استدعِ
formatGreetingمع"Bob"و"Good morning" - استدعِ
calculateShippingمع5و100(باستخدام قيمة الشحن السريع الافتراضية) - استدعِ
calculateShippingمع3، و50، وtrue
اطبع كل نتيجة في سطر منفصل بالترتيب المحدد أعلاه.
جرّب بنفسك
// TODO: اكتب الكود الخاص بك هنا
// أنشئ دالة calculateTax
// أنشئ دالة formatGreeting
// أنشئ دالة calculateShipping
// اختبر الدوال واطبع النتائجيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى TypeScript
1البداية مع TS
ما هي TypeScript؟لماذا نستخدم TypeScript؟أول كود TypeScript لكعملية الـ Compilation والأخطاءملخص: مقدمة في TS4التعامل مع الدوال
تحديد أنواع المعاملات وقيم الإرجاعتحديد أنواع Arrow Functionsنوع الإرجاع 'void'المعاملات الاختيارية باستخدام '?'القيم الافتراضية للمعاملاتتحديد أنواع Rest Parametersتعريف أنواع الدوالملخص: بناء دوال محددة الأنواع2الأنواع الأساسية
الأنواع الأساسية: str, num, booleanالنوع 'any': مخرج الهروبالنوع 'unknown'التعامل مع 'null' و 'undef'استنتاج الأنواع في التطبيق العمليتوضيحات الأنواع الصريحةمراجعة: تدريب على الأنواع الأساسية5الأنواع: الأسماء المستعارة، الاتحادات والتقاطعات
الأسماء المستعارة للأنواع الأساسية (Primitives)أنواع الاتحاد ('|')التعامل مع أنواع الاتحادالأنواع الحرفية (Literal Types)أنواع التقاطع ('&')دمج الأسماء المستعارة للأنواعملخص: تركيبات الأنواع المتقدمة3هياكل البيانات: المصفوفات و Tuple
المصفوفات محددة النوع (Typed Arrays)معدل 'readonly' للمصفوفاتما هو الـ Tuple؟تعريف والوصول إلى الـ Tuplesتفكيك الـ Tuples (Destructuring)الـ Tuples للقراءة فقط (Readonly)المصفوفات محددة النوع متعددة الأبعاداستخدام Spread Operator مع المصفوفاتملخص: المصفوفات و Tuples6تحديد أنواع الكائنات والواجهات
توصيف أنواع الكائنات المضمنة (Inline)الأسماء المستعارة للأنواع (Type Aliases) للكائناتمقدمة عن الواجهات (Interfaces)الواجهات (Interfaces) مقابل الأسماء المستعارة للأنواع (Type Aliases)الخصائص الاختيارية وخصائص القراءة فقط (Readonly)توسيع الواجهات والأنواعإضافة الدوال (Methods) إلى الواجهاتملخص: تحديد هياكل الكائناتتدرّب بنفسك: Playground لـ TypeScript