이 함수형 프로그래밍 트릭으로 JavaScript OOP 코드를 더 잘 구성하십시오.
6288 단어 reactvuewebdevjavascript
순수 함수
함수형 프로그래밍의 주요 특징 중 하나는 순수 함수의 개념입니다.
순수 기능:
동일한 인수로 호출할 때 항상 동일한 값을 반환합니다
범위를 벗어나는 변수를 변경하지 마십시오
순수 함수는 다음과 같습니다.
function add(a, b) {
return a + b;
}
클래스 메서드
클래스 메서드는 일반적으로 순수 함수의 반대입니다.
클래스 메서드의 목적은 일반적으로 클래스 인스턴스에서 어떤 방식으로든 작동하는 것입니다(물론 다른 작업도 수행할 수 있음).
class Point {
add(point) {
this.x += point.x;
this.y += point.y;
return this;
}
}
const point = new Point(2, 3);
const point2 = point.add(new Point(3, 4));
일이 엉망이 될 수 있는 방법
이러한 방식으로 메서드를 사용할 때 자주 발생하는 문제는 항상 동일한 클래스 인스턴스에서 작업한다는 것입니다. 이것은 사용 중인 개체가 하나 또는 두 개뿐일 때 괜찮습니다.
그러나 코드에서 사용해야 하는 작업과 개체가 많을수록 인스턴스에 대한 참조를 추적하고 코드의 다른 부분에서도 실수로 참조하는 개체를 변경하지 않도록 해야 합니다.
예를 들어 이 moment.js 코드를 보십시오.
const startedAt = moment();
const endedAt = startedAt.add(1, "year");
console.log(startedAt); // > 2020-02-09T13:39:07+01:00
console.log(endedAt); // > 2020-02-09T13:39:07+01:00
startedAt
메서드는 위의 add
클래스에서 정의한 add
메서드와 매우 유사하게 작동하기 때문에 둘 다 같은 시간에 기록합니다.발견하기 쉬운 문제처럼 보이지만 여러 개체와 관련된 작업 행이 약 15개 있다고 상상해 보십시오. 다른 모든 줄에서 console.logs를 채울 시간입니다.
더 나은 방법
이러한 간단한 예를 통해 답은 명확해야 합니다. 방법을 "순수하게"만들어야 합니다.
내가 "순수"라고 말하는 이유는 우리가 가장 중요하게 생각하는 특성이 어떤 값도 변경해서는 안 된다는 것이기 때문입니다.
Point
의 클래스 Point
메서드를 다시 작성해 보겠습니다.class Point {
add(point) {
return new Point(this.x + point.x, this.y + point.y);
}
}
이제 동일한 인스턴스에 대한 참조를 반환하는 대신 완전히 새로운 인스턴스를 만듭니다.
기존 변수를 변경하는 것에 대해 걱정할 필요가 없기 때문에 지금 원하는 모든 방법을 연결할 수 있습니다.
const point1 = new Point(2, 3);
const point2 = new Point(3, 4);
const point3 = point1
.add(point2)
.add(point1)
.add(point2);
이 방법으로 클래스를 구조화하면 디버깅 및 단위 테스트가 더 쉬워집니다. 이제 변수가 올바르게 변경되는지 확인하는 대신 출력을 직접 테스트할 수 있기 때문입니다.
또 다른 좋은 이점은 Vue 및 React와 같은 라이브러리의 반응성 시스템과 잘 작동한다는 것입니다. 새 인스턴스를 만들면 "반응성"이 트리거됩니다.
Reference
이 문제에 관하여(이 함수형 프로그래밍 트릭으로 JavaScript OOP 코드를 더 잘 구성하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andi23rosca/organize-your-javascript-oop-code-better-with-this-functional-programming-trick-2a9e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)