美文网首页
46.Scala需要注意的点

46.Scala需要注意的点

作者: 文茶君 | 来源:发表于2020-03-05 21:35 被阅读0次

我在45中写了Scala的相关信息,但是繁杂,这里将择重点讲述一下
Scala是基于JVM的语言
六大特点
1.与java无缝整合
2.类型推断
3.支持分布式和并发Actor
4.Trait特质特性
5模式匹配match
6.高阶函数
类和对象:当new类时,类中除了方法不执行,其他都执行
object相当于java的单例,定义的都是静态的
class可以传参,传参就有了默认的构造
重写构造时,第一行要先调用默认的构造
方法和函数:1.方法定义 def 方法定义
方法中传参要指定类型,方法自己可以推断返回类型,默认将方法体中最后一行计算得结果当做返回值返回
如果要写return返回值,要显式的声明方法体的返回值
如果方法体可以一行搞定,可以将方法体“{。。。。。。}”省略
如果方法名称和方法体之间没有“=”,无论方法体返回什么值都回被丢弃,返回unit
递归方法:显式写出返回值类型
参数有默认值得方法 def fun(x:int=100)
可变长参数的方法 def fun(x:int=100)
匿名函数()=>{}
可以赋值给一个变量,下次使用变量就是使用这个匿名函数
偏应用函数
嵌套方法
高阶函数
柯里化函数:高阶函数简化
集合array arrraybuffer list
map
tuple
var iter=tuple.prduceIterator
trait相当于java中的接口和抽象类结合
trait不可以传参
类继承trait第一个关键字使用extends,之后使用with
可以在trait中定义方法实现与不实现,变量和常量都可以
模式匹配 match .....case
模式匹配既可以匹配值,也可以匹配类型
模式匹配中,从上往下匹配,匹配上了就自动终止
模式匹配中会有值转换
case_=>{....}什么都匹配不上最后匹配,要写到最后
模式匹配match ....case相当于一大行,大括号可以省略
样例类case class
可以new也可以不new默认有setter,getter,对外可见
偏函数PartialFunction[A,B] A是匹配的类型,B是匹配上返回的类型
偏函数相当于java中的switch ...case...只能匹配相同类型

1.scala object相当于java中的单例,object中定义的全是静态的。object不可以传参。对象要传参,使用apply方法
2.Scala中定义变量使用var,定义常量使用val,常量不可变,变量可变.变量和常量类型可以省略不写,会自动推断。
3.Scala中每行后面都会有分号自动推断机制,不用显式写出“;”
4.建议在Scala中命名使用驼峰命名法
5.Scala类中可以传参,有了参数就有了默认了构造。传参一定要指定类型。类中的属性默认有getter()和setter()。
6.类中重写构造时,构造中首行必须先调用默认的构造
def this(){
this()
....
}
7.scala中当new class时,类中除了方法不执行(除了构造方法),其他都执行
8.在同一个Scala文件中,class名称和object名称一样时,这个类叫做这个对象的伴生类,这个对象叫做这个类的伴生对象,他们之间可以互相访问私有对象

Scala简单语法

1.if else和java一样
if()
{}
else
{}
2.for

object Test {
def main(args: Array[String]) {
var a = 0;
// for 循环
for( a <- 1 to 10){
println( "Value of a: " + a );
}
}
}
这里注意<要和-连着
结果:
value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6
value of a: 7
value of a: 8
value of a: 9
value of a: 10

注意var r1=1 until 10这里是指1到9,不包含10
var r=1.to(10,2)表示1,3,5,7,9

3.方法

方法定义
1.方法体中最后返回值可以使用return,如果使用了return,那么方法体的返回值类型一定要指定
2.如果方法体中没有return,默认将方法体中最后一行计算的结果当做返回值返回。方法体的返回值可以省略,会自动推断
3.定义方法传入的参数一定要指定类型
4.方法的方法体如果可以一行搞定,那么方法体的“{}”可以省略
5.如果定义方法时,省略了方法名称和方法体之间的“=”,那么无论方法体最后一行计算的结果是什么,都会被丢弃,返回Unit
6.def定义方法
def(方法开头) max (方法名)(x:Int,y:Int)(参数):Int(返回值类型)={
if(x>y)
x
else
y
}
7.递归方法
递归方法要显式的声明函数的返回
8.参数有默认值的方法
9.可变长参数的方法
参数后加个*就可以
10.匿名函数
"=>"就是匿名函数,多用于方法的参数是函数时,常用匿名函数
(a:Int,b:Int)=>{
a+b
}
11嵌套方法
12.偏应用函数
某些情况下,方法中参数非常多,调用这个方法非常频繁,每次调用只有固定的某个参数变化,其他都不变,可以定义偏应用函数
13.高阶函数
1)方法参数是函数
2)方法的返回是函数<要显式的写出方法的返回值类型,加_就可以不显示的声明方法的返回值>
3)方法的参数和返回都是函数



13柯里化函数


4.字符串和集合

1.不可变
var arr1=new Array[Int](3)
二维数组
var array=new Array[Array[Int]](3)
array.concat
合并两个数组
array.fill(5)("hello")
代表创建一个初始化长度为5,初始化值为hello的数组
2可变
val arr=new ArrayBuffeer
3.list
var list=List()
不需要加new
list.map( )
list.flatMap()


list.filter()过滤
4.set
val set=Set[Int]()
set.intersect()取交集
set.diff()取差集
5.map
val map=Map[String,Int]
6.tuple元组
元组最多支持有22个元素
元祖可以new也可以不new,甚至可以直接在()写元素
tuple.swap
7.Trait
Scala trait(特征)相当于java的接口,实际上它比接口还功能强大。详细请看45
一个类继承多个trait时,第一个关键字使用extends,之后使用with
trait不可以传参
trait中可以有方法体的实现或者方法体的不实现,类继承了trait要实现trait中没有实现的方法
8.模式匹配match
1.case_默认什么都匹配不上,放在最后
2.match可以匹配值,还可以匹配类型
3.匹配过程中会有数值的转换
4.从上往下匹配,匹配上会自动停
5.模式匹配外部的“{...}”可以省略

9.偏函数
只能匹配一个值,匹配上了放回某个值
PartialFunction[A,B] A是匹配的类型,B是匹配上返回的类型
10.样例类
用关键字case修饰的类
默认实现了setter和getter,tostring这些方法

5.隐式转换

隐式值是指在定义参数时前面加上implicit。隐式参数是指在定义方法时,方法中的部分参数是由implicit修饰【必须使用柯里化的方式,将隐式参数写在后面的括号中】。隐式转换作用就是:当调用方法时,不必手动传入方法中的隐式参数,Scala会自动在作用域范围内寻找隐式值自动传入。


Actor Model

Actor Model是用来编写并行计算或分布式系统的高层次抽象(类似java中的Thread)让程序员不必为多线程模式下共享锁而烦恼,被用在Erlang 语言上, 高可用性99.9999999 % 一年只有31ms 宕机Actors将状态和行为封装在一个轻量的进程/线程中,但是不和其他Actors分享状态,每个Actors有自己的世界观,当需要和其他Actors交互时,通过发送事件和消息,发送是异步的,非堵塞的(fire-andforget),发送消息后不必等另外Actors回复,也不必暂停,每个Actors有自己的消息队列,进来的消息按先来后到排列,这就有很好的并发策略和可伸缩性,可以建立性能很好的事件驱动系统。
Actor的特征:
ActorModel是消息传递模型,基本特征就是消息传递
消息发送是异步的,非阻塞的
消息一旦发送成功,不能修改
Actor之间传递时,自己决定决定去检查消息,而不是一直等待,是异步非阻塞的
什么是Akka
Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和Scala 的 Actor 模型应用,底层实现就是Actor,Akka是一个开发库和运行环境,可以用于构建高并发、分布式、可容错、事件驱动的基于JVM的应用。使构建高并发的分布式应用更加容易。
spark1.6版本之前,spark分布式节点之间的消息传递使用的就是Akka,底层也就是actor实现的。1.6之后使用的netty传输。

相关文章

  • 46.Scala需要注意的点

    我在45中写了Scala的相关信息,但是繁杂,这里将择重点讲述一下Scala是基于JVM的语言六大特点1.与jav...

  • 写框架需要的注意点

    转自:http://www.jianshu.com/p/aa3208a1cdd0首先要明确出于什么目的来写框架,这...

  • TextInput 需要注意的点

    TextInput在项目里很常见,在这里就整理一些,我遇到的问题。。。 这是我平时记录在MacDown里的,懒得弄...

  • js 中需要 注意的点

    近来,从新扒了一下 js 的所有的大概内容,发现很多东西都是 在我写项目的时候 遇到的坑,但是 教程 早就 已经 ...

  • 改行需要注意的点

    改行难不难?难,怎么改? 一个很重要的思路是能力迁移,就是把以往工作中积累的一些可迁移的能力, 比如说数据分析的能...

  • 考试需要注意的点

    今天的考试结束了,通过今天的考试经历,我梳理了,我有几点不足还需要改进。 一是在答卷时间的分配上,一定要注意时间节...

  • UIGraphics需要注意的点

    背景 UIGraphicsBeginImageContextWithOptions / UIGraphicsEnd...

  • openpyxl需要注意点

    1、百分数写入百分数时,需要加上excel.guest_types=True,否则写入的百分数会变成小数impor...

  • 40+的女人,多穿这3类“单品”,贵气又高级!

    40+女性日常穿衣需要注意什么呢?说实话,其实需要注意的点有很多。 既需要注意单品与身材的配合,又需要注意肤色和配...

  • 7.需要注意的点

    计算机科学中最基础的就是语句。我们根据之前做的闯关游戏再把之前我们学过的东西复习一下。 语句: 这里的【向前移动】...

网友评论

      本文标题:46.Scala需要注意的点

      本文链接:https://www.haomeiwen.com/subject/pkvikhtx.html