سؤال

ما هي أفضل طريقة لبدء البرمجة باستخدام مكتبات لامدا المعززة؟

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

المحلول

مع البقاء ضمن حدود لغة C++ والمكتبات، أود أن أقترح أولاً التعود على البرمجة باستخدام قوالب وظائف خوارزمية STL، كأحد الاستخدامات الأكثر شيوعًا لديك لـ Boost::lambda هو استبدال فئات functor بالتعبيرات المضمنة المضمنة.

تمنحك وثائق المكتبة نفسها مثالاً مقدمًا لما هو موجود من أجله:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

أين std::cout << _1 << ' ' يُنتج كائن دالة، عند استدعائها، تكتب وسيطتها الأولى إلى الدالة cout تدفق.هذا شيء يمكنك القيام به باستخدام فئة وظيفية مخصصة، std::ostream_iterator أو حلقة صريحة، ولكن Boost::lambda يفوز بالإيجاز وربما الوضوح - على الأقل إذا كنت معتادًا على مفاهيم البرمجة الوظيفية.

عندما تستخدم (الإفراط) في STL، تجد نفسك منجذبًا نحو Boost::bind و Boost::lambda.إنه مفيد حقًا لأشياء مثل:

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

قبل أن تصل إلى هذه النقطة، ليس كثيرا.لذا استخدم خوارزميات STL، واكتب وظائفك الخاصة، ثم ترجمها إلى تعبيرات سطرية باستخدام Boost::lambda.

من وجهة نظر مهنية، أعتقد أن أفضل طريقة للبدء في Boost::lambda هي أن يكون استخدام Boost::bind مفهومًا ومقبولًا.يبدو استخدام العناصر النائبة في تعبير Boost::bind أقل سحرًا بكثير من العناصر النائبة Boost::lambda "المجردة" ويجد قبولًا أسهل أثناء مراجعات التعليمات البرمجية.إن تجاوز التعزيز الأساسي::استخدام lambda من المرجح أن يسبب لك الحزن من زملائك في العمل إلا إذا كنت في متجر C++ متطور.

حاول ألا تسرف - هناك نكون الأوقات والأماكن التي أ for-حلقة حقًا هو الحل الصحيح.

نصائح أخرى

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

أما من أين أبدأ، فقد قمت بقص أسناني الوظيفية على Scheme، ولكن هناك الكثير من الخيارات الجيدة.

إذا كنت تعمل مع مترجم حديث إلى حد معقول، فيمكنك استخدام Boost.إذا لم يكن موجودًا على جهازك بالفعل، فقم بتثبيته (sudo apt-get install libboost-dev on unbuntu، واحصل على الثنائيات من Boost.org إذا كنت تستخدم نظام التشغيل Windows).إقرأ ال وثيقةثم قم بإلقاء نظرة على التعليمات البرمجية الموجودة لديك للتعرف على المواقف التي قد تستخدمها فيها.هل لديك الكثير من تكرار التعليمات البرمجية التي يمكن التخلص منها إذا قمت بتحديد دالة باستخدام جزء صغير من التعليمات البرمجية، على سبيل المثال؟

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