스토어 패싱 스타일

Store-passing style

Store-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개의 값(통상 반환값과 이전에 변경 가능했던 변수의 상태를 나타내는 새로운 값)이 반환됩니다.

스토어 패싱 스타일은 쓰기가 매우 번거로울 수 있지만 함수 호출 내에서 상태를 분리함으로써 레이스 조건을 제거하는 데 도움이 되며 코드 병렬화가 더욱 용이해질 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Friedman, Daniel; Wand, Mitchell (April 2008). Essentials of Programming Languages (4th ed.). Boston, MA: MIT Press. ISBN 978-0262062794.
  2. ^ Krishnamurthi, Shriram (November 2012). Programming Languages, Application and Interpretation (Second ed.). self-published. Retrieved 10 February 2016.