Scala学习笔记1:基础

简介

1- Scala 特性

面向对象特性

Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。

类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。

函数式编程

Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。

更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。

静态类型

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

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

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

  • 任何方法可用作前缀或后缀操作符
  • 可以根据预期类型自动构造闭包。
并发性

Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。

2- 基本语法

区分大小写
  • Scala是大小写敏感的, 这意味着标识Hello 和 hello在Scala中会有不同的含义
类名
  • 对于所有的类名的第一个字母要大写
  • 如果使用几个单词来构成一个类的名称, 每个单词的第一个字母要大写
  • 示例: class MyScalaClass
方法名称
  • 所有的方法名称的第一个字母用小写
  • 如果若干单词被用于构成方法的名称, 则每个单词的第一个字母要大写(第一个小写)
  • 示例: def myMethod()
程序文件名
  • 程序文件的名称应该域对象名称完全匹配(新版本不需要了, 建议保留这个习惯)
  • 保存文件时, 应该保存它使用的对象名称(区分大小写), 并追加".scala"为文件扩展名. (如果文件名和对象名称不匹配, 程序将无法编译).
  • 示例: 假设"HelloWorld"是对象名称, 那么该文件应保存为"HelloWorld.scala"
main()方法
  • def main(args:Array[String]) - Scala 程序从main()方法开始处理, 这是每一个Scala程序的强制程序入口部分.

第一章 基础

1- 常用类型

Scala中常用类型如下:

  • Byte
  • Char
  • Short
  • Int
  • Long
  • FLOAT
  • Double
  • Booean

这些类型都是类, 所以在Scala中不需要包装类型, 在基本类型和包装类型之间的转换工作是 Scala编译的事.

除此之外, 还有 NULL 类型, 代指NULL 或者空引号.

Nothing 是所有其它类型的子类型, 包括空值.

Any是其它类型的父类型, AnyRef 是其它引用类型的父类型.

在Scala中, 我们使用方法而不是强制类型转换, 来做数值类型之间的转换. 例如:

println(5.13.toInt) // 5
println(101.toChar) // e
println("2024".toInt - 24) // 2000

和Java一样, toString 将任意对象转换成字符串, 要将包含了数字的字符串转换成数字, 使用 toInt 或者 toDouble .

2- 算术和操作符重载

和java相比, Scala并没有提供 ++ 和 – 操作符, 我们需要使用 +=1 或者 -=1

对于常规的 BigInt 和 BigDecimal 对象, 我们可以使用常规的方法使用那些数学操作符 :

    var a = 10
    val b = a * a * a
    println(a) // 10
    println(b) // 1000
    a += 2
    println(a) // 12
    a -= 2
    println(a) // 10

3- 调用函数和方法

相比java, 在Scala中使用数学函数更简单, 我们不需要从某个类的调用它的静态方法.

import scala.math._
	println(sqrt(9)) // 3.0
    println(pow(2,4)) // 16.0

在使用以Scala开头的包时, 我们可以省略Scala的前缀. 例如 急迫有import math._ 等价于 import scala.math._ ;

Scala中没有静态方法, 但是提供了单例对象.

不带参数的方法通常不使用圆括号, 一般来讲, 没有参数并不改变当前对象的方法都不带圆括号.

Scala中语序使用数字 ‘*’ 字符串, 从而实现复制字符串的功能.

4- apply方法

在Scala中, 我们通常使用类似函数调用的语法. 例如:

    println("Hello"(4))   // o

你可以将这种用法当作 () 操作符的重载形势, 它背后原理是现实一个名为 apply 的方法.

所以"Hello"(4) 相当于一下代码:

    println("Hello".apply(4)) // o
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值