1. Function parameters: sum :: (a: int, b: int) int { return a + b; } foo :: () { x := sum(1, 2); } 2. Multideclarations: a, b := 1, 2; /* Multiple assignment */ r, g, b, a: u8; /* Type cascading */ x, y, z: i8 = …; /* Multiple undefined assignment */ 3. Strings and arrays: hello_utf8 := "Hello World"; hello_utf16: u16 = "Hello, World"; hello_utf32: u32 = "Hello, World"; X :: 3; xs := […]int{1, 2, 3}; /* Implicit length */ ys := [X]int{1, 2, 3}; /* Explicit length */ /* Assign specific indicies */ zs := […]int{ [2] = 123, [4] = 321, }; 4. Conditionals: if x > y { … } else if y < x { … } else { … } /* Shortform */ if x > y foo(); /* Bad style! */ if x > y foo(); 5. Switch statements if x == { case 0; … case 1; … fallthrough; /* Explicit fallthrough; implicit break */ case 2; … default; … } 6. Loops loop { … } /* Infinite loop */ /* Shorthand syntax */ loop foo(); loop x > y … /* While loop */ loop x: xs … /* Range/for loop */ loop i: N…M … /* Loop i from N to M (integers) */ /* Break- and continue a loop iteration */ loop x > y { if x == 42 break; if x & 1 == 1 continue; … } /* Labeled break/continue */ outer :: loop { loop x > y { if x == 42 break outer; } } 7. Multiple return values from functions swap :: (x, y: int) int, int { return y, x; } x, y := 1, 2; x, y = swap(x, y); /* Note that this is a function that returns a function! The returned function is one that takes an int and returns nothing */ foo :: () (int) { … } 8. Default parameters foo :: (x, y: int, flags: Flags = 0) { … } 9. Variadic parameters foo :: (xs: …int) { for x: xs { … } foo(xs…); } 10. Structure types City :: struct { name, country: []u8; population: int; european := false; } växjö := City{"Växjö", "Sweden", 40'000, true}; são_paulo := City{ name = "São Paulo", country = "Brazil", population = 12.33e6, }; 11. Enumerations Animal :: enum u8 { BEAR; /* 0 */ CAT; /* 1 */ DOG = 42; SNAKE; /* 43 */ } FileFlag :: flag_enum u8 { READ; /* 0x01 */ WRITE; /* 0x02 */ TRUNC; /* 0x04 */ EXEC = 0b0100'0000; /* 0x40 */ CLOEXEC; /* 0x80 */ RDWR = .READ | .WRITE; /* 0x3 */ }