- 主题:null 是个大错误
Null用来表示“未赋值”这种状态不正合适吗?比如这样使用:
string foo = null
if (should_get_from_input1)
foo = get_from_input1()
else
foo = get_from_input2()
if (foo == null) //"" is valid input
throw Exception("No valid input")
整数同样的。0表示的是一个合法值,而null表示未赋值或者非法值,两者含义不同。
我听人鼓吹过Maybe, 没用过。对Maybe非常不感冒。它不就是用函数式编程的思维强制程序员意识到他们正在处理的变量有可能为空么?写起来比nullable的变量麻烦多了。而受益仅仅是“强制意识到”,如果我处理string/int的时候始终记得它们是nullable,还需要Maybe干嘛?
比如Maybe鼓吹者给的某些用例:
Optional<Integer> option = ...
option.ifPresent(x -> System.out.println(x));
这和
Integer option = null;
...
if (option is not null)
System.out.println(option)
有啥区别?
--
FROM 114.218.92.*
"未赋值而使用在任何时候都不对" -- 这种情况怎么处理:用一个变量来接受UI界面的用户输入,怎样检查用户是否已经输入?除了接受值的变量,再定义一个boolean?这不繁琐吗?我认为这种情况从语义上说变量就是处于“未赋值”,为什么不允许变量就有个未赋值状态呢。
所谓的Maybe不也是默认了变量可能存在未赋值的情况,它只不过实现方式和nullable变量不同。
【 在 xiaoju 的大作中提到: 】
: Null是表示”不存在“,未赋值而使用在任何时候都不对,应在编译层面被禁止而不是额外写if。Nullable类型代表了缺省值为”不存在“。
:
--
FROM 114.218.92.*
对于file我支持取消null,这种情况下其实isopen甚至if也没有必要了。open的时候有任何问题直接抛出异常在上层统一收集的可读性更高
-- 有没有某些情况下需要有个file instance,但不立即打开它?如果存在这种情况,isopen就有意义了。虽然我暂时没想到具体的这种用例,但我也没觉得这种用例一定不存在
--
FROM 114.218.92.*