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 学习笔记八 简洁性的更多相关文章

  1. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  2. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  3. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  4. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  5. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  6. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  7. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  8. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  9. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

随机推荐

  1. sort sign numeric

    //JS001   EXEC PGM=SORT                                 //*                                          ...

  2. sqlldr errors

    sqlldr myUser/myPWD@myCONN control='d:/sqlload/new/test/loader1.ctl' errors=1000000

  3. touchscreem

    <触摸屏种类> 常见 电阻式触摸屏 电容式触摸屏 不常见 红外线技术触摸屏 表面声波触摸屏 适量压力传感触摸屏 <原理分析> 电阻式触摸屏 如图所示,在屏幕的上下和左右加上一个 ...

  4. python中的递归问题,求圆周率

    以上面一个公式为例: import numpy as np def getPi(n): if n == 0: return np.power(-1,n)*(1.0/(2*n+1)) else: ret ...

  5. 【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1170  Solved: 683 Description ...

  6. 重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

    一般这个错误是由密码错误引起,解决的办法自然就是重置密码. 假设我们使用的是root账户. 1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: #vim /etc/my.cnf(注:wi ...

  7. [Luogu5161]WD与数列(后缀数组/后缀自动机+线段树合并)

    https://blog.csdn.net/WAautomaton/article/details/85057257 解法一:后缀数组 显然将原数组差分后答案就是所有不相交不相邻重复子串个数+n*(n ...

  8. LOJ P3952 时间复杂度 noip 暴力 模拟

    https://www.luogu.org/problemnew/show/P3952 模拟,日常认识到自己zz. #include<iostream> #include<cstdi ...

  9. Java并发(二十二):定时任务ScheduledThreadPoolExecutor

    需要在理解线程池原理的基础上学习定时任务:Java并发(二十一):线程池实现原理 一.先做总结 通过一个简单示例总结: public static void main(String[] args) { ...

  10. windows下安装awstats来分析apache的访问日志

    一.啰嗦两句 之前在Windows下用Apache时,也曾经配置过Awstats,然后换了工作,改用Linux+nginx,渐渐把Apache忘记了.又换了工作,又得用Apache,这回版本更新到2. ...