男と女のラブゲームも1日1時間!カワヴェリ名人です。
さて、前回予告した「KotlinでTDD」。
検証対象にも得手不得手がございますので、検証案を色々考えてました。
検証案1:もしも間違いに気が付かなかったら、平行世界の僕はどの辺で暮らしているのか? ⇒羽田沖から地下鉄の地図の隅までまで対象が広く、特定するのが困難。よって今回は見送ります。
検証案2:もう一度遠くへ行け遠くへ行けと、僕の中で誰が歌ってるのか? ⇒実際はないものを証明するのは難しいです(悪魔の証明)。というか毒電波受信してそうで怖いわっ。
検証案3:この手の歌詞引用パロディは、とある権利団体から法外な何かを請求されてしまうのか? ⇒そういう話は本当勘弁してください。。
検証案4:けものはいても、のけものはいないことを証明する …そうだ、テーマはこれで行きましょう!条件も解りやすく証明しやすい。
なので今回はこんなアプリを作ってみます。
http://hyasynth.com/area51/bin/Javaripark_release.apk ※1
ところで現在まだ正式リリースされてない「Android Studio 3.0」の最新プレビュー版をいち早く入手してみました。
この3.0から公式にサポートされるKotlin言語にて、世界に先駆けた開発してみるよ!
世界の最先端に触れるコント劇団!かっこいいのか悪いのか全然わからないな!
早速DLしたAndroid Studio起動後、「Start a new Android Studio Project」で新規アプリを作成します。
メニュー内「File>New>New Project」でも作れるよ!
Application Name JavariPark Company Domain zico-hihan.sub.jp IncludeKotlinSupport (チェックをONにします) PhoneandTablet API15(Android4.0.3以上)
これで新規プロジェクトが出来上がり。この時点で既に、Android端末で実行可能なアプリが出来上がってます。ようこそJavariParkへ!!
続いて、app>java>jp.sub.zico_hihan.javaripark(test)を覗いてみましょう。
ExampleUnitTest
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
今回のもう一人の主役、「テストユニット」でございます。
この中には「4と2+2は同じです」という式が書かれた「addition_isCorrect()」という命令(以後「メソッド」)が書かれてます。
そう、「4」と「2+2」の答えはたぶん同じはず。ぼく算数得意だからすぐ解ったけどね!!
実行したらテスト結果の欄がミントグリーン※2に染まります。テスト成功!やったね!まだ何もしてないけどね!!
@Test
fun けものはいる() {
assertTrue(javariPark.exists(“けもの”))
}
「けものはいる()」というメソッドには、『「JavariPark」というクラス内の「exists()」というメソッドに”けもの”という文字を渡すとTrue(OKって意味)が返ってくる』という式が書かれてます。
ただし「JavariPark」というクラスも「exists()」というメソッドも現時点では存在していないので、当然エラーになります。
なので対応する「JavariPark.kt」というクラスを作ります。
その中に、文字列を引数にして「true」を返す、「exists()」というメソッドも作りましょう。
package jp.sub.zico_hihan.javaripark
class JavariPark {
fun exists(s: String): Boolean {
return true
}
}
これでひとまずエラーはなくなりました。テストを実行するとミントグリーンに戻り、「けものはいる」状態になりましたね。
そこでもう一つのテスト、「のけものはいない()」を追加しましょう。
@Test
fun のけものはいない() {
assertFalse(javariPark.exists(“のけもの”))
}
今度は「けものはいる()」は成功、「のけものはいない()」失敗という結果になりました。
“のけもの”がいるかと聞かれたら、きっぱりNOと答えましょう。優しい世界まであと一歩です。
「JavariPark.exists()」の中を修正します。
fun exists(s: String): Boolean {
if (s == “けもの”) {
return true
}
return false
}
“けもの”がいたらtrueを返し、それ以外はfalseを返します。再テストの結果ミントグリーンに戻りました。
しかし残念ながら”セルリアン”もいるのよね。奴がいてもtrueです。
assertTrue(javariPark.exists(“セルリアン”))
「JavariPark.exists()」にが”セルリアン”でもtrueを返すようにする。
if (s == “セルリアン”) {
return true
}
しかしこの調子でパークの住人が増えていくと、どんどん長く複雑になっていきますよね。
ここら辺でリファクタリング(最適化)してみよう。
val inhabitant = listOf(“けもの”, “セルリアン”)
return s in inhabitant
「inhabitant」リストの中に住人がいるかだけ調べるようにした。超すっきり!
これでラッキービーストさんやかばんちゃんも簡単に追加できるよね!
コメント書いたとこで、いったん完成。
検証したソースコードはGistに公開してます!
https://gist.github.com/kawaveri/22fca08ef6c11c49da0d62b8bcf75b88
※1
インストール時は「設定>セキュリティ>提供元不明のアプリ」をONにしてください。
iPhoneやWindowsMobileの方は端末を一度投げ捨てて、Android4.0.3以降の白ロム端末を入手してから再挑戦してください。
※2
TDD用語では普通に「グリーン」と呼ぶのですが、先週は『夢眠ねむ×蜷川実花「peppermint」』が発売されたばかりですからね。はぁぁねむきゅん可愛いよたぬきゅん!
※3
上記※1の実行アプリにする為にはMainActivityなどをもう少しいじってますが、あくまでコント集団の小ネタにつき、小難しい話は色々端折ってます。ご了承ください。
※4
Q:もひとつ質問いいかな。assertTrue(javariPark.exists(“タナベさん”))の結果がグリーンにならないよ…?
A:…君のような勘のいいフレンズは嫌いだよ。