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(一):函数、流程控制、参数的更多相关文章

  1. mysql 视图 触发器 事物 存储过程 函数 流程控制

    1.视图 *** 视图是有一条sql语句的查询结果构成的虚拟表 其不是物理存在的 使用方式与普通表相同 视图的作用1.简化sql语句的编写 2.限制可以查看的数据 可以使用权限来完成 权限某一个库 的 ...

  2. MySQL之视图、触发器、事务、存储过程、函数 流程控制

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  3. [原创]Scala学习:流程控制,异常处理

    1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...

  4. MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化,数据库三大设计范式

    视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view tea ...

  5. MySQL 视图 触发器 事务 存储过程 函数 流程控制 索引与慢查询优化

    视图 1.什么是视图? 视图就是通过查询得到的一张虚拟表,然后保存下来,下次可直接使用 2.为什么要使用视图? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图? create view ...

  6. MySQL——视图/触发器/事务/存储过程/函数/流程控制

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  7. MySQL-5-TCL,视图,变量,存储过程和函数,流程控制

    TCL:Transaction Control Language事务控制语言 TCL 事务的特点 acid: 原子性(Atomicity),一致性(Consistency),隔离性(isolation ...

  8. Scala中的流程控制

    一.分支控制if-else //Scala中if-else语句中,代码块内最后一句代码就是返回值 def main(args: Array[String]): Unit = { var age:Int ...

  9. MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引

    本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ------------------------------------------------------------------ ...

  10. js的数据类型、函数、流程控制及变量的四种声明方式

    运算符 基本运算符 加 + 减 - 乘 * 除 / 取余 % 自增 ++ eg: 1++ 或 ++1 自减 -- eg: 1-- 或 --1 注:++或--写在前面表示优先级最高,先进行自增或者自减 ...

随机推荐

  1. ASP.NET Claims-based认证实现认证登录-claims基础知识

    claims-based认证这种方式将认证和授权与登录代码分开,将认证和授权拆分成另外的web服务.活生生的例子就是我们的qq集成登录,未必qq集成登录采用的是claims-based认证这种模式,但 ...

  2. CCSUOJ评测系统——第三次scrum冲刺

    1.小组成员 舒 溢 许嘉荣 唐 浩 黄欣欣 廖帅元 刘洋江 薛思汝 2.个人在小组第三次冲刺的任务及其完成情况描述. 本人在小组第三次冲刺的任务是负责代码的编写,其他人提需求和改进,代码是采用Git ...

  3. 切片和append操作

    本文转自:http://meia.fun/article/1541470004286 学习切片时,被append这个方法困扰了半天:在main方法中把一个切片作为实参传递给另一个函数,并在这个函数内调 ...

  4. leetcode题解之Find the Duplicate Number

    1.题目描述 2.分析 利用C++的 标准模板库 set 对数组进行读取,然后插入,如果检测到元素已经在set内部,则返回该元素值即可.时间复杂度为 O(n),空间复杂度为 O(n); 3.代码 in ...

  5. MsSQL使用加密连接SSL/TLS

    说明 应用程序通过未加密的通道与数据库服务器通信, 这可能会造成重大的安全风险.在这种情况下, 攻击者可以修改用户输入的数据, 甚至对数据库服务器执行任意 SQL 命令. 例如,当您使用以下连接字符串 ...

  6. ASM Disk Discovery 最佳实践

    ASM DISK 的Discovery PATH ASM实例的ASM_DISKSTRING初始化参数使用一个逗号分割的字符串限制ASM实例发现的DISK可以用于ASM DISK, 该字符串支持通配符如 ...

  7. REST Framework 的用户认证组件

    用户认证流程: 我们要知道这个流程是怎么走的? 认证之后做的什么? 怎么认证?这三个条件 认证流程:就是使用BaseAuthentication这个模块来做认证,判断你登陆成功传递过来的随机字符串是否 ...

  8. apache的AllowOverride以及Options使用详解

    通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对 ...

  9. Ardunio控制RGB的LED灯显示彩虹渐变色.

    由于我使用的是共阴极的RGB LED,如果你的是共阳极的,接线的时候要注意一下. 其他没什么不同 //定义RGB色彩的输出I/O ; ; ; //标记颜色变化的方式,增加值还是减小值 bool red ...

  10. Ubuntu 配置Mysql远程连接

    首先安装mysql.mysqlclient sudo apt-get install mysql-server mysql-clientsudo apt-get install libmysqlcli ...