Scala学习笔记--第1章 Scala基础

1.1 Scala解释器

Scala解释器,其实就是相当于Linux的Shell,或者Windows的DOS窗口,正确安装Scala后,在命令行下执行scala指令,就进入到Scala解释器,如图:

Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71).

Type in expressions to have them evaluated.

Type :help for more information.


scala>

这样就表示你已经成功安装Scala的运行环境,并已进入Scala解释器,现在可以在Scala解释器里进行操作。


scala> 10*5

res0: Int = 50


scala> res0 / 10

res1: Int = 5


scala> "Ha" * res1

res2: String = HaHaHaHaHa


scala> res0 * 0.5

res3: Double = 25.0

从图中可以看到,Scala解释器会显示生成结果的类型,例如Int、String、Double。res0,res1,res2,res3,是解释器声明的一个常量值,声明后不能修改的,假如需要更改它的值就会报错,例如:

scala> res3 = 30

<console>:9: error: reassignment to val

       res3 = 30

            ^ 

在Scala解释器中,也可以用Tab键进行补全方法名字,或者常量名,例如输入re后按Tab键:

scala> re

res0   res1   res2   res3   ref   reflect


scala> res2.to

toCharArray   toLowerCase   toString   toUpperCase

Scala解释器读到一个表达式,对它进行求值,将它打印出来,接着继续读下一个表达式,这个过程被称作读取-求值-打印-循环,即REPL。从技术上来说,这并不是一个解释器,实际上发生的是,输入的内容很快被编译成字节码,然后将这段字节码交予Java虚拟机执行。

1.2 Scala常用类型及声明值

Scala通过var或val来声明值,其中var声明的值可变,而val声明的值初始化后就不再可变,这有点类似于Java中final声明的变量。平常建议使用val来声明值,除非真的需要改变值的内容时,才用var声明,当然还是得视情况而定。声明值必须做初始化,否则将会报错。

1. val声明一个名称为sum的值,赋值为15,再次修改的时候就报错了。

scala> val sum = 1+2+3+4+5

sum: Int = 15


scala> sum = 20

<console>:8: error: reassignment to val

       sum = 20

           ^

2. var声明一个名称为count的值,count+=20,对其加20后输出:

scala> var count = 10

count: Int = 10


scala> count += 20


scala> println(count)

30

在上一章节中的Int、Double都是Scala的常用数据类型之一,和Java一样,Scala也有7种数值类型:Byte、Char、Short、Int、Long、Float、Double,还有1个Boolean类型,但是Scala并不会刻意去区分基本类型和引用类型。在Java中,声明一个常量或者变量时,总是会先指明这个常量和变量的类型,而在Scala中,则无需这么做,这个工作已经交给Scala编译器,编译器会自动识别变量和常量是数据类型或引用类型,并自动进行转换。

Scala还提供了RichInt、RichDouble、RichChar等,它们具有Int、Double、Char所不具备的方法,还有BigInt、BigDecimal,用于任意大小的数字。

1.3 Scala算术运算及函数

算术运算:

Scala的算术操作符和Java类似,例如加(+)、减(-)、乘(*)、除(/)、取余数(%),还有位操作符:&、|、^、>>、<<,但实际上,在scala中,这些操作符在代码中其实是一个方法,也就是说 a+b,在scala中真正的表现形式是 a+.(b),这里的”+“号就是一个方法名。

注意:在Scala操作符中,没有++和—,碰到一个常量需要自加一的情况,Scala中通常的表现方式是 count += 1。

Scala函数调用:

Scala除了有方法之外,还提供函数,相比Java,在Scala中使用数学函数更为简单,例如:

scala> import scala.math._   //在使用数学函数时,需要导入包,这里的下划线是“通配符”,在Java中的“*”通配符

import scala.math._


scala> sqrt(3)

res3: Double = 1.7320508075688772


scala> pow(2, 3)

res4: Double = 8.0

scala> min(3, Pi)

res7: Double = 3.0

在Java中,则直接调用Math的静态方法,而在Scala中是没有静态方法的,虽然有个类似静态方法的特性,叫做单例对象,后续会进行深入学习。通常一个类对应有一个伴生对象,其方法就跟Java的静态方法使用一样。

如果Scala定义的函数没有参数,那么在调用的时候,不需要(),例如方法distinct(获取字符串中不重复的字符):

scala> "helloworld".distinct

res8: String = helowrd


apply方法:

在Scala中,我们通常都会使用类似函数调用的语法。举个例子,取字符串str中的第几个字符,Java中的调用方法str.charAt(i),取第i个字符,而在Scala中,直接就是str(i)进行获取,就像是Java数组获取值一样。

scala> val str = "helloworld"

str: String = helloworld


scala> str(1)

res9: Char = e


scala> "Bigworld"(3)

res10: Char = w

可以把这种用法当做是()操作符的重载形式,其背后的实现原理是一个名为apply的方法,在StringOps类中(查看Scala的API文档),有个方法定义:def apply(n: Int): Char,上面执行的 “Bigworld”(3),实际运行的代码为:”Bigworld”.apply(3)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值