Haxeの関数値について雑多なこと
さてさて、Haxeネタ書きます。今日はClojureネタ書いたので軽めに。
関数値としてのHaxe
関数値
さてさて、Haxeは関数を値として持ち、また、それを好きなときに呼び出すことができます。
class Sample{
public static function main(){
var foo = function(){ trace('foo!'); };
foo();
}
}
メンバ変数にメソッドを代入する
また、Haxeは関数値なので、メンバ変数として利用することもできます。
class Hoge{
public var foo : Void -> Void;
public function new(){}
public function callFoo(){
this.foo();
}
}
このように、外から関数値を代入することができます。
class SampleHoge{
public static function main(){
var hoge = new Hoge();
hoge.foo = function(){ trace("hoge!"); };
hoge.callFoo();
}
}
ちなみに、var foo : Void -> Void; dynamic public function foo(){}とほぼ同等です。
class Hoge2{
dynamic public function foo(){};
public function new(){}
public function callFoo(){
this.foo();
}
}
メソッドをメンバ変数に代入する
さて、bazメソッドを持つPiyoというクラスがあったとします。
class Piyo{
public var bar = "piyo";
public function new(){}
public function baz(){
trace(this.bar);
}
}
このように、メソッドをメンバに代入して、 代入したオブジェクトで、呼びだすことができます。
class SamplePiyo{
public static function main(){
var hoge = new Hoge();
var piyo = new Piyo();
hoge.foo = piyo.baz;
hoge.callFoo();
// => piyo!
piyo.bar = "piyopiyo";
hoge.callFoo();
// => piyopiyo!
}
}
関数値を利用例
では、実際に関数値を利用する場合はいつでしょうか?
実際に良くある事例を一例を挙げます 。
Ajaxの非同期通信のコールバック関数として
まずは、これでしょう。Ajaxが簡単に書けます。
import haxe.Http;
class SampleAjax {
static function main() {
var http = new Http("piyopiyo.json");
http.onData = function( data:String ){
trace(data);
};
http.onError = function( data:String ){
trace(data);
};
http.request( false );
}
}
関数型プログラミングとして
ここに書くにはスペースが足りなさすぎる!!!
まとめ
関数値が扱かえるって良いよwww!
明日は、だれも書かない様子なら僕が書きまう。
土曜日は@shohei909さんです。よろしくおねがいします。
Author And Source
この問題について(Haxeの関数値について雑多なこと), 我々は、より多くの情報をここで見つけました https://qiita.com/nobkz/items/aea57de73d95d887b329著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .