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的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性

相关推荐
llz_1126 小时前
web-第二次课后作业
前端·后端·web
红尘散仙12 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记13 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
isyangli_blog13 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb20081113 小时前
FastAPI APIRouter
开发语言·python
Benszen14 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆14 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木14 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
喵个咪14 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
杨充14 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法