专栏首页蛋未明的专栏编码之道——代码的整洁与逻辑

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

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

     大部分时候我们都提倡一句话——“代码越简洁越好”,很多时候大家误解了这句话的意思,代码的简洁不是简单。

个人觉得代码的简洁要注意的以下两点:


  • 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 条评论
登录 后参与评论

相关文章

  • [推荐]php编码规范

    蛋未明
  • json_decode在php中的一些无法解析的字符串

    蛋未明
  • 同步调用、回调和异步调用区别

    蛋未明
  • 动手写一个 DQN 的棋牌 AI

    深度强化学习是学术界研制游戏 AI 的主流算法。这篇文章我们将用深度强化学习早期代表算法 DQN 算法探索棋牌 AI。

    AlgorithmDog
  • 数据结构和算法——快速排序

    快速排序也是一种分治算法,类似于合并排序。它通过从列表中选择一个元素(轴)并在其左侧放置小于轴的元素,在其右侧放置大于轴的元素来工作。我们对左侧和右侧重复上述步...

    Lemon黄
  • 使用StartSSL为你的服务器加密

    目前越来越流行https的网站了,作为个人如何给自己的web服务器升级呢?不要错过免费的StartSSL。

    zhangheng
  • Facebook开源游戏平台ELF:一个用于实时战略游戏研究的轻量级平台

    ELF是一个用于游戏研究的应用广泛的(Extensive)、轻量级的(Lightweight)、灵活的(Flexible)平台,特别适用于实时战略(RTS)游戏...

    CSDN技术头条
  • 视频api的演进

    本文是来自MHV(Mile High Video)2019的演讲,演讲者是来自MUX公司的流媒体专家Phil Cluff。本次演讲的主题为视频API的演进,主要...

    用户1324186
  • Python基础之异常相关知识

    当检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。

    海仔
  • 40张图看懂分布式追踪系统原理及实践

    在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成。这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用...

    kunge

扫码关注云+社区

领取腾讯云代金券