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

اسپاگتی کد Spaghetti Code

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

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

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

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

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

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

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

سورس کد Source Code

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

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

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

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

در کتاب‌های برنامه نویسی نیز از Source Code (قطعه کد)های ساده‌ای برای آموزش زبان‌های برنامه نویسی استفاده می‌شود. نمونه‌ای از چنین قطعه کدی در مثال زیر قابل مشاهده است. در این Source code برنامه سلام دنیا به زبان PHP نوشته شده است:

<?php 
echo "Hello, world!"; 
?>

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

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

کامپایلر Compiler

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

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

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

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

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

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

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

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