background

چارەسەرکردنی دژەپاتێرنی Arrow Head

هاوپۆل: ئەندازیاری نەرمەکاڵا ( سۆفتوێر )  ژ.بابەت : 952  بەروار : ئه‌یلول 8, 2016
Antipattern, Arrow head, code smell, دژەپاتێرن
QR Code For:  چارەسەرکردنی دژەپاتێرنی Arrow Head

دژەپاتێرن (AntiPattern) بە چارەسەرێکی باوی کێشەیەک دەگوترێ، کە خۆی لە خۆیدا رێگای چارەسەرکردنەکە ناجێگیری دەخاتە ناو کۆدەکە یان کێشەی دیکە دروست دەکات.

چەندین دژەپاتێرن هەیە لە پڕۆگرامینگ، لەو بابەتە باسی Arrow head دەکەین . ئەو جۆرە دژەپاتێرنە کاتێک درووست دەبێک کە چەندین if-else if-else لە ناو یەکتر دا دەنووسرێن، بەوەش شێوەی سەرە تیرێک دروست دەکەن. بەم شێوەیە:

ئەگەر سەیری ئەو نموونەیە بکەین:

ڕوونترین شت لەو نموونەی سەرەوە ئەوەیە کە کۆدەکە ڕوون نییە! ئەو جۆرە کۆدانە بەبێ هۆ کارەکە ئاڵۆز دەکەن. بەمەش ئەگەری دروستبوونی هەڵە و Bug زۆتر دەبێت. بۆ چارەسەرکردنی ئەو دژەپاتێرنە چەند ڕێگایەک هەن:

ڕێگای یەکەم:

دەتوانین Guarding Clause بەکاربهێنین، واتە یەکەمجار دڵنیا ببینەوە کە هەموو پارامیتەرەکان بەهای تەواویان هەیە، ئەگەرنا  ڕاستەخۆ لە فەنکشنەکە بێێنە دەرەوە بەهۆی return، یانیش Exception یێک هەڵبدەین. بەو شێوەیە:

جوانتر بووە، ها؟ ئێستا کۆدەکە زۆر ڕوونترە، وە خوێندنەوەشی زۆر هاسانترە لەسەر چاوان. بەڵام هێشتاش دەتوانین کورتتری بکەینەوە:

ئێستا تەواو ڕێک بووە. بەڵام دەشکرێ هەندێک کەس ئەو کورتکردنەوەیان پێ باش نەبێت، بەتایبەتی ئەگەر بتەوێ Exception هەڵبدەیت. لەبەرئەوەی ئەوکات ناتوانی ناوی پارامیتەرەکە لە ناو Exception ــەکە بنووسی.

ڕێگای دووەم:

ئەگەر حەزت لەو return نانە نییە، و دەتەوێ هەر فەنکشنەی تەنها یەک returnی هەبێت، دەتوانی گۆڕاوێکی جۆری Boolean بەکاربهێنیت بۆ ئەوەی دیاری بکەی کە هەموو شتێک تەواوە یاخود نا. بۆ نموونە:

چاکی ئەو ڕێگایە لە کاتێک بە دیار دەکەوێت کە ژمارەیەکی زۆر مەرج هەبێت لەسەرەتای فەنکشنەکە. بۆ نموونە:

ڕێگای سێیەم:

ئەو ڕێگایەشیان هەر لە ڕێگای دووەم دەچێت، بەڵام لەبری ئەوەی کە گۆڕاوێکی سەربەخۆ بەکاربهێنی، ڕاستەخۆ بە بەکارهێنانی AND و OR هەموو مەرجەکان لە ناو یەک if دا بنووسی:

بەکارهێنانی ڕێگای دووەم یان سێیەم لەسەر بارودۆخەکە دەوەستێت، ئەگەر مەرجەکان زۆر درێژ بوون دەتوانی ڕێگای دووەم بەکاربهێنی، ئەگەریش نا، ڕێگای سێهەم.

بەکارهێنانی چەند فەنکشنێک:

ئەو ڕێگایانەی سەرەوە بۆ if باشن، بەڵام ئەگەر هاتوو چەند لووپێکمان لە ناو یەکتردا هەبوو؟ بۆ ئەوەش دەتوانین لە بڕی یەک فەنکشنی گەورە، چەند فەنکشنێکی بچوکتر بەکاربهێنین، بۆ نموونە سەیری ئەو پارچە کۆدە بکە:

دەتوانین ئەو فەنکشنە بکەین چەند فەنکشنێکی بچوکتر و کۆدەکە جوانتر بکەین:

کۆتایی

ئەو چەند ڕێگایەی سەرەوە یارمەتی باشتر نووسین کۆد دەدەن. بەڵام لە زۆربەی حاڵەتەکاندا ئەگەر پێویستیت بە زۆرتر لە ٣ لووپ یان مەرج هەبوو لەناو یەکتری، ئەوا بزانە کارەکە بەهەڵەیی دەکەیت. هەموو کات ڕێگایەکی ئاسانتر و سادەتر هەیە، وە کۆد چەند ڕوونتر و سادەتربێت باشترە.

محمد یاسین

ژمارەی بابەتەکان: 21

قوتابی بەشی ئەندازیاریی سیستەمی زانیاری لە زانکۆی پۆلیتەکنیکی هەولێر

  • بۆچوونەکان

    • زۆر سوپاس. بۆ مەسەلەی لووپ، زۆربەی جار لەناو یەکتر دەنووسرێن. وە لەوانەیە زۆر جار هەرواش باشتر بن. هیچ ڕێگایەک بۆ هەموو حاڵەتێک باش نییە، بە پێی حاڵەتەکە دەگۆڕدرێ. ئەگەر گەیشتییە حەڵەتێک کە لووپەکان لەناو یەک بنووسی ڕوونتر و ڕێکتر بوو لە بەکارهێنانی چەند فەنکشنێکی جیاواز، ئەوا بێ دوو دڵی لەناو یەکیان بنووسە. وە ئەو دژە پاتێرنە زۆرتر لە بەکارهێنانی (If-else) خراپییەکانی بەدیار دەکەوێت.

  • وەڵامێک بنووسە بۆ محمد یاسین هەڵوەشاندنەوەی وەڵام

    پۆستی ئەلیکترۆنییەکەت بڵاوناکرێتەوە. خانە پێویستەکان دەستنیشانکراون بە *