提示:在以下示例中,尝试选择您喜欢的 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
导入可通过多种方式帮助您编写代码:
- 您可以将代码放在多个文件中,以帮助避免混乱,并帮助导航大型项目。
- 您可以使用包含有用功能的代码库,该库可能是由其他人编写
- 您可以知道某个定义的来源(特别是如果它没有写入当前文件)。