控制抽象之简化客户代码
为什么80%的码农都做不了架构师?>>>
前一个例子演示了高阶函数能在你实现API的同时,帮助减少代码重复。高阶函数的另一个重要应用是把它们放在API里使客户代码更简洁。scala的集合类型的特定用途循环方法(这些特殊目的的循环方法定义在特质Iterable中,被List、Set、Array、还有Map扩展)提供了一个很好的例子。
但这里我们先来看看命令式风格的例了,判断传入的List是否包含了负数:
def containsNeg(nums:List[Int]):Boolean = {var exists = falsefor(num <- nums) if(num < 0) exists = trueexists
}
然后就可以这样调用:
不过更简洁的定义方式是对传入的List调用高阶函数exists,如:
def containsNeg(nums:List[Int]) = nums.exists(_ < 0)
这个版本的containsNeg能产生和前面的那个一样的结果:
exists方法代表了控制抽象。是scala库提供的特定用途循环架构而不是像while或for那样内建在scala语言里的。因为exists是公开在scala的集合类型API里的,所以它减少的是API的客户代码中的重复。scala的标准库中还有许多其他循环方法。如果你能发现使用它们的机会,那么像exists一样,它们经常能缩短你的代码。
转载于:https://my.oschina.net/fhd/blog/277846
控制抽象之简化客户代码相关推荐
- 消息复杂计算的抽象和简化
作者:蒋文豪(四点) 消息客户端计算的复杂性 在客户端的设计中,一般的分层会至少包含下层的数据服务层和上层的UI层,下层的数据模型主要由所在领域决定,相对独立.稳定,而UI则更多变,且会对多种数据进行 ...
- Programming Language Pragmatics 习题解答七(类型系统)、八(子程序和控制抽象)
第七章介绍了类型系统,包括内部类型(record,array,recurision,file).可自定义类型.类型等价性/类型相容/类型推理的规则,类型的转换/强制/非变换类型转换,类型等价(基于名字 ...
- scala控制抽象之传名参数(名调用)
我们在用scala定义函数时,一般参数都是各种类型的值,这是常见的值调用 但偶尔也有需要把代码块作为参数传入的情况(名调用) 匿名函数经常可以作为函数的参数传入,非匿名函数也行(函数作为返回值返回就更 ...
- erlang(20)-控制抽象与判断素数
定义自己的for 产生序列 -module(learnerl). -export([get_result/2]).for(Max,Max,F)->[F(Max)]; for(I,Max,F)-& ...
- Scala控制抽象:将一段代码作为参数传递给高阶函数去执行
- 【操作系统/OS笔记12】同步互斥的三种实现方法:禁用硬件中断、基于软件的解决方案、更高级的抽象
本次笔记内容: 9.5 临界区 9.6 方法1:禁用硬件中断 9.7 方法2:基于软件的解决方案 9.8 方法3:更高级的抽象 文章目录 临界区 管理临界区的方法 方法1:禁用硬件中断 方法2:基于软 ...
- C语言程序设计入门之抽象编程
C语言程序设计入门之抽象编程 前言 1. 程序入门抽象:变量和过程抽象 2.程序结构抽象:顺序.选择.循环 3.程序进阶抽象:问题(算法)抽象 4.软件工程抽象:函数(模块或问题分解)抽象 5.面向对 ...
- 专访 KubeVela 核心团队:如何简化云原生复杂环境下的应用交付和管理
01 背景 Aliware 12 月 9 日,在 2021 年 KubeCon 云原生技术峰会上,CNCF 开源项目 KubeVela 宣布推出了 1.2 版本. KubeVela 是一个简单易用且高 ...
- 生产排程计划与物料控制的正确使用原则
APS系统力图使计划计算机化.这可能会给众多计划人员带来一些烦恼和忧虑,因为他们会害怕被机器所取代. 之所以有这种恐惧是因为APS系统有信息可视化,做计划的时间短,便于使用最优化方法三大优点. 然而, ...
最新文章
- 《走进SAP(第2版)》——第2章 企业软件的SAP之路2.1 企业资源计划(ERP)...
- 一个textview多种颜色
- Oracle SQL语句大全(二)
- spring整合问题集合1
- Tomcat启动报内存溢出错误解决(两种)
- c++ 检查缓冲大小与记录大小是否匹配_后端程序员不得不会的 Nginx 转发匹配规则...
- php 二维sort,php 二维数组排序
- python列表元组_Python列表元组操作
- svn: E155007 和 E155004
- Vue之Promise
- linux jupyter 远程,Linux下远程访问Jupyter Notebook 配置
- java 设计模式学习笔记四 prototype模式
- vivo浏览器缓存视频如何拷贝到电脑上
- 优秀课件笔记之WINDOWS XP 操作系统
- 7、前后端分离中的权限管理思路
- 元数据与数据治理|apache-atlas2.0.0 源码编译和安装部署(CHD版本)
- X-Frame-Options简介
- 树莓派制作内网dns服务器,树莓派使用dnsmasq搭建DNS服务器
- Win10企业版系统安装 NET Framework 4.8的时候提示错误信息
- 黑白图片复原为彩色Picture Colorizer(图片着色器)
热门文章
- [BZOJ 4571][Scoi2016]美味(主席树)
- python thrift 进行filter
- 黑马程序员——程序结构
- 安装windows服务提示输入用户名和密码
- 自适应网页设计(转)
- vueCli3中使用代理,点击页面的刷新按钮时报错
- quartz SpringMvc 动态定时任务(quartz2.2)
- FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析
- 程序代码移植和烧录需要注意什么_法人变更需要注意什么
- idea展示runDashboard的窗口