Scala 基础语法
2015-07-10 10:00
190 查看
Scala 基础语法
流程控制
scala if 语句判断scala> if (x > 20) 1 else -1 res0: Int = -1
if 语句也可以直接放入一个变量返回值中
scala> val s = if (x > 0) 1 else -1 s: Int = 1
scala 存在一种混合类型表达式,比如
scala> if (x > 0) "positive" else -1 res1: Any = positive
这种表达式依赖于公用父类型
Any
如果不需要使用else的情况,可以直接省略
scala> if (x > 1) 3 res2: AnyVal = 3
scala 无switch语句, 但是我们会介绍一种更有效的模式匹配语法。
scala 语句并不需要
;结束. 长语句分行必须是符号结尾,。
在scala中,大括号可以包含整个语句的返回值,返回值是最后一个表达式的值。 如果是void类型, 那返回值就会是Unit,例如:
val distance = { val dx = x - x0; val dy = y - y0; sqrt(dx * dx + dy * dy) }
scala中简化了输入输出的基本操作 (对比java), 终端的输入输出语句可以使用如下方法完成
println("test") //打印一行 print("1")//同行输出 val = name = readLine("Your Name: ") // 从终端读取一行
在print函数中, 你可以使用s前缀然后用
$符号来进行输出变量
另外, scala也支持一个c风格的
printf函数
printf("Hello, %s! You are %d years old.\n", "Fred", 42)
循环语句
在scala中,循环语句语法于c 和java的基本一致。例如while (n > 0) { r = r * n n -= 1 }
while语句是一致的,但是
for语法就比较奇特
for (i <- 1 to n) r = r * 1
操作数组时, 如果想在
n - 1的下标停止, 可以使用
until来实现
val s = "Hello" var sum = 0 for (i <- 0 until s.length) // Last value for i is s.length - 1 sum += s(i)
循环可以直接取字符串,例如
var sum = 0 for (ch <- "Hello") sum += ch
在scala中不存在
break
continue语句, 如果你需要的话, 可以使用Boolean 来控制流程, 或者使用嵌套函数还有 用一个
break的方法, 你需要导入下面的这个包
import scala.util.control.Breaks._
函数
scala的函数标准定义如下def fac(n: Int): Int = { if (n <= 0) 1 else n * fac(n - 1) }
如所示,函数定义是使用
def关键字开始, 然后给出函数的参数类型以及名称, 括号外用冒号隔开,
Int是返回类型, scala的函数并不需要
return关键字, 但是也是可以加上的,效果一样。 另外啰嗦一点,在非OOP语言中, function是被翻译叫做函数, 在java这样的OOP语言中,叫做函数或者method.
在变量或者常量的定义中, 也可以用此例中的形式制定变量类型,如:
var i : Int = 10
在函数定义时, 你也可以加入默认的值
def fac(n: Int = 100): Int = { if (n <= 0) 1 else n * fac(n - 1) }
如果你想定义一个不知道有多少个字符串参数的函数, 以下例子可以完美的完成这份工作
scala> def connect(args:String*) = { var res = "" | for (arg <- args) res += arg | res | } connect: (args: String*)String scala> connect("c","b","c") res0: String = cbc
在函数的默认情况下, 函数不需要返回 任何东西, 但是也有些人不喜欢这种设计,所以加上了如此方法:
def box(s : String): Unit = { ... }
Lazy值
lazy val words = "abcd"
以上代码并不会直接被赋值, 而是在其他地方调用words的时候才会被初始化, lazy的设计是为了避免打开某些资源占用不放的情况。
异常
scala使用和java一样的捕获异常的方法。例如:throw new IllegalArgumentException("x should not be negative")
如此, 我们也有对应的
try
catch
finally方法去处理。 但是这种组合在scala中是很少见的,因为我们更多会用到模式匹配的方法。
相关文章推荐
- Java9的一些新特性介绍
- 关于hibernate4用mysql问题
- Java线程(二):线程同步synchronized和volatile
- 进度条实例
- fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .
- Nginx+Keepalived实现站点高可用[z]
- Linux的Cgroup<实例详解>
- HTML单选框多选框(根据name获取值和根据值显示结果)
- 专访李林锋:我与Netty那些不得不说的事
- php获取文件类型和文件信息的方法
- Jersey客户端代码
- leetcode 3sum c语言
- Java线程(一):线程安全与不安全
- WCF中自定义消息编码器:压缩编码器的使用
- Tomcat的三种运行模式
- PHP获取当前类名、函数名、方法名
- ios同步与异步网络请求
- [VS2012]VS在解决方案中的一个或多个项目由于以下原因未能加载的解决方法
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- -----CodeForces 3B Lorry-----贪心-------