php Code Refactoring Series - part8

سری پست های اصلاح کد ها در پی اچ پی
سری پست های اصلاح کد ها در پی اچ پی


اگر با سری پست های اصلاح کد های پی اچ پی آشنایی ندارید و یا سایر قسمت ها را نخوانده اید از اینجا شروع کنید:

https://virgool.io/@vahiiiid/php-code-refactoirng-series-introduction-pckzxvccjw6f


یکی از ویژگی هایی که در پی اچ پی ۷ اضافه شد null coalescing operator بود که بسیار پر استفاده و پر کابرد هست و به ما هم برای اصلاح و تمیز کردن کد ها کمک خواهد کرد.

این ویژگی برای جایگزین شدن به جای ترکیب استفاده از تابع ()isset و ternary اضافه شده یعنی به جای کد زیر می تونیم از null coalescing استفاده کنیم:

$username = isset($_GET['username']) ? $_GET['username'] : 'not passed';

به صورت زیر می توان کد بالا رو نوشت:

$username = $_GET['username'] ?? 'not passed';

خیلی ساده چک می کنه اگر یک متغیر تعریف نشده باشد و یا null باشد مقدار جدیدی را جایگزین می کند.

از اونجایی که این ویژگی syntax کوتاهی دارد و خوانایی کد رو بالا می برد خیلی خوبه که از اون تو کد ها استفاده کنیم.

اما بیاید یک نمونه از کاربرد اون رو با هم ببینیم:

یکی از جاهایی که میشه از اون کمک گرفت برای config های پیش فرض توی کدمون هست مثلا فرض کنیم آرایه ای داریم که مقادیر پیش فرض برای run شدن پروژه رو نگه می داریم و اگر مثلا کاربر پورت مورد نظر رو وارد نکند ما از مقدار پیش فرض خودمون استفاده می کنیم:

public function up(array $config)
{
    return new App(
        $config['ip'] ?? APP::DEFAULT_IP,
        $config['port'] ?? APP::DEFAULT_PORT,
        $config['retry_after'] ?? 60
    );
}

همان طوری که در کد بالا می بینید با استفاده از null coalescing تونستیم هر مقداری که به عنوان ورودی کانفیگ برای تابع ارسال نشده را جایگزین کنیم با مقادیر پیش فرض.

تنها نکته ای که باید در ذهن داشته باشید این هست که null coalescing فقط در حالت null و یا زمانی که متغیر تعریف نشده false می شود و مقدار دوم را برمی گردونه پس حتی زمانی که متغیر شما برابر false باشد، 0 باشد یا هر مقدار دیگری داشته باشد مقدار خود متغیر رو برمیگردونه.

حواستون باشه که null coalescing صحت متغیر شما رو بررسی نمیکنه!

اگر برای حالت های دیگر مانند false و یا 0 بودن (بررسی صحت داده) نیاز به بررسی متغیر داشتید می توانید از ویژگی ternary به صورت زیر استفاده نمایید:

$username = $result ? : 'خطایی در عملیات رخ داده است ';

در آخر تکه کد زیر با خروجی اون رو مشاهده کنید که کاملا گویای این نکته و تفاوت این دو ویژگی هست:

$a = false ?? 'a'
$b = false ?: 'b'

output:
$a -> false
$b -> 'b'


لطفا نظرتون رو توی کامنت ها بنویسید تا این سری پست های اصلاح کد های پی اچ پی رو با هم دیگه کامل تر کنیم.

معرفی و مشاهده سایر پست های اصلاح کد های پی اچ پی

راستی لایک هم لطفااااااا یادتون نره :)