#[코드 재구성의 길]if/else-판단 논리 조정, 추출 방법, 논리 최적화
4826 단어 재구성
1. 앞말
2. 방법
3. 분해 조건 표현식 - 복잡한 조건의 분해
4. 병합 조건 표현식 - 반복된 반환 결과
5. 중복된 조건 세션-중복 코드 병합
1. 앞말
if/else는 자바 언어의 가장 기초적인 기능이다. if/else는 필수적이지만 if/else를 남용한다. 특히 각종 대량의 if/else 플러그인은 코드의 가독성, 유지보수성에 큰 해를 끼칠 수 있기 때문에 코드를 읽는 사람에게 재난이다.
코드를 재구성하는 목적은if/else를 없애는 것이 아니라, 모두가if/else를 어떻게 잘 쓰는지 하는 것이다
2. 방법
본 블로그에서 제가 소개한 방법은 판단 논리를 조정하고 추출하는 방법, 논리 최적화입니다. 이번에는 다음과 같은 재구성 기법을 소개합니다.
분해 조건 표현식
결합 조건식
반복되는 조건 세션 병합
우선 분해 조건 표현식if/else의 사용 장면, 복잡한 조건(if-then-else) 문장을 살펴보자.
3. 분해 조건 표현식 - 복잡한 조건의 분해
사례:
이전에 돼지고기의 자유를 예로 들면 내가 돼지고기를 사는 가격(가격=중량*단가)을 계산하려고 했는데 가격은 돼지고기의 자유 전과 자유 후의 단가가 다르다.
if(date.before(pigfreedom_start) || date.before(pigfreedom_end) )
price = weight * pigfreedomRate;
else price = weight * normalRate;
원인 분석:
복잡한 조건 논리는 종종 코드의 가독성을 떨어뜨려서 왜 이렇게 썼는지, 이렇게 쓴 의미가 무엇인지 알 수 없게 한다.
방법:
//
if(date.before(pigfreedom_start) || date.before(pigfreedom_end) )
price = weight * pigfreedomRate;
else price = weight * normalRate;
//
if(isPigFreedom(date))
price = pigFreedomAfter(weight);
else price = pigFreedomBefore(weight);
private boolean isPigFreedom(Date date){
return date.before(pigfreedom_start) || date.before(pigfreedom_end);
}
private double pigFreedomBefore(int weight){
return weight * normalRate;
}
private double pigFreedomAfter(int weight){
return weight * pigfreedomRate;
}
4. 병합 조건 표현식 - 반복된 반환 결과
병합 조건 표현식if/else의 사용 장면, 일련의 조건 테스트, 모두 같은 결과를 되돌려줍니다.
사례:
String buyPork(){
if (pig_price > 30) return "not buy";
if (pig_weight < 500) return "not buy";
if (notPigQuality) return "not buy";
}
원인 분석:
이상의 일련의 검사를 통해 우리는 검사 조건이 각각 다르지만 최종 행위는 일치한다는 것을 발견했다.
원래 코드가 표현한 정보는 다음과 같다. 여기에 일련의 조건 검사가 있는데 동시에 판단하고'동시 발생'을 해야 한다.무엇을 할 것인가
우리가 필요로 하는 표현은 한 번의 조건 검사만 있으면 되고 여러 개의'병렬'조건만 검사해야 한다는 것이다.왜 그랬을까
방법:
//
String buyPork(){
if (pig_price > 30) return "not buy";
if (pig_weight < 500) return "not buy";
if (notPigQuality) return "not buy";
}
// ,
String buyPork(){
if ((pig_price > 30) || (pig_weight < 500) || (notPigQuality))
return "not buy";
}
// --
String buyPork(){
if (isNotBuyPork()) return "not buy";
}
boolean isNotBuyPork(){
return ( (pig_price > 30) || (pig_weight < 500) || (notPigQuality) );
}
보충: 논리와 사용
//
String buyPork(){
if(pig_price < 30){
if(pig_weight > 500){
if(pigQuality){
return "buy";
}
}
}else{
return "not buy";
}
}
// ,
String buyPork(){
if( (pig_price < 30) && (pig_weight > 500) && (pigQuality) ) return "buy";
else return "not buy";
}
//
String buyPork(){
if(isBuyPork()) return "buy";
else return "not buy";
//
//return if(isBuyPork()) ? "buy" : "not buy";
}
boolean isBuyPork(){
return ( (pig_price < 30) && (pig_weight > 500) && (pigQuality) );
}
5. 중복된 조건 세션-중복 코드 병합
반복되는 조건 세션if/else의 사용 장면을 병합하여 조건 표현식의 각 지점에 같은 코드를 가지고 있습니다.
사례:
if(isPigFreedom){
total = price * 0.98;
buy();
}else{
total = price * 0.85;
buy();
}
원인 분석:
조건 표현식의 모든 지점이 같은 단락의 코드를 실행하여 코드가 불필요하게 생겼다.
방법:
//
if(isPigFreedom){
total = price * 0.98;
buy();
}else{
total = price * 0.85;
buy();
}
//
if(isPigFreedom){
total = price * 0.98;
}else{
total = price * 0.85;
}
buy();
사고:
추천서적: 기존 코드의 디자인 재구성 개선
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
트리 - 중간 순서와 앞 순서, 중간 순서와 뒤 순서로 두 갈래 트리 재구성제목: 두 갈래 나무의 앞 순서와 중간 순서의 결과를 입력하고 이 두 갈래 나무를 재건하십시오. 입력에 중복된 숫자가 없다고 가정하십시오. 예를 들어 앞 순서 반복 시퀀스 {1,2,4,7,3,5,6,8}와 중간 순서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.