Kotlin 5
■ このスレッドは過去ログ倉庫に格納されています
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1531818027/ >>327
直接Go開発周りのディスカッションを見てきての感想だから、SEOも何も関係ねーよ
英語が読めるなら自分の目で確かめることをお勧めする
あれはある意味理想的なOSS開発の形かもしれない goは好きじゃないが>>326の言うことには同意
でもDartちゃんは駄目だから早く眠らせてあげて… FlutterがDartじゃなければ一気に覇権を取るまでありえただろうにな Android次期OSの開発言語がDartになるみたいな話どうなったん >>337
小鳥ん島
>>336
揚げ足鳥で悪いが、目標は達成するものだと思う。 ランキング画面を作っていてRecyclerViewの項目のソートをしたいんですが、
Cellectionをお気に入り数の降順でソートした上で、
タイトルとサブタイトルの昇順にソートするにはどうしたらいいですか
以下でお気に入り数の降順でソートするところまではできたんですが。
RankingDatas.sortedByDescending { it.bookMarkCount } 俺だったらデータを抜いてくる時点でソートをかけて抜いてくる。 APIレスポンスはそうして返してるんですが、
ローカルでお気に入りオンオフしてランキング順位が変わった場合に
再度APIを叩いてデータを取り直すのも微妙なので
その場合はローカルでソートして
順番を入れ替えたいという感じです ドキュメントにこう書いてあるからascendingとdescendingを順次呼び出せばいいんじゃない?
The sort is stable. It means that equal elements preserve their order relative to each other after sorting.
呼び出す順序はソート優先順位の逆順で rankingDatas.sortedByDescending { it.bookMarkCount }.sortedBy { it.title }.sortedBy { it.subTitle }
やってみましたが、途中の結果は捨てられて単に subTitle の降順になるようです 呼び出す順序はソート優先順位の逆順でと言ったのに伝わらなかったか 「kotlin sort multiple fields」で検索! 久しぶりに触ったらcoroutineがだいぶ変わってるらしくて以前からとりあえず動くけどよく分かってない状態だったのにもう全然分からないよ……(´・ω・`) >>352
とりあえず前知識として「コールバック地獄」について知っておくといいかも >>351
のリンク先で、数値なら、- で降順にできるのか?
list.sortedWith(compareBy({ -it.age }, { it.name }, { it.address }))
Ruby なら、
arr2 = arr.sort_by { |a| [ -a[:score], a[:room] ] } ま、しかし、複数項目で昇順降順が混在する場合は自分で Comparator 作っちゃった方が楽かもね。 いやいや rankingDatas.sortedBy { it.subTitle }.sortedBy { it.title }.sortedByDescending { it.bookMarkCount } でいいじゃん >>362
10万件ソートするなら使えないし、1000件しかソートしないなら問題ない
ランキングならたいした件数ないんじゃない >>360
それって2番目の並べ替えで1番目の並べ替えの順序が変わらないことは保証されてるの? mutableLivedataを外部に公開したら良くないってことで
別途livedataを作ってそいつに参照を持たせて
外部にはlivedataだけ公開するっていうのを
全部のmutableLivedataに対して行うの面倒臭いんですが
なにかいい方法ないですか よく知らないけどmutableLivedataをコンストラクタで貰って
それを元にlivedataを作って両方保持するクラスでも作って包めばいいんじゃないの それで何か解決するんですかね
結局view側からmutableLivedataに
アクセスできるんじゃないですかね 本当にやり方が思いつかないならもうちょっと経験値の高い先輩なりに相談してみよう 分からないならレスしないでください。うざいだけです 動かしてないけどこんな感じ
import android.arch.lifecycle.*
import kotlin.reflect.KProperty
//保持用
fun <T> unmodifiableLiveData(d:LiveData<T>): LiveData<T> = Transformations.map(d){it}
class MutLiveWrap<T>(val lv:MutableLiveData<T>) {
val readonlyLv = unmodifiableLiveData(lv)
operator fun getValue(thisRef: Any?, property: KProperty<*>) = readonlyLv
}
val <T> MutableLiveData<T>.wrap get() = MutLiveWrap<T>(this)
//使用
class Test {
private val aWr = MutableLiveData<Int>().wrap
val a by aWr
fun f(){
val mutLv: MutableLiveData<Int> = this.aWr.lv
val roLv : LiveData<Int> = this.a
}
} >>370
技術力がないだけじゃなくて人間としても終わってるのな 荒らしに返事するな!
そいつは前からいる、荒らしだろ。
相手をすると、この板に居つくだけ! ま、しかし、このスレの場合は日頃は過疎ってるのでたまに荒しが来てくれた方がスレが活性化して落ちる心配がなくなるなw developer.android.comの最近のページはコードサンプルがKotlinとJava両方載ってるんだね
タブで切り替えるんだけど最初に表示されてるのはKotlin 俺も動かしてないけどつくってみた
import androidx.annotation.MainThread
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
private class ReadOnlyLiveData<T>(private val liveData: LiveData<T>) : LiveData<T>() {
override fun setValue(value: T) { TODO("この関数を呼び出したとき、リードオンリーだから使えないよって教える。") }
override fun postValue(value: T) { TODO("この関数を呼び出したとき、リードオンリーだから使えないよって教える。") }
@MainThread override fun observe(owner: LifecycleOwner, observer: Observer<in T>) { liveData.observe(owner, observer) }
@MainThread override fun observeForever(observer: Observer<in T>) { liveData.observeForever(observer) }
@MainThread override fun removeObserver(observer: Observer<in T>) { liveData.removeObserver(observer) }
@MainThread override fun removeObservers(owner: LifecycleOwner) { liveData.removeObservers(owner) }
override fun getValue(): T? = liveData.value
@SuppressWarnings("WeakerAccess") override fun hasObservers(): Boolean = liveData.hasObservers()
@SuppressWarnings("WeakerAccess") override fun hasActiveObservers(): Boolean = liveData.hasActiveObservers()
}
fun <T> LiveData<T>.readOnly(): LiveData<T> {
if (this is ReadOnlyLiveData<T>) return this // もうすでにリードオンリー
return ReadOnlyLiveData(this)
} >>357
降順と昇順が混在する場合は compareBy または compareByDescending で Comparator 作って
それに対して thenBy または thenByDescending で追加させて行く方が楽だし速いと思う。 AnkoでBottom Sheetって使えますか? >>384
SequenceはIterableとほぼ同じ
違いは
Sequence: 遅延評価する (なのでジェネレーターも含む)
Iterable: 基本的には遅延評価でない (通常、実体はコレクション)
拡張関数も別れていて、例えば
Sequenceのmap は遅延評価するSequenceを返す
Iterableのmap はその場で全要素を処理してListを返す げ、知らなかった。
ずっとIterableがStreamの代わりだとばかり。
PythonのSequenceと混同してた。
ならば、Iterableをあそこまでゴージャスにする必要があったのか? >>388
典型的なコレクション操作では遅延評価せずその場で全処理する方が早いため
意味付けが違うだけで、SequenceとIterableは同じ拡張関数を持ってるくらいの認識でOK
分かりやすさのため、あえて使い分けを用意しなかった
Javaの割り切り方もありだとは思うけどね SequenceはJava8のStreamと類似で、KotlinであえてStreamを使うべき機会はほとんどないからSequenceを使っておけば良いってことかな そしてSequenceって変数にぶち込んで使いまわせなかったっけ? partitionのSequence版が無くて自作したわ
groupingByも遅延評価だけど使い方がむずい(毎回リファレンス読み直す) >>391
pararellがないな。
はっきり並列化できる処理なら、Streamの方がJavaの言い回しを考慮した上でも直感的にかける。 >>396
このレスは板内爆撃
本人かシンパかアンチか荒らしかいまいち判別できないので放置でよいよ 俺が Kotlin 押しビデオ作って公開すればいいのか?
しかし Kotlin 初心者なので「いいですよ〜。最高ですよ〜」などと情緒に訴えて見ている側を洗脳しようとすることぐらいしかできない。 >>401
ジャップに布教するなら、みんな使ってますよ〜乗り遅れますよ〜仲間外れですよ〜だけでいいよ
初心者のお前でも、有名企業でのKotlin採用事例を集めて紹介するくらいはできるだろう? まぁでも、kotlin go あたりが推奨されるのはわかるけどな
今更phpとかおすよりかは説得力ある >>402
ああ。そうだな。
後は学生向けにこれさえできれば楽々就職みたいに言うと。 PreferenceFragmentが非推奨になる
↓
代わりにandroidx.preference liblary使えって言われる
↓
日本語のガイドに説明なし
適当すぎんだろイライラ あんま関係ないけどmavenのkotlinプラグインで増分コンパイルされないのって仕様? >>407
ドキュメント読めば書いてあるし問題なくね? >>407
本気で言うけど、公式ドキュメント程度の英語は頑張って読んだ方がいいと思うよ。 まぁAndroidの公式リファレンスは言語切替をシステム化してるから
ドキュメントのバージョンが不一致なら警告表示するくらいすればいいのにとは思う
iOSの方は英語以外バッサリ切り捨ててる(最新は英語読めと明示してある)から
中途半端に惑わされることは無い いつの間にかこんな入門書出てたよ。既にKindle版もある。
Kotlinプログラミング
https://www.amazon.co.jp/dp/B07M8LKSKV もっと可愛い名前にすれば良かったのに
swiftみたいな Androidは公式で日本語ドキュメントあるのか
Kotlinのドキュメントは有志がやってたけどもうメンテしてないよな Kotlin in actionとどっちの方がいいんだ >>417
公式日本語ドキュメントは更新が遅いから読まない方がいいぞ kotlin native応援してるんだけど何が一番貢献になるんやろか?
翻訳とか細かなライブラリ作ったりくらいなら時間かければできそうなんやけど、難しいことはできん。
やっぱ募金とかなんか? >>422
まずはなんとかしてVSCodeを潰そう
このままだとJetBrains無くなるよ >>422
とりあえず公式リポジトリのスターとfork数増やして
kotlin nativeであることをアピールしたライブラリ作ればいいのでは
ただ、現時点ではパフォーマンスが残念だからお勧めしない
出来ることが違うとはいえ、ロジック部分は
JVMどころかKotlin/JS経由のnodeで動かすのより7〜10倍くらい遅い
まだコンパイラの最適化をやってないのは救いだけど
俺はARC with cycle collectorがスループット下げてる可能性を気にしてる
もしそうなら最適化やっても思うほど改善しないんじゃないかと JSとかnativeとかどうでもええ。
いろいろ変更予定のあるJVMとAndroid対応だけしっかりやれや。 JetBrainsの業績そんなに悪くないしむしろ伸びてるはずだけど とりあえずgitとintellijの更新はしとく。
作るとしたら何系のライブラリがいいと思う? ■ このスレッドは過去ログ倉庫に格納されています