Scala

Scala简介

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

Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。

Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。

Scala 特性

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

·类和对象 : Scala 支持类和对象,可以定义属性和方法。

·继承和多态 : 支持类的继承和多态,可以创建层次结构和重用代码。

·抽象类和特质 : 可以定义抽象类和特质(traits),用于定义接口和实现部分行为。

·封装 : 支持访问控制修饰符(public、protected、private),实现数据的封装。

  1. 函数式编程:

· 高阶函数 : 函数可以作为参数传递给另一个函数,或者从另一个函数返回。

·不可变性 : 默认使用不可变数据结构,有助于避免副作用,提高代码的并发安全性。

·模式匹配 : 提供强大的模式匹配功能,可以解构复杂数据结构,进行条件判断。

·闭包 : 支持闭包,可以捕获并记住其创建时的变量。

  1. 类型系统:

Scala 是静态类型语言,编译的时候就能检查类型,保证代码安全和一致。它支持泛型类、协变逆变等很多特性,还有强大的类型推断机制,写代码时不用总写类型,代码看着更简洁;同时也支持泛型编程,能写出更通用、可复用的代码。

  1. 扩展性:

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

·任何方法可用作前缀或后缀操作符

·可以根据预期类型自动构造闭包。

  1. 并发性:

·Akka 框架 : 基于 Actor 模型,用于构建并发、分布式和容错的应用程序。

·Futures Promises : 提供异步编程的抽象,简化并发任务的管理。

·Scala 并发集合 : 提供线程安全的数据结构,方便并发编程。

  1. 强大的标准库:

·集合框架 : 提供丰富的不可变和可变集合类,如List、Set、Map等。

·字符串处理 : 提供强大的字符串操作和正则表达式支持。

·IO 操作 : 支持文件和网络IO操作。

  1. 与Java互操作性

Scala 和 Java 能互相调用代码,Scala 还能使用 Java 的标准库和框架,利用 Java 丰富的生态系统。

  1. 模块化和可扩展性:

特质(Traits)可以混入类中,实现类似多重继承的功能,提高代码复用性;隐式转换和参数能让代码更灵活、可扩展。

Scala 的语言优势

Scala 的 API 设计得很优雅,用起来体验好;它表达能力强,一行代码能顶 Java 好几行,开发速度快,而且是静态编译的,运行速度也快;它能很好地融入 Hadoop 生态圈,在大数据开发方面有优势。学习 Scala 对后续学习 Spark 和 Kafka 有帮助。

Scala 基础语法

  1. 基本概念:Scala 程序由对象组成,对象间通过调用方法实现消息传递。对象具有属性和行为,是类的具体实例;类是对象的抽象;方法描述对象行为;字段是对象特有的实例变量集合,用于表示对象属性。
  2. 程序编写方式
    • 交互式编程:无需创建脚本文件,在命令行输入 "scala" 进入交互环境,输入表达式即可求值,能即时看到结果,像输入 "1+1" 会得到 "2" ,输入 "println ("Hello World!")" 会输出 "Hello World!"。
    • 脚本形式:创建以.scala 为扩展名的文件,如 "HelloWorld.scala",编写代码后,通过右键选择 "运行" 来执行程序。
  3. 基本语法规则
    • 大小写敏感:Scala 中,"Hello" 和 "hello" 代表不同含义。
    • 命名规范:类名首字母大写,若由多个单词构成,每个单词首字母都大写;方法名首字母小写,多个单词构成时从第二个单词起首字母大写;程序文件名建议与对象名完全匹配,并以.scala 为扩展名。
    • 程序入口:Scala 程序从 "def main (args: Array [String])" 方法开始执行,这是程序运行的起始点。
  4. 标识符:Scala 的标识符分为字符数字和符号两类。字符数字标识符以字母或下划线开头,可包含字母、数字和 "\(",但避免使用"\)" 开头的标识符;符号标识符由一个或多个符号组成,如 "+"":" 等;还有混合标识符和字面量标识符。在 Java 代码中访问 Scala 的符号方法时,需使用 Scala 内部的转义名称。
  5. 关键字:Scala 有一系列保留关键字,如 "abstract""case""def" 等,不能将它们用作变量名。
  6. 注释 :和 Java 类似,Scala 支持单行注释(以 "//" 开头)和多行注释(以 "/" 开始, "/" 结束),多行注释可嵌套,但要注意正确配对,注释内容在编译时会被忽略。
  7. 空行和空格:仅包含空格或注释的行被视为空行,会被 Scala 忽略;标记可由空格或注释分隔。
  8. 换行符:Scala 语句可以用分号结束,也可以用换行符结束,通常语句末尾的分号是可选的,但一行写多个语句时需要用分号分隔。
  9. 包的使用
    • 定义包:有两种方式,一种和 Java 一样,在文件开头用 "package" 关键字定义包名,该文件后续代码都属于这个包;另一种类似 C#,用大括号将类等代码包裹在包定义内,可在一个文件中定义多个包。
    • 引用包:使用 "import" 关键字,可引入指定类或整个包的成员,"import" 语句的作用范围从其出现位置到所在语句块结束,可有效减少名称冲突。
相关推荐
渣渣盟1 天前
Flink Table API与SQL流数据处理实战
大数据·sql·flink·scala
howard20054 天前
1.5 掌握Scala内建控制结构
scala·内建控制结构
howard20054 天前
1.1.2 Windows上安装Scala
scala·windows版本
allway25 天前
Debian Regular Expressions
运维·debian·scala
、BeYourself7 天前
Scala 字面量
开发语言·后端·scala
、BeYourself15 天前
Scala 数据类型
开发语言·后端·scala
howard200515 天前
1.2 Scala变量与数据类型
scala·变量·数据类型·常量
渣渣盟15 天前
Flink定时器实战:处理时间与事件时间
大数据·flink·scala