GNOME 3.26 の目玉、gjs が ES6 フル対応になった。
これでで class が使えるぞ、Lang.Class の奇妙なコードとはおさらばじゃ。
んと、その前に。
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/gjs // 'gjs a.js 苗ちゃん' const GLib = imports .gi.GLib; for ( let val of ARGV) { print (val); //let s = decodeURIComponent(escape(val)); //print(s); } |
変わっていないや、まあいいか。
ClutterImage のセットが激遅なのもそのまんまだね。
ClutterImage PyGObject/Gjs | PaePoi
それはそれとして新機能だ。
GtkWindow を作ってみよう、やっぱり GUI だよね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/usr/bin/gjs imports .gi.versions.Gtk = "3.0" ; const Gtk = imports .gi.Gtk; class Test extends Gtk.Window { constructor() { super (); this .connect( "hide" , ()=> { Gtk.main_quit(); }); this .show_all(); } } Gtk.init( null ); let test = new Test(); Gtk.main(); |
これでウインドウを作るだけの最小限コードのようだ。
imports は PyGObject と同様にバージョン指定が無いと警告が出るようになった。
アロー関数を使えば Lang.bind を使わずにあの this の糞仕様を回避できる。
他の説明はいらないよね。
次はコード分割してみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/usr/bin/gjs imports .gi.versions.Gtk = "3.0" ; imports .searchPath.unshift( '.' ); const Gtk = imports .gi.Gtk; const Btn = imports .btn; class Test extends Gtk.Window { constructor() { super (); this .connect( "hide" , ()=> { Gtk.main_quit(); }); this .btn = new Btn.Btn( "睦ちゃん" ); this .add( this .btn); this .show_all(); } } Gtk.init( null ); let test = new Test(); Gtk.main(); |
と
1 2 3 4 5 6 7 8 9 | var Gtk = imports .gi.Gtk; class Btn extends Gtk.Button { constructor(lb) { super ({ label: lb }); } } |
で
えーーーーー
let も const も定義していないお!
Java と違って同一ソースに複数の class が書けるのでこうすればいいけど。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!/usr/bin/gjs imports .gi.versions.Gtk = "3.0" ; const Gtk = imports .gi.Gtk; class Test extends Gtk.Window { constructor() { super (); this .connect( "hide" , ()=> { Gtk.main_quit(); }); this .btn = new Btn( "睦ちゃん" ); this .add( this .btn); this .show_all(); } } class Btn extends Gtk.Button { constructor(lb) { super ({ label: lb }); } } Gtk.init( null ); let test = new Test(); Gtk.main(); |
コードが長くなると…
モジュールとして継承 class は作ってはいけないってことかな?
まだ試したばかりだし他の方法はあるかもしれないけど。
なんか一気にテンションが下がった、PyGObject に戻るかなぁ。。。