xamarin.ios/android+f#で作る関数型アプリ
DESCRIPTION
Xamarin Studio 5.0 から実装された F# プロジェクトテンプレートを使って iOS アプリを作成する試み。TRANSCRIPT
Xamarin.iOS/Android + F# で作る関数型アプ
リ増田 智明( @moonmile )
.NET ラボ Micorosft MVP C#
Moonmile Solutions
自己紹介&宣伝
増田 智明 [email protected]
Xamarin 本が出ます。C# による iOS 、 Android 、 Windows アプリケーション開発入門日経 BP 社
de:code で発売します。
Xamarin とは?
C# でクロスプラットフォーム開発 Xamarin Studio
Xamarin.iOS
Xamarin.Android
前身が mono MonoDevelop
ASP.NET を Linux で動かすなど 去年の 11 月頃に Microsoft 社と提携
インサイド Xamarin – Build Insider by 榎本 温 氏 http://www.buildinsider.net/mobile/insidexamarin
Xamarin Studio 5.0 beta
iOS/Android アプリを F# で作成できる iOS の storyboard を使える
iOS デザイナ内蔵
F# の特徴
.NET Framework が使える関数型言語
F# code
C#/VB PCL
.NET Framework
既存ライブラリの活用
既存知識の活用
C#/VB code
ライブラリの利用
F# と マルチプラットフォーム開発
Mono と .NET Framework
Windows 環境 iOS 環境 Android 環境 Linux 環境
MonoMicrosoft
.NET Framework
iOS Android Linux Windows
WindowsWinRT
Windows PhoneMonoTouch MonoDroid
F# と C# の組み合わせ
ひと通り、文法 できること、は同じ≒ 基本クラスライブラリ (Basic Class Library)
PCL(Portable Class Library)
C#/VB code F# code
BasicClass
Library
PortableClass
Library
F# で関数電卓を作る( iOS 版)
Storyboard(Interface Builder) を使う Outlet を使う
MVVM パターンを利用する INotifyPropertyChanged
ICommand
MvvmCross
View と Logic を分ける Logic は Android/Window Store App と共用
Storyboard xml[<Outlet>]
ViewModel
Model, Logic
View
PCLiOS/Android/Win
View code
yacc もどき
判別共用体の利用 ラムダ式をリストに保存
type Expr = | ExprVal of Val | ExprVar of Var | ExprFunc of Func | ExprOp of Expr*Op*Expr | ExprB of LB*Expr*RB
let rec evalExpr = function | ExprVal(n) -> evalVal n | ExprVar(n) -> evalVar n | ExprFunc(n) -> 0.0 | ExprOp(e1,op,e2) -> let x = evalExpr e1 let y = evalExpr e2 match evalOp(op) with | "+" -> x + y | "-" -> x - y | "*" -> x * y | "/" -> x / y | _ -> 0.0 // error | ExprB (b1,ex,b2) -> evalExpr ex
UI は MVVM パターンでtype ViewModelBase() = let propertyChangedEvent = new DelegateEvent<PropertyChangedEventHandler>() interface INotifyPropertyChanged with [<CLIEvent>] member x.PropertyChanged = propertyChangedEvent.Publish member x.OnPropertyChanged propertyName = propertyChangedEvent.Trigger([| x; new PropertyChangedEventArgs(propertyName) |])type MainViewModel() = inherit ViewModelBase() let mutable _Text1 = "" member this.Text1 with get() = _Text1 and set(value) = _Text1 <- value base.OnPropertyChanged "Text1"
ちょっとデモアプリは間に合わず orz
FParsec が MonoTouch/MonoDroid で動かない?ので、自前でパーサーを組み始めるのが前日のこと。
途中ですが、コードを紹介します。
参考リンク
Xamarin - Build mobile apps for iOS, Android, Mac and Windowshttp://xamarin.com/
インサイド Xamarin Build Insider http://www.buildinsider.net/mobile/insidexamarin
The F# Software Foundationhttp://fsharp.org/
New York City F# User Group (New York, NY) – Meetuphttp://www.meetup.com/nyc-fsharp/
1) Write cross-platform mobile apps with F# - NYC Mobile .NET Developers Group (New York, NY) – Meetuphttp://www.meetup.com/nycmobiledev/events/176767982/
【速報】 F# + Xamarin.iOS + Xamarin Studio で iPhone アプリを作れるよ | http://www.moonmile.net/blog/archives/5825