- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我向 Stackoverflow 提出的第一个问题,尽管我已经成为消费者多年。如果我违反规则,请原谅我。那当然不是我的意图。我已经认真审查了规则,并相信我在可接受的范围内。但是,我希望您能指出使用错误(如果存在),以便我将来能够更加合规。
我教高中生编程。这个学期我们在做C#。上周我们在学习递归。我分配了几个可以用递归解决的经典问题,其中之一是求幂。
我的一个学生提交了以下代码作为使用递归求幂的解决方案(他允许我在此处发布)。方法调用中的作业让我胆战心惊,但当我告诉他这是不好的做法时,他抗议说“它有效”,对他来说“有意义”,而且他“一直都这样做” ".
static void Recur(int n1, int n2, int n3)
{
if (n2 > 0)
{
Recur(n1, n2 - 1, n3 *= n1); // this is the line in question
}
else
{
Console.WriteLine("The number calculated recursively is: {0}", n3);
}
}
我很难想出一些具体的东西来告诉我的学生为什么在方法调用中进行赋值通常是不好的做法,除了 1) 意外副作用的可能性,以及 2)维护。
我已经在网上搜索了关于这个问题的每一个我能构造的短语,但是却一无所获。我确实看到了对 Robert C. Martin 的一本名为“整洁代码”的书的引用,但我没有。
我与学生的关系有点像 parent 的关系。除非我可以通过独立消息来源证实,否则他们有时不会对我所说的话给予太多支持。如果我能指出关于在方法调用中分配作业的明确声明,我的学生会更倾向于改掉这种烦人的习惯。
这种用法会打扰其他人吗?我是否期望他改变他做事的方式?他才 15 岁,但前途一片光明。他是那些刚刚“明白”的学生之一。我不希望他养成不良习惯。
感谢您的宝贵时间和意见。
最佳答案
发布的代码中有很多地方可以改进:
保持一致
为什么调用Recur(n1, n2 =- 1, n3 *= n1)
?为什么 n3
受到不同对待?这可能会在审查/维护代码时造成困惑。
不要做不必要或多余的工作
在 Recur(n1, n2 - 1, n3 *= n1)
之后是否使用过 n3
?不?那为什么要浪费时间分配一个从未使用过的值呢?
不改变方法参数被认为是一种很好的做法(当然,除非它们是通过引用传递的)。为什么?因为它使调试和理解代码的工作方式变得更加困难;随着方法的执行,初始条件发生变化,这使得跟踪可能的错误、优化、改进等变得更加困难。
总而言之,我避免使用这些模式,因为我的内存力真的很差:
var i = 0;
Foo(i += 1);
Bar(i);
传递给 Foo
的是什么?它是 0
还是 1
?我从来不记得,我每次都得查一下。审查此代码的人很可能会遇到同样的问题。这些巧妙的技巧不会使代码运行得更快或更好,而且它避免了总共一行代码……不值得。
关于c# - 方法调用中的分配不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977143/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!