Flink中Java开发的必要辅助(一)——Scala
主要是一些基本的语法点
两者还是很像的,都是基于JVM运行的,因为看很多论文中的实现部分都是通过Scala实现的,所以大致根据官网的文档和自己查的一些资料,总结一下Scala和Java相同和一些不同之处。
一、类和主函数
-
声明方式
- Java中
class 类名
public static void main(String[] args)
- Scala中
object 名
def main(args:Array[String])
- Java中
-
Scala中所有都是对象,比如数字也是对象
1.*(3)
这样通过方法的形式调用,不像Java中还有八种基本数据类型不是类结构 -
object Timer { def oncePerSecond(callback: () => Unit) { //unit相当于void while (true) { callback(); Thread sleep 1000 } } def timeFlies() { println("time flies like an arrow...") } def main(args: Array[String]) { oncePerSecond(timeFlies) } }
二、Scala的一些特点
面向表达式的
函数式的一种编程风格,也就是返回值,但是不改变中间过程
Java的指令式编程的一种改变,通俗来说就是“去变量”
//指令式写法
def printArgs ( args: Array[String]) : Unit ={
var i = 0
while (i < args.length) {
println (args(i))
i += 1
}
}
//函数式写法
def printArgs ( args: Array[String]) : Unit ={
for( arg <- args)
println(arg)
}
-
不变量和变量:
val nochange = 1;//只能赋值一次 var changable = 2;
-
函数定义:
def function_name(arg1: Int): Int = arg1 + 1//返回值最后写,注意一般是等式的写法 function_name(1,2)//调用时 (x: Int) => x + 1//声明匿名函数 val f = (x: Int) => x + 1//函数也能作为一个对象,当成量进行赋值 f(1)//调用方式 def add(m: Int,n: Int) = m + n val add2 = add(2,_: Int) add2(3)//输出为5,_表示通配符
-
柯里化函数:
def add(m: Int,n: Int) = m + n def add(m: Int)(n: Int) = m + n//上面函数的 柯里化 def add(m: Int)=(n: Int) => m + n//就是转换成返回一个匿名函数的函数 /** 实际调用时 */ val result = add(1)_//注意通配符,这时 result = (n: int) => 1 + n val sum = result(2)//输出3