Fork me on GitHub
#clojure-japan
<
2015-06-17
>
athos01:06:23

KotlinがAndroidに強い特徴って何かあるんですか?

ayato_p01:06:33

1. JetBrains が作っていて AndroidStudio が IDEA ベース(つまり Kotlin 書くのに困らない)。 2. Java から Kotlin への移行は痛みが少ない(シンタックスが Java とかけ離れていない) 3. 速度面も Java と同等程度に出るので問題がない じゃないですかねー。

athos01:06:43

ほむ。JavaユーザがKotlinへ移行するモチベーションは何なんでしょう?

ayato_p01:06:21

正確に言うと Androider( Not Java user ) ですが、それは Android 開発における問題が大きいと思います。 ・Android 開発では Java7 しか使えないので Stream など 8 の機能がまだ使えない( Kotlin は関数型ライクな表現が沢山ある) ・NPE コワイ( Kotlin は Null 安全)

ayato_p01:06:55

とかですか、代表的なのは。

athos01:06:13

なるほど

athos01:06:28

翻って、Clojure/nekoが既存のJavaのAndroidアプリ開発者にアピールしないのは、 - 開発環境が整ってない - Javaとの乖離が激しい - 速度面が問題になる ってことですかね

ayato_p01:06:44

そんな気がしますね

athos01:06:30

どれもごもっともという感じですね

ayato_p01:06:23

速度面だけでも気にならなくなればなーと思ってます。

athos01:06:02

そのあたりはSkummetあたりの頑張り次第ですかねー

athos01:06:17

ただ、Clojureだとイミュータブルなデータを操作するスタイルがかなり支配的で、どうしても速度面では不利っていうのはあるかも

athos01:06:39

そのスタイルから外れると一気にコードも書きづらくなりますし

ayato_p01:06:19

まぁそれはそうですよねー。

ayamada02:06:41

以前にclojureでandroid用のゲームを作っていたんですが、確かにそのポイントが非常に面倒でした > イミュータブルなデータを操作するスタイルから外れるとコードが書きづらい

ayamada02:06:24

特に自分がandroidをいじっていた頃はまだART非対応(Dalvik VMのみの対応)で、Skummet等もなかった頃なので…

ayamada02:06:04

今だと大分ましになっているかもしれないですが、もう離れてしまったので近況は分からないです

ayamada02:06:09

今だとART対応で大丈夫になってるのかもしれませんが、当時はGCが動くとワールド全体が止まってしまい、ゲームだとそれは致命的なので、GCをなるべく動かさないコードにすべく、色々と工夫をせざるをえなかったので大変だった記憶があります

ayato_p05:06:26

大変そう…。

icalo3511:06:06

やっぱりClojureでAndroidゲームは茨の道って感じなんですね

icalo3511:06:43

(以前ayamadaさんのCLAN使おうと思ったものの雑魚過ぎてコマンドラインほとんどわからず挫折したんですが、今なら使えそうな気がする……)

ayamada11:06:52

CLANはもう長い間放置していて、dependenciesとかも古いままなので、ちゃんとメンテされているplay-cljの方がおすすめです https://github.com/oakes/play-clj

ayamada11:06:02

確かに茨の道には違いないので、あんまりおすすめはしませんが… > ClojureでAndroidゲーム

icalo3511:06:44

おお、なるほど。CLAN経由でplay-cljも知ってたのですが、英語しんどくてちょっと手を出せていませんでした。

icalo3511:06:20

leiningenのテンプレートとかあったのでホントlein newだけした状態という

icalo3511:06:40

結局ゲーム作りたいというのがありまして……主にPC用ゲーム作ると思うのですが、Androidもいけたりするのかな? とか思っていた程度なのです。茨の道を歩ける経験まだまだ無いので、まずはplay-cljでPC向けゲームがんばるです。ありがとうございます。

ayamada11:06:57

なるほどです。PC上で動かすのであればClojure的な書き方をしても性能が普通に出るので、いい感じに書けると思います。ゲームライブラリ部分のlibgdx等の固有のノウハウは必要ですが…

ayamada11:06:11

がんばってくださいー

ayato_p22:06:29

1.7 、 feature 全体で見るとそこそこの変更あるんですねー。

athos22:06:16

ですね。transducerとかreader conditional以外でも地味に便利な機能が入ってたりします。

athos22:06:59

update-in厨としてはupdate関数導入は地味にありがたい

ayato_p23:06:17

むしろ今までなかったのが若干の不思議ですけどね simple_smile

ayato_p23:06:48

あとは Emacs のプラグインが早く新しい構文とかに対応してくれるといいんですが…

ayato_p23:06:03

reader conditionals 書くとインデントが…

athos23:06:35

updateについてはたしかに今まででもあっても不思議ではないですね

athos23:06:46

reader conditionalのインデントの問題っていうのは、#? とか #?@ が独立したS式として認識されてしまうってことなんでしょか

ayato_p23:06:58

本当は :cljs:clj で頭を揃えたいのに字下げされるとか

ayato_p23:06:05

結構整えるのめんどくさい…

athos23:06:18

あー、なるほど。開き括弧から始まるフォームだから、関数呼び出しと認識されてしまうわけですね。それはたしかに対応してほしい…。

ayato_p23:06:14

セーブフックしてフォーマットしてると死ぬやつです