코드의 길 - 코드의 정결과 논리

4585 단어
코드의 길 - 코드의 정결과 논리
대부분의 경우 우리는'코드가 간결할수록 좋다'는 말을 제창한다. 많은 사람들이 이 말의 뜻을 오해하는데 코드의 간결함은 간단하지 않다.
개인적으로 코드의 간결함에 주의해야 할 두 가지:
4
  • 1. 코드를 생략할 수 없고 간결함은 간단하지 않다

  • 4
  • 2. 코드가 간결한 차원은 추상적이고 구체적이다

  • 4
  • 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']);

    이 코드에 대해 여러분의 느낌이 무엇인지 모르겠습니다. 엄격하지 않고 코드가 간단하여 버그가 생기기 쉽습니다.
    다음은 코드 1-2가 표시하는 과정입니다.
    우리 6시에 학교 입구에서 출발하면 네가 먼저 택시를 타고 나는 뒷줄 오른쪽에 앉고 너는 뒷줄 왼쪽에 앉는다. 도착하면 내가 먼저 내리고 차문을 열어줄게. 같이 걸어서 영화관에 가자. 우리는 먼저 중간 위치를 사고 두 사람이 자리를 나누면 우리는 한 자리를 바꾼다. 중간 자리가 없으면 우리는 뒷줄 옆에 서서 영화를 볼 때,내가 안아줄게. 기다려.
    이것을 보고 모두들 웃고 싶을 것이다. 아마도 여자친구가 이런 말을 들은 후에'이 남자는 안 돼. 너무 수다스러워!'라는 생각이 들 것이다.
    전체 과정에서 많은 디테일이 드러났다. 사실 이런 디테일은 완전히 봉인할 수 있다. 코드는 이야기와 같이 우리가 보고 싶지 않은 과정, 디테일을 드러냈다. 예를 들어 어떻게 차에서 내리는지 이런 일은 영화를 보는 것과 상관없다. 우리는 이런 것에 관심이 없다. 여자친구가 이런 것들을 물었을 때만 우리는 그녀에게 이런 디테일을 알려준다.전체 과정을 직접 드러내는 것이 아니라
        
     //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에 문제가 존재한다. 주로 코드가 간결하지 않고 추상적이지 않다.이런 코드는 비록 매우 엄격하지만, 우리 코드가 필요로 하는 코드가 아닌지, 우리는 구체적인 것을 추상화해야 한다.
    다음은 우리가 한층 더 개선할 것이다.되다
    우리는 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;
         }

    전체 과정에서 우리는 최종 코드가 우리가 필요로 하는 것을 볼 수 있다.간단한 가치 부여 과정으로 개발자에게 많은 것을 배울 수 있다.
    코드를 쓰는 데는 엄격해야 하고, 엄밀한 과정에서 코드의 정결을 중시해야 한다.

    좋은 웹페이지 즐겨찾기