18/12/08 20:32:31.24 oXOQORcd.net
公式サイト
URLリンク(kotlinlang.org)
公式ブログ
URLリンク(blog.jetbrains.com)
コードを貼れる所
URLリンク(rextester.com)
オンラインコンパイラ
URLリンク(ideone.com)
Google、KotlinをAndroidアプリ開発言語に選定
URLリンク(jp.techcrunch.com)
Library support for Kotlin coroutines
URLリンク(github.com)
3:デフォルトの名無しさん
18/12/09 14:57:10.33 rgDJoSoN.net
O2
4:デフォルトの名無しさん
18/12/11 17:55:58.71 ZdF1Nxsw.net
c#でasnc/awaitを学んだから、そのノリでhogeAsync : Defered<Int>とか量産してたがこれclassic wayで駄目なんだ。
コルーチンムズいぞ。
5:デフォルトの名無しさん
18/12/11 18:12:47.19 ZdF1Nxsw.net
今までクラス設計するとき、
class Hoge {
fun action1(): Deferred<Int> {
return GlobalScope.async() {}
}
fun cation2(): Deferred<String> {}
}
GlobalScopeなのはいずれどうにかしようととりあえず脇に置いといて、こう設計してたがダメっぽいな?
誰か詳しい人いないの?
6:デフォルトの名無しさん
18/12/11 20:17:24.17 6hR55q3c.net
class Hoge {
suspend fun action1(): Int = coroutineScope {
delay(2000)
return@coroutineScope 1
}
suspend fun cation2(): String = coroutineScope {
delay(3000)
return@coroutineScope "hoge"
}
}
7:デフォルトの名無しさん
18/12/11 21:33:56.96 m02gDU95.net
C#のasync = suspend って思っとけば大体おk
8:デフォルトの名無しさん
18/12/11 21:59:01.90 ZdF1Nxsw.net
async = suspendみたいのはだいたい分かるんだけど、>>6みたく、suspend関数を大量に用意するのがkotlinスタイルらしいんだけど、
じゃ、クラス設計するとき、誰がコルーチンビルダーでコルーチン作るの?って悩んでて。
例えば、「ライブラリ」として分割するケースを考えてみるとして、まず、REST APIを内部でたたいて結果を返すライブラリを作るとき、
class WebService {
suspend fun action1()
suspend fun action2()
}
みたく、全部suspend関数として外部にpublicなAPIとして公開するの??
9:デフォルトの名無しさん
18/12/11 22:05:51.76 ZdF1Nxsw.net
で、例えば、更に上のライブラリを内部で使って、キャッシュ機能だとかを提供するライブラリを作るとき、
(androidアプリの開発で見るRepositoryパターン)みたいなライブラリを作るときも
class Repository {
suspend fun action1() { webServcie.action1()など}
suspend fun action2()
}
で、やっぱsuspend関数を公開して、このライブラリを使ってつくるアプリで、
launch() {
repo.action1()
}
でここでコルーチンビルダーを使う??みたいな感じ?
10:デフォルトの名無しさん
18/12/11 22:13:49.36 ZdF1Nxsw.net
ちなみに>>6のcoroutineScope関数調べると、これ新しいスコープ作って呼び出し元からキャンセルできなくなるらしいから、キャンセルできるように
するには
class Hoge {
suspend fun action1(): Int {
delay(2000)
return 1
}
suspend fun cation2(): String {
delay(3000)
return "hoge"
}
}
でいいってことだよね?
11:デフォルトの名無しさん
18/12/11 23:19:00.56 ZdF1Nxsw.net
URLリンク(youtu.be)
見てたら、例でcoroutineScope使ってたな。
英語何言ってるか全然わからねぇけどw
Structured Concurrency云々。
>>6は相当なプロフェッショナルと見た。
12:デフォルトの名無しさん
18/12/12 12:16:15.38 ehb+zc+O.net
つkotlinx
13:デフォルトの名無しさん
18/12/12 13:12:24.30 XfY7kHOC.net
Crystalのスレどこ?
14:デフォルトの名無しさん
18/12/12 21:24:09.19 jSpBUsB/.net
非suspendも可能な場合に、suspend版と非suspend版を内部的に両方生成するオプションが欲しい
Kotlin/JS使ってるとJavaScriptのasyncより書きやすい(await相当がデフォだから)けど
それでももう一手欲しいところ
15:デフォルトの名無しさん
18/12/18 21:12:59.14 h6+jV75s.net
kotlinてJavaがなくてもwindowsとMacで動くの?
16:デフォルトの名無しさん
18/12/18 21:34:52.63 yrNJ9cJf.net
いけるいける
17:デフォルトの名無しさん
18/12/18 22:25:09.54 92SsvGE7.net
Kotlin Native なら、な。
18:デフォルトの名無しさん
18/12/19 09:00:14.59 PF0aHy1W.net
Kotlin/NativeならKotlinコンパイラもLLVMだけが必要でJavaいらないの?
19:デフォルトの名無しさん
18/12/19 09:45:25.24 ab3sNZA3.net
そうだよ
かわりに愛情と寛容と忍耐と妥協が必要
20:デフォルトの名無しさん
18/12/19 09:49:46.24 WO8V2g+e.net
>>18
ああ。要らなかったよ。やってみな。
21:デフォルトの名無しさん
18/12/19 21:31:55.75 /PJ/xgrD.net
いやコンパイラ自体には必要でしょ
初期実装は全部Javaで、今でもかなり残ってる
自社製品のIntelliJがJVM前提だし統合もあるからNativeでのセルフホスティングは目指してないと思うよ
22:デフォルトの名無しさん
18/12/20 00:01:10.39 hst6D+g/.net
やっとマジレスが出てくれて若干安心した
23:デフォルトの名無しさん
18/12/20 02:22:55.67 6pIAvd2J.net
やがてコンパイラ自体も Kotlin native でコンパイルできるようになって完全に Java 不要になると思う。
24:デフォルトの名無しさん
18/12/20 17:35:04.19 FuA72n5Z.net
やっと林檎ユーザーに
泥は処理遅くて草
とか言われなくて済むんだね!
25:デフォルトの名無しさん
18/12/20 19:18:48.12 Jom6rq0W.net
コンパイラをKotlin native でコンパイルできるようになるのは比較的早くできるだろうけど
IntellijみたいなGUIの総合開発環境をマルチプラットフォームで動かすのをJavaなしでやるのは大変だろう。
26:デフォルトの名無しさん
18/12/21 09:15:12.67 mfb3XB1u.net
GUIの部分が大変かもな
27:デフォルトの名無しさん
18/12/21 12:11:36.66 gjfGeuPx.net
やるメリットもないだろうからやらんだろうな
28:デフォルトの名無しさん
18/12/21 13:38:51.46 I/9gCApZ.net
ただでさえVSCodeに追われてヤバいのに余計なことしてる余裕ないだろ
29:デフォルトの名無しさん
18/12/21 13:49:31.79 QUmSfmQB.net
なんだかんだでJVMは長生きすると信じてる
30:デフォルトの名無しさん
18/12/21 15:27:32.04 Tphe8pyQ.net
長生きじゃなく、ただの延命処置だろ
31:デフォルトの名無しさん
18/12/21 15:30:24.56 mfb3XB1u.net
あ、そーだ。GUIはJavaScriptで書いてブラウザで実行させれば良い。
そのJavaScriptはKotlinのソースからコンパイルして作ったやつにすれば完璧。
32:デフォルトの名無しさん
18/12/21 22:14:57.05 8Iu4hnmd.net
アンケート入力の時間だ
URLリンク(blog.jetbrains.com)
33:デフォルトの名無しさん
18/12/21 22:59:54.90 /MQTzm2r.net
項目多いな
34:デフォルトの名無しさん
18/12/22 02:37:32.92 JnEveBkB.net
いつの間にかこんな入門書が出ていた。但し Kindle 版のみだ(unlimited の人は 0 円で読める)。
速習 Kotlin
URLリンク(amzn.asia)
35:デフォルトの名無しさん
18/12/25 06:47:43.66 1ThGctmt.net
メリーコトリン
36:デフォルトの名無しさん
18/12/25 11:17:10.24 yeWprDEr.net
つまんね
37:デフォルトの名無しさん
18/12/25 19:25:24.16 KSMuafeJ.net
爆笑
38:デフォルトの名無しさん
18/12/26 22:47:51.52 5ub5SAQR.net
>>37
無理に>>36にて対抗しなくていいからww
39:デフォルトの名無しさん
18/12/27 08:12:45.83 DJ5Bt1eh.net
kotlinのコルーチンビルダーに渡す中断関数がレシーバー付きなのを止めてほしい。
public fun CoroutineScope.launch(
context: CoroutineContext = EmptyCoroutineContext,
start: CoroutineStart = CoroutineStart.DEFAULT,
block: suspend CoroutineScope.() -> Unit
blockパラメータにレシーバつけるんじゃねぇよ。というもの、なんでコルーチンビルダーに渡すルートの中断関数だけCorotineScopeにアクセスできるんだよ。
ルート以外の中断関数からはアセクスできないのに。この非対称性というか特別扱いやめて。
40:デフォルトの名無しさん
18/12/27 08:17:42.92 DJ5Bt1eh.net
例えば、自分で定義した中断関数
suspend fun hoge() {
}
内ではCoroutineScopeにアクセスできない。CoroutineScopeではなくCoroutineContextにはcoroutineContext関数経由でアセクスできるが。
こういう一貫性のなさはやめてほしい。なんか意味があるのかもしれんが。
41:デフォルトの名無しさん
18/12/27 10:06:52.89 g57/YEyR.net
ここじゃなくて公式に言ってこいよ
42:デフォルトの名無しさん
18/12/27 23:27:31.48 r4GKgwJE.net
>>32のアンケートに自由記載の欄があるから、そこで言うことは可能。
43:デフォルトの名無しさん
18/12/27 23:47:52.20 hAo/rJSd.net
>>39 >>40
CoroutineScopeはキャンセルの伝搬と構造化のためにあって意図的にそうなってる
private funや全体制御クラスなどを除いては基本的に他所に渡しては駄目
渡された側がキャンセルすると子だけでなく親戚関係のものまで巻き込んでしまう
スコープ直下のブロックは保護者のような役割になるので
渡さずに↓のようにしてスコープをネスト構造にするべき
suspend fun hoge() = couroutineScope {
}
44:デフォルトの名無しさん
19/01/02 20:28:59.08 MMKJrJD0.net
あけましておめでとうございます
ことりんもよろしくお願いします
45:デフォルトの名無しさん
19/01/02 22:49:08.10 sDzpRBwn.net
え?
46:デフォルトの名無しさん
19/01/03 09:15:47.36 h/ELqUHS.net
山田さーん、>>44に座布団1枚持ってきて。
47:デフォルトの名無しさん
19/01/03 10:25:22.96 GKSM08/3.net
座り小便した奴を持って来ました
48:デフォルトの名無しさん
19/01/07 18:42:28.96 4PQEcpA5.net
supervisorScopeって上司っぽさがあるな