어떻게 고품질과 유지보수 가능한 코드를 작성합니까

6420 단어 프로그래머
우리는 어떻게 해야만 많은 주석을 쓸 필요가 없을 뿐만 아니라 코드가 이해하기 쉽다는 것을 보장할 수 있습니까?
그 중 하나는 코드를 문서화하는 것이다.주석을 쓰지 않아도 코드를 쉽게 유지할 수 있다는 장점이 있다.
다음은 코드를 문서화하는 세 가지 기본 방법입니다.
명명: 이름을 이용하여 변수, 함수 등의 목적을 해석한다.
봉인 함수: 특정 기능의 코드를 하나의 함수로 봉하여 명확한 목적을 가진다.
변수 가져오기: 표현식을 전용 변수에 삽입합니다.
이것은 보기에는 매우 간단해 보일 수 있지만, 실제 조작 과정에서 좀 까다롭다고 느낄 수 있다.우선 어떤 부분에 문제가 있고 어떤 부분에 이런 방법이 적용되는지 알아야 한다.
위의 세 가지 외에도 응용 범위가 비교적 넓은 방법도 있다.
클래스와 모듈 인터페이스: 클래스와 모듈의 함수를 노출시켜 코드를 더욱 뚜렷하게 한다.
코드 그룹: 그룹으로 서로 다른 코드 세션을 구분합니다.
이어서 우리는 어떻게 실제 응용에서 상기 다섯 가지 방법을 운용하는지 구체적으로 이야기할 것이다.

1. 이름 지정


먼저 코드가 문서화되도록 명명하는 방법을 어떻게 활용하는지 몇 가지 예를 보아라.
함수 이름 바꾸기
함수에 이름을 붙이는 것은 일반적으로 어렵지 않지만, 이 안에는 따라야 할 간단한 규칙도 있다.
예를 들어'handle'이나'manage'-handle Links,manage Objects와 같은 모호한 단어를 사용하지 마세요.
주동동사인 cutGrass,sendFile를 사용하여 함수가 주동적으로 집행되는 것을 나타낸다.
반환 값 유형인 getMagicBullet, READFILE을 지정합니다.강한 유형의 언어도 유형 식별자로 함수의 반환값 유형을 나타낼 수 있다.
변수 이름 바꾸기
단위 지정 - 숫자 매개변수가 있는 경우 단위를 추가할 수 있습니다.예를 들어, width 대신 widthPx를 사용하여 지정된 너비의 단위가 픽셀인 경우
단축키를 사용하지 마십시오. a와 b는 매개 변수 이름으로 사용할 수 없습니다.

봉인 함수


이 점에 관해서 우리는 코드를 어떻게 함수로 봉하는지 몇 가지 예를 들 것이다.이 밖에 이렇게 하면 중복 코드를 피할 수 있다는 장점도 있다.
코드를 함수로 봉인하다
이것은 가장 기본적인 것이다. 코드를 함수로 봉하여 그 목적을 명확하게 하는 것이다.
다음 줄 코드가 무엇인지 알아맞혀 보세요.
var width = (value - 0.5) * 16;

잘 모르는 것 같아요. 물론 주석이 있으면 뻔하죠. 하지만 우리는 함수로 포장해서 문서화를 실현할 수 있어요.
var width = emToPixels(value);

function emToPixels(ems) {
    return (ems - 0.5) * 16;
}

유일하게 바뀐 것은 계산 과정이 하나의 함수로 옮겨졌다는 것이다.이 함수명은 그것이 무엇을 하려는지 명확하게 표현했기 때문에 주석을 쓸 필요가 없다.그리고 필요하면 이 함수를 직접 호출해 일거양득으로 중복 노동을 줄일 수 있다.
함수 로 조건 표현식 을 표시 하다
If 문장은 여러 연산 대상을 포함하고 주석을 쓰지 않으면 이해하기 어렵다.
if(!el.offsetWidth || !el.offsetHeight) {
}

위의 이 코드의 목적을 아십니까?
function isVisible(el) {
    return el.offsetWidth && el.offsetHeight;
}

if(!isVisible(el)) {
}

사실 이 코드들을 하나의 함수에 봉인하기만 하면 쉽게 이해할 수 있다.

도입 변수


마지막으로 변수를 어떻게 도입하는지 다시 이야기해 봅시다.위의 두 가지 방법에 비하면 이것은 그렇게 유용하지 않을 수도 있지만, 어쨌든 아는 것이 모르는 것보다 낫다.
변수로 표현식 바꾸기
또는 위의 if문장의 예:
if(!el.offsetWidth || !el.offsetHeight) {
}

이번에 우리는 함수를 봉인하지 않고 도입 변수로 바꾸었다.
var isVisible = el.offsetWidth && el.offsetHeight;
if(!isVisible) {
}

변수 로 프로그램 을 바꾸다
우리는 또한 복잡한 양식을 명확하게 설명할 수 있다.
return a * b + (c / d);
var divisor = c / d;
var multiplier = a * b;
return multiplier + divisor;

클래스 및 모듈 인터페이스


클래스와 모듈의 인터페이스도 공공을 위한 방법과 속성이다. 어떻게 사용하는지 설명하는 문서와 비슷하다.
예를 들면 다음과 같습니다.
class Box {
    public function setState(state) {
        this.state = state;
    }

    public function getState() {
        return this.state;
    }
}

이 클래스는 다른 코드도 포함할 수 있다.나는 특별히 이 예를 들어 공공 인터페이스가 어떻게 문서화되는지 설명하고자 한다.
너는 이 종류가 어떻게 호출되었는지 말할 수 있니?이것은 결코 뚜렷하지 않다는 것이 매우 명백하다.
이 두 함수는 모두 합리적인 이름을 바꾸어 그것들의 목적을 표현해야 한다.그래도 우리는 어떻게 사용하는지 잘 모르겠다.그리고 더 많은 코드를 읽거나 문서를 뒤적여야 한다.
하지만 우리가 이렇게 고치면...
class Box {
    public function open() {
        this.state = open;
    }

    public function close() {
        this.state = closed;
    }

    public function isOpen() {
        return this.state == open;
    }
}

많이 알았지, 그렇지?우리는 단지 공공 인터페이스를 바꾸었을 뿐, 그 내부 표현은 원래의this와 같다는 것을 주의해 주십시오.state 상태가 같습니다.
이렇게 바꾸면 우리는 한눈에 어떻게 쓰는지 안다.원래의 그 함수명은 비록 괜찮았지만, 여전히 우리로 하여금 구름 속에 안개가 낀 것처럼 느끼게 하며, 차라리 후자가 단도직입적으로 말하는 것이 낫다.이렇게 작은 변동이 큰 영향을 미치는데, 왜 기꺼이 하지 않겠는가?

코드 그룹


그룹으로 서로 다른 코드 세션을 구분하는 것도 문서화의 한 형식이다.
예를 들어, 이 글에서 말한 것처럼, 우리는 가능한 한 변수를 그것을 사용하는 곳에 정의하고, 가능한 한 변수를 분류해야 한다.
이것 또한 서로 다른 코드 그룹 간의 관계를 지정하여 다른 사람들이 어떤 코드 그룹이 더 필요한지 알 수 있도록 할 수 있다.
다음 예를 살펴보십시오.
var foo = 1;

blah()
xyz();

bar(foo);
baz(1337);
quux(foo);

var foo = 1;
bar(foo);
quux(foo);

blah()
xyz();

baz(1337);

foo의 모든 사용 조합을 한데 놓으면 한눈에 여러 가지 관계를 알 수 있다.
그러나 때때로 우리는 중간에서 다른 함수를 호출해야만 한다.그래서 가능하다면 가능한 한 코드를 사용하여 그룹을 나누고, 안 된다면 강요하지 마라.

기타 건의


스스로 총명하다고 여기지 마라.다음 두 등가의 표현식을 보십시오:
imTricky && doMagic();

if(imTricky) {
    doMagic();
}

후자가 더 좋은 것은 분명하다.
명명 상수: 코드에 특수한 값이 있다면 명명하는 것이 좋습니다.var PURPOSE_OF_LIFE = 42;
규칙을 제정하다: 같은 명명 규칙을 따르는 것이 가장 좋다.이렇게 읽는 사람은 다른 코드를 참고하는 기초 위에서 각종 사물의 의미를 정확하게 추측할 수 있다.

결론


코드를 문서화하여 유지보수성을 높이는 것은 매우 긴 과정이다.모든 주석은 심혈을 기울여 써야 하기 때문에 가능한 한 간소화해야만 시간과 힘을 절약할 수 있다.
그러나 문서화된 코드는 문서와 주석을 영원히 대체할 수 없다.코드는 서술에 있어서 항상 제한이 있기 때문에 주석을 잘 쓰는 것도 빠질 수 없다.그 밖에 API 문서는 라이브러리에서 매우 중요하다. 코드를 읽는 것만으로는 이해할 수 없기 때문이다. 이 라이브러리가 정말 작아서 더 이상 작을 수 없기 때문이다.

좋은 웹페이지 즐겨찾기