注意 ここにある内容はpony2.x時代にドキュメントに書かれていた物なので、もう古い可能性が高いです。最新の情報は公式ドキュメントを参照してください。
はろぽにー ₍₍ (ง´・_・`)ว ⁾⁾
この挨拶流行るんですかね(´・_・`)
引き続きPonylangの紹介です。
公式ドキュメントではこのへんです -> http://tutorial.ponylang.org/expressions/variables/
こんかいは全部説明すると長いのでおもしろかったところを抜粋する形でお届けします。
Variable
var/letがあるのは前回までで紹介したとおりです。
特徴的なのは変数のshadowingがコンパイルエラーになるのと、グローバル変数がないことだと思いました。
shadowingがないのはvar x'
のように'
を活用すればよいとのことで、結構良さそうな感じです。
Infix Ops
演算子の優先順位を切り捨てたらしく、
1 + 2 * 3
すらコンパイルエラーになっています。必ず1 + (2 * 3)
のように括弧をつけましょうとのことです。
たしかに演算子の優先順位はやっかいですが、どうなんでしょうか。ちょっと過激派な感じもします。
Ponyでは+
や<
などは特定の名前の関数のaliasになっています。そのため、add
やlt
などの関数を定義すると、
自動的に演算子が使えるようになります。具体的な対応表は以下を御覧ください。
http://tutorial.ponylang.org/expressions/infix-ops/
Methods
ざざっと飛ばします。オーバーロードがないことが印象的でした。
また、コンストラクタ名はまよったらcreateにすると良いらしいです。(その場合はFoo.create()
を省略してFoo
とできるシンタックスシュガーがあります。)
Exceptions
エラーはerror
を使って呼び出します。
try callA() if not callB() then error end callC() else callD() then callE() end
tryの中でエラーが起きたらelseの中が実行されます。 elseの中でエラーをハンドリングする必要は必ずしもないようで、何もしなかったらそのままelseが実行された後、処理が続行されるようです。thenはJavaのfinally相当なものです。
ただし、errorが出る部分は必ずtryで包む必要があります。これはコンパイル時にチェックされます。
また、errorを使ってPartial Functionを表現できます。PonyではPartial Functionには?
を結果型の次に付ける必要があります。
fun factorial(x: I32): I32 ? => if x < 0 then error end if x == 0 then 1 else x * factorial(x - 1) end
Object Literal
無名クラスのようなことはobject
キーワードで表現できます。
object is Hashable fun apply(): String => "hi" fun hash(): U64 => this().hash() end
Lambda
ラムダ式もあります。
lambda(s: String): String => "lambda: " + s end
Partial application
部分適用は
let f = foo~addmul(3) f(4)
のようにfoo.addmul(3, 4)
の代わりに~
で呼び出してやればOKです。
Ponyでは名前付き引数が使えるので順番が最初でない引数を適用することも出来ます。
まとめ
ということで今回は雑に駆け巡りましたが次回はいよいよcapabilitiesの節なので期待しています₍₍ (ง´・_・`)ว ⁾⁾