この文書作成時の環境は以下です。
- Windows 10 Home バージョン1709
- Android Studio 3.1.1
- Gradle 4.4
- Gradle Android Plugin 3.1.1
- Kotlin 1.2.31
KotlinはJetBrains製の言語で、IDE開発でJavaの代用をするために作られたらしい。1 JVMで動く。
AndroidStudioがJetBrains製ということで、当初はAndroidStudioがサポートする言語という位置づけだったが、2017年5月にGoogleに正式採用された。2
KotlinはJavaと100%相互運用性がある3ので、JavaとKotlinをまぜまぜしながら開発できるらしい。
選択肢は多いにこしたことはないので、是非Kotlinも書けるようになっておきたい。
まずは新しいプロジェクトを作成する。Android Studio 3.0以降ならKotlinはプリインストールなのでInclude Kotlin supportのチェックボックスをonにする
ActivityはBasic Activityを追加しておく
エミュレータで実行するとHello Worldする。OK
Kotlin supportをチェックしておくとMainActivity.javaの代わりにMainActivity.ktが自動生成される。Kotlinファイルを読んでみる
MainActivity.kt
package blue.hassaku.hellokotlin
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return when (item.itemId) {
R.id.action_settings -> true
else -> super.onOptionsItemSelected(item)
}
}
}
セミコロンの無い文、後置の型指定、各所のアロー演算子など気になるところはあれど、Androidマンならだいたい読めるのでは?
MainActivity.kt
...
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
...
急に出てくるfab
。これが定義されているのはこちら。
activity_main.xml
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
import kotlinx.android.synthetic.main.activity_main.*
とすることで、id付きViewがid名に自動で解決される。すばらしい。
JavaのようにfindViewById()
してキャストして4といった操作が必要ない。
kotlinではif
やwhen
は式として解釈される。(when
はJavaでいうところのswitch
)
MainActivity.kt
...
return when (item.itemId) {
R.id.action_settings -> true
else -> super.onOptionsItemSelected(item)
}
...
上記のコードは、item.itemId
の値がR.id.action_settings
と同値ならtrue
を返し、それ以外ならsuper.onOptionsItemSelected(item)
を返すという処理。
今後本格的に学んでいくため、現時点ではKotlinの良さというのは判らない。ただ、Javaとの100%相互運用性があるため、少しずつでもKotlinを覚えていくと幸せになりそう。