Language agnostic 变量声明与错误检查:哪一个先到?

Language agnostic 变量声明与错误检查:哪一个先到?,language-agnostic,error-handling,initialization,Language Agnostic,Error Handling,Initialization,在编写函数时,我总是有这样的困惑:是先检查错误,然后声明变量(或者)将参数分配给局部变量,然后检查错误。以下哪种方式是首选的?为什么?我通常坚持第一种 void DoSomething1(Object x, Object y){ // All sort of error checking goes here if IsError(x) return; if IsError(y) return; // Variable declaration int i,j; Obje

在编写函数时,我总是有这样的困惑:是先检查错误,然后声明变量(或者)将参数分配给局部变量,然后检查错误。以下哪种方式是首选的?为什么?我通常坚持第一种

void DoSomething1(Object x, Object y){

  // All sort of error checking goes here
  if IsError(x) return;
  if IsError(y) return;

  // Variable declaration
  int i,j;
  Object z = x;
}


void DoSomething2(Object x, Object y){

  // Variable declaration
  int i,j;
  Object z = x;

  // All sort of error checking goes here
  if IsError(z) return;
  if IsError(y) return;

}

您应该遵循近似规则,并尽可能晚地声明变量。这使它们的创建和使用本地化。您还应尽早检查参数的有效性,以尽量减少执行的工作

因此,我同意你的第一个更好,但它是主观的。对于另一种方法可能有争议,但我还没有听到令人信服的观点,所以我认为这两条准则是最佳实践。
尽管您的代码看起来有点奇怪地熟悉,但由于您声明“语言不可知”:),几乎可以肯定有些语言您没有选择权,必须在顶部声明变量。

在需要时声明变量,这通常是当一些中间结果准备就绪或您即将进入循环时


因此,这确实意味着错误检查通常会在声明之前进行。

有没有第一个不如第二个的情况?当然,不考虑特定语言的限制。+1用于提及邻近规则。仅仅为了理解
t
被声明为什么,就必须滚动到函数的顶部,这真是一种痛苦。但正如你所说,对于某些语言,人们没有选择的余地。@Ravi,老实说,我想不出任何语言。这并不意味着没有。我很好,但我不是神:-)@Ravi:假设变量的初始化非常昂贵。现在假设函数被设计为等待来自另一个线程的信号,一旦信号出现,就从数据结构中提取一些信息(可能非常便宜)并将其传递到某个地方。在这种情况下,在开始等待信号之前初始化变量可能是有意义的,因此接收到信号后的处理速度更快。他们没有。但很多时候,我们必须修复他们的代码:-|