今日は12月12日ですが、この記事はatma Advent Calendar 2020の12月7日の投稿です。
PHPCONをみながら記事を書いてます。サイゲの発表をみてテスト文化ってどこも同じような感じだなぁという感想を受けた。
最近サーバーサイドの言語としてKotlinを触ることが多い(やりたいと言った結果なので当たり前なのですが)。アドベントカレンダーもあるしせっかくなのでKotlinの好きなところをまとめた
配列操作が充実している
一番好き!Java8を仕事で書いていたときに重宝していたStreamAPIが、Kotlinになってとても気が利いたAPIが生えてたりする。例えば
とかとか。こいういうのはテンプレのコードをグッと減らして書いていて気持ちがいいですね。エルビス演算子を組み合わせると真価を発揮するイメージ。
ライブラリが充実している
既存のJava用ライブラリも使えるからやっぱりライブラリが多い印象。kotlin + xxxで検索引っ掛からなくても java + xxxでだいたいのライブラリは見つかるのでとても安心感がある
スコープ関数
あるデータに関する影響範囲がすっきりまとめられていて好き。これもエルビス演算子を組み合わせると真価を発揮するイメージ。例えば、nullの場合のみの処理を入れたい場合、今カンファレンスやってるPHPだと
function main() {
$a = hoge() // return string or null
if (is_null($a)) {
// nullだった場合の処理
}
}
と書けるがこれは例外処理(正確には例外ではなくnullだが意図しない処理という意味で)がmain関数のスコープに浮き出てしまっている(もしかすると僕の知識不足で今のPHP8では変わっているかもしれない)。対してkotlinだと
fun main() {
hoge() ?: run {
// nullだった場合の処理
}
}
fun hoge(): String?{
return null
}
のようにかける。main関数のスコープに浮き出てこず、run関数のスコープ内にしか例外処理が出てこない。
https://qiita.com/ngsw_taro/items/d29e3080d9fc8a38691e
runCatching
これも最高ですね!jsのPromiseみたいな感じのエラーハンドリングかと感じてる。
従来の言語のtrycatchはどうしてもエラーの型を指定する必要がある(Throwableと書けば良いのだがそれがめんどくさい)のとtrycatchの記法が独特(特にcatchらへん)なので極端に時間がロスしてしまう。runCatchingだとこんな感じで書ける
val a = kotlin.runCatching {
"aaaaa".toInt()
}.getOrElse {
// 例外処理もろもろ
return
}
最高ですね。。エラーの型を指定する必要がなく、catchの独特の記法に従う必要がなく、自然と読める。しかもrunCatchingが返すResult
型には便利なAPIも生えていて至れり尽くせりです。今のところrunCatchingを利用するデメリットは、Result
型をreturnできない以外に見つからない
runCatchingはここで詳しく紹介されてます
コンパイル言語
jsをしばらくやっていたことがあるのでそれに対する反発な気がする。コンパイルが通れば一定の品質が担保されていることが嬉しい。Rustほどの検査は開発効率に影響がでると思っているのでちょうど良い感じ
まとめ
- 好きな点を整理すると、自分が言語に重視することとして「読みやすさ(=可読性)」があるらしい。
- 多人数開発だとコード書く時間より読む時間の方が多いので読みやすさは大事かも
- 一人で開発してても時間が経てば他人が書いたコードのように思えるので尚更
- みなさんもサーバーサイドKotlinを書こう!