boolean 표현식

boolean 테스트에서 true/ false 사용하기

0과 1보다는 코드의 가독성을 높이기 위해서 true/false를 사용하도록 한다. 언어가 지원이 안되면 매크로를 써서라도 쓴다

복잡한 표현식을 단순하게 만들기

  • 새로운 불린 변수를 사용하여 복잡한 테스트를 부분적인 테스트로 만들어라
  • 복잡한 표현식을 불린 함수로 이동시켜라
  • 복잡한 조건을 대체하기 위해서 결정 테이블을 사용해라

 

불린 표현식을 긍정적으로 작성하기.

  • if문에서는 부정문을 긍정문으로 변환한 다음 if절과 else절에 있는 코드를 바꾼다. if(!statusOK) 이런 식의 표현식은 가독성을 떨어뜨린다
  • 부정 불린 테스트를 단순화하기 위해서 드모르간 법칙을 적용하라. - 드모르간 법칙을 이용해서 동일한 의미를 가지면서 가독성이 높은 코드를 만든다

ex 자바로 작성한 부정 테스트에 대한 예제

if(!displayOK || !printerOK)

ex 위 예제에 드모르간 법칙을 적용한 것

if(!(displayOK && printerOK))

 

원본 표현식 동일한 표현식
not A and not B not (A or B)
Not A and B not (A or not B)
A and not B not (not A or B)
A and B not(not A or not B)
not A or notB not( A and B)
not A or B not (A and not B)
A or not B not (not A and B)
A or B not (not A and not B)

 

괄호를 사용하여 이해하기 쉬운 불린 표현식 만들기

  • 괄호의 균형을 유지하기 위해서 간단한 계산 기법을 사용해라.

ex 괄호의 균형이 유지된 자바 예제

if( ( ( ( a < b ) == ( c == d) ) && !done)...- 이 코드를 읽는다

0 1 2 3          2     3         2 1             0   - 0으로 시작해서 열린 괄호를 만나면 1증가 닫힌 괄호를 만다면 1감소 식으로 표기하면 괄호의 균형을 쉽게 맞출수 있다

  • 논리 표현식에는 충분할 정도로 괄호를 사용한다

          

 

0을 비교하는 방법

0은 다양하게 쓰인다. 숫자값 그자체로 쓰고, 문자열의  널종결자일수 있고 널포인터값이나 배열의 첫번째 인덱스일수도 있다. 그래서 사용할떄는 0의 목적을 명확하게 드러나게 코딩한다

  • 숫자는 0에 명시적으로 비교하라 ex while(balance).. 보다는 while(balance != 0) 이 더 좋다
  • 논리적인 변수를 암시적으로 비교해라 ex while(!done) ...
  • C언어에서는 문자를 널 종결자('\0')에 명시적으로 비교하라 ex while(*charPtr) ... 보다는 while(*charPtr != '\0')로 처리한다
  • 포인터를 NULL에 비교해라 - ex while(bufferPtr) 보다는 while( bufferPtr != NULL)...

 

불린 표현식과 관련된 일반적인 문제들

  • C에서 파생된 언어에서는 상수를 비교문의 왼쪽에 놓아라
  • C++에서는 &&, ||, ==을 대체하기 위한 전처리기 매크로 작성에 대해서 고려해 본다- 어쩔수 없는 경우에만)
  • 자바에서는 a== b와 a.equals(b)의 차이점을 이해해라 - 앞은 같은 곳을 참조하는지에 대한 검사이고 후자는 객체가 가지는 논리적인 값에 대한 검사이다.

 

복합문(블록)

복합문 혹은 블록은 프로그램의 흐름을 제어하기 위해서 단일 명령문으로 취급되는 명령문의 집합이다.

  • 중괄호 쌍을 함께 작성하라
  • 중괄호를 사용하여 조건문을 분명히 하라

 

 

널 명령문 - ";" 하나로 작성할수 있다. 단, 눈에 뛰게 해야 한다. 찾기 어려우니까

 

지나치게 깊은 중첩 구조의 처리 - 3수준 이상의 중첩은 좋지 않다

  • 조건의 일부분을 다시 테스트하여 중첩된 if문을 단순화해라
  • break 블록을 사용하여 중첩된 if문을 단순화해라
  • 중첩된 if문을 if-then-else문으로 변환하라
  • 중첩된 if문을 case문으로 변환해라
  • 중첩구조가 깊은 코드를 루틴으로 작성해라.
  • 보다 객체 지향적인 방법으로 접근하라.
  • 깊에 중첩된 코드는 재 설계하라

 

프로그래밍의 기초 - 구조적 프로그래밍

구조적 프로그래밍의 핵심은 오직 하나의 입구와 출구만이 있는 제어구조이다.(단일 진입점과 단일 탈출점 제어구조라고도 한다)

구조적 프로그래밍의 세가지 요소

  1. 순서(sequnce) - 순서는 순서대로 실행되는 명령문들의 집합이다
  2. 선택(selection) - 선택은 명령문을 선택적으로 수행하는 제어구조이다.
  3. 반복(iteration) -반복은 명령문 그룹을 여러번 실행하는 제어구조이다.

이와 같은 분류를 하는 것은 복잡도에 대한 가늠을 하기 위한 것이고 복잡도를 최소화하는 것이 고급 코드를 작성하는 지름길이다.

이 글은 스프링노트에서 작성되었습니다.

by 무위자연 2008. 1. 30. 09:24