关于 Scala 的概述,这里引用维基百科
一门多范式的编程语言,设计初衷是要集成面向对象和函数式编程的各种特性
Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述
Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化
Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性
Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构
Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现
Scala 比较难学的原因主要是:
只要按照以上三点学习,那么熟悉乃至精通 Scala 也就不在话下了~
因为 Cris 使用的 Linux 桌面系统,所以安装方法和 Windows 不太一致,悉知~
这里给出 Scala 的官网
下载 tar.gz 包,然后解压到指定文件夹,注意:提前安装 jdk!
然后配置 /etc/profile
输入 scala -version
首先使用 Vim 编写一个最简单的 Scala 程序
object testScala{
def main(args:Array[String]):Unit = {
System.out.println("hello,Scala")
}
}
然后使用 scalac 编译
使用 java 和 scala 同样可以执行
进一步证实了 Scala 语言编写的代码是基于 Java 的并且执行环境就是 JVM 虚拟机
直接在 IDEA 的插件地址下载即可,注意:IDEA 版本和 Scala 插件的版本要一致!
安装完毕重启 IDEA 即可
让我们新建一个 Scala 项目
如果新建文件没有出现 scala 的选项,请参考
当然实际开发中都是建一个 Maven 项目
首先新建一个 Scala object
object Hello {
def main(args: Array[String]): Unit = {
println("hello,scala!")
}
}
直接执行可以得到 hello,scala!
的结果
我们再看看编译后的字节码文件
使用反编译软件打开这两个字节码文件
//说明一下scala程序的一执行流程
//1. object 在底层会生成两个类 Hello , Hello$
//2. Hello 中有个main函数,调用 Hello$ 类的一个静态对象 MODULES$
public final class Hello
{
public static void main(String[] paramArrayOfString)
{
Hello . M O D U L E .MODULE .MODULE.main(paramArrayOfString);
}
}
//3. Hello . M O D U L E .MODULE .MODULE 对象是静态的,通过该对象调用Hello$的main函数
public void main(String[] args)
{
Predef…MODULE$.println(“hello,scala”);
}
//4. 可以理解我们在main中写的代码在放在Hello$ 的main, 在底层执行scala编译器做了一个包装
如果使用 Java 代码模拟实现 Scala 程序的执行流程
/**
* 模拟 Scala 的运行流程
*
* @author cris
* @version 1.0
**/
public class Hello2 {
public static void main(String[] args) {
Hello2$.HELLO_$.hello();
}
}
final class Hello2$ {
public static Hello2$ HELLO_$;
static {
new Hello2$();
}
public void hello() {
System.out.println("hello,scala!");
}
private Hello2$() {
HELLO_$ = this;
}
}
至此,对于 Scala 的运行机制,我们应该有了一个简单的了解,并且为什么会编译出两个 Scala 的字节码文件也有了个认识 ?
Scala源文件以 “.scala" 为扩展名
Scala程序的执行入口是main()函数
Scala语言严格区分大小写
Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后自动加分号),这也体现出Scala的简洁性
如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号
object TestChar {
def main(args: Array[String]): Unit = {
println("name\tage") // name age
println("cirs\"18") // cirs"18
println("simida\\james") // simida\james
println("rose\ncurry")
println("abc\rk") // k,如果是 java,也是 k
}
}
在使用scala过程中,为了搞清楚scala底层的机制,需要查看源码,下面看看如何关联和查看Scala的源码包
先要解压下载的 Scala 的源码包
将解压后的源码包移动到之前解压的 Scala 安装包路径下,然后打开 IDEA 关联即可
$ sudo mv scala-2.12.4/ /usr/local/scala/lib/
之后就可查看 Scala 的源码了
如果想要查看 Scala 的文档可以去官网查看,也可以下载下来
用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性;
注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现
Scala 中的注释分为三种:
单行注释:
// 打印一行文字
println("hello,scala!")
多行注释:
/*
println("hello,scala!")
println("hello,scala!")
*/
文档注释
/**
* 打印名字的函数
*
* @param name 名字
*/
def say(name: String): Unit = {
println(name)
}
拓展:使用命令生成 Scala 的文档注释
然后查看文档
var name = "cris"
var salary = 28000.00
println("my name is " + name) // my name is cris
printf("my name is %s,and salary is %f\n", name, salary) // my name is cris,and salary is 28000.000000
print(s"my name is $name,and salary is $salary") // my name is cris,and salary is 28000.0