Scala-基础语法

来源:互联网 发布:qt 编程 编辑:程序博客网 时间:2024/05/18 19:21

1.Scala解释器的使用

1,REPL:Read(取值)-> Evaluation(求值) -> Print(打印) -> Loop(循环)。Scala解释器也被称为REPL,会快速编译Scala代码为字节码,然后交给JVM来执行。

2.计算表达式:在scala>命令行内,键入scala代码,解释器会直接返回结果给你。如果你没有指定变量来存放这个值,那么值会默认的名称为res,而且会显示结果的数据类型,比如Int、Double、java.lang.String等等。

  1>例如:输入 1+1,会看到res0: Int = 2

3.内置变量: 在后面可以继续使用res变量,以及他存放的值

  1>例如:2.0 * res0, 返回res1: Double =4.0

  2>例如:“Hi, ” + res0, 返回res2: java.lang.String = Hi, 2

3.自动补全:在scala命令行内,可以使用Tab键进行自动补全。

  1>例如:输入res2.to,2敲击Tab键,解释器会显示出一下选项:tocharArray,toLowerCase,toString.toUpperCase.因为此时无法判定你需要补全的是哪一个,因此会提供给你所有的选项。

  2>例如:输入res2.toU,敲击Tab键,直接会给你补全为res2.toUpperCase

2.Scala与Java的关系

Scala与Java的关系是非常密切的!因为Scala是基于Java虚拟机,也就是JVM的一门编程语言。所以有Scala的代码,都需要经过编译为字节码,然后交由Java虚拟机来运行。所以Scala和Java是可以无缝互操作的。Scala可以任意调用Java的代码。所以Scala与Java的关系是非常非常密切的。

3.声明变量

1.声明val变量:可以声明val变量来存放表达式来计算。

  1>例如:val result = 1 + 1

  2>后续这些常量是可以继续使用的,例如:2 * result

  2>但是常量声明后,是无法改变他们的值,例如: result = 1,会返回 error: reassignment to val 的错误信息。

2.声明var变量:如果要声明值可以改变的引用,可以使用var变量

  1>例如: var myresult = 1, myresult = 2

  2>但是在Scala程序中,通常建议使用val, 也就是常量,因此如类似于Spark的大型复杂系统中,需要大量的网络传输数据,如果使用var,可能会担心被错误的更改。

  3>在Java的大型复杂系统的设计和开发中,也是用类似的特性,他们通常会将传递给其他模块/组件/服务的对象,设计成不可变类(immutable class)。在里面也会使用Java的常量定义,比如final,阻止变量的值被改变。从而提高系统的健壮性(robust,鲁棒性)和安全性。

3.指定类型:无论声明var变量,还是声明val变量,都可以手动指定其类型,如果不指定的话,Scala会自动根据值来进行类型推断。

  1>例如:val name: String = null

  2>例如: val name: Any = "yang"

4.声明多个变量:可以将多个变量放在一起进行声明

  1> 例如:val name1, name2: String = null

   2>例如: val num1, num2 = 100

4.数据类型与操作符

1.基本数据类型:Byte、Char、Short、Int、Long、Float、Double、Boolean

  1>这与Java的基本数据类型的包装类型相同,但是Scala没有基本数据类型和包装类型的概念,统一都是类。Scala自己会负责数据的基本类型和引用类型的转换操作。

  2>使用以上类型,直接就可以调用大量的函数。例如:1.toString(), 1.to(10)

2.类型的将强版类型:Scala使用很多将强类给数据类型增加了上百种增强的功能和函数。

  1>例如:String类型通过StringOps类增强了大量的函数,“Hello”。intersect("World").

  2>例如:Scala还提供RichInt、RichDouble、RichChar等类型,RichInt就是提供了to函数,1.to(10),此外Int为隐式转换为RichInt,让后再调用其to函数

3,基本操作符:Scala的算术操作符与Java的算法操作符也没什么区别,比如+、-、*、/、%等,以及&、|、……、>>、<<等

  1>但是,在Scala中,这些操作符其实是数据类型的函数,比如1 + 1,可以写成1 + (1)

  2>例如:1.to(10), 又可以写成1 to 10

  3> scala 中没有提供++、--操作符,只能使用+=和-=,比如counter = 1, counter++是错误的,必须写成counter += 1

5.函数调用与apply()函数

1.函数调用的方式:在Scala中,函数调用是非常简单的

  1>比如:import scala.math_, sqrt(2), pow(2), min(3,pi)

  2>不同的一点是,如果调用函数时,补血药传递参数,则Scala允许调用函数时省略括号的。例如:“Hello World”.distinct

2.apply函数

  1> scala中的apply函数时非常特殊的 一种函数,在Scala的object中,可以声明apply函数。而使用“类名()”的形式,其实就是“类名.apply()”的一种缩写。通常使用这种方式来构造类的对象,而不是使用“new 类名()”的方式。

  2>例如:“Hello World”(6),因为在StringOps类中的def apply(n: Int): Char 的函数定义,所以“Hello World”(6),实际上是“Hello World”.apply(6)的缩写。。

  3>例如:Array(1,,2,3,4),实际上是用Array object的apply()函数来创建Array类的实例,也就是一个数组。