On Tue, 2016-01-12 at 21:54 +0000, Afonso wrote: > My thoughs about Vala > ===================== > > I just started coding in Vala, and i found it's a quite fun language > to learn, very simillar to Java and C#. The integration with GLib and > GObject is simply amazing, and the possibilty to generate C code is > also very pleasant. > > As `Vala` is still in a development phase, I would like to suggest > a few features that could help `Vala` reach the next big step. > > > # More functional support > > Altough `Vala` has support for closures, it would be good to hava > even > more functional power. > > For example, `Vala` could ship with a `filter` function that supports > every Gee Collection, something like: > > var books = new TreeSet<Book> (); > books_from_year = books.filter ( (b) => { return year == 1952; });
Gee collections have .filter, but they return a Gee.Iterator > > Other functions could behave the same way, like `map`, `reverse`, > `folds`, `all`, `any`, `or`, `all`, `takeWhile`, `dropWhile` just to > mention a few (i know, i know, Vala != Haskell xD). > > Also, most closures end with a return statement. It would be a lot > cleaner if one could skip the `return` statement, for example: > > var f = (a) => { a == 2; }; // Instead of { return a == 2; } > > It does much more sense in a closure context not to have a return > statement. You can do var f = (a) => a == 2; > Also with mutliple statements closures, `Vala` could behave > a little bit like `Ruby`, and automatically infer what does the > closure returns: > > var f = ( a, b ) => { > a = b - 1; > if ( a > b ) > "ok"; // return "ok"; > else > "not ok"; // return "not ok"; > }; > > > # More syntatic sugar for print > > Whenever `stdout.printf` or `print` are invoked with an object, > automatically use `to_string ()` method (like `Java`). > For example, suppose we have the following class definition: > > public class Book : Object { > public string title { get; set; } > public int year { get; set; } > > public string to_string () { > return "Title: %s, Year: %d".printf(this.title, this.year); > } > } > > It would be nice if we could simply print an object like this: > > void main (string[] args) { > Book b = new Book ("The Old Man and the Sea", 1952); > print (b); // <=> print (b.to_string()); > > /* Output: > >> Title: The Old Man and the Sea, Year: 1952 > */ > } > > > Automatic array printing for basic types (and objects - using > `to_string ()` method), like so: > > void main (string[] args) { > string[] authors = { "George Orwell", "John Steinbeck" }; > int[] years = { 1999, 2000, 2001 }; > > Book b1 = new Book ("The Old Man and the Sea", 1952); > Book b2 = new Book ("The Pearl", 1973); > > Book[] books = { b1, b2 }; > > print (authors); > print (years); > print (books); > > /* Output: > >> ["George Orwell", "John Steinbeck"] > >> [1999, 2000, 2001] > >> [Title: The Old Man and the Sea, Year: 1952, > Title: The Pearl, Year: 1973] > */ > > } Vala will automatically call to_string() in template strings: print (@"$authors\n$years\n); > > Wish you all the best regards > > 3º ano, Mestrado Integrado em Engenharia Informática, > Universidade do Minho > > _______________________________________________ > vala-list mailing list > vala-list@gnome.org > https://mail.gnome.org/mailman/listinfo/vala-list _______________________________________________ vala-list mailing list vala-list@gnome.org https://mail.gnome.org/mailman/listinfo/vala-list