setter

تقنيات تطوير التعليمات البرمجية المعاصرة

منذ 16 عامًا بالضبط ، أرسلت وكالة ناسا مركبة Opportunity Rover إلى المريخ لتنفيذ مهمة Mars Rover ، لجمع عينات من الأرض وشظايا الصخور ، للتحقق مما إذا كان هناك ماء ، باختصار ، لاستكشاف الكوكب. باختصار ، كانت فترة مهمة Oppy المخطط لها 3 أشهر ، لكنها خدمت بنجاح على سطح المريخ لمدة 8 مريخ بالضبط - 15 سنة أرضية. أخيرًا ، في فبراير 2019 ، تم فصله من خلال إشارة الإغلاق المرسلة من العالم ، وقد نال تقدير العالم أجمع لخدماته.

ومهمة جديدة أخرى من ناسا: MARS 2020...

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


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

باستخدام بعض التقنيات البسيطة ، يمكنك جعل الأكواد البرمجية التي تنتجها أكثر قابلية للفهم وأكثر فائدة وأكثر كفاءة.

كيف صار ذلك؟

1) تحديد المتغيرات بأنواع البيانات الخاصة بها قدر الإمكان ، وكتابة المتغيرات بنفس القيم الأولية جنبا إلى جنب على سطر واحد ، وفصلها مع علامة = وتعادل النتيجة إلى قيمة ، وقم بتجميع المتغيرات التي هي أبناء نفس مجموعة العمل.

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

مثال :

2) بالنسبة للحالات والشروط التي سيكون لها نتائج من سطر واحد ، استخدم العبارة الثلاثية بالعامية ، IF ، لتقليل الالتباس.

باستخدام طريقة البيان الثلاثي ، والتي نسميها أيضًا سطر IF، اكتب شروط متعدد لعملية واحدة وأرسل أيضًا إشارات إغلاق. بدلا من ذلك ، اتبع الطريقة أدناه.

في الكود أعلاه ، قمنا بتعيين قيمة rover.shortName على متغير roverName إذا كان هناك فهرس ShortName في rover ، وفحص قيمة rover.fullName إذا لم يكن موجودًا

3) Tاستفد من مميزات  Array و Structure (ArrayFilter و ArrayMap و ArrayReduce و StructFilter و StructMap و StructReduce)

المصفوفات والكائنات لا غنى عنها في البرمجيات

إنها تسمح لنا بإنشاء نماذج البيانات ، أو تجميع البيانات ، أو معالجة البيانات ككل أو بشكل فردي.

بالطبع ، هناك حاجة إلى وظائف مختلفة لمعالجة البيانات التي تحتويها. بفضل هذه الوظائف ، يمكننا حل العمليات التي يمكن أن تكون أطول بكثير وأكثر تعقيدًا بطريقة أبسط

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


مثال 1: إخراج المصفوفة التي تزيد مساحتها عن 300,000,000

ArrayFilter

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

ArrayFilter ناجح جدًا في الاستخراج بواسطة عامل التصفية ، بعد تطبيق المرشح على جميع عناصر المصفوفة بالترتيب ، يقوم بإرجاع النتيجة كمصفوفة مرة أخرى.

للمزيد: https://cfdocs.org/arrayfilter  

الآن لدينا مجموعة من الكواكب التي تبلغ مساحتها أكثر من 300.000.000. لنفترض أننا نتساءل عن ضعف المساحة الحالية لكل كوكب في هذه السلسلة؟ دعونا نحسب ذلك أيضا

مثال 2: إضافة ضعف المساحة الحالية للكواكب بمساحة سطح أكبر من 300.000.000 كمؤشر جديد

ArrayMap

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

ينتج ArrayMap نتيجة جديدة من عناصر struct في المصفوفة ويخصص عنصرًا جديدًا لكل strcut. وإرجاع النتيجة كمصفوفة

للمزيد: https://cfdocs.org/arraymap

أخيرًا ، لدينا سلسلة تتضمن ضعف مساحة الكواكب التي تزيد مساحتها عن 300.000.000 ، ونريد أن يتم تلخيص مساحة جميع الكواكب بمقدار الضعف وإعادتها إلينا نتيجة لذلك. يمكننا كتابة هذا المثال على النحو التالي.

مثال 3: ناتج الكواكب التي تزيد مساحتها عن 300.000.000 بإضافة ضعف قياسات سطحها الحالية.

ArrayReduce


يأخذ ArrayReduce معلمتين ، العنصر الأول هو المصفوفة والعنصر الثاني هو دالة الإرجاع. تقوم بتنفيذ العملية التي حددتها كدالة في المعلمة الثانية لكل صف من الصفيف الذي قدمته في المعلمة الأولى وتنتج نتيجة واحدة ثابتة.

للمزيد: https://cfdocs.org/arrayreduce

يمكنك استخدام هذه الوظائف في أسلوب يسمى توجيه الإخراج. دعونا نظهرها بهذه الطريقة.

 


4) قسّم عملياتك إلى أجزاء ، وانتبه للوظائف ، وأنشئ الكل باستخدام الأجزاء.

لنفترض أنك تتطور من الصفر. في هذا التطور الذي قمت به ، فإن أولويتك هي ؛ يجب أن يكون ذلك للتحقق من الوظائف المكتوبة بالفعل والتي تعتقد أنها يمكنك أن تعملها ، والتحقق من فائدتها في تطويرك  واستخدامها، إن أمكن.

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

الطريقة الأنسب لتقسيم العمل إلى جسيمات هي إنشاء مكون وتقسيمه إلى وظائف داخل هذا المكون

انتبه إلى المواقف التالية عند إنشاء المكونات(المكونات) !

تأكد من أن المكونات التي تقوم بإنشائها تحتوي على وظائف بناء (مُنشئ - init - تهيئة).

لا تهمل التغليف (getter and setter)

تحديد أنواع الوظائف والمتغيرات ، والعمل مع الخصائص.

كن حذرًا مع إدارة النطاق ، ولا تمنع نفسك من استخدام هذا النطاق والنطاقات الفائقة.

حدد أنواع القيم وخصائص إمكانية الوصول التي ترجعها الوظائف ، إن وجدت.

لقد أنشأت مكونًا بسيطًا أدناه وأوضحت استخدامه.

مثال: تجميع جميع الكواكب مع خصائصها الفرعية وإدراج الكوكب ذي الصلة بجميع خصائصه الفرعية وفقًا للاسم المرسل للكوكب.

في المثال أعلاه ، أنشأنا أولاً ملفًا باسم planet.cfc وأنشأنا مكونًا فيه ، وداخل المكون ، قمنا بتعريف خاصية باسم planetModel ووظيفة منشئ اسمها init.

لقد جعلنا الخاصية تُملأ بالدالة init. باستخدام وظيفة setPlanet ، جعلنا من الممكن تعيين عنصر جديد إلى خاصية planetModel. (setter)

من خلال وظيفة getPlanet ، قدمنا عودة معلومات الكوكب ذات الصلة وفقًا للفهرس المرسل من خاصية planetModel. (Getter)

باستخدام وظيفة getPlanetByName ، قمنا بإرجاع معلومات الكوكب وفقًا لاسم الكوكب المرسل من خاصية planetModel. (Getter)

بصرف النظر عن دراسات التحديث التي حاولت وصفها أعلاه ، هناك تقنيات مختلفة ، لكنك ستشهد مدى وضوح كودك وعقلك عندما يتم تطبيق هذه الأساليب في البداية!

شكرا للقراءة..

?

?