کد اسپاگتی کیست؟ توضیح بده.
کد اسپاگتی یک عبارت تحقیرآمیز برای کد منبعی است که نگهداری آن دشوار و بدون ساختار است. کد اسپاگتی می‌تواند به دلایل متعددی ایجاد شود، مانند نیازهای ناپایدار پروژه، عدم وجود قوانین سبک برنامه‌نویسی، و مهندسان نرم‌افزار با توانایی یا تجربه ناکافی.تعریف.کدی که به جای استفاده از ساختارهای برنامه‌نویسی ساخت‌یافته، از دستورهای GOTO بیش از حد استفاده می‌کند، منجر به برنامه‌های پیچیده و غیرقابل نگهداری می‌شود که اغلب به عنوان کد اسپاگتی شناخته می‌شوند. چنین کدی دارای ساختار کنترلی پیچیده و درهم‌پیچیده است، که جریان برنامه را به صورت مفهومی مانند یک کاسه اسپاگتی، پیچ‌خورده و درهم نشان می‌دهد..در یک انتشار در سال ۱۹۸۰ توسط اداره ملی استانداردهای ایالات متحده، عبارت "برنامه اسپاگتی" برای توصیف برنامه‌های قدیمی که دارای "فایل‌های تکه‌تکه و پراکنده" بودند استفاده شده است.کد اسپاگتی همچنین می‌تواند به یک در کد شیءگرا اشاره کند که به سبک رویه‌ای نوشته شده است، مانند ایجاد کلاس‌هایی که متدهای آن‌ها بیش از حد طولانی و بی‌نظم هستند، یا مفاهیم شیءگرایی مانند چندریختی را کنار می‌گذارند. وجود این نوع کد اسپاگتی می‌تواند به‌طور قابل‌توجهی از درک یک سیستم بکاهد.تاریخچه.هنوز مشخص نیست که عبارت کد اسپاگتی از چه زمانی به صورت رایج درآمده است؛ با این حال، چندین مرجع در سال ۱۹۷۷ ظاهر شدند، از جمله "ماکارونی بهتر از اسپاگتی است" نوشته گای استیل. در کتاب سال ۱۹۷۸ با عنوان "مقدمه‌ای بر برنامه‌نویسی منظم با استفاده از PL/I، PL/CS و PL/CT"، برنامه‌هایی را توصیف می‌کند که "همان ساختار منطقی تمیز یک بشقاب اسپاگتی را دارند"، عبارتی که در کتاب سال ۱۹۷۹ "مقدمه‌ای بر برنامه‌نویسی" که با دیوید گریز هم‌نویسنده بود، تکرار شد. در مقاله ۱۹۸۸ با عنوان "مدل مارپیچی توسعه و بهبود نرم‌افزار"، این اصطلاح برای توصیف روش قدیمی "کد و فیکس" که بدون برنامه‌ریزی بود و در نهایت منجر به توسعه مدل آبشار شد، استفاده شده است. در کتاب سال ۱۹۷۹ "برنامه‌نویسی ساخت‌یافته برای برنامه‌نویس COBOL"، نویسنده پاول نول از عبارات "کد اسپاگتی" و "لانه موش" به عنوان مترادف‌هایی برای توصیف کد منبع ضعیف ساخت‌یافته استفاده کرده است.در کنفرانس "Ada – Europe '93"، زبان Ada به این دلیل توصیف شد که برنامه‌نویس را مجبور به "تولید کد قابل درک، به جای کد اسپاگتی" می‌کند، به دلیل مکانیزم محدود کننده انتشار استثناهای آن.در یک مقاله هجو زبان‌های برنامه‌نویسی در سال ۱۹۸۱ در The" Michigan Technic" با عنوان "BASICally speaking...FORTRAN bytes!!"، نویسنده FORTRAN را این‌گونه توصیف کرد که "کاملاً از کد اسپاگتی تشکیل شده است".ریچارد همینگ در سخنرانی‌های خود ریشه‌شناسی این اصطلاح را در زمینه برنامه‌نویسی اولیه با کدهای باینری توصیف کرده است:عبارات مرتبط.کد راویولی.کد راویولی اصطلاحی مختص برنامه‌نویسی شیءگرا است. این اصطلاح کدی را توصیف می‌کند که از کلاس‌های به خوبی ساختار یافته تشکیل شده است که به صورت جداگانه به راحتی قابل درک هستند، اما در مجموع فهم آنها دشوار است.کد لازانیا.کد لازانیا به کدی اشاره دارد که لایه‌های آن به قدری پیچیده و در هم تنیده‌اند که ایجاد تغییر در یک لایه مستلزم تغییرات در تمامی لایه‌های دیگر است.مثال‌ها.در زیر یک مثال ساده از کد اسپاگتی در BASIC آورده شده است. این برنامه هر یک از اعداد ۱ تا ۱۰۰ را به همراه مربع آن‌ها روی صفحه نمایش چاپ می‌کند. تورفتگی‌ها برای تمایز بین اقدامات مختلف انجام شده توسط کد استفاده نمی‌شوند، و دستورهای codice_1 برنامه باعث ایجاد وابستگی به می‌شوند. جریان اجرای برنامه از یک قسمت به قسمت دیگر دشوارتر پیش‌بینی می‌شود. نمونه‌های واقعی کد اسپاگتی پیچیده‌تر هستند و می‌توانند به‌طور قابل توجهی هزینه‌های نگهداری برنامه را افزایش دهند.1 i=02 i=i+13 PRINT i;"squared=";i*i4 IF i&gt;=100 THEN GOTO 65 GOTO 26 PRINT "Program Completed."7 ENDدر اینجا همان کد به سبک برنامه‌نویسی ساختاریافته نوشته شده است:1 FOR i=1 TO 1002 PRINT i;"squared=";i*i3 NEXT i4 PRINT "Program Completed."5 ENDاین برنامه از یک قسمت به قسمت دیگر پرش می‌کند، اما این پرش‌ها رسمی‌تر و قابل پیش‌بینی‌تر هستند، زیرا حلقه‌های FOR و توابع کنترل جریان را فراهم می‌کنند، در حالی که دستور "goto" باعث ایجاد جریان کنترل دلخواه می‌شود. اگرچه این مثال کوچک است، برنامه‌های دنیای واقعی شامل خطوط زیادی از کد هستند و زمانی که به سبک کد اسپاگتی نوشته شوند، نگهداری آن‌ها دشوار است.در اینجا یک مثال دیگر از کد اسپاگتی با دستورهای GOTO قرار دارد. INPUT "How many numbers should be sorted? "; T DIM n(T) FOR i = 1 TO T PRINT "NUMBER:"; i INPUT n(i) NEXT i 'Calculations: C = TE180: C = INT(C / 2) IF C = 0 THEN GOTO C330 D = T - C E = 1I220: f = EF230: g = f + C IF n(f) &gt; n(g) THEN SWAP n(f), n(g) f = f - C IF f &gt; 0 THEN GOTO F230 E = E + 1 IF E &gt; D THEN GOTO E180 GOTO I220C330: PRINT "The sorted list is" FOR i = 1 TO T PRINT n(i) NEXT i