什么时候应该在动态类型语言中使用 null?

发布于 12-09 17:14 字数 298 浏览 1 评论 0原文

每当我用动态类型语言编写函数时,我仍然困惑于返回什么是最好的,这样既可以轻松处理调用函数中的错误,又可以保持程序流程流畅。

当使用动态类型语言的函数中出现问题时,社区认为应该返回什么是正确的?

我的一般想法是:

  1. 如果您返回实际值,则应该在函数成功执行时使用该类型返回数据,或者如果出现意外情况则返回 null。

  2. 应该为通用实用函数保留抛出异常

  3. 如果发生错误,例如,如果用户期望string,如果发生错误,则不应返回空字符串。

Whenever I write functions in dynamically-typed languages, I'm still torn as to what is the best thing to return to make it easy to both handle errors in calling function and keep program flow fluid.

What does the community think are the right things to return when things don't go right in functions using dynamically-typed language?

My general thoughts are:

  1. if you are returning an actual value, you should either return data using that type if the function successfully executed, or null if something was unexpected.

  2. throwing exceptions should be reserved for generic utility functions

  3. you should not return a default value for a particular type if errors occurred, e.g., if the user expects a string, you should not return the empty string if errors occurred.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

楠木可依2024-12-16 17:14:49

当异常发生时(按照该词的含义)抛出异常。 null 类似于“无”,这并不意味着发生错误是不可避免的。例如,如果 find() 方法找不到任何与某些给定条件匹配的内容,则可能会返回 null。当您将 null 定义为“错误”时,您就拥有了一种神奇的值,就像古老的“神奇数字”一样,它必须始终被记录下来等等。

When an exception occurs (in the meaning of the word) throw an exception. null is something like "nothing", that does not inevitable mean, that an error occurs. For example a find()-method may return null in case it found nothing, that matches some given criteria. When you define null as "error", then you have a kind of magic value, like the good old "magic numbers", that always must be documented and such.

紫轩蝶泪2024-12-16 17:14:49

我对使用自定义异常有疑问。听起来很复杂。

这样做:
通过引用传递变量以返回数据,并使用 bool 返回值表示成功/失败

I question using custom exceptions. Sounds complicated.

do this:
pass variables by reference to return your data, and use a bool return value for success/fail

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文