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/
2018/07/01(日) 23:08:56.02ID:raAwvdUY
val name: String = "..."

"name" is a string: "John Smith"
「名前」は文字列、"山田花子"

打ってる時はだいたいこういう感じの思考の流れがある
2018/07/01(日) 23:19:27.43ID:CPfYnrTw
>>717
define a variable "name" as a string and assign a value "名前" to it って読むんだよそれ
2018/07/01(日) 23:20:47.61ID:InQHnS3f
valなのにvariable wwwww
721デフォルトの名無しさん
垢版 |
2018/07/01(日) 23:27:05.41ID:yaDvqYhr
昔々PascalというかDelphiをよく使っていたので変数名、形の順でも違和感なし。
Oracle の PL/SQL も確かそうだったな。

Cも昔からよく使ってるけどね。Javaは趣味で使う程度かな。
722デフォルトの名無しさん
垢版 |
2018/07/01(日) 23:30:37.32ID:yaDvqYhr
そういやKotlinは val a, b, c : Int みたいに書いてまとめて宣言できないんだっけ?できた?
2018/07/02(月) 00:28:48.57ID:QmQNg+H0
>>708
javaとかこんなんじゃなかったっけ
2018/07/02(月) 00:29:30.51ID:QmQNg+H0
>>708
>>705のことね
2018/07/02(月) 02:31:32.49ID:oF5BHAcS
変数名とコロンの間にスペース入れるのは規約違反?
726デフォルトの名無しさん
垢版 |
2018/07/02(月) 04:08:17.17ID:M/CoMLX8
>>725
エラー出ないから言語としては良いのでは?

関係ないが>>722で書いたやつは試したらダメだった。
2018/07/02(月) 10:54:34.73ID:sDkOSnE9
>>725
IntelliJのCode Style設定ではどちらも選べるようになってるから、どちらでもいいんでない
2018/07/02(月) 12:07:35.37ID:eli6Ofbc
>>726,727
そーなのか
なんとなく型はスペース無しで継承はスペース有りかと
ありがとりん
2018/07/02(月) 15:54:18.89ID:fF3oZnn5
そうそう型と継承が同じ記法だからごちゃごちゃするよな
どうせならすべて動的型付けにすればよかったのに
730デフォルトの名無しさん
垢版 |
2018/07/02(月) 16:24:41.26ID:6MU/ELtX
動的型付けだと、存在意義全否定だろ。
Groovyでも使っとけ。
2018/07/02(月) 20:41:56.60ID:nCi8FeLN
型推論と動的型付けを混同すんなよ
2018/07/02(月) 21:15:16.60ID:BzTTxziN
>>699
お礼が遅れてすみません。
仰る通り、記載ミスで、y(x)です。

ご解説ありがとうございます。
すっきりしました。ありがとうございます。
2018/07/02(月) 21:24:23.77ID:EvLqbtyu
>>732
うむ。精進なされよ。
2018/07/02(月) 23:00:47.89ID://b/At4I
慣れたら型が後の方が可読性高く感じる
それと構文解析しやすくなるのもあるんじゃね

Kotlinでの
 (T1,T2)->R
はJavaでは
 BiFunction<T1,T2,R>

型が先だと関数型(function type)が他の構文と衝突しないよう識別子やジェネリクス型を置くことになる
2018/07/03(火) 00:00:46.54ID:GdB7bYPq
(TT^TT)
2018/07/03(火) 00:39:55.52ID:TIu9/k2l
関数の返値の変数の型も指定できるから、そっちのほうはわかりやすいんじゃないかな

fun hoge(): String = "ぬるぽ"

関数型プログラミングだと、そういう形式のほうがわかりやすいんじゃないかと思う

val hoge: () -> String = fun(): String = "ぬるぽ"
2018/07/03(火) 09:23:57.08ID:5ohzf/bH
>>736
ガッ
738デフォルトの名無しさん
垢版 |
2018/07/03(火) 10:05:34.13ID:2Hrfam1D
慣れの問題じゃなあかなあ
739デフォルトの名無しさん
垢版 |
2018/07/03(火) 10:06:19.13ID:2Hrfam1D
うう。スマホのフリック入力で失敗した。
2018/07/03(火) 10:07:52.88ID:ng0Ex9q0
>>738
人間歳をとると新しいものに慣れるのに時間がかかるようになる
そしてこのスレはおっさんのすくつだ
2018/07/03(火) 10:19:34.86ID:lMsOY+nb
このスレの人たち、今だにガラケー使ってそうだな
いつまで慣れの問題でギャーギャー言ってんだよ
2018/07/03(火) 10:40:19.23ID:pQbF/VH/
>>739
「い」の入力失敗率はあじょう。
人間工学的におかしあ。
あちばん遠あからな。
2018/07/03(火) 11:32:14.53ID:jh9a6Llj
>>741
幸か不幸かどこぞの板と違って末尾で判断できない
2018/07/03(火) 15:12:48.33ID:k8WNCQ/C
kotlinのコロン( : )ってどんな働き・役割なのですか?
2018/07/03(火) 15:56:30.11ID:k8WNCQ/C
もう一つ質問させてください

1. class chiba{ }
2. class chiba(){ ]
3. class chiba(city:String="--"){ }

1はコンストラクタは持たない
2は自動でパラメータのないコンストラクタが生成される
3は( )内でパラメータを初期化し{ }がコンストラクタになる
という理解でいいのでしょうか?
2018/07/03(火) 16:38:20.61ID:h4wqJ0lA
>>744
単独では何の働きも役割もない
ただの区切り文字
2018/07/03(火) 20:19:53.43ID:rBmEiF9u
>>745
以下4行は同一、下に行くほど省略表記なだけ
コンストラクタは自動的に作られる

class chiba constructor() { }
class chiba() { }
class chiba { }
class chiba

コンストラクタ(プライマリコンストラクタ)の中身は
初期化ブロック( init{...} )とインスタンス変数の初期化

具体的にコードで
https://ideone.com/KpwsQl

リファレンス
https://kotlinlang.org/docs/reference/classes.html
2018/07/03(火) 20:54:14.27ID:ODNzvHJa
ObservableFieldの説明を見ていたら、
https://developer.android.com/reference/android/databinding/ObservableField

public final ObservableField<String> first = new ObservableField<String>();
public final ObservableField<String> last = new ObservableField<String>();
public final ObservableField<String> display = new ObservableField<String>(first, last) {
    @Override
    public String get() {
        return context.getResources().getString(R.string.name, first.get, last.get());
    }
};

既存のObservableFieldを組み合わせて新しいObservableFieldを作るようなコードが載っているので、
そのままコピペして試してみたんですが、コンパイルが通らないんですがどうしたらいいですか
2018/07/03(火) 21:10:49.57ID:egr/fzRr
>>748
コンパイルエラーのエラーメッセージを読む
2018/07/03(火) 21:13:11.08ID:b3yF7W7d
それJavaじゃん
Kotlinで書く
2018/07/03(火) 21:34:21.57ID:ODNzvHJa
Kotlinに変換しても同じだった
エラーメッセージは以下だが、何を治したらいいのか
Cannot resolve constructor 'ObservableField(...)'
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
繊細とか壊れやすいとか、そういう意味だよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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