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

相关文章

来自专栏一“技”之长

深入理解JavaScript函数 原

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

501
来自专栏黑泽君的专栏

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

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

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

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

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

2907
来自专栏微信公众号:Java团长

浅谈Java中的equals和==

  为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初学Java的时候这个问题不弄清楚,就会导致自己在以后编写代码时出现一些...

761
来自专栏黑泽君的专栏

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

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

382
来自专栏编程

Python基础知识2:字典

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

21110
来自专栏十月梦想

变量和常亮

在函数内,变量的使用需要声明常量的作用域globay变量名(全局作用)local(局部)static(静态)

662
来自专栏猿人谷

const用法小结

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

1757
来自专栏Java 源码分析

静态内部类

定义:静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。 注意点: 一般情况下,如果一个内部类不是被定义成静态内部类,...

3018
来自专栏微信公众号:Java团长

浅谈Java中的equals和==

  为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初学Java的时候这个问题不弄清楚,就会导致自己在以后编写代码时出现一些...

883

扫码关注云+社区