Xamarin と F# 使って Android アプリ開発の話。
最近 F# とか blackberry とかやってて完全に変人扱いされています。
ですが、Rx とか流行ってるし、次にくるのは F# だと信じています。
Android Java or Kotlin はもちろん、
Xamarin C# に比べても人口も情報も圧倒的に少ないですが
でも IDE があって、サポートされているだけでも上々ですよね。
F# のよさを語るよりも実際にコードを見ていただいたほうが魅力が伝わるかと思いますので、
おなじような実装を Java, C#, F# でしてみました。
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); Context context = this; FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, TestActivity.class); startActivity(intent); } }); }
C#
protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); SetContentView (Resource.Layout.FirstView); var toolbar = FindViewById<Toolbar> (Resource.Id.toolbar); SetSupportActionBar (toolbar); var listView = FindViewById<ListView> (Resource.Id.list_view); listView.Adapter = adapter; FloatingActionButton fab = FindViewById<FloatingActionButton> (Resource.Id.fab); fab.Click += (sender, e) => { StartActivity (typeof(TestActivity)); }; }
F#
override me.OnCreate (bundle) = base.OnCreate bundle me.SetContentView Resource_Layout.Main let toolbar = me.FindViewById<Toolbar> Resource_Id.toolbar me.SetSupportActionBar toolbar let listView = me.FindViewById<ListView> Resource_Id.list_view listView.Adapter <- me.adapter let onClick e = let intent = new Intent(me, typeof<TestActivity>) me.StartActivity intent let fab = me.FindViewById<FloatingActionButton> Resource_Id.fab fab.Click.Add(onClick)
どうでしょうか。
個人的には brace ないだけでもかなり見通し良いと思っています。
Xamarin を使用されている方もいない方も、ぜひ一度 F# を。
F# でもうちょっとちゃんと実装してあるものはこちらのリポジトリにあります。
github.com
blackberry や iOS なども突っ込まれててカラフル。