سؤال

وهذا قد يكون الإرداف الخلفي، ولكن كيف يمكن لأحد أن تحديث كيان البيانات في أسلوب البرمجة الوظيفية؟ من كل ما قرأت، تستخدم البرمجة أسلوب عملي التحولات لإرجاع الإخراج على الكيانات غير قابل للتغيير. ان الشيء الوحيد الذي أستطيع أن أفكر في أن يكون لتحل تماما محل الكيان الأصلي، ولكن هذا يبدو تقريبا نفس نهج التحديث الكلاسيكية.

هل كانت مفيدة؟

المحلول

وأنت تتحدث عن الكيانات على قاعدة بيانات القرص أو هياكل البيانات في الذاكرة.

لهذا الأخير، واللغات وظيفية تستخدم المستمرة هياكل البيانات، التي تنفذ مثل هذا الإصدار الجديد والنسخة القديمة على حد سواء المتاحة بعد التحديث، لكنها تشترك الأجزاء المشتركة (بحيث أنها فعالة). حتى تتمكن يبدو أن العودة إلى بنية بيانات جديدة تماما، ولكن في الواقع، أنه يشترك أكثر من تنفيذه مع واحد كان تعديل.

وهناك بعض التطبيقات الجيدة حقا أن ننظر في مصدر كلوجر (مكتوب بلغة جافا) - أخذت اثنين من بينهما على بلدي بلوق

HTTP: //www.loufranco كوم / بلوق / ملفات / 20 يوم من بين كلوجر-يوم-7.html

HTTP: //www.loufranco كوم / بلوق / ملفات / 20 يوم من بين كلوجر-يوم-8.html

نصائح أخرى

ولو فرانكو لديه. يتم تنفيذ هياكل البيانات في اللغات الوظيفية بحيث لتعديلها، وانت "تحل تماما محل" الكيان الأصلي. وراء الكواليس، وأنها لا تزال تستخدم أكثر من سنة واحدة: أنها مجرد استبدال بت تغييرها. الإصدار القديم لا يزال موجودا أيضا، ولكن سوف جمع القمامة تدميره في نهاية المطاف ما دام لا أحد يحيل الى ذلك.

والجواب القصير هو أنه في أسلوب عملي، كل كيان البيانات سيكون غير قابل للتغيير، وبالتالي فإن التحديث هو حقا كيان البيانات الجديدة مع القيمة التي تم تحديثها، وكأنه نوع من كيفية عمل السلاسل في .NET.

والتحديات الحقيقية للاهتمام تأتي عند التعامل مع IO، يصبح صعبا لنموذج I / O بطريقة وظيفية بحتة الأمر الذي يؤدي إلى الحلول مثل <وأ href = "http://en.wikipedia.org/wiki/Monads_in_functional_programming" يختلط = "نوفولو noreferrer"> الكائنات الدقيقة الاحاديه الخلية .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top