كود نموذجي
في برمجة الحاسوب، يُعرف الكود النمطي ، أو ببساطة الكود النمطي ، بأنه أجزاء من التعليمات البرمجية تتكرر في أماكن متعددة مع اختلافات طفيفة أو معدومة. عند استخدام لغات تُعتبر مطولة ، يضطر المبرمج إلى كتابة الكثير من الكود النمطي لإنجاز وظائف ثانوية فقط. [ 1 ]
يمكن تقليل الحاجة إلى التعليمات البرمجية النمطية من خلال آليات عالية المستوى مثل البرمجة الوصفية (التي تجعل الكمبيوتر يكتب تلقائيًا التعليمات البرمجية النمطية المطلوبة أو يدرجها في وقت الترجمة )، والاتفاقية بدلاً من التكوين (التي توفر قيمًا افتراضية جيدة، مما يقلل الحاجة إلى تحديد تفاصيل البرنامج في كل مشروع) والهندسة القائمة على النماذج (التي تستخدم النماذج ومولدات تحويل النماذج إلى تعليمات برمجية، مما يلغي الحاجة إلى التعليمات البرمجية النمطية اليدوية).
من الممكن أيضًا نقل الشيفرة النمطية إلى فئة مجردة بحيث يمكن توريثها من قبل أي عدد من الفئات الملموسة . خيار آخر هو نقلها إلى روتين فرعي بحيث يمكن استدعاؤها بدلًا من تكرارها.
أصل
نشأ المصطلح من مجال الصحافة . كانت المقالات والتقارير الأخرى التي توزعها وكالات الطباعة تُرسل إلى الصحف المشتركة على شكل ألواح طباعة جاهزة . ونظرًا لتشابهها مع الصفائح المعدنية المستخدمة في صناعة الغلايات ، أصبحت تُعرف باسم "ألواح الطباعة"، والنص الناتج عنها باسم "نص الطباعة". ولأن القصص التي تُوزع عبر ألواح الطباعة كانت عادةً " حشوًا " وليست أخبارًا "جادة"، أصبح المصطلح مرادفًا للنص غير الأصلي والمكرر. [ 2 ] [ 3 ]
مصطلح ذو صلة هو رمز المحاسبة ، ويشير إلى الرمز الذي لا يعد جزءًا من منطق العمل ولكنه متداخل معه من أجل الحفاظ على تحديث هياكل البيانات أو التعامل مع الجوانب الثانوية للبرنامج.
الديباجة
أحد أشكال التعليمات البرمجية الجاهزة هو عبارة عن تعريفات، وإن لم تكن جزءًا من منطق البرنامج أو قواعد اللغة الأساسية ، تُضاف إلى بداية ملف المصدر كعرفٍ مُتبع. يوضح المثال التالي في لغة بيرل مثالًا على التعليمات البرمجية الجاهزة:
#!/usr/bin/env perl use warnings ; use strict ;السطر الأول هو سطر shebang ، الذي يُعرّف الملف على أنه سكربت Perl يمكن تنفيذه مباشرةً من سطر الأوامر على أنظمة Unix/Linux. أما السطران الآخران فهما توجيهات برمجية (pragmas) لتفعيل التحذيرات والوضع الصارم، وهما من متطلبات أسلوب برمجة Perl الرائج .
هذا المثال التالي هو نموذج أساسي للغة البرمجة C/C++ ، #includeوهو guard .
#ifndef MYINTERFACE_H #define MYINTERFACE_H...|endifيتحقق هذا الإجراء من وجود ملف myinterface.h، ويُهيئ علامة عامة لإخبار المُصرّف ما إذا كان قد تم تضمينه بالفعل. ولأن عملية تجميع وحدة نمطية قد تتضمن العديد من الملفات المترابطة، فإن هذا الإجراء يتجنب معالجة نفس ملف الرأس عدة مرات (مما قد يؤدي إلى أخطاء بسبب وجود تعريفات متعددة بنفس الاسم).
في جافا والمنصات المماثلة
في برامج جافا ، غالبًا ما تُزوَّد فئات DTO بأساليب للحصول على متغيرات النسخة وتعيينها . ويمكن اعتبار تعريفات هذه الأساليب في كثير من الأحيان نمطية. ورغم اختلاف الشيفرة من فئة إلى أخرى، إلا أنها نمطية بما يكفي في بنيتها بحيث يكون توليدها تلقائيًا أفضل من كتابتها يدويًا. على سبيل المثال، في فئة جافا التالية التي تُمثِّل حيوانًا أليفًا، فإن معظم الشيفرة نمطية باستثناء تعريفات Pet و name و owner .
جافا
public class Pet { private String name ; private Person owner ;public Pet ( String name , Person owner ) { this . name = name ; this . owner = owner ; }public String getName () { return name ; }public void setName ( String name ) { this . name = name ; }public Person getOwner () { return owner ; }public void setOwner ( Person owner ) { this . owner = owner ; } }معظم التعليمات البرمجية المتكررة في هذا المثال موجودة لتلبية متطلبات JavaBeans . إذا تم تعريف المتغيرين name و owner كمتغيرات عامة ، فلن تكون هناك حاجة إلى دوال الوصول والتعديل .
في جافا 14، تمت إضافة فئات السجلات لمعالجة هذه المشكلة. [ 4 ] [ 5 ] [ 6 ]
لتقليل كمية التعليمات البرمجية المتكررة، تم تطوير العديد من أطر العمل، مثل Lombok للغة Java. [ 7 ] يتم إنشاء نفس الكود المذكور أعلاه تلقائيًا بواسطة Lombok باستخدام تعليقات Java التوضيحية ، وهو شكل من أشكال البرمجة الوصفية .
@AllArgsConstructor @Getter @Setter public class Pet { private String name ; private Person owner ; }سكالا
في بعض لغات البرمجة الأخرى، قد يكون من الممكن تحقيق نفس النتيجة باستخدام شيفرة أقل تكرارًا، عندما تدعم اللغة هذه البنى الشائعة بشكلٍ مدمج. على سبيل المثال، يمكن التعبير عن ما يعادل شيفرة جافا المذكورة أعلاه في سكالا باستخدام سطر واحد فقط من الشيفرة:
case class Pet ( var name : String , var owner : Person )لغة C / لغة C++
حماية مضمنة :
#ifndef MYINTERFACE_H #define MYINTERFACE_H...|endifسي شارب
أو في لغة C# باستخدام الخصائص التلقائية مع الحقول الداعمة التي يُنشئها المُصرّف:
public class Pet { public string Name { get ; set ; } public Person Owner { get ; set ; } }ابتداءً من الإصدار C# 9.0، تتوفر إمكانية استخدام السجلات التي تُنشئ فئات ذات خصائص تلقائيًا:
سجل عام Pet ( سلسلة الاسم ، شخص المالك )؛HTML
في لغة HTML ، يتم استخدام القالب الأساسي التالي كقالب فارغ أساسي وهو موجود في معظم صفحات الويب:
< !DOCTYPE html> < html lang = " en " > <head> < meta charset = " UTF - 8" / > <title> اختبار < / title > </head> <body></body> </html>يُعرّف معيار WHATWG HTML الحيّ أنه يُمكن حذف الوسوم <html> و <html> و <html> بأمان في معظم الحالات. [ 8 ] يُعدّ الوسم <html> زائدًا من الناحية التقنية عند وصوله مباشرةً من خادم ويب مُهيّأ لإرسال ترميز الأحرف في ترويسة HTTP، مع أنه يصبح مفيدًا عند حفظ استجابة HTML في ملف أو ذاكرة تخزين مؤقتة أو أرشيف ويب. [ 9 ] يُوصي دليل أنماط HTML/CSS من Google بحذف جميع الوسوم الاختيارية، [ 10 ] مما يُقلّل بشكل كبير من التعليمات البرمجية المتكررة. وينص اتحاد شبكة الويب العالمية ( WWC) على أنه يجب ألا يكون العنصر <html> فارغًا: [ 11 ]<html><head><body><metacharset="UTF-8">.html<title>
<!DOCTYPE html> < title > اختبار </ title >انظر أيضاً
- التوجيه (البرمجة) - بنية لغوية تحدد كيفية معالجة المترجم لمدخلاته
- معالج ماكرو للأغراض العامة – معالج ماكرو غير مرتبط بلغة برمجة أو برنامج معين
- برنامج "مرحباً بالعالم!" – مثال تقليدي أولي للغة برمجة حاسوبية. صفحات تعرض أوصافاً مختصرة لأهداف إعادة التوجيه.
- المكتبة (الحوسبة) - مجموعة من الموارد المستخدمة لتطوير برنامج حاسوبي
- الماكرو (علوم الحاسوب) - قاعدة لاستبدال مجموعة من المدخلات بمجموعة من المخرجات
- المعالج المسبق - برنامج يقوم بمعالجة المدخلات لبرنامج آخر
- السقالة (البرمجة) - تقنية توليد الكود أو تقنية توليد المشاريع
- مقتطف برمجي – كمية صغيرة من التعليمات البرمجية المصدرية تُستخدم لزيادة الإنتاجية
- معالج القوالب – برنامج يستخدم القوالب لإنتاج المستندات
- نظام قوالب الويب – نظام في مجال نشر الويب
مراجع
- ↑ لاميل، رالف؛ جونز، سيمون بيتون (2003). "تخلص من الشيفرة النمطية: نمط تصميم عملي للبرمجة العامة" . وقائع ورشة عمل ACM SIGPLAN الدولية لعام 2003 حول أنواع تصميم وتنفيذ لغات البرمجة . TLDI '03. نيويورك: ACM . الصفحات 26-37 . doi : 10.1145/604174.604179 . ISBN 9781581136494. S2CID 9472305 .
- ↑ "Boilerplate" . Dictionary.com . تم الاطلاع عليه بتاريخ 27-01-2018 .
- ↑ "Boilerplate" . قاموس ميريام-ويبستر . تم الاطلاع عليه بتاريخ 27-01-2018 .
- ↑ "سجل الفئات" . docs.oracle.com .
- ^ "JEP 395: سجل" . openjdk.org .
- ↑ إيفانز، بن (2020-11-01). "السجلات تصل إلى جافا" . blogs.oracle.com .
- ↑ فرانكل، نيكولاس (2009-12-07). "يُقلل لومبوك من شيفرة التعليمات البرمجية المتكررة" . DZone.com . تم الاطلاع عليه بتاريخ 2017-08-02 .
- ↑ "معيار HTML - بناء جملة HTML - الوسوم الاختيارية" . WHATWG . 2017-05-05 . تم الاطلاع عليه بتاريخ 2017-05-05 .
- ↑ "هل علامة charset meta مطلوبة مع HTML5؟" . stackoverflow.com . تم الاطلاع عليه بتاريخ 2017-05-05 .
- ↑ "دليل أنماط HTML/CSS من جوجل" . google.github.io . تم الاطلاع عليه بتاريخ 2017-05-05 .
- ↑ "عنوان صفحة HTML غير فارغ" . www.w3.org . تم الاطلاع عليه بتاريخ 22 يوليو 2021 .
- شفرة المصدر
- حكايات شعبية عن برمجة الحاسوب
- حكايات شعبية في هندسة البرمجيات
