بایگانی برچسب‌ها : سورس کد

اسپاگتی کد Spaghetti Code

اسپاگتی کد یا Spaghetti Code چیست؟

اسپاگتی کد (Spaghetti Code) یا کد درهم تنیده اصطلاحی در حوزه برنامه نویسی رایانه ای است و به سورس کدهایی گفته می‌شود که فاقد ساختار مناسب بوده و به علت پیچیدگی غیرضروری، فهم و نگه داری آن به امری دشوار تبدیل می‌شود. این درهم تنیدگی و پیچیدگی می‌تواند ناشی از عوامل مختلفی از جمله نبود قوانین مناسب برای استایل‌های برنامه نویسی و تجربه یا دانش ناکافی فرد برنامه نویس باشد.

استفاده از دستورات GOTO به عنوان روشی برای جهش (که زبان های برنامه نویسی قدیمی وابستگی بیشتری به آن داشتند و در بسیاری از زبان های امروزی نیز از آن پشتیبانی می‌شود) یکی از شایع ترین دلایل ایجاد کدهای درهم پیچیده و دارای جریان کنترلی (Control Flow) آشفته به شمار می‌رود. به این معنا که ترتیب اجرای دستورات در این سورس کدها برخلاف برنامه نویسی ساخت یافته استاندارد به شکلی واضح و قابل فهم نمی‌باشد و همانند یک بشقاب اسپاگتی دارای رشته‌هایی است که از ابتدا تا انتها با پیچ و خم‌های فراوان همراه می‌شود. طبیعتا دستکاری و تغییر قطعه‌ای از این کدها به گونه‌ای که باعث بروز مشکل در سایر بخش‌های آن نشود کار ساده‌ای نخواهد بود؛ درست مانند جدا کردن یک قاشق از اسپاگتی که معمولا باعث می‌شود رشته‌های دیگری که در بشقاب قرار دارد نیز قطع شوند!

با وجود اینکه امروزه دستور GOTO در سورس کدها کمتر دیده می‌شود و حتی برخی از زبان‌های برنامه نویسی از آن پشتیبانی نمی‌کنند اما همچنان وجود توابع طولانی، انشعابات متعدد و قطعه کدهای نوشته شده با ساختار ضعیف از جمله مواردی به شمار می‌روند که منجربه ایجاد اسپاگتی کد می‌شود. بد نیست بدانید تغییر نامناسب و مکرر سورس کدهایی که سال‌ها پیش نوشته شده‌اند نیز می‌تواند به شکل‌گیری چنین کدهایی بیانجامد.

اسپاگتی کد Spaghetti Code
نمایی مفهومی از روند اجرای دستورات در یک قطعه کد اسپاگتی مملو از جهش همانند رشته‌های موجود در یک بشقاب اسپاگتی!

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

سورس کد Source Code

سورس کد یا Source Code چیست؟

سورس کد (Source Code) مجموعه‌ای از دستورالعمل‌های رایانه‌ای است که معمولا در قالب متن ساده و به یک زبان برنامه نویسی کامپیوتری نوشته می‌شود. در واقع برنامه نویسان با نوشتن سورس کد، اعمالی که باید توسط رایانه انجام شود را مشخص می‌کنند.

محتوای سورس کد توسط انسان‌ها قابل مطالعه است و معمولا پیش از اجرا توسط یک کامپایلر به کد ماشین تبدیل می‌شود تا توسط پردازنده رایانه قابل فهم شود و یا به صورت مستقیم توسط یک مفسر اجرا می‌شود.

اغلب نرم افزارها تنها در قالب یک فایل اجرایی برای استفاده کاربر منتشر می‌شوند اما در صورتی که سورس کد نرم افزار نیز منتشر شود و مطالعه، تغییر و توزیع آن توسط دیگران از سوی تولیدکننده نرم افزار مجاز دانسته شود نرم افزار را منبع باز (بخوانید: منبعْ باز یا Open Source) می‌نامند.

جالب است بدانید الزاما تمام سورس کد یک برنامه به یک زبان برنامه نویسی نوشته نمی‌شود. برای مثال ممکن است بخش‌هایی از یک برنامه به زبان C# نوشته شود و بخشی دیگر از آن برای اجرای بهینه‌تر به زبان C++ نوشته شده و در قالب یک فایل dll در سورس کد اصلی مورد استفاده قرار گیرد.

معمولا برای تسهیل فرایند نگه داری و اشکال زدایی نرم افزار و همچنین افزایش خوانایی آن از قراردادهایی در کدنویسی استفاده می‌شود که رعایت آن‌ها توسط برنامه نویسان ضروری می‌باشد. هم‌چنین در اغلب موارد توضیحاتی موسوم به کامنت (Comment) به خطوط مختلف سورس کد اضافه می‌شود. این توضیحات باعث می‌شود Source Code نه تنها برای تیم توسعه دهندگان اصلی بلکه برای سایر برنامه نویسانی که ممکن است در آینده بروزرسانی آن را برعهده بگیرند (یا به هر دلیلی آن را مطالعه کنند) نیز قابل درک شود. در این توضیحات، معمولا عملکرد هر تابع، نقش هر متغیر، عملی که توسط یک حلقه انجام می‌شود و … در قالب جملاتی کوتاه بیان می‌شود. به این ترتیب هدف هر قطعه از کد و ارتباط بخش‌های مختلف با یکدیگر در میان انبوهی از کدهای پیچیده مشخص شده و اعمال تغییرات یا رفع نقایص و مشکلات در آن‌ها آسانتر خواهد بود.

در تصویر زیر می‌توانید نمونه‌ای از سورس کدهای ساده برنامه سلام دنیا را به زبان‌های PHP و C++ همراه با کامنت‌های تک خطی (خطوط سبز رنگ) مشاهده کنید.

سورس کد Source Code
نمونه‌ای از Source Code ساده برنامه سلام دنیا به زبان‌های برنامه نویسی C++ (قطعه کد بالایی) و PHP (قطعه کد پایینی)

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

کامپایلر Compiler

کامپایلر یا Compiler چیست؟

کامپایلر (Compiler) یک برنامه‌ی رایانه‌ای است که سورس کد نوشته شده به یک زبان برنامه نویسی (زبان مبدأ) را به یک زبان دیگر (زبان مقصد) تبدیل می‌کند. البته معمولا این اصطلاح برای برنامه‌هایی به کار می‌رود که سورس کد یک زبان برنامه نویسی سطح بالا (نظیر C یا BASIC) را به سورس کد یک زبان سطح پایین‌تر (نظیر کد ماشین یا زبان اسمبلی) تبدیل می‌کنند.

حاصل این فرایند که Compilation نامیده می‌شود، برنامه‌ای است که توسط پردازنده قابل اجرا خواهد بود. در واقع، هدف یک کامپایلر متداول، ایجاد برنامه‌ی قابل اجرا از روی سورس کد نوشته شده است (برنامه‌ای که درک آن برای پردازنده آسان است نه مانند سورس کدهای یک زبان سطح بالا که برای انسان قابل فهم هستند).

زبان‌های کامپایلی یا کامپایل شده (Compiled Language) به نوعی از زبان‌های برنامه‌نویسی گفته می‌شود که سورس کد آن‌ها پیش از اجرا شدن باید کامپایل شود. در مقابل این زبان‌ها، سورس کدهای نوشته شده به زبان‌های تفسیری بدون نیاز به کامپایل شدن توسط برنامه‌هایی موسوم به مفسر (Interpreter) اجرا می‌شود. معمولا برنامه‌های نوشته شده به زبان‌های کامپایلی در هنگام اجرا سریعتر عمل می‌کنند چرا که لازم نیست سورس کد آن‌ها هنگام اجرا به زبان ماشین ترجمه شود.

انواع کامپایلرها

چه از نظر مفهوم و چه از نظر عملکرد، انواع مختلفی از کامپایلرها وجود دارد. برخی از کامپایلرها از برنامه‌های کوچکتری تشکیل شده‌اند که هرکدام مرحله‌ای از کامپایل را انجام می‌دهند. به این کامپایلرها چند گذره (Multi-pass Compiler) گفته می‌شود. ویژگی‌های برخی از زبان‌ها به گونه‌ای است که در مواردی هنگام کامپایل کردن، خواندن مجدد سورس کد در آن‌ها ضروری می‌باشد. در چنین موقعیت‌هایی نوع چندگذره با ایجاد خروجی‌های میانی نهایتا سورس کد نهایی را تولید می‌کند. برخی دیگر از کامپایلرها تنها در یک گذر و به طور کامل تمام سورس کد دریافتی از زبان مبدأ را به زبان مقصد تبدیل می‌کنند که به آن‌ها کامپایلر تک گذره (Single-pass Compiler) گفته می‌شود.

گونه‌ای از کامپایلرها که به محلی یا بومی (Native Compiler) مشهور هستند به شکلی طراحی می‌شوند که خروجی آن‌ها تنها روی همان پلتفرم (سیستم عامل و پردازنده‌ای) که کامپایلر در آن اجرا شده قابل اجرا هستند. در عوض، خروجی کامپایلرهای متقاطع (Cross Compiler) روی پلتفرم‌های مختلفی قابل اجراست.

کامپایلرهایی که زبان مبدأ و مقصد آن‌ها دو زبان تقریبا هم سطح (معمولا سطح بالا) هستند را کامپایلرهای Source to Source می‌نامند. برنامه‌ای که سورس کد یک زبان سطح پایین‌تر را به یک زبان سطح بالاتر ترجمه می‌کند نیز دیکامپایلر (Decompiler) نامیده می‌شود.