한 물건의 신분을 그것의 가치로 간주해야지, 그것의 용기가 아니다

유효한 코드를 작성하는 것은 매우 어렵다.나는 소프트웨어를 복잡하게 만드는 것을 탐색하고 더 좋은 코드를 어떻게 만드는지 배우려고 노력해 왔다.나는'더 좋다'는 주관적인 것이라고 추측하지만 이런 상황에서 내 말은'더 쉽게 바뀔 수 있다'는 것과'더 적은 실수'라는 것이다.State는 소프트웨어의 복잡화를 야기하는 중요한 요소이다.그러나 대부분의 유용한 일을 하는 코드는 상태가 필요하다.
우리가 이런 상태에 대한 모델링 방식은 코드를 이해하는 난이도에 중대한 영향을 미칠 것이다.이는 사실상 인용과 가치 평등의 의미로 귀결될 수 있지만 추상적인 용어와 현실 생활에서 진정으로 이야기하는 사람이 없는 일을 생각하는 방식이다.
컴퓨터에 관한 대화에서 이 화제를 감추기 쉽지만, 이것은 우리가 유효한 코드를 작성하는 능력에 중대한 영향을 미치기 때문에 확실히 생각할 만한 화제이다.

인용어의학
대부분의 유행어에서 모든 대상은 현재의 상태가 어떻든지 간에 독특하고 다른 것이다.JavaScript의 날짜를 예로 들면 다음과 같습니다.
> date = new Date() // Thu Jan 28 2021 21:54:34 GMT-0500 (EST)
> date.setDate(date.getDate() + 1) // 1611975274726
> date // Fri Jan 29 2021 21:54:34 GMT-0500 (EST)
> date === date // true

새 날짜를 만들고 그 날짜의 내부 상태를 변경합니다. 현재 값을 내일로 설정하지만, 같은 날짜라고 합니다.
문제는 날짜가 다르다는 것이다.1월 28일과 1월 29일은 다르지만, 대부분의 프로그래밍 언어에서 대상을 묘사하는 방식은 우리로 하여금 이런 부자연스러운 방식으로 사물이 무엇인지 생각하게 한다.
다른 한편으로는 혼란스럽다. 똑같은 것처럼 보이지만 실제로는 그렇지 않은 것들을 보면 자바스크립트에서처럼
[1, 2, 3] === [1, 2, 3] // false

보시다시피[1, 2, 3]는 실제로[1, 2, 3]와 똑같습니다. 많은 경우 프로그래밍을 통해 쉽게 검사할 수 있지만 대부분의 언어에서 그것들은 실제적으로 등가가 아닙니다. 왜냐하면 모든 사물(본례에서 1, 2, 3의 수조)은 유일한 실체이기 때문입니다.사물의 신분은 용기, 즉 모든 속성을 포함하는 대상으로 정의된다.이러한 속성의 현재 값은 이러한 언어의 객체 식별에 영향을 주지 않습니다.

다시 평등을 창조하다
이런 식으로 신분을 생각하면 우리는 사물의 평등한 의미를 재발명하게 된다.속성 용기를 대상 표지라고 부르는 언어에서 우리는 모든 새로운 유형의 대상이 특정 영역의 의미에서 평등한 의미를 다시 정의해야 한다.두 OBEJCT가 동일한지 확인하려면 속성의 현재 값이 동일한지 확인하기 위해 추가 코드를 작성해야 합니다.이것은 많은 추가 코드를 증가시킬 것이다.
이것은 또한 우리의 코드에 시간을 고려해야 하는 문제를 증가시켰다. 왜냐하면 이 세계에서 두 사물의 상등 여부는 당신이 검사할 때의 속성 값에 달려 있지만, 이것은 바뀔 수 있기 때문이다.두 가지 일이 동일한지 확인하려면 우주를 효과적으로 멈추고 스냅숏을 잡아야 한다.이 모든 것들은 코드에 불필요한 복잡성을 증가시켰다.이것은 논리적 구속의 결과가 아니라 언어에 의해 강요된 것이기 때문에 불필요한 것이다.

데이터에서 가치로 전환
우리는 한 사물의 신분을 하나의 용기에 포장하고 신분이라고 부르는 것이 아니라 직접적으로 그 가치로 간주함으로써 이런 문제를 해결할 수 있다.많은 언어의 등가물[1, 2, 3] === [1, 2, 3]이 사실이다. 우리는 그것이 사실이라는 것을 직관적으로 볼 수 있다.
이렇게 데이터를 직접 처리하면 추리하기 쉽고 모든 유형의 문제를 제거할 수 있으며, 언어가 가져온 문제가 아니라 실제 응용 프로그램을 처리할 수 있는 정신적 넓이를 방출할 수 있다.
너는 더 이상 어떤 영역을 비교해서 사물의 평등 여부를 판단하는지에 관심을 가질 필요가 없다.이것 또한 시간 문제를 해결했다. 왜냐하면 값 자체는 변할 수 없기 때문이다.2 영원히 2. 아무리 검사를 해도 다를 게 없다.이것은 코드의 대상이 변할 때 더 이상 관심을 가질 필요가 없다는 것을 의미한다. 만약 당신이 대상을 열고 직접 값을 처리한다면, 당신은 갑자기 코드의 일부분에 집중할 수도 있고, 코드의 나머지 부분이 현재 처리하고 있는 값에 어떻게 영향을 미칠지 더 이상 관심을 갖지 않을 수도 있다.

인용어의 는 불필요한 복잡성 을 증가시켰다
이런 방식으로 코드를 작성하는 것은 누드적이고 변하지 않는 데이터 구조를 사용하는 것이다. 가장 큰 장점은 전체 코드 라이브러리의 복잡성을 낮추는 것이다.주어진 사물의 가치는 항상 투명하며 시간에 따라 영원히 바뀌지 않는다.이것은 우리가 더 이상 관심을 갖지 않을 수 있는 모든 복잡성을 없앴다.너는 더 이상 다른 방법이 네가 사용하고 있는 물건을 몰래 바꿀 것을 걱정할 필요가 없다.너도 언제 일이 일어날지 더 이상 신경 쓸 필요가 없다.당신이 어떤 가치관을 처리하든지 간에 현재의 환경은 정태적이라는 것을 항상 알 수 있다.
Clojure는 기본적으로 이런 언어로 설계된 언어이지만 다양한 언어로 이런 방식으로 코드를 작성할 수 있다.해봐, 네가 어떻게 생각하는지 봐!

좋은 웹페이지 즐겨찾기