موضوع مقاله: کد تکراری | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # کد تکراری | مقدمه: کد تکراری یک اصطلاح برنامه‌نویسی برای بخشی از کد منبع است که بیش از یک بار می‌آید، چه در درون یک برنامه و چه در برنامه‌های مختلفی که توسط یک موجودیت نگه‌داری می‌شود. | ## بخش 1: کد تکراری | معمولاً حداقل مقدار خط کدی نیاز است تا آن را به جای آنکه تشابه تصادفی دو قسمت بدانیم، تکراری در نظر بگیریم. به این بخش‌های تکراری کد، کد کلون یا کلون گفته می‌شود و به فرایند خودکار پیدا کردن تکرارها در کد پیدا کردن کلون می‌گویند. دو بخش از کد ممکن است تکراری باشند بدون اینکه همه کاراکترهای آن‌ها برابر باشد، مثلاً ممکن است وقتی فاصله‌ها و کامنت‌ها در نظر گرفته نشوند با هم برابر باشند یا اگر آن‌ها را تحلیل واژگانی کنیم برابر شوند یا واژه به واژه معادل باشند و در بخش‌هایی تنوع داشته باشند. حتی بخش‌هایی از کد که کارکرد یکسان دارند می‌توانند به عنوان کد تکراری در نظر گرفته شوند. پدیداری برخی از راه‌های تولید کد تکراری عبارت است از: برنامه‌نویسی با کپی و الصاق، که ممکن است به خاطر دستبرد فکری به سایر کد انجام شده باشد. در اکثر موارد این کار نیاز به تغییر جزئی در کد کپی‌شده دارد مثل تغییر نام متغیرها با اضافه/کم کردن کد. زبان‌های برنامه‌نویسی تقریباً در همهٔ موارد این امکان را می‌دهند که یک کپی از کد از مکان‌های مختلفی فراخوانی شوند تا بتواند به اهداف متفاوتی پاسخ دهد و در عین حال نیازی به به وجود آوردن یک کپی دیگر از کد نباشد اما با این حال برنامه‌نویس به دلایل زیر ممکن است کد را کپی کند: با امکانات زبان به اندازهٔ کافی آشنا نباشند. همچنین ممکن است عملکردی که برنامه‌نویس می‌خواهد پیاده‌سازی کند بسیار مشابه با عملکرد تکه‌ای از کد باشد که به صورت مستقل در جای دیگری از کد وجود دارد. | ## بخش 2: کد تکراری | کدهایی که به صورت خودکار تولید می‌شوند که در آن‌ها کد تکراری ممکن است برای افزایش سرعت یا راحتی توسعه استفاده شوند هم ممکن است دلیل دیگری برای تکرار باشند. توجه کنید که در اینجا تولیدکننده در کد منبع خود قسمت‌های تکراری ندارد و صرفاً ممکن است در کدی که تولید می‌کند قسمت‌های تکراری وجود داشته باشند. از بین بردن کپی تکراری معمولاً کپی تکراری، با نوشتن کد کپی شده در یک واحد خاص (به صورت تابع یا ماژول) از بین می‌رود. به این صورت که در مکان‌هایی که از کد تکراری استفاده شده، می‌توان به جای تکرار کردن کد، آن واحد را فراخوانی کرد. استفاده از روش توسعهٔ منبع-باز، که در آن اجزای کد به صورت متمرکز قرار دارد، منجر به بیشتر شدن کدهای تکراری می‌شود. هزینه‌ها و مزایا کدی که شامل عملکردهای تکراری است، پشتیبانی از آن دشوار است: به این دلیل که طولانی‌تر است، و در صورت نیاز به به‌روزرسانی، این خطر وجود دارد که یک نسخه از کد، بدون بررسی سایر نسخه‌های کپی شده از این کد، به‌روز شود. از طرف دیگر، اگر از یک نسخه از کد برای اهداف مختلف استفاده شود، و به درستی مستند نشده باشد، این خطر وجود دارد که آن را برای یک منظور به روز کنید، اما این بروزرسانی برای کاربردهای دیگر این نسخه، نیاز یا متناسب نباشد. اگر فقط یک نسخه از کد تابع در کد منبع وجود داشته باشد، دیگر نیاز به این ملاحظات برای کدی که به‌طور خودکار تولید می‌شود، نیست. | ## بخش 3: کد تکراری | در گذشته که محدودت حافظه بیشتر بود، کد تکراری بخاطر اشغال فضای بیشتر، اشکال بزرگتری محسوب می‌شد، اما امروزه این مورد چندان مسئلهٔ مهی نیست. هنگامی که کدی دارای آسیب‌پذیری نرم‌افزار کپی شده باشد، در صورتی که توسعه‌دهنده از چنین کپی‌هایی آگاهی نداشته باشد، این آسیب‌پذیری ممکن است همچنان در کد کپی شده باقی بماند. بازسازی کد تکراری می‌تواند بسیاری از معیارهای نرم‌افزاری مانند خطوط کد، پیچیدگی سایکلومتیک و جفتگری را بهبود بخشد. همچنین این بازسازی ممکن است به کوتاه‌تر شدن زمان ترجمه، کاهش بار شناختی، کاهش خطای انسانی و تعداد کمتری کد فراموش شده یا نادیده گرفته منجر شود. اگر زبان برنامه‌نویسی ، انتزاعات ناکافی یا بیش از حد پیچیده را ایجاد کند، کلون‌ها ممکن است موثرترین راه حل باشد؛ به خصوص اگر با تکنیک‌های رابط کاربری مانند ویرایش همزمان پشتیبانی شده باشند. علاوه بر این، خطرات شکستن کد هنگام بازسازی می‌تواند از مزایای نگهداری آن بیشتر باشد.Kapser, C. 2006 در مطالعه‌ای که توسط واگنر، عبدالخالق و کایا انجام شده، به این نتیجه رسیدند که اگرچه باید کار بیشتری برای همگام سازی نسخه‌ها انجام شود، با این حال اگر برنامه نویسان مربوطه از کد تکراری آگاه باشند، به‌طور قابل توجهی خطاها نسبت به کد بدون تکرار کاهش می‌یابد. | ## جمع‌بندی | اگر به صورت گسترش در خط ترجمه نشده باشد، احتمالاً سربار اضافی فراخوانی تابع منجر به زمان اجرای بیشتری (در حدود ۱۰ دستورالعمل پردازنده برای اکثر زبان‌ها با کارایی بالا) خواهد شد.