7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HaxeAdvent Calendar 2013

Day 3

Haxeの関数値について雑多なこと

Last updated at Posted at 2013-12-03

さてさて、Haxeネタ書きます。今日はClojureネタ書いたので軽めに。

関数値としてのHaxe

関数値

さてさて、Haxeは関数を値として持ち、また、それを好きなときに呼び出すことができます。

Sample.hx
class Sample{
	public static function main(){
		var foo = function(){ trace('foo!'); };
		foo();
	}
}

メンバ変数にメソッドを代入する

また、Haxeは関数値なので、メンバ変数として利用することもできます。

Hoge.hx
class Hoge{
	public var foo : Void -> Void;

	public function new(){}

	public function callFoo(){
		this.foo();
	}
}

このように、外から関数値を代入することができます。

SampleHoge.hx
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(){}とほぼ同等です。

Hoge2.hx
class Hoge2{
	dynamic public function foo(){};

	public function new(){}

	public function callFoo(){
		this.foo();
	}
}

メソッドをメンバ変数に代入する

さて、bazメソッドを持つPiyoというクラスがあったとします。

Piyo.hx
class Piyo{
	public var bar = "piyo";
	
	public function new(){}
	
	public function baz(){
		trace(this.bar);
	}
}

このように、メソッドをメンバに代入して、 代入したオブジェクトで、呼びだすことができます。

SamplePiyo.hx
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が簡単に書けます。

SampleAjax.hx
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さんです。よろしくおねがいします。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?