読者です 読者をやめる 読者になる 読者になる

Xtend 2.4.3 で識別子に日本語が使えそうです

朗報です!つい最近 Xtend のバージョンが 2.4.3 になりました。
このバージョンアップで、文字列リテラルの変換方法が変わったようです。
2.4.2 までは、以下のように英数字*1以外の文字は、Unicode 表記で.java に出力されていました。

Hoge.xtend

package sample

class Hoge {
  def method() {
    val str = "abcあいうえお"
    println(str)
  }
}

Hoge.java

package sample;

import org.eclipse.xtext.xbase.lib.InputOutput;

@SuppressWarnings("all")
public class Hoge {
  public String method() {
    String _xblockexpression = null;
    {
      final String str = "abc\u3042\u3044\u3046\u3048\u304A";
      String _println = InputOutput.<String>println(str);
      _xblockexpression = (_println);
    }
    return _xblockexpression;
  }
}

2.4.3 からは、以下のようになっています。

Hoge.java

package sample;

import org.eclipse.xtext.xbase.lib.InputOutput;

@SuppressWarnings("all")
public class Hoge {
  public String method() {
    String _xblockexpression = null;
    {
      final String str = "abcあいうえお";
      String _println = InputOutput.<String>println(str);
      _xblockexpression = (_println);
    }
    return _xblockexpression;
  }
}

ってことは、識別子に日本語使えるんじゃね?って事で試してみました。

てすとくらす.xtend

package sample

class てすとくらす {
  def てすとくらす 関数(int 引数1, てすとくらす 引数2) {
    return new てすとくらす()
  }
}

てすとくらす.java

package sample;

@SuppressWarnings("all")
public class てすとくらす {
  public てすとくらす 関数(final int 引数1, final てすとくらす 引数2) {
    てすとくらす _てすとくらす = new てすとくらす();
    return _てすとくらす;
  }
}

いけてますね!2.4.2 までは、識別子の名前も Unicode表記(\u3042 とか)にしようとしてたみたいで、そのせいでコンパイルエラーになっていました。("\" が使えない)なんでかエラーになっていました。

2.4.2 でコンパイルした時のエラー

2.4.3 で文字列の吐き方が変わったので、いけるかなーと試したら案の定いけたのでより便利になりましたね!

*1:たぶん ASCII