Questions tagged «null»

Null是缺少值。Null通常用于指示引用或指针变量指向内存中没有对象。

10
可空类型是否比魔术数字更可取?
最近我一直在和一位同事辩论。我们专门使用C#,但这可以应用于具有可空类型的任何语言。假设您有一个代表最大值的值。但是,此最大值是可选的。我认为可为空的数字是可取的。我的同事援引先例,赞成使用零。当然,诸如网络套接字之类的东西通常使用零来表示无限超时。如果我今天要编写处理套接字的代码,我个人会使用可为空的值,因为我认为它可以更好地表示没有超时这一事实。 哪个代表更好?两者都需要条件检查其含义为“ none”的值,但是我相信可以为null的类型可以更好地传达意图。

3
C#8非空引用和Try模式
在C#类中有一个模式,以Dictionary.TryGetValue和表示int.TryParse:一种方法,该方法返回指示操作成功的布尔值和包含实际结果的out参数;如果操作失败,则将out参数设置为null。 假设我正在使用C#8不可为空的引用,并且想为自己的类编写一个TryParse方法。在正确的签名是这样的: public static bool TryParse(string s, out MyClass? result); 因为在错误情况下结果为null,所以必须将out变量标记为可为空。 但是,通常使用Try模式,如下所示: if (MyClass.TryParse(s, out var result)) { // use result here } 因为我仅在操作成功时才​​进入分支,所以结果在该分支中永远不能为null。但是因为我将其标记为可为空,所以现在我必须检查它或使用它!来覆盖: if (MyClass.TryParse(s, out var result)) { Console.WriteLine("Look: {0}", result.SomeProperty); // compiler warning, could be null Console.WriteLine("Look: {0}", result!.SomeProperty); // need override } 这很丑陋,有点不符合人体工程学。 由于典型的使用模式,我还有另一种选择:关于结果类型: public static …
22 c#  .net  null 

6
在C或C ++中执行“空检查”是什么意思?
我一直在学习C ++,并且很难理解null。特别是,我阅读的教程提到进行“空检查”,但是我不确定这意味着什么或为什么有必要。 到底是什么? “检查为空”是什么意思? 我是否总是需要检查null? 任何代码示例将不胜感激。
21 c++  c  null 


11
处理Java中null的最佳方法?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我有一些由于NullPointerException而失败的代码。在不存在该对象的对象上调用一个方法。 但是,这导致我考虑了解决此问题的最佳方法。我是否总是对空值进行防御性编码,以便将来为空指针异常证明代码,还是应该修复空值的原因,以免它在下游发生。 你怎么看?
21 java  null 

4
我应该在布尔型数据库字段中将False作为Null存储吗?
假设您有一个应用程序,该应用程序的表中有一个布尔字段,User称为Inactive。 仅将false存储为null是否有天生的错误?如果可以,请您解释一下不利之处吗?几个月前,我已经与某人讨论了这一点,我们都同意,只要您在整个应用程序/数据库中始终如一地进行操作,就没有关系。最近,我认识的某个人强调应该使用“ true” true或“ true” false,但是他们并没有真正解释原因。

2
检查用@Nonnull注释的参数是否为null?
我们已经开始使用FindBugs并@Nonnull适当地注释了我们的参数,它很有效地指出了周期早期的错误。到目前为止,我们一直在null使用Guava的方法继续检查这些参数checkNotNull,但我宁愿null仅在边缘进行检查-无需检查即可输入值的地方null,例如SOAP请求。 // service layer accessible from outside public Person createPerson(@CheckForNull String name) { return new Person(Preconditions.checkNotNull(name)); } ... // internal constructor accessed only by the service layer public Person(@Nonnull String name) { this.name = Preconditions.checkNotNull(name); // remove this check? } 我了解这本身@Nonnull并不会阻止null价值观。 但是,鉴于FindBugs会指出将值从未标记字段转移到已标记字段的任何地方@Nonnull,我们是否可以依靠它来捕获这些情况(它确实如此),而不必在null传递给它们的任何地方检查这些值系统?我是否天真地想要信任该工具并避免进行这些冗长的检查? 底线:虽然删除null下面的第二张支票似乎很安全,但这是不好的做法吗? 这个问题可能与“ 如果有人不希望null,是否应该检查null”这个问题太相似了,但是我要特别问一下@Nonnull注解。
19 java  null 

8
什么时候应该在C中检查指针是否为NULL?
总结: C语言中的函数是否应该始终检查以确保未取消引用NULL指针?如果不是,何时跳过这些检查是否合适? 详细资料: 我读过一些有关编程面试的书,我想知道在C语言中对函数参数进行输入验证的适当程度是多少?显然,任何需要用户输入的功能都需要执行验证,包括NULL在取消引用指针之前检查指针。但是,如果您不希望通过API公开同一文件中的函数,该怎么办? 例如,以下内容出现在git的源代码中: static unsigned short graph_get_current_column_color(const struct git_graph *graph) { if (!want_color(graph->revs->diffopt.use_color)) return column_colors_max; return graph->default_column_color; } 如果*graph为,NULL则将取消引用空指针,这可能会使程序崩溃,但可能导致某些其他不可预测的行为。另一方面,函数是static,因此程序员可能已经验证了输入。我不知道,我只是随机选择了它,因为它是用C编写的应用程序中的一个简短示例。我已经看到许多其他地方使用了指针而不检查NULL。我的问题不是针对此代码段的。 我在异常处理的上下文中看到了一个类似的问题。但是,对于不安全的语言(例如C或C ++),不会自动传播未处理的异常。 另一方面,我在开放源代码项目(例如上面的示例)中看到了很多代码,这些代码在使用它们之前不做任何指针检查。我想知道是否有人对何时将检查放入函数与是否假定使用正确参数调用函数的准则进行了思考。 对于编写生产代码,我通常对此问题感兴趣。但是我也对编程面试感兴趣。例如,许多算法教科书(例如CLR)倾向于以伪代码表示算法,而没有任何错误检查。但是,尽管这对于理解算法的核心很有帮助,但显然不是一种好的编程实践。因此,我不想告诉采访者我正在跳过错误检查以简化代码示例(就像教科书一样)。但是我也不想出现带有过多错误检查的低效率代码。例如,graph_get_current_column_color可以将其修改为检查*graph空值,但不清楚是否*graph为空值,除非不取消引用它。
18 c  validation  null 

4
为什么Java String没有静态字符串操作方法?
Java设计人员为什么不在类中创建字符串操作方法的静态版本java.lang.String?我指的是以下方法,但是问题也可以扩展到该类中的其他非静态方法。 concat(String) substring(int, int) replace(char, char) toLowerCase() replace(CharSequence, CharSequence) toLowerCase(Locale) replaceAll(String, String) toString() replaceFirst(String, String) toUpperCase() split(String) toUpperCase(Locale) split(String, int) trim() substring(int) 仅使用这些方法的非静态版本会在必须调用此方法的任何地方强制进行显式 null检查。例如,简单的调用example = example.trim()会导致NullPointerException异常如果String example = null。因此,程序员必须执行以下样板空检查: if (example != null) example = example.trim(); // OR: example = (example==null) ? null : example.trim(); example = (example==null) ? null …
17 java  api-design  null 

4
在Java中无需空检查就可以获取值
很多时候,我发现自己从某些数据层次结构中获取值时会进行空检查,以避免NullPointerExceptions,因为我发现NullPointerExceptions容易出错并且需要大量样板。 我编写了一个非常简单的例程,使我在获取对象时可以跳过空检查... public final class NoNPE { public static <T> T get(NoNPEInterface<T> in) { try { return in.get(); } catch (NullPointerException e) { return null; } } public interface NoNPEInterface<T> { T get(); } } 我有点像这样 Room room = NoNPE.get(() -> country.getTown().getHouses().get(0).getLivingRoom()); 上面的结果导致我得到一个Room对象或一个null,而不必对所有父级进行null检查。 您如何看待以上内容?我在创建有问题的模式吗?您认为有更好的方法吗?
15 java  null 

5
继承与具有空值的其他属性
对于具有可选字段的类,使用继承或可为空的属性更好吗?考虑以下示例: class Book { private String name; } class BookWithColor extends Book { private String color; } 要么 class Book { private String name; private String color; //when this is null then it is "Book" otherwise "BookWithColor" } 要么 class Book { private String name; private Optional<String> color; //when isPresent() …
12 java  inheritance  class  null 


1
有什么直觉可以支持在Haskell中将Maybe构造函数称为“ Just”?
像这样的可选类型的直觉Maybe Int是:要么没有 Int(因此Nothing存在),要么有一些 Int。那里有东西。 对我来说,我们将类型构造器称为“负数”情况是有意义的Nothing,因为这恰好意味着-那里没有Int。但是,为什么在重点在于实际存在的东西的情况下使用“ 只是 ”一词呢? 对我来说,“ Just”一词的含义是它所描述的事物少于替代事物。与实际存在的事物相反 例如, 你今晚有事吗? B:没有;我只是待在家里看电视。 答:您是否调查过房屋周围令人毛骨悚然的鬼声? B:是的,事实证明它实际上只是一只猫头鹰。 显然,我缺乏这种命名选择所基于的直觉。它是什么?因为对我来说,Just字样与它在Maybe类型中的用法相反。

4
Ruby:if变量vs if variable.nil?
我是Ruby的新手,当我发现除nil和false之外的所有对象均为真时,我感到很惊讶。偶数为0。 关于该语言的属性的一件好事是,您可以编写: if !variable # do stuff when variable is nil end 我的同事是经验丰富的Ruby开发人员,他们坚持认为我应该选择该选项,而不要使用.nil?像这样: if variable.nil? # do stuff when variable is nil end 但是,我认为后者是一个更好的选择,原因有两个:1.我认为它更面向对象,尤其是在像Ruby这样的语言中,一切都是对象和消息交换。2.我认为,即使它不那么紧凑,它也更具可读性。 我在这里犯“新手”错误吗?

10
安全限制是否应导致服务返回null或引发异常?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我在这个问题上与经验丰富的开发人员有些分歧,想知道其他人对此有何看法?我们的环境是Java,EJB 3,服务等。 我编写的代码调用服务来获取事物和创建事物。我遇到的问题是我得到了没有意义的空指针异常。例如,当我要求服务创建一个对象时,我得到空值。当我尝试查找具有已知有效ID的对象时,返回空值。我花了一些时间试图弄清楚代码中的错误。因为我经验不足,所以我通常以为我做错了什么,但是事实证明,返回null的原因是安全性。如果使用我的服务的用户主体对目标服务没有正确的权限,则它仅返回null。这里大多数其他服务的记录也不太好,因此显然这只是您必须了解的内容。 当开发人员编写与服务交互的代码时,这相当令人困惑。如果服务有一个异常,该异常将告诉我用户没有适当的权限来加载此事物或创建该事物,这对我而言将更为有意义。然后,我会立即知道为什么我的服务无法按预期工作。 编写该服务的经验更丰富的开发人员认为,索要数据不是错误条件,并且仅应在错误条件下引发异常,而不是在用户无法访问数据时抛出异常。通常会在GUI中查找这些数据,对于没有正确权限的用户,这些事情简直“不存在”。简而言之:问是没有错的,因此也不例外。Get方法返回null,因为对那些用户来说那些“不存在”的东西。当不允许用户创建东西时,Create方法返回null。 这是正常的和/或良好的做法吗?我更喜欢使用异常,因为我发现更容易知道发生了什么。因此,例如,如果您请求一个具有无效ID的对象,则我宁愿抛出NotFoundException,而不是返回null。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.