Hello World

  自从《C编程语言》这本书出版以来,很多编程书都以 “Hello,World” 示例开始,按照传统,下面是Scala的一个 “Hello,World” 示例:

object Hello {
    def main(args: Array[String]) = {
        println("Hello, world")
    }
}

用文本编辑器,把上面的代码保存在 Hello.scala 的文件中。保存好后,在命令行提示符下运行 scalac 来编译它:

$ scalac Hello.scala

scalac 就像 javac ,这个命令创建两个新的文件:

  • Hello$.class
  • Hello.class
    javac 创建的 “.class” 字节码文件类型一样,也准备好可以在 JVM 中运行了。
    现在你可以用scala命令来运行Hello 程序:
$ scala Hello

详细的描述

下面是刚才的那段源代码:

object Hello {
    def main(args: Array[String]) = {
        println("Hello, world")
    }
}

下面是关于这段代码的简短描述:

  • 在 Scala 的叫做 Helloobject 里定义了一个 叫做 main 的方法。
  • object 类似于 class ,当你只需要那个类的单一实例时,你可以专门使用它。
    • 如果你是从 Java 来到 Scala, 这里的 main 就像一个 static 方法。
  • main 接收一个名为 args 的输入参数,它是一个字符串数组
  • Array 是包装Java数组原语的类
    Scala代码与Java代码有很大的相似,下面是Java的代码:
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world")
    }
}

深入:Scala创建 .class 文件

就像上面提到的,当我们运行 scalac 命令,它创建 .class JVM 字节码文件。你可以自己看看这个。
例如,对Hello.class文件运行 javap 命令:

$ javap Hello.class
Compiled from "Hello.scala"
public final class Hello {
  public static void main(java.lang.String[]);
}

就像输出显示的,javap 读取的 .class 文件,就像是从Java源代码编译来的。Scala 运行在JVM上,并且可以使用现有的Java库,对Scala程序员来说,二者都是非常好的好处。

Hello,World ---- 第二版

  尽管第一个 “Hello world” 例子运行的很好,Scala 提供了另一种更便利的编写应用程序的方式。
object 可以只继承 App 特质,而不用包含 main 方法,像下面这样:

object Hello2 extends App {
    println("Hello, world")
}

如果你保持到 Hello.scala , 用 scalac 进行编译,然后再用 scala 运行,你会看到跟先前一样的结果。
这是因为 App 特质有它自己的 main 方法,因此你不必再自己写一个。之后我们会为你展示用这种方式时如何获取命令行参数,但是简而言之这很容易:在一个名为 args 的字符串数组里可以获取它们。

我们还没有展示  trait , 但它与Java的抽象类类似。
(更确定的说,它是抽象类和接口的结合--后面会介绍更多!)

进一步的展示

如果你想看看这个对象继承 App 特质后,命令行参数是如何运行的,保存下面的代码在名为 HelloYou.scala 的文件中:

object HelloYou extends App {
    if (args.size == 0)
        println("Hello, you")
    else
        println("Hello, " + args(0))
}

在命令行用 scalac 编译它:

scalac HelloYou.scala

接着分别不带命令行参数和带命令行参数地运行它:

$ scala HelloYou
Hello, you

$ scala HelloYou Al
Hello, Al

可见:

  • 命令行参数可以自动的在名为 args 的变量中获取
  • 你通过 args.size 查看在 args 中的元素的个数。(如果你喜欢,也可以 args.length
  • args 是数组,你可以这样 args(0), args(1) 访问Array 的元素。因为 args 是一个对象,你使用圆括号来访问数组元素(而不是 [ ] ,或任何别的语法)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值