Scala基础语法和简介

Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递。

以下分别是类,对象,方法,实例变量的概念:

·对象 -对象有属性和行为。例如:一只狗的状属性有:颜色,名字,行为有:叫、跑、吃等。对象是一个类的实例。

·类 -类是对象的抽象,而对象是类的具体实例。·方法 -方法描述的基本的行为,一个类可以包含多个方法。

·字段 -每个对象都有它唯一的实例变量集合,即字段。对象的属性通过给字段赋值来创建。

基本语法Scala

基本语法需要注意以下几点:

·区分大小写-Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。

·类名-对于所有的类名的第一个字母要大写。如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。示例:class MyFirstScalaClass

·方法名称-所有的方法名称的第一个字母用小写。如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。示例:def myMethodName()

·程序文件名-程序文件的名称应该与对象名称完全匹配,保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加".scala"为文件扩展名。示例: 假设"HelloWorld"是对象的名称。那么该文件应保存为'HelloWorld.scala"·def main(args: Array[String]-Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。

标识符

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

字符数字使用字母或是下划线开头,后面可以接字母或是数字,符号""在 Scala 中也看作为字母。然而以""开头的标识符为保留的 Scala 编译器产生的标志符使用,应用程序应该避免使用"$"开始的标识符,以免造成冲突。

Scala 的命名规则采用和 Java 类似的 camel 命名规则,首字符小写,比如 toString。类名的首字符还是使用大写。此外也应该避免使用以下划线结尾的标志符以避免冲突。符号标志符包含一个或多个符号,如+,:,? 等

比如:+ ++ ::: < ?> :->Scala 内部实现时会使用转义的标志符,比如:-> 使用 colonminusgreater 来表示这个符号。因此如果你需要在 Java 代码中访问:-\>方法,你需要使用 Scala 的内部名称colonminusgreater。

混合标志符由字符数字标志符后面跟着一个或多个符号组成,比如 unary_+ 为 Scala 对+方法的内部实现时的名称。字面量标志符为使用"定义的字符串,比如 `x` `yield`。你可以在"之间使用任何有效的 Scala 标志符,Scala 将它们解释为一个 Scala 标志符,一个典型的使用为 Thread 的 yield 方法, 在 Scala 中你不能使用 Thread.yield()是因为 yield 为 Scala 中的关键字, 你必须使用 Thread.`yield`()来使用这个方法。

Scala关键字

不能使用以下关键字作为变量

Scala注释

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

空行和空格

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

换行符

Scala是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的。如果你愿意可以输入一个,但若一行里仅 有一个语句也可不写。另一方面,如果一行里写多个语句那么分号是需要的。

Scala 包

定义包

Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:第一种方法和 Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中。

第二种方法,可以在一个文件中定义多个包。引用

Scala 使用 import 关键字引用包。

import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。

Scala 简介

Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。

Scala 特性

面向对象特性

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

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

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

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

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

函数式编程

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

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

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

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

类型系统

静态类型

Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:

泛型类,协变和逆变,标注,类型参数的上下限约束,把类别和抽象类型作为对象成员,复合类型,引用自己时显式指定类型,视图,多态方法

类型推断: 强大的类型推断机制,可以减少代码中的类型声明,提高代码的可读性。

泛型编程: 支持泛型,允许编写更加通用和可复用的代码。

类型系统扩展: 包括协变(covariance)和逆变(contravariance)、特质(traits)混入等。

扩展性

Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构,任何方法可用作前缀或后缀操作符,可以根据预期类型自动构造闭包。

并发性

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

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

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

强大的标准库

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

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

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

与 Java 互操作性

·无缝调用: Scala 可以直接调用 Java 代码,并且可以在 Java 中调用 Scala 代码。

·Java标准库: 可以使用 Java 的标准库和框架,利用其丰富的生态系统。

模块化和可扩展性

·特质(Traits): 可以混入类中,提供类似多重继承的功能,增强代码复用性。

·隐式转换和参数: 支持隐式转换和隐式参数,增强代码的灵活性和可扩展性。

Scala语言的特点

优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。

速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以速度会快很多。

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

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

相关推荐
旋风小飞棍3 天前
如何在sheel中运行spark
大数据·开发语言·scala
rylshe13143 天前
在scala中sparkSQL连接mysql并添加新数据
开发语言·mysql·scala
MZWeiei5 天前
Spark任务调度流程详解
大数据·分布式·spark·scala
бесплатно5 天前
Scala流程控制
开发语言·后端·scala
Bin Watson12 天前
解决 Builroot 系统编译 perl 编译报错问题
开发语言·scala·perl
什么芮.15 天前
大数据应用开发和项目实战(2)
大数据·pytorch·sql·spark·scala
不要天天开心17 天前
Spark-Streaming核心编程:有状态转化操作与DStream输出
scala
欧先生^_^18 天前
Scala语法基础
开发语言·后端·scala
不要天天开心19 天前
大数据利器:Kafka与Spark的深度探索
spark·scala
不要天天开心20 天前
Kafka与Spark-Streaming:大数据处理的黄金搭档
kafka·scala