는 "

2014-11-25 6 views
0
function profit(){ 
    int totalSales=0; 
    for (int i=0; i<12;i++) // computer yearly sales 
      totalSales+=montlysales[i]; 
    return get_profit_from_sales(totalsales); 
} 

그래서 내가 이미 for 루프에서 (12)가 일정 대신 단지 정수를 사용해야하는 것으로 확인되었습니다 코드 전체 2 판에서 논의 prinicples을 위반 나던 있도록이를 다시 작성하려고 그 montlysales는해야 함수에 매개 변수로 전달하면 판매액이 12 개월의 정수 값과 같은지 확인하기 위해 검사를 실행할 수 있습니다. 해당 매개 변수가 모두 주 위반 사항인지 확실하지 않습니다. 원인. 나는 마지막 줄을 느낀다.는 "

return get_profit_from_sales(totalsales) 

나는 그 것이 정말로 나를 괴롭힌다. 나는 그것을 왜 생각할 수 없는지 모른다. 사실 나를 괴롭 히고 나는 다른 것을 건너 뛸 수도 있다고 생각합니다.

누구든지 확인할 수 있습니까?

+1

나는이 생각을 과장 생각할지도 모릅니다. CC에서 논의 된 주제들은 하나의 십대 기능을 해부하지 않고 지침으로 명심하는 것이 좋다. 몇 개월 동안 지명 된 상수를 사용하는 것은 가독성을 위해 좋을지도 모르지만, 문자 그대로 상수를 사용하는 것이 다소 비현실적이지만 (실제로 매직 넘버는 아니며) 12는 절대로 바뀌지 않을 것이기 때문에 다소 불변합니다. 'monthlysales'의 크기가 12라고 가정하면 안전 수표를 사용하지 않는 하위 언어를 사용하는 것이 좋지만 버그에 대한 방어 프로그래밍의 영역에 있습니다. –

+0

... 오히려 ... (예외적 인 사용자 입력에 대해) 에러 처리보다 더 길고, 언어/lib가 이미 그러한 검사를 수행하는 경우 중복 될 수 있습니다. 마지막 부분에 관해서는 귀찮다.'get_profit_from_sales'가하는 것에 대해 좀 더 자세히 설명해 주시겠습니까?명백한 한 가지 점은 전역 변수에 많이 의존한다는 것입니다. 따라서이'get_profit_from_sales'가 내게 즉각적인 의미를 갖지 못합니다 (나는 어떤 상태인지 또는 단지 통과하면 어떤 상태인지 알 수 없습니다). 당신이 '이익'에서 계산 한 수). –

답변

2

요약 - 다른 기능에 대한 호출을 리팩토링하고이 기능을 순수하고 단 한 가지만 수행하여 복잡성을 줄이고 프로그램과 그 정확성에 대해 추상적으로 추론하는 능력을 향상시켜야합니다.

당신의 끔찍한 감정은 따끔 거림이며 당신은 그것을 신뢰해야합니다 - 당신이 맞지만 틀린 것은 미묘합니다.

루틴은 한 가지 일을하는 경우에 가장 적합합니다. 시각의 순도는 복잡성에 대한 관리의 중요성에서 중요합니다. 우리 뇌가 더 간단하기 때문에 더 많은 것들을 저글링 할 수 있습니다. 즉, 함수를보고 무엇을하는지 알면 "판매를 합산하지만 결국에는 또 다른 함수를 호출합니다"라고 말할 필요가 없습니다.이 구름은 "임무" .

이것은 함수 프로그래밍의 일부이기도하며 코드 완성의 주요 요구 사항을 구현하기 위해 언어가 채택해야한다고 생각합니다. 기능 프로그래밍은 "하나의 사명"또는 "하나의 목적"과 유사한 "부작용 없음"이라는 교리의 하나로서 가지고 있습니다. 내가 코드에 한 것은 코드가 더 기능적으로 보이고, 입력과 출력뿐 아니라 다른 경로를 통해 들어오고 나가는 것도 아닙니다.

get_profit() 함수는 pseudocode와 유사하게 읽고 자체적으로 문서화하기 때문에 함수가 무엇을하는지 또는 어떻게 수행하는지 (이상적으로) 이해할 필요가 없습니다.

그래서, 위의 설명에 대해 생각해보십시오. (느슨하게 코딩되었거나 체크되지 않았습니다!)

function get_total_sales(int montlysales[]){ 
    int totalSales=0; 
    for (int i=0; i<12;i++) // computer yearly sales 
     totalSales+=montlysales[i]; 
    return totalSales; 
} 

function calc_profit(int all_sales, int all_commissions, int all_losses)(){ 
    // your calculations here 
    int profit = all_sales - all_commissions - all_losses; // ... etc. 
    return profit; 
} 

function get_profit(){ 
    int montlysales[] = read_from_disk(); 
    int total_sales = get_total_sales(montlysales); 
    int tot_commissions = get_tot_commissions(); 
    int tot_losses = get_tot_losses(); 
    int profit_made = calc_profit(total_sales, tot_commissions, tot_losses); 
    return profit_made; 
} 

나는 다차원이기 때문에 코딩은 정말 미묘하기 때문에 일년에 한 번 정도 코드 완성을 읽습니다. 이것은 나에게 매우 도움이되었습니다. 감사합니다 - Stephen