ESP 8266 개발 여행 진급 편 ⑤ 코드 규범 - 글 쓰 는 것 처럼 아름답다.

9217 단어
1. 머리말
        전에 블 루 투 스 모듈 을 어떻게 하 는 지, 와 이 파이 모듈 을 어떻게 하 는 지, 제 이 슨 을 어떻게 하 는 지, 그리고 많은 친구 들 이 여러 가지 질문 을 남기 거나 직접 그의 코드 를 보 여 주 었 다. 그리고 나 는 어리둥절 한 표정 을 지 었 다.(코드 에는 여러 가지 abcd 변수 가 있 습 니 다. 여러 가지 방법 이 수백 줄 이 고 주석 도 없습니다. 제 마음 속 에는 만 마리 의 말 이 달 려 있 습 니 다) 그래서 이번 주제, 코드 규범 (물론 이것 은 제 코드 규범 경험 입 니 다. 경험 만 참고 하 는 것 입 니 다) 이 있 습 니 다.무엇 을 하 는 지 가르쳐 주 고 가장 기본 적 인 것 을 소홀히 했 습 니 다.비교적 쉽다.(코드 가 규범 에 맞지 않 고 주석 도 없어 서 자신 도 알 아 보지 못 하 는 경우 가 많다).
  • 공정 코드 규범
  • 함수 방법 규범
  • 호환성 규범
  • 2. 공정 코드 규범
    『 8194 』 공정 코드 규범 은 주로 전체 프로젝트 에 대해 규범화 된다.
    2.1 파일 이름
    2.1.1 오류 표기 법
  • 블 로 거들 은 대학 때 abcdxy 라 는 단일 자모 로 파일 이름 을 짓 는 것 을 매우 좋아 했 던 것 을 기억 하고 있다. 시간 간격 으로 코드 를 보 러 가 는 것 은 좀 어 리 석 었 다.
  • 2.1.2 추천 표기 법
  • 낙타 봉 식 대소 문자 (각 단어의 첫 글 자 는 대문자 이 고 나머지 는 초등학교), 예 를 들 어 블 루 투 스 등 프로젝트, 블 루 투 스 Led Pro, 8266 등 프로젝트 를 좋아 하고 블 로 거들 은 ESP 8266 Led Pro 라 고 명명 하 는 것 을 좋아 하 며 간단명료 하 다.
  • 2.2 파일 주석
            블 로 거들 은 이런 현상 을 자주 본다. 많은 어린이 신발 이 보 내 온 주요 공정 코드 는 기본적으로 주석 이 없다.
    2.2.1 오류 프레젠테이션
    예 를 들 어 블 루 투 스 프로젝트, 불합리한 코드 는 기본적으로 다음 과 같다.
    #include 
    #include 
    ............

    이 프로젝트 가 무엇 을 하 는 지 전혀 모 르 지 않 습 니까?
    2.2.2 추천 문법
    참고 문법 은 다음 과 같다.
    /**
    *   :2017/09/25
    *   :wifi+weather+oled   8266 
    *   :     
    * 16X16            +   +  
    **/
    #include 
    #include 
    .............

            일반적인 규범 적 인 표기 법 은 세 가지 w (who 작가, what time 이 언제 썼 는 지, doing what 라 는 코드 는 주로 어떤 기능 을 하 는 지, 물론 버 전이 교체 되 었 다 면 버 전 설명 을 추가 하 세 요) 입 니 다.
    2.3 상수
          상수, 기본적으로 고정된 설정 데이터 (포트 율, 배열 크기 등) 나 변 하지 않 는 문자열 을 자주 사용 합 니 다. 저 는 전체 대문자 로 쓰 는 것 을 추천 합 니 다. 코드 를 보 세 요.
    const unsigned long BAUD_RATE = 115200;                   // serial connection speed
    const unsigned long HTTP_TIMEOUT = 5000;               // max respone time from server
    const size_t MAX_CONTENT_SIZE = 1000;                   // max size of the HTTP response
     
    const char* host = "api.seniverse.com";
    const char* APIKEY = "wcmquevztdy1jpca";        //API KEY
    const char* city = "guangzhou";
    const char* language = "en";//zh-Hans            

          전체 대문자 표기 법 을 추천 하 는 이 유 는 우리 의 변 수 는 기본적으로 소문 자가 많 기 때 문 입 니 다. 상수 구분 을 위해 전체 대문자 가 가장 타당 합 니 다.       물론 저 에 게 문제 가 있 습 니 다. 대문자 도 있 고 소문 자 도 있 습 니 다. 잘못된 시범 으로 최대한 전체 대문자 규범 을 보 여 주 었 습 니 다.
    2.4 변수
    많은 초보 자 들 이 습관 적 으로 쓰 는 방법 은 abdcxyi 와 같은 흔 한 자모 로 변 수 를 명명 하 는 것 이다. 예 를 들 어:
    int a = 0;
    char b;
    int i = 0;//        

            제 가 개인 적 으로 추천 하 는 표기 법 은 접두사 m + 명칭 입 니 다.
    int mUserData;//    
    int mLastTime;//     

    3. 함수 방법 규범
            함수 방법 은 하나의 기능 에 대한 설명 이다. 그 다음 에 나 는 주로 몇 가지 측면 으로 나 누 어 나의 함수 규범 을 설명 할 것 이다.
    3.1 함수 방법 설명
    이것 은 가장 중요 한 점 입 니 다. 우선 이 함수 기능 이 무엇 인지 다른 사람 에 게 알려 야 합 니 다. 어떤 매개 변 수 를 입력 해 야 합 니까? 반환 값 이 있 으 면 어떤 내용 을 되 돌려 야 합 니까?
    /**
    * @desc       
    * @param host       
    * @param cityid   id
    * @param apiKey              
    * @return       
    */
    bool sendRequest(const char* host, const char* cityid, const char* apiKey) {
      // We now create a URI for the request
      //    
      String GetUrl = "/v3/weather/now.json?key=";
      GetUrl += apiKey;
      GetUrl += "&location=";
      GetUrl += city;
      GetUrl += "&language=";
      GetUrl += language;
      // This will send the request to the server
      client.print(String("GET ") + GetUrl + " HTTP/1.1\r
    " + "Host: " + host + "\r
    " + "Connection: close\r
    \r
    "); DebugPrintln("create a request:"); DebugPrintln(String("GET ") + GetUrl + " HTTP/1.1\r
    " + "Host: " + host + "\r
    " + "Connection: close\r
    "); delay(1000); return true; }
  • desc 표시 방법 기능 설명
  • param 은 입력 매개 변수 설명
  • 을 표시 합 니 다.
  • return 에 반환 값 이 있 으 면 반환 값 설명
  • 3.2 함수 방법 체
    일반적으로 하나의 방법 체 의 기능 이 간단 할 수록 좋다. 이것 은 디자인 원칙 안의 단일 원칙 으로 가능 한 한 세분 화 하 는 것 이다.오른쪽, 컴퓨터 화면 하나 로 다 볼 수 있 습 니 다. 코드 가 너무 많아 서 함수 방법 을 고려 하여 나 눌 수 있 습 니 다.
    3.3 함수 분할
    함수 분할 의 전 제 는 함수 가 단일 한 기능 을 완성 하 는 것 이다. 예 를 들 어 나 는 이런 표기 법 을 비교적 좋아한다.
    /**
    * @desc       
    * @param param   
    * @return  
    */
    void handleFunction(param) {
      handleFunctionA(param);
        handleFunctionB(param);
        handleFunctionC(param);
    }
     
    /**
    * @desc   A    
    * @param param   
    * @return  
    */
    void handleFunctionA(param) {
      
    }
     
    /**
    * @desc   B    
    * @param param   
    * @return  
    */
    void handleFunctionB(param) {
      
    }
     
    /**
    * @desc   C    
    * @param param   
    * @return  
    */
    void handleFunctionC(param) {
      
    }

            모든 기능 은 작은 방법 입 니 다. 그리고 큰 방법 으로 이런 작은 방법 을 호출 하여 필요 한 기능 을 완성 합 니 다. 예 를 들 어 와 이 파이 모듈 에서 날씨 정 보 를 얻 는 기능 은 우리 의 방법 으로 나 눌 수 있 습 니 다.
    /**
    * @desc       
    * @param param   
    * @return  
    */
    void getWeather(param) {
      sendRequest(param);
      readReponseContent(param);
      parseReponseContent(param);
    }
     
     
    /**
    * @desc     
    * @param param   
    * @return  
    */
    void sendRequest(param) {
      
    }
     
    /**
    * @desc       
    * @param param   
    * @return  
    */
    void readReponseContent(param) {
      
    }
     
    /**
    * @desc       
    * @param param   
    * @return  
    */
    void parseReponseContent(param) {
      
    }

          큰 방법 은 전체 획득 날씨 절 차 를 관리 하고 작은 방법 은 각자 의 업 무 를 책임 집 니 다. 요청 을 하고 요청 응답 데 이 터 를 얻 으 며 응답 데 이 터 를 분석 하 는 것 을 포함 합 니 다.
    3.4 함수 매개 변수
              많은 사람들 이 이 점 을 신경 쓰 지 않 을 것 입 니 다. 어차피 매개 변 수 는 그 안에 계속 넣 으 면 됩 니 다.         사실 매개 변 수 는 5 개 이내 가 괜 찮 습 니 다. 5 개 를 넘 으 면 방법 이름 뒤에 긴 것 이 연결 되 어 있 는 것 을 발견 할 수 있 습 니 다.         문제 가 되 지 않 습 니 다. 이 방법 이 여러 곳 에서 사용 되 었 다 고 가정 해 보 세 요.(도구 류 방법 은 항상 이 렇 습 니 다. 바로 그렇게 파도 입 니 다) 그러면 제 가 몇 개의 인 자 를 더 넣 어야 한다 고 가정 해 야 합 니 다. 제 가 호출 하 는 곳 마다 고 쳐 야 한 다 는 것 을 의미 하 는 것 이 아 닙 니까? (물론 새로운 방법 을 다시 쓸 수 있 습 니 다. 물론 좋아 하 셔 도 됩 니 다. 하지만 마침 이 방법 은 전체적인 변경 이 필요 합 니 다. 그러면 gg 를 준비 하 세 요).................................................................................................
    /**
    * @desc       
    * @param param1   1
    * @param param2   2
    * @param param3   3
    * @param param4   4
    * @param param5   5
    * @return  
    */
    void handleFunctionA(param1,param2,param3,param4,param5){
    }
     
     
    /**
    * @desc   B    
    */
    struct FunctionBParams {
        param1;//  1
        param2;//  2
        param3;//  3
        param4;//  4
        param5;//  5
        param6;//  6
    };
     
    /**
    * @desc       
    * @param FunctionBParams   
    * @return  
    */
    void handleFunctionB(FunctionBParams param){
    }

    이렇게 해서 매개 변 수 를 확장 시 켰 습 니 다. 원래 의 호출 논 리 를 바 꿀 필요 가 없습니다.
    3.5 if else or switch case 선택 곤란 증
            나의 건 의 는 3 개 이내 의 판단 용 if else 이 고, 3 개 이상 의 판단 은 switch case 를 사용 하 는 것 이다.............................................................................................
    4. 호환성 규범
            호환성 은 다 중 플랫폼 성 을 중시한다. 즉, 흔히 말 하 는 코드 여러 플랫폼 (arduino) 이다.위 에서 실행 합 니 다.좋 은 점 은 당신 의 설정 에 따라 서로 다른 코드 세그먼트 를 최종 코드 에 컴 파일 하면 우리 가 요구 하 는 다 중 플랫폼 성 을 실현 할 수 있다 는 것 입 니 다.
    /**
    *   :2017/09/14
    *   :wifi lamp arduino 
    *   :     
    **/
    #include 
    #include 
      
    const unsigned long BAUD_RATE = 115200;                   // serial connection speed
    const size_t MAX_CONTENT_SIZE = 50;
    const size_t t_bright=1,t_color=2,t_frequency=3,t_switch=4;
     
    //#define UNO      //uncomment this line when you use it with UNO board
    #define MEGA    //uncomment this line when you use it with MEGA board
     
    #ifdef UNO
     SoftwareSerial mySerial(10,11);
    #endif
      
    #ifdef UNO
    #define WifiSerial  Serial
    #define MyDebugSerial mySerial
    #endif
       
    #ifdef MEGA
    #define WifiSerial Serial1
    #define MyDebugSerial Serial
    #endif  
     
    //        DEBUG    ,        debug    
    #define DEBUG
    //           RGB         RGB
    //#define COMMON_GND
     
    #ifdef DEBUG
    #define DBGLN(message)    MyDebugSerial.println(message)
    #else
    #define DBGLN(message)
    #endif
     
    #ifdef UNO
    #define PIN_RED 3 //red   
    #define PIN_GREEN 5 //green   
    #define PIN_BLUE 6 //blue   
    #define PIN_ENABLE 9  //     pwm    
    #else
    #define PIN_RED 2
    #define PIN_GREEN 3
    #define PIN_BLUE 4
    #define PIN_ENABLE 5  
    #endif

            안에 스위치 가 있 는데 주로 UNO 와 MEGA 두 플랫폼 을 호 환 하여 원 키 전환 을 실현 합 니 다.           그리고 사용 할 때 어떤 플랫폼 인지 고려 하지 않 아 도 됩 니 다..................................................................................................
    /**
    *   RGB  
    */
    void colorRGB(int red, int green, int blue){
      #ifdef COMMON_GND
         analogWrite(PIN_RED,constrain(red,0,255));
         analogWrite(PIN_GREEN,constrain(green,0,255));
         analogWrite(PIN_BLUE,constrain(blue,0,255));
      #else
         analogWrite(PIN_RED,constrain(255-red,0,255));
         analogWrite(PIN_GREEN,constrain(255-green,0,255));
         analogWrite(PIN_BLUE,constrain(255-blue,0,255));
      #endif
    }

            RGB 코드 에서 공 음 공 양 을 호 환 한 다음 에 스위치 전환 을 설정 하면 됩 니 다. 사전 컴 파일 의 장점 은 당신 의 설정 에 따라 특정한 플랫폼 의 코드 를 바탕 으로 다 중 플랫폼 을 컴 파일 하 는 것 입 니 다.
    5. 총화
    코드 규범 은 문장 을 쓰 는 것 과 마찬가지 로 같은 제재, 다른 창작 방식, 얻 는 점수 도 다르다. 문장 은 간결 하지만 내용 은 꼼꼼 히 고려 해 야 한다.
    다음으로 전송:https://www.cnblogs.com/danpianjicainiao/p/11048561.html

    좋은 웹페이지 즐겨찾기