对于某些编程语言(例如C#,Javascript)而言,最让我困扰的是,尝试访问null属性会导致出现错误或异常.
例如,在以下代码段中,
foo = bar.baz;
如果bar为null,C#将抛出一个令人讨厌的NullReferenceException,我的Javascript解释器会抱怨无法获取属性’baz’的值:object为null或undefined.
从理论上讲,我可以理解这一点,但在实际代码中,我经常会有一些深层对象,比如
foo.bar.baz.qux
如果foo,bar或baz中的任何一个为空,我的代码就会被破坏. :(此外,如果我在控制台中评估以下表达式,似乎有不一致的结果:
true.toString() //evaluates to "true" false.toString() //evaluates to "false" null.toString() //should evaluate to "null",but interpreter spits in your face instead
我绝对鄙视编写代码来处理这个问题,因为它总是冗长,臭的代码.以下不是人为的例子,我从我的一个项目中抓取了这些(第一个是Javascript,第二个是C#):
if (!(solvedPuzzles && solvedPuzzles[difficulty] && solvedPuzzles[difficulty][index])) { return undefined; } return solvedPuzzles[difficulty][index].star
和
if (context != null && context.Request != null && context.Request.Cookies != null && context.Request.Cookies["SessionID"] != null) { SessionID = context.Request.Cookies["SessionID"].Value; } else { SessionID = null; }
如果整个表达式返回null,如果任何一个属性为null,那么事情会变得容易得多.上面的代码示例可以简单得多:
return solvedPuzzles[difficulty][index].star; //Will return null if solvedPuzzles,difficulty,index,or star is null. SessionID = context.Request.Cookies["SessionID"].Value; //SessionID will be null if the context,Request,Cookies,//Cookies["SessionID"],or Value is null.
有什么我想念的吗?为什么这些语言不会使用此行为?由于某种原因难以实施吗?它会导致我忽略的问题吗?