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 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

const用法小结

常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。 概述 1. const有什么...

1787
来自专栏黑泽君的专栏

Java中方法重写的两个面试题

  方法重写:     在子类中,出现和父类中一模一样的方法声明的现象。(包含方法名、参数列表和返回值类型都一样)   方法重载:     同一...

2611
来自专栏机器学习算法与Python学习

python: sort, sorted, reverse

python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加...

3578
来自专栏黑泽君的专栏

Java中,什么是最终类与最终方法?它们的作用是什么?

final class A {},这样定义的类A就是最终类,最终类不可被继承,也就是说,不能写这样的代码,class B extends A {}了。

1142
来自专栏marsggbo

strtol函数 将字符串转换为相应进制的整数

+----------------+ |   strtol   | +----------------+ i.e. string to...

2117
来自专栏小樱的经验随笔

【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别

Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hel...

2917
来自专栏一“技”之长

深入理解JavaScript函数 原

    从功能上理解,函数是一组可以随时运行的语句,是一段代码块,也是所谓的子程序。在JavaScript中,函数实质上也是一种对象,是Function对象。函...

551
来自专栏梧雨北辰的开发录

Swift学习:构造器(中)

本篇继续对Swift中的构造器进行介绍,这里主要说到类的继承和构造。 作为引用类型的类具有的继承特性,这使得类的构造过程较为复杂一些,因为涉及到很多细节性的问题...

3008
来自专栏编程

Python基础知识2:字典

字典一种key - value 的数据类型,就像上学用的字典通过拼音查找汉字一样;字典是Python语言中唯一的映射类型。字典对象是可变的,它是一个容器类型,能...

22210
来自专栏黑泽君的专栏

当类中的方法全部都是 static 关键字修饰时 ,它的构造方法最好作为 private 私有化,理由是方法全是 static, 不知道的人会去new对象去调用,需要调用构造方法。 但 static的

当类中的方法全部都是 static 关键字修饰时 ,它的构造方法最好作为 private 私有化,理由是方法全是 static, 不知道的人会去new对象去调用...

1172

扫码关注云+社区