المسارات
/
Common Lisp
Common Lisp
/
المنهج
/
المعاملات الاختيارية
ال

المعاملات الاختيارية في Common Lisp

تمرينان

نبذة عن المعاملات الاختيارية

يُحدَّد المعامل الاختياري بالكلمة المفتاحية &optional ضمن قائمة لامدا. والمعاملات الاختيارية ليست إلزامية، ويمكن أن يكون لها قيمة افتراضية، ويمكنها أيضًا تحديد «معامل supplied-p» يكون "صحيح" أو "خطأ" بحسب ما إذا قُدِّم وسيط لهذا المعامل.

(defun optional-parameter (&optional (arg -1)) arg)
(optional-parameter)    ; => -1
(optional-parameter 13) ; => 13

يجب وضع المعاملات الاختيارية بعد المعاملات الإلزامية، وقبل المعاملات المسمّاة أو معاملات الباقي. تُربَط الوسائط أولًا بالمعاملات الإلزامية، ثم بالمعاملات الاختيارية، وأخيرًا بمعاملات الباقي والمعاملات المسمّاة.

(defun req-and-opt (req &optional (opt -1)) (list req opt)
(req-and-opt 1)    ; => (1 -1)
(req-and-opt 1 13) ; => (1 13)

ورغم أنه يمكن الجمع بين أنواع متعددة من المعاملات وأنواع أخرى منها (المعاملات الاختيارية والمعاملات المفتاحية)، فقد يسبّب ذلك مشكلات، وينبغي القيام به بحذر. راجع قسم "خلط أنواع المعاملات المختلفة" في كتاب Practical Common Lisp.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم المعاملات الاختيارية

التدريب مقفل

افتح 1 تمرين إضافي لممارسة المعاملات الاختيارية