scala 学习笔记八 简洁性
Scala可以简洁地表示概念,有时甚至可以说过于简洁。
1、消除中间结果
在组合表达式中,最后一个表达式会变成整个表达式的结果。下面的例子中,值会被捕获到val result中,然后result从方法中返回。

与将值放到中间结果中不同,推导自身可以产生结果:

2、删除不必要的花括号
如果一个方法由单个表达式构成,那么环绕方法的花括号就是不是必须的

注意,之所以可以这样做是因为消除了中间结果,从而形成了单个表达式。
注意上的187和188 行是两个条件表达式,在推导内部的每个表达式都置于独立的行中。
3、移除不必要的参数

上面的第271行的匿名函数已经实现了某种程度的简洁性,:在参数列表中只有一个参数,因此无需圆括号,并在函数中只有一个函数,因此无需花括号。
第274行用了Scala特殊的下划线字符。到目前为止,只知道将下划线当作通配符使用的情况,但是当它成为方法调用的一部分时,下划线表示“填补这个空白”,而scala无需具名参数就可以为其传递每个字符。
第277行,由于只有一个参数要传递给print,而且scala看到print将接受一个char,所以scala允许采用极端简介的形式,将方法名作为参数传递给foreach,而且根本没有参数列表。
4、为返回类型使用类型推断

上面第275行就使用了Scala的类型推断,从而移除了返回类型。但是参数列表和方法体之间的=还是必须的。
5、用类型为名字起别名
在使用别人的代码时,可能会发现他们选择的名字太长或者太难用了,Scala允许使用type关键字对现有名称起一个新名字作为别名:

6、编程风格

没有参数的方法可以在定义中省略圆括号,例如上面的127行。
注意在调用中,尽管getA在定义时是带圆括号的,但是在调用时,带不带圆括号均可。但是,因为getB的定义是不带圆括号的,所以在调用它时,只能不带圆括号。
这里有一个风格的问题,如果一个方法修改了对象的内部状态,即调用该方法时内部变量发生了变化,那么在该方法的定义中就应该保留圆括号,它示意读者这是一个修改方法(会导致对象发生变化);
另一方面,如果调用该方法不会改变对象的任何状态,那么惯用方法是在该方法的定义中删除圆括号。
scala 学习笔记八 简洁性的更多相关文章
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
- Redis学习笔记八:集群模式
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
随机推荐
- [ 转载 ] Java基础13--equals方法
一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 public class TestEquals { 4 public s ...
- Java Jxl
Java Jxl (转自http://blog.csdn.net/laliocat/article/details/50580020) 1 开发调研1.1 需求描述MS的电子表格(Excel)是Off ...
- LeetCode:删除排序数组中的重复项 (Remove Duplicates from Sorted Array)
public class RemoveDuplicates { /** * 修改数组,使数组有序不重复.超出长度不考虑. * @param 排序数组 * @return 数组不重复数的个数 */ pu ...
- 【BZOJ-3123】森林 主席树 + 启发式合并
3123: [Sdoi2013]森林 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2738 Solved: 806[Submit][Status] ...
- 改变手机浏览器(iPhone/Android)上文本输入框的默认弹出键盘
iPhone/iPad和Android提供不同的的键盘输入类型,触发合适的键盘将极大地改善用户体验. 键盘类型 默认: 默认键盘的字母模式 数字: 默认键盘的数字模式,(含小数点等) 邮件: 与默 ...
- ROS知识(8)----CMakeLists.txt文件编写的理解
ROS(Indigo)编程必须要理解CMakeList.txt的编写规则,教程地址:catkin/CMakeLists.txt,官网有相关的教程,中文的翻译版本写的很不错,教程地址:ROS中的CMak ...
- elasticsearch实例讲解增删改查
1.首先弄明白四个概念 elasticsearch 关系型数据库 index 数据库 type 表 document 行 field 字段 如果刚一开始理解比较困难,那你就在心中默念100遍,10遍也 ...
- windows下git命令的使用
一.写在前面 关于git,出于自己的爱好,前段时间玩了一下,也自己上网查了一下资料,现简单记录一下,以备查看. 当然,本文并不是介绍配置git服务器的文章,而是以github服务器作为git的远程仓库 ...
- generator自动生成mybatis的xml配置
generator自动生成mybatis的xml配置.model.map等信息:1.下载mybatis-generator-core-1.3.2.jar包. 网址:http://code. ...
- Memcached (第一篇)
Memcached是“分布式”的内存对象缓存系统,那么不需要“分布”的.不需要共享的或者干脆规模小到只有一台服务器的应用,Memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要 ...