技术卡片 - 不要使用 else

这条规则带有争议性。实际上, if - else 的代码结构本身就很直观,只是说减少 else 的使用可以让代码显得更加的简洁。以下几个方法可以减少 else 的使用

提前返回

protected function getStoredRole($role)
{   

    if (is_numeric($role)) {
        return self::find($role);
    }

    if (is_string($role)) {
        return self::where('name', $role)->first();
    }

    return $role;
}

抛出异常

public function toJson($options = 0)
{
    $json = json_encode($this->jsonSerialize(), $options);

    if (JSON_ERROR_NONE !== json_last_error()) {
        throw JsonEncodingException::forModel($this, json_last_error_msg());
    }

    return $json;
}

手工捕获异常

function inverse($x) {
    if (!$x) {
        throw new Exception('除数为 0');
    }
    return 1/$x;
}

try {
    inverse(0) . "\n";
} catch (Exception $e) {
    return  $e->getMessage();
}

使用工厂方法重构业务逻辑

function singUp($subscription)
{
    if($subscription == 'monthly')
    {
        $this->createMonthlySubscription();
    } 
    else if ($subscription == 'forever')
    {
        $this->createForeverSubscription()
    }
}

重构

function singUp(Subscription $subscription)
{
    $subscription->create();
}

// 工厂方法
function getSubscriptionType($type)
{
    if($type == ' forever')
    {
        return new ForeverSubscription;
    }

    return new MonthlySubscription;
}

$subscription = getSubscriptionType($type);
signUp($subscription)
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 2

还有一个类型绑定

4年前 评论

我不知道为什么有些人会写一个超长的 if ,先构造 if 然后写代码?

if-return 10行以内可以大大的省下脑袋的栈空间

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!