프로세스를 향한 코드는 대중의 사고방식에 부합됩니까?

8593 단어 코드
어제 블로그 《30줄, 금액을 인민폐 대문자로 바꾸는 코드》를 한 편 썼는데, 오늘 갑자기 이상한 생각이 떠올랐다. 뒤에서 앞으로 나아갈 필요가 없는 사고방식을 보고, 앞에서 뒤로 옮겨다니는 사고방식으로 코드도 똑같이 정련되지 않을까?
그래서 약 40분의 분간의 분투 끝에 아래의 코드가 나왔다.중간에 이상한 게 많이 나오는데,
예를 들어 3억 위안, 1만 위안을 줍는데 이런 이상한 잘못을 없애는 데 적지 않은 시간이 걸린다.
 1 public class ChineseCurrencyConverter {

 2     private static final String [] UNITS = {""," "," "," "," "," "," "," "," ",};

 3     private static final String[] CHINESE_NUMBER = {" "," "," "," "," "," "," "," "," "," "};

 4 

 5     public static String convert(int amount) {

 6           if (amount >= 1e9 || amount < 0) {

 7               return "         。";

 8           }

 9 

10         String text = "";

11           for (int i = 8; i >= 0;i--) {

12               int number = amount / e(i);

13               if (number == 0 && text.isEmpty()) {

14                   continue;

15               } else if (number == 0 && text.endsWith(" ")){

16                   if (i == 4) {

17                       text = text.substring(0, text.length() -1);

18                       if (!text.endsWith(" ")){

19                           text += " ";

20                       }

21                   }

22                   continue;

23               } else {

24                   text += CHINESE_NUMBER[number];

25                   if (i != 4 && number != 0) {

26                       text += UNITS[i];

27                   }

28                   else if (i == 4) {

29                       if( text.endsWith(" ")){

30                       text = text.substring(0, text.length() -1);

31                       }

32                       text += " ";

33                   }

34               }

35               amount -= number * e(i);

36           }

37             if (text.endsWith(" ")) {

38                  text = text.substring(0, text.length() -1);

39             }

40           text += "  ";

41           return text ;

42     }

43 

44     private static int e(int len) {

45         int result = 1;

46         for (int i = 0; i < len; i++) {

47               result *= 10;

48         }

49         return result;

50     }

51 }

 
이로 인해 일어난 사고는 과정과 대상에 대한 차이가 무엇인지이다.
이전에 다른 사람에게 코드를 쓸 때는 대상을 향한 사고를 써야 한다고 알려주었다.결과는 대상을 향한 코드가 너무 추상적이고 일반인의 사고방식에 맞지 않아 많은 사람들이 이해하지 못하기 때문에 과정을 향한 방식으로 코드를 쓰는 것이 가장 좋다는 반박을 받았다.
위의 코드는 전형적인 프로세스를 위한 것이고 중간에 있는if-else는 처음부터 쓴 것이 아니라 오류를 발견한 후에 대응하는 조건을 찾아 보충한 것이다.
많은 사람들이 프로세스 코드를 쓸 때와 유사하게 이렇게 수정해서 쓴 코드들이다.
 
그 결과는 다음과 같습니다.
  1.읽기 어렵다
  2.조건 간에 일치하지 않음,
  3.너무 깊게 중첩
  4.코드가 너무 깁니다.
  5.품질은 자신이 없다
  6.수요 변경은 대응하기 어렵다.
....
비록 어제의 그 코드는 대상을 향해 쓴 것이 아니지만.그러나 이 기능은 다음과 같습니다.
  1.구조가 뚜렷하다.
  2.처리가 간단하다
  3.각분 처리를 늘릴 때 처음부터 소수점을 분할하면 되며 기존 코드에 영향을 주지 않는다.
 
그렇다면 대상을 향한 쓰기 방식이 우리에게 가져다 주는 이점은 무엇일까?
확장이 편리하고 수정할 때 통제에 영향을 미치는 것 외에 가장 중요한 것은 구조가 뚜렷하고 읽기 쉽다는 것이다.
대상을 대상으로 하는 기술로 쓴 코드가 이해하기 어렵다고 생각하는 분들은 본고의 시작 부분을 보십시오. 이 코드는 정말 이해하기 쉽습니까? 일반인의 사유 논리에 부합됩니까?
만약 흐름도를 그린다면, 그것은 어떤 모양일까요?논리적으로 말이 됩니까?
 
아마도 너는 우리의 논리가 이것보다 간단하다고 말할 것이다.나는 반박하고 싶지 않아서 한마디만 되묻고 싶었다. 정말이야?
 
과정에 대한 진심이 나의 사고방식에 맞지 않는다는 글을 특별히 올립니다.

좋은 웹페이지 즐겨찾기