Cris 的 Scala 笔记(一,二):Scala 简介,安装和基础语法

文章目录

    • 1. Scala 简介和安装
      • 1.1 Scala 的特点
        • ① 面向对象
        • ② 函数式编程
        • ③ 静态类型
        • ④ 扩展性
        • ⑤ 并发性
      • 1.2 学习 Scala 的原因
      • 1.3 Java 和 scala 以及 JVM 的关系图
      • 1.4 Scala 学习建议
      • 1.5 安装 Scala
      • 1.6 第一个 Scala 程序
      • 1.7 IDEA 安装 Scala 插件
    • 2. Scala 基础语法
      • 2.1 反编译 Scala 代码了解运行原理
      • 2.2 Scala 执行流程图及开发规范
      • 2.3 Scala 的特殊字符
      • 2.4 关联源码包及文档
      • 2.5 注释
      • 2.6 Scala语言输出的三种方式

1. Scala 简介和安装

关于 Scala 的概述,这里引用维基百科

一门多范式的编程语言,设计初衷是要集成面向对象和函数式编程的各种特性

1.1 Scala 的特点

① 面向对象

Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述

② 函数式编程

Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化

③ 静态类型

Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性

④ 扩展性

Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构

⑤ 并发性

Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现

1.2 学习 Scala 的原因

  1. Spark 框架就是使用 Scala 写的,为了更好的学习 Spark ,Scala 是必须要熟悉并且精通的!
  2. Scala 是一门 Scalable Language,支持面向对象和函数式编程,十分有趣
  3. Scala 和 Java 十分 “亲近”,Scala 的创造者就是 Java 5.0 和 Java 8.0 的编译器的作者,熟悉 Scala 对于 Java 学习也会有一个更加深刻的理解
  4. 现在会 Scala 的人相对较少,而大数据领域 Spark 的地位又非常高,如果可以精通 Scala,那么对于个人发展也是帮助大大的:happy:

1.3 Java 和 scala 以及 JVM 的关系图

Scala 比较难学的原因主要是:

  1. 语法兼顾面向对象和函数式编程,比较容易混淆
  2. 部分支持 Java 的类库,又有自己的类库,还对 Java 的部分类库做了封装,查看 Scala 源码要求较高
  3. 由于是对 Java 的 “封装”,学习 Scala 的前提就是要会 Java?

1.4 Scala 学习建议

  1. 主要就是学习 Scala 的特殊语法
  2. 区别 Scala 和 Java
  3. 规范的使用 Scala 编写代码

只要按照以上三点学习,那么熟悉乃至精通 Scala 也就不在话下了~

1.5 安装 Scala

因为 Cris 使用的 Linux 桌面系统,所以安装方法和 Windows 不太一致,悉知~

这里给出 Scala 的官网

下载 tar.gz 包,然后解压到指定文件夹,注意:提前安装 jdk!

然后配置 /etc/profile

输入 scala -version

1.6 第一个 Scala 程序

首先使用 Vim 编写一个最简单的 Scala 程序

object testScala{
    def main(args:Array[String]):Unit = {
        System.out.println("hello,Scala")
    }
}

然后使用 scalac 编译

使用 java 和 scala 同样可以执行

进一步证实了 Scala 语言编写的代码是基于 Java 的并且执行环境就是 JVM 虚拟机

1.7 IDEA 安装 Scala 插件

直接在 IDEA 的插件地址下载即可,注意:IDEA 版本和 Scala 插件的版本要一致!

安装完毕重启 IDEA 即可

让我们新建一个 Scala 项目

如果新建文件没有出现 scala 的选项,请参考

当然实际开发中都是建一个 Maven 项目

2. Scala 基础语法

2.1 反编译 Scala 代码了解运行原理

首先新建一个 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 的字节码文件也有了个认识 ?

2.2 Scala 执行流程图及开发规范

  1. Scala源文件以 “.scala" 为扩展名

  2. Scala程序的执行入口是main()函数

  3. Scala语言严格区分大小写

  4. Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后自动加分号),这也体现出Scala的简洁性

  5. 如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号

2.3 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
  }
}

2.4 关联源码包及文档

在使用scala过程中,为了搞清楚scala底层的机制,需要查看源码,下面看看如何关联和查看Scala的源码包

  • 先要解压下载的 Scala 的源码包

  • 将解压后的源码包移动到之前解压的 Scala 安装包路径下,然后打开 IDEA 关联即可

    $ sudo mv scala-2.12.4/ /usr/local/scala/lib/
    

    之后就可查看 Scala 的源码了

如果想要查看 Scala 的文档可以去官网查看,也可以下载下来

2.5 注释

用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性;

注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现

Scala 中的注释分为三种:

  1. 单行注释:

     // 打印一行文字
        println("hello,scala!")
    
  2. 多行注释:

        /*
        println("hello,scala!")
        println("hello,scala!")
        */
    
  3. 文档注释

      /**
        * 打印名字的函数
        *
        * @param name 名字
        */
      def say(name: String): Unit = {
        println(name)
      }
    

拓展:使用命令生成 Scala 的文档注释

然后查看文档

2.6 Scala语言输出的三种方式

  1. 字符串通过+号连接(类似java)
  2. printf用法 (类似C语言)字符串通过 % 传值
  3. 字符串通过$引用(类似PHP)
 	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

你可能感兴趣的:(Scala)