2011-02-05 4 views
2

좋은 Erlang 프로그래머가이 코드를 작성하는 방법은 무엇입니까?얼랭 코드를 단순화/개선하는 방법은 무엇입니까?

loop(expr0) -> 
    case expr1 of 
    true -> 
     A = case expr2 of 
       true -> ...; 
       false -> ... 
      end; 
    false-> 
     A = case expr3 of 
       true -> ...; 
       false -> ... 
      end 
    end, 
loop(expr4(A)). 
+0

꽤 가려 보입니다. 좀 더 많은 코드를 제공해 주시겠습니까? :-) –

+0

들여 쓰기로 코드 서식 지정 – 0xAX

+0

'expr0'은 바인딩되지 않습니다. 이것은 완전한 발췌 문장이 아닙니다. –

답변

4

일반적으로 코드를 더 읽기 좋게 만들고 싶습니다. . 그것은 보통의 기능에 코드의 비트를 추출하는 좋은 생각이 길거나 중첩 기능을 피하고, 제공하는 코드 조각의 목적을 명확히 이름 자체를-설명 : 이제

loop(expr0) -> 
    case expr1 of 
    true -> 
     A = do_something(expr2); 
    false-> 
     A = do_something_else(expr3) 
    end, 
    loop(expr4(A)). 

do_something(E) -> 
    case E of 
     true -> ...; 
     false -> ... 
    end 

do_something_else(E) -> 
    case E of 
     true -> ...; 
     false -> ... 
    end 

을, 캐주얼 독자는 것을 알고있다 함수가 인 경우, expr1이 거짓 인 경우 다른 문자는입니다. 좋은 명명 규칙이 많은 도움이됩니다. 주석으로도이 작업을 수행 할 수 있지만 코드가 오래되어 결코 유지하기가 쉽지 않습니다. 나는 또한 실제 함수보다 읽기 쉬운 짧은 함수를 찾는다. 이러한 긴 함수에는 주석이 인라인 된 경우에도 마찬가지입니다.

귀하의 기능이 무엇인지 명확히 밝히 셨다면 코드를 짧게 할 수 있습니다. 짧은 코드는 읽고 유지하기가 더 쉽지만 "똑똑한"구조를 사용하면 너무 짧아 지거나 사용자가 원하지 않는 것과 반대되는 경우가 있습니다. 당신은 기능 머리에 패턴 매칭을 사용하여 시작할 수 있습니다 : 다음

loop(expr0) -> 
    case expr1 of 
    true -> 
     A = do_something(expr2); 
    false-> 
     A = do_something_else(expr3) 
    end, 
    loop(expr4(A)). 

do_something(true) -> ...; 
do_something(false) -> .... 

do_something_else(true) -> ...; 
do_something_else(false) -> .... 

, 당신은 주요 기능의 반복 피할 수

loop(expr0) -> 
    A = case expr1 of 
     true -> do_something(expr2); 
     false-> do_something_else(expr3) 
     end, 
    loop(expr4(A)). 

do_something(true) -> ...; 
do_something(false) -> .... 

do_something_else(true) -> ...; 
do_something_else(false) -> .... 
(제외하고, 변수가 중첩 문에서 범위는 항상 싫어 기능입니다)

그리고 나는이 코드 조각을위한 것이라고 생각합니다. 더 많은 컨텍스트를 사용하면 중복성을 줄이기 위해 일부 추상화를 수행 할 수도 있지만 추상화 할 때는주의해야합니다. 과용하는 경우 코드를 다시 가려서 유사한 코드를 제거하여 얻을 것으로 예상되는 유지 관리 이점을 잃게됩니다.

0

왜 루프 기능에 expr0이 필요합니까?

3

현재 작성된 코드는 더 간단하게 작성하기가 어렵습니다. 문제는 ExprX 항목을 알 수 없으므로 코드를 단순화 할 수있는 방법이 없으므로 그렇게하는 것이 좋습니다. 보다 완전한 예제가 있다면 최적화를 시도하는 데 훨씬 더 많은 시간을 할애 할 것입니다.

구체적인 문제는 Expr2Expr3이 어떻게 Expr1에 종속되는지 알 수 없다는 것입니다. 그리고 우리는 Expr0의 목적이 무엇인지 알지 못하며, Expr4 님의 의존성 이외에는 반환 된 A을 사용하지 않습니다.