- Learn Type:Driven Development
- Yawar Amin Kamon Ayeva
- 261字
- 2021-07-02 14:41:23
Adding types
With a static type system, we can restrict our makePerson function in quite a few ways. Here's an example using ReasonML, the language that we're using in this book to learn type-driven development:
/* src/Ch01/Ch01_Demo.re */
type person = {id: int, name: string};
let makePerson(id, name) = {id, name};
Here, we define a new data type, person, and a function that creates a value of the type given the required arguments. We have one more line in the preceding code than we do in the JavaScript code, but in exchange, we get the following guarantees:
- The caller cannot pass in null or undefined arguments
- The caller cannot pass in the wrong types of arguments
- The caller cannot mutate the result value of the function
Notice in the previous example that we didn't have to declare the argument or types for the makePerson function. This is because ReasonML has great type inference that automatically understands that int, string, and person must be the only possible types allowed for those parts of the function.
ReasonML will compile the previous code into the following JavaScript:
// src/Ch01/Ch01_Demo.bs.js
function makePerson(id, name) { return [id, name]; }
As you can see, the preceding code looks almost exactly like the JavaScript we wrote earlier—the main difference is that Reason's JavaScript compiler turns records (which we'll explore later) into JavaScript arrays to take advantage of their speed.
This is just a glimpse of what static types can do to your codebase. In the coming chapters, we'll have a look at many more practical applications.
- Progressive Web Apps with React
- ASP.NET MVC4框架揭秘
- R語言游戲數據分析與挖掘
- 用Python實現深度學習框架
- Java編程技術與項目實戰(第2版)
- Learning R for Geospatial Analysis
- RealSenseTM互動開發實戰
- 好好學Java:從零基礎到項目實戰
- 精通MySQL 8(視頻教學版)
- Mastering Concurrency in Python
- Python Projects for Kids
- Hadoop Blueprints
- C語言王者歸來
- INSTANT EaselJS Starter
- 數據庫技術及應用教程上機指導與習題(第2版)