Scripting return和else语句可以在CFScript中互换使用吗?

Scripting return和else语句可以在CFScript中互换使用吗?,scripting,coldfusion,coldfusion-9,Scripting,Coldfusion,Coldfusion 9,我想知道您对在CFScript中交替使用return和else语句的看法。我通常使用以下语法: if (something) { // Do something } else { // Do something else } 我最近想到我可以这样做: if (something) { // Do something return; } // Do something else 这两种风格会产生不同的最终结果吗?我喜欢不必在else语句中包装代码。我的想法是,如果if语句的计算

我想知道您对在CFScript中交替使用return和else语句的看法。我通常使用以下语法:

if (something) {
  // Do something
}
else {
  // Do something else
}
我最近想到我可以这样做:

if (something) {
  // Do something
  return;
}
// Do something else
这两种风格会产生不同的最终结果吗?我喜欢不必在else语句中包装代码。我的想法是,如果if语句的计算结果为true并返回,那么它下面的代码将不会运行。如果它的计算结果不是true,那么它下面的代码将运行,而不管它是否包装在else语句中


这听起来对吗?

两种书写方式将返回相同的结果,但对于可读性,首选第一种方式

两种书写方式将返回相同的结果,但对于可读性,首选第一种方式

Coldfusion与大多数语言一样,提供了许多实现相同任务的方法。程序员的工作是根据情况选择正确的。当然,correct可以有很多解释,但我要说的是,正确的方法是清晰、简洁和可伸缩的

在这种情况下,没有实际的性能或代码行差异。对一个完全不同的代码分支使用返回对我来说是不清楚的,但是,使用早期返回样式来避免由于无效条件而导致的函数是更清楚的。考虑以下情况:

if (not isdefined("url.param1")) {
  return;
}
if (not len(url.param1)) {
  return;
}
if (not refind("[0-9]+", url.param1)) {
  return;
}
doSomethingToValid(url.param1);

if (isdefined("url.param1")) {
  if (len(url.param1)) {
    if (refind("[0-9]+", url.param1)) {
      doSomethingToValid(url.param1);
    }
  }
}

在第一种情况下,我可以看到将应用于列表中的所有验证,我可以提前将其全部解决,这让我能够专注于例程的真正实质内容。在第二种情况下,我将例程的大部分深入到ifs的嵌套部分中,当我需要向验证中添加另一条规则时,代码结构会变得更加复杂。

Coldfusion与大多数语言一样,提供了许多实现相同功能的方法。程序员的工作是根据情况选择正确的。当然,correct可以有很多解释,但我要说的是,正确的方法是清晰、简洁和可伸缩的

在这种情况下,没有实际的性能或代码行差异。对一个完全不同的代码分支使用返回对我来说是不清楚的,但是,使用早期返回样式来避免由于无效条件而导致的函数是更清楚的。考虑以下情况:

if (not isdefined("url.param1")) {
  return;
}
if (not len(url.param1)) {
  return;
}
if (not refind("[0-9]+", url.param1)) {
  return;
}
doSomethingToValid(url.param1);

if (isdefined("url.param1")) {
  if (len(url.param1)) {
    if (refind("[0-9]+", url.param1)) {
      doSomethingToValid(url.param1);
    }
  }
}

在第一种情况下,我可以看到将应用于列表中的所有验证,我可以提前将其全部解决,这让我能够专注于例程的真正实质内容。在第二种情况下,我将例程的大部分深入到ifs的嵌套部分中,当我需要向验证中添加另一条规则时,代码结构会变得更加复杂。

是的,只要使用正确的返回。如果是一行或两行代码,我更喜欢第二种方法。但除此之外,第一种方法在我看来更具可读性/直观性。有关所有编程语言的详细讨论,请参阅。您的示例2被Fowler称为Guard语句。@orangepips+1表示可怕thread@orangepips谢谢你的好帖子。这是一本很棒的书!是的,只要你使用正确的报税表。如果是一行或两行代码,我更喜欢第二种方法。但除此之外,第一种方法在我看来更具可读性/直观性。有关所有编程语言的详细讨论,请参阅。您的示例2被Fowler称为Guard语句。@orangepips+1表示可怕thread@orangepips谢谢你的好帖子。这是一本很棒的书!尼克,这正是我所处的情况。谢谢,这很有用。尼克,这正是我所处的情况。谢谢,这很有用。