哪个是首选:(var == null)或(null == var)

时间:2009-05-22 06:28:28

标签: programming-languages

  

可能重复:
  Conditional styles: if (0 == resultIndex) vs if (resultIndex ==0)

我在代码中看到了这两个,我不知道为什么一个比另一个更好,但你更喜欢使用哪个,为什么?

6 个答案:

答案 0 :(得分:17)

if(null == var)练习来自C,你可能会不小心写if(var = null)(注意赋值运算符),它会编译(因为在C中所有不是0都是真的)但是会出现语义错误。因此if(null == var)是一种防御性做法,因为null是左值(再次是C / C ++术语),并且左值不能分配给。{/ p>

在现代语言中(特别是在C#中)编译器会在if语句中进行分配时发出警告。

答案 1 :(得分:8)

我会说var == null因为它更像你实际说的。 “如果我的变量为空......”比“如果null是我的变量......”或“如果什么都不是我的变量......”等任何变体更有意义。

答案 2 :(得分:0)

我更喜欢自己使用(var == null)。这对我来说更有意义,因为我正在检查“如果var为null”。当我将其读作“if null is var”时,另一个订单会出现,这从来没有意义。我也喜欢VB.NET如何使它具有可读性,并且检查null与其他比较不同,“if var is nothing”。

答案 3 :(得分:0)

它们都具有相同的功能并产生相同的结果。选择纯粹是个人的选择。

我个人更喜欢第一个,因为“var is null”或“var equals null”读取优于“null is var”或“var is null”。

有些人更喜欢第二种并声称它可以减少拼写错误导致的错误,因为null = var会在var = null仍在编译时导致错误。然而,这些天,编译器会对此发出警告,所以我认为这是一个没有实际意义的问题。

答案 4 :(得分:-1)

通常,当我比较两个值时,我倾向于将未知值变为已知值。这样我首先知道我在看什么,为测试提供背景。大多数语言并不关心,但我认为有些可能。

答案 5 :(得分:-1)

语言无关?

在Scheme中,没有歧义:

(null? var)