Scala总结(一)

Scala简介

Scala 是 Scalable Language 的简写,是一门多范式的编程语言;是由 Martin Odersky 等人在 2003 年开发的,并于 2004 年首次发布;设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库

Scala 特性

Scala特性分为面向对象特性、函数式编程、类型系统、扩展性、并发性、强大的标准库、与 Java 互操作性、模块化和可扩展性等

******1. 面向对象特性:******类和对象、继承和多态、抽象类和特质、封装

Scala 是一种高度表达性的编程语言,它结合了面向对象编程和函数式编程的最佳特性

******2 . 函数式编程:******高阶函数、不可变性、模式匹配、闭包

**3.**类型系统:静态类型、类型推断、泛型编程、类型系统扩展

Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:泛型类、协变和逆变、标注、类型参数的上下限约束、把类别和抽象类型作为对象成员、复合类型、引用自己时显式指定类型、视图、多态方法

******4. 扩展性:******Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:任何方法可用作前缀或后缀操作符、可以根据预期类型自动构造闭包

******5. 并发性:Akka框架、******Futures 和 Promises、Scala 并发集合

******6. 强大的标准库:******集合框架、字符串处理、IO操作

******7. 与 Java 互操作性:******无缝调用、Java标准库

8. 模块化和可扩展性:特质(Traits)、隐式转换和参数

Scala语言的特点

优雅、速度快是 Scala语言的特点的两大特点

Scala是静态编译的,所以速度会快很多,能融合到Hadoop生态圈:Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。

学习Scala编程语言,为后续学习Spark和Kafka奠定基础

Scala 基础语法

Scala程序

分为交互式编程和脚本形式两种

交互式编程

交互式编程不需要创建脚本文件,可以通过以下命令调用:

脚本形式

我们也可以通过创建一个 HelloWorld.scala 的文件来执行代码,HelloWorld.scala 代码如下所示:

运行结果:

基本语法

  1. 区分大小写
  2. 类名:-对于所有的类名的第一个字母要大写 例:class MyFirstScalaClass
  3. 方法名称:所有的方法名称的第一个字母用小写 例:def myMethodName()
  4. 程序文件名:程序文件的名称应该与对象名称完全匹配,保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加".scala"为文件扩展名。 (如果文件名和对象名称不匹配,程序将无法编译) 例:假设"HelloWorld"是对象的名称。那么该文件应保存为'HelloWorld.scala"
  5. def main(args: ArrayString- Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分

标识符

Scala 可以使用两种形式的标志符,字符数字和符号

字符数字使用字母或是下划线开头,后面可以接字母或是数字,符号"$"在 Scala 中也看作为字母

符号标志符包含一个或多个符号,如+,:,? 等

Scala 内部实现时会使用转义的标志符,比如:-> 使用 colonminus$greater 来表示这个符号

混合标志符由字符数字标志符后面跟着一个或多个符号组成,比如 unary_+ 为 Scala 对+方法的内部实现时的名称。字面量标志符为使用"定义的字符串,比如 `x` `yield`

Scala 关键字

下表列出了 scala 保留关键字,我们不能使用以下关键字作为变量

Scala 注释

Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号

空行和空格

一行中只有空格或者带有注释,Scala 会认为其是空行,会忽略它。标记可以被空格或者注释来分割

换行符

Scala是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的

Scala 包

定义包

Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:

  1. Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中

如:package com.runoobclass HelloWorld

2.些类似 C#,可以在一个文件中定义多个包

如:

package com.runoob {

class HelloWorld }

引用

Scala 使用 import 关键字引用包

import java.awt.Color // 引入Color

import java.awt._ // 引入包内所有成员

def handler(evt: event.ActionEvent) { // java.awt.event.ActionEvent

... // 因为引入了java.awt,所以可以省去前面的部分}

import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性

相关推荐
代龙涛23 分钟前
WordPress Query 查询机制详解(WP_Query)
开发语言·后端·php·wordpress
程序员cxuan31 分钟前
不是,为啥这个模型突然就爆火了??
人工智能·后端·程序员
知守观32 分钟前
技术考古:iBATIS 2.3.4 时代的持久层,是如何用 Map 玩转 307 个存储过程的?
java·后端·mybatis
程序员cxuan38 分钟前
国产 GPU 能不能打,重点在软件栈
人工智能·后端·程序员
znsoft43 分钟前
MaClaw(码卡龙)技术拆解:一个 Go + React 的可自进化智能体平台
开发语言·react.js·golang
the局外人43 分钟前
Python 中使用 SSE 实现大模型流式输出
后端·python·llm
苍何1 小时前
用 WorkBuddy + LibTV 做 AI 视频,干活有点猛啊!(附教程)
后端
苍何1 小时前
我的新书冲上京东热榜第一了!
后端
掘金者阿豪2 小时前
MongoDB迁移到金仓数据库:商品属性继续灵活存,订单报表交给 SQL
前端·后端
zhoujungis2 小时前
限流算法实测:固定窗口 2 倍溢出、令牌桶突刺 | 尘世栈帧
后端