PHP의 IF-ELSE 명령문 수를 줄이는 방법은 무엇입니까?
-
05-07-2019 - |
문제
나는 많은 if-else 진술, 특히 다른 경우에 중첩 된 많은 If-Else 진술이 있음을 발견했습니다.이 진술은 내 코드를 읽기 쉽게 만듭니다. PHP의 다른 명령문을 줄이는 방법은 무엇입니까?
내 팁은 다음과 같습니다. 1. 스위치 명령문이 적합한 경우 스위치 문을 사용하십시오. 2. exit () 명령문이 가능할 때 사용하십시오. 3. 실현 가능할 때 제 3 진술을 사용하십시오.
다른 진술, 특히 중첩 된 if-else 문을 줄일 수있는 다른 팁이 있습니까?
해결책
코드를 소규모 작업 단위로 리팩토링하십시오. 너무 많은 조건부 로직은 코드 스 셀이며 일반적으로 기능을 리팩토링해야 함을 나타냅니다.
다른 팁
둥지 깊이를 줄이기 위해 가능한 경우 "조기 반환"을 사용하십시오. 부울 표현 평가를 사용하십시오.
예시:
function foo($param)
{
$ret = false;
if(userIsLoggedIn()) {
if(is_array($param)) {
if($param['count'] > 0) {
$ret = true;
}
else {
$ret = false;
}
}
}
return $ret;
}
다음과 같이 다시 작성할 수 있습니다.
function foo($param)
{
if(!userIsLoggedIn()) return false;
if(!is_array($param)) return false;
return $param['count'] > 0;
}
공식 학업 방법이 있습니다. if
조건, 호출 Karnaugh 매핑.
여러 테스트 조건이 필요하며 단순화 된 생성을 돕기 위해 노력합니다. if
필요한 모든 사례를 다루는 진술.
Wiki에서 그것에 대해 더 많이 배울 수 있습니다 여기.
3 대 연산자를 사용하고 코드를 리팩터링하고 다른 명령문이 필요한 모든 작업을 수행하는 함수 또는 클래스를 작성하십시오.
다형성은 몇 가지를 제거 할 수 있습니다.
나는 진화하는 비즈니스 논리로 가득 찬 많은 코드 작업을하고 있으며 격일로 수정해야합니다. 수정 사항을 유지하는 데 확실히 도움이되는 두 가지 팁은 다음과 같습니다. 가능한 한 빨리 다른 모든 진술을 피하고 반품/종료하십시오. 깊은 둥지에 들어 가지 마십시오 -> 하위 루틴/기능을 만듭니다.
명령문이 부정적인 것으로 바꾸면 코드가 상단에서 하단을 훨씬 쉽게 읽을 수 있습니다 (Condtion의 근접성 및 코드 블록) :
# business logic block
if ( $condition ) {
# do something
# code code code
} else {
# code code code
return;
}
# refactored:
if ( ! $contition ) {
# code code code
return;
}
if ( $condition ) {
# code code code
}
둘째, 가능한 빨리 반환/종료하십시오. 물론 내 의견이지만, 일단 서브 루틴의 결과를 이미 결정한 후에, 특히 코드를 위로 아래로 읽으려고 할 때 추가 조건/테스트를 진행하는 요점은 보이지 않습니다. 모든 모호성을 제거하면 상황이 더 간단 해집니다.
결론적으로, 나는 특히 BL의 긴 목록에서 다른 사용을 피하고 싶습니다. 결과를 알 자마자 반환하십시오. 둥지 레벨이 2 이상인 경우 하위 루틴/기능을 작성하십시오.