summaryrefslogtreecommitdiff
path: root/examples/showcase.zc
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 23:40:49 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 23:40:49 +0000
commitea9534610663a1a52fe248a08eeefa4bf8e5591e (patch)
tree8622626bbd715d48c55fa76d1c3ecfa2342d2f6a /examples/showcase.zc
parent45feb20bf55c16ee415ef31a356ada67e1df18d6 (diff)
Another example.
Diffstat (limited to 'examples/showcase.zc')
-rw-r--r--examples/showcase.zc98
1 files changed, 98 insertions, 0 deletions
diff --git a/examples/showcase.zc b/examples/showcase.zc
new file mode 100644
index 0000000..eca5480
--- /dev/null
+++ b/examples/showcase.zc
@@ -0,0 +1,98 @@
+
+include <stdio.h>
+include <stdlib.h>
+include <time.h>
+
+struct Point {
+ x: int,
+ y: int
+}
+
+enum Event {
+ Quit,
+ Click(Point),
+ KeyPress(char)
+}
+
+trait Drawable {
+ fn draw(self);
+}
+
+struct Button {
+ label: char*,
+ width: int,
+ height: int
+}
+
+impl Button {
+ fn draw(self) {
+ println "[Button: '{self.label}' size={self.width}x{self.height}]";
+ }
+}
+
+struct Container<T> {
+ item: T
+}
+
+impl Container<T> {
+ fn get(self) -> T {
+ return self.item;
+ }
+}
+
+fn run_op(a: int, b: int, op: fn(int, int) -> int) -> int {
+ return op(a, b);
+}
+
+fn process_event(e: Event) {
+ match e {
+ Event::Quit => {
+ println "Event: Quit received. Shutting down...";
+ },
+ Event::Click(p) => {
+ println "Event: Mouse Clicked at ({p.x}, {p.y})";
+ },
+ Event::KeyPress(k) => {
+ println "Event: Key Pressed '{k}'";
+ },
+ _ => {
+ println "Event: Unknown";
+ }
+ }
+}
+
+fn main() {
+ defer { println "End of demo!"; }
+ defer { println "Cleaning up resources..."; }
+
+ println "=> Generics and traits.";
+ var btn = Button {
+ label: "Submit",
+ width: 120,
+ height: 40
+ };
+
+ var container = Container<Button> { item: btn };
+
+ var b = container.get();
+ b.draw();
+ println "";
+
+ println "=> Enums and pattern matching.";
+ var events: Event[4] = [
+ Event::Click(Point { x: 150, y: 300 }),
+ Event::KeyPress('Z'),
+ Event::Click(Point { x: 42, y: 0 }),
+ Event::Quit()
+ ];
+
+ for i in 0..4 {
+ process_event(events[i]);
+ }
+ println "";
+
+ println "=> Lambdas";
+ var sum = run_op(10, 20, (a, b) -> a + b);
+ println "10 + 20 = {sum}";
+ println "";
+}