65. 优先使用领域特定类型而不是基础类型
来源:互联网 发布:珠海市香洲区人口数据 编辑:程序博客网 时间:2024/06/05 07:20
优先使用领域特定类型而不是基础类型
1999年9月23日,价值3.276亿美元的火星气候探测者号在进入绕火星的轨道时失去了联系,就因为地球上的一个软件错误。这个错误后来被称为“公制单位混淆”。地球上的指挥站的软件使用的是“磅”,而飞行器使用的是“牛顿”,导致指挥站把飞行器的推进器的动力低估了4.5倍。
这是如果使用了更强大的领域特定类型的语言即可防止失败的例子之一。这也是一个Ada语言的多种特性背后的基本原理的一个例子,其首要的设计目标就是实现内嵌的安全攸关软件。Ada对于基础类型和用户定义类型都有着强类型静态检查:
type Velocity_In_Knots is new Float range 0.0 .. 500.00;type Distance_In_Nautical_Miles is new Float range 0.0 .. 3000.00;Velocity: Velocity_In_Knots;Distance: Distance_In_Nautical_Miles;Some_Number: Float;Some_Number:= Distance + Velocity; -- Will be caught by the compiler as a type error.对领域需求较少的程序员也可以通用应用领域特定类型而获得好处,不然他们也可以继续使用语言和库提供的基础类型,例如string和float。Java,c++,Python以及其它现代语言的抽象数据类型是class。使用Velocity_In_Knots和Distance_In_Nautical_Miles之类的class对于代码质量可以增添许多价值:
1. 代码变得更易读,因为它能表达出领域的概念,而不只是float和string。
2. 代码变得更容易测试,因为代码封装了很容易测试的行为。
3. 代码促进了跨应用和系统的重用。
这一点对于静态类型语言和动态类型语言的用户都同样有用,惟一的区别是使用静态类型语言的开发人员可以从编译器得到帮助,而使用动态类型语言的则更可能是依赖他们的单元测试。检查的方式可能不一样,但动机和表达的风格是一致的。
为了实现开发高质量软件的目标,开始探索领域特定类型吧。
原文:Prefer Domain-Specific Types to Primitive Types by Einar Landre
- 65. 优先使用领域特定类型而不是基础类型
- 优先选择基本类型而不是基本类型的包装类型
- Effective JavaScript Item 46 优先使用数组而不是Object类型来表示有顺序的集合
- 使用IE打开特定类型的文件
- 使用google搜索特定类型的文档
- Effective Modern C++: Item 5 -> 优先选择auto而不是显式类型声明
- Java 优先使用基本类型而非装箱基本类型
- 特定类型的表达式
- 基于数据访问的集合类型-领域驱动设计的又一种特定对象
- 优先使用const 而不是 define
- 优先使用组合 而不是继承?
- 类型的使用---类型基础(一)
- C 使用 int 类型来处理字符常量,而不是 char 类型
- Java_语法基础_优先选择基本类型
- 为什么数据库表的int类型字段映射到实体类中要使用Integer类型,而不是int类型?
- 优先选择基本类型
- 优先使用对象组合,而不是使用继承
- QT遍历特定类型文件
- 根据下拉框指定选项自动添加表单元素
- Linux基础day6,c补习,删除字符串中指定字符串,考虑到删除后可能会产生新的子字符串
- Matlab——GUI初涉
- redhat自动获取ip设置
- 30天自制操作系统笔记(一二)
- 65. 优先使用领域特定类型而不是基础类型
- C++库大全
- C语言创建一个文件,写入数据并换行,再依次读取每行的数据,将读取的行数据以一定的格式命名为另一文件的文件名
- Ogre中导入Max烘焙的模型(2)—— MAX中烘焙
- C#中一种可调用的异常处理方法
- C#file文件操作
- Dima and Salad -----codeforces # 214 div.2
- 静态库制作
- 程序员远程工作必会编程语言JavaScript