AndroidStudio3 Beta2で、val|varや戻り値に自動で型推論を表示する方法

AndroidStudio3 Beta 2では、初期設定でエディター上にタイプヒントが表示されません。 [Settings]->[Editor]->[General]->[Appearance]->[Configure…]と選択し、Configure Parameter Name Hintsダイアログを表示します。

[Language]でKotlinをリストから選択し、以下画面のように、Optionsにある4つの項目にチェックをすると、型推論の結果をエディターに表示してくれます。

 

有効になると、以下のようにvalを使ったときや戻り値などで、型を書かなくても表示してくれるので大変便利です。

自動で型ヒントが表示されるので分かりやすい!

Kotlin初心者におすすめの資料

Kotlinの入門資料はいろいろありますが、日本語で分かりやすいものをまとめてみました。

Kotlin入門までの助走読本

Kotlin入門までの助走読本は、少ないページで要点がまとまっているので、Kotlinがどんなものか把握するのにお勧めです。Javaに対してどのような部分が便利になっているかや、https://try.kotlinlang.org/ などのツールの紹介など幅広く理解できます。何か入門サイトで始める前にちょっと見てみるとよいです。

30分で覚えるKotlin文法

http://qiita.com/k5n/items/cc0377b75d8537ef8a85

ある程度プログラミングを経験すると、入門で細かく書かれている文法書よりも既存の知識を生かして、基本的なものは簡素な説明で、固有言語に特化した部分は深く調べるためにキーワードが分かればよい場合もあります。

この「30分で覚えるKotlin文法」は実際に30分で把握するのは難しいですが、小さな文法サンプルが書かれているので、Kotlin文法のチートシートとしてブラウザで開きながら使うとよいです。

Kotlin のコレクション使い方メモ

http://qiita.com/opengl-8080/items/36351dca891b6d9c9687

Kotlinのコレクションは、Iteratableインタフェースを持っているので、map,filter,forEachなどが使えます。これもチートシートとして便利です。

KotlinとJavaFXで遺伝的アルゴリズムで、特定文字列(“to be or not to be”)に進化させる

以前Nature of Codeで作った遺伝的ルゴリズムのプログラムを移植しました。KotlinとJavaFXで遺伝的アルゴリズムで、特定文字列(“to be or not to be”)に進化させるプログラムです。Kotlinのコレクションクラスは、List.mapやList.forEachのようにIteratableインタフェースの便利APIが用意されているので、for文を使わず簡素に書けました。

NatureOfCodeの遺伝的アルゴリズムをすこし関数型プログラミングのように実装

NatureOfCodeのサンプルは、初心者にもわかりやすいif文やfor文が使われている文法ですが、最近のモダンな言語はmap/reduceのように関数型プログラミングの文法やAPIを取り入れているので、JavaScriptでまずはfor文を使わない実装を試してみました。

実装する前は、for文をforEachやmapに置き換えるのは大変と考えていましたが、実際にやってみると特に大きな躓きはありませんでした。関数型プログラミングに対する否定的な先入観が大きかったようで、実践的なプログラミングで試してみてそれが大きな間違いだと気づきました。

また、以下を少し意識するだけで、此処の関数がテストしやすくなり実践的なプログラミングで関数型プログラミングの良さを感じられました。

  • メソッドチェーン
  • 小さな関数に分割していく
  • constキーワードによる変数の定数化

以前F#を勉強したときは、あくまでも関数型プログラミングの勉強で演習問題を解くだけだったのですが、新しいプログラミングを勉強した際には、まとめとして実践的なプログラミングを書くことも大切なのを痛感しました。

OpenSiv3DでPolygonクラスを使ってみる。

OpenSiv3Dでは、Polygonクラスで簡単に多角形が作れます。以下のように初期化時に頂点を指定してdrawメソッドで描画したり、

または、頂点配列を別途用意して、Polygon(頂点配列).draw();という書き方もあります。またdrawFrameメソッドを使うと塗りつぶさずフレームのみを表示できます。

ユーザー定義リテラル(user defined literals)

C++11では、「ユーザー定義リテラル(user defined literals)」機能により、数字や文字列などのリテラルにサフィックスを付けられます。

OpenSiv3Dでは、MathConstants.hppで_pi、_degユーザー定義リテラルを実装していて、double a = 2.0_pi;のような記述ができます。

実装してみる

実装方法は演算子のオーバーロードと同じです。コード量も少ないので、https://cpprefjp.github.io/lang/cpp11/user_defined_literals.html などを参考に実装できます。

 

 

 

C++11/14のalgorithmとfunctionalで、階乗やフィボナッチ数列を作る

C++11/14では、algorithmヘッダーで関数型APIが用意され、functionalヘッダーでラムダ記法も可能です。今日は他の言語ではmap関数として用意されているtransform関数を使ったり、階乗やフィボナッチ数列を作ってみました。

ラムダ式内で再帰的に関数を使う場合は、型推論のautoで作るとうまくいかないようです。function<int(int)> fのように明示すれば問題なく実行できます。またキャプチャーも参照[&]にする必要があります。

 

VisualStudio2017でBoost1.64.0を使う方法

Boost1.64.0は、シグナルというイベント通知やObserverパターンと同様な機能があるので、VisualStudio2017で使ってみました。

Boostの基本的な機能はヘッダーに実装が書かれているため、ヘッダーを読み込むだけで使えますが、シグナルは、Boostをビルドする必要がありました。ですがVisualStudio2017の開発者プロンプトで問題なくビルドできました。

Boostのビルド

bootstrap.batの実行

「Developer Command Prompt for VS 2017」を検索し、コンソール版のコンパイル環境を起動します。BoostをZIP展開したディレクトリーに移動して、bootstrap.batを実行します。これでビルドするためのb2.exeが作成されます。

b2.exeを実行してビルドする

ビルドが成功すると、stage\lib配下に、libファイルが作成されます。また、以下のようにインクルードバスとライブラリーパスの設定方法が表示されるので、VisualStudio2017で設定します。

 

サンプルソースコード

boostjp.github.ioを例にシグナルを使うサンプルを実行してみました。

 

これで自分でObserverパターンを書かずに、実績のある通知機能を使えるようになりました。

 

 

p5.jsでライフゲーム

p5.jsでライフゲームを作成しました。

剰余による回り込み

二次元配列のboard[0][0]の場合は、近傍(neighbor)を調べるときに、board[-1][-1]のようになりエラーになってしまいます。このような場合は、(カラム数+現在のカラム-1%カラム数) のように書くと、カラム数が20だったらboard[19]となってくれます。一次元配列でもこの剰余のテクニックを使うと、配列をリングに見立てることができるので、非常に便利です。

ライフゲーム自体の実装は、着実に進めていけば簡単です。