我已阅读in this Q&A,通常应避免在循环中使用continue
语句。下面的代码是否值得遵守规则?如果是的话,重构它以摆脱它们的最佳方法是什么?
for (property in formInput) {
if (!formInput.hasOwnProperty(property) || property === "Id") {
continue;
}
if (property.slice(-3) === "_Id") {
setMagicSuggestFromFormInput(property);
continue;
}
if (property.slice(-3) === "_bl" && formInput[property] === true) {
$("#" + property).prop("checked", true);
continue;
}
$("#" + property).val(formInput[property]);
}
编辑:如果您认为循环必须重构,除了说明如何完成之外,您能否告诉我为什么您认为重构的设计选择更好?
答案 0 :(得分:0)
为什么不尝试"否则,如果" s?
放
$("#" + property).val(formInput[property]);
答案 1 :(得分:0)
当你在开头使用break / continue时,它们作为一个前提条件,这是一个很好的设计,有助于轻松理解块。如果您在块的中间使用continue
或break
并使用一些代码,那么它就像一个隐藏的陷阱,很难理解哪个是坏的。
您可以查看此链接,了解有关中断/继续https://softwareengineering.stackexchange.com/questions/58237/are-break-and-continue-bad-programming-practices
的更多讨论您可以使用嵌套的if else块来尝试这样的事情。
for (property in formInput) {
if (formInput.hasOwnProperty(property) && property !== "Id") {
var propVal = property.slice(-3);
if (propVal === "_Id") {
setMagicSuggestFromFormInput(property);
} else if (propVal === "_bl" && formInput[property]) {
$("#" + property).prop("checked", true);
} else {
$("#" + property).val(formInput[property]);
}
}
}
答案 2 :(得分:0)
如果不想使用continue语句,那么你可以使用嵌套代码的路径:
for (property in formInput) {
if (formInput.hasOwnProperty(property) && property !== "Id") {
if (property.slice(-3) === "_Id") {
setMagicSuggestFromFormInput(property);
}
else if (property.slice(-3) === "_bl" && formInput[property] === true) {
$("#" + property).prop("checked", true);
}
else{
$("#" + property).val(formInput[property]);
}
}
}
我非常喜欢你所链接的Q& A的答案。这是一个工具,您应该在适当的时候使用它。
答案 3 :(得分:0)
您可以嵌套条件检查并反转条件。
for (property in formInput) {
if (formInput.hasOwnProperty(property) && !property === "Id")
if (property.slice(-3) === "_Id") {
setMagicSuggestFromFormInput(property);
else if (property.slice(-3) === "_bl" && formInput[property] === true)
$("#" + property).prop("checked", true);
else
$("#" + property).val(formInput[property]);
}
}
答案 4 :(得分:0)
您的代码:
for (property in formInput) {
if (!formInput.hasOwnProperty(property) || property === "Id") {
continue;
}
if (property.slice(-3) === "_Id") {
setMagicSuggestFromFormInput(property);
continue;
}
if (property.slice(-3) === "_bl" && formInput[property] === true) {
$("#" + property).prop("checked", true);
continue;
}
$("#" + property).val(formInput[property]);
}
相当于:
for (property in formInput) {
if (property.slice(-3) === "_Id") {
setMagicSuggestFromFormInput(property);
} else if (property.slice(-3) === "_bl" && formInput[property] === true) {
$("#" + property).prop("checked", true);
} else if (formInput.hasOwnProperty(property) && property !== "Id") {
$("#" + property).val(formInput[property]);
}
}
这是首选方法,因为它正确使用if/then/else
并且更容易在逻辑上推理。