클래스는 고차 함수를 작성하는 멋진 방법일 뿐입니다.

5936 단어 beginners
조와 나는 최근 . 지금까지 본 교과서 중 가장 재미있었다고 말할 수 있습니다. 4개 또는 5개의 구성으로 시작하여 대수 방정식 솔버, 회로 시뮬레이터, 심지어 논리 프로그래밍 언어까지 구축한다고 상상해 보십시오. 이러한 소수의 구성으로 시작하기 때문에 추가 이점은 프로그래밍에서 근본적으로 단순하고 공유되는 본질을 보기 시작한다는 것입니다.

나는 책에서 나를 놀라게 한 한 가지 예를 들어주고 싶었다. 우리는 클래스가 함수와 근본적으로 다른 범주에 속한다고 생각하는 경향이 있습니다.

그러나 그들은 너무 다른가요?

예를 들어 다음과 같은 클래스가 있다고 가정해 보겠습니다.

class Person { 
  constructor(firstName, lastName) {
    this.fName = firstName; 
    this.lName = lastName;
  }
  getFullName() { 
    return this.fName + ' ' + this.lName;
  }
  setFirstName(firstName) {
    this.fName = firstName;
  }
}

글쎄, 우리가 그것에 대해 생각한다면, 이것은 정말로 고차 함수일 뿐입니다. Person 고차 함수는 인수(생성자)를 허용하고 해당 인수(메서드)를 조작할 수 있는 함수 목록을 반환합니다. 다음과 같이 Person 작성할 수 있습니다.

 function Person(firstName, lastName) {
  let fName = firstName; 
  let lName = lastName;

  function getFullName() { 
    return fName + ' ' + lName;
  }

  function setFirstName(firstName) { 
    fName = firstName
  }

  return function(method) { 
    switch (method) { 
      case 'getFullName': 
        return getFullName;
      case 'setFirstName': 
        return setFirstName;  
    }
  }
}

지금,

const person = new Person("Ben", "Bitdiddle")
person.getFullName()

된다

const person = Person("Ben", "Bitdiddle")
person('getFullName')()

여기서는 메서드를 호출하는 대신 메시지를 "전달"합니다. 이것이 바로 많은 고전적인 OO 사람들이 객체 지향이 실제로 메시지 전달에 관한 것이라고 말하는 이유입니다.

그래, 정말. 클래스는 인수(생성자)를 받아들이고 해당 인수(메서드)를 조작할 수 있는 함수 목록을 반환하는 고차 함수입니다.

이전에는 두 개의 개념이 다르다고 생각했지만 동일한 것으로 판명되면 새로운 아이디어를 발견할 수 있습니다. 두 개념 사이의 더 깊은 추상화를 찾고, 겉보기에 다른 범주에 걸쳐 아이디어를 적용하고, 개념 사이를 더 많이 이동할 수 있습니다. 유동적으로. 따라서 이러한 깨달음은 재미있을 뿐만 아니라 생각보다 훨씬 유용합니다.

이것을 좋아한다면 교과서에 비슷한 깨달음이 많이 있습니다. 그것을 가장 잘 경험하려면 파트너를 선택하고 함께 책을 통해 작업하는 것이 좋습니다.

이 에세이의 초안을 검토해 준 Daniel Woelfel, Alex Reichert, Jacky Wang에게 감사드립니다.

좋은 웹페이지 즐겨찾기