Scala基础语法

摘 要

本文将详细介绍Scala的基础语法。

Scala的变量声明

package com.itunic.scala

/**
  * Created by ITUNIC on 2016/11/6.
  */
object VariableDemo {
  def main(args: Array[String]) {
 //使用val定义的变量值是不可变的,相当于java里用final修饰的变量
    val i = 1
 //使用var定义的变量是可变得,在Scala中鼓励使用val
    var s = "hello"
 //Scala编译器会自动推断变量的类型,必要的时候可以指定类型
 //变量名在前,类型在后
    val str: String = "itunic"
  }
}

Scala中的数据类型

Scala和Java一样,有7种数值类型Byte、Char、Short、Int、Long、Float和Double(无包装类型)和一个Boolean类型。

Scala的条件表达式

package com.itunic.scala

/**
  * Created by ITUNIC on 2016/11/7.
  */
object ConditionDemo {
  def main(args: Array[String]) {
    val x = 1
 //判断x的值,将结果赋给y
    val y = if (x > 0) 1 else -1
 //打印y的值
    println(y)

 //支持混合类型表达式
    val z = if (x > 1) 1 else "error"
 //打印z的值
    println(z)

 //如果缺失else,相当于if (x > 2) 1 else ()
    val m = if (x > 2) 1
    println(m)

 //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
    val n = if (x > 2) 1 else ()
    println(n)

 //if和else if
    val k = if (x < 0) 0
 else if (x >= 1) 1 else -1
    println(k)
  }
}

Scala的块表达式

package com.itunic.scala

/**
  * Created by ITUNIC on 2016/11/7.
  */
object BlockExpressionDemo {
  def main(args: Array[String]) {
    val x = 0
 //在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值
 //下面就是一个块表达式
    val result = {
 if (x < 0) {
        -1
      } else if (x >= 1) {
 1
      } else {
 "error"
      }
    }
 //result的值就是块表达式的结果
    println(result)
  }
}

Scala的循环表达式

在scala中有for循环和while循环,用for循环比较多。for循环语法结构:for (i <- 表达式/数组/集合)

package com.itunic.scala

/**
  * Created by ITUNIC on 2016/11/7.
  */
object ForDemo {
  def main(args: Array[String]) {
 //for(i <- 表达式),表达式1 to 10返回一个Range(区间)
 //每次循环将区间中的一个值赋给i
 for (i <- 1 to 10)
      println(i)

 //for(i <- 数组)
    val arr = Array("a", "b", "c")
 for (i <- arr)
      println(i)

 //高级for循环
 //每个生成器都可以带一个条件,注意:if前面没有分号
 for (i <- 1 to 3; j <- 1 to 3 if i != j)
      print((10 * i + j) + " ")
    println()

 //for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
 //每次迭代生成集合中的一个值
    val v = for (i <- 1 to 10) yield i * 10
    println(v)

  }

}

Scala的调用方法和函数

Scala中的+ - * / %等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有

一点特别的:这些操作符实际上是方法。例如:

a + b

是如下方法调用的简写:

a.+(b)

a 方法 b可以写成 a.方法(b)

Scala的定义方法及函数

定义方法

方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型。

定义函数

Scala的方法与函数区别

在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作

案例:首先定义一个方法,再定义一个函数,然后将函数传递到方法里面。

package com.itunic.scala

/**
  * Created by ITUNIC on 2016/11/11.
  */
object MethodAndFunctionDemo {
 //定义一个方法
 //方法m2参数要求是一个函数,函数的参数必须是两个Int类型
 //返回值类型也是Int类型
  def m1(f: (Int, Int) => Int) : Int = {
    f(2, 6)
  }

 //定义一个函数f1,参数是两个Int类型,返回值是一个Int类型
  val f1 = (x: Int, y: Int) => x + y
 //再定义一个函数f2
  val f2 = (m: Int, n: Int) => m * n

 //main方法
  def main(args: Array[String]) {

 //调用m1方法,并传入f1函数
    val r1 = m1(f1)
    println(r1)

 //调用m1方法,并传入f2函数
    val r2 = m1(f2)
    println(r2)
  }
}

将方法转换成函数(牛X的下划线)

基础语法部分介绍完毕

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏锦小年的博客

python学习笔记2.3- 循环、判断

会了print()以后就可以开始基础编程,首先要学会怎么表达循环和条件判断,这是程序中用来表达逻辑的语法。python中的循环关键字有:for 和 while...

16810
来自专栏java学习

工程师笔试题2(答案解析)

一、单项选择题 1.二进制数 11101 转化为十进制数是( )。 A.23 B.17 C.26 D.29 2.以下可以对对象加互斥锁的关键字是( )。 ...

3146
来自专栏Python

Python中的栈溢出及解决办法

1.递归函数 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ....

2744
来自专栏高性能分布式系统设计

Go的defer和方法修饰符的一个小坑

先看代码: ? ? https://play.golang.org/p/GlM23bSW6zf 可见: 1. for 循环变量只有一份  2. 单行的defer...

3335
来自专栏十月梦想

多个Promise对象的处理

如果某件事情需要依照多个对象完成后才能执行,那么我们可以使用Promise.all来管理,将这些状态全部执行完毕后才执行下一个!

801
来自专栏程序员互动联盟

【编程基础】C语言的变量-新手必备

大家在初学C语言的时候对各种变量之间的区别以及存储布局可能都有很多疑问,造成在使用变量的时候可能会遇到错误的地方。这里做一个简单的总结。 首先是全局变量和静态变...

34410
来自专栏阿凯的Excel

Python读书笔记22(函数传递任意数量实参)

连小编都没想到一个小小的函数要分享这么多期~ 当然,主要原因是! 不好意思,放错图了是! 今天和大家分享函数的最后一个部分,虾米呢? 前期有分享过传递一个...

3377
来自专栏黄Java的地盘

JavaScript如何实现UTF-16编码转换为UTF-8编码——utfx.js源码解析

当你在前端需要通过二进制数据与服务端进行通信时,你可能会遇到二进制数据的编码问题。大部分服务端的字符串编码类型都为UTF-8,而JavaScript中字符串编码...

912
来自专栏前端说吧

JS-高程3(更新中...)

3207
来自专栏从流域到海域

Python filter()函数

Python filter()函数 filter()函数顾名思义,就是过滤器,它是Python内置的高级函数之一。 filter()函数接收2个...

1858

扫码关注云+社区