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+ ...
随机推荐
- NetCore+Dapper WebApi架构搭建(三):添加实体和仓储
上一节讲了类库添加一些底层的基本封装,下面来添加实体和仓储 1.Entities文件夹添加一个实体类Users,继承BaseModel,即拥有BaseModel的主键 using System; na ...
- .NET Core改造工程直播
[背景] 新项目需要跨平台,原来积累的.NET类库需要改造为.NET Core. [直播] 新增加的项目不支持排除文件 不支持定义条件编译常量,虽然在项目中能使用#if语法,但无地方定义DefineC ...
- 减少TIME_WAIT连接状态
减少TIME_WAIT连接状态.网络上已经有不少相关的介绍,大多是建议: shell> sysctl net.ipv4.tcp_tw_reuse=1 shell> sysctl net.i ...
- Python实现QQ自动点赞
用Python做一个QQ自动点赞神器,上代码: 1 def QQZan(qq): 2 browser = webdriver.Chrome() 3 browser.maximize_window() ...
- 选择排序之C++实现
选择排序之C++实现 一.源代码:SelectSort.cpp /* 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置: 然后,选出第二小的数,放在第二个位置: 以此类推,直到所有 ...
- mysql_connect的$new_link参数
假设在127.0.0.1上有test1和test2两个库, 其中库test1库中有test1表,test2中有test2表 $servername = "127.0.0.1"; $ ...
- 【洛谷】2324:[SCOI2005]骑士精神【IDA*】
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- bzoj 3653
每个点维护一颗以深度为下标,size-1为值的线段树,保存整颗子树的信息,这样就可以查询了,但是如果为每个节点都建立这么一颗树,显然会MLE,所以考虑在DFS序上建立主席树,然后每个节点原来对应的线段 ...
- hdoj 5119 Happy Matt Friends 背包DP
Happy Matt Friends Time Limit: 6000/6000 MS (Java/Others) Memory Limit: 510000/510000 K (Java/Others ...
- jsoncpp 0.5 ARM移植
1.下载jsonapp 0.5 https://github.com/open-source-parsers/jsoncpp 2.编译 platform 没有包含 arm 平台,需要把源码提取出来,独 ...