- 主题:null 是个大错误
编程语言最基本的类型,整型、浮点都是没有 null 值的。一般用零来表示“无”这个意思。
诚然,很多语言比如 python, java 的字符串和数字类型可以赋值为 null. 其实不对,字符串为空的时候应该用零长度字符串,而不是空指针。在 python, java 语言里面,把数字和字符串变量赋值为 null 都是不合理的代码。
这不禁让我发出这个疑问,拥有“空”这个语义是不是应该交由类型来决定才对?
* 初始化但是未打开的文件是空的,打开出错的文件是空的。
* alpha 通道为 0 的 color 是空的
* 拥有零个元素的列表的空的
消灭了空指针,这个世界就没有空指针错误了对吧。关键是让类型来决定自己是否为空,写出的代码更精简,可阅读性更强:
if (file && file.isOpen())
blahblah...;
以后只要写:
if (file)
blahblah...;
就行了。
所以我觉得在高级编程语言里面,压根就不该存在 null 指针啊。之所谓存在空指针,是否只是一种性能优化的折衷。程序员为这个性能优化付出太多了。
--
FROM 112.47.122.*
实际上应该是Union<T, NullType>/Maybe T这样的类型
所以当代语言都支持Optional类型
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 编程语言最基本的类型,整型、浮点都是没有 null 值的。一般用零来表示“无”这个意思。
: 诚然,很多语言比如 python, java 的字符串和数字类型可以赋值为 null. 其实不对,字符串为空的时候应该用零长度字符串,而不是空指针。在 python, java 语言里面,把数字和字符串变量赋值为 null 都是不合理的代码。
: 这不禁让我发出这个疑问,拥有“空”这个语义是不是应该交由类型来决定才对?
: ...................
--
修改:tgfbeta FROM 117.13.123.*
FROM 117.13.123.*
NULL的发明人忏悔过了。空,实际上是“无效值”的含义,类似浮点的NaN
boost::optional和Rust的std::option是一个弥补
--
FROM 125.33.224.*
C里面空指针不用NULL用啥?
其他语言可以讨论。。。
比如find_one_by_key()这种,在找不到的情况下应该返回啥
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 编程语言最基本的类型,整型、浮点都是没有 null 值的。一般用零来表示“无”这个意思。
: 诚然,很多语言比如 python, java 的字符串和数字类型可以赋值为 null. 其实不对,字符串为空的时候应该用零长度字符串,而不是空指针。在 python, java 语言里面,把数字和字符串变量赋值为 null 都是不合理的代码。
: 这不禁让我发出这个疑问,拥有“空”这个语义是不是应该交由类型来决定才对?
: ...................
--
FROM 114.250.243.*
应该在parameter list里加一个Error **的pass by ref的错误值输出。
检查这个指针是不是null再处理返回值
【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】
: C里面空指针不用NULL用啥?
: 其他语言可以讨论。。。
: 比如find_one_by_key()这种,在找不到的情况下应该返回啥
: ...................
--
修改:tgfbeta FROM 117.13.123.*
FROM 117.13.123.*
null的概念是应该存在的,空值逻辑上是存在的。
其他的争论只是表示方式而已
【 在 hgoldfish 的大作中提到: 】
:
: 编程语言最基本的类型,整型、浮点都是没有 null 值的。一般用零来表示“无”这个意思。
:
: 诚然,很多语言比如 python, java 的字符串和数字类型可以赋值为 null. 其实不对,字符串为空的时候应该用零长度字符串,而不是空指针。在 python, java 语言里面,把数字和字符串变量赋值为 null 都是不合理的代码。
:
#发自zSMTH@MI 9
--
FROM 117.136.71.*
我感觉这种弥补写起来很麻烦。严重妨碍程序员的思路啊。
【 在 z16166 (Netguy) 的大作中提到: 】
: NULL的发明人忏悔过了。空,实际上是“无效值”的含义,类似浮点的NaN
: boost::optional和Rust的std::option是一个弥补
--
FROM 112.47.122.*
c 语言是个低级语言,跟硬件打交道的,自然需要 null pointer
但高级语言不那么在乎效率的话,应该抛弃 null 了。
find_one_by_key() 抛出 KeyError 啊,或者,我觉得更正确的是返回这个类型的空值,比如数字就返回 0,字符串就返回 ""。返回 null 有歧义,到底是没有这个 key 对应的值呢,还是程序员往这个 key 里面写入了 null 值?
【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】
: C里面空指针不用NULL用啥?
: 其他语言可以讨论。。。
: 比如find_one_by_key()这种,在找不到的情况下应该返回啥
: ...................
--
FROM 112.47.122.*
对,null 的概念是存在的,我不否认。但是不是每种类型都应该有 null 值。就像我前面所说的,否认 str, file 等类型的 null 值存在,能提高程序的可阅读性,减少错误。
【 在 graceman (过眼云烟) 的大作中提到: 】
: null的概念是应该存在的,空值逻辑上是存在的。
: 其他的争论只是表示方式而已
: #发自zSMTH@MI 9
: ...................
--
FROM 112.47.122.*
用null可以减少内存占用,举例一个外层对象套了n个不同的子对象,如果支持null则子对象不存在时可用null,否则必须为子对象每个字段赋空值。
--
FROM 114.252.93.*