Scala基础浅谈

Scala基础浅谈

一、什么是Scala?

      Scala是一门多范式编程(面向对象编程、函数式编程)语言,设计初衷是实现可伸缩的语言,并集成面向对象编程和函数式编程的各种特性,具有表达能力强,代码精简的优点。

二、Scala的特性:

(1)面向对象特性:

  • 每个值都是对象
  • 对象的数据类型和行为由类(Class)和特征(Trait,类似于interface)描述
  • 利用特征实现混入式多重继承

(2)函数式编程特性:

  • 每个函数都是一个值
  • 支持高阶函数、柯里化(currying)、样例类(case class)及模式匹配

(3)Scala是静态类型语言
(4)扩展性好

三、Scala变量与常量定义方法:

(1)变量:赋值后可以改变,生命周期中可以被多次赋值,一般情况下,无需显示指定类型,Scala编译器会自动推断出类型。

var 变量名称:类型=xxx
//例如
var a:Int=5

(2)常量:赋值后不可变,类似于Java中的final变量。

val 常量名称:类型=xxx
val b:String="Json"

四、类型别名:

      Scala支持使用Type关键字定义类型别名:

type 类型别名=类型
//例如
type T=String

五、Scala数据类型层次结构

在这里插入图片描述

  • Any:所有类型的超类(顶级类型)
  • AnyVal:表示值类型的超类
  • AnyRef:表示引用类型的超类,对应java.lang.Object
  • Unit:表示无值,类似Java中的void
  • Nothing:所有类型的子类
  • Null:表示null或空引用

六、Scala数组

  • 存储固定大小的元素
  • 数组索引从0开始
    创建方法:
// 法1
var a1:Array[String] = new Array[String](3)
a1(0)="Jason"
a1(1)="Marie"
a1(2)="Jimmy"
//法2
var a2=Array("Jason","Marie","Jimmy"// 法3,仅限区间数组
var a3=Array.range(1,10,2)

七、Scala元组

  • 可以包含不同类型的元素
  • 最多支持22个元素 (Tuple1~Tuple22)
  • 使用下划线“_"访问元素,“_1"表示第一个元素
    创建方法:
//法1
var tp1 = ("Mike", "123 ABC street", 58)
println(tp1._1)
println(tp1._2)
println(tp1._3)
//迭代元组
tp1.productIterator.foreach{ i =>println("Value = " + i )}

//法2
var tp2 = new Tuple3("Mike", "123 ABC street", 58)

//法3
def mike = "Mike" -> 5

八、Scala集合

  • Seq:序列,元素按顺序排列
  • Set:集合,元素不重复
  • Map:映射,键值对集合
  • 不可变集合:scala.collection.immutable,默认Scala选择不可变集合
  • 可变集合:scala.collection.mutable,可以修改、添加或移除一个集合的元素

九、Scala函数

  • 函数是Scala的核心
  • 函数定义
def 函数名([参数列表]):[返回值]={
    函数体
    return [表达式]}

//例如
def square(x: Int): Int = { 
    println(x)
    x * x    //return
}
  • 函数调用
函数名(参数列表)
//例如
square(5)

十、匿名函数

  • 指不含函数名称的函数
  • 匿名函数定义:=>”左边为参数列表,=>”右边为函数体
//例如
(x:Int)=>x*x

十一、函数嵌套:

      Scala函数内可以定义函数,函数内的函数也称局部函数或者内嵌函数。

//使用函数嵌套实现阶乘运算
def factorial(i: Int): Int = {
      def fact(i: Int, accumulator: Int): Int = {
         if (i <= 1)
            accumulator
         else
            fact(i - 1, i * accumulator)
      }
      fact(i, 1)	//不能在factorial()之外调用
   }

十二、柯里化(Currying)

      方法可以定义多个参数列表,当使用较少的参数列表调用多参数列表的方法时,会产生一个新的函数,该函数接收剩余的参数列表作为其参数。这被称为柯里化。

def modN(n: Int,x: Int) = ((x % n) == 0)
//柯里化
def modN(n: Int)(x: Int) = ((x % n) == 0)
def f1(n: Int, x: Int) = modN(n)(x) 
//新函数接收剩余的参数列表作为其参数
def f2(x: Int) = modN(10)(x) 
def f3(n: Int) = modN(n)(10) 
def f4 = modN(10)(_)

十三、Scala的参数:

(1)隐式参数:方法可以具有隐式参数列表,由参数列表开头的implicit 关键字标记。

def sum(x:Int)(implicit y:Int)=x+y
implicit var a=10	//将作为Int类型隐式值自动传递
sum(10)	//执行结果为20

(2)命名参数:通常情况下,传入参数与函数定义的参数列表一一对应,命名参数允许使用任意顺序传入参数。

def printName(first:String, last:String) = {
    println(first + " " + last)
}
 
//Prints "John Smith"
printName("John","Smith")
printName(first = "John",last = "Smith")
printName(last = "Smith",first = "John")

(3)参数缺省值:Scala函数允许指定参数的缺省值,从而允许在调用函数时不指明该参数。

def printName(first:String="John", last:String="Smith") = {
    println(first + " " + last)
} 
//Prints "John Smith"
printName()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值