Kotlin 3

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/03/19(月) 04:26:26.03ID:GqsfT9Tb
JetBrainsが開発した期待の新言語Kotlinについて語りましょう
https://kotlinlang.org

前スレ
Kotlin 2
https://mevius.5ch.net/test/read.cgi/tech/1509462463/
752デフォルトの名無しさん
垢版 |
2018/07/04(水) 04:50:43.63ID:deFmQ17L
スレ違いの
2018/07/04(水) 04:54:54.94ID:/r54tfMO
コトリヌス
2018/07/04(水) 07:37:22.00ID:QS1wdrQw
>>751
だからKotlinで書けよ
自動変換は完璧じゃない
2018/07/04(水) 07:37:52.39ID:K6PpspCw
基礎からやっていくか、状況をちゃんと説明出来るようになるか
2018/07/04(水) 07:42:41.16ID:d8xWcdxC
初心者でせっかくだらjavaよりも新しいkotlinでやろうと勉強中なんだけど、結局javaも知らんといかんのね…
2018/07/04(水) 07:54:41.64ID:qSU3AFLq
「こんぱいるとおりません」は実際なんも説明してねーからな

で、「ほんとうに」全部自分でゼロから作るならJavaの知識は不要なのだけど
実際はJavaの内部ライブラリやJava製の外部ライブラリを利用するorさせられることが多いので
Javaは少なくとも読めて呼び出し法くらいは知っておかないと現状余裕で詰まる
2018/07/04(水) 08:34:41.84ID:dJOGt5Qc
普通に、コンストラクタの引数がちがうか、importしてないか、importするための設定をbuild.gradleに書いてないかだろ
2018/07/04(水) 08:39:44.33ID:hww1W9rh
ああそのレベルならimportしてないが有力だな、確かにw
2018/07/04(水) 08:42:59.27ID:bgzrJhKa
ビルド通ったやついるん?
2018/07/04(水) 10:08:54.78ID:lcEaonpe
importしてないならその前でコケるだろjk
sdkのバージョン違いじゃないの?
2018/07/04(水) 10:40:04.79ID:dJOGt5Qc
build.gradleのandroid {} のなかに dataBinding { enable = true } 書いて、ObservableField のとこで Alt + Enter すれば、必要なimport が追加されたよ
2018/07/04(水) 11:34:18.64ID:Fv6I2084
return context.getResources().getString(R.string.name, first.get, last.get();
ここの行のfirst.getもfirst.get()のはずだし、公式のサンプルコードがおかしいんじゃねえの
2018/07/04(水) 11:39:55.59ID:PJj9ZCzu
>>747
ありがとうございました!
2018/07/04(水) 14:18:24.41ID:6R9abQ63
kotlinはネット投稿越しの説明デバッグが面倒くさい…
766デフォルトの名無しさん
垢版 |
2018/07/04(水) 15:27:56.70ID:hVA06Lo9
>>722に書いたやつはできないがこういうのはできるのな。

val (a, b, c, d, e) = listOf(1, 2, 3, 4, 5)

ただし5つまで。理由は component1() 〜 component5() を使うため。
767デフォルトの名無しさん
垢版 |
2018/07/04(水) 16:47:52.07ID:n4h9hTEh
はい
https://goo.gl/k4ehdm
2018/07/04(水) 19:03:02.55ID:Uqt21yY2
>>767
グロ
2018/07/04(水) 19:20:22.52ID:dJOGt5Qc
>>765
kotlin はテキストのコピペで説明できるから簡単じゃね?
VS使ってるとスクリーンショット使わないと説明できないこと多くて大変
2018/07/04(水) 19:41:26.22ID:yHhNx3G5
>>769
>VS使ってるとスクリーンショット使わないと説明できないこと多くて大変
たとえば?
2018/07/04(水) 21:42:39.79ID:KFDu9ptB
それもまたスクリーンショットを使わないと説明できないのです。
772デフォルトの名無しさん
垢版 |
2018/07/04(水) 21:47:17.49ID:gFgZc5FG
9MT
773デフォルトの名無しさん
垢版 |
2018/07/05(木) 06:52:07.84ID:3UdVdS3q
つまりVSは抽象概念だった?
2018/07/05(木) 18:11:14.13ID:1+w/aSOe
JVM系でのことりんのポジションって.Net系だと何になるの?
2018/07/05(木) 18:25:29.62ID:em8VdMHP
すみません。ラムダ式について質問させてください。
純粋にkotlinじゃなくてすみません。

import kotlin.concurrent.*
fun main(args:Array<String>){
var a1=Pn("A")
var a2=Pn("B")
var a3=Pn("C")

thread{a1.en()}
thread{a2.en()}
thread{a3.en()}
}

class Pn(nm:String){
fun en(){
for(i in 1..5){
println("${nm}:${i}")
}
}
}

thread{a1.en()}の波括弧内はラムダ式ということなのですが、
もともとの関数の記述って、どんな記述になりますか?
a1:Pn->a1.eat()
とかですか?
776デフォルトの名無しさん
垢版 |
2018/07/05(木) 18:48:07.71ID:9m4qXusF
質問の意味がわからない
2018/07/05(木) 19:37:20.63ID:gU4M+kls
>>775
いや、そのラムダは引数に何も受け取ってないよ

クロージャになってて外側のa1とかの変数をキャプチャしてるだけ

JavaScriptとかの書き方で言えば
() => { a1.en() }
みたいな感じ
2018/07/05(木) 20:08:46.41ID:bx98WRX+
クロージャ使うのは一苦労じゃ
779デフォルトの名無しさん
垢版 |
2018/07/05(木) 20:17:49.90ID:9m4qXusF
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u’. `u-u’
2018/07/05(木) 20:57:09.18ID:n+w19a7Z
>>775

fun lambda1() {
 return a1.en()
}

thread( lambda1 )
2018/07/05(木) 22:45:45.28ID:zhHpKoz0
コチン星は他に転用できないでしょ
Javaは何にでも使える
コチン星がそうなったら移住してやんよ
2018/07/05(木) 22:54:46.98ID:gU4M+kls
逆なんだよなあ
2018/07/05(木) 22:58:33.72ID:y9cLPe3E
現実には逆だね
Kotlin使ってるような奴はJavaはもちろん他にも複数の言語使える
2018/07/06(金) 07:14:19.59ID:BcpJI+Hp
今kotlin使ってるやつはJavaとSwiftは書けそうだよな
あと聞くところによるとずっとRuby使ってたweb系の人たちの間でkotlinの人気があるらしい
2018/07/06(金) 08:51:02.46ID:8OYGWEQ0
KotlinとSwiftは似ているから
iOSとAndroidでお互いのコードを参考にしやすいという点でも
Kotlinを使ったほうが良いよね
2018/07/06(金) 09:06:38.50ID:QElqX86J
>>777
>>780
ありがとうございました!
納得できました。またよろしくお願いします!感謝です
2018/07/06(金) 09:16:06.34ID:mA2hlx7s
>>785
うちはまさにそれでやってる。
細かい違いはあれど、両者で大体同じ感じに作れるからだいぶ生産性が上がる。
2018/07/06(金) 09:32:23.49ID:abpU4SXk
「あれをああいうふうにつくりたい」で片方が概念から違うコード塊だとめげるものね
せめて見る方向は一緒でないと困る
2018/07/06(金) 09:39:15.11ID:M3cpa2kA
Kotlin, Swift, TypeScript, C#あたりはいいかげん合体して一つになれよとは思う
似たような言語増えすぎ
2018/07/06(金) 09:58:03.13ID:HP0oeisi
アーキテクチャもMVVMで統一しておくとさらにいいね
2018/07/06(金) 10:37:25.30ID:SXzPAxPV
合体して!
2018/07/06(金) 10:43:05.75ID:zksWstCG
>>784
ruby の特徴が groovy 経由で kotlin にとりこまれてるからねぇ
2018/07/06(金) 10:50:59.18ID:dSjMYi7e
まあHello Worldレベルならどれも大差ないよね
2018/07/06(金) 11:30:17.98ID:2AM7zbcj
>>788
一度作って終わりなら何でもいいけど、機能追加やらメンテやら考えたら極力設計レベルで近づけておきたいからね。
俺は経験ないけどObjectiveCとJAVAでこれやってた人たちほんとすごい。
795デフォルトの名無しさん
垢版 |
2018/07/06(金) 13:21:00.56ID:49COMX7t
Ruby由来の特徴って?
Pythonから取ってきたようなのはちらほらあるけど。
2018/07/06(金) 13:28:11.07ID:nxtJThkD
信者の布教
2018/07/06(金) 13:44:46.19ID:q/ghlqNX
>>795
なんでもかんでもそれで実装しようとして一応作り上げ公開はするもののメンテできず放置するムラ気の情熱
2018/07/06(金) 14:05:18.34ID:LdCqv7/c
>>795
ヒント:ワシが育てた
799デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:32:07.66ID:kKlMDWU3
>>798
いいや、わしが育てた。
2018/07/06(金) 15:58:16.16ID:zvJYjc+f
kotlin配列めんどくさすぎwwwwワロタwwwww
2018/07/06(金) 16:02:32.49ID:zksWstCG
>>795
Kotlin 公式のこのページなんだけど
https://kotlinlang.org/docs/reference/type-safe-builders.html
むかしは Type-Safe Groovy-Style Builders と呼ばれてた
https://github.com/JetBrains/kotlin-web-site/commit/2ed39c423cb7924538551f6fe9a600a333300bb9#diff-67d5deb10a27f44d364720fd321bc192
ドキュメントは修正されちゃったけど、機能が修正されたわけじゃない
lambdaを { } で書くのとか、カッコの外に出せるのとか、これ実現するために必須
2018/07/06(金) 16:15:00.75ID:CcG3LQ04
Kotolinて変数にプリミティブ型が無いけど、
画像処理とか大量にデータ処理すると、Javaより遅くならない?
2018/07/06(金) 16:28:27.50ID:zksWstCG
>>802
ByteArray使えばよいでしょう
2018/07/06(金) 17:00:50.17ID:CcG3LQ04
>>803
配列はDoubleArrayとかあるのね
bit演算はushrがあるから、Javaより見易そう(Javaの>>>と>>が見辛過ぎ)なのがいいな
そろそろ切り替える踏ん切りがつきそうになった、ありがとう
2018/07/06(金) 20:20:35.42ID:AbsrypZ1
>>802
プリミティブに出来るものは勝手にプリミティブになる

Kotlinの
  fun f1(a:Int, b:Int?, c:List<Int>){}
はJavaでの
  void f1(int a, Integer b, List<Integer> c){}
になる

https://kotlinlang.org/docs/reference/basic-types.html#representation
806デフォルトの名無しさん
垢版 |
2018/07/06(金) 21:01:12.71ID:g8uAR+7L
プリミティブ型がなくてもうまいこと最適化されてだいたいは問題なくなるのではないかな?
807デフォルトの名無しさん
垢版 |
2018/07/06(金) 21:02:17.37ID:g8uAR+7L
うう。リロードし忘れてたらかぶった。
2018/07/06(金) 22:24:17.82ID:QG6T2BVC
>>805-806
Javaのラッパー型とか考え無くていいのか
上手く出来ているんだな
2018/07/06(金) 23:30:21.00ID:4Ugvbwaw
ByteArrayとかIntArrayはJavaの呪い
2018/07/06(金) 23:33:34.92ID:gLP4VBNq
えっと
2018/07/07(土) 07:47:51.03ID:uYnOjfeF
>>809
何でそう思う?
2018/07/07(土) 08:02:53.54ID:1JBcciC6
>>809
ほんとそう
2018/07/07(土) 19:26:53.37ID:XhDuF4YP
data classのcopy()というメソッドは
新しいインスタンスを作るの?
それともインスタンス変数を書き換えるの?
2018/07/07(土) 20:07:44.59ID:LTqMROwD
>>813
新しいインスタンスを作るよ
その際に新しいインスタンスに対してプロパティの差し替えを指定できる
2018/07/07(土) 20:15:10.40ID:VybllwrG
イミュータブルデータ
2018/07/07(土) 22:09:42.29ID:XhDuF4YP
>>814
そうですかコピるんですね、インスタンスはイミューダブルだから


ところでデリゲートって何ですか?
2018/07/07(土) 22:10:48.19ID:uYnOjfeF
>>816
繊細とか壊れやすいとか、そういう意味だよ
2018/07/07(土) 23:35:57.76ID:Ty8z3s6n
それはフラジャイルだろ!
2018/07/07(土) 23:38:31.93ID:qgEX9CeR
小麦粉のこと?
2018/07/08(日) 00:50:39.49ID:Ju8r78kR
Androidにはデリゲートなんて用語はない
2018/07/08(日) 00:55:04.92ID:sfogbTE4
>>816

data class のインスタンスはイミュータブルに作ることもできるけど
別にイミュータブルな保証ないよ
普通に var プロパティ宣言できるし
2018/07/08(日) 04:35:49.01ID:PDRntQm6
>>818
デリケートだろとつっこむところ?
>>816
クラスAを継承したクラスBを作るときに、継承を使う代わりに、クラスB内にクラスAのインスタンスを持たせて、
クラスBにおけるクラスAのAPI実装をそのインスタンスに丸投げすること。
インターフェースしか定義されておらず、インスタンスはヘルパークラスからしか作れないような場合に便利。
2018/07/08(日) 08:39:29.95ID:A+oeHsIU
>>816
デリゲートは手動で書く手間を減らす機能だし
動作分かってないと初学者にとって混乱の元だから
「委譲書くの面倒」と思うようになるまで使わなくていい

仕様を知っておきたいならbyキーワードの具体例をググって読むべき
2018/07/08(日) 08:53:04.34ID:GTRmE3gZ
よくあるのは破壊的操作だけ決まった手順でやりたい可変リスト

内部に可変リストを持たせてListインターフェースをこの可変リストに委譲しつつ、
破壊的操作をするメソッドは自分で実装する
2018/07/08(日) 13:09:11.90ID:I8JQ03ez
デリゲートゾーンの痒みにデリケア
2018/07/09(月) 15:42:24.09ID:k14wcRqL
2次元配列てどうやって作るの?
ググっても、一次元配列の説明しかないんだけど
2018/07/09(月) 16:07:50.43ID:HEVR++FY
「Kotlin 多次元配列」とかでググれば出てくるけど、もっと簡単に作れるようにしてほしいよな
Kotlinはコレクション周りが面倒
2018/07/09(月) 16:22:32.46ID:uw3CHAwx
ありがとう!多次元配列ででました
リストの中のリストみたいな作り方しかできないんですね
2018/07/09(月) 16:25:07.73ID:a7X8gOns
Java11で多次元配列が追加されるっぽいし
そのとき一緒にKotlinにも追加されるんじゃないかな
2018/07/09(月) 19:41:02.60ID:2W9i2TNQ
>>828
でもそれは多次元配列ではないからな
全世界から激しくツッコミ入るからな
「ネストした配列」とかきちんと表現しよう
2018/07/09(月) 19:42:26.58ID:CMpb5of+
本当の多次元配列とネストした配列の違いってなんなの
2018/07/09(月) 19:59:47.17ID:upwaJxXn
だっちゅーの
2018/07/09(月) 20:40:00.23ID:2EXLNjt4
>>831
配列の配列: n個入る内箱をm個並べて入れた外箱、実際には内箱に入る数はそれぞれ違うこともある
二次元配列: 最初からn*mで仕切られた箱

得意なこと、苦手なことも、箱を入れた箱と最初から全部仕切られた箱の関係と似ている

Java自体が真性の多次元配列ないからKotlinにもないんじゃね
ScalaとかGroovyにも真性の多次元配列はないのだろう
2018/07/09(月) 20:55:27.19ID:CMpb5of+
それって、メモリは所詮一次元だけど
n×mの連続領域確保して[][]でアクセスできるインターフェース提供できれば二次元配列って言えるってこと?
ポインタの配列にしなければいいってことかな??
835デフォルトの名無しさん
垢版 |
2018/07/09(月) 20:56:07.10ID:NIgnyVo4
多次元配列みたいにアクセスできるクラス作って中で一次元配列を全容素数作ってアクセスする時に n * y + x のように計算してアクセスするの作れば、まあなんとなく気分を味わう事はできるな。
あとはうまいこと最適化されて効率よくなる事を祈るのみ。
836デフォルトの名無しさん
垢版 |
2018/07/09(月) 20:57:03.20ID:NIgnyVo4
うう。リロードしてなかったらなんとなく内容が被った。orz
2018/07/09(月) 21:13:13.46ID:2EXLNjt4
>>834
おおむねそういうこと
配列の配列は縦方向と横方向でアクセスのコストが違うとか
多次元配列は、行をまるごと取り出そうとすると新規に配列を作る必要があるとか、違いがいろいろある

Kotlinに真性の多次元配列はないけど、仮にあったらイテレーションする時も変わってくるはず。

for (item in twoDimesionalArray) { println(item) }

for (innerArray in arrayOfArray) {
for (item in innerArray) { println(item) }
}
2018/07/09(月) 22:15:19.94ID:NSgi36DG
普通のプログラミングよりPythonのnumpyとかMATLABとか科学技術計算やってた人はイメージしやすいかもね
2018/07/09(月) 23:30:34.66ID:1ah1GiNN
マンピー?
2018/07/10(火) 00:37:38.55ID:lPJyrY2R
>>837
なるほどありがとう
2018/07/10(火) 06:58:10.69ID:IxsE6k10
>>839
なるほどありがとう
2018/07/10(火) 07:38:02.37ID:LbQkaO6y
ほとんどの言語は、配列の配列(jaggy 配列)だろ

表で言えば、同じ行内の列データは連続しているけど、
各行のデータは連続していない

1行目の各列は連続しているけど、
1行目と2行目は、別の場所にある
2018/07/10(火) 08:14:20.19ID:UVYr8NpU
計算コストを度外視すれば多次元配列でできることは大抵配列の配列で実現できるから、そこまで気にする必要はないんだけどね
2018/07/10(火) 09:17:54.93ID:xdf1qrhG
さも重大事のように煽っといてなんだその結論は
2018/07/10(火) 11:02:23.47ID:4/WJyavM
まあよっぽどカリッカリのパフォーマンスを求められるシビアな要件じゃない限りいらんわな
もしその差がそんなに重要ならとっくに色々な言語で実装されてる
2018/07/10(火) 14:19:24.23ID:nhRVi4l7
tensorkotlin
2018/07/10(火) 22:11:35.45ID:y/3n5Cpu
>>834が言ってる通りで
糖衣構文的なものがあるかどうか程度の差

パフォーマンスが必要な部分はハードウェアアクセラレーションのため
java.awt.imageみたいにAPI経由するからDSL表現力さえあれば後はライブラリの役割
2018/07/11(水) 06:23:53.16ID:xk2F4E8W
配列は一次元、嫁は二次元だからそれぞれ1つずつ次元が上がって欲しい。
2018/07/11(水) 09:10:45.05ID:A6luu057
現在三次元の嫁はどうなりますか
850デフォルトの名無しさん
垢版 |
2018/07/11(水) 09:18:11.28ID:/4kd3SWK
3次元嫁は都市伝説
2018/07/11(水) 09:29:45.16ID:RuBHX//D
オンデマンドで呼び出せるんじゃね

呼び出し料金かかるけど
■ このスレッドは過去ログ倉庫に格納されています