Elixir ———神奇的管道符
Elixir崇尚简洁,Unix的一个重要哲学就是管道操作符,Elxiir也完美的试用与函数。
通常而言,程序员把功能点写成一个个精巧的函数。然后通过函数的组合嵌套实现功能。
1 2 3 4 | people = DB .find_customers orders = Orders .for_customers(people) tax = sales_tax(orders, 2013) filing = prepare_filing(tax) |
这样的面包黄油(Bread-and-butter)编程。我们还可以选择这样简写:
1 | filing = prepare_filing(sales_tax( Orders .for_customers( DB .find_customers), 2013)) |
上面的代码一个函数的调用使用上一个函数的结果作为参数,就像小孩子吃蔬菜一样。不仅比较难读,而且如果你想知整个过程的顺序,不得不阅读里面的内容。
Elixir有一个更好的方式:
1 filing = DB.find_customers 2 |> Orders.for_customers 3 |> sales_tax(2013) 4 |> prepare_filing
|>
操作符会把左边表达式的结果当成参数传入右边的函数。
第一个函数调用返回customers的列表,这个结果传给for_customers函数。for_customers调用的返回结果order,order作为第一个参数传给sales_tax。此时2013变成了第二个参数。
val |> f(a,b)
等价于 f(val,a,b)
1 2 3 | list |> sales_tax(2013) |> prepare_filing |
等价于 prepare_filing(sales_tax(list, 2013))
.
上面的例子,每一项我都单独的写了一行,这在Elixir已经不过时了。有逼格的方式是写成一行链式的效果:
1 2 | iex> (1..10) |> Enum .map(&(&1*&1)) |> Enum .filter(&(&1 < 40)) [1, 4, 9, 16, 25, 36] |
注意: 使用&
语法糖来作为函数的缩写,同时也使用了管道操作符。
我再重复一次,你总是需要在管道符号内使用圆括号调用函数。管道符的好处是让你写的代码符合规范和有条理,简短而漂亮。
例如sales-tax 的例子,你可以在纸上写下:
- 获取顾客列表
- 通过顾客列表生成一个订单列表
- 计算出租车的订单价值
- 准备出租车
从餐巾纸到代码规范,你只需要用 |> 来串联每一个函数的调用。
DB.find_customers # 获取顾客列表 |> Orders.for_customers # 通过顾客列表生成一个订单列表 |> sales_tax(2013) # 计算出租车的订单价值 |> prepare_filing # 准备出租车
编程是数据的转换,|>很好的体现了数据转换。之前Elixir管道一试就针对了一个具体问题做了实践。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律