跳转到内容

Vala 编程/入门/编程风格

来自维基教科书,为开放世界提供开放书籍

Hello World

[编辑 | 编辑源代码]
using GLib;

public class Test.HelloObject : GLib.Object {

    public static void main (string[] args) {

        stdout.printf ("Hello, World");
    }
}
using GLib;

一条 using 行告诉编译器这个文件将引用给定命名空间中的内容,因此允许在不给出完全限定名称的情况下使用它们。GLib 命名空间默认导入,因此此行是可选的。

public class Test.HelloObject : GLib.Object {

此行标识类定义的开始。Vala 中的类在概念上与其他语言非常相似。类本质上是一种对象类型,可以创建其实例,所有实例都具有相同的属性。类的类型的实现由 gobject 库处理,但这些细节对于一般使用并不重要。

需要注意的是,这个类被明确描述为 GLib.Object 的子类。这是因为 Vala 允许其他类型的类,但在大多数情况下,这是你想要的类型。事实上,Vala 的一些语言特性只有在你的类继承自 GLib 的 Object 时才允许。

此行的其他部分展示了命名空间和完全限定名称,但这些将在后面解释。

public static void main (string[] args) {

这是方法定义的开始。方法是与对象类型相关联的函数,可以在该类型的对象上执行。static 方法表示该方法可以在没有特定实例的情况下调用。这个方法被称为 main 并且具有它所具有的签名,这意味着 Vala 会将其识别为程序的入口点。

stdout.printf ("Hello, World");

stdout 是 GLib 命名空间中的一个对象,Vala 确保你在需要时可以访问它。此行指示 Vala 执行 stdout 对象的 printf 方法,并以 hello 字符串作为参数。在 Vala 中,这始终是你用来对对象执行方法或访问对象数据的语法。

最后几行只是结束方法和类的定义。

假设你已安装 Vala,那么编译和执行此程序所需的步骤是

$ valac -o hello hello.vala
$ ./hello

valac 是 Vala 编译器,它会将你的 Vala 代码转换为 C 代码。它还可以自动完成将 C 代码编译成机器代码的整个过程,这就是提供 -o 开关请求的理由。然后可以直接在机器上执行生成的二进制文件。你可能已经猜到输出是什么了。

如果你给 valac 提供 -C 开关,它还会创建两个名为 hello.h 和 hello.c 的文件。如果你查看这些文件的内容,你会发现用 Vala 编程一个类等同于用 C 做同样的事情,但要简洁得多。你还会注意到,这个类是在运行系统中动态定义的。这是 GNOME 平台强大的一个很好的例子,但我之前说过,你不需要了解太多关于它的知识就能使用 Vala。

华夏公益教科书