处理零个对象和属性的最佳实践是什么?

戴夫·桑德斯

假设我有一个User对象,它具有一个email属性,并且我需要它们的大写字母的最后一个字母email

u = User.find(1)    
letter = u.email.upcase.last

如果u或者emailnil在这条产业链,然后我得到一个NoMethodError: undefined method 'blah' for nil:Nilclass在大多数情况下,我应该能够解决该问题,但是有时候,它nil会变得不应该或难以控制。一种方法是冗长的:

u = User.find(1)
letter = nil
if u && u.email
 letter = u.email.upcase.last
end

但是,从某种角度看或一长串的观点来看,这很烦人并且很危险a.bunch.of.properties.down.a.hierarchy我了解try了Rails中的方法:

u = User.find(1)
letter = u.try(:email).try(:upcase).try(:last)

这不那么冗长,但是我写所有这些尝试都觉得很讨厌。一旦安装try了链,我就必须一直使用它们。有没有更好的办法?

颂歌

我喜欢使用Null对象模式Avdi有一篇很棒的文章对此进行了解释,但是基本思想是您可以拥有一个小类,可以代表一个对象并对可能传递原始对象的消息进行合理响应。我发现这些方法不仅对避免NoMethodErrors有用,而且对于设置默认值/好的消息也很有用

例如,您可以执行以下操作:

class NilUser
  def email
    "(no email address)"
  end
end

u = User.find(1) || NilUser.new
u.email.upcase.last # => No errors!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

保存和检索Java对象的最佳实践是什么?

来自分类Dev

处理 RxSwift 重试和错误处理的最佳实践是什么

来自分类Dev

确保在处理多个级别的对象时设置JavaScript对象且未定义JavaScript对象的最佳实践是什么?

来自分类Dev

在MVC中处理静态内容的最佳实践是什么

来自分类Dev

MySQL中时区处理的最佳实践是什么?

来自分类Dev

在C#中处理异常的最佳实践是什么?

来自分类Dev

在expressJS中处理路线的最佳实践是什么

来自分类Dev

处理作曲家废弃包装的最佳实践是什么?

来自分类Dev

烧瓶错误处理的最佳实践是什么?

来自分类Dev

在Breeze中处理多租户安全的最佳实践是什么?

来自分类Dev

实施Rx处理程序的最佳实践是什么?

来自分类Dev

Extjs 6:处理重复配置的最佳实践是什么

来自分类Dev

在 Laravel 中处理空的雄辩查询的最佳实践是什么?

来自分类Dev

使类的属性线程安全的最佳实践是什么?

来自分类Dev

对我而言,最佳实践管理属性是什么?

来自分类Dev

在RStudio项目之间传输对象的最佳实践是什么?

来自分类Dev

用JavaScript编写对象并做出反应的最佳实践是什么

来自分类Dev

创建Objective-C对象的最佳编程实践是什么?

来自分类Dev

UncheckedIOException和Stream API的成语/最佳实践是什么?

来自分类Dev

关于引导和IOC容器的最佳实践是什么?

来自分类Dev

与帆和蒙哥建立关系的最佳实践是什么

来自分类Dev

UncheckedIOException和Stream API的成语/最佳实践是什么?

来自分类Dev

自动布局navigationController TabBarController和ToolBar,最佳实践是什么?

来自分类Dev

管理和移动Docker容器的最佳实践是什么?

来自分类Dev

需要显示值(即使它为零)时写条件的最佳实践是什么

来自分类Dev

比较两个对象中选定属性的最佳方法是什么

来自分类Dev

比较具有多个列表属性的两个对象的最佳方法是什么

来自分类Dev

用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)

来自分类Dev

处理onError和继续处理的最佳实践

Related 相关文章

  1. 1

    保存和检索Java对象的最佳实践是什么?

  2. 2

    处理 RxSwift 重试和错误处理的最佳实践是什么

  3. 3

    确保在处理多个级别的对象时设置JavaScript对象且未定义JavaScript对象的最佳实践是什么?

  4. 4

    在MVC中处理静态内容的最佳实践是什么

  5. 5

    MySQL中时区处理的最佳实践是什么?

  6. 6

    在C#中处理异常的最佳实践是什么?

  7. 7

    在expressJS中处理路线的最佳实践是什么

  8. 8

    处理作曲家废弃包装的最佳实践是什么?

  9. 9

    烧瓶错误处理的最佳实践是什么?

  10. 10

    在Breeze中处理多租户安全的最佳实践是什么?

  11. 11

    实施Rx处理程序的最佳实践是什么?

  12. 12

    Extjs 6:处理重复配置的最佳实践是什么

  13. 13

    在 Laravel 中处理空的雄辩查询的最佳实践是什么?

  14. 14

    使类的属性线程安全的最佳实践是什么?

  15. 15

    对我而言,最佳实践管理属性是什么?

  16. 16

    在RStudio项目之间传输对象的最佳实践是什么?

  17. 17

    用JavaScript编写对象并做出反应的最佳实践是什么

  18. 18

    创建Objective-C对象的最佳编程实践是什么?

  19. 19

    UncheckedIOException和Stream API的成语/最佳实践是什么?

  20. 20

    关于引导和IOC容器的最佳实践是什么?

  21. 21

    与帆和蒙哥建立关系的最佳实践是什么

  22. 22

    UncheckedIOException和Stream API的成语/最佳实践是什么?

  23. 23

    自动布局navigationController TabBarController和ToolBar,最佳实践是什么?

  24. 24

    管理和移动Docker容器的最佳实践是什么?

  25. 25

    需要显示值(即使它为零)时写条件的最佳实践是什么

  26. 26

    比较两个对象中选定属性的最佳方法是什么

  27. 27

    比较具有多个列表属性的两个对象的最佳方法是什么

  28. 28

    用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)

  29. 29

    处理onError和继续处理的最佳实践

热门标签

归档