简介:Scala语言具备面向对象和函数式两种编程范式,为程序设计带来了更大的灵活性和方便性。本门课程将简明扼要地介绍Scala的语言基础。完成本课程的学习后,同学们将对函数式编程有初步的认识,也能够编写简单的Scala代码。

第1章 函数式编程思想

1-1 课程介绍(03:58)

语言特性

  • Scalable可伸缩编程语言。
  • 纯正的面向对象语言。
  • 函数式语言。
  • 构建于jvm之上,能互相直接调用,无缝和java互操作。
  • Martin Odersky—Scala之父、Generic Java之父、javac作者之一、scalac作者

课程大纲

函数式编程思想;
搭建Scala开发环境;
Scala语言基础;
类型和求值策略;
非常重要的函数的概念;
Scala Immutable Collections

1-2 scala函数式编程思想(10:09)

一、概念:In computer science,functional programming is a programming paradigm–a style of building the structure and elements of computer programs–that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data.
在计算机科学领域,函数式编程是一种编程范式,它是一种构建计算机程序结构的方法和风格,它把程序当做数学函数的求值过程并且避免了改变状态和可变的数据。
二、函数式编程的重要概念:
2.1 纯函数(Pure Function),或函数的纯粹性(Purity),没有副作用(Side Effect)。
副作用是状态的变化(mutation):例子:修改全局变量,抛出异常,IO读写,调用有副作用的函数。
2.2 引用透明(Referential Transparency):对于相同的输入,总是得到相同的输出。
如果f(x)的参数x和函数体都是引用透明的,那么函数f是纯函数。
2.3 不变性(Immutability)为了获得引用透明性,任何值都不能变化。
2.4 函数是一等公民(First-class Function):一切都是计算,函数式编程中只有表达式,变量、函数都是表达式。
三、高阶函数(Higher order Function)
闭包(Closure)
表达式求值策略:严格求值 和 非严格求值 Call By Value vs. Call By Name
惰性求值(Lazy Evaluation):定义表达式不会立即求值,用到后才会求值。
递归函数,函数式编程没有循环,循环由递归实现。调优递归:尾递归。

scala为什么会受推崇:
1.摩尔定律失效:
一个芯片上面的电子元器件的个数是有极限的
2.多核处理器:
进入多核时代,编程模型发生改变,传统的编程范式(java、c)会非常复杂,开发成本大,容易出错,质量难以保证。函数式编程是最适用于并行编程。

LISP (计算机程序设计语言)

LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。LISP作为因应人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。
LISP名称源自列表处理(LISt Processing)的英语缩写,由来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)在1958年基于λ演算所创造,采用抽象数据列表与递归作符号演算来衍生人工智能。

第2章 Scala开发环境

2-1 scala环境搭建(11:36)

安装scala
1.安装jdk
下载jdk:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2.安装scala
下载scala
http://www.scala-lang.org/download/
下载sbt
http://www.scala-sbt.org/?_ga=1.122557707.1496465577.1479362044
下载IDE
http://scala-ide.org/?_ga=1.122557707.1496465577.1479362044

  • JDK 1.8
  • Scala 2.12.2
  • IntelliJ IDEA with Scala plugin

SBT——Simple Build Tool(http://www.scala-sbt.org/)
REPL——Read Evaluate Print Loop

第3章 Scala的语言基础

3-1 scala基础语法之变量…(04:35)

变量
三中变量修饰符
val 定义常量
var 定义变量
lazy val 定义惰性常量
*可以不显示指定变量的烈性,因为scala会自动进行类型推导

3-2 Scala数据类型(06:34)

AnyVal表示值类型
Numeric 数值类型
Byte、Short、Long、Float、Double
Boolean
True、False
Char
单引号括起来的字符
Unit
相当于Java中的void返回值
Null
表示一个已有类型的值为空
Nothing
表示一个函数在执行时发生异常
AnyRef表示引用类型
所有的java引用类型
String
用双引号括起来的字符串
所有的scala引用类型

Unit相当于java里面的void,相当于一个空的返回值
NULL表示一个已用类型它的值为空
Nothing表明一个函数在执行时发生异常

低精度数值类型向高精度数值类型赋值时不需要类型转换。反之则出现错误。

3-3 Scala函数与代码块(04:17)

代码块Block:
{exp1;exp2}
{
exp1
exp2
}
函数(多个输入参数用逗号分隔):
def functionName(param: ParamType): ReturnType = {
//function block
}

3-4 Scala基础 if与for(04:15)

Unit的文字量就是空括号。

3-5 Scala基础 try与match表…(03:29)

第4章 求值策略
4-1 求值策略(09:10)
第5章 高阶函数
5-1 Scala 函数与匿名函数…(08:16)
5-2 Scala 柯里化(03:45)
5-3 Scala 递归与尾递归(04:59)
5-4 例子(07:16)
第6章 Scala Immutable Collection
6-1 Scala Collections-list…(09:00)
6-2 Scala list高级使用(05:22)
6-3 Scala list-map(07:22)
6-4 Scala reduceLeft与flodL…(04:30)
6-5 Scala Rang与Stream(04:50)
6-6 Scala toupe与map(09:57)
6-7 Scala 快速排序案例(04:45)