[英]trying to rewrite this so it doesnt violate "prinicples discussed in Code Complete 2nd edition
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應該是一個常量而不是僅使用整數,並且montlysales應該作為參數傳遞到函數中,以便隨后可以進行檢查以查看銷售時長等於月份的整數值,該整數也為十二。 我不確定是否所有這些都是違反原則的原因。 我感覺到最后一行
return get_profit_from_sales(totalsales)
是錯的,它真的困擾我,因為我似乎無法弄清為什么它實際上困擾我,我想我可能已經跳過了其他事情。
有人可以幫我驗證嗎?
總結-您應該重構對另一個函數的調用,並使該函數成為純函數,並且只做一件事,從而降低復雜性,並提高您對程序及其正確性進行抽象推理的能力。
您的間諜意識刺痛,您應該信任它-您是正確的,但是錯誤是微妙的。
例行程序只能做一件事,而只能做一件事,是最好的。 因此,視力的純凈度在首要任務,復雜性管理中很重要-它使我們的大腦能夠處理更多的事情,因為它們更簡單。 也就是說,您只需要看一下功能就可以知道它的作用,而不必說“它實現了銷售總額,但最后它又調用了另一個功能”,這掩蓋了它的“使命” 。
這也是函數式編程的一部分,在我看來,語言必須采用這種語言來嘗試實現Code Complete中所說的主要命令。 函數式編程的宗旨之一是“無副作用”,類似於“一個任務”或“一個目的”。 我對您的代碼所做的工作也可以看作是使其更具功能性,只是輸入和輸出,而沒有通過任何其他路徑輸入或輸出的內容。
還要注意,函數get_profit()的讀取方式類似於偽代碼,使其具有一定的自記錄性,並且您不必深入研究任何函數即可了解該函數的作用或理想情況。
因此,這就是我上面所解釋的想法(松散編碼,未經檢查!)。
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;
}
我大約每年讀一次《 Code Complete》,因為有時編碼確實很微妙,因為它是多維的。 這對我很有幫助。 問候-斯蒂芬
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.