ESP 8266 개발 여행 진급 편 ⑤ 코드 규범 - 글 쓰 는 것 처럼 아름답다.
전에 블 루 투 스 모듈 을 어떻게 하 는 지, 와 이 파이 모듈 을 어떻게 하 는 지, 제 이 슨 을 어떻게 하 는 지, 그리고 많은 친구 들 이 여러 가지 질문 을 남기 거나 직접 그의 코드 를 보 여 주 었 다. 그리고 나 는 어리둥절 한 표정 을 지 었 다.(코드 에는 여러 가지 abcd 변수 가 있 습 니 다. 여러 가지 방법 이 수백 줄 이 고 주석 도 없습니다. 제 마음 속 에는 만 마리 의 말 이 달 려 있 습 니 다) 그래서 이번 주제, 코드 규범 (물론 이것 은 제 코드 규범 경험 입 니 다. 경험 만 참고 하 는 것 입 니 다) 이 있 습 니 다.무엇 을 하 는 지 가르쳐 주 고 가장 기본 적 인 것 을 소홀히 했 습 니 다.비교적 쉽다.(코드 가 규범 에 맞지 않 고 주석 도 없어 서 자신 도 알 아 보지 못 하 는 경우 가 많다).
『 8194 』 공정 코드 규범 은 주로 전체 프로젝트 에 대해 규범화 된다.
2.1 파일 이름
2.1.1 오류 표기 법
블 로 거들 은 이런 현상 을 자주 본다. 많은 어린이 신발 이 보 내 온 주요 공정 코드 는 기본적으로 주석 이 없다.
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;
}
일반적으로 하나의 방법 체 의 기능 이 간단 할 수록 좋다. 이것 은 디자인 원칙 안의 단일 원칙 으로 가능 한 한 세분 화 하 는 것 이다.오른쪽, 컴퓨터 화면 하나 로 다 볼 수 있 습 니 다. 코드 가 너무 많아 서 함수 방법 을 고려 하여 나 눌 수 있 습 니 다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.