• 让代码更容易读


    1.选择具体,避免空泛,找到更有表现力的词
    fetch和download要比泛泛的get好
    deliver,dispatch,route,distribute要比send更加明确

    2.循环结构中使用i,j,k;如果更加精确的可以使用userI或user_i(驼峰或下划线命名任选其一)

    3.为变量名附加更多的信息,使其更容易读.
    hexId // 十六进制id
    startMs // 开始时间,单位毫秒
    elapsedSecs // 消耗的时间,单位秒

    4.附加额外信息
    plaintextPassword //纯文本格式密码,需要加密后使用
    unescapteComment //需要转义后才能使用
    htmlUtf8 //已转化为utf8格式
    dataUrlenc //url编码的输入数据

    5.在小的作用域里可以使用简短的名字
    如: TaelService $m;

    6.丢掉没用的词:
    convertToString() 可以替换为 toString()

    7.利用名字格式来传递含义
    类名大驼峰格式: ClassName
    变量小驼峰: fooName
    常量: CONST_NAME

    8.避免歧义
    如从数据库获取数据:
    db->filter('year<=2017'); 这儿的filter我们不清楚是挑出符合规则的数据,还是减掉符合规则的数据.

    下面的相对来讲语义更加明确
    db->where('year<=2017')->get();

    9.min/max(包含)表示极限

    10.first/last表示包含范围

    11.begin/end表示包含/排除的范围

    12.给bool值命名
    readPassword 是需要读取密码,还是已经读取了密码,不如needPassword只管或者userIsAuthenticated只管
    给bool值加上is,has,can或should这样的词,可以使语义更加明确

    13.避免使用反义词
    $disableSsl = false;
    应该用
    $useSsl = true;

    14.与使用者的期望相匹配
    如使用者总是期望get和size方法不需要做过多的计算.就名字而言大部分人的理解是count比size需要更多的操作.

    15.临时变量应该是对原有变量的处理后使用,否则就不要使用临时变量.

    15.源代码布局一致原则:
    A.使用一致的布局
    B.相似的代码应该看起来一致
    C.相关的代码行分组,形成代码块

    16.添加额外的方法来整理不规则的东西

    17.需要时使用列对齐
    $rule = [
    'name' => 'required|between:2,50',
    'content' => 'required|between:10,500',
    'limitnum' => 'required|integer|between:10,1000',
    'level' => 'required|integer|between:1,500',
    'img' => 'required|mimes:jpeg,bmp,png,gif|image|max:1024k'
    ];

    18.选择一个有意义的顺序,并始终使用它.
    比如html中的表单应以重要到不重要的次序来排列,其次以字母顺序来排序.php接收表单值也应该如此
    $name = Input::get('name');
    $age = Input::get('age');

    19.if左边的值应该是变量,右边的值应该是常量

    20.除非逻辑简单(比如只对条件检查就返回值), 否则就不要用三目运算符

    21.在函数中提前返回,在循环中提前使用break或continue;通过提早返回来减少嵌套

    22.多个if时,应该先处理正确的/简单的/有趣或可疑的情况
    $age = intval($rawAge);
    if ($age <= 0) {
    return '年龄错误';
    }
    if ($age > 100) {
    return '年龄错误';
    }

    if ($age > 0 && $age < 20) {
    return '青年';
    }

    先处理正确的
    if ($flag === true) {
    .....
    }

    23.拆分超长的表达式,如:
    if (trim(explode($rawStr, ',')[0]) === 'test') {
    ...
    }

    可以拆分为:
    $users = trim(explode($rawStr, ',')[0]);

    24.总结变量
    if ($request->uid === $user->id) {
    ...
    }
    就可以写成:
    $userOwnsDocument = ($request->uid === $user->id);

    25.德摩根定理(分别取反,转换与/或):
    if (! $a && ! $b && ! $c) {

    }
    要比下面的代码更具可读性
    if (! ($a || $b || $c)) {

    }

    26.不要滥用短路逻辑,但以下逻辑是合理的
    if($object && $object->userName) {
    ....
    }

    27.更改复杂的逻辑,变的简单优雅:

    return ($begin >= $other->begin && $begin < $other->end) || ($end >= $other->begin && $end <= $other->end);

    可以拆分为:
    if ($other->end <= $begin) {
    return false;
    }

    if ($other->begin >= $end) {
    return false;
    }

    return true;

    28.拆分巨大的语句:

    29.减少变量,对于只出现一次的变量,不必声明.减少控制流的变量.

    30.缩小变量作用域;如

    class Object
    {
    private $str;

    public function method1()
    {
    $this->str = '...';
    $this->method2();
    }

    public function method2()
    {
    $this->str = '...';
    }
    }

    str只有method1和method2中用到,所以应该将其缩小作用域.
    class Object
    {
    public function method1()
    {
    $str = '...';
    $this->method2($str);
    }

    public function method2($str)
    {
    ....
    }
    }

    31.能用静态方法就用静态方法.

    32.多使用常量;只写一次的变量更好.提前返回避免中间变量.

    33.积极的发现并抽取不相关的子逻辑.

    34.代码一次只做一件事情

    35.代码库越少越好

  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/itfenqing/p/8997256.html
Copyright © 2020-2023  润新知