문제

내 개인 프로그래밍 악마 중 하나는 항상 IF 문 (또는 비슷한)에 의해 제어되어야하는 복잡한 논리였습니다. 항상 그렇게 복잡한 것은 아니며, 때로는 몇몇 주만이 필요합니다.

설계 시간 동안 개발자가 수행 할 수있는 도구 나 단계가 있습니까? 그 선을 따라 매트릭스 나 뭔가를 그리는 것 같아요 ...?

도움이 되었습니까?

해결책

기본 코스를 추천합니다 제안 논리 모든 야심 찬 프로그래머에게. 처음에는 표기법과 그리스 문자가 수학 혐오에 빠지는 것처럼 보일 수 있지만 실제로는 스킬 셋에서 가장 강력한 (그리고 종종) 도구 중 하나이며 핵심에서 간단합니다.

그만큼 기본 연산자, De Morgan 's 그리고 기타 기본 법률, 진실 테이블, 예를 들어의 존재 불법 행위 그리고 결합 정상 형태 나에게 눈을 뜨게했다. 내가 그들에 대해 배우기 전에, 조건부 표현은 위험한 짐승처럼 느껴졌습니다. 그 이후로, 나는 무거운 포병을 깨뜨려 필요할 때마다 제출할 수 있다는 것을 알고 있습니다!

다른 팁

진실 테이블은 기본적으로 철저한 접근 방식이며 모든 가능성을 강조합니다.

당신은 살펴보고 싶을 것입니다 Microsoft Pex, 당신이 생각하지 않은 프린지 케이스를 발견하는 데 도움이 될 수 있습니다.

개발자가 Complex If Code를 다룰 때 자신의 삶을 편하게 만드는 방법을 묻고 있다고 생각합니다.

코드가 복잡한 것을 처리하는 방식은 가능한 한 평평한 코드와 모든 부정을 먼저 제거하는 것입니다. 위에 일부를 배치하여 화합물을 제거 할 수 있다면 그렇게하십시오.

단순함의 아름다움은 책이나 수업을 배우지 않는다는 것입니다. 분해 할 수 있다면 그렇게하십시오. 일부를 제거 할 수 있다면 그렇게하십시오. 이해하지 못하면 다르게 수행하십시오. 그리고 아파트는 거의 항상 중첩보다 낫습니다 (Python에게 감사합니다!).

읽는 것이 더 간단합니다.

if(broken){
  return false;
}
if (simple){
  doit();
  return true;
}
if(complicated){
  divide();
  conquor();
}
if(extra){
  extra();
}

읽는 것보다 :

if(!broken && (simple || complicated)){
 ....
}
return false;

진실 테이블 및 단위 테스트 - 테이블 (n 변수의 N 차원)을 그린 다음 이들을 단위 테스트에 입력으로 사용하여 각 변수 조합을 테스트하고 결과를 확인할 수 있습니다.

복잡한 IFS로 몇 년 동안 본 가장 큰 문제는 사람들이 모든 지점을 테스트하지 않는다는 것입니다. 아무리 가능성이없는 것처럼 보이도록 가능한 각 지점에 대한 테스트를 작성하십시오.

당신은 또한 시도하고 싶을 수도 있습니다 Karnaugh지도, 최대 4 개의 변수에 적합합니다.

당신이 아직 없다면, 나는 읽는 것을 강력히 제안 할 것입니다 코드 완료. 이와 같은 주제에 대한 많은 조언이 있습니다. 나는 현재 내 사본이 없다. 그렇지 않으면 책 에이 섹션의 요약을 게시 할 것이다.

논리를 각각 고유 한 변수로 이산 단위 (A && B 등)로 나눕니다. 그런 다음 필요한 논리를 사용하여 제작하십시오. 복잡한 진술이 상당히 읽을 수 있도록 각 변수의 이름을 적절한 것으로 지정하십시오 (여러 줄과 몇 가지 임시 변수가 필요할 수 있지만).

가드 진술로 논리를 처리 할 수없는 이유가 있습니까?

Karnaugh지도 진실 테이블 (Visage에서 제안)에서 정보를 가져 와서 소형 및/또는 표현으로 전환하는 좋은 방법이 될 수 있습니다. 이들은 일반적으로 EE 디지털 로직 과정에서 진행됩니다.

디자인 패턴을 사용해 보셨습니까? 전략 패턴으로 알려진 것을 조사 할 수 있습니다. http://en.wikipedia.org/wiki/strategy_pattern

핵 옵션을 확인하십시오 : 침포. 그것에 대해 많은 것이 있습니다.- 하루나 이틀 동안 문학을 잊어 버렸습니다. 그러나 복잡한 if-then 논리가 프로젝트의 진화하는 부분 인 응용 프로그램이있는 경우 (예 : 모듈 식 알고리즘이있는 응용 프로그램) 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top