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. JDK源码分析(一)——ArrayList

    目录 ArrayList分析 ArrayList继承结构 ArrayList字段属性 ArrayList构造函数 重要方法 ArrayList Iterator迭代器 总结 ArrayList分析   ...

  2. [python 源码]字符串对象的实现

    还是带着问题上路吧,和整数对象的实现同样的问题: >>> a='abc' >>> b='abc' >>> a is b True >> ...

  3. HTML基础-DAY2

    表单标签form 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.sel ...

  4. Django ORM训练专题

    图书信息系统 表结构设计 # 书 class Book(models.Model): title = models.CharField(max_length=32) publish_date = mo ...

  5. PHP 二维数组根据某个字段排序 复制代码 array_multisort

    //二维数组,按照里面的age从大到小降序,代码如下 <?php header('Content-Type:text/html;Charset=utf-8'); $arrUsers = arra ...

  6. 构造Huffman以及实现

    构造Huffman 题目 在作业本上分别针对权值集合W=(6,5,3,4,60,18,77)和W=(7,2,4,5,8)构造哈夫曼树,提交构造过程的照片 错误回答 错误原因:遵循左边小于根右边大于根的 ...

  7. 轻巧的编辑器:Sublime Text3 user设置

    开发到现在,编辑器倒用过不少,VIM.zend.my eclipse.EPP.editplus.notepad++.sublime text 2. 最初使用sublime是同学推荐的,说其何其的好,何 ...

  8. Mac下使用ABTestingGateway快速搭建灰度网关

    ABTestingGateway简介 ABTestingGateway 是新浪开源的一个可以动态设置分流策略的灰度发布系统,工作在7层,基于nginx和ngx-lua开发,使用 redis 作为分流策 ...

  9. configure: error: lzo enabled but missing

    注意:yum安装的无效,需要手动下载源码安装. wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz tar zx ...

  10. maven里如何根据不同的environment打包

    一个项目里总会有很多配置文件.而且一般都会有多套环境.开发的.测试的.正式的.而在这些不同的环境这些配置的值都会不一样.比如mail的配置.服务的url配置这些都是很常见的.所以在打包的时候就要根据e ...