scala读书学习笔记001

1、scala本意“可伸缩的语言”,关键词:基于java平台,面向对象,函数式编程,静态类型。


2、Scala更像是市集而不是大教堂,其主要的设计目标就是让用Scala编程的人们可以对它进行扩展和定制,可以方便的扩展新类型(像原生语言一样)和控制结构(例如Akka的actor)。


3、面向对象编程的伟大概念便是让这类容器变得完全通用,这样它们既可以包含操作,也可以包含数据,而它们自己也可以以值的形式被存放在其他容器中,或者作为参数传递给操作。这些容器被称作对象。


4、scala:每个值都是对象,每个操作都是方法调用
Scala的特质,类似于java的接口但是高于接口:可以有方法实现甚至是字段。[8]对象通过混入组合(mixin composition)构建,构建的过程是取出某个类的所有成员,然后再加上若干特质的成员。这样一来,类的不同维度的功能特性就可以被封装在不同的特质定义中。这乍看起来有点像多重继承(multiple inheritance),细看则并不相同。不像类,特质能够对某个未知的超类添加新的功能,这使得特质比类更为“可插拔”(pluggable),成功地避开了多重继承中,当某个子类通过不同的路径继承到同一个超类时产生的“钻石继承”(diamond inheritance)问题。


5、函数式编程以两大核心理念为指导。第一个理念是函数是一等(first-class)的值。在函数式编程语言中,函数值的地位跟整数、字符串等是相同的。可以将函数作为参数传递给其他函数,作为返回值返回它们,或者将它们保存在变量里。还可以在函数中定义另一个函数,就像在函数中定义整数那样。也可以在定义函数时不指定名字,就像整数字面量42,让函数字面量散落在代码中。函数式编程的第二个核心理念是程序中的操作应该将输入值映射成输出值,而不是当场(in place)修改数据,不可变数据结构是函数式编程的基石之一,函数式编程的这个核心理念的另一种表述是方法不应该有副作用(side effect)。方法只能通过接收入参和返回结果这两种方式与外部环境通信。函数式编程鼓励不可变数据结构和指称透明的方法。


6、Scala代码可以调用Java方法、访问Java字段、从Java类继承、实现Java接口。要实现这些并不需要特殊的语法、显式的接口描述或胶水代码(glue code)。事实上,几乎所有的Scala代码都重度使用Java类库。cala不仅仅是复用Java的类型,也会对Java原生的类型进行“再包装”,让它们更好用。


7、Scala对于此类由于高级类库设计和互操作性之间的矛盾产生的问题有一个非常通用的解决方案:Scala支持隐式转换(implicit conversion),当类型没有正常匹配,或者代码中选中了(类型定义中)不存在的成员时,Scala便会尝试可能的隐式转换。


8、Scala编写的程序通常都比较短。很多Scala程序员都表示,跟Java相比,代码行数相差可达十倍之多。更为保守地估计,一个典型的Scala程序的代码行数应该只有用Java编写的同样功能的程序的一半。更少的代码不仅仅意味着打更少的字,也让阅读和理解代码更快,缺陷也更少。
a、Scala的语法避免了Java程序中常见的一些样板(boilerplate)代码,Scala的类型推断是让代码精简的另一个帮手。重复的类型信息可以去掉,这样代码就更紧凑可读。

9、Scala提供了大量的工具来定义功能强大的类库,让你可以捕获那些公共的行为,并将它们抽象出来。例如,类库中各种类型的不同切面可以被分到不同的特质当中,然后以各种灵活的方式组装混合在一起。又比如,类库的方法也可以接收用于描述具体操作的参数。这样一来,事实上你就可以定义自己的控制结构。


10、Scala给你的帮助在于提升接口设计的抽象级别,让你更好地管理复杂度。


11、Scala不仅拥有跟Java类似的允许嵌套类的类型系统,它还允许你用泛型(generics)来对类型进行参数化(parameterize),用交集(intersection)来组合类型,以及用抽象类型(abstracttype)来隐藏类型的细节。


12、Scala不仅拥有跟Java类似的允许嵌套类的类型系统,它还允许你用泛型(generics)来对类型进行参数化(parameterize),用交集(intersection)来组合类型,以及用抽象类型(abstracttype)来隐藏类型的细节。


13、对于构成可复用组件的接口的成员,其类型签名必须显式给出,因为这些类型签名构成组件和组件使用者之间最基本的契约。


14、scala采用的统一对象模型,统一嵌套机制,scala方法调用的统一访问原则。


15、Scala也贡献了自己的一些创新。比如它的抽象类型提供了跟泛型类型相比更加面向对象的机制,它的特质允许我们更灵活地组装组件,而它的提取器(extractor)提供了一种跟展示无关的方式来实现模式匹配。


16、scala允许函数字面量(或代码块)作为参数,以支持自定义控制结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值