루프 스위치시퀀스

Loop-switch sequence

루프 스위치시퀀스[1](일명 for-case[2] 패러다임 또는 Anti-Duff's Device)는 명확한 스텝세트가 루프 내 스위치로 구현되는 프로그래밍 안티패턴입니다.루프 스위치시퀀스는 스파게티 코드의 특정 파생 모델입니다.

루프 내에서 switch 문을 사용하는 것은 반드시 반대가 되는 것은 아닙니다.이미 알고 있는 일련의 스텝을 모델화하기 위해 사용되는 경우에만 잘못된 것으로 간주됩니다.루프 내에서 스위치를 올바르게 사용하는 가장 일반적인 예는 이벤트핸들러등의 제어의 반전입니다.이벤트 핸들러 루프에서는, 이벤트의 시퀀스를 컴파일시에 알 수 없기 때문에, 반복 스윗치는 필요성과 정확성이 모두 있습니다(이벤트 드리븐프로그래밍, 이벤트루프이벤트 드리븐 유한 상태 머신 참조).

이는 퍼포먼스 반대가 아니지만 언롤드루프가 없기 때문에 중대한 퍼포먼스 저하가 발생할 수 있습니다.오히려 명료한 반대편입니다.비사소한 예에서는 보다 간단한 리팩터링 솔루션보다 코드의 의도와 실제 기능을 해독하는 것이 훨씬 더 어렵습니다.

이벤트 드리븐 솔루션은 청취자 인터페이스를 구현합니다.

스트링 열쇠 = 무효; 스트링 가치 = 무효; 목록.< >스트링> 파라미터 = 무효; 인트 기둥. = 0;  일반의 무효 추가 토큰(상품권) {      // 키, 값, 세 개의 파라미터를 해석합니다.     전환하다 (기둥.) {         사례. 0:             파라미터 = 신규 링크 리스트< >스트링>();             열쇠 = 상품권;             브레이크.;         사례. 1:             가치 = 상품권;             브레이크.;         체납:             파라미터.더하다(상품권);             브레이크.;     }     한다면 (++기둥. >= 5) {         기둥. = 0;         완전한 행(열쇠, 가치, 파라미터);     } } 

그러나 청취자가 없으면 그것은 반향의 예가 된다.

// 키, 값, 세 개의 파라미터를 해석합니다. 스트링 열쇠 = 무효; 스트링 가치 = 무효; 목록.< >스트링> 파라미터 = 신규 링크 리스트< >스트링>();  위해서 (인트 i = 0; i < > 5; i++) {     전환하다 (i) {         사례. 0:             열쇠 = 개울..해석();             브레이크.;         사례. 1:             가치 = 개울..해석();             브레이크.;         체납:             파라미터.더하다(개울..해석());             브레이크.;     } } 

리팩터링된 솔루션은 다음과 같습니다.

// 키와 값의 해석 스트링 열쇠 = 개울..해석(); 스트링 가치 = 개울..해석();  // 3개의 파라미터 해석 목록.< >스트링> 파라미터 = 신규 링크 리스트< >스트링>(); 위해서 (인트 i = 0; i < > 3; i++) {     파라미터.더하다(개울..해석()); } 

레퍼런스

  1. ^ "Loop-switch sequences". LEVEL UP CODE. 30 November 2013. Retrieved 11 April 2016.
  2. ^ 일일 WTF에서의 FOR-CASE 패러다임과 스위치루프