Scala简介以及基本语法(一)
文章目录
- 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简介以及基本语法(一)相关推荐
- Scala笔记(一)基本简介与基础语法
文章目录 一.Scala 简介 1.1 什么是 Scala 1.2 为什么使用 Scala 二.Scala 环境搭建 2.1 程序编译执行流程 2.2 安装 Scala SDK 2.3 安装 IDEA ...
- Scala 简介 [摘自 Scala程序设计 ]
Scala 简介 1.1 为什么选择Scala Scala 是一门满足现代软件工程师需求的语言:它是一门静态类型语言,支持混合范式:它也是一门运行在 JVM 之上的语言,语法简洁.优雅.灵活.Scal ...
- 《Scala入坑笔记》一、Scala简介
Scala 是 Scalable Language 的简写,网上没有发现谁问 Scala 怎么读,你是按 Scalable 的发音读作 ['skeɪlə] 还是喜欢读作斯卡拉? Scala 是一门多范 ...
- 2021年大数据常用语言Scala(一):Scala简介
目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编程思 ...
- JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- Spark基础学习笔记08:Scala简介与安装
文章目录 零.本讲学习目标 一.Scala简介 (一)Scala概述 (二)函数式编程 (三)Scala特性 1.一切都是对象 2.一切都是函数 3.一切都是表达式 (四)在线运行Scala 二.选择 ...
- 2018年第44周-scala入门-面向对象基础语法
scala和java都是可以运行在JVM上, 所以scala和java是可以互相调用, 那么问题来了, 既然已经有java语言存在, 为什么还要发明scala语言. 存在即合理, 所以我就想找下sca ...
- C#基础编程——简介及基础语法
C#基础编程--简介及基础语法 百科介绍 C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言.运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计 ...
- 大数据必学语言Scala(一):Scala简介
文章目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编 ...
最新文章
- 【高并发】你敢信??HashMap竟然干掉了CPU!!
- Java平均工资再次上涨!这份宝藏资料限量免费送!
- linux更改用户的shell,Linux下通过shell更改用户密码
- php缓存变量_PHP 从缓存中取出存储的变量
- hud-1495--非常可乐 VS nyoj-21--三个水杯
- 实现linux cp 命令和修改配置文件
- ASP.NET Core中使用MediatR实现命令和中介者模式
- 160 - 30 cracking4all.1
- A Simple Job
- TensorFlow2 Win
- 谷歌浏览器不兼容小于12px的字体,在做网页的时候怎么解决
- HTTP MIME 类型
- strpos、 strstr、 substr三个函数的对比讲解
- JS实现轮播图(超详细代码注释)
- FPS游戏方框透视基本原理
- 计算机的配置与选购调查报告,目前主流计算机的配置及选购的调查报告
- 芯片的原理应用与分类
- 小巷开店问题(答案揭晓)
- python_爬取博客文章下载到本地
- 简单演示程序序列号的破解