SlideShare a Scribd company logo
1 of 37
Download to read offline
Haxe
自己紹介
• @hakurai
• 所属: Backlog開発チーム@Nulab京都/関ジャバ/
hoge駆動/奈良模型愛好会
• よく使う言語: Java/Scala/JavaScript/Haxe/
Objective-C
Haxe
- 静的型付・オブジェクト指向言語
- JavaScript を含む複数言語にコンパイル可能
- 最新バージョンは3.1.3
基本型
- Int(整数値)
- Float(実数)
- Bool(真偽値)
- Dynamic(動的型)
- Void(値ではない値)
型パラメータ
var array = new Array<String>();
!
array.push("hoge");
array.push(123) // コンパイルエラー
String型の配列
Int型
動的型(Dynamic)
- 型チェックが行われない型
- 基本的に使わない方がいい
- 静的片付けのメリットが失われる
動的型(Dynamic)
var value:Dynamic = test ;
!
value = 123; //OK
String型
Int型Dynamic型
構造体(匿名オブジェクト)
var point = { x : 1, y : -5 }; // 型 {x:Int, y:Int}
!
typedef Point = {x:Int, y:Int} // Point 型を宣言
var point:Point = { x : 1, y : -5 };
構造的部分型
typedef Point = { x : Int, y : Int }
typedef Point3D = { x : Int, y : Int, z : Int }
!
var p3d:Point3D = { x : 0, y : 0, z : 0 };
var pt:Point = p3d; // OK
関数型
var func = function(a:String, b:String):String{
return a + b;
};
型 は String -> String -> String
enum(列挙型)
enum Color{
Red;
Green;
Blue;
}
enum(列挙型)
- パラメータを与えることもできる
enum ConstantPoolInfo {
Empty;
Utf8Info(body:String);
IntegerInfo(body:Int);
FloatInfo(body:Float);
}
クラス宣言
class Todo {
public var summary(default, default):String;
public function new(summary:String) {
this.summary = summary;
}
public function hoge():String {
return hoge ;
}
}
プロパティ
コンストラクタ
メソッド
クラス宣言 - プロパティ
public var summary(default, default):String
プロパティ - アクセスコントロール
public var summary(default, default):String
!
public - どこからでもアクセス可能
private - 自クラスとサブクラスからアクセス可能
プロパティ - アクセッサー
public var summary(default, default):String
!
default - 読み込み、書き込み可能
null - クラス内部から読み込み、書き込み可能
get / set - getter / setter を自分で定義
never - どこからもアクセス不可
dynamic - getter / setter を動的に設定
クラス宣言 - コンストラクタ
public function new(summary:String, done:Bool)
- new という名前の関数がコンストラクタ
- オーバーロード不可
- オプション引数を使う
ローカル変数宣言
var hoge:String = "hoge";
var fuga = fuga";
!
fuga = 123; //型が違うのでコンパイルエラー
型推論でString型に
Int型String型
Module System
package todo;
import knockout.Knockout;
import knockout.Observable;
class Todo {
for ループ
for( i in 0...10 ) {
// ...
}
!
- この書き方はできない
for(i = 0; i < 10;i ++){
}
if 式
- if 式は値を返す
var value = if(flag) {
100;
}else{
200;
}
JavaScriptの場合
var value;
if(flag) {
value = 100;
}else{
value = 200;
}
switch
var value = switch(flag){
case 0: java";
case 1: scala ;
case 2: groovy ;
default: other ;
}
パターンマッチ - enum
enum Info {
Empty;
Text(data:String);
}
function test(info: Info):String {
return switch(info){
case Empty: empty ;
case Text(data): data;
}
パラメータ
パターンマッチ - 構造体
var value = { lang: java , ver: 8};
var text = switch(value){
case {lang: java , ver:8}: latest ;
case {lang: java , ver:v} if (v > 8): error ;
case {lang: java , ver:v} : Std.string(v);
case _: other ;
}
パターンマッチ - ガード
var value = { lang: java , ver: 8};
var text = switch(value){
case {lang: java , ver:8}: latest ;
case {lang: java , ver:v} if (v > 8): error ;
case {lang: java , ver:v} : Std.string(v);
case _: other ;
}
ガード
String Interpolation(文字列補完)
文字列中に変数や式の値を埋め込める
シングルクォーテーション限定
!
var name = "Haxe";
var x = 10;
var text = '$name is ${x*2} times better than X';
// "Haxe is 20 times better than X"
オプション引数
function foo( x:Int, ?y:Int, z:String="hello" ) {
trace(x + "," + y + "," + z);
}
- デフォルト値を指定
- 省略可能な引数(デフォルト値 null)
using
- 既存のクラスを外から拡張する
- Objective-C のカテゴリみたいなの
- Lambda クラス(Iterable を拡張)
Lambda - filter
var nums = [1, 3, 5, 6, 7, 8];
var res =
nums.filter(function(n) { return n < 5;});
!
trace(res); // [6, 7, 8]
Lambda
var nums = [1, 3, 5, 6, 7, 8];
var res = nums.map(function(n) {return n * 2;});
trace(res); // [2, 6, 10, 12, 14, 16]
この他にも・・・
- 例外
- inline
- リフレクション
- マクロ
- Interface
- Abstract 型
- Implicit cast
- 演算子オーバーロード
など
外部JavaScriptとの連携
- 型定義ファイル(extern class)を定義する
- jQueryなどはライブラリが公開されている
もしくは
- Dynamic型を利用する
- 最終手段
Haxelib
- 依存性解決ツール
- 公式リポジトリ http://lib.haxe.org
- gitリポジトリから直接ダウンロードなども可能
- haxelib.json を置いておく
IDE
• IntelliJ IDEA(Haxe plugin)
• FDT(Eclipseベース)
• FlashDevelop(Windows)
Haxe 利用事例
Backlog
課題詳細 / 課題をまとめて操作(Haxe & knockout.js )
ありがとうございました

More Related Content

What's hot

15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門SatoYu1ro
 
プログラミングHaskell(第1章)
プログラミングHaskell(第1章)プログラミングHaskell(第1章)
プログラミングHaskell(第1章)yaju88
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4Shingo Inoue
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
Material
MaterialMaterial
Material_TUNE_
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 
rpscala35-scala2.9.0
rpscala35-scala2.9.0rpscala35-scala2.9.0
rpscala35-scala2.9.0Kenji Yoshida
 
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)parrotstudio
 
演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみようTakashi Ishio
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Yukiko Kato
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)Takashi Ishio
 
Introduction to Spray at Kansai Functional Programming
Introduction to Spray at Kansai Functional ProgrammingIntroduction to Spray at Kansai Functional Programming
Introduction to Spray at Kansai Functional ProgrammingSuguru Hamazaki
 
Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Yukiko Kato
 
Java8 lambdas chapter1_2
Java8 lambdas chapter1_2Java8 lambdas chapter1_2
Java8 lambdas chapter1_2yo0824
 

What's hot (19)

Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
プログラミングHaskell(第1章)
プログラミングHaskell(第1章)プログラミングHaskell(第1章)
プログラミングHaskell(第1章)
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
Material
MaterialMaterial
Material
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
Go guide for Java programmer
Go guide for Java programmerGo guide for Java programmer
Go guide for Java programmer
 
rpscala35-scala2.9.0
rpscala35-scala2.9.0rpscala35-scala2.9.0
rpscala35-scala2.9.0
 
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
 
演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)
 
Introduction to Spray at Kansai Functional Programming
Introduction to Spray at Kansai Functional ProgrammingIntroduction to Spray at Kansai Functional Programming
Introduction to Spray at Kansai Functional Programming
 
Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】
 
Java8 lambdas chapter1_2
Java8 lambdas chapter1_2Java8 lambdas chapter1_2
Java8 lambdas chapter1_2
 

Viewers also liked

JSerのためのHaxe入門
JSerのためのHaxe入門JSerのためのHaxe入門
JSerのためのHaxe入門Nobukazu Hanada
 
altJS勉強会「Haxeすごいからみんな使え!」
altJS勉強会「Haxeすごいからみんな使え!」altJS勉強会「Haxeすごいからみんな使え!」
altJS勉強会「Haxeすごいからみんな使え!」政樹 尾野
 
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...小林 信行
 
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版小林 信行
 

Viewers also liked (7)

Haxe vs Unicode
Haxe vs UnicodeHaxe vs Unicode
Haxe vs Unicode
 
Haxeについて
HaxeについてHaxeについて
Haxeについて
 
Haxe で始める CreateJS
Haxe で始める CreateJSHaxe で始める CreateJS
Haxe で始める CreateJS
 
JSerのためのHaxe入門
JSerのためのHaxe入門JSerのためのHaxe入門
JSerのためのHaxe入門
 
altJS勉強会「Haxeすごいからみんな使え!」
altJS勉強会「Haxeすごいからみんな使え!」altJS勉強会「Haxeすごいからみんな使え!」
altJS勉強会「Haxeすごいからみんな使え!」
 
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...
 
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
 

Similar to Haxe

BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
Vim scriptとJavaとHaskell
Vim scriptとJavaとHaskellVim scriptとJavaとHaskell
Vim scriptとJavaとHaskellaiya000
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪Naoki Kitora
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScriptbleis tift
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎tetsu6
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめKazumune Katagiri
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うTatsumi Naganuma
 
Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)Eugene Yokota
 

Similar to Haxe (20)

BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
Vim scriptとJavaとHaskell
Vim scriptとJavaとHaskellVim scriptとJavaとHaskell
Vim scriptとJavaとHaskell
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪第2回関数型言語勉強会 大阪
第2回関数型言語勉強会 大阪
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめ
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)Equality in Scala (ScalaMatsuri 2020)
Equality in Scala (ScalaMatsuri 2020)
 
Spectron
SpectronSpectron
Spectron
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 

More from Kazuhiro Eguchi

なれる!クラスローダー
なれる!クラスローダーなれる!クラスローダー
なれる!クラスローダーKazuhiro Eguchi
 
Java 並行処理の基礎update1
Java 並行処理の基礎update1Java 並行処理の基礎update1
Java 並行処理の基礎update1Kazuhiro Eguchi
 
並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~
並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~
並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~Kazuhiro Eguchi
 
Automate the Swing application testing
Automate the Swing application testingAutomate the Swing application testing
Automate the Swing application testingKazuhiro Eguchi
 

More from Kazuhiro Eguchi (8)

JavaFX8
JavaFX8JavaFX8
JavaFX8
 
実践Knockout
実践Knockout実践Knockout
実践Knockout
 
なれる!クラスローダー
なれる!クラスローダーなれる!クラスローダー
なれる!クラスローダー
 
Knockout
KnockoutKnockout
Knockout
 
Java 並行処理の基礎update1
Java 並行処理の基礎update1Java 並行処理の基礎update1
Java 並行処理の基礎update1
 
Starting java fx
Starting java fxStarting java fx
Starting java fx
 
並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~
並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~
並行処理プログラミングの深淵~Java仮想マシン仕様 スレッドとロック~
 
Automate the Swing application testing
Automate the Swing application testingAutomate the Swing application testing
Automate the Swing application testing
 

Haxe