我正在尝试编写更具可读性和更高效的代码,我总是讨厌如果是否如果链......是否可以用其他更“优雅”的方式编写以下语句,就像使用三元操作一样:< / p>
if(text.length < 1){
if(errtext.length > 1){
errtext+="<br>";
}
errors = true;
errtext += "Field cannot be empty";
}
谢谢
答案 0 :(得分:10)
老实说,在大多数情况下,您希望使用if链,因为它们对读者来说更清晰。有一些例外,但并不多。
通常,如果您的代码很尴尬,那么您的基本方法就是错误的。试试这个:
function validate()
{
errs = [];
// ...
if (!txt.length) {
errs.push("Must have text, man!");
}
// ...
return errs.join("<BR>");
}
值得一提的是,字符串在Javascript中是不可变的。如果你+ = on strings,你就会创建很多中间字符串,这会降低性能。
E.G。
var msg = "Tom";
msg += ", Brad";
msg += ", Sam";
msg += ", Rick";
这最终会在内存中创建以下字符串:
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad"
"Tom, Brad, Sam"
"Tom, Brad, Sam, Rick"
如下:
var msg = ["Tom", "Brad", "Sam", "Rick"];
var msg = msg.join(", ");
在内存中创建以下内容:
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad, Sam, Rick"
在这种情况下,最不可能产生很大的不同,但是养成创建字符串数组和使用join方法的习惯是很好的。在较大的文本操作/生成问题中,它可能导致巨大的减速。
编辑:
如果调用函数需要检查是否存在错误,则始终可以在返回的字符串的.length
上执行if。如果您想更明确,可以随时执行此操作:
if (!errs.length) {
return null; // or false, or a constant...
}
return errs.join("<BR>");
然后在您的调用代码中添加一个检查(=== null
等)
答案 1 :(得分:3)
你能做的一件事就是利用大于0的数字的真实性和数字等于0的虚假性:
if(!text.length) {
if (errtext.length) {
errtext += "<br />";
}
errors = true;
errtext += "Field cannot be empty";
}
答案 2 :(得分:2)
如何使用add方法创建Error
类和某种Errors
集合?
您的错误集合将知道如何添加br标记,您的调用代码将是所有验证逻辑而不是验证,消息文本和标记都混合为一个。
您可以检查您的错误集合是否有任何条目,并且有标记。
您甚至可以在应用程序的其他位置重用该错误!
答案 3 :(得分:1)
引用的代码似乎很清楚。你可以投入三元组(我假设支票应该是> 0
,而不是> 1
):
if(text.length < 1){
errors = true;
errtext += (errtext.length > 0 ? "<br>" : "") + "Field cannot be empty";
}
但这不仅不太清楚,而且使用非优化编译器,效率也会降低。 (并不是说你在这里提到的上下文中很重要,我猜这不是一个紧密的循环。)
更好的选择比三元(再次,如果有很多这些测试):
<br>
,然后在演示之前删除第一个案例。如果你有很多地方可能会附加错误文本,那就简单多了。join
使用<br>
作为分隔符进行展示。答案 4 :(得分:0)
这样的事情怎么样:
errors = (text.length < 1);
if (errors) {
errtext += (errtext.length > 1 ? "<br>" : "") + "Field cannot be empty";
}