- 主题:null 是个大错误
【 在 hgoldfish 的大作中提到: 】
: 编程语言最基本的类型,整型、浮点都是没有 null 值的。一般用零来表示“无”这个意思。
: 诚然,很多语言比如 python, java 的字符串和数字类型可以赋值为 null. 其实不对,字符串为空的时候应该用零长度字符串,而不是空指针。在 python, java 语言里面,把数字和字符串变量赋值为 null 都是不合理的代码。
: 这不禁让我发出这个疑问,拥有“空”这个语义是不是应该交由类型来决定才对?
: ...................
指针变量是个存储单元,里面存地址。这个意义上,没有空这么一说。
存个0,本质上是非法地址(其实0地址是有意义的,就是内存中的第一个单元。)。只不过规定他是NULL罢了。非常主观的一件事。
--
修改:ylh1969 FROM 221.221.49.*
FROM 221.221.49.*
【 在 byethu 的大作中提到: 】
: "未赋值而使用在任何时候都不对" -- 这种情况怎么处理:用一个变量来接受UI界面的用户输入,怎样检查用户是否已经输入?除了接受值的变量,再定义一个boolean?这不繁琐吗?我认为这种情况从语义上说变量就是处于“未赋值”,为什么不允许变量就有个未赋值状态呢。
: 所谓的Maybe不也是默认了变量可能存在未赋值的情况,它只不过实现方式和nullable变量不同。
:
数据库的NULL映射到语言里,真的就是一个变量+一个boolean。
--
修改:ylh1969 FROM 221.221.49.*
FROM 221.221.49.*
不讨论 c 语言和汇编这些低级语言的情况。它们为性能优化,所以有空指针没问题。
Python 的 null 是 None, 是个类型为 NoneType 的 object. 我说的是 c++/python/java/rust/kotlin 这些高级语言不再需要 null 这个概念了。但显然这些语言都设计错误。
【 在 ylh1969 (没谱) 的大作中提到: 】
: 指针变量是个存储单元,里面存地址。这个意义上,没有空这么一说。
: 存个0,本质上是非法地址(其实0地址是有意义的,就是内存中的第一个单元。)。只不过规定他是NULL罢了。非常主观的一件事。
--
FROM 112.47.122.*
kotlin你别在变量类型后面加?就没有null啊
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 不讨论 c 语言和汇编这些低级语言的情况。它们为性能优化,所以有空指针没问题。
: Python 的 null 是 None, 是个类型为 NoneType 的 object. 我说的是 c++/python/java/rust/kotlin 这些高级语言不再需要 null 这个概念了。但显然这些语言都设计错误。
--
FROM 58.61.245.*
虽然编译器不会检查这个,但一些代码静态工具可以检查这个注解,看注解和代码是否有矛盾的地方。如果把nullable注解加全了,感觉可以基本避免空指针问题
【 在 ilovecpp 的大作中提到: 】
: 支持annotation,不等于编译器自动就可以在类型检查中考虑nullable,也不等于自动增加了null关键字。
:
- 来自「最水木 for iPhone 6s Plus」
--
FROM 124.64.19.*
同意缺省non nullable, 实际编程中应该尽量避免nullable引用,而是用特殊的对象来代替
【 在 roy 的大作中提到: 】
:
: 我还是觉得缺省non-nullable,需要nullable的时候显式声明比较好
: ....................
- 来自「最水木 for iPhone 6s Plus」
--
FROM 124.64.19.*
一开始就不要搞null,并且语言支持tagged union的话,不需要编译器或者工具做任何事就解决了null这个不存在的问题。
这可能就是所谓null是个错误的意思吧。
【 在 xeagle 的大作中提到: 】
: 虽然编译器不会检查这个,但一些代码静态工具可以检查这个注解,看注解和代码是否有矛盾的地方。如果把nullable注解加全了,感觉可以基本避免空指针问题
: :
: - 来自「最水木 for iPhone 6s Plus」
--
FROM 124.78.172.*
rust里有null这个概念。
把null放在心中(内心的中央)去写函数,写起来很简洁的。
【 在 hgoldfish 的大作中提到: 】
: 不讨论 c 语言和汇编这些低级语言的情况。它们为性能优化,所以有空指针没问题。
:
: Python 的 null 是 None, 是个类型为 NoneType 的 object. 我说的是 c++/python/java/rust/kotlin 这些高级语言不再需要 null 这个概念了。但显然这些语言都设计错误。
: ....................
--
FROM 124.160.153.*
不是应该对每个返回值 定义一个 dummyObject吗?遇到失败就返回dummyObject啊。
这种就避免了 null case,但缺点就是没有人遵守啊。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 标 题: Re: null 是个大错误
: 发信站: 水木社区 (Tue Aug 18 00:23:19 2020), 站内
:
: c 语言是个低级语言,跟硬件打交道的,自然需要 null pointer
:
: 但高级语言不那么在乎效率的话,应该抛弃 null 了。
:
: find_one_by_key() 抛出 KeyError 啊,或者,我觉得更正确的是返回这个类型的空值,比如数字就返回 0,字符串就返回 ""。返回 null 有歧义,到底是没有这个 key 对应的值呢,还是程序员往这个 key 里面写入了 null 值?
:
: 【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】
: : C里面空指针不用NULL用啥?
: : 其他语言可以讨论。。。
: : 比如find_one_by_key()这种,在找不到的情况下应该返回啥
: : ...................
:
: --
: 灭绝人性啊
:
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 112.47.122.*]
--
修改:wuhaochi FROM 58.33.81.*
FROM 58.33.81.*
这不就是python做的吗?
--
FROM 210.22.179.*