스토어 패싱 스타일
Store-passing styleStore-passing 스타일은 가변 상태를 [1][2]사용하지 않고 가변 상태를 모델링하는 데 사용되는 프로그래밍 기법입니다.이는 일반적으로 필수 프로그램을 순수하게 기능하는 프로그램으로 전환하는 과정에서 발생합니다.
예를 들어 다음과 같은 JavaScript 프로그램을 비스토어 패싱 스타일로 작성했습니다.
변화하다 라스트와사 = 거짓의 // 트리빈은 문자열의 이진 트리를 나타냅니다. // 트리빈은 다음 중 하나입니다. // - 문자열 또는 // - {l: <treebin>, r: <treebin>} // 이 트리의 트리를 순서대로 트래버설합니다. // 잎에 'a' 뒤에 'b'가 붙는다? 기능. aThenB(트리빈) { 한다면 (유형(트리빈) === "문자열') { 한다면 (트리빈 === "a") { 라스트와사 = 진실의; 돌아가다 거짓의; } 또 다른 한다면 (트리빈 === "b") { 한다면 (라스트와사) { 돌아가다 진실의; } 또 다른 { 라스트와사 = 거짓의; 돌아가다 거짓의; } } 또 다른 { 라스트와사 = 거짓의; 돌아가다 거짓의; } } 또 다른 { // 문자열이 아닌 내부 노드여야 합니다. 돌아가다 ((aThenB(트리빈.l)) (aThenB(트리빈.r))); } }
여기에는 글로벌 변수에 대한 참조가 포함됩니다.스토어 패스 스타일에서는 글로벌 변수(또는 변수) 값이 각 콜에 전달되며 각 콜에서 반환되어 다음 콜에서 스레드됩니다.코드는 다음과 같습니다.
기능. aThenB(트리빈, 라스트와사) { 한다면 (유형(트리빈) === "문자열') { 한다면 (트리빈 === "a") { 돌아가다 {결과: 거짓의, 라스트와사: 진실의}; } 또 다른 한다면 (트리빈 === "b") { 한다면 (라스트와사) { 돌아가다 {결과: 진실의, 라스트와사: 거짓의}; } } 또 다른 { 돌아가다 {결과: 거짓의, 라스트와사: 거짓의}; } } 또 다른 { // 문자열이 아닌 내부 노드여야 합니다. 변화하다 왼쪽 콜 = aThenB(트리빈.l, 라스트와사); 한다면 (왼쪽 콜.결과) { 돌아가다 {결과: 진실의, 라스트와사: 거짓의} } 또 다른 { 돌아가다 aThenB(트리빈.r, 왼쪽 콜.라스트와사); } } }
각 콜에는 추가 인수가 사용되며, 2개의 값(통상 반환값과 이전에 변경 가능했던 변수의 상태를 나타내는 새로운 값)이 반환됩니다.
스토어 패싱 스타일은 쓰기가 매우 번거로울 수 있지만 함수 호출 내에서 상태를 분리함으로써 레이스 조건을 제거하는 데 도움이 되며 코드 병렬화가 더욱 용이해질 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Friedman, Daniel; Wand, Mitchell (April 2008). Essentials of Programming Languages (4th ed.). Boston, MA: MIT Press. ISBN 978-0262062794.
- ^ Krishnamurthi, Shriram (November 2012). Programming Languages, Application and Interpretation (Second ed.). self-published. Retrieved 10 February 2016.