[英]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.