编码之道——代码的整洁与逻辑

编码之道——代码的整洁与逻辑

大部分时候我们都提倡一句话——“代码越简洁越好”,很多时候大家误解了这句话的意思,代码的简洁不是简单。
个人觉得代码的简洁要注意的以下两点:

  • 1、不能省略代码,简洁不是简单;
  • 2、代码简洁的层面是抽象和具体;
  • 3、代码的逻辑一定要严谨;

像之前我老是一样他将代码的优化过程看作一件看电影的不。这里我也将整个代码的优化过程,举例为一个带女朋友去看电影,然后需要告诉女朋友如何去看电影的过程。
代码1-1表示的过程是
XX,我们去看电影吧,然后回来。
对于这个过程我们只看到了一个简单的目的,但是具体的一些细节我们忽略了,比如我们几点去看电影,在哪里看电影,去看什么电影等
代码1-1:
    //json from clinet is like {'name':'danhuang', 'age':23, 'other':{'t':'a'}}
     $mystr = $_GET['json'];
     $jsonArray = json_decode($mystr, true);
     $name = $jsonArray['name'];
     $age = jsonArray['age'];
     array_merge(array(), jsonArray['other']);


对于这段代码不知道大家的感觉是什么,不够严谨,代码简单,容易出现bug。

接下来我们做一些改变,代码1-2表示的过程是:
我们6:00从学校的门口出发,你先上的士,我坐后排右边,你坐后排左边,到了以后我先下车,然后帮你开车门,一起走路到电影院,我们先买中间的位置,如果两个人分开座位的我们就换一个位置,如果没有中间位置的,我们就做后排靠边,看电影时,我抱着你等等。
看到这个大家估计想笑,估计是女朋友听到这些后,会有一个想法“这男人要不得,太罗嗦啦!”。
从整个过程暴露了很多细节,其实这些细节完全可以封装,代码就像故事一样,暴露了一些我们不想看的过程、细节,比如说如何上车下车这种事情和看电影没关系,我们不关心这些,只有当女朋友问这些的时候,我们才告诉她这些细节,而不是直接暴露出整个过程。
 //json from clinet is like {'name':'danhuang', 'age':23, 'other':{'t':'a'}}
     if(!isset($_GET['json'])){
          echo "can not get json from clinet";
          exit;
     }
     $mystr = $_GET['json'];
     $jsonArray = json_decode($mystr, true);
     if(!$jsonArray){
          echo "can not json decode, mystr is not a json string";
          exit;
     }
    
     if(!(isset($jsonArray['name']) && isset(jsonArray['age']) && isset(jsonArray['other']))){
          echo "parameters error";
          exit;
     }
     $name = $jsonArray['name'];
     $age = jsonArray['age'];
     if(is_array(jsonArray['other'])){
          array_merge(array(), jsonArray['other']);
     } else {
          echo "other is not a array, please check it";
          exit;
     }

代码写完整以后,不知道大家是否已经看出,代码1-1存在的问题。虽然代码1-1的代码量很少,但是其中存在很多问题,特别是代码的逻辑严谨性。但是代码1-2还是存在问题,主要是代码不够简洁、抽象。这样的代码虽然很严谨,但是不是我们code需要的代码,我们应该将具体的东西抽象出来。

下面我们做进一步改进。可以理解为
我们6点从学校出发,打的到XX电影院门口,然后差不多7点到那里,看画皮2,大概9点钟看完,然后我们打的回来。
这整个过程很简洁,可以清晰的表达了我们去看电影的过程,一些细节的问题,我们并不暴露出来,而是把他隐藏起来,并不是说我们不知道这些细节,当女朋友问我“我们是坐中间还是坐边上”,像这种细节,她问了,我们才回答,而不是说我们直接的将这个细节暴露在看电影的过程中。
     $arr = decodeStrFromClinet('json');
     $checkRet = checkIssetKeyArr($arr, array("name","age","other"));
     if($checkRet){
          $name = $arr['name'];
          $age  = $arr['age'];
          if(is_array($arr['other'])){
               array_merge(array(), arr['other']);
          }
     }
    
     function checkIssetKeyArr($arr, $keyArr){
          if(!(is_aray($arr) && is_aray($keyArr))){
               echo "parameteres error. function checkIssetKeyArr"
               return false;
          }
          for($i=0; $i<count($keyArr); $i++){
               $arrKey = $keyArr[$i];
               if(!isset($arr[$arrKey])){
                    echo "arr is not include " . $arrKey ;
                    return false;
               }
          }
     }
    
     function decodeStrFromClinet($clinetKey){
          if(!isset($_GET['json'])){
               echo "can not get json from clinet";
               return null;
          }
          $arr = json_decode($_GET['json'], true);
          if($arr){
               return $arr;
          }
          echo "json is null, the str from clinet is not a json string";
          exit;
     }

从整个过程我们可以看到,最终的代码是我们需要的。一个简单的赋值过程,可以让开发者学到很多东西。
写代码要严谨,严谨过程中要注重代码的整洁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值