Scala 基本语法

Scala 基本语法

如果你对Java有很好的理解,那么学习Scala将会非常容易。Scala和Java之间最大的语法区别是分号 ‘;’ 可选。

当我们考虑一个Scala程序时,它可以被定义为通过调用彼此的方法来相互通信的对象集合。现在让我们简要地了解一下类、对象、方法和实例变量的含义。

  • 对象 - 对象具有状态和行为。对象是类的一个实例。例如 – 一只狗具有状态 – 颜色、名字、品种以及行为 – 摇尾巴、叫喊和吃东西。

  • - 类可以被定义为描述与类相关的行为/状态的模板/蓝图。

  • 方法 - 方法基本上是行为。一个类可以包含多个方法。在方法中编写逻辑,操作数据并执行所有操作。

  • 字段 - 每个对象都有其独特的一组实例变量,称为字段。对象的状态是由分配给这些字段的值创建的。

  • 闭包 - 闭包是一个函数,其返回值取决于在此函数之外声明的一个或多个变量的值。

  • 特质 - 特质封装了方法和字段的定义,然后可以通过将它们混入类中来重用它们。特质用于通过指定受支持方法的签名来定义对象类型。

第一个Scala程序

我们可以以两种模式执行Scala程序:一种是 交互模式 ,另一种是 脚本模式

交互模式

打开命令提示符,使用以下命令打开Scala

>scala

如果Scala已安装在您的系统中,则会显示以下输出−

Welcome to Scala version 2.9.0.1
Type in expressions to have them evaluated.
Type :help for more information.

将以下文本键入到Scala提示符的右侧,并按下回车键 −

scala> println("Hello, Scala!");

它将产生以下结果:

Hello, Scala!

脚本模式

使用以下说明在脚本模式下编写Scala程序。打开记事本并将以下代码添加到其中。

示例

object HelloWorld {
   /* This is my first java program.  
   * This will print 'Hello World' as the output
   */
   def main(args: Array[String]) {
      println("Hello, world!") // prints Hello World
   }
}

保存文件为 − HelloWorld.scala.

打开命令提示窗口并进入保存程序文件的目录。使用“ scalac ”命令编译Scala程序,它将在当前目录生成一些类文件。其中一个将被命名为 HelloWorld.class 。这是一个将在Java虚拟机(JVM)上使用“ scala ”命令运行的字节码。

使用以下命令编译和执行您的Scala程序。

> scalac HelloWorld.scala
\> scala HelloWorld

输出

Hello, World!

基本语法

以下是Scala编程中的基本语法和编码约定。

  • 大小写敏感 - Scala是大小写敏感的,这意味着标识符 Hellohello 在Scala中具有不同的含义。

  • 类名 - 所有类名的第一个字母应为大写。如果多个单词用于形成类名,则每个内部单词的第一个字母应为大写。

    示例 - class MyFirstScalaClass。

  • 方法名 - 所有方法名都应以小写字母开头。如果使用多个单词来命名方法,则每个内部单词的第一个字母应为大写。

    示例 - def myMethodName()

  • 程序文件名 - 程序文件名应与对象名完全匹配。保存文件时,应使用对象名保存文件(请记住Scala是大小写敏感的),并在名称末尾添加“.scala”(如果文件名和对象名不匹配,您的程序将无法编译)。

    示例 - 假设’HelloWorld’是对象名。那么文件应该保存为’HelloWorld.scala’。

  • def main(args: Array[String]) - Scala程序的处理从main()方法开始,这是每个Scala程序的必要部分。

Scala标识符

所有Scala组件都需要名称。用于对象、类、变量和方法的名称称为标识符。关键字不能用作标识符,并且标识符区分大小写。Scala支持四种类型的标识符。

字母数字标识符

字母数字标识符以字母或下划线开头,后面可以跟随更多的字母、数字或下划线。在Scala中,$字符是一个保留关键字,不应在标识符中使用。

以下是 合法的字母数字标识符

age, salary, _value,  __1_value

以下是 非法标识符

$salary, 123abc, -salary

运算符标识符

运算符标识符由一个或多个运算符字符组成。 运算符字符是可打印的ASCII字符,例如+, :, ?, ~#

以下是合法的运算符标识符 –

+ ++ ::: <?> :>

Scala编译器会在内部将操作符标识符进行”混合”处理,将它们转换为具有嵌入$字符的合法Java标识符。例如,标识符:->在内部表示为$colon$minus$greater

混合标识符

混合标识符由一个字母数字标识符组成,后面跟着下划线和一个操作符标识符。
以下是合法的混合标识符:

unary_+,  myvar_=

在这里,unary_+被用作方法名来定义一个一元+运算符,而myvar_=被用作方法名来定义一个赋值运算符(运算符重载)。

字面标识符

字面标识符是一串用反引号(` . . .`)括起来的任意字符串。

以下是合法的字面标识符:

`x` `<clinit>` `yield`

Scala关键字

以下列表显示了Scala中的保留字。这些保留字不能用作常量、变量或其他标识符名称。

abstract case catch class
def do else extends
false final finally for
forSome if implicit import
lazy match new Null
object override package private
protected return sealed super
this throw trait Try
true type val Var
while with yield
- : = =>
<- <: <% >:
# @

Scala中的注释

Scala支持与Java非常相似的单行注释和多行注释。多行注释可以嵌套,但需要正确嵌套。所有在注释中的字符都会被Scala编译器忽略。

object HelloWorld {
   /* This is my first java program.  
    * This will print 'Hello World' as the output
    * This is an example of multi-line comments.
    */
   def main(args: Array[String]) {
      // Prints Hello World
      // This is also an example of single line comment.
      println("Hello, world!") 
   }
}

空行和空白字符

只包含空白字符(可能带有注释)的行被称为空行,在Scala中完全忽略它们。标记可以用空白字符和/或注释分隔。

换行符

Scala是一种以行为基础的语言,语句可以由分号(;)或换行符终止。语句末尾的分号通常是可选的。如果语句单独出现在一行上,可以输入一个分号,但不是必须的。另一方面,如果在一行上编写多个语句,就需要分号。以下语法是多个语句的用法。

val s = "hello"; println(s)

Scala包

包是一组命名的代码模块。例如,Lift实用程序包是net.liftweb.util。包声明是源文件中第一个非注释行,形式如下:

package com.liftcode.stuff

Scala包可以被导入,以便在当前编译范围内引用。以下语句导入了scala.xml包的内容 −

import scala.xml._

您可以从scala.collection.mutable包中导入一个单独的类和对象,例如HashMap。

import scala.collection.mutable.HashMap

您可以从单个包中导入多个类或对象,例如,从scala.collection.immutable包导入TreeMap和TreeSet:

import scala.collection.immutable.{TreeMap, TreeSet}

应用动态

這是一個標記特性,可以啟用動態呼叫。該特性的實例 x 允許對任意方法名 meth 和參數列表 args 進行方法調用 x.meth(args),以及對任意字段名 field 進行字段訪問x.field。該功能在Scala-2.10中引入。

如果 x 不原生支持調用(即如果類型檢查失敗),則按照以下規則重寫調用 −

foo.method("blah") ~~> foo.applyDynamic("method")("blah")
foo.method(x = "blah") ~~> foo.applyDynamicNamed("method")(("x", "blah"))
foo.method(x = 1, 2) ~~> foo.applyDynamicNamed("method")(("x", 1), ("", 2))
foo.field ~~> foo.selectDynamic("field")
foo.varia = 10 ~~> foo.updateDynamic("varia")(10)
foo.arr(10) = 13 ~~> foo.selectDynamic("arr").update(10, 13)
foo.arr(10) ~~> foo.applyDynamic("arr")(10)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程