为什么Java没有not函数/同样的替代方法

3

好的,如果你想检查一个列表是否为空

我们需要做一些类似于

if(! mylist.isEmpty())

这会影响代码的可读性,那么我们如何以可读的方式编写相同的内容,调用条件检查的否定。

其中一种可能是拥有一个静态辅助函数,例如:

static boolean not(boolean condition) { return !condition;}

这个主意有多糟糕?Apache Common或Guava等是否有其他选项?或者你是否还有其他实现方法?

9
一个简单的否定有什么是“unreadable”的?(“unreadable”可能需要根据上下文进一步翻译) - devnull
在这种情况下很简单,如果集合上的原始函数是list.isNotEmpty(),我使用!符号进行否定。如果有嵌套的大括号,那么可读性会降低。 - Ankur
我同意这不是无法阅读,但正如我之前所提到的,它会影响可读性,这取决于个人。 - Ankur
1
使用 CollectionUtils#isNotEmpty 吗? - user180100
难道你不觉得 ! 这么无用,甚至在这里都不能使用,那它到底是用来干什么的? - Mohsen Kamrani
1
Java(以及C、C++等)不需要“not”函数。它有一个“not”运算符。你可能不喜欢它的拼写或外观,但是在设计时,你不会引入冗余到编程语言中,至少当你知道自己在做什么时不会这样做。 - user207421
1个回答

4

这本身并不是一个坏主意,也不会影响任何事情。

然而,我认为很多人会不同意您关于使用 ! 来否定事物的正常方式“难以阅读”的观点。

if ( ! list.isEmpty() )

if ( not( list.isEmpty() ) )

在我看来并没有太大区别。


1
实际上,第一个比第二个少按键 :) - Pradeep Simha
2
这是一个优点,因为程序员很懒 ;-) - mvreijn
IDE可以帮助自动建议某些内容,但我的观点是为了可读性... - Ankur
1
@Ankur:每个Java开发者都知道!表示“not”,并在脑海中读作“not”。也许你还不习惯,但它会变得自然。使用not()会降低可读性,因为当我阅读这段代码时,我会想知道not()可能会做什么,我不得不检查它是否只是标准!运算符的专有别名。 - JB Nizet
@JBNizet 是的,你说得对,我们可能需要检查 not 的作用,这就是为什么询问任何标准库是否提供任何选项的原因,是的,我所读到的!又取决于个人,因此才有了这个问题... - Ankur
当你已经有一个一字标准运算符时,为什么还需要一个标准API呢? - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接