Kotlin代数数据类型总结(部分)

什么是代数数据类型(ADT)?

比如通过常见的枚举来创建一个简单的代数数据类型。

常见的代数类型是“和”类型与“积”类型。

 

代数:就是能代表数字的符号。像一元方程:

x+5=6

y*3=21

上面的x,y 就是代数,x代表数字1,y代表数字7。

对于操作符:“+”和“*”,通过代数和操作符能做什么?

x*1=z

a+2=c

像上面的x 与1相乘得到新的代数。a与2相加得到一个新的代数c。

如果上面的代数与数字转换成编程语言中方的类或者值,再通过某种操作得到新类型?

将这些代数或者数字转换成类型,那么这种被我们用代数或者数字换成的类型,以及通过这些类型所产生的新类型就叫做代数数据类型。

 

代数数据类型与when表达式组合使用

例:

根据一些条件来计算下面几种图形的面积:

1.圆形(给定半径)

2.长方形(给定长和宽)

3.三角形(给定底和高)

 

首先将上面的图形抽象成ADT,上面图形的共同点,即它们都是几何图形(Shape)。所以可以利用密封类进行抽象:

sealed class Shape {
    class Circle(val radius: Double) : Shape()
    class Rectangle(val width: Double, val height: Double)
    class Triangle(val base: Double, val height: Double)
}

 

上面代码将图形抽象成了ADT,整个Shape就是一个和类型,其中的Circle、Rectangle、Triangle就是通过将基本类型Double构造成类而组合成的积类型。

 

利用when表达式定义一个计算各个图形面积的方法:

fun getArea(shape: Shape): Double = when (shape) {
    is Shape.Circle -> Math.PI * shape.radius * shape.radius
    is Shape.Rectangle -> shape.width * shape.height
    is Shape.Triangle -> shape.base * shape.height / 2.0
}

 

通过ADT和when表达式,上面计算面积的代码非常简洁,不必使用if-else表达式。

参考Kotlin核心编程

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值