LEN

关于代码风格的一些想法
今天中午先来没事看到下面这行代码:do { code ... } while(false) 好好查了一下,...
扫描右侧二维码阅读全文
23
2017/06

关于代码风格的一些想法

今天中午先来没事看到下面这行代码:

do {
    code ...
} while(false)

好好查了一下, 就是变相的goto 但goto会使代码层次不清晰, 并不推荐使用, 而 do{}while(false) 功能没有goto强大,
goto 可以向前向后跳, do{}while(false) 好像只能向后跳了.

我以前看到这种代码下意识认为是show逼格的, 但是最近开发项目中遇到的代码冗余问题, 让我明白了一些代码整洁的技巧,
在这里我总结一下先举个代码实例:

    if ($one) {
        $response = ['status' => 501,'desc' => '错误提示1'];
        echo json_encode($response);
        return;
    }

    if ($two) {
        $response = ['status' => 502,'desc' => '错误提示2'];
        echo json_encode($response);
        return;
    }

    if ($three) {
        $response = [
            'status' => 503,
            'desc' => '错误提示3'
        ];
        echo json_encode($response);
        return;
    }

    $response = [
        'status' => 200,
        'desc' => '成功'
    ];
    echo json_encode($response);

上面的代码写的很low 简单写下 就是我们能看到存在大量的重复代码, 就是返回的处理;
去过很多公司所以也见过几种特殊的写法解决上述问题.

  1. 通过引用的方式将status和desc 传递出来
$response = ['status' => 200,'desc' => '成功'];
$this->test($response);
echo json_encode($response);

function test(&response) {
    if ($one) {
        $response = ['status' => 501,'desc' => '错误提示1'];
        return;
    }
    if ($two) {
        $response = ['status' => 502,'desc' => '错误提示2'];
        return;
    }
    if ($three) {
        $response = ['status' => 503,'desc' => '错误提示3'];
        return;
    }
}
  1. 通过 do{}while(false) 将不想执行的代码break, 这种代码风格很少见
do{
    $var = 1;
    switch ($var) {
        case 1:
            $response = ['status' => 501,'desc' => '错误提示1'];
            break;
        case 2:
            $response = ['status' => 502,'desc' => '错误提示2'];
            break;
        case 3:
            $response = ['status' => 503,'desc' => '错误提示3'];
            break;
    }
} while (false);

echo json_encode($response);
  1. 还有一种是在我最近看到的风格十分迥异, try catch风格 用来写接口好处真心很多, 但仅限于接口;
<?php

$var = 1;
try {
    switch ($var) {
        case 1:
            new Exception('错误提示1', 501);
        case 2:
            new Exception('错误提示2', 502);
        case 3:
            new Exception('错误提示3', 503);
    }
} catch (\Exception $e) {
    $response = array(
        'status' => $e->getCode(),
        'desc' => $e->getMessage();
    );        
}

echo json_encode($response);

上面这种写法真心好处多多, 因为这是个控制器, 控制器下的模型通常我们也都需要加try catch
如果说最上层有这么个try catch 那么底层模型就无需添加了, 节省了很多部分代码. 而且生产环境下不会暴露太多错误;

应对不同场景, 选用不同代码风格, 团队开发最好还是需要一个规范指定好!

Last modification:June 23rd, 2017 at 08:36 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment