Scala

一.scala基础篇

数据类型:与java相似部分 这几个都为对象,无数据类型
Byte,Short,Int,Long,Float,Double,Char,String,Boolean
变量
常量:用val声明
变量:用var声明
访问修饰符:
private: 尽在包含了成员定义的类或对象内部可见
在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员
三.运算符
与Java一样
四.控制语句
if …else ,while,do…while与java无异
for循环不同
for形式定义

for(x <- Range ){
        statement(s);
}

Range可以是一个数字区间表示,i to j 左右全闭区间 , i until j 左闭右开
<- 用于为变量x赋值
双变量循环

object TestControlSentence {
  def main(args: Array[String]): Unit = {
    var end = 5;
    var begin = 1;
    for(x <- begin to end;j <- begin to end){
      println(x+"*"+j)
    }
  }
}

五.方法与函数
两者的区别
1.用val定义函数,def语句定义方法
2.方法是类的一部分,函数是一个对象,可以赋值给一个变量
方法的定义
定义格式

def functionName ([参数列表]) : [return type 返回值类型] = {
    function body
    return [expr]
}

不写等于号和方法主体,为抽象方法
无返回值,返回值类型可以写Unit
返回时可写return,也可以不写,不写则表示最后一个变量为返回值
参数可以逗号分割
方法的调用
调用说明
当不需要实例化对象时,functionName(参数列表)即可
当需要实例化对象时,为instance.functionName(参数列表)即可
六.闭包
概念
闭包是个函数
函数的计算过程,依赖于在函数外部的一个或者多个变量
七.字符串
概念介绍
在 Scala 中,字符串的类型实际上是 Java String,它本身没有 String 类。
完全与java.lang.String对等
可变字符串的创建(StringBuilder):

stringBuilder += '1'  stringBuilder ++= "234"   stringBuilder.append("567")

字符串的格式化printf:

printf("我是%s,我在%s,我做%s,我今年%d岁了",name,location,work,age);}

八.数组
静态数组:

var programLanguageArray = Array("java", "python", "c++", "c", "php")

动态数组:

var programLanguageArray = new Array[String](5) 
  programLanguageArray(0) = "java";

多维数组
多维数组(>=2)即为数组的数组,与Java中概念等同
数组中的元素即可以是实体的值,也可以是一个数组,且可以嵌套
数组合并

var numberList1 = Array(1, 2, 3, 4)
var numberList2 = Array(5, 6, 7, 8)
var mergeList = concat(numberList1, numberList2)

创建区间数组
range(start,end,step) 方法来生成一个区间范围内的数组
range(start,end,step) 方法最后一个参数为步长,默认为 1
是半包区间,包含起始值,不包括结束值,即start<=x<end
var numberList1 = range(1, 5, 2)

二.函数的高级应用

  1. 函数传名调用
    概念说明
    传值调用
    传值调用:先计算参数表达式的值,再应用到函数内部,把=>去掉即可,即按原始的方式
    传名调用:将未计算的参数表达式直接应用到函数内部,用=>来设置传名调用

  2. 指定函数参数名调用

  3. 可变参数的函数

  4. 默认参数值函数

  5. 递归函数

  6. 高阶函数
    概念说明
    第一种:将一个函数当做另外一个函数的参数,即参数为函数的函数
    第二种:返回值是函数的函数,即高阶函数可以产生函数

  7. 内嵌函数
    概念介绍
    函数内定义函数,定义在函数内的函数称之为局部函数,亦称内嵌函数

  8. 匿名函数
    概念介绍
    没有函数名称的函数
    使代码更简洁,用=>来表示,左侧是参数列表,右侧是函数体

  9. 偏应用函数
    概念说明
    不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数
    实现方法:绑定函数的一部分参数,非绑定部分用"_"代替,从而形成偏应用函数去使用

  10. 函数柯里化
    概念说明
    将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
    提高了使用方法的灵活性

三.scala进阶之集合

Scala List
类似于数组,要求所有元素的类型都相同,通过范型来约束
列表是不可变集合,一旦定义了就不能改变
列表具有递归定义的性质,可以嵌套定义,这是与数组最大的不一样。
 用Nil和::来构建列表 形成可变效果
• 常用操作
head 返回列表第一个元素
tail 返回一个列表,包含除了第一元素之外的其他元素
isEmpty 在列表为空时返回true
::: 运算符或 List.::

上一篇:Scala多线程


下一篇:Spark开发环境搭建