文章目录

  • Scala简介
    • 为什么要使用Scala?
    • Scala vs Java
    • 安装JDK以及SDK
    • IDEA安装Scala插件
    • 第一个Scala程序
  • Scala基本语法
    • 声明变量
    • 使用类型推断来定义变量
    • 惰性赋值
    • 字符串
      • 使用双引号
      • 使用插值表达式
      • 使用三引号
    • 数据类型
    • 运算符
    • Scala类型层次结构
      • 问题

Scala简介

Scala(Scalable Language),可伸缩的语言,是运行在jvm上的多范式编程语言,同时支持面向对象函数编程,通俗地说:Scala是一种运行在JVM上的函数式的面向对象的编程语言。它的设计目标是随着用户的需求一起成长。Scala可被广泛应用于各种编程任务,从编写小型的脚本到构建巨型系统,它都能胜任。正因如此,Scala得以提供一些出众的特性,例如:它集成了面向对象编程和面向函数式编程的各种特性,以及更高层的并发模型。

Scala之父:Martin·Odersky(马丁·奥德斯基)

为什么要使用Scala?

  • 开发大数据应用程序,例如:Spark、Flink。
  • 表达能力强,开发速度快。
  • 兼容Java,可以访问庞大的Java类库,例如:MySQL、Redis、FreeMarker、ActiveMQ等。

Scala vs Java

下面通过两个简单的案例,分别比较一下用Java实现和用Scala实现的代码数量。
案例:定义一个学生类,属性为:姓名和年龄,然后在测试类中创建对象并测试。
Java代码如下:

//定义学生类
public class Student{private String name;       //姓名private int age;            //年龄//空参和全参构造public Student(){}public Student(String name, int age){this.name = name;this.age = age;}//getXxx()和setXxx()方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}//测试类
public class StudentDemo {public static void main(String[] args) {Student s1 = new Student("张三", 23);    //创建Student类型的对象s1, 并赋值System.out.println(s1);                  //打印对象, 查看结果.}
}

Scala代码如下:

case class Student(var name:String, var age:Int) //定义一个Student类
val s1 = Student("张三", 23)                           //创建Student类型的对象s1, 并赋值
println(s1)                                         //打印对象, 查看结果.

以上只是冰山一角,下面正式开始Scala的学习。

安装JDK以及SDK

Scala SDK是Scala语言的编译器,要开发Scala程序必须要先安装SDK。
此处我使用版本为:2.11.12
安装步骤就省略了,毕竟傻瓜式安装。

IDEA安装Scala插件

IDE我使用的是Intellij IDEA,由于IDEA默认不支持Scala语言,所以需要安装Scala插件来支持。
请务必下载与IDEA版本一致的Scala插件!
插件在这个地方:

插件安装完成后重启IDEA,就可以愉快的撸Scala了。
建议:刚开始时不用着急创建object和class什么的,创建下图中的worksheet,好像翻译过来叫活页练习题…反正就是一个左边敲代码,右边出结果的东西,很方便。

第一个Scala程序

println("hello world")

Scala基本语法

声明变量

在Scala中使用val或者var来定义变量,语法格式如下:

val/var 变量标识:变量类型 = 初始值

其中:

  • val 定义的是不可被重新赋值的变量,相当于Java中被Final修饰的变量,也就是常量。
  • var 定义的是可被重新赋值的变量。

注意:

  • Scala中的变量类型写在变量名后面。
  • Scala的语句最后不需要添加分号。

示例:定义一个变量保存一个人的名字“Tony Stark”
参考代码:

val name:String = "Tony Stark"

如果要为 val 类型的变量重新赋值的话,编译器会报错并提示:var could be a val,所以优先使用 val 定义变量,如果需要变量被重新赋值,才使用 var .

使用类型推断来定义变量

Scala可以根据变量的值来自动推断变量的类型,使代码更加简洁,以上示例可以更改如下:

scala> val name = "Tony Stark"
name: String = Tony Stark

惰性赋值

企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行。这些SQL语句,如果直接加载到JVM中,会有很大的内存开销。所以当有一些变量保存的数据较大时,但是不需要马上加载到JVM内存。可以使用惰性赋值来提高效率。

语法格式:

lazy val/var 变量名 = 表达式

示例:在程序中需要执行一条以下复杂的SQL语句,我们希望只有用到这个SQL语句才加载它。

select * from marvel where name = "Tony Stark"; //假设这条SQL语句很复杂。

参考代码:

lazy val sql = """select * from marvel where name = "Tony Stark";"""

字符串

Scala提供多种定义字符串的方式,我们可以按需选择。

使用双引号

语法:

val/var 变量名 = “字符串”

使用插值表达式

Scala中可以使用插值表达式来定义字符串,有效避免大量字符串的拼接。
语法:

val/var 变量名 = s"${变量/表达式}字符串"

注意:

  • 在定义字符串之前添加 s
  • 在字符串中可以使用 ${} 来引用变量或者编写表达式

示例:
请定义若干个变量,分别保存:“Tony Stark”、30、“male”,定义一个字符串,保存这些信息。
打印输出:name=Tony Stark, age=30, sex=male

参考代码:

val name = "Tony Stark"
val age = 30
val sex = "male"
val info = s"name=${name},age=${age},sex=${sex}"
println(info)

使用三引号

如果有大段的文本需要保存,就可以使用三引号来定义字符串。例如:保存一大段的SQL语句。三个引号中间的所有字符串都将作为字符串的值。

语法:

val/var 变量名 = """字符串1
字符串2"""

示例:
定义一个字符串,保存如下SQL语句。

select *
from marvel
where name = "Tony Stark";

参考代码:

val sql ="""select|   *|from|   marvel|where|   name = "Tony Stark"|""".stripMargin

数据类型

基础类型 类型说明
Byte 8位带符号整数
Short 16位带符号整数
Int 32位带符号整数
Long 64位带符号整数
Char 16位无符号Unicode字符
String Char类型的序列
Float 32位单精度浮点数
Double 64位双精度浮点数
Boolean true或false

此处需注意Scala和Java数据类型的区别:

  • Scala中所有的数据类型都使用大写字母开头
  • 整形使用 Int 而不是 Integer
  • Scala中定义的变量可以不写数据类型,让编译器自动推断

运算符

类别 操作符
算术运算符 +、-、*、/、%
关系运算符 >、<、==、!=、>=、<=
逻辑运算符 &&、\\、!
位运算符 &、\、^、<<、>>

注:由于MarkDown格式的竖线,也就是“非”符号,会被认作表格分割符,所以我就用 “ \ ” 代替了…

  • Scala中没有 “++”、"----" 运算符
  • 比较两个对象引用值的时候使用 “eq”

示例:
有一个字符串"abc",再创建第二个字符串,值为:在第一个字符串后拼接一个空字符串。然后使用比较这两个字符串是否相等、再查看它们的引用值是否相等。

参考代码:

val str1 = "abc"
val str2 = str1 + " "
str1 == str2  //false
str1.eq(str2)   //false

Scala类型层次结构

类型 说明
Any 所有类型的父类,它有两个子类:AnyRef和AnyVal
AnyVal 所有数值类型的父类
AnyRef 所有对象类型(引用类型)的父类
Unit 表示空,Unit是AnyVal的子类
Null Null是AnyRef的子类,也就是说它是所有引用类型的子类,可以将Null赋值给任何对象类型
Nothing 所有类型的子类,不能直接创建该类型实例,某个方法抛出异常时,返回的类型就是Nothing类型,因为Nothing是所有类的子类,那么它可以赋值为任何类型

问题

以下代码是否有问题?

val b:Int = null

以上代码在运行时会报如下错误:
an expression of type Null is ineligible for implicit conversion.
Null类型并不能转换为Int类型,说明Null类型并不是Int类型的子类。

以上内容为鄙人复习所写,若有纰漏和错误还请各位不吝赐教,抱拳。

Scala简介以及基本语法(一)相关推荐

  1. Scala笔记(一)基本简介与基础语法

    文章目录 一.Scala 简介 1.1 什么是 Scala 1.2 为什么使用 Scala 二.Scala 环境搭建 2.1 程序编译执行流程 2.2 安装 Scala SDK 2.3 安装 IDEA ...

  2. Scala 简介 [摘自 Scala程序设计 ]

    Scala 简介 1.1 为什么选择Scala Scala 是一门满足现代软件工程师需求的语言:它是一门静态类型语言,支持混合范式:它也是一门运行在 JVM 之上的语言,语法简洁.优雅.灵活.Scal ...

  3. 《Scala入坑笔记》一、Scala简介

    Scala 是 Scalable Language 的简写,网上没有发现谁问 Scala 怎么读,你是按 Scalable 的发音读作 ['skeɪlə] 还是喜欢读作斯卡拉? Scala 是一门多范 ...

  4. 2021年大数据常用语言Scala(一):Scala简介

    目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编程思 ...

  5. JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  6. Spark基础学习笔记08:Scala简介与安装

    文章目录 零.本讲学习目标 一.Scala简介 (一)Scala概述 (二)函数式编程 (三)Scala特性 1.一切都是对象 2.一切都是函数 3.一切都是表达式 (四)在线运行Scala 二.选择 ...

  7. 2018年第44周-scala入门-面向对象基础语法

    scala和java都是可以运行在JVM上, 所以scala和java是可以互相调用, 那么问题来了, 既然已经有java语言存在, 为什么还要发明scala语言. 存在即合理, 所以我就想找下sca ...

  8. C#基础编程——简介及基础语法

    C#基础编程--简介及基础语法 百科介绍 C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言.运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计 ...

  9. 大数据必学语言Scala(一):Scala简介

    文章目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编 ...

最新文章

  1. 【高并发】你敢信??HashMap竟然干掉了CPU!!
  2. Java平均工资再次上涨!这份宝藏资料限量免费送!
  3. linux更改用户的shell,Linux下通过shell更改用户密码
  4. php缓存变量_PHP 从缓存中取出存储的变量
  5. hud-1495--非常可乐 VS nyoj-21--三个水杯
  6. 实现linux cp 命令和修改配置文件
  7. ASP.NET Core中使用MediatR实现命令和中介者模式
  8. 160 - 30 cracking4all.1
  9. A Simple Job
  10. TensorFlow2 Win
  11. 谷歌浏览器不兼容小于12px的字体,在做网页的时候怎么解决
  12. HTTP MIME 类型
  13. strpos、 strstr、 substr三个函数的对比讲解
  14. JS实现轮播图(超详细代码注释)
  15. FPS游戏方框透视基本原理
  16. 计算机的配置与选购调查报告,目前主流计算机的配置及选购的调查报告
  17. 芯片的原理应用与分类
  18. 小巷开店问题(答案揭晓)
  19. python_爬取博客文章下载到本地
  20. 简单演示程序序列号的破解

热门文章

  1. 如何用移动硬盘备份计算机,移动硬盘妙用 教你安装备份Win7系统
  2. python获取股票的市盈率_如何利用python获取股票行情信息?
  3. 阿里的坦克 拼多多的梨子
  4. 文字转语音软件哪个好?快把这些软件收好
  5. php删除双引号,php如何去除引号
  6. 实现动态基础架构 容易吗?
  7. java吊打面试官系列,java高级程序员面试笔试宝典蔡羽
  8. 【Android开发】Android基本UI组件
  9. IE浏览器提示代理服务器没有响应,但是360浏览器可以用
  10. Windows下通过Git上传项目至Github