Scala基础入门

本文是Scala编程语言的基础介绍,包括Scala的概述、在Linux下的安装配置步骤以及基础使用。Scala是一门结合了面向对象和函数式编程的静态类型语言,运行在JVM上,可以无缝对接Java代码。文章还介绍了Scala的REPL、变量声明、常用类型、操作符重载、函数和方法的调用,以及Scaladoc的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、scala概述

scala是一门多范式的编程语言,设计初衷是实现可伸缩的语言,并集成面向对象编程和函数式编程的各种特性。

Scala是可扩展语言的缩写,是一种混合功能编程语言。

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

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

  • Scala是面向对象语言
    Scala是一种纯粹的面向对象语言,每一个值都是一个对象。 对象的类型和行为由类和特征描述
    类通过子类化和基于灵活的基于混合组合机制进行扩展,作为多重继承的干净替代。

  • Scala是函数式编程语言
    Scala也是一种函数式语言,每个函数都是一个值,每个值都是一个对象,所以每个函数都是一个对象。
    Scala提供了一个轻量级的语法来定义匿名函数,它支持高阶函数,它允许函数嵌套,并支持currying

  • Scala是静态类型的
    Scala与其他静态类型语言(C,Pascal,Rust等)不同,它不提供冗余类型的信息。 在大多数情况下,不需要指定类型,减少了不必要的重复。

  • Scala运行在JVM上
    Scala代码被编译成由Java虚拟机(JVM)执行的Java字节代码,这意味着Scala和Java具有通用的运行时平台。因此,可以轻松地从Java迁移到Scala。
    Scala编译器将Scala代码编译成Java字节代码,然后可以通过scala命令执行scala命令类似于java命令,因为它执行编译Scala代码。

  • Scala可以执行Java代码
    Scala能够使用Java SDK的所有类以及自定义Java类,或java开源项目。

  • Scala可以做并发和同步处理
    Scala允许以有效的方式表达一般的编程模式。减少了线路数量,并帮助程序员以类型安全的方式进行编码。允许以不变的方式编写代码,使得应用并发和并行性(Synchronize)变得容易。

2、Linux下scala\spark的安装配置

scala、spark的安装配置可参照以下博客:

https://blog.youkuaiyun.com/Candriy/article/details/82389973

3、scala使用

scala可做工业级的编写计算器使用

1、启动scala解释器:

解释器显示出结果及其类型,结果被命名为res0,在后续操作中可直接使用res0

由此可见,上面的过程:读取-->求值-->打印-->循环,即repl

从技术上讲,scala程序并不是一个解释器。实际上是:输入的内容被编译成字节码,然后交由java虚拟机执行。

2、声明变量和值

除了直接使用res0、res1之外,也可以自定义名称:

val定义的值是一个常量,若要声明其值可变的变量用var

如非必须改变其值,个人推荐使用val定义

无需给出值或者变量类型,会根据表达式初始化推断出来。在必要的时候也可指定类型。

说明:

在scala中,变量或函数的类型总是写在变量或函数名称之后,注意与java区分:

java方式:String greeting

scala方式:greeting:String

在scala中,仅当同一行代码中存在多条语句时才需要用分号;分隔开。

可同时声明多个值:

3、常用类型

数值类型:Byte、Char、Short、Int、Long、Float、Double;Boolean类型

跟java不同,这些类型都属于类

在scala中,不需要包装类型。scala编译器会自动完成基本类型和包装类型之间的转换。

scala用底层的java.lang.String类来表示字符串,不过其通过StringOps类给字符串追加了很多操作。

如下:intersect方法输出两个字符串共通的一组字符:在该表达式中,java.lang.String对象“hello”被隐式地转换成一个StringOps对象,接着StringOps类的intersect方法被调用。

同样,scala还提供了RichInt、RichDouble、RichChar等,分别提供Int、Double、Char等所不具备的便捷方法。

还具有BigInt和BigDecimal类,用于任意大小(但有穷)的数字。

说明:在scala中,用方法,而不用强制类型转换,来做数值之间的转换。

4、算术和操作符重载

操作符实际上是方法:eg:a+b   是 a.+(b)的简写,此处+是方法名。

也就是说,a 方法 b 可简写为  a.方法(b),该方法表示一个带有两个参数的方法(一个隐式的和一个显示的)。

在scala中,可使用几乎任何字符给方法命名。

scala没有++和--操作符,因为Int类是不可变的,这样的方法并不能改变某个整数类型的值。而是需要使用+=1或-=1;

 java中,不能对操作符进行重载

scala允许定义操作符,可自己确定是否要在必要时有分寸的使用这个特性。

5、调用函数和方法

scala提供函数,相比java,无需从某个类调用其静态方法

在scala中,导入通配符是"_",类似于java中的*

说明:使用scala.开头的包时,可省去scala前缀。即import 包名._即可。

scala没有静态方法,有一类似特性-->单例对象(singleton object),后续将详细介绍。

通常,一个类对应一个伴生对象(companion object),其方法跟java中的静态方法一样。

不带参数的scala方法通常不使用圆括号。例如:

一般来讲,没有参数且不改变当前对象的方法不带圆括号。

6、apply方法

以上表示:该字符串的第四个字符

使用伴生对象的apply方法时scala中构建对象的常用方法。

以下语句产生一个新的BigInt对象,而不需要使用new

7、Scaladoc

类似于javadoc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值