Scala学习笔记(一) -- 简介
1.Scala是一门综合了面向对象与函数式编程概念的静态类型的编程语言。
在Scala中,函数值就是对象,函数类型是可被子类继承的类。
=》Scala是面向对象的。
面向对象最直接了当的方式是将数据和操作放进某种容器。面向对象编程的伟大概念便是让这类容器变得完全通用,这样他们即可以通过包含操作,也可以包含数据,而他们也可以以值的形式被存放在其他容器中,或者作为参数传递给操作。
Scala中的特质避免了多重继承中钻石继承(菱形继承)问题。
附:钻石继承:如下图所示, 假设 A 的初始化方法里有一个计数器,那这样 D 一实例化,A 的计数器就跑两次,很明显是不符合程序设计的初衷的
=》 Scala是函数式的
函数式编程以两大核心理念为指导。
第一个理念是函数是一等的值。在函数式编程语言中,函数值的地位跟整数、字符串等是相同的。可以将函数作为参数传递给其他函数,作为返回值返回他们,或者将它们保存在变量里。还可以在函数中定义另一个函数,就像在函数中定义整数那样。作为一等值得函数提供了对操作的抽象和创建新的控制结构的便利。
第二个理念是程序中的操作应该将输入值映射成输出值,而不是当场修改数据。就举例而言,Java中的字符串是不可变的,Ruby中的字符串是可变的。因此从字符串的实现来看,Java是函数式的,而Ruby不是。不可变数据结构是函数式编程的基石之一。
这一理念又可以表述为方法不应该有副作用。方法只能通过接受入参和返回结果这两种方式与外部通信。函数式编程鼓励不可变数据结构和指称透明的方法(对于任何给定的输入,该方法调用都可以被其结果替换,同时不会影响程序的语义)。
2.Scala的四大优势
=》Scala是兼容的
Scala程序会被编译成JVM字节码。Scala重度复用了Java的类型,且对Java原生类型进行了“再包装”。 Scala支持隐式转换,当类型没有正常匹配,或者代码中选中了(类型定义中)不存在的成员时,Scala便会尝试可能的隐式转换。
=》Scala是精简的
Scala语言避免了Java程序中常见的一些样板。 Scala的类型推断帮助把重复的类型信息去掉,使代码更紧凑可读。
=》Scala是高级的,提升接口设计的抽象级别,让你更好地管理复杂度。
=》Scala是静态类型的
Scala不仅拥有跟Java类似的允许嵌套类的类型系统,它还允许用泛型来对类型进行参数化,用交集来组合类型,以及用抽象类型来隐藏类型的细节。
通过类型推断规避了过于啰嗦的问题,通过模式匹配以及其他编写和组成类型的新方式避免了死板。
静态类型系统当然不能替代单元测试,但他能减少单元测试数量,帮助验证程序的某些性质。