Scala学习笔记--第1章 Scala基础
2016-03-10 23:27
357 查看
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)。
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)。
相关文章推荐
- ibatis源码学习(一)整体设计和核心流程
- 三分钟教你学Git(二十) - revert merge会出现的问题
- EventBus使用详解
- 数据库面试常问的一些基本概念
- JDK动态代理
- 对于Kindle的分析
- JAVA线程
- c++中的常量折叠 http://blog.csdn.net/yafeng_jiang/article/details/7101964
- LeetCode : Search for a Range [java]
- 计算机网络之网络层
- 带你一步步实现线程池异步回调
- 你真的看懂R中的stem函数了吗?
- jdbc批量插入实现大批量数据快速插入
- 专注做事,竟然也成为我们的稀缺能力 [20160310]
- 读《我是IT小小鸟》有感
- Win8 Tomcat安装及环境变量配置
- MAC OSX10.10上搭建Apache,PHP,MySQL5.6.22,phpMyAdmin开发环境
- 穷举法和迭代法
- ASP.NET 5
- Maven中的import scope.