چرا متغیر‌های غیرضروری را باید از سورس‌کد حذف کرد؟

چرا متغیر‌های غیرضروری را باید از سورس‌کد حذف کرد؟

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

به‌عنوان یک قانون کلی، از متغیر‌ها نباید برای توضیح دادن کد‌ها استفاده کرد. به‌طورمثال، کاری که قرار است یک کامنت انجام دهد را در نامگذاری متغیرها لحاظ کرد؛ مسأله اینجا است که کد‌ها باید آن‌قدر واضح باشند که برای فهمیدن آن‌ها، نیازی به استفاده از متغیر‌ها و کامنت‌های اضافی نباشد.

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

راز‌های افزایش خوانایی سورس‌کد
در فرایند کدنویسی، عقل سلیم تمایل به استفاده از متغیر‌ها به‌منظور افزایش خوانایی سورس‌کد دارد، ولی این کار ۲ مشکل در پی خواهد داشت که عبارتند از:

۱. افزایش استفاده از متغیر‌ها باعث کاهش خوانایی کد‌ها می‌شود: استفادهٔ زیاد از متغیر‌ها باعث افزایش تعداد خطوط می‌شود و همچنین تعداد نام‌هایی که باید در حین کدخوانی به‌خاطر بسپارید را نیز افزایش می‌دهد. در همین راستا، بهتر است کدی که می‌نویسید شامل حداقل چیز‌هایی باشد که شما باید آن‌ها را درک کنید تا این که بخواهید یک خط را ۲ بار چک کنید تا دلیل استفاده از یک متغیر را بفهمید.

۲. یک متغیر، تقریباً هرگز یک میانبر برای خوانایی کد نیست: اگر دلیل استفاده از متغیر، افزایش خوانایی سورس‌کد است، در چنین شرایطی است که نگاه ما به متغیرها چیزی همچون Shortcut (میانبر) است؛ خوانایی سورس‌کد، از معماری خوب آن نشأت می‌گیرد و استفادهٔ بی‌جا از یک متغیر، کد را دارای نواقضی می‌کند که باعث مشکلاتی در توسعهٔ برنامه در آینده خواهند شد.

سناریو‌های استفادهٔ اشتباه از متغیر‌ها
مهم است که بدانیم موارد اشتباه در استفاده از متغیر‌ها چیست تا در زمان مطالعهٔ کد‌های خود و دیگران، آن‌ها را تشخیص داده و درصدد ریفکتور کردن آن‌ها برآییم.

متغیر کوچک: زمانی که از یک متغیر کوچک برای افزایش خوانایی سورس‌کد استفاده می‌کنیم، کدی مانند کد زیر به‌دست می‌آید (لازم به‌ذکر است که از زبان PHP برای نمایش نمونه کدها استفاده شده است):

$authorName = $this->getAuthorName();
echo "This is $authorName";

این متغیر به کسی کمک چندانی نمی‌کند. خیلی ساده ما درحال اضافه کردن یک خط به کد خود هستیم درحالی‌که ممکن است به‌نظر برسد این کار ما به خوانایی بیشتر کد کمک می‌کند، اما هیچ کمک قابل‌توجهی از جانب متغیر authorName$ به ما نشده است. درواقع، این کار ما همه‌چیز را خراب می‌کند زیرا هرکسی که بخواهد این کد را بخواند، باید به‌دنبال بخشی از کد باشد که متغیر authorName$ برای شناسایی محتوای آن تعریف شده باشد. کد بالا می‌تواند به‌صورت زیر بهبود یابد:

echo "This is " . $this->getAuthorName();

البته که این مثال یک نمونهٔ ساده است ولی شما با دانستن مسائلی از این دست، قادر به تشخیص استفادهٔ بی‌مورد از متغیر‌های کوچک در کد‌های پیچیده‌تر خواهید بود.

متغیر بلند: همیشه در کد‌ها جاهایی وجود دارند که نیاز به کدهای پیچیده‌تری دارند و در این موارد از متغیر‌ها به منظورخوانایی بیشتر سورس‌کد استفاده می‌شود. در این موارد، نام متغیر شامل تعداد کاراکترهای بیشتری نیز می‌شود؛ به‌عنوان مثال، کد زیر را در نظر بگیرید:

$kilometerToMileConverted = 1 * 0.621;
echo "1 Kilometer is equal to $kilometerToMileConverted mile(s)";

همان‌طور که مشاهده می‌شود، متغیری با نامی نسبتاً بلند داریم که مقادیرش هم به‌صورت استاتیک درنظر گرفته شده‌اند. در چنین شرایطی، راه‌کار مناسب آن است که فرمول خود را داخل یک Function (فانکشن یا تابع) قرار داده و کد را کمی داینامیک کرده و درنهایت آن‌را مورد استفاده قرار دهیم. برای نمونه داریم:

function kilometer2mile($input)
{
    $kilometerToMileConverted = $input * 0.621;
    echo "$input Kilometer is equal to $kilometerToMileConverted mile(s)";
}

kilometer2mile(100);

همان‌طور که مشاهده می‌شود، فانکشنی داریم تحت عنوان ()kilometer2mile که یک پارامتر ورودی می‌گیرد تحت‌عنوان input$. سپس فرمول محاسبهٔ خود را داخل فانکشن گذاشته و خروجی را echo می‌کنیم. در مثال فوق، چیزی که نمایش داده می‌شود به صورت زیر است:

100 Kilometer is equal to 62.1 mile(s)

استفاده از یک فانکشن در چنین شرایطی دارای مزایای زیر است:

- کد تمیز‌تر است. در هر قسمت کد، یک متغیر مشاهده نمی‌کنید، بلکه تنها یک فانکشن کوچک در کد، به چشم می‌خورد.

- کد قابل استفادهٔ مجدد است. شما می‌توانید از این فانکشن در هر کجای سورس‌کد استفاده کنید. علاوه‌بر این، فقط به‌جای یک عدد ثابت، می‌توان مقادیر متغیری برای تبدیل از کیلومتر به مایل استفاده نمود (همان‌طور که مشاهده می‌شود، در مثال بالا از پارامتر ورودی ۱۰۰ استفاده شده است).

- درک کد آسان است. با یک نگاه به ورودی ()kilometer2mile و خروجی، شما می‌فهمید که در چه زمانی این فانکشن چه نوع عملکردی از خود نشان خواهد داد.

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

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

منبع