【发布时间】:2010-11-17 03:17:01
【问题描述】:
我正在寻找一种简单的公共方法或运算符,它允许我重复某些字符串 n 次。我知道我可以使用 for 循环来编写它,但我希望在必要时避免使用 for 循环,并且应该在某个地方存在一个简单的直接方法。
String str = "abc";
String repeated = str.repeat(3);
repeated.equals("abcabcabc");
相关:
repeat string javascript Create NSString by repeating another string a given number of times
已编辑
当 for 循环不是完全必要时,我会尽量避免它们,因为:
-
即使它们隐藏在另一个函数中,它们也会增加代码行数。
-
阅读我的代码的人必须弄清楚我在那个 for 循环中做了什么。即使它被注释并且具有有意义的变量名称,他们仍然必须确保它没有做任何“聪明”的事情。
-
程序员喜欢将聪明的东西放入 for 循环中,即使我将其写为“只做它打算做的事情”,但这并不妨碍有人加入并添加一些额外的聪明“修复”。
-
它们通常很容易出错。涉及索引的 for 循环往往会产生一个错误。
-
For 循环经常重复使用相同的变量,增加了很难找到范围界定错误的机会。
-
For 循环增加了 bug 搜寻者必须查看的地方的数量。
【问题讨论】:
-
我知道 for 循环可能会导致一些实际问题。但是您不应该“不惜一切代价”避免 for 循环,因为如果它损害了您的可读性、可维护性和速度,那么您将适得其反。这是其中一种情况。
-
“即使它们隐藏在另一个函数中,它们也会增加代码行数”......哇,哇。 Big-O,不是 LoC
-
@imagist 我会避免在降低可读性和可维护性的情况下使用 for 循环。我认为速度是这里最不重要的问题(实际上不是问题)。我认为 for 循环被过度使用了,我正在努力学习只在必要时使用 for 循环,而不是作为默认解决方案。
-
@Pyrolistical 我没有声称性能或渐近收益。而是说通过编写更少的代码,使用库函数而不是重新发明轮子,我减少了错误表面积(代码行),同时提高了可读性。这两件好事我相信你会同意的。
-
@e5;很抱歉多年后才发帖。我觉得这个问题很合适。如果插入方法中,则应测试参数(次数> = 0),抛出错误等。这增加了健壮性,但也增加了要阅读的代码行。重复一个字符串是明确的。读过代码的人都知道 string.repeat 做了什么,即使没有一行注释或 javadoc。如果我们使用一个稳定的库,那么认为一个如此简单的函数没有错误是合理的, YET 引入了某种形式的“稳健性”检查,我们甚至需要担心。如果我可以提出 10 项改进,这(某种)事情就是其中之一。