Kotlin 5

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

※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1531818027/
2018/12/08(土) 20:32:31.24ID:oXOQORcd
公式サイト
https://kotlinlang.org/
公式ブログ
https://blog.jetbrains.com/kotlin
コードを貼れる所
http://rextester.com/l/kotlin_online_compiler
オンラインコンパイラ
https://ideone.com/

Google、KotlinをAndroidアプリ開発言語に選定
http://jp.techcrunch.com/2017/05/18/20170517google-makes-kotlin-a-first-class-language-for-writing-android-apps/
Library support for Kotlin coroutines
https://github.com/Kotlin/kotlinx.coroutines
3デフォルトの名無しさん
垢版 |
2018/12/09(日) 14:57:10.33ID:rgDJoSoN
O2
2018/12/11(火) 17:55:58.71ID:ZdF1Nxsw
c#でasnc/awaitを学んだから、そのノリでhogeAsync : Defered<Int>とか量産してたがこれclassic wayで駄目なんだ。
コルーチンムズいぞ。
2018/12/11(火) 18:12:47.19ID:ZdF1Nxsw
今までクラス設計するとき、
class Hoge {
 fun action1(): Deferred<Int> {
  return GlobalScope.async() {}
 }
 fun cation2(): Deferred<String> {}
}
GlobalScopeなのはいずれどうにかしようととりあえず脇に置いといて、こう設計してたがダメっぽいな?
誰か詳しい人いないの?
2018/12/11(火) 20:17:24.17ID:6hR55q3c
class Hoge {
suspend fun action1(): Int = coroutineScope {
delay(2000)
return@coroutineScope 1
}

suspend fun cation2(): String = coroutineScope {
delay(3000)
return@coroutineScope "hoge"
}
}
2018/12/11(火) 21:33:56.96ID:m02gDU95
C#のasync = suspend って思っとけば大体おk
2018/12/11(火) 21:59:01.90ID:ZdF1Nxsw
async = suspendみたいのはだいたい分かるんだけど、>>6みたく、suspend関数を大量に用意するのがkotlinスタイルらしいんだけど、
じゃ、クラス設計するとき、誰がコルーチンビルダーでコルーチン作るの?って悩んでて。
例えば、「ライブラリ」として分割するケースを考えてみるとして、まず、REST APIを内部でたたいて結果を返すライブラリを作るとき、
class WebService {
 suspend fun action1()
 suspend fun action2()
}
みたく、全部suspend関数として外部にpublicなAPIとして公開するの??
2018/12/11(火) 22:05:51.76ID:ZdF1Nxsw
で、例えば、更に上のライブラリを内部で使って、キャッシュ機能だとかを提供するライブラリを作るとき、
(androidアプリの開発で見るRepositoryパターン)みたいなライブラリを作るときも
class Repository {
 suspend fun action1() { webServcie.action1()など}
 suspend fun action2()
}
で、やっぱsuspend関数を公開して、このライブラリを使ってつくるアプリで、
launch() {
repo.action1()
}
でここでコルーチンビルダーを使う??みたいな感じ?
2018/12/11(火) 22:13:49.36ID:ZdF1Nxsw
ちなみに>>6のcoroutineScope関数調べると、これ新しいスコープ作って呼び出し元からキャンセルできなくなるらしいから、キャンセルできるように
するには
class Hoge {
suspend fun action1(): Int {
delay(2000)
return 1
}

suspend fun cation2(): String {
delay(3000)
return "hoge"
}
}
でいいってことだよね?
2018/12/11(火) 23:19:00.56ID:ZdF1Nxsw
https://youtu.be/9HUFo4WyDPI?t=2178
見てたら、例でcoroutineScope使ってたな。
英語何言ってるか全然わからねぇけどw
Structured Concurrency云々。
>>6は相当なプロフェッショナルと見た。
2018/12/12(水) 12:16:15.38ID:ehb+zc+O
つkotlinx
2018/12/12(水) 13:12:24.30ID:XfY7kHOC
Crystalのスレどこ?
2018/12/12(水) 21:24:09.19ID:jSpBUsB/
非suspendも可能な場合に、suspend版と非suspend版を内部的に両方生成するオプションが欲しい
Kotlin/JS使ってるとJavaScriptのasyncより書きやすい(await相当がデフォだから)けど
それでももう一手欲しいところ
15デフォルトの名無しさん
垢版 |
2018/12/18(火) 21:12:59.14ID:h6+jV75s
kotlinてJavaがなくてもwindowsとMacで動くの?
2018/12/18(火) 21:34:52.63ID:yrNJ9cJf
いけるいける
17デフォルトの名無しさん
垢版 |
2018/12/18(火) 22:25:09.54ID:92SsvGE7
Kotlin Native なら、な。
2018/12/19(水) 09:00:14.59ID:PF0aHy1W
Kotlin/NativeならKotlinコンパイラもLLVMだけが必要でJavaいらないの?
2018/12/19(水) 09:45:25.24ID:ab3sNZA3
そうだよ
かわりに愛情と寛容と忍耐と妥協が必要
20デフォルトの名無しさん
垢版 |
2018/12/19(水) 09:49:46.24ID:WO8V2g+e
>>18
ああ。要らなかったよ。やってみな。
2018/12/19(水) 21:31:55.75ID:/PJ/xgrD
いやコンパイラ自体には必要でしょ
初期実装は全部Javaで、今でもかなり残ってる
自社製品のIntelliJがJVM前提だし統合もあるからNativeでのセルフホスティングは目指してないと思うよ
2018/12/20(木) 00:01:10.39ID:hst6D+g/
やっとマジレスが出てくれて若干安心した
23デフォルトの名無しさん
垢版 |
2018/12/20(木) 02:22:55.67ID:6pIAvd2J
やがてコンパイラ自体も Kotlin native でコンパイルできるようになって完全に Java 不要になると思う。
2018/12/20(木) 17:35:04.19ID:FuA72n5Z
やっと林檎ユーザーに
泥は処理遅くて草
とか言われなくて済むんだね!
2018/12/20(木) 19:18:48.12ID:Jom6rq0W
コンパイラをKotlin native でコンパイルできるようになるのは比較的早くできるだろうけど
IntellijみたいなGUIの総合開発環境をマルチプラットフォームで動かすのをJavaなしでやるのは大変だろう。
26デフォルトの名無しさん
垢版 |
2018/12/21(金) 09:15:12.67ID:mfb3XB1u
GUIの部分が大変かもな
2018/12/21(金) 12:11:36.66ID:gjfGeuPx
やるメリットもないだろうからやらんだろうな
2018/12/21(金) 13:38:51.46ID:I/9gCApZ
ただでさえVSCodeに追われてヤバいのに余計なことしてる余裕ないだろ
2018/12/21(金) 13:49:31.79ID:QUmSfmQB
なんだかんだでJVMは長生きすると信じてる
2018/12/21(金) 15:27:32.04ID:Tphe8pyQ
長生きじゃなく、ただの延命処置だろ
31デフォルトの名無しさん
垢版 |
2018/12/21(金) 15:30:24.56ID:mfb3XB1u
あ、そーだ。GUIはJavaScriptで書いてブラウザで実行させれば良い。
そのJavaScriptはKotlinのソースからコンパイルして作ったやつにすれば完璧。
2018/12/21(金) 22:14:57.05ID:8Iu4hnmd
アンケート入力の時間だ
https://blog.jetbrains.com/kotlin/2018/12/kotlin-census-2018/
2018/12/21(金) 22:59:54.90ID:/MQTzm2r
項目多いな
34デフォルトの名無しさん
垢版 |
2018/12/22(土) 02:37:32.92ID:JnEveBkB
いつの間にかこんな入門書が出ていた。但し Kindle 版のみだ(unlimited の人は 0 円で読める)。

速習 Kotlin
http://amzn.asia/d/0ZiG6rB
2018/12/25(火) 06:47:43.66ID:1ThGctmt
メリーコトリン
36デフォルトの名無しさん
垢版 |
2018/12/25(火) 11:17:10.24ID:yeWprDEr
つまんね
37デフォルトの名無しさん
垢版 |
2018/12/25(火) 19:25:24.16ID:KSMuafeJ
爆笑
2018/12/26(水) 22:47:51.52ID:5ub5SAQR
>>37
無理に>>36にて対抗しなくていいからww
2018/12/27(木) 08:12:45.83ID:DJ5Bt1eh
kotlinのコルーチンビルダーに渡す中断関数がレシーバー付きなのを止めてほしい。
public fun CoroutineScope.launch(
 context: CoroutineContext = EmptyCoroutineContext,
 start: CoroutineStart = CoroutineStart.DEFAULT,
 block: suspend CoroutineScope.() -> Unit
blockパラメータにレシーバつけるんじゃねぇよ。というもの、なんでコルーチンビルダーに渡すルートの中断関数だけCorotineScopeにアクセスできるんだよ。
ルート以外の中断関数からはアセクスできないのに。この非対称性というか特別扱いやめて。
2018/12/27(木) 08:17:42.92ID:DJ5Bt1eh
例えば、自分で定義した中断関数
suspend fun hoge() {
}
内ではCoroutineScopeにアクセスできない。CoroutineScopeではなくCoroutineContextにはcoroutineContext関数経由でアセクスできるが。
こういう一貫性のなさはやめてほしい。なんか意味があるのかもしれんが。
2018/12/27(木) 10:06:52.89ID:g57/YEyR
ここじゃなくて公式に言ってこいよ
2018/12/27(木) 23:27:31.48ID:r4GKgwJE
>>32のアンケートに自由記載の欄があるから、そこで言うことは可能。
2018/12/27(木) 23:47:52.20ID:hAo/rJSd
>>39 >>40
CoroutineScopeはキャンセルの伝搬と構造化のためにあって意図的にそうなってる
private funや全体制御クラスなどを除いては基本的に他所に渡しては駄目

渡された側がキャンセルすると子だけでなく親戚関係のものまで巻き込んでしまう

スコープ直下のブロックは保護者のような役割になるので
渡さずに↓のようにしてスコープをネスト構造にするべき
suspend fun hoge() = couroutineScope {
}
44デフォルトの名無しさん
垢版 |
2019/01/02(水) 20:28:59.08ID:MMKJrJD0
あけましておめでとうございます
ことりんもよろしくお願いします
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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