Kotlin 5

■ このスレッドは過去ログ倉庫に格納されています
2018/12/08(土) 20:29:41.41ID:oXOQORcd
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう

※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1531818027/
2019/02/16(土) 15:17:06.30ID:lTjIe/CZ
Scalaは言語マニアのオナニー言語だよなあ
2019/02/16(土) 17:00:29.98ID:odkD9xpX
なんだかんだでscalaは採用企業多いけどね
kotlinもtwitterとかpaypalみたいな大手で使ってくれると宣伝になるんだけど
2019/02/16(土) 17:31:16.36ID:W7DuQqzW
日本のYahooがKotlin採用したくらいではさざなみさえ立たないか
304デフォルトの名無しさん
垢版 |
2019/02/17(日) 08:06:13.22ID:8BWCGdz7
Scalaの方が出たのが早かったし意識高い系(笑)が挙って使ったから
でもそれを維持出来る新人たちが居ないのが現状
Scalaは端的に複雑で難解な部分が多い
2018年後半以降Scalaの記事殆ど見かけないやろ?
コップ本(笑)
2019/02/17(日) 11:12:07.88ID:IdBTBZJc
Androidの公式言語がScalaになる世界線もあり得たと思うけど、そうならなかったってことはつまりそういうこと
2019/02/17(日) 11:17:52.27ID:IdBTBZJc
一年くらいScalaで仕事してたしまあ慣れればどうってことはないと思うけど、ScalaとKotlinで選べるとしたらよほどの変人以外はKotlin選ぶと思うわw
2019/02/17(日) 11:30:47.79ID:OQFPUwNT
ScalaはHaskellを意識しすぎ
簡潔に書きたいだけならKotlinかClosureの方がいい
2019/02/17(日) 11:57:32.09ID:nzXhLQND
Scalaのコンセプトは、スケーラビリティの理論実証
 オブジェクト指向と関数型の統合によりスケーラビリティが実現すると考え
 小規模から大規模まで同じ書き方/考え方で記述出来るように設計されている
 出自はコンピュータサイエンスの学者

Kotlinのコンセプトは、より良い産業向け言語
 Javaからの移行や相互運用、コンパイル速度、使い勝手について
 「仕事の道具」であることを意識して設計されている
 出自はIDE製品を提供する企業
309デフォルトの名無しさん
垢版 |
2019/02/17(日) 12:47:22.79ID:7MWZQWrl
どっちも我田引水なだけやん
2019/02/17(日) 13:01:53.97ID:nzXhLQND
設計思想と既存資産があるから多様に派生し人が集まる
C, C++, Objective-Cが合流しないのも同様
それを我田引水と評することに何の意味もない
2019/02/17(日) 15:40:49.55ID:1RbyA1NJ
>>310
クスクス
2019/02/17(日) 15:53:56.04ID:tF7RiGiR
scalaでAndroidのプラグインとかあった気がする
我田引水ってなんか意味わからんな
2019/02/17(日) 23:16:27.59ID:ek0K0t7B
>>309
むしろ我田引水でない言語なんかあるんだろうか。
強いて言うならgrassとかwwww
2019/02/18(月) 02:04:27.28ID:XPBhJDxI
我田引水ってのは共用物について不正に占有したり自らの便宜を図ったりするような場合を言う
自己アピールや競争を含めた利己的な行動すべてを我田引水と揶揄するのは農耕民族的な発想が過ぎる
そういうのは道徳というより村八分や出る杭が打たれるのを恐れる面が強くイノベーションの足枷
2019/02/18(月) 11:11:01.50ID:+13B6eaL
もはや何のスレだか分からない
316デフォルトの名無しさん
垢版 |
2019/02/18(月) 13:20:37.82ID:cZFby2gr
道徳説教スレ
317デフォルトの名無しさん
垢版 |
2019/02/18(月) 13:34:09.52ID:trvxFZJG
我田引水スレ
2019/02/18(月) 19:19:37.69ID:I6FKQlBO
後ろ盾がjetbrainsっていうのはどうなんやろ。
大手と比べてどんなメリットデメリットあると思う?
2019/02/18(月) 19:29:55.81ID:Sk2Bqw0/
てか、我田引水ってどういう意味だっけwwww
2019/02/18(月) 19:50:06.12ID:TrdfW/q6
>>318
googleと仲いいしintellijシリーズが売れなくなるとも思えんし安泰なんじゃ?
2019/02/18(月) 20:44:26.76ID:bWM4TeHv
スカラ信者がまた荒らしてるな
2019/02/18(月) 21:57:58.91ID:EXht3ErA
>>318
大手と比べるとメリットはない。後ろ盾のない言語よりはいい。
IDEの開発会社という意味では、言語の普及がIDEの売上に直結する可能性があるので
Oracleみたいに独立不採算だからマネタイズに走るという思考にはなりにくいが、
絶対的なものではない。
2019/02/18(月) 22:33:30.93ID:nEhvYQ88
IDEの開発会社であるが故のリスクもあるけどね
VSCodeのような強力な他の開発ツールがKotlinサポートにおいてIntelliJを超えてしまってユーザーが流れた場合、
JetBrainsにとってKotlinの開発を続けることにもはや意味がなくなってしまう
2019/02/18(月) 22:58:18.56ID:/oirkxE3
後ろ盾最強はやっぱrust?
2019/02/18(月) 23:02:22.94ID:3dpq5+94
Goでぇす!
326デフォルトの名無しさん
垢版 |
2019/02/19(火) 08:14:46.86ID:cAOiK8uf
後ろ盾の強さでいったらGoだべ
あれだけの巨大企業がついてる上に、開発も独裁せずに異常なまでにオープンであることを重視してるし
2019/02/19(火) 09:12:17.39ID:D8b3v+Fo
>>326
最強のSEO力でそう見せてるだけだぞ
それでもDartに対するヘイトは抑えきれなかったようだが
2019/02/19(火) 09:33:24.18ID:cAOiK8uf
>>327
直接Go開発周りのディスカッションを見てきての感想だから、SEOも何も関係ねーよ
英語が読めるなら自分の目で確かめることをお勧めする
あれはある意味理想的なOSS開発の形かもしれない
2019/02/19(火) 13:20:28.53ID:VQ802aqj
goは好きじゃないが>>326の言うことには同意
でもDartちゃんは駄目だから早く眠らせてあげて…
2019/02/19(火) 14:47:06.45ID:dYxLB9sm
FlutterがDartじゃなければ一気に覇権を取るまでありえただろうにな
2019/02/20(水) 14:22:13.38ID:v2qgHXVs
Android次期OSの開発言語がDartになるみたいな話どうなったん
2019/02/20(水) 15:43:28.44ID:YlCEZG7R
夢のOSなので夢で終わる
333デフォルトの名無しさん
垢版 |
2019/02/20(水) 15:54:05.41ID:agArr1lp
ダー子
2019/02/20(水) 16:09:47.41ID:xuurx1V0
>>331
https://9to5google.com/2019/01/02/android-runtime-app-support-fuchsia/

つまりJavaもKotlin/JVMも使える
2019/02/20(水) 17:27:44.53ID:9tgV50SM
Dream → Nightmare
336デフォルトの名無しさん
垢版 |
2019/02/20(水) 19:05:59.81ID:v7iPz90J
夢は見るもの
目標は叶えるもの
2019/02/20(水) 19:45:33.26ID:TCqLAjvR
夢を見る島
2019/02/20(水) 21:47:37.37ID:sBZRwN3G
>>337
小鳥ん島
>>336
揚げ足鳥で悪いが、目標は達成するものだと思う。
2019/02/22(金) 04:03:22.89ID:DtR1+6r8
>>334
まじかよダートいらねーじゃん
340デフォルトの名無しさん
垢版 |
2019/02/23(土) 12:08:36.03ID:9pS68leH
Котлин
341デフォルトの名無しさん
垢版 |
2019/02/24(日) 12:59:23.23ID:pmK9w2Lp
ランキング画面を作っていてRecyclerViewの項目のソートをしたいんですが、
Cellectionをお気に入り数の降順でソートした上で、
タイトルとサブタイトルの昇順にソートするにはどうしたらいいですか
以下でお気に入り数の降順でソートするところまではできたんですが。
RankingDatas.sortedByDescending { it.bookMarkCount }
2019/02/24(日) 17:16:45.57ID:DytDvOjA
俺だったらデータを抜いてくる時点でソートをかけて抜いてくる。
2019/02/24(日) 17:28:12.24ID:pmK9w2Lp
APIレスポンスはそうして返してるんですが、
ローカルでお気に入りオンオフしてランキング順位が変わった場合に
再度APIを叩いてデータを取り直すのも微妙なので
その場合はローカルでソートして
順番を入れ替えたいという感じです
2019/02/24(日) 18:25:01.14ID:nlMNXQkf
ドキュメントにこう書いてあるからascendingとdescendingを順次呼び出せばいいんじゃない?
The sort is stable. It means that equal elements preserve their order relative to each other after sorting.
呼び出す順序はソート優先順位の逆順で
345デフォルトの名無しさん
垢版 |
2019/02/24(日) 20:05:27.33ID:pmK9w2Lp
rankingDatas.sortedByDescending { it.bookMarkCount }.sortedBy { it.title }.sortedBy { it.subTitle }

やってみましたが、途中の結果は捨てられて単に subTitle の降順になるようです
2019/02/24(日) 20:26:13.24ID:pmK9w2Lp
昇順か
2019/02/24(日) 21:01:47.88ID:DSwgvg4z
sortedWithつかえ
2019/02/24(日) 21:07:06.34ID:pmK9w2Lp
できましたありがとうございました
2019/02/25(月) 01:07:00.43ID:EPSsIluE
呼び出す順序はソート優先順位の逆順でと言ったのに伝わらなかったか
2019/02/25(月) 05:33:03.93ID:D5d9E5fI
「kotlin sort multiple fields」で検索!
351デフォルトの名無しさん
垢版 |
2019/02/26(火) 03:00:37.89ID:lsok3PaS
こういうことしたかったのか?
https://code.i-harness.com/ja/q/2388797
2019/02/26(火) 06:27:00.41ID:oQJIDyJZ
久しぶりに触ったらcoroutineがだいぶ変わってるらしくて以前からとりあえず動くけどよく分かってない状態だったのにもう全然分からないよ……(´・ω・`)
2019/02/26(火) 07:07:49.29ID:UAPWfCGq
>>352
とりあえず前知識として「コールバック地獄」について知っておくといいかも
2019/02/26(火) 08:39:12.02ID:5k0N70Wq
coroutine登場人物多すぎ
355デフォルトの名無しさん
垢版 |
2019/02/26(火) 09:55:03.32ID:E0EMtjG2
え?子ルーチンそんなに変わったの?
2019/02/26(火) 10:37:15.60ID:UAPWfCGq
experimental中は色々変わったけど正式版以降の使い方は基本的に変わってないよ
https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md
2019/02/26(火) 12:06:54.02ID:5MxkS3P7
>>351
のリンク先で、数値なら、- で降順にできるのか?

list.sortedWith(compareBy({ -it.age }, { it.name }, { it.address }))

Ruby なら、
arr2 = arr.sort_by { |a| [ -a[:score], a[:room] ] }
358デフォルトの名無しさん
垢版 |
2019/02/26(火) 18:17:15.84ID:k06atLuF
>>357
できる。
359デフォルトの名無しさん
垢版 |
2019/02/28(木) 03:26:51.88ID:oRFlldUh
ま、しかし、複数項目で昇順降順が混在する場合は自分で Comparator 作っちゃった方が楽かもね。
2019/02/28(木) 07:06:25.14ID:Lh1ejLNL
いやいや rankingDatas.sortedBy { it.subTitle }.sortedBy { it.title }.sortedByDescending { it.bookMarkCount } でいいじゃん
2019/02/28(木) 09:12:21.78ID:sPMvbV7g
直感的でない
2019/02/28(木) 09:15:13.48ID:UGZ/YaG8
>>360
処理時間3倍かかるよそれ
2019/02/28(木) 10:37:24.91ID:o8LdAn98
>>362
10万件ソートするなら使えないし、1000件しかソートしないなら問題ない
ランキングならたいした件数ないんじゃない
364デフォルトの名無しさん
垢版 |
2019/02/28(木) 13:05:23.62ID:oAFMMcaR
>>360
それって2番目の並べ替えで1番目の並べ替えの順序が変わらないことは保証されてるの?
2019/02/28(木) 13:16:03.81ID:TwQuwGRl
stable sortだから保証されてる
2019/02/28(木) 15:53:56.89ID:sPMvbV7g
mutableLivedataを外部に公開したら良くないってことで
別途livedataを作ってそいつに参照を持たせて
外部にはlivedataだけ公開するっていうのを
全部のmutableLivedataに対して行うの面倒臭いんですが
なにかいい方法ないですか
2019/02/28(木) 19:05:52.26ID:TwQuwGRl
よく知らないけどmutableLivedataをコンストラクタで貰って
それを元にlivedataを作って両方保持するクラスでも作って包めばいいんじゃないの
2019/03/01(金) 01:02:08.44ID:8x0yRf06
それで何か解決するんですかね
結局view側からmutableLivedataに
アクセスできるんじゃないですかね
2019/03/01(金) 06:35:34.41ID:eJTnddJA
本当にやり方が思いつかないならもうちょっと経験値の高い先輩なりに相談してみよう
2019/03/01(金) 08:39:12.55ID:8x0yRf06
分からないならレスしないでください。うざいだけです
2019/03/01(金) 09:24:26.88ID:ajbNVKsu
動かしてないけどこんな感じ

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
}
}
372デフォルトの名無しさん
垢版 |
2019/03/01(金) 11:13:31.72ID:PhmT31GH
>>370
分かりません。
2019/03/01(金) 11:44:05.14ID:AdJjcFYH
>>370
技術力がないだけじゃなくて人間としても終わってるのな
2019/03/01(金) 12:41:01.41ID:yZJ4Zkhu
荒らしに返事するな!

そいつは前からいる、荒らしだろ。
相手をすると、この板に居つくだけ!
375デフォルトの名無しさん
垢版 |
2019/03/01(金) 12:57:49.73ID:PhmT31GH
ま、しかし、このスレの場合は日頃は過疎ってるのでたまに荒しが来てくれた方がスレが活性化して落ちる心配がなくなるなw
2019/03/01(金) 16:06:36.33ID:XD1TRf4c
developer.android.comの最近のページはコードサンプルがKotlinとJava両方載ってるんだね
タブで切り替えるんだけど最初に表示されてるのはKotlin
2019/03/01(金) 16:54:26.44ID:ae30enpy
俺も動かしてないけどつくってみた

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)
}
378デフォルトの名無しさん
垢版 |
2019/03/02(土) 06:14:14.54ID:qFBH5IQH
>>357
降順と昇順が混在する場合は compareBy または compareByDescending で Comparator 作って
それに対して thenBy または thenByDescending で追加させて行く方が楽だし速いと思う。
379デフォルトの名無しさん
垢版 |
2019/03/04(月) 16:04:14.52ID:/4qbaGVQ
AnkoでBottom Sheetって使えますか?
2019/03/08(金) 09:22:28.79ID:Yj0eRJ2i
なんか面白い話題ないんかな。。
381デフォルトの名無しさん
垢版 |
2019/03/08(金) 10:46:41.80ID:pv8HlopZ
君が面白くなりなさい。
2019/03/08(金) 13:24:56.87ID:AzqZJLRD
springがフルkotlinになるのはいつ?
2019/03/08(金) 18:01:21.77ID:rmua+rZ/
Exposed1.0が出るのはいつ?
2019/03/10(日) 12:52:23.09ID:t+kr7Jdy
sequenceってジェネレーターみたいなもの?
2019/03/10(日) 13:42:04.30ID:56gRJqyl
>>384
SequenceはIterableとほぼ同じ
違いは
 Sequence: 遅延評価する (なのでジェネレーターも含む)
 Iterable:  基本的には遅延評価でない (通常、実体はコレクション)

拡張関数も別れていて、例えば
 Sequenceのmap は遅延評価するSequenceを返す
 Iterableのmap はその場で全要素を処理してListを返す
386デフォルトの名無しさん
垢版 |
2019/03/11(月) 00:27:22.19ID:+Nlo5Elt
ずばり説明が書いてあるページを発見した。

KotlinのListとSequenceって何が違うの?
https://qiita.com/KirariGlock/items/9aa251a44c11900c8b5f
2019/03/11(月) 07:22:41.11ID:0boP2QX3
うんこは最後に出す方法
388デフォルトの名無しさん
垢版 |
2019/03/11(月) 17:24:32.47ID:2ppgAkG/
げ、知らなかった。
ずっとIterableがStreamの代わりだとばかり。
PythonのSequenceと混同してた。
ならば、Iterableをあそこまでゴージャスにする必要があったのか?
2019/03/11(月) 18:33:50.09ID:JQuKUcCl
誰かの趣味だよきっと
2019/03/11(月) 18:35:48.60ID:oxE6wZ/Z
>>388
典型的なコレクション操作では遅延評価せずその場で全処理する方が早いため

意味付けが違うだけで、SequenceとIterableは同じ拡張関数を持ってるくらいの認識でOK

分かりやすさのため、あえて使い分けを用意しなかった
Javaの割り切り方もありだとは思うけどね
2019/03/11(月) 21:05:48.78ID:MDT71nit
SequenceはJava8のStreamと類似で、KotlinであえてStreamを使うべき機会はほとんどないからSequenceを使っておけば良いってことかな
2019/03/11(月) 23:18:53.36ID:+cXkYAGY
そしてSequenceって変数にぶち込んで使いまわせなかったっけ?
2019/03/12(火) 01:11:15.05ID:WllyGH1o
partitionのSequence版が無くて自作したわ

groupingByも遅延評価だけど使い方がむずい(毎回リファレンス読み直す)
394デフォルトの名無しさん
垢版 |
2019/03/12(火) 08:13:05.73ID:z/76z4zm
>>391
pararellがないな。
はっきり並列化できる処理なら、Streamの方がJavaの言い回しを考慮した上でも直感的にかける。
395デフォルトの名無しさん
垢版 |
2019/03/12(火) 12:54:36.68ID:6Uu2j9Xc
kotlin推しがgoを推薦
https://www.youtube.com/watch?v=KGzoE6z7ojk
2019/03/12(火) 14:55:36.01ID:7iAawGvK
python,go,kotlin全部推してるやん
2019/03/12(火) 15:14:48.22ID:iD2RJper
>>396
このレスは板内爆撃
本人かシンパかアンチか荒らしかいまいち判別できないので放置でよいよ
2019/03/12(火) 15:56:40.12ID:7iAawGvK
>>397
そうか。すまん
2019/03/16(土) 11:53:34.93ID:28C0KCt9
そもそもなんの権威でもないやろこの人
2019/03/16(土) 13:53:25.25ID:jFsymRCD
坊やだからさ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況