السبت، أكتوبر 30، 2010

الشفافية المرجعية في البرمجة الوظيفية Referential transparency in functional programming

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
من أهم مميزات البرمجة الوظيفية functional programming ما يسمى بالشفافية المرجعية Referential transparency.
لفهم الشفافية المرجعية فينبغي علينا أن نستوعب مفهوما آخر يسمي التأثير أو التأثر الجانبي side effect للبرنامج, و أي برنامج يتفاعل مع العالم الخارجي, كأن يستقبل بيانات من المستخدم, أو يكتب بيانات في ملف, أو يغير في بعض البيانات التي هي مشاع بين أجزاء البرنامج الأخرى (و التي بدورها تمثل حالة state البرنامج الكلي) ...إلخ, فيعتبر له تأثير أو تأثر جانبي.
يمكن اعتبار البرنامج أو العبارة البرمجية expression ذو شفافية مرجعية إذا أمكن استبداله يقيمته من غير أن تتغير النتيجة النهائية, أو بعبارة أخرى إذا أعطَى نفس المخرجات عندما تُعطى له نفس المدخلات. مثال: العملية الرياضية (5 * 5) يمكن استبدالها بـ (25) من غير "تأثير جانبي" على البرنامج, فهي ذات شفافية مرجعية, أما إذا كان لدينا برنامج جزئي function - و ليكن اسمه GetInput(), يأخذ بيانات من المستخدم ليعرض النتيجة بناء على ما أدخله المستخدم, فهذا البرنامج ليس له شفافية مرجعية لأنه عند إعطائه نفس المدخلات (في حالتنا هذه لا شيء) نحصل على نتائج مختلفة تتبع ما أدخله المستخدم؛ فالبرنامج في هذه الحالة له "تأثر جانبي".
لم أفهم بالضبط سبب تسمية هذا المفهوم بالشفافية المرجعية, لكن أخمن أن السبب هو أن البرنامج متى استُدعي من أي مكان سيعطي نفس النتيجة طالما أخذ نفس المدخلات, فالمرجع هنا (البرنامج) فيه شفافية, و لا يتأثر يمن استدعاه... ليتنا نطبق هذا المفهوم في حياتنا السياسية :)
و السلام...

ليست هناك تعليقات: