The syntax of Vala is similar to C#, modified to better fit the GObject type system. Vala supports modern language features as the following:

  • OOP (classes, abstract classes, mixin interfaces, type polymorphism)
  • Namespaces
  • Delegates
  • Properties
  • Signals
  • Property change notifications
  • Foreach
  • Lambda expressions / Closures
  • Type inference for local variables
  • Generics
  • Non-null types
  • Assisted memory management (automatic reference counting)
  • Deterministic destructors (suitable for RAII)
  • Exception handling (checked exceptions)
  • Asynchronous methods (coroutines)
  • Preconditions and postconditions (contract programming)
  • Run-time type information
  • Named constructors
  • Verbatim strings and string templates
  • Array and string slicing
  • Conditional compilation
  • Dynamic and static D-Bus support
  • C# like syntax
  • C ABI compatibility
  • Experimental:
    • Chained relational expressions
    • Regular expression literals

Keywords

  • Selection: if, else, switch, case, default

  • Iteration: do, while, for, foreach, in

  • Jumping: break, continue, return

  • Exception Handling: try, catch, finally, throw

  • Synchronization: lock

  • Type Declaration: class, interface, struct, enum, delegate, errordomain

  • Type Modifiers: const, weak, unowned, dynamic

  • Modifiers: abstract, virtual, override, signal, extern, static, async, inline, new

  • Access Modifiers: public, private, protected, internal

  • Method Parameters: out, ref

  • Method Contract Keywords: throws, requires, ensures

  • Namespaces: namespace, using

  • Operator Keywords: as, is, in, new, delete, sizeof, typeof

  • Access Keywords: this, base

  • Literal Keywords: null, true, false

  • Property Context: get, set, construct, default, value

  • Construction Blocks: construct, static construct, class construct

  • Other: void, var, yield, global, owned

Operators

  • Arithmetic: +, -, *, /, %

  • Bitwise: ~, &, |, ^, <<, >>

  • Relational: <, >, <=, >=

  • Equality: ==, !=

  • Logic: !, &&, ||

  • Assignment: =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

  • Increment, Decrement: ++, --

  • Pointer: &, *, ->, delete

  • Conditional: ?:

  • Null-Coalescing: ??

  • String Concatenation: +

  • Method Invocation: ()

  • Member Access: .

  • Index: []

  • Slice: [:]

  • Lambda: =>

  • Casting: (Type), (!), as

  • Type Checking: is

  • Ownership Transfer: (owned)

  • Namespace Alias Qualifier: :: (currently only with global)

  • Other: new, sizeof, typeof, in

Projects/Vala/Syntax (last edited 2013-11-22 16:48:29 by WilliamJonMcCann)