学习新时代编程语言Rust视频教程-18罗列出所有裤子品牌名称——面向对象之抽象

上一期我们介绍了struct的使用以及使用impl关键字定义方法、类型关联方法,使用println宏输出裤子对象的编号、名称、长度信息。接下来我们接着说裤子。我们先前讲到小胖的裤子分为A/B/C3个品牌,但是在编写代码时我们的裤子名称是使用字符串表示的,也就是说我们可以任意写裤子品牌名称,可能一不小心就把B牌写成了BB牌,把Adidas写成了Adadas。怎么帮助我们不写错品牌名称呢Rust中提供了枚举类型,接下来我们通过代码看下怎么使用枚举类型帮助防止写错品牌名称。
首先使用enum关键字定义一个品牌名称的枚举类型,跟定义struct差不多后面也是使用花括号,跟定义struct不一样的是,花括号里罗列的是枚举类型的可用值而struct的花括号里是结构体类型的属性信息。我们在花括号中罗列出品牌名称的可用值,也就是A品牌、B品牌和C品牌

接下来我们修改自定义类型Trousers的定义把它的品牌名称从字符串类型改为枚举类型

修改下类型关联函数new的参数定义,把品牌名称从String类型换成Brand枚举类型

这时在创建裤子对象时就不能使用String类型的品牌名称了,只能使用我们我们定义的枚举值,使用枚举类型名称加双冒号加枚举值的形式指定枚举值。

修改好后我们运行看下效果,报了个错误,这个错误我们上一期刚遇到过吧,println宏也不知道怎么输出Brand枚举类型是吧们给Brand类型也添加下derive Debug注解,都使用冒号加问号的形式输出。修改好后在运行看下效果。这次没有报错了,我们可以看到在命令行里输出了裤子的信息,裤子的品牌属性是一个Brand类型的枚举值。如果A品牌还有A1和A2俩个子品牌,我们也想在枚举信息中体现出来怎么办呢们可以让枚举值A携带一个String类型的备注信息

这样我们在使用枚举A时就可以添加一个备注说明是A1还是A2,编写好后保存退出,运行看下效果

学习新时代编程语言Rust视频教程-18罗列出所有裤子品牌名称——面向对象之抽象
这时编译出错了吧,Rust提示我们BB根本不存在,还提示我们是不是要使用的是B多好。当我们使用了不存在的枚举值Rust会报错,这个比较好理解,在模式匹配中如果枚举值没有全部考虑到Rust也会报错,接下来我们试一下子,先把BB改回来。使用match 关键字匹配trousers_b的品牌属性,如果是B品牌,我们就输出这是B品牌的裤子。Brand类型的枚举值有A/B/C 3种类型,我们这里只罗列了B品牌的情况,没有考虑A和C。
学习新时代编程语言Rust视频教程-18罗列出所有裤子品牌名称——面向对象之抽象
报错了吧ust提示我们没有考虑到品牌是A和C的情况,这样可以防止我们在编写代码时问题考虑不全是吧是如果我们就只关心B品牌的裤子,A,C品牌的裤子都不关心,还得一个一个写出来吗 在模式匹配中可以直接使用下划线代表其它所有可能的值,我们在这里输出这是其它品牌的裤子。注意这里需要一个逗号分割。
if let
编写好后运行看下效果 代码也可以正常执行吧。从这里看Rust还是比较灵活比较人性话的吧一种语言特性都有它产生的背景和要应对的问题,虽然枚举类型在面向对象编程中并不是必须的,但现实生活中的确有很多枚举类型存在比如性别,年级,省份等,所以Rust也提供了枚举类型方便我们对现实需求中的类型进行抽象。把业务需求场景映射成类型、对象代码的过程我们就称为抽象,抽象是面向对象编程的基础。在介绍编程语言发展阶段时我们提到,面向对象是为了提高软件可维护性而设计的,接下来我们会介绍面向对象编程的另一个特性也是提高软件可维护性的一个重要手段——封装。

内容根据视频整理,相应视频内容可访问

51cto学院:

学习新时代编程语言Rust视频教程-18罗列出所有裤子品牌名称——面向对象之抽象

There is no success without challenges, struggles and setbacks. Never quit.

可以添加微信问问

学习新时代编程语言Rust视频教程-18罗列出所有裤子品牌名称——面向对象之抽象 微信名片 学习新时代编程语言Rust视频教程-18罗列出所有裤子品牌名称——面向对象之抽象

来源:一个不安分的程序员

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年9月15日
下一篇 2019年9月15日

相关推荐