Fourth SCala:
看完这个语言,java和函数编程混合在一起的一种语言;
这里与java的相同之处:
-
都是在java的虚拟机上运行
-
可以直接使用管Java的类库
-
都是静态类型语言
-
Scala及支持面向对象泛型也支持函数式编程泛型。
不同之处:
-
类型推断:在java中,你必须声明每个变量、实际参数或形式参数的类型。Scala则会在可能的情况下推断出变量的不同之处。
-
函数式编程概念;
-
不变量:使用val来声明定义,var是变量的声明;
-
高阶程序构造:用于并发应用的actor模型,使用高阶函数的Ruby风格的集合以及作为一等对象类型(first-class)的XML的处理;
一个函数式语言具有的几个特点:
-
函数式程序由函数组成;
-
函数总是具有返回值;
-
函数对于相同的输入总是会返回相同的值;
-
函数式程序禁止改变状态或修改数据。一旦你设置了一个值,就无需再管它了。
接下来是对于Scala类型什么的介绍,(其实没有太多是东东,很多都是和java一样的):
Scala是强类型的。
Scala是强类型的。
语法介绍:
表达式和条件:
-
就说明下不用,Scala的条件判断中不能使用布尔格式以外的类型,nil也不行;
循环:
-
while的循环是一样的,而for循环使用的时候是用参数的方式的:(如下)
上面这些没有太多好记录的,这个语言在书里面讲的很细,不过我就跳过很多看过去没有太多特色的东西了;
Scala中的类:
在Scala中可以只用一行代码定义那些中有属性而没有方法或构造器的简单类:
其他的没什么不同;在定义后面的整个代码块实际上就是构造器。(不怎么懂,不记录了)
扩展类:
在java中类方法用static关键字修饰;Ruby使用def sdlf.class_method;而Scala,当类只用一个实例时,可以使用object而不是class关键字定义:
这个类定义的其实是一个单件(singleton)对象。在Scala中,对象定义和类定义可以具有相同的名称。有了上面这个方案,你可以在一个单件对象的声明中创建方法而在类声明中创建实例方法。在上面的例子里,rule方法是一个类方法。这个策略称为伙伴对象(companion object);
继承:
和java一样使用extends;
不过对于多继承,java使用接口,c++使用多重继承,Scala使用trait。其余Ruby的mixin类似,用模块实现。
笔记写到这里,觉的这个Scala语言没什么太多的特色了,后面的东东就简略的记录了,是在写不下去了。。。。。╮(╯_╰)╭
集合:
-
列表(list),集(set),映射(Map)这些就没什么好解释了,都差不多,就一点点不同,没有了Ruby的一些语法糖就是了;
-
在集合中可以使用:head、count、empty、first、等等的高阶函数;也可以使foreach迭代,foldleft累加返回值;
在Scala中尅是用XML的标签;(这尼玛好奇怪的感觉)
并发:
(这个是Scala语言的核心了)直接给出实例代码:
其主要的结构包括actor和消息传递。actor拥有线程池和队列池。当发送一条消息给actor时(使用!操作符),是将一个对象放到该actor队列中,actor读取消息并采取行动。::
使用actor,还可以设置超时处理(reactwithin),当在指定时间内没接收到消息是,会出发超时处理。此外,还可以使用receive(它将阻塞线程)和receivewithin(它将在设置的超时时间内阻塞线程);
Scala总结:
核心优势:
-
并发:actor模型和线程池都很受欢迎(我也挺喜欢的)。
-
与java的兼容;
-
xml:内置了XML支持;
-
桥接:一种函数式编程泛型和面向对象编程泛型之间的过度桥梁(像c++是过程和对象的桥梁)
不足:
-
静态类型;
-
语法:语法很复杂,很麻烦;
-
可变性:。。。。。
好了,╮(╯_╰)╭;这个语言就这些好介绍记录的了;o(︶︿︶)o唉感觉没什么特别的,还让我发了这么多时间。。。