scala 语法总结

scala 语法总结

一、基础语法
(1)val 相当于常量 var: 变量 var name : String = “hello”
(2)import scala
(3)apply() 函数 “hello world”.apply(6) 与python apply函数相似
(4)if 语句
(5) for 语句 ①简易版 for(i <- 1 to10) until版本:表达式不达到上限 for(i <- 1 until n) ②scala没有 break 语法, 需要调用 import scala.util.control.Breaks 中 break ③ yield 关键字

二、函数语法:
1(1)普通函数 带返回值/ 不带返回值 (2)单行函数
2 函数参数部分 (1) 默认函数参数 (2)变长函数参数 arg* (3)过程:不要返回类型, def sayhello(name:String)=“hello” (4) lazy值,只有第一次使用时才计算 lazy val line = … (5)异常检测语法 try(throw xxError) {catch { case }}
3 函数式编程 (1) yield关键字 (2) filter函数 + map函数 filter过滤,a.filter(%2==0).map(2*)

三、数组操作:
1 array (1)sum / max (2) mkString (分割符) a.mkString(",") toString
2 arrayBuffer (1) 创建 (2)增删查改 (3) 遍历
3 Map
(1) 创建语法 Map((“a”,30),(“b”,20)) / Map(“leo”->30,“zitao”->40)
(2) 调包,变成可变的Map mutable.Map / HashMap (3)访问 Map的元素 ①直接访问 ② getOrElse 判断是否存在再访问
(4) 修改Map元素 (5)遍历 for((key,values)<-ages) / ages.keySet / ages.values
4 Tuple 元组 (1) 与zip函数一起用

集合操作: + 一个综合函数式变成案例
主要有Iterable Seq Set Map
(1) List Linkedlist(链表List) (2)Set (3)Map 与 flatMap

四、面向对象:

1 类
注意点:①val var 修饰类参数,才能在外部调用 class student(val name:String)
(1)类的定义 (2) getter 与 setter方法 : getter stu.name setter: stu.name=“zitao” ,不进行private声明,自动生成public的getter和setter方法 (3)自定义getter与setter方法
(4)private this 只能在当前类中使用,其他类不可以 (5)constructor函数 类似于函数重载 (6)内部类 在类中内部定义类,进行实例化然后调用

2 对象 object
特点 ① constructor只会调用一次 ②类似静态对象,放一些静态成员 ③ object相当于单个实例
(1)伴生对象 ① 伴生对象与伴生类可以相互访问,伴生对象调用不了类中private (2) object继承抽象类 通过override在object中进行重载 (3) object中写apply方法,类进行隐式调用
(4)枚举功能 Enumeration

3 继承
特点① extends关键字 ②field修饰(val修饰),子类无法覆盖 ③与抽象类比较,override可以对方法直接重写,并且可以实例化,抽象类(普通类需要)重写不需要override关键字,且不能对抽象类进行实例化
(1) overwrite关键字 ① override 在覆盖父类时,可以帮我们检查代码 ② super显示地要调用父类的方法
(2)isInstanceOf asInstanceOf :子类父类的类都认为是一个类 (3)getClass 和 classOf: 比isinstance更加准确
(4)p match{case } 模式匹配进行判断 (5) protected关键字 (6)调用父类的construtor (7) 匿名子类:直接进行继承 ,定义一个类没有名称的子类 (8) 抽象类

4 Trait
(1)多重继承 第一个继承extends,第二个with (2) 定义方法,供类使用(类要extends 对应trait才能用) (3)trait定义具体字段与抽象字段
trait高级 (1)为特定类混入trait val p2 = new Person(“Mike”) with Logger (2)trait调用链,继承多个 trait (3) 覆盖抽象方法 (4) 混合使用抽象方法与具体方法 (5)trait构造的顺序 (6)trait field的初始化
(7) trait继承class

五、函数式编程
(1)函数赋值给变量 val say = sayHello _ (这是一个函数) (2) 匿名函数 val say=(name:String)=>println(“hi”) 参数名:参数类型) =》 函数体
(3)高阶函数 ① 接收其他函数作为函数的参数 def greet(func:(String)=>Unit,name:String){func(name)} // 定义函数从string类型=> Unit类型
(4) 高阶函数类型自动推断 ①忽略类型 ②忽略变量的括号 ③用_ 代替函数 (5)常用高阶函数 ①map函数 ② foreach③ filter ④ reduceLeft 相当于累乘的用法 ⑤sortWith
(6)闭包 (7)curring 函数 def sum3(a:int)(b:int)=a+b (8)return 值

六、模式匹配:
(1)基本语法 + 加入 if守卫 (2)类型匹配:异常检测匹配 (3)array和list元素匹配,case Array(g1,g2,g3) (4) 类的匹配 case Student(name:String) Teacher(name:String)
(5)option 匹配,匹配是否有该值

七、参数类型
(1) 泛型类 class Student[T](val localId: T){} 定义了泛型类型T (2) 泛型函数,与泛型类差不多,限制了输入类型
(3)上边界Bounds 子类都可以进入 class Party[T<:Person] (4)下边界Bounds class getId[T>:Child]
(5) view Bounds:对相关类型进行隐式转换 implicit def dog2person(dog: Object): Person = if(dog.getClass==classOf[Dog]) {val _dog = dog.asInstanceOf[Dog]; new Person(_dog.name) } else Nil
(6) Context Bounds 使用上下文隐式转换 (7)Mainfest context Bounds 数组的泛型 (8) 协变和逆变 应用于 card[Master] card[Professional]无法比较 class Card[+T] class Card[-T]
(9)existential Type 相当于占位符

八、隐式转换与隐式参数
(1) 隐式转换 隐式转换成相应类型进行调用 (2)加强现有类型,相当于装饰器 (3)隐式转换函数的作用域与导入 (4)隐式转换的发生时机: 在作用域范围内找到student类型再进行转换
(5) 隐式参数: 不传入参数时自动寻找 implict参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值