kotlinさわってて色々感じたメモ
はじめに
kotlinでAPIサンプル書いたり、一部のプロジェクトをkotlin化している時の所感メモ
動作環境
versionup時のメモ
kotlin 1.1.50
— close_yutori (@kimukou2628) 2017年9月25日
android.D8.enable =true
だとkotlin.streams.StreamsKt
でalready present
でエラーになってしまうのは何故?
でもfalseにしても駄目だったから
1.1.4-3 に戻した
kotlin 1.1.50
— close_yutori (@kimukou2628) 2017年9月25日
kotlin_coroutine_version
0.16=>0.18
にしたらcompile error解決
うーん。別パッケージの対応versionってどこでチェックするんだろう? https://t.co/atNTtgWcC0
Convert to Kotlin
これ一見便利そうなんだけど、変換した後のコードをかなり手直ししないとダメっていうのは結構ある
あとこれはIDEAの問題かもしれないけど、
クロージャ記述が補完候補には出るけど選べない
事が多くて、イラッときて一旦Javaで書いてからktファイルに貼り付けとか地味に遣ってたりする
ここらへんは自分のKotlin力が未だ低いから仕方ないかなー(汗
変換できる条件
手直ししないとダメなコード
変換直後のコード
@Pooh3Mobi はい。Convert to Kotlin が !!だらけ、複雑なクラスは変換エラーも結構有なので XX?.hoge 変換とかで結構通しちゃってますね(汗現状だと* 新し目の記事(kotlin製)なのを適用しやすい環境を作る* lombokの代わり
2017-09-12 23:15:09 via YoruFukurou to @Pooh3Mobi
な状況なので、最初は !! の置き換え辺りから作業するのが、多分共通認識だとは思う
- !! => .apply{ }
変換処理的には正しくても、Nullセーフなのが反映されていないのでクラッシュする記述
class DebugSettingFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) { => override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
自動変換だと?がつかなくてクラッシュする
雑感的な話
Java8が使えないからKotlinが選ばれるというのは実際のところ、どうなのだろうか?
— ぷなつしー@サイドPJもやる個人事業主 (@Pooh3Mobi) 2017年9月12日
本当にそれが理由だけで選ばれるのか?
最近の記事はKotlinで書かれたものが増えてますね。
— ぷなつしー@サイドPJもやる個人事業主 (@Pooh3Mobi) 2017年9月12日
Kotlinの知見がeffective Javaのような形で出てくるのが重要ではないかと思いますね。
ただ特段Java7のコードが問題という事ではないと思うんですよね。そんなにビジネスロジックでnullおきるか?と。
確かにビジネスロジック的には起きないんですけど、Androidの場合はGC関係でヌルポなのがあるからな。。(汗それこそ、Reactive Streamsからみてnullとは何なのかについて知りたいです。
— ぷなつしー@サイドPJもやる個人事業主 (@Pooh3Mobi) 2017年9月12日
RxJava2でnullがデータとして送れないので、適切にOptionalやNullObjectとしてラップするのが良いのか?そもそもfilterしておくのか?
ビジネスロジック依存?
確かにRx使えばソレが回避できるのかは凄く知りたい所・・
はい。Convert to Kotlin が !!だらけ、複雑なクラスは変換エラーも結構有なので
— close_yutori (@kimukou2628) 2017年9月12日
XX?.hoge 変換とかで結構通しちゃってますね(汗
現状だと
* 新し目の記事(kotlin製)なのを適用しやすい環境を作る
* lombokの代わり
lombokはAS3.0 betaからGUI Pluginが死んでるからですよね(汗。結構なpluginが死んでる(anko pluginもbeta5から動
— close_yutori (@kimukou2628) 2017年9月12日
kotlin化はjavaベースのapt(databinding)が超不安定だからだったりします
ですよね〜。apt変換系のライブラリを入れると不安定になります(汗。
— close_yutori (@kimukou2628) 2017年9月12日
data-bindingと併用すると倍率ドンw!(というかG様ライブラリverup時によくデグレますなーとかよく思ってます
でもまあ PermissionDispacher は便利ですね
@kimukou2628 んー話していてわかりましたが、僕はどうやらaptが単なるコード生成便利ツールの使い方になるのが苦手なようです。僕のような原始人だと生成したクラスをsrcフォルダ以下に持ってきた後、アノテーションとライブラリをプロジェクトから消してしまいそうです。
@kimukou2628 そうはいかないものもありますが
ありがとうございます!3.0.0でKotlin対応を強化する予定ですがaptを使わず解決できる形(Delegateとか)も探っていきたいと思っています
— hotchemi (@hotchemi) 2017年9月13日
kotlin対応版さわってみましたが、毎回定型文としてオーバーライドしていた
onRequestPermissionsResult関数を書かなくて良くなってる
ぐらいの差分かなと。まあ確かにそれだけでも楽なことは楽なのですが・・*1
*1:一度ビルドが必要な状況はかわら無いけど