تسميات الوسائط
جزء من قسم الأساسيات في رحلة Swift على Coddy — الدرس 54 من 86.
تمنحك Swift التحكم في كيفية قراءة استدعاءات الدوال باستخدام تسميات الوسائط (argument labels). تسمية الوسيط هي ما تستخدمه عند استدعاء الدالة، بينما اسم المعامل (parameter name) هو ما تستخدمه داخل جسم الدالة.
يمكنك تحديد كليهما عن طريق كتابة تسمية الوسيط قبل اسم المعامل:
func greet(to name: String) {
print("Hello, \(name)!")
}
greet(to: "Alice") // المخرجات: Hello, Alice!هنا، to هي تسمية الوسيط (تُستخدم عند الاستدعاء)، و name هو اسم المعامل (يُستخدم داخل الدالة). هذا يجعل الاستدعاء يُقرأ بشكل طبيعي أكثر: "greet to Alice."
أحيانًا قد ترغب في حذف التسمية تمامًا للحصول على استدعاءات أكثر وضوحًا. استخدم الشرطة السفلية (_) كتسمية للوسيط:
func square(_ number: Int) -> Int {
return number * number
}
print(square(5)) // الناتج: 25بدون الشرطة السفلية (underscore)، سيتعين عليك كتابة square(number: 5). تزيل الشرطة السفلية هذا المتطلب، مما يجعل استدعاء الدالة أبسط عندما يوضح اسم الدالة الغرض منها بالفعل.
التحدي
سهلقم بإنشاء دالتين توضحان تقنيات مختلفة لتسمية الوسائط (argument labels):
الدالة 1: send
- استخدم تسمية الوسيط
messageمع اسم المعاملtext(من نوعString) - استخدم تسمية الوسيط
toمع اسم المعاملrecipient(من نوعString) - أعد سلسلة نصية بالتنسيق التالي:
"Sending '[text]' to [recipient]"
الدالة 2: double
- استخدم الشرطة السفلية
_لإغفال تسمية الوسيط - اسم المعامل
number(من نوعInt) - أعد الرقم مضروباً في 2
بعد تعريف كلتا الدالتين، اقرأ سلسلتين نصيتين ورقمًا صحيحًا واحدًا من المدخلات، ثم استدعِ كلتا الدالتين واطبع النتائج في أسطر منفصلة.
ستتلقى المدخلات التالية:
- السطر الأول: نص الرسالة (مثلاً،
"Hello") - السطر الثاني: اسم المستلم (مثلاً،
"Alice") - السطر الثالث: رقم لمضاعفته (مثلاً،
"7")
على سبيل المثال، إذا كانت المدخلات هي "Hello" و "Alice" و "7"، يجب أن يكون المخرج:
Sending 'Hello' to Alice
14ورقة مرجعية
تسمح لك لغة Swift بالتحكم في كيفية قراءة استدعاءات الدوال باستخدام تسميات الوسائط (argument labels). تُستخدم تسمية الوسيط عند استدعاء الدالة، بينما يُستخدم اسم المعامل داخل جسم الدالة.
حدد كليهما عن طريق كتابة تسمية الوسيط قبل اسم المعامل:
func greet(to name: String) {
print("Hello, \(name)!")
}
greet(to: "Alice") // المخرج: Hello, Alice!هنا، to هي تسمية الوسيط و name هو اسم المعامل.
لحذف تسمية الوسيط من أجل استدعاءات أكثر وضوحاً، استخدم الشرطة السفلية (_):
func square(_ number: Int) -> Int {
return number * number
}
print(square(5)) // المخرج: 25بدون الشرطة السفلية، ستحتاج إلى كتابة square(number: 5).
جرّب بنفسك
// قراءة المدخلات
let messageText = readLine()!
let recipientName = readLine()!
let numberToDouble = Int(readLine()!)!
// TODO: اكتب الكود الخاص بك أدناه
// قم بتعريف الدالة 'send' مع تسميات الوسائط 'message' و 'to'
// قم بتعريف الدالة 'double' مع حذف تسمية الوسيط باستخدام '_'
// استدعِ كلتا الدالتين واطبع النتائجيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمةالإسناد المركبمراجعة - عمليات رياضية بسيطةمعاملات المقارنة7أساسيات الإدخال والإخراج
دالة الطباعةتضمين النصوصإدخال ReadLineتحويل الأنواعمراجعة - حتى 120مراجعة - True أو False10الدوال
تعريف دالةالمعاملات والوسائطقيم الإرجاعتسميات الوسائطمراجعة - دالة Sigmaمراجعة - دالة Validationالقيم الافتراضية2المتغيرات
Let مقابل Varتوصيف الأنواع (Type Annotations)الأرقامStringBooleanقواعد التسميةمراجعة - تهيئة المتغيرات5المعاملات - الجزء الثاني
المعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيطالمعاملات المنطقية - الجزء الثالثالمعامل الثلاثي (Ternary Operator)8حاسبة تقسيم الفاتورة
رسالة الترحيبالحصول على المدخلات3القيم الاختيارية (Optionals)
ما هي القيم الاختياريةفك القيم باستخدام If Letاستخدام Guard Letمعامل دمج Nilمراجعة - فك القيم بأمان9حلقات التكرار
حلقة For-Inحلقة Whileحلقة Repeat-WhileBreakContinueمراجعة - المضروب (Factorial)النطاقات في حلقات التكرارالحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)