Javaで動くというCeylonっていうプログラミング言語を試してみた。
なんか2011年にはコンパイラは公開されていて、言語仕様とかもう知っている人は知っている存在だったみたいだね。
僕は今日はてブで知った。
ことは急げ!
まだ多くの人が知らないうちにちょびっと使えるようになっていると、そのうちメジャーになった時に
「知ってたわー。Ceylon二年前から使っているわー」みたいなことができるから今のうちに詳しくなっておこう!
ダウンロード
Ceylonでググれば公式サイトがあるからそこでダウンロードできる。
Debian系やRPM系のパッケージがダウンロードできるぞ。
でも僕はArchLinuxなので、ZIPで圧縮された素のやつをそのまま使うしかなかった。
一応AURで検索してみたら、有ったのは有ったんだけれども0.6というベータ版だった(今は1.0.0!まさに最近始まったばかり)
最新の物を使いたいから、ZIPファイルをDLして解答して
/usr/local/shareにフォルダごとおいて、実行ファイルのシンボリックリンクを/usr/local/binに置いて使うことにした。
$ceylon –version
と実行するとちゃんと1.0.0と表示されることを確認!
Javaの実行環境が整っていることが前提。
どんな言語だ?
Javaで動く言語
レッドハット社が作ってる。
Javaはジャワ産のコーヒーなどの意味があるけれど、ジャワ島という島がある。
Ceylonはセイロンティーなどの意味もあるけれど、セイロン島という島がある。
Javaに名前を近づけているということがうかがえるね。
Ceylonのロゴは象だけれども、アジアゾウの亜種にセイロンゾウというのがいるから、
きっとそれだろう。
僕にCeylonを教えてくれたブログを読むと、型推論を持つ静的型付の言語だそううだ。
同じJavaで動くScalaを彷彿とさせる。
そしてもちろん最近の言語では当たり前のようにある関数オブジェクトもある。
明示的にvariableを付けない限りイミュータブルになるという点も、Scalaみたいだ。
Hello World
Eclipsseのプラグインも公開されていたので、早速インストール。
そしてHello Worldだ。
よくわからないが、ceylon Moduleというものを新規作成すれば、実行可能なメソッド?が作られた。
"Run the module `com.sotaro`." shared void run() { print("hello world"); }
com.sotaroというパッケージを作ってその中にrun.ceylonというファイルを作ったのだけれども、ヘッダーは何だろう…
わからないことだらけだな。
とりあえず、printという関数が有ったのでこれで標準出力に出力できるようだ。
行末には;が必須。
IDEが起こっちゃう。
こういうところは要らないと思うんだけどな
"Run the module `com.sotaro`." shared void run() { value hoge = "hogehoge"; printhoge(hoge); } void printhoge(String hoge) { print(hoge); }
メソッドはこのように作るらしい。
変数の頭にあるvalueは型を指定していない何かしらの変数といういみで、右辺の状況によって型が決まるそうだ。
Saclaでいうところのvalのようなものだな。
でもメソッドの引数にはvalueは使えなかった。
型を指定しなければならないのかも。
"Run the module `com.sotaro`." shared void run() { value ph2 = printhoge2; ph2(); } void printhoge(String hoge) { print(hoge); } void printhoge2() { print("hoge2"); }
このようにすると、関数オブジェクトを扱える。
括弧なしで変数に代入して、変数に括弧付きで実行する。
他の言語と同じような使い方だな。
"Run the module `com.sotaro`." shared void run() { value ph2 = printhoge2; ph2(); printMethod(ph2); } void printhoge(String hoge) { print(hoge); } void printhoge2() { print("hoge2"); } void printMethod(void func()) { func(); }
関数オブジェクトを引数に指定するにはどうやら戻り値の方も指定しなきゃいけないみたいだ。
戻り値の型が違うのはどうするんだ?
公式サイトのリファレンスを見てみると=>という演算子を用いしてやっているところも有ったので、最後にそれの使い方も調べてみるか。
"Run the module `com.sotaro`." shared void run() { value ph2 = printhoge2; ph2(); printMethod(ph2); printMethod2(); } void printhoge(String hoge) { print(hoge); } void printhoge2() { print("hoge2"); } void printMethod(void func()) { func(); } void printMethod2() => print("foodaisuki");
これを実行すると、foodaisukiが表示れた。
単に{ }の別の書き方という感じだな。
次はforやwhileなど基本的な制御文とClassの使い方とかを試してみるか。
じゃあお休み