一、Scala的简介
Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。
scala六大特性:
1).Java和scala可以无缝混编,都是运行在JVM上的
2).类型推测(自动推测类型),不用指定类型
3).并发和分布式(Actor,类似Java多线程Thread)
4).特质trait,特征(类似java中interfaces 和 abstract结合)
5).模式匹配,match case(类似java switch case)
6).高阶函数(函数的参数是函数,函数的返回是函数),可进行函数式编程
二、为什么学习Scala
下面我们主要从四个当面来说明为什么学习scala:
1.兼容性:
scala语言被设计成可以无缝对接java,scala程序会被编译为JVM字节码,它们的执行期性能通常与java一致,scala代码可以调用java,继承java类和实现java接口。这些都不需要特别的语法,显示接口描述或粘贴代码。实际上几乎所有的scala代码都极度依赖于java库。
另一方面scala极度重用了java类型,scala的Int类型代表java原始整数类型int,Float代表float,Boolean代表boolean,等等。
scala在重用java类型的基础上又进行了一次封装,使得scala语言更加易用。例如scala的字符串支持类似于toInt和toFloat的方法,可以把字符串转为整数或浮点数。因此可以使用str.toInt来代替java中的Integer.parseInt(str)。那么如何在不打破互操作的基础上做到这一点呢?java的String类不会有toInt方法。实际上scala有一个解决这种高级库设计和互操作性不和谐的通用方案。在scala中可以定义隐式转换:implicit conversion。在前面的例子中,当在字符串中寻找toInt方法时,scala编译器会发现String类里没有这个方法,但是会发现一个把java的String转换为scala的RichString类的一个实例的隐式转换,里面定义了这个方法。于是在执行toInt之前,转换被隐式应用。
2.简洁性:
scala程序一般是比较简短的。首先scala的语法避免了一些束缚java程序的固定写法。例如scala中的分号是可选的,并且通常不写,下面我们通过分别用java和scala创建一个类做一个对比:
java方式创建类:
public class test {private Integer id;private String name;public test(Integer id, String name) {this.id = id;this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
scala方式创建类
class Test(id:Int,name:String)# scala只需要一行代码就可以实现与java一样的功能
3.高层级性:
scala可以通过让你提升你设计和使用的接口的抽象级别来帮助你管理复杂性。例如我们要判断在一个字符串中是否有大写字符。
java方式实现:
boolean nameHasUpperCase = false;String name = "abC";for (int i = 0; i < name.length(); i++) {if (Character.isUpperCase(name.charAt(i))){nameHasUpperCase = true;break;}}
通过java方式实现我们可以发现,需要对字符串遍历将每个字符逐一去判断是否大写。
scala方式实现:
val name = "adC"name.exists(_.isUpper)
scala代码把同样的字符串当作能用论断查询的高层级序列。论断:_.isUpper是scala的一个函数其底层也是调用java方法来实现。
4.静态类型
静态类型系统认定变量和表达式与他们持有和计算的值的种类有关。scala坚持作为一种具有非常先进的静态类型系统的语言。主要包括程序抽象的可检验属性、安全的重构、文档。
可检验属性:静态类型系统可以保证消除某些运行时的错误。例如,可以保证布尔型不会与整数型相加,私有变量不会在类的外部被访问,函数带正确个数的参数,只有字符可以被加到字符集中。不过当前的静态类型系统还不能查到其他类型的错误。比如查不到数组越界或除零错误等。
安全的重构:静态类型系统提供了让你具有高度信心改动代码基础的安全网。在静态语言中,你可以修改,重编译你的系统并容易修改所有引起类型错误的代码行。
文档:静态类型是被编译器检查过正确性的程序文档。不像普通的注释,类型标注永远都不会过期。
825

被折叠的 条评论
为什么被折叠?



