为什么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

控制抽象之简化客户代码相关推荐

  1. 消息复杂计算的抽象和简化

    作者:蒋文豪(四点) 消息客户端计算的复杂性 在客户端的设计中,一般的分层会至少包含下层的数据服务层和上层的UI层,下层的数据模型主要由所在领域决定,相对独立.稳定,而UI则更多变,且会对多种数据进行 ...

  2. Programming Language Pragmatics 习题解答七(类型系统)、八(子程序和控制抽象)

    第七章介绍了类型系统,包括内部类型(record,array,recurision,file).可自定义类型.类型等价性/类型相容/类型推理的规则,类型的转换/强制/非变换类型转换,类型等价(基于名字 ...

  3. scala控制抽象之传名参数(名调用)

    我们在用scala定义函数时,一般参数都是各种类型的值,这是常见的值调用 但偶尔也有需要把代码块作为参数传入的情况(名调用) 匿名函数经常可以作为函数的参数传入,非匿名函数也行(函数作为返回值返回就更 ...

  4. erlang(20)-控制抽象与判断素数

    定义自己的for 产生序列 -module(learnerl). -export([get_result/2]).for(Max,Max,F)->[F(Max)]; for(I,Max,F)-& ...

  5. Scala控制抽象:将一段代码作为参数传递给高阶函数去执行

  6. 【操作系统/OS笔记12】同步互斥的三种实现方法:禁用硬件中断、基于软件的解决方案、更高级的抽象

    本次笔记内容: 9.5 临界区 9.6 方法1:禁用硬件中断 9.7 方法2:基于软件的解决方案 9.8 方法3:更高级的抽象 文章目录 临界区 管理临界区的方法 方法1:禁用硬件中断 方法2:基于软 ...

  7. C语言程序设计入门之抽象编程

    C语言程序设计入门之抽象编程 前言 1. 程序入门抽象:变量和过程抽象 2.程序结构抽象:顺序.选择.循环 3.程序进阶抽象:问题(算法)抽象 4.软件工程抽象:函数(模块或问题分解)抽象 5.面向对 ...

  8. 专访 KubeVela 核心团队:如何简化云原生复杂环境下的应用交付和管理

    01 背景 Aliware 12 月 9 日,在 2021 年 KubeCon 云原生技术峰会上,CNCF 开源项目 KubeVela 宣布推出了 1.2 版本. KubeVela 是一个简单易用且高 ...

  9. 生产排程计划与物料控制的正确使用原则

    APS系统力图使计划计算机化.这可能会给众多计划人员带来一些烦恼和忧虑,因为他们会害怕被机器所取代. 之所以有这种恐惧是因为APS系统有信息可视化,做计划的时间短,便于使用最优化方法三大优点. 然而, ...

最新文章

  1. 《走进SAP(第2版)》——第2章 企业软件的SAP之路2.1 企业资源计划(ERP)...
  2. 一个textview多种颜色
  3. Oracle SQL语句大全(二)
  4. spring整合问题集合1
  5. Tomcat启动报内存溢出错误解决(两种)
  6. c++ 检查缓冲大小与记录大小是否匹配_后端程序员不得不会的 Nginx 转发匹配规则...
  7. php 二维sort,php 二维数组排序
  8. python列表元组_Python列表元组操作
  9. svn: E155007 和 E155004
  10. Vue之Promise
  11. linux jupyter 远程,Linux下远程访问Jupyter Notebook 配置
  12. java 设计模式学习笔记四 prototype模式
  13. vivo浏览器缓存视频如何拷贝到电脑上
  14. 优秀课件笔记之WINDOWS XP 操作系统
  15. 7、前后端分离中的权限管理思路
  16. 元数据与数据治理|apache-atlas2.0.0 源码编译和安装部署(CHD版本)
  17. X-Frame-Options简介
  18. 树莓派制作内网dns服务器,树莓派使用dnsmasq搭建DNS服务器
  19. Win10企业版系统安装 NET Framework 4.8的时候提示错误信息
  20. 黑白图片复原为彩色Picture Colorizer(图片着色器)

热门文章

  1. [BZOJ 4571][Scoi2016]美味(主席树)
  2. python thrift 进行filter
  3. 黑马程序员——程序结构
  4. 安装windows服务提示输入用户名和密码
  5. 自适应网页设计(转)
  6. vueCli3中使用代理,点击页面的刷新按钮时报错
  7. quartz SpringMvc 动态定时任务(quartz2.2)
  8. FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析
  9. 程序代码移植和烧录需要注意什么_法人变更需要注意什么
  10. idea展示runDashboard的窗口