一个空值能值多少钱?有人给出的答案是十亿美元。这个数字出现在一篇题为《NULL:十亿美元的错误》的文章里,作者是Maxi C。它和另外十几篇讨论空值的文章一起,构成了一份相当罕见的清单——所有人都在跟同一个东西较劲。
清单里最扎眼的,是那篇把空值直接标价的文章。标题里的"十亿美元"不是修辞,是作者对这类错误的定性:一个本该有值的地方什么都没有,程序继续往下跑,代价由后面的人来付。这个判断是否精确可以争论,但它点出的问题很实在——空值从来不是"没有",它是一种状态,而且是一种会被传递下去的状态。
从加密算法到邮箱服务
清单的跨度比想象中大。Tyler Mc.写的是"Null Cipher",一种已经不再使用的古典加密算法;Gabor Koos写的则是Nullmail,一个开源的、主打隐私的一次性邮箱服务,在Proof of Usefulness黑客松里拿到了76分。同一个词根,一头连着密码学史上的旧物,一头连着今天还在跑的产品。
中间地带更热闹。Mac Wasilewski讲空值合并运算符(??),Vikrant讲空值合并与可选链,Johnny Simpson和Rahul各自写了一版空值合并的入门教程,Phil Nash那篇的标题干脆是一行代码:[undefined, null, NaN].sort();。这些文章面向的都是同一批人——写JavaScript、被空值反复绊倒的人。
语言之间的分岔
有意思的是不同语言给出的答案并不一样。Luca Piccinelli写的是Kotlin的可空类型,标题里用了"compose"这个词,讨论的是怎么把可空值正确地组合起来。Rainer Hahnekamp那篇叫《移除空值检查和默认值》,方向正好相反——不是学会处理空值,而是想办法让它不出现。
Douglas Caina的《空值模式鬼屋》则是另一种写法,把空值当成一个会反复回来的东西来写。这些文章放在一起看,能看出一个分野:有的语言把空值写进类型系统,逼你在编译期面对它;有的语言把它留到运行时,让它在某个凌晨三点炸开。
还有人给它发了币
清单里最出人意料的一篇,是Shisato Motonaka的《NULLcoin™白皮书(公开发布)》。在一堆讲运算符和类型系统的技术文章中间,突然出现一份加密货币白皮书,用的还是"NULL"这个名字。它和前面那些文章的关系,清单本身没有说明。
但放在一起看,这个组合本身就说明了一件事:空值这个概念已经溢出到技术之外了。它可以是加密算法的一个名字,可以是一个邮箱服务的品牌,可以是一份白皮书的标题,也可以是一个被反复引用的十亿美元教训。
回到最开始那个问题。空值到底值多少钱,取决于你在哪一层遇到它——在类型系统里,它是一行编译错误;在生产环境里,它可能是一次事故;在一篇文章的标题里,它是十亿美元。
热门跟贴