PHP 잡담'재 구성-기 존 코드 의 디자인 개선'의 4 가지 간략화 조건 식

소개 하 다.
조건 논리 가 매우 복잡 할 수 있 기 때문에 본 장 은 재 구성 기법 을 제공 하여 그것들 을 간소화 하 는 데 사용한다.
전문 약술(아래 내용 을 직접 뛰 어 넘 을 수 있 습 니 다)
핵심 재 구성:Decompose Conditional―분리'전철 논리'(switching logic)와'조작 디 테 일'(details)분리.
여러 테스트 에서 같은 결과 가 나 왔 습 니 다:Consolidate Conditional Expression
조건 부 코드 에서 중복 성분 제거:Consolidate Duplicate
표지 특수 상황:중첩 조건 을 가드 조항 으로 교체
싫어 하 는 제어 태그 제거:Remove Control Flag
전문 용어
decompse:분해,분리
consolidate:합병
적합 하 다
조각
nest:끼 워 넣 기
가드
clause:종문
polymorphism:다 중
assertion:단언
unchecked exception:제어 할 수 없 는 이상
Decompose Conditional
상황:당신 은 복잡 한 조건(if-else if-else)문 구 를 가지 고 있 습 니 다.그러면 if,else if,else 세 단락 에서 각각 함 수 를 추출 합 니 다.




Consolidate Conditional Expression
상황:일부 조건 테스트 가 있 습 니 다.모두 같은 결 과 를 얻 었 습 니 다.그러면 이 테스트 를 하나의 조건 식 으로 합 쳐 이 조건 을 하나의 독립 된 함수 라 고 추출 합 니 다.
동기:1.합병 후의 조건 코드 는"실제로 한 번 의 조건 검사 만 있 을 뿐,단지 몇 개의 병렬 조건 이 검 사 를 필요 로 할 뿐"이 라 고 말 할 것 이다.검사 의 의 도 를 더욱 명확 하 게 할 것 이다.
2.Extract Method 를 위 한 준비.검사 조건 을 하나의 독립 함수 로 추출 하여 코드 의 미 를 정리 하 는 데 매우 유용 하 다.그것 은'무엇 을 하 느 냐'는 문 구 를'왜 이렇게 하 느 냐'로 바 꾸 었 다.





조건문 의'합병 이유'도'합병 하지 말 라'는 이 유 를 지적 했다.만약 에 이런 검사 들 이 서로 독립 적 이 고 똑 같은 검사 로 간주 되 어 서 는 안 된다 고 생각한다 면 본 재 구성 을 사용 하지 말 아야 한다.이런 상황 에서 당신 의 코드 는 이미 자신의 의 미 를 분명하게 표현 하기 때 문 입 니 다.

Consolidate Duplicate Conditional Fragments
상황:조건 식 의 모든 분기 에 같은 코드 가 있 으 면 이 중복 코드 를 조건 밖으로 옮 깁 니 다.




Remove Control Flag
상황:일련의 불 표현 식 에서 특정한 변 수 는'제어 태그'역할 을 합 니 다.그러면 break 문 이나 return 문 구 를 제어 표 시 를 대체 합 니 다.




Replace Nested Conditional with Guard Clauses
상황:함수 의 조건 논 리 는 정상 적 인 실행 경 로 를 알 아 보기 어렵 습 니 다.그러면 위생 문(Guard Clauses)을 사용 하여 모든 특수 한 상황 을 표현 합 니 다.



조건 식 의 두 가지 형식:
1.모든 가 지 는 정상 적 인 행동 에 속 합 니 다.[if..else..]
2.조건 식 은 매우 보기 드물다.이 조건 을 단독으로 검사 하고 이 조건 이 진실 일 때 즉시 함수 에서 되 돌려 야 한다.이런 단독 검 사 는 흔히'위문'이 라 고 불 린 다.
Replace Nested Conditional with Guard Clauses 정수:특정한 부분 에 특히 중시 합 니 다.

Replace Conditional with Polymorphism
상황:대상 유형 에 따라 다른 행동 을 선택 하 는 표현 식 이 있 습 니 다.이 조건 식 의 모든 가 지 를 subclass 내 복사 함수 에 넣 고 원시 함 수 를 추상 함수 로 설명 합 니 다.

이 코드 의 나 쁜 맛:
1.너무 길 어서 동 영상 에 새로운 유형 이 있 을 때 더 길 어 집 니 다.
2.그것 은 분명히 한 가지 일 을 한 것 이 아니다.
3.그것 은 여러 가지 수정 이유 가 있 기 때문에 단일 권력과 책임 원칙 을 위반 했다.
4.새로운 유형 을 추가 할 때마다 수정 해 야 하기 때문에 개방 폐쇄 원칙 을 위반 합 니 다.하지만 가장 번 거 로 운 것 은 곳곳에 유사 한 구조 가 있 을 수 있다(get 형식 이름 Rank()의 함수 입 니 다.



Introduce Assertion
상황:특정한 코드 는 프로그램 상태(state)에 대해 특정한 가설 을 해 야 한다.그러면 단언(assertion)으로 이러한 가설 을 명확 하 게 표현 해 야 한다.

실행 결과:



실행 결과:

채 점:

1.이런 코드 가 자주 있 습 니 다.특정한 조건 이 사실 일 때 만 이 코드 가 정상적으로 작 동 할 수 있 습 니 다.실제 프로그램의 최종 완제품 은 종종 assertion 을 모두 삭제 합 니 다.
2.이러한 가설 은 코드 에 명확 하 게 나타 나 지 않 기 때문에 전체 알고리즘 을 읽 어야 알 수 있다.때때로 프로그래머 는 주석 으로 이런 가설 을 쓰 는데,assetion 은 더 좋 은 기술 이다.
3.assertion 은 조건 식 이 므 로 항상 진실 해 야 합 니 다.실패 하면 프로그래머 가 실 수 를 했다 는 뜻 이다.
4.assertion 은 교류 와 디 버 깅 의 보조 가 될 수 있다.커 뮤 니 케 이 션:프로그래머 가 코드 가 한 가설 을 읽 고 이해 하 는 데 도움 을 줄 수 있 습 니 다.디 버 깅:프로그래머 가 bug 를 찾 도록 도와 주 고 가장 가 까 운 곳 에서 bug 를 잡 을 수 있 습 니 다.
5.assertion 은 프로그램의 어떠한 행위 도 바 꾸 지 않 습 니 다.
6.assertion 가치:프로그래머 가 코드 의 정확 한 운행 에 필요 한 조건 을 이해 하도록 도와 준다.
7.assertion 의 조건 식 을 Extract Method 를 사용 하 는 것 이 좋 습 니 다.여러 곳 의 중복 코드 를 같은 함수 에 추출 하기 위해 서 는 조건 식 의 용 도 를 더욱 명확 하 게 설명 하기 위해 서 일 수도 있 습 니 다.
총결산
이 장 에서 저 는'Replace Nested Conditional with Guard Clauses'라 는 방식 을 좋아 합 니 다.저 는 평소에 코드 에서 도 자주 이렇게 사용 합 니 다.그리고 이런 방식 으로'위 종문'이 라 고 이름 을 지어 주 는 사람 도 있 습 니 다.
또 하 나 는 제 가 phop 개발 에 자주 사용 하 는 디 버 깅 은 var 입 니 다.dump()또는 printr(),저도 phop 에 assert 라 는 방식 이 있 는 것 을 처음 발 견 했 습 니 다.좋 습 니 다!
공부 하고 실천 하 는 과정 에서 저도 좋 은 방법 을 많이 배 웠 습 니 다.하지만 저 는 팀 개발 에서'대국 이 중요 하 다'고 생각 합 니 다.팀 의 습관 적 인 방식 으로 인 코딩 을 하거나 팀 과 소통 하여 인 정 받 은 후에 이 안의 방법 을 사용 하면 서로 상대방 의 코드 를 디 버 깅 하고 읽 을 때 편리 하 다 고 생각 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.