haXeでオリジナルコンポーネント作り WCAN mini Vol 小笠原

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

プログラミング第5回 1 while ループ 文字列の操作
アルゴリズムとデータ構造 第2回 線形リスト(復習).
社会人学習講座 「Javaプログラミング概論」
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
2008/03/01 D-BOF k.inaba はじめての initial D 2008/03/01 D-BOF k.inaba
Javaのための暗黙的に型定義される構造体
C#によるWindowsFormApplication入門
Step-by-Step Guide on How to Start ALICE Analysis
とても使いやすい Boost の serialization
アルゴリズムとデータ構造1 2007年6月12日
Iアプリプログラミング その1  鳥居秀徳.
アルゴリズムとプログラミング (Algorithms and Programming)
とても使いやすい Boost の serialization
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
JAVA.
Androidソースコード公開後のJNI
WebサービスII (第8回) 2007年11月14日 植田龍男.
JavaBeans とJSP データベース論 第5回.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
第20章 Flyweight ~同じものを共有して無駄をなくす~
C#とC++とオブジェクト指向 上甲 健史.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
アプレット プログラミング 第10回 アプレット プログラミング第10回.
プログラミング演習3 第2回 GUIの復習.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
静的型付きオブジェクト指向言語 のための 暗黙的に型定義されるレコード
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング演習3 第2回 GUIの復習.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
Jakarta Struts (2) ソフトウェア特論 第11回.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
EntityManager と EJB QL EJB 3.0 コース 第8回 2006年8月5日.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
ソフトウェア制作論 平成30年11月28日.
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
さまざまなプログラミング言語, オンライン開発環境
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

haXeでオリジナルコンポーネント作り WCAN mini Vol.10 2009.03.14 小笠原 啓@(有)ITプランニング

自己紹介 有限会社ITプランニング所属のプログラマー。 haXeとかObjective CamlとかActionScriptとかやってます。 GUIとかマルチスレッドとか言語とかに興味持ってます。 Page 2

仕事:リッチインターネットアプリケーション Page 3

話したいこと swfファイルを生成できるhaXeという言語の紹介。すばらしい言語だよ! コンポーネント(GUI部品)について。 Page 4

まずは簡単にhaXe(へっくす)の紹介 swf, javascript, neko, phpにコンパイルできるマルチプラットフォーム言語。 静的型付け(型推論)、高階関数、列挙型、型パラメータ、構造的部分型。 オープンソース。http://haxe.org/?lang=jp Page 5

こんにちは世界(みかけはAS3によく似ています) import flash.text.TextField; class Test { public static function main() { var msg = new TextField(); msg.txt = “こんにちは” + “世界!”; flash.Lib.current.addChild( msg ); } Page 6

haXeのすごいところ[1] 型付けされた高階関数と型推論。 高階関数 function reduce( f : T → T→T, init : T, ary : Array<T> ) : T { var result = init; for( elm in ary ) { result = f ( result, elm ); } return result; 型推論 Page 7

haXeのすごいところ[2] 列挙型 enum Card { Number ( n : Int ); 構造的部分型 enum Card { Number ( n : Int ); Jocker; } トランプは、数字を持つカードかジョーカーのどちらかという表現。 typedef Point = { x : int; y : int }; class Point3D = { var x : int; var y : int; var z: int; } function move( p : Point ) : Void { p.x++; p.y++; } move( new Point3D() ) 型チェックOK! Page 8

haXeのすごいところ[3] クライアント・サーバーの両方が記述できて、連携が取れる。 例えばサーバーサイドはneko, クライアントサイドはFlash。 haxe.remoting.HttpConnectionなどを使ってデータの授受。同じ言語でやり方 が同じなので、連携が容易。 Page 9

GUI部品について[1] イベントの上がり方を変えたい。 無理。 動きを変えたい。 ~をしたい。 用意されているものがあれば。 イベントとかプロパティとかメソッドとか多すぎ。 Page 10

GUI部品について[2] なぜそうなっているのか? 下手にクラスの中身をプログラマーに公開すると破壊するので、隠蔽工作を している。 Model-View-Controlというクラス間の相互依存関係をうまく回避する歴史的 な(?)テクニックを鵜呑みにして使っている。 Page 11

どうすれば柔軟なGUI部品が作れるのか? 1. ~というイベントが起きたときに、 2. ~という条件を調べて、 3. ~というフィードバックを表示して、 4. ~を実行する。 Page 12

インタラクションという名前でまとめてみた class UXInteraction<S> { var name : String; var events : Array<String>; var acts : Array<S → Void>; var judge : S → Bool; var work : S → UXInteractionParameter → Void; } インタラクションを発動させる(低レベル)イベント フィードバック イベントを挙げるかどうか? イベントが起きたときに実行する事 Page 13

インタラクションの使い方(作る) class SomeInteraction extends Interaction<State> { public function new( ?c : Controller<State> ) { super(c); name = "SomeInteraction"; events.push( MouseEvent.CLICK ); judge = function ( state : State ) { return state.enable; }; work = function ( state : State, param : Null<InteractionParameter> ) { state.enable = !state.enable; }; acts.push( function ( state : State ) { for( c in state.children ) { c.x ++ ; c.y ++;} } ); } Page 14

インタラクションの使い方(変更する) 1. クリックを無効にして、エンターキーにのみ反応するボタン。 button.getInteraction(“push”).clearEvents(); button.getInteraction(“push”).addEvent(“UXKeyboard.ENTER”); 2. リストボックスの出現の仕方を変更する。 button.getInteraction(“drop”).addAct( function( s ) { s.dropbox.alpha = 0.; Tweener.add(s.dropbox, { alpha = 1.; time = 1.; }); }): Page 15

デモンストレーション Page 16

UX-Frameworkとして公開中 Subversionリポジトリ: http://ux-framework.googlecode.com/svn/trunk Blog: http://ocaml-nagoya.g.hatena.ne.jp/uxtk/ Page 17

Web Site: www.itpl.co.jp Email: info@itpl.co.jp Page 18