Scala(一):函数、流程控制、参数
Function:函数
函数的定义:
def 函数名(参数):返回类型=函数实现体
eg:def abs(x:Long) : Long = if(x >= 0) x else -x
你必须给出所有参数的类型。不过,只要函数不是递归的,你就不需要指定返回类型,。Scala编译器可以通过=符号右边的表达式的类型推断出返回类型
如果函数体需要多个表达式完成,可以用代码块,块中最后一个表达式的值就是函数的返回值
eg:def function1(n:Int) = {
var r = 1
for(i <- 1 to n) r = r * i
r
}
代码如下:
/**
* Created by strugglingonlydata
*
*/
object Function {
def abs(x: Long): Long = if (x >= 0) x else -x def function1(n: Int) = {
var r = 1
for (i <- 1 to n) r = r * i
r
} //无参函数
def doWhile(): Unit = {
var line = ""
do {
line = readLine()
println("Read:" + line)
} while (line != "")
} //有参函数
def looper(x: Long, y: Long): Long = {
var a = x
var b = y
while (a != 0) {
val temp = a
a = b % a
b = temp
}
b
} //在main这个函数中,它是不明确返回值的所以在此用Unit做返回类型
def main(args: Array[String]): Unit = {
//无参调用的时候也可以不加()
doWhile()
//有参函数的调用
println(looper(100,298))
}
参数
1.默认参数
我们在调用某些函数时并不显式的给出所有参数值,对于这些函数我们使用默认参数
eg:
def decorate(str:String,left:String="[",right:String="]")=left+str+right
这个函数有两个默认的参数left和right,如果你调用decorate("hello"),打印结果为:[hello]
或者你给出的参数值的数量不够,那么默认参数会从后往前逐个应用进来
eg:decorate("hello","*"),打印结果为:*hello]
2.带名参数
你也可以在在提供参数值的时候指定参数名
eg:decorate(str="hello",left="*",right="*")
带名参数并不需要跟参数列表的顺序完全一致
3.变长参数
eg:def sum(i:Int*)={
var result=0
for(arg<- args) result +=arg
result
}
val s =sum(1,2,10,20)
变长参数得到的是一个类型为Seq的参数
流程控制:
1.条件表达式:if
Scala的if/else语法结构与Java一样。不过在Scala中if/else表达式有值,这个值就是跟在if或者else后面的表达式的值
eg:if(x>0) 1 else -1
在Scala中每个表达式都有值,如果没有值这个问题的解决方案就是引入Unit类,写作()
eg:if(x>0) 1 else ()
你可以把()当做是表示“无可用值”占位符,也就是Java中的void.
提示:从技术上讲Java中void没有值,但是Scala中Unit有一个表示"无值"的值
2.循环:for、while、dowhile
for循环:for (i<-表达式)
说明:在for循环的变量之前并没有val或者var的指定。该变量的类型是集合的元素类型。
增强for循环
for(i<-表达式;j<-表达式)使用多个变量<-表达式的形式提供多个生成器,用分号隔开
每个生成器都可以带一个守卫
eg:if(i<-1 to 3; j <- 1 to 3 if i!=j)
for的推导式
如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值
eg:for(i <- 1 to 10) yield i % 3
生成:Vertor(1,2,0,1,2,0,1,2,0,1)
while循环:while(条件语句){循环体}
dowhile循环在此不多做表述
循环变量的作用域一直持续到循环结束
说明:Scala中并没有提供break或者continue语句退出循环。那么如果需要break的时候我们怎么办呢?有如下选项:
1.使用Boolean型的控制变量
2.使用嵌套函数,你可以从函数中return
3.使用Breaks对象中的break方法 提示:欢迎大家批评指正,一起交流,一起进步。
Scala(一):函数、流程控制、参数的更多相关文章
- mysql 视图 触发器 事物 存储过程 函数 流程控制
1.视图 *** 视图是有一条sql语句的查询结果构成的虚拟表 其不是物理存在的 使用方式与普通表相同 视图的作用1.简化sql语句的编写 2.限制可以查看的数据 可以使用权限来完成 权限某一个库 的 ...
- MySQL之视图、触发器、事务、存储过程、函数 流程控制
MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...
- [原创]Scala学习:流程控制,异常处理
1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...
- MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化,数据库三大设计范式
视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view tea ...
- MySQL 视图 触发器 事务 存储过程 函数 流程控制 索引与慢查询优化
视图 1.什么是视图? 视图就是通过查询得到的一张虚拟表,然后保存下来,下次可直接使用 2.为什么要使用视图? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图? create view ...
- MySQL——视图/触发器/事务/存储过程/函数/流程控制
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- MySQL-5-TCL,视图,变量,存储过程和函数,流程控制
TCL:Transaction Control Language事务控制语言 TCL 事务的特点 acid: 原子性(Atomicity),一致性(Consistency),隔离性(isolation ...
- Scala中的流程控制
一.分支控制if-else //Scala中if-else语句中,代码块内最后一句代码就是返回值 def main(args: Array[String]): Unit = { var age:Int ...
- MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引
本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ------------------------------------------------------------------ ...
- js的数据类型、函数、流程控制及变量的四种声明方式
运算符 基本运算符 加 + 减 - 乘 * 除 / 取余 % 自增 ++ eg: 1++ 或 ++1 自减 -- eg: 1-- 或 --1 注:++或--写在前面表示优先级最高,先进行自增或者自减 ...
随机推荐
- NLS_LANG引起的SQLPLUS乱码和length长度不正确.
创建一个实验表语句如下 SQL> create table test(id number,name varchar2(10)); 当我们在SQLPLUS里面敲入下面的语句并回车执行的时候,SQL ...
- 聊聊 getClientRects 和 getBoundingClientRect 方法
开始表演 今天来聊一下两个相似的方法,它们就是:getBoundingClientRect().getClientRects(). 只见它们俩手拉手地登上了舞台,一个鞠躬,便开始滔滔不绝起来. 自述 ...
- ShowDoc
ShowDoc 摘自ShowDoc 每当接手一个他人开发好的模块或者项目,看着那些没有写注释的代码,我们都无比抓狂.文档呢?!文档呢?!Show me the doc !! 程序员都很希望别人能写技术 ...
- Java设计模式----初识适配器模式
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- 切片和append操作
本文转自:http://meia.fun/article/1541470004286 学习切片时,被append这个方法困扰了半天:在main方法中把一个切片作为实参传递给另一个函数,并在这个函数内调 ...
- Oracle EBS 锁
这里仅提供查询锁和解锁.有时,锁是正常的,所以杀掉正锁着的进程有一定的风险性. 具体步骤如下: -- 1.0 查看 holder的进程 , 'Holder: ', 'Waiter: ') || sid ...
- MYSQL 的rownum
mysql> SELECT @rownum:=@rownum+1 AS rownum, FLIGHTS.FLTID FROM (SELECT @rownum:=0) r, FLIGHTS lim ...
- 关于Oracle中sys、system和Scott用户下的数据库连接问题
system默认:manager sys默认:change_on_install 使用SQL Plus登录数据库时,system使用密码manager可直接登录. 由于为自己的密码时更改过的,所以我的 ...
- [翻译] UPCardsCarousel
UPCardsCarousel UPCardsCarousel is a carousel with a cards based UI for iOS. UPCardsCarousel是一个旋转木马效 ...
- mysql宕机,导致innodb_force_recovery恢复不了
https://serverfault.com/questions/698038/mysql-innodb-recovery-from-datafiles https://serverfault.co ...