zoukankan      html  css  js  c++  java
  • 让代码更容易读

    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.代码库越少越好

  • 相关阅读:
    GridView自定义分页
    intro
    ListView和DataPager初试
    在DataGrid中,如何录入数量及单价的时候自动算出金额
    常用正则表达式
    ASP.NET中基类页的设计和使用
    Asp.net实现无刷新检测用户名
    在asp.net2.0中使用存储过程
    .NET中的抽象工厂
    用C#生成随机中文汉字验证码的基本原理 [转]
  • 原文地址:https://www.cnblogs.com/itfenqing/p/8997256.html
Copyright © 2011-2022 走看看