「明日思わず誰かに伝えたくなる話 フラー x ちゅらデータ合同勉強会」(2022年3月11日)での発表資料です。
Kotlinのifを愛でるokuzawats明日思わず誰かに伝えたくなる話2022/03/11
View Slide
自己紹介奥澤(@okuzawats)Androidアプリエンジニア@フラー株式会社テックリード「Jetpack ComposeによるAndroid MVVMアーキテクチャ入門」の著者
今夜のトピックス1. 自己紹介2. なんでKotlinのifを愛でるのか3. Coding Conventions4. 事例5. NG例6. まとめ
なんでKotlinのifを愛でるのかifは最も基本的なプログラムの構成要素ifに思い入れを持ってプログラムを書くことで、他のところもいい感じに書けるようになる(かもしれない)逆に言うと、ifすら蔑ろにすると他のところも残念なことになりそう(偏見)Coding conventionsを読む習慣を付ける
Coding ConventionsKotlin公式のCoding conventionshttps://kotlinlang.org/docs/coding-conventions.htmlAndroidのKotlin style guidehttps://developer.android.com/kotlin/style-guide
ifに関するCoding conventionsAndroidのKotlin style guideには以下の記載がある
ifに関するCoding conventionsつまり、みたいに一行に収まる(三項演算子みたいな)if-elseか、みたいにブロックを書くかのどちらか。
Kotlin公式のCoding conventionsには明確に書かれてないけどサンプルコードに示されるif-elseはこのスタイルで書かれている
ここまでが前置きで、これを踏まえて愛でていきます。
example.1 ひとつひとつreturnを書く
example.1 ひとつひとつreturnを書く寸評古き良き書き方実家のような安心感だが、IDEに怒られるのが玉に瑕。Kotlinのifは値を返す式なので、ifを返せば良い。その方がKotlinらしいコードになる(と思う)。
example.2 ifをreturnする
example.2 ifをreturnする寸評直接if-elseの評価結果を返すので、どんな値がreturnされるのかがわかりやすい。returnの前に早期リターンすることは可能なので、単にif-elseだけ見ていれば良いというわけではないのが玉に瑕。example.1よりもKotlinらしいコードになった(と思う)。
example.3 ブロックを省略する
example.3 ブロックを省略する寸評Kotlin style guideに書かれている書き方(ただし一行に収まる場合)。三項演算子の代わりに使えてしまう。Kotlinらしい書き方だけど、一行が長くなると改行が欲しくなり、ブロックを足さないといけなくなるのが玉に瑕。
example.4 関数本体を返す
example.4 関数本体を返す寸評早期リターンなどが発生し得ない書き方。if-elseの評価結果が返されるので、どんな値が返されるのかは一目瞭然。個人的には好き。行数が少なくなって人類が幸せになる。
example.5 Scalaでみる書き方
example.5 Scalaでみる書き方寸評Scalaだとこういう書き方をする気がする(Scalaというか関数型言語?)個人的にはこの書き方が一番好きだけど、チーム開発だと推しにくい。example.3、example.4くらいがちょうどいいかもしれない。書籍Functional Programming Kotlinではこの書き方をしているので、関数型に馴染みがあるとこういう書き方を好むのかもしれない。
NG例
NG1 ブロック省略&改行あり
NG1 ブロック省略&改行あり寸評Kotlin style guide違反。何で違反になっているかはわからないDangling else?
NG2 ifとelseが非対称
NG2 ifとelseが非対称寸評個人的にはNG。if-elseが非対称なので目が滑る。if-elseを対象的に(同じ書き方で)書きたい。
発表時間の都合で以下略処理の途中でifを使って副作用のあるコードを実行するパターン早期リターンするパターン
まとめKotlinはifだけ見ても色々な書き方ができる。Kotlinの言語機能を活かした、Kotlinらしいコードが書けると読みやすいコードになると思う。自分たちだけの最強のifを見つけよう!