提示:在以下示例中,尝试选择您喜欢的 Scala 版本。
你的第一个 Scala 程序
Scala “Hello, world!” 例子展示如下。 首先,把以下代码写入 Hello.scala:
object hello {
def main(args: Array[String]) = {
println("Hello, World!")
}
}
代码中,在名为
hello
的 Scalaobject
中,我们定义了一个名称为main
的方法。 在 Scala 中object
类似class
,但定义了一个可以传递的单例实例。main
用名为args
的输入参数,该参数必须是Array[String]
类型(暂时忽略args
)。
@main def hello() = println("Hello, World!")
代码中,
hello
是方法。 它使用def
定义,并用@main
注释的手段把它声明为“main”方法。 使用println
方法,它在标准输出 (STDOUT)中打印了"Hello, world!"
字符串。
下一步,用 scalac
编译代码:
$ scalac Hello.scala
如果你是从 Java 转到 Scala,scalac
就像 javac
,所以该命令会创建几个文件:
$ ls -1
hello$.class
hello.class
hello.scala
$ ls -1
hello$package$.class
hello$package.class
hello$package.tasty
hello.scala
hello.class
hello.tasty
与 Java 一样,.class 文件是字节码文件,它们已准备好在 JVM 中运行。
现在您可以使用 scala
命令运行 hello
方法:
$ scala hello
Hello, world!
假设它运行成功,那么恭喜,您刚刚编译并运行了您的第一个 Scala 应用程序。
在 Scala 工具 章节中可以找到 sbt 和其他使 Scala 开发更容易的工具相关的更多信息。
要求用户输入
在下一个示例中,让我们在问候用户之前询问用户名!
有几种方法可以从命令行读取输入,但一种简单的方法是使用
scala.io.StdIn 对象中的 readline
方法。要使用它,您需要先导入它,如下所示:
import scala.io.StdIn.readLine
为了演示其工作原理,让我们创建一个小示例。将此源代码放在名为 helloInteractive.scala 的文件里:
import scala.io.StdIn.readLine
object helloInteractive {
def main(args: Array[String]) = {
println("Please enter your name:")
val name = readLine()
println("Hello, " + name + "!")
}
}
import scala.io.StdIn.readLine
@main def helloInteractive() =
println("Please enter your name:")
val name = readLine()
println("Hello, " + name + "!")
在此代码中,我们将 readLine
的结果保存到一个名为 name
的变量中,然后
使用字符串上的 +
运算符将 “Hello, ”
与 name
和 "!"
连接起来,生成单一字符串值。
您可以通过阅读[变量和数据类型](/zh-cn/scala3/book/taste-vars-data-types.html)来了解有关使用
val
的更多信息。
然后使用 scalac
编译代码:
$ scalac helloInteractive.scala
然后用 scala helloInteractive
运行它,这次程序将在询问您的名字后暂停并等待,
直到您键入一个名称,然后按键盘上的回车键,如下所示:
$ scala helloInteractive
Please enter your name:
▌
当您在提示符下输入您的姓名时,最终的交互应如下所示:
$ scala helloInteractive
Please enter your name:
Alvin Alexander
Hello, Alvin Alexander!
关于导入的说明
正如您在此应用程序中看到的,有时某些方法或我们稍后将看到的其他类型的定义不可用,
除非您使用如下所示的 导入
子句:
import scala.io.StdIn.readLine
导入可通过多种方式帮助您编写代码:
- 您可以将代码放在多个文件中,以帮助避免混乱,并帮助导航大型项目。
- 您可以使用包含有用功能的代码库,该库可能是由其他人编写
- 您可以知道某个定义的来源(特别是如果它没有写入当前文件)。
Contributors to this page:
Contents
- 导言
- Scala 3 特性
- 为什么是 Scala 3 ?
- Scala 的味道
- Hello, World!
- The REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 头等函数
- 单例对象
- 集合
- 上下文抽象
- 顶层定义
- 总结
- 类型初探
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 领域建模
- 函数式领域建模
- 方法
- 方法特性
- main 方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 扩展
- 高阶函数
- 自定义 map 函数
- 创建可以返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数是值
- 函数式错误处理
- 总结
- 类型和类型系统
- 类型推断
- 泛型
- 相交类型
- 联合类型
- 代数数据类型
- 型变
- 不透明类型
- 结构化类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- Given 实例和 Using 语句
- 上下文绑定
- Given 导入
- 实现类型类
- 多元相等性
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- worksheet
- 与 Java 交互
- 向 Java 开发者介绍Scala
- Scala for JavaScript Developers
- Scala for Python Developers
- 下一步去哪