## 12.安全导航
Ruby 努力成为程序员最好的朋友。 它的制造商正在发明新的方法来改善你的编码体验。 Ruby 2.3 中的此类改进之一是安全导航。 或者一种写不会引发意外错误的条件的方法。 请参阅下面的程序,键入并执行
```rb
# safe_navigation.rb
class Robot
attr_accessor :name
end
robot = Robot.new
robot.name = "Zigor"
puts "The robots name is #{robot.name}" if robot&.name
```
输出量
```rb
The robots name is Zigor
```
因此,程序可以完美地执行而不会出现故障。 查看代码`if robot&.name`,我们很快就会了解它的重要性。
现在,让我们来看一下机器人尚未初始化的情况。 那是 robot = Robot.new 未编写,程序看起来如下图所示
```rb
# safe_navigation_2.rb
robot = nil
puts "The robots name is #{robot.name}" if robot&.name
```
当我们执行上面的程序时,它仍然不会引发错误! 现在看代码`if robot&.name`,它可以解决问题,我们将看看如何。 现在在下面键入程序并执行
```rb
# not_safe_navigation.rb
robot = nil
puts "The robots name is #{robot.name}" if robot.name
```
Output
```rb
not_safe_navigation.rb:4:in `<main>': undefined method `name' for nil:NilClass (NoMethodError)
```
因此,这引发了一个错误。 但是在这里,我们将`if`条件写为`if robot.name`,我们还没有使用安全导航。 现在我们知道了场景。 首先,我们必须检查变量`robot`是否存在或不存在`nil`,如果`robot.name`也不为 nil,那么我们就不能打印该东西。 因此,要更正 [not_safe_navigation.rb](code/not_safe_navigation.rb) ,我们输入以下代码。
```rb
# not_safe_navigation_2.rb
robot = nil
puts "The robots name is #{robot.name}" if robot and robot.name
```
看一下我们需要如何使用 and 运算符提供长条件,如下所示:
```rb
if robot and robot.name
```
相反,我们可以简单地写成
```rb
if robot&.name
```
如 [safe_navigation.rb](code/safe_navigation.rb) 中所示,这很方便。
- 前言
- 红宝石
- 先决条件
- 1.安装 Ruby
- 2.在线资源
- 3.入门
- 4.比较与逻辑
- 5.循环
- 6.数组
- 7.哈希和符号
- 8.范围
- 9.功能
- 10.可变范围
- 11.类&对象
- 12.安全导航
- 13.打破大型程序
- 14.结构和 OpenStruct
- 15. Rdoc
- 16. Ruby 样式指南
- 17.模块和混入
- 18.日期和时间
- 19.文件
- 20. Proc,Lambda 和块
- 21.多线程
- 22.异常处理
- 23.正则表达式
- 24.宝石
- 25.元编程
- 26.基准
- 27.测试驱动开发
- 28.观察者模式
- 29.模板模式
- 30.工厂模式
- 31.装饰图案
- 32.适配器模式
- 33.单例模式
- 34.复合模式
- 35.建造者模式
- 36.策略模式
- 赞助商
- 捐
- 人们怎么说
- 版权
- 取得这本书