zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Scala程序设计读书笔记[1:5]

scala 程序设计 读书笔记
2023-09-14 08:57:28 时间
Scala程序设计: Java虚拟机多核编程实战

一直好奇什么样的语言能够不需要加锁解决线程同步问题,能够解决Twitter的性能问题,想了解什么是函数式编程。于是找工作的间隙看了这本书,扩展一下视野。

Source Code: http://media.pragprog.com/titles/vsscala/code/vsscala-code.zip

Scala Online Editor:

URL: http://www.scala-tour.com/#/expression-and-values
API: http://www.scala-tour.com/run?code=println(%22abc%22)

第一章 简介

Scala混合了函数式和面向对象。用Scala创建多线程应用的时候,你会倾向于函数式编程风格,用不变状态编写无锁代码。Scala提供了一个基于actor的消息传递模型,消除了并发的数据竞争和加锁问题。

在函数式编程中,和ErLang相比的优势:a) 强类型,b) 运行与JVM,可以与Java互操作。

与JVM其他语言Groovy、JRuby和Clojure相比,优势是:能通同时提供函数式风格和良好并发支持的强类型语言。

Scala特性:

基于事件的并发模型 既支持命令式风格,也支持函数式风格 纯面向对象的 与Java混合 强制使用自适应静态类型 简洁而又表现力 构建于一个微内核之上 高度可扩展,用更少代码创建高性能应用 第二章 起步

下载地址:http://www.scala-lang.org 脚本运行建议sublime text+自定义build system。 编译scala可以使用IDE+插件http://www.scala-lang.org/old/node/91

第三章 Scala步入正轨
a) 支持脚本
b) return可选,自动返回最后的求值表达式。如果使用return需要显式提供方法返回类型
c) 分号半可选,可能产生歧义的时候需要加
d) 类和方法默认public,不必显示写
e) 轻量级JavaBean创建
f) 不强制捕获不关心的异常


默认导入包: java.lang:常用java类型; scala:Scala类型; scalaPredef:类型,隐式转换及常用方法


==基于值比较,继承字Any类,为final。特定实现需要改写equals方法。基于引用比较需要使用eq方法。


定义字段、方法和构造函数 Scala把主构造函数放到了类定义中。参数中的val转换成private final字段,并创建同名public取值方法。声明为var的定义为private,并创建public取值和赋值方法。都不是的话创建private字段和private的getter和setter。放到类定义中的任何表达式或者可执行语句都作为主函数的一部分。定义变量时_代表使用默认值。


类继承重写方法需要override关键字。副构造函数可以通过定义this方法实现。副构造函数第一条语句要么调用主构造函数,要么调用副构造函数。只有主构造函数才能往基类构造函数中传参数。


伴生对象 创建一个object和类同名,就是伴生对象。类和伴生对象之间没有界限,可以互相访问private内容。把类的构造函数标记为private就可以实现单例对象。


static scala没有静态字段和静态方法,通过伴生对象支持类一级的操作。伴生对象加括号调用其apply方法。


静态类型 又称成编译时类型检查。scala根据定义或赋值推演类型,如果将其他类型赋给将会编译错误。


import语句里的下划线相当于java中的星号。如果加在类名后相当于static import。默认引入当前目录。被引用的scala文件需要先scalac编译。


容器和类型推演 不带类型的容器实际传入了Nothing。因此带类型容器不能赋给不带类型容器的引用。也不能赋给Any类型的容器。只有容器类型相同才能赋给。


Any类型 是所有Scala类型的超类,抽象类。方法由!=, =, asInstanceOf, equals, hashCode, isInstanceOf, toString。直接后代是AnyVal和AnyRef。AnyRef包含了Java的Object方法,如notify,wait,finalize。


Option类型 Some[T]和None都继承自Option[T]。其getOrElse方法可以得到值,如果不存在,得到传入的参数。


传递变参 如果方法接受参数需要指定参数名字及类型。末尾参数可以接受可变数目的实参,在类型信息后使用星号。但是不能传入数组。如果想将数组展开成离散值,可以用:_*


Scala不支持协变和你变。子类实例容器赋给基类容器能力称为协变,超类实例容器赋给子类容器的能力称为逆变。


参数化类型的可变性 通过特殊语法实现子类数组当作父类数组:playWithPets[T : Pet](pets: Array[T])。也可以将数组的参数化类型限定为源数组参数化类型的超类:copyPets[S, D : S](fromPets: Array[S], toPets: Array[D])。可以把派生类容器当作基类的容器,实现协变:MyList[+T];也可以用-T实现逆变。


SCALA程序设计 第一章:scala简介 Scala是一门静态类型语音,是一门以Java虚拟机为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言。
IntelliJ IDEA 第一个 Scala 程序 IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。
spark是用scala写的一种极其强悍的计算工具,spark内存计算,提供了图计算,流式计算,机器学习,即时查询等十分方便的工具,所以利用scala来进行spark编程是十分必要的,下面简单书写一个spark连接mysql读取信息的例子。
当本地部署搭建完Scala开发环境后,那么就可以利用IDE开发工具进行Scala语言编程,编写一些工具等等,这里写一些简单的语法涉及,来熟悉下Scala。