좋아, 제목은 약간의 clickbaity이지만 진지하게 말하고 있습니다. 잠시 동안 킥을 요구하지 마십시오 . 방법이 객체 지향 방식 으로 메시지 로 사용되도록 장려하는 방법이 마음에 듭니다. 그러나 이것은 내 머릿속에서 괴롭히는 잔소리가 있습니다.
잘 작성된 코드가 동시에 OO 원칙과 기능적 원칙을 따를 수 있다고 생각합니다. 나는 이러한 아이디어를 조정하려고 노력하고 있으며 내가 착륙 한 큰 문제는 return
입니다.
순수한 함수에는 두 가지 특성이 있습니다.
동일한 입력으로 반복해서 호출하면 항상 같은 결과가 나타납니다. 이는 변경할 수 없음을 의미합니다. 상태는 한 번만 설정됩니다.
부작용이 없습니다. 호출로 인한 유일한 변경은 결과를 생성하는 것입니다.
return
결과를 전달하는 방식으로 사용하지 않을 경우 어떻게 순전히 기능을 수행 할 수 있습니까?
텔은 요구하지 않는 일부 부작용을 고려할 것을 사용하여 아이디어 작품. 객체를 다룰 때 내부 상태에 대해 묻지 않습니다. 나는 내가해야 할 일을 말하고 내부 상태를 사용하여 내가 한 일로 무엇을 해야할지 파악합니다. 내가 말하면 나는 그 일을 묻지 않습니다. 나는 그것이 지시받은 것에 대해 무언가를했을 것으로 기대합니다.
나는 Tell, Do n't Ask를 캡슐화의 다른 이름 이상으로 생각합니다. 내가 사용했을 때 나는 return
무엇이 나를 불렀는지 전혀 모른다. 나는 그것이 프로토콜이라고 말할 수 없으며, 내 프로토콜을 다루도록 강요해야합니다. 많은 경우에 내부 상태로 표시됩니다. 노출되는 것이 정확하게 상태가 아니더라도 일반적으로 상태 및 입력 인수에 대해 약간의 계산이 수행됩니다. 인터페이스를 통해 응답하면 결과를 내부 상태 나 계산보다 의미있는 것으로 마사지 할 수 있습니다. 그것은 메시지 전달 입니다. 이 예제를 참조하십시오 .
과거에는 디스크 드라이브에 실제로 디스크가 있고 휠이 너무 차가워서 손가락으로 만질 수 없을 때 엄지 드라이브가 자동차에서 한 일이었던 때, 나는 성가신 사람들이 매개 변수가있는 기능을 어떻게 생각하는지 배웠습니다. void swap(int *first, int *second)
매우 편리해 보였지만 결과를 반환하는 함수를 작성하도록 권장되었습니다. 그래서 나는 이것을 믿음으로 생각하고 그것을 따르기 시작했습니다.
그러나 이제는 사람들 이 결과물을 보내는 위치를 객체로 구성하여 제어 할 수있는 아키텍처를 구축 하는 사람들이 있습니다. 다음은 구현 예 입니다. 출력 포트 객체를 주입하는 것은 다시 한 번 out 매개 변수 아이디어와 비슷합니다. 그러나 그것이 바로 요청하지 않는 대상이 다른 대상에게 수행 한 작업을 알려주는 방법입니다.
부작용에 대해 처음 알게되었을 때 출력 매개 변수와 같은 것으로 생각했습니다. 우리는 그 일 중 일부가 놀라운 방식으로, 즉 return result
대회 를 따르지 않음으로써 사람들을 놀라게하지 말라고 들었습니다 . 이제 부작용이 발생하는 병렬 비동기 스레딩 문제가 있다는 것을 알고 있지만 반환은 실제로 결과를 스택에 푸시하여 나중에 호출 할 수 있도록하는 규칙입니다. 그게 다야.
내가 정말로 물어보고 싶은 것 :
return
모든 부작용을 피하고 자물쇠없이 실 안전을 얻는 유일한 방법 입니까? 아니면 순전히 기능적인 방식으로 묻지 말아야 합니까?