- Scala Tutorial
- Scala - Home
- Scala - Overview
- Scala - Environment Setup
- Scala - Basic Syntax
- Scala - Data Types
- Scala - Variables
- Scala - Classes & Objects
- Scala - Access Modifiers
- Scala - Operators
- Scala - IF ELSE
- Scala - Loop Statements
- Scala - Functions
- Scala - Closures
- Scala - Strings
- Scala - Arrays
- Scala - Collections
- Scala - Traits
- Scala - Pattern Matching
- Scala - Regular Expressions
- Scala - Exception Handling
- Scala - Extractors
- Scala - Files I/O
- Scala Useful Resources
- Scala - Quick Guide
- Scala - Useful Resources
- Scala - Discussion
Scala - 基本语法
如果你对Java有很好的了解,那么学习Scala就会很容易。Scala 和 Java 之间最大的语法差异是“;” 行结束符是可选的。
当我们考虑 Scala 程序时,它可以被定义为通过调用彼此的方法进行通信的对象的集合。现在让我们简单地了解一下类、对象、方法和实例变量的含义。
对象- 对象具有状态和Behave。对象是类的实例。示例 - 狗有状态 - 颜色、名称、品种以及Behave - 摇摆、吠叫和进食。
类- 类可以定义为描述与类相关的Behave/状态的模板/蓝图。
方法- 方法基本上是一种Behave。一个类可以包含许多方法。在方法中编写逻辑、操作数据并执行所有操作。
字段- 每个对象都有其唯一的一组实例变量,称为字段。对象的状态是由分配给这些字段的值创建的。
闭包-闭包是一个函数,其返回值取决于该函数外部声明的一个或多个变量的值。
Traits - 特征封装了方法和字段定义,然后可以通过将它们混合到类中来重用它们。特征用于通过指定受支持方法的签名来定义对象类型。
第一个 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 提示符右侧输入以下文本,然后按 Enter 键 -
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。这是一个字节码,将使用“ scala ”命令在 Java 虚拟机 (JVM) 上运行。
使用以下命令编译并执行您的 Scala 程序。
\> scalac HelloWorld.scala \> scala HelloWorld
输出
Hello, World!
基本语法
以下是 Scala 编程中的基本语法和编码约定。
区分大小写- Scala 区分大小写,这意味着标识符Hello和hello在 Scala 中具有不同的含义。
类名称- 对于所有类名称,第一个字母应大写。如果使用多个单词来构成类的名称,则每个内部单词的第一个字母应大写。
示例- 类 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 中的保留字。这些保留字不得用作常量、变量或任何其他标识符名称。
抽象的 | 案件 | 抓住 | 班级 |
定义 | 做 | 别的 | 延伸 |
错误的 | 最终的 | 最后 | 为了 |
对于一些 | 如果 | 隐含的 | 进口 |
懒惰的 | 匹配 | 新的 | 无效的 |
目的 | 覆盖 | 包裹 | 私人的 |
受保护的 | 返回 | 密封 | 极好的 |
这 | 扔 | 特征 | 尝试 |
真的 | 类型 | 瓦尔 | 瓦尔 |
尽管 | 和 | 屈服 | |
- | : | = | => |
<- | <: | <% | >: |
# | @ |
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)
斯卡拉包
包是命名的代码模块。例如,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) ,以及对任意字段名称字段进行字段访问 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)