JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1531818027/
探検
Kotlin 5
■ このスレッドは過去ログ倉庫に格納されています
2018/12/08(土) 20:29:41.41ID:oXOQORcd
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
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なのはいずれどうにかしようととりあえず脇に置いといて、こう設計してたがダメっぽいな?
誰か詳しい人いないの?
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"
}
}
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として公開するの??
じゃ、クラス設計するとき、誰がコルーチンビルダーでコルーチン作るの?って悩んでて。
例えば、「ライブラリ」として分割するケースを考えてみるとして、まず、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()
}
でここでコルーチンビルダーを使う??みたいな感じ?
(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"
}
}
でいいってことだよね?
するには
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は相当なプロフェッショナルと見た。
見てたら、例で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相当がデフォだから)けど
それでももう一手欲しいところ
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でのセルフホスティングは目指してないと思うよ
初期実装は全部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なしでやるのは大変だろう。
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のソースからコンパイルして作ったやつにすれば完璧。
そのJavaScriptはKotlinのソースからコンパイルして作ったやつにすれば完璧。
2018/12/21(金) 22:14:57.05ID:8Iu4hnmd
2018/12/21(金) 22:59:54.90ID:/MQTzm2r
項目多いな
34デフォルトの名無しさん
2018/12/22(土) 02:37:32.92ID:JnEveBkB2018/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
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にアクセスできるんだよ。
ルート以外の中断関数からはアセクスできないのに。この非対称性というか特別扱いやめて。
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関数経由でアセクスできるが。
こういう一貫性のなさはやめてほしい。なんか意味があるのかもしれんが。
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
44デフォルトの名無しさん
2019/01/02(水) 20:28:59.08ID:MMKJrJD0 あけましておめでとうございます
ことりんもよろしくお願いします
ことりんもよろしくお願いします
2019/01/02(水) 22:49:08.10ID:sDzpRBwn
え?
2019/01/03(木) 09:15:47.36ID:h/ELqUHS
山田さーん、>>44に座布団1枚持ってきて。
2019/01/03(木) 10:25:22.96ID:GKSM08/3
座り小便した奴を持って来ました
2019/01/07(月) 18:42:28.96ID:4PQEcpA5
supervisorScopeって上司っぽさがあるな
2019/01/12(土) 11:30:26.17ID:ygc4MJ1X
お前の勤務成績は丸見えだから
2019/01/12(土) 12:51:17.46ID:IzmxBuIw
そもそもcoroutinrScopeを他に渡して何をするつもりなんだろう
用途が思いつかない
用途が思いつかない
51デフォルトの名無しさん
2019/01/14(月) 19:40:36.89ID:OowwBnZ2 「基本からしっかり身につくAndroidアプリ開発入門 Android Studio 3対応」
よく書いてあるようにサンプルが動かないんすけど、
あまりにも初心者過ぎてどこを直せばいいのかわからないっす。
Chapter 4のCalculatorで、正しいコードがわかる方いませんか?
val button = findViewById<Button>(R.id.calculate)
button.setOnClickListener {
var isValid = true
val priceEditText = findViewById<EditText>(R.id.price)
val priceText = priceEditText.text.toString()
if (priceText.isEmpty()) {
priceEditText.error = getString(R.string.price_error)
isValid = false
}
val discountEditText = findViewById<EditText>(R.id.discount)
val discountText = discountEditText.text.toString()
if (discountText.isEmpty()) {
discountEditText.error = getString(R.string.discount_error)
isValid = false
}
よく書いてあるようにサンプルが動かないんすけど、
あまりにも初心者過ぎてどこを直せばいいのかわからないっす。
Chapter 4のCalculatorで、正しいコードがわかる方いませんか?
val button = findViewById<Button>(R.id.calculate)
button.setOnClickListener {
var isValid = true
val priceEditText = findViewById<EditText>(R.id.price)
val priceText = priceEditText.text.toString()
if (priceText.isEmpty()) {
priceEditText.error = getString(R.string.price_error)
isValid = false
}
val discountEditText = findViewById<EditText>(R.id.discount)
val discountText = discountEditText.text.toString()
if (discountText.isEmpty()) {
discountEditText.error = getString(R.string.discount_error)
isValid = false
}
2019/01/14(月) 19:40:58.45ID:OowwBnZ2
>>51の続き
if (isValid) {
val price = priceText.toInt()
val discount = discountText.toInt()
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra("price", price)
intent.putExtra("discount", discount)
startActivity(intent)
}
}
if (isValid) {
val price = priceText.toInt()
val discount = discountText.toInt()
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra("price", price)
intent.putExtra("discount", discount)
startActivity(intent)
}
}
2019/01/14(月) 19:42:40.59ID:OowwBnZ2
>>51 遷移先のコードもエラーになります。
val extras = intent.extras ?: return
val price = extras.getInt("price", 0)
val discount = extras.getInt("discount", 0)
val expression = findViewById<TextView>(R.id.expression_label)
expression.text = getString(R.string.expression, price, discount)
val discountedPrice = price * (100 - discount) / 100
val discounted = findViewById<TextView>(R.id.result_label)
discounted.text = getString(R.string.result, discountedPrice)
val extras = intent.extras ?: return
val price = extras.getInt("price", 0)
val discount = extras.getInt("discount", 0)
val expression = findViewById<TextView>(R.id.expression_label)
expression.text = getString(R.string.expression, price, discount)
val discountedPrice = price * (100 - discount) / 100
val discounted = findViewById<TextView>(R.id.result_label)
discounted.text = getString(R.string.result, discountedPrice)
2019/01/14(月) 19:51:40.91ID:mSU16be8
まず大事なこととして
・正確に伝える
・切り分けをしていく
コンパイルエラーなのか実行時エラーなのか想定と違う動作なのか
エラーであればどのような内容か
想定と違うのであれば想定と実際の両方を具体的に
実行可能な場合はログ出力を追加するなどして問題の箇所を絞り込む
技術者は答えより答えの出し方を知る方が大切
・正確に伝える
・切り分けをしていく
コンパイルエラーなのか実行時エラーなのか想定と違う動作なのか
エラーであればどのような内容か
想定と違うのであれば想定と実際の両方を具体的に
実行可能な場合はログ出力を追加するなどして問題の箇所を絞り込む
技術者は答えより答えの出し方を知る方が大切
2019/01/14(月) 19:54:33.86ID:OowwBnZ2
>>54
コンパイルエラーです
コンパイルエラーです
2019/01/14(月) 20:14:29.56ID:pDL52XEr
AndroidStudio使っててどこがコンパイルエラーかわからないとかあんの?
2019/01/14(月) 21:06:42.85ID:eurbvKP4
まあぶっちゃけると「エラーが出て動かない」以上のことがさっぱりわからんことはあるにはある
IDEが表示するエラーが理解できるくらいならそもそも入門書など読まんw
IDEが表示するエラーが理解できるくらいならそもそも入門書など読まんw
2019/01/14(月) 21:23:28.22ID:fiLCWGOz
>>55
なぜエラーメッセージを読まないのか。せめて貼り付けろ
なぜエラーメッセージを読まないのか。せめて貼り付けろ
59デフォルトの名無しさん
2019/01/15(火) 00:32:52.94ID:pIHkTAGg Rなんとかは定義したの?
2019/01/15(火) 01:25:57.81ID:tO821mqa
2019/01/15(火) 01:38:02.87ID:VjJwW0bc
>>59
あー文字定義してないのはいかにもありそうだな
あー文字定義してないのはいかにもありそうだな
62デフォルトの名無しさん
2019/01/15(火) 11:17:38.84ID:uh3dx1w7 >>59
Rって、解説書でも唐突に出てくるんすけど、何を定義すればいいの?
Rって、解説書でも唐突に出てくるんすけど、何を定義すればいいの?
2019/01/15(火) 13:47:19.17ID:1CaYwh4e
まずエラーメッセージを貼れ
2019/01/15(火) 14:15:39.24ID:pzxobvn7
2019/01/15(火) 15:05:34.53ID:uh3dx1w7
>>64 dくす
エラーメッセージはたくさんありすぎて貼れないから貼ってない
とりあえず自宅に戻ってからまた再現させる
てゆーか、この程度のコードでバグる奴がなんで解説書を出版社から出せるんだよ
まともな解説書ってないのかよ
尼見るともう一冊のほうもサンプルが動かんと書かれていて読む本がない
エラーメッセージはたくさんありすぎて貼れないから貼ってない
とりあえず自宅に戻ってからまた再現させる
てゆーか、この程度のコードでバグる奴がなんで解説書を出版社から出せるんだよ
まともな解説書ってないのかよ
尼見るともう一冊のほうもサンプルが動かんと書かれていて読む本がない
2019/01/15(火) 16:58:26.54ID:1CaYwh4e
サンプルコードがビルドできたからって何なんだ
そんなの目的にしても意味ない。必要な知識が吸収できればいいわけで。
サンプルコードをそのままビルドするアプローチじゃなく、
一旦空のプロジェクトを新規作成してそこに追加して動作確認するアプローチの方が
勉強になると思うけどなあ
そんなの目的にしても意味ない。必要な知識が吸収できればいいわけで。
サンプルコードをそのままビルドするアプローチじゃなく、
一旦空のプロジェクトを新規作成してそこに追加して動作確認するアプローチの方が
勉強になると思うけどなあ
2019/01/15(火) 17:03:39.16ID:1CaYwh4e
新規作成しただけの状態なら確実にビルドが通るわけで
どこまでサンプルコードに近づいたら
エラーが出るのか問題も切り分けやすい
こういうのはもうAndroid関係ないし向いてないからしね
どこまでサンプルコードに近づいたら
エラーが出るのか問題も切り分けやすい
こういうのはもうAndroid関係ないし向いてないからしね
2019/01/15(火) 17:21:56.05ID:3lh9jTue
Androidアプリは「初心者の人に書籍通じて独学で覚えさせるのめんどくさいプログラミング技術ランキング」のベスト3常連だからな
なにせファイル1個やコマンド1発で収まらない
なにせファイル1個やコマンド1発で収まらない
2019/01/15(火) 18:24:55.36ID:yTRP/eqO
エラーの見方も分からないレベルでいきなりAndroid本は飛ばしすぎだな
2019/01/15(火) 23:41:09.53ID:620Eb35B
途中コメントアウトしてなんとか動いた
スマン、今日は時間切れ
最後、isEmpty()なんて使えないよ、と言われてたような・・・
続きはまた明日
スマン、今日は時間切れ
最後、isEmpty()なんて使えないよ、と言われてたような・・・
続きはまた明日
2019/01/16(水) 11:02:30.64ID:aTgtPKRZ
2019/01/16(水) 11:03:16.52ID:aTgtPKRZ
>>64 だった
ごめん
ごめん
73デフォルトの名無しさん
2019/01/16(水) 11:34:03.94ID:vTKVQdGX 馬鹿には無理
2019/01/16(水) 13:16:59.84ID:NBiSBr9E
入門者は10年ROMってろ
2019/01/16(水) 15:02:59.73ID:c12bWRnm
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「脅迫だ」国分太一に同情論 音声データ削除要求など日テレの対応を疑問視する声ネットに噴出「それこそコンプラ違反では」★2 [muffin★]
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★3 [ごまカンパチ★]
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… ★2 [BFU★]
- 生クリームだけの真っ白なクリスマスケーキ 大手メーカーが販売、その理由は…フルーツなしで価格は半額以下に ★3 [おっさん友の会★]
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★5 [Ailuropoda melanoleuca★]
- 『水ダウ』年内は「名探偵津田」一色 藤井健太郎氏が報告 未公開"長袖"SP&第4話前編・後編とも90分SP [muffin★]
- まったりまったりおじゃる丸待機スレ🏡
- 【ゼイ】日本の税収がぐんぐん増加!たった3年で10兆円増加し、ついに80兆円を超える!日本の未来は世界羨むバラ色に [219241683]
- 長谷川亮太 ちばけんま 唐澤貴洋 無能弁護士
- 想像以上に国力の衰退、人口減少、高齢化、インフレ、物価高、インフラ崩壊進んでるけど、逃げ切れるだろうか [943688309]
- 高市応援団「都合よく解釈するな」「撤回すると言ってない」「中国と断交」「撤回する必要ない」「答弁変わってない」「武力行使しろ」 [931948549]
- ヤンジャン新人漫画大賞、入賞作品のAI絵疑惑で大荒れ😄😄😄 高市早苗要素あり [175344491]
