From 25eb3c82dc3b7c3e8776d6bc800d123f42610349 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Mon, 17 Feb 2014 18:27:45 +0400 Subject: [PATCH] 4JavaProgrammers.vala added --- vala/4JavaProgrammers/4JavaProgrammers.vala | 275 ++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 vala/4JavaProgrammers/4JavaProgrammers.vala diff --git a/vala/4JavaProgrammers/4JavaProgrammers.vala b/vala/4JavaProgrammers/4JavaProgrammers.vala new file mode 100644 index 0000000..8133c13 --- /dev/null +++ b/vala/4JavaProgrammers/4JavaProgrammers.vala @@ -0,0 +1,275 @@ +using Gee; + +public interface Clone { + public abstract Object clone (); +} + +public class Demo : Object, Clone { + public Demo () { + print ("Default Constructor called\n"); + Demo.with_string ("DefaultB"); + } + public Demo.with_string (string _s) { + print ("Constructor.with_string() called\n"); + s = _s; + } + + public string s { get; set; default = "DefaultA"; } + + public virtual void draw () { + print ("Demo::draw()\n"); + } + + public Object clone () { + var d = new Demo (); + d.s = this.s; + return d; + } +} + +public interface Foo : Object { + public abstract void foo (int i); +} + +public class DemoChild : Demo, Foo { + public override void draw () { + base.draw(); + print ("DemoChild::draw()\n"); + } + public void foo (int i) { + } +} + +enum Machine { + CAR, + BYCICLE, + LEGS; + + public bool is_fast () { + return this == CAR; + } +} + +public class MyHashMap : HashMap , Clone { + public Object clone () { + var h = new MyHashMap (); + + foreach (var i in this.entries) { + h[i.key] = i.value; + } + + return h; + } +} + +public class Car : Object { + public int color { get; set; default = 0; } + + [CCode (notify = false)] + public int color_without_notification { get; set; default = 0; } +} + +delegate void MyDelegateType (int a, double b); + +void f (MyDelegateType deleg) { + deleg (32, 0.25); +} + +/* Signals */ +public class MyButton : Object { + public signal void clicked (); + + public void test () { + print ("MyButton::test () called - calls clicked()\n"); + clicked (); + } +} + +void handler_c (MyButton source) { + print ("Handler for MyButton called\n"); +} + +errordomain CarError { + BROKEN_WHEEL, + ENGINE_WEDGE +} + +void method () throws CarError { + throw new CarError.ENGINE_WEDGE ("Engine is broken!"); +} + +void init_a (ref int a) { +} + +void my_method (int a, out int b, ref int c) { + b = 3; +} + +void my_null_method (Object? a, Object b) { } + +int method_with_preconditions (double d, int i, Object obj) + requires (d >= 0.0 && d <= 1.0) + requires (i >= 0 && i <= 10) + ensures (result >= 0) { + return i * i; +} + +/* Plane vs Struct */ +class Plane { + public double speed; + public int weight; + + public Plane (double speed, int weight) { + this.speed = speed; + this.weight = weight; + } + + public void print () { + stdout.printf ("(%g, %d)", this.speed, this.weight); + } +} + +struct Plane_s { + public double speed; + public int weight; + + public Plane_s (double speed, int weight) { + this.speed = speed; + this.weight = weight; + } + + public void print () { + stdout.printf ("(%g, %d)", this.speed, this.weight); + } +} + +/* Static Construct */ +public class FooWithStaticConstruct { + static construct { + stdout.printf ("FooWithStaticConstruct: Static constructor invoked\n"); + } +} + +public class FooWithStaticConstructChild { + static construct { + stdout.printf ("FooWithStaticConstructChild: Static constructor invoked\n"); + } +} + +void main () { + var d1 = new DemoChild (); + print (d1.s + "\n"); + d1.draw(); + + print ((d1 is DemoChild).to_string() + "\n"); + + Demo d2 = d1.clone() as Demo; + print ((d2 is DemoChild).to_string() + "\n"); + + d1.s = "d1"; + d2.s = "d2"; + + print (d2.s + "\n"); + + d2.s = "d2 updated"; + + print (d1.s + "\n"); + print (d2.s + "\n"); + + print ("--- HashMap ---\n"); + var h1 = new MyHashMap (); + var h2 = h1.clone () as MyHashMap; + + h1["aaa"] = 3; + h2["bbb"] = 4; + + foreach (var h in h1.keys) { + stdout.printf ("%s", h + "\n"); + } + + foreach (var h in h2.keys) { + stdout.printf ("%s", h + "\n"); + } + + foreach (var h in h2.entries) { + stdout.printf ("%s", "--- " + h.get_type ().name () + " ---\n"); + } + + stdout.printf ("%s", "--- " + h2.get_type ().name () + " ---\n"); + + var car = new Car (); + car.notify.connect ((s, p) => stdout.printf ("Property `%s` changed\n", + p.name)); + car.notify["color"].connect ((s, p) => stdout.printf ("Property `%s` changed\n", + p.name)); + car.color = 5; + + MyDelegateType deleg = (a, b) => { + stdout.printf ("a = %d; b = %g\n", a, b); + }; + + deleg (42, 0.75); + + f (deleg); + + print ("--- Signals ---\n"); + var b = new MyButton (); + b.clicked.connect ((s) => print ("Unnamed handler A\n")); + b.clicked.connect ((s) => { + print ("Unnamed handler B\n"); + }); + + b.clicked.connect (handler_c); + b.test (); + b.clicked.disconnect (handler_c); + + print ("--- Exceptions ---\n"); + try { + method (); + } catch (CarError e) { + stderr.printf ("Error: %s\n", e.message); + } + + print ("--- Out and Ref Variables ---\n"); + int a1, b1, c1 = 5; + my_method (a1 = 5, out b1, ref c1); + + print ("--- Nullability ---\n"); + my_null_method (null, new Object ()); + string? a = "hello"; + string a2 = (!) a; + + print ("--- {Pre,Post}conditions ---\n"); + method_with_preconditions (1, 0, new Object ()); + + print ("--- Class vs Struct ---\n"); + var p1 = new Plane (23.23, 293); + var p2 = p1; + print ("Class: "); + p1.print (); + p2.print (); + print (" -> "); + p2.speed = 777; + p1.print (); + p2.print (); + stdout.printf (" p1 == p2 ? %s", (p1 == p2).to_string ()); + print ("\n"); + + var p1_s = Plane_s (23.23, 293); + var p2_s = p1_s; + print ("Struct: "); + p1_s.print (); + p2_s.print (); + print (" -> "); + p2_s.speed = 777; + p1_s.print (); + p2_s.print (); + stdout.printf (" p1_s == p2_s ? %s", (p1_s == p2_s).to_string ()); + print ("\n"); + + print ("--- Static Construct ---\n"); + var foo_construct = new FooWithStaticConstruct (); + var foo_construct2 = new FooWithStaticConstruct (); + var foo_construct_child = new FooWithStaticConstructChild (); + var foo_construct_child2 = new FooWithStaticConstructChild (); +}