Scala基础知识(小白必备)

8 篇文章 1 订阅
4 篇文章 2 订阅

Scala概括

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

Scala 简介

  • Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为:
  • Scala是可扩展语言的缩写,是一种混合功能编程语言。 它由Martin Odersky创建。 Scala顺利整合面向对象和函数式语言的功能。 Scala被编译后在Java虚拟机上运行。 许多现有公司依靠Java进行关键业务应用转向或正在转向Scala,以提高其开发生产力,应用程序可扩展性和整体可靠性。
  • 我们认为最有意义的学习方式是,不要把 Scala 看做是改进的 Java,而是把它作为一门新的语言。所以这里不会介绍 Java 的使用经验,而将集中讲解解释器和“对象-函数式”的风格,以及 Scala 编程风格。特别强调了可维护性,并发,常用工具和利用类型系统的优势。

Scala的特点

首先说一下Scala的一些特点,说明为什么Scala成为应用程序开发人员的首选。

  • 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)变得容易。

//原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接:https://www.yiibai.com/scala/scala_overview.html

Scala和java的比较

1、对字符串的支持

  • scala采用三个双引号“”“支持换行字符串
  • Java需要采用“+”进行字符串的连接。

2、方法返回值

  • scala的return是可选的,方法调用会自动返回最后求值的表达式。如果scala使用了return则需要显示指定方法的返回值
  • Java需要显示的采用return进行值的返回。

3、类和方法修饰符的默认值

  • scala默认是public
  • java默认是protected

4、默认导入的类

  • scala默认导入java.lang包、scala包、scala.Predef类。
  • java默认导入java.lang包

5、接口

  • scala不支持接口interface,采用trait(类似于Java中的抽象类)。
  • java支持接口

6、类成员和单例对象

  • scala语言机制上支持单例对象和伴生对象,伴生类。伴生类和伴生对象需要在一个类文件中使用,在使用伴生对象时,系统隐式地调用apply生成一个伴生实例的对象。
  • java由类成员,单例对象需要自己实现。

7、方法参数

  • scala支持以函数作为参数,格式为deferror(msg:=》String)表示msg是输入参数,输出参数为String的函数。
  • java不支持。

8、变量的声明

  • 变量var 常量val scala支持自动类型推测,scala更多的是采用常量,而不是变量来解决问题,这样带来的好处是可以减少多线程并发安全问题,特别适合用于多并发分布式的场景

9、函数的声明

  • 关键字def, Scala函数没有返回值用Unit,相当于java的void,Scala支持函数式编程,可以使用高阶函数 函数是一等公民

10、基本类型

  • 其实可以认为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的关键词命名:

abstractcasecatchclass
defdoelseextends
falsefinalfinallyfor
forSomeifimplicitimport
lazymatchnewnull
objectoverridepackageprivate
protectedreturnsealedsuper
thisthrowtraittry
truetypevalvar
whilewithyield
-:==>
<-<:<%>:
#@

Scala 数据类型

数据类型描述
Byte8位有符号补码整数。数值区间为 -128 到 127
Short16位有符号补码整数。数值区间为 -32768 到 32767
Int32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float32 位, IEEE 754 标准的单精度浮点数
Double64 位 IEEE 754 标准的双精度浮点数
Char16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String字符序列
Booleantrue或false
Unit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Nullnull 或空引用
NothingNothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。
AnyAny是所有其他类的超类
AnyRefAnyRef类是Scala里所有引用类(reference class)的基类

Scala 转义字符

转义字符Unicode描述
\b\u0008退格(BS) ,将当前位置移到前一列
\t\u0009水平制表(HT) (跳到下一个TAB位置)
\n\u000a换行(LF) ,将当前位置移到下一行开头
\f\u000c换页(FF),将当前位置移到下页开头
\r\u000d回车(CR) ,将当前位置移到本行开头
\"\u0022代表一个双引号(")字符
\'\u0027代表一个单引号(')字符
\\\u005c代表一个反斜线字符 '\'

重点的函数和数组方法会在之后的博客中添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值