8.2.1 扩展已有类型

8.2.1 扩展已有类型

计算机中不是以十进制作为单位换算的基准,而是二进制,一般会以210作为换算的数量级,即1024。如果对Double类型进行扩展就可以快速地得到这些换算结果,而不是每次都要添加代码进行计算。示例如下:

动手写8.2.1 DefineExtension

控制台输出如下:

本例中,给Double类型增加了一个扩展,可以将当前的数值在计算机中进行换算。比如内存大小和硬盘大小都是这么计算的。厂商在制造的时候一般以十进制的大小作为存储单位,比如厂商声明的K就是1000,M就是1000000,G就是109,T就是1012,因此很多人就会有疑问,买的1T硬盘,计算机读出来却只有900多G,是不是因为厂商缺斤少两才会出现这样的情况?其实不是,只是因为计算机在计算的时候是以二进制作为单位换算。

本例对Double增加了一个扩展,这么编写其实没什么问题,但是如果扩展的功能多了,重复编写后,代码的可读性就下降了。因为每个extension都是Double,代码维护的时候就不知道这个扩展具体增加了什么功能。这个时候需要给类型起个别名,这样每次扩展的时候就知道具体在增加什么功能,示例如下:

使用typealias可以给已有类型起个别名,开发者可以在这个别名的基础上,对已有类型进行扩展。使用别名之后,代码的维护者就能清晰地知道这个扩展具体在做什么了。本例为Storage的计算做了一次换算的操作,用Storage这个别名进行扩展,可读性变得更高了。本书也建议开发者遵循“让代码能够自己说话”的理念进行编码,虽然很多时候可以通过编写注释的方式帮助代码的阅读者去理解代码的功能,但是实际上大部分开发者都不会在编写完代码之后就立即添加注释。