Scala学习一

简介: Scala中的方法与函数:方法是属于类或者对象的,在运行时,它是加载到JVM的方法区中,而函数则是加载到JVM的堆内存中,同时可以将函数对象赋值给一个变量。函数是一个对象,继承自FunctionN,函数对象有apply、curried、toSting、tupled这些方法,而方法则没有。这是scala与java不同的地方。

一、scala中的方法

1.Scala中方法的格式

def 方法名(参数名:参数类型,参数名:参数类型):[return type]={//方法体}

省略条件:

1.参数列表的参数类型不能省略
2.参数值类型可以省略,由scala编译器自动推断
3.返回值可以不写return,默认就是{}块表达式的值
4.定义递归方法,不能省略返回值类型

如:获取最大值

//定义方法defgetMaxNum(a:Int, b:Int):Int= {
returnif(a>b) aelseb}
//调用方法valmaxNum=getMaxNum(20, 40)
//打印结果printIn("maxNum: "+maxNum)

根据上面的省略条件2可以进行省略:

//定义方法defgetMaxNum(a:Int, b:Int) =if(a>b) aelseb//调用方法valmaxNum=getMaxNum(20, 40)
//打印结果printIn("maxNum: "+maxNum)

2.使用惰性方法

当记录方法返回值的变量被声明为lazy时,方法的执行将被推迟,直到我们首次使用该值时,方法才会执行。类似java中的延迟加载。同时lazy不能修饰var类型的变量。

例如想延迟调用则

//定义方法defgetSum(a:Int, b:Int)=a+b//使用惰性方法lazyvalsum=getSum(1,2);
//调用是才会加载getSum()方法printIn("sum: "+sum)

3.Scala中的方法参数

默认参数、带名参数、变长参数

默认参数:

//定义方法,同时带默认值defgetSum(x:Int=10 , y:Int=20) =x+y//通过该默认参数的形式调用该方法valsum=getSum()
//打印结果print("sum: "+sum) //30

带名参数

//定义方法,同时带默认值defgetSum(x:Int=10 , y:Int) =x+y//通过该默认参数的形式调用该方法valsum=getSum(y=10)
//打印结果print("sum: "+sum) //20

变长参数

def 方法名(参数名:参数类型*):返回值类型 = {
    //方法体
}

例如:

//定义方法defgetSum(a:Int*)=a.sum//调用方法valsum=getSum(3,4,5,6,7)
//打印结果printIn("sum: "+sum) //25

二、函数

定义函数

val 函数变量名 = (参数名:参数类型,参数名:参数类型) =>函数体

使用函数

//定义函数valgetSum= (x:Int,y:Int) =>x+y//调用函数valresult=getSum(20,30)
//打印结果printIn("result: "+result) //50

Scala中的方法与函数:

方法是属于类或者对象的,在运行时,它是加载到JVM的方法区中,而函数则是加载到JVM的堆内存中,同时可以将函数对象赋值给一个变量。函数是一个对象,继承自FunctionN,函数对象有apply、curried、toSting、tupled这些方法,而方法则没有。这是scala与java不同的地方。

将方法转换成函数的方式

val 变量名 = 方法名 _  //格式为: 方法名 + 空格 + 下划线

例如:

//定义方法defadd(x:Int, y:Int) =x+y//将方法换成函数vala=add_//调用函数valresult=a(10,30)
//打印结果printIn("result: "+result) //40

关于for循环写法

for(i <- 1 to n) 等价于 for(int i = 1, i <= n, n++)

进行插值打印方式

//打印参数j*i= (j*i的积),如3*5=15print(s"${j}*${i}=${j*i})
目录
相关文章
|
1月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
50 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
6月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
108 2
|
6月前
|
消息中间件 分布式计算 大数据
Scala学习--day03--函数式编程
Scala学习--day03--函数式编程
102 2
|
6月前
|
Java Scala
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
194 1
|
6月前
|
Java 编译器 API
Scala学习--day01变量与数据类型、运算符
Scala学习--day01变量与数据类型、运算符
|
存储 算法 Java
Scala学习三-面向对象
前面我们已经学习了特质类似接口,其可以被继承,同时如果需要继承多个特质的话,则需要使用extends…with…进行继承。其类似java中的接口和抽象方法的结合体,但又比java中的其要强大,因为其可以定义抽象字段和普通字段、抽象方法和普通方法。而在java中接口中可以定义常量,不能定义变量。同时特质还可以继承class类,而在java中接口通常是用来实现的。 Object继承trait
136 0
Scala学习三-面向对象
|
分布式计算 资源调度 Hadoop
基于mac构建大数据伪分布式学习环境(七)-部署Scala及Spark学习环境
本文主要讲解如何部署Scala与单机伪分布式Spark计算引擎
118 0
|
SQL 分布式计算 Scala
Scala学习总结
Scala学习总结
131 0