Kotlin 5

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

※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1531818027/
2019/05/20(月) 16:58:22.74ID:E7kxjeRz
つやのって読む価値のない入門書しか出してないだろ
2019/05/20(月) 20:22:34.07ID:Nm/yOzhN
最近の日経ソフトウェアはPython雑誌みたいになってる
Kotlinの記事なんて全く載らない
725デフォルトの名無しさん
垢版 |
2019/05/20(月) 20:48:41.91ID:oKvxv21R
そういやPython大ブームだね。
機械学習関係で火が着いた感じか。
2019/05/20(月) 21:27:41.17ID:QYS7YbVl
数年後に始まる小学校でのプログラミング授業もPython採用と予想。
2019/05/20(月) 21:33:58.54ID:TjPZT1E7
授業は基本マイクラを使うぞ
2019/05/20(月) 22:00:59.30ID:9o82qJOc
kotlinのおすすめ無料学習教材は?
2019/05/20(月) 22:10:44.54ID:0DZMUBSm
勧めるようなものは特にない
2019/05/21(火) 08:28:21.83ID:2xcSjans
なんか公式のチュートリアルみたいなのなかったっけ
2019/05/21(火) 08:31:57.13ID:qls//8Wz
おすすめかどうかを意識しろ
あるかどうかではなく、おすすめかどうかだ
検索すりゃこのご時世英語含めてたくさん出てくる
そんなの見りゃわかる
おすすめできるものかどうかがいちばん大事
2019/05/21(火) 10:08:36.16ID:x7pfOsc7
ただで教える側に求めすぎだろw
733デフォルトの名無しさん
垢版 |
2019/05/21(火) 10:10:30.25ID:YlTjoOUk
>>723
NGに入れろ
スッキリ

734デフォルトの名無しさん
垢版 |
2019/05/21(火) 10:56:17.04ID:KjOgf3b2
kotlin使った事無くて勉強中なんですが
null安全は通信で届いたオブジェクトについてどう働きますか?
あるいはデシリアライズされたオブジェクトについて
そこでもnull安全ですか?
2019/05/21(火) 11:04:08.23ID:x7pfOsc7
当然どんなオブジェクトであれKotlinで書かれている限りnull安全は機能するけど、君はそもそもnull安全を誤解してそうな予感がする
736デフォルトの名無しさん
垢版 |
2019/05/21(火) 11:11:41.76ID:KjOgf3b2
検索すると、null不可な変数にnullを代入できないこと、とあります。
そうすると通信で受信したオブジェクト等はどうなるのかなと。
この理解は間違っていますか?
2019/05/21(火) 11:39:29.09ID:c7g0QxSl
どこまで「使ったことない」かにもよるんだが
・nullかどうかの条件分岐をクリアした変数
・nullかどうかの条件分岐をまだやってない変数
の2つがあるだけだと思っていい

外部から取得したデータがあったとして、nullチェックをまだしていないならnullableだ
どこかで誰かが(静的文法解析上)nullではないという条件分岐を通したあとならそれはnonnull
どこかで誰かがその後にnullになるかもしれない処理を通したらnullableに戻る
2019/05/21(火) 12:29:35.90ID:ZAINLMmO
>>736
文字列とか通信データから、新たなオブジェクトを構築するのでしょ?

構築できたら、null ではないし、
データがおかしくて構築できなかったら、エラー!
2019/05/21(火) 12:40:36.99ID:sr6+MIRN
当然nonnull出ない変数ににnullをぶち込んだらエラーになる
2019/05/21(火) 13:55:21.57ID:2xcSjans
>>736
nullを入れられない型なのにnullを入れようとしたらその時点でオブジェクトを生成できずにエラー
なので、json文字列を受け取ってオブジェクトを生成する部分で要件に合わせて適宜いい感じに処理する必要がある
741デフォルトの名無しさん
垢版 |
2019/05/21(火) 14:53:46.84ID:BVi2WQ22
>>736
試してみればわかると思うが、nillableな型にnull入れてObjectOutputStreamで書いた後でnullableでなくしてコンパイルしなおしてからObjectInputStreamで読もうとするとInvalidClassExceptionが出る。
2019/05/21(火) 15:17:02.88ID:RVxsm+ja
kotlin使ったことないって奴向けの説明ではないな
743デフォルトの名無しさん
垢版 |
2019/05/21(火) 16:06:22.73ID:BVi2WQ22
図解しないとダメか?w
2019/05/21(火) 17:40:26.31ID:x7pfOsc7
そもそも聞かれてることに対する回答としてはピントがズレてる
自分の知識自慢したいイキリオタク感がすごい
2019/05/21(火) 18:43:35.05ID:gj4VcULk
>>734がおそらくしているであろう幻想を抱いていた時期が自分にもありました
とエスパーしながらいうと、通信で受信したオブジェクト等はnullableな型を持つことになるだけで、
Kotlinにしたからといってnullチェックが要らなくなるわけではない。

>>736には誰の説明が分かりやすかっただろうか。
746デフォルトの名無しさん
垢版 |
2019/05/21(火) 20:08:28.33ID:BVi2WQ22
>>744
ずれてないだろ。通信でオブジェクト送る話なんだから。
747デフォルトの名無しさん
垢版 |
2019/05/21(火) 20:11:45.34ID:grT0tw0/
Javaのコードを呼び出すところは、全部そうだね。
Kotlinはnullableであることを「強制しない」。
AndroidとかjavaxのAnnotationでもついていない限り。
2019/05/21(火) 20:44:09.88ID:wTyF+2my
>>728
https://play.kotlinlang.org/koans/overview
749デフォルトの名無しさん
垢版 |
2019/05/21(火) 21:17:46.88ID:KjOgf3b2
null安全は@NotNullとどう違いますか?
2019/05/21(火) 23:00:11.33ID:MtIoFqpw
コンパイルエラーになるかぬるぽでばーんってなるかの違い
2019/05/21(火) 23:15:32.28ID:dJ+4PuSm
null安全は以下の機能を包括する言葉
 ・型システムでnull許容とnull不可を区別出来る
 ・null許容型の取扱いを容易にするモナド操作などを言語仕様や標準ライブラリに持つ
752デフォルトの名無しさん
垢版 |
2019/05/22(水) 00:26:45.64ID:s0RuNCYO
  ∧_∧  / ̄ ̄
 ( ´∀`)<  ド?
 (     )  \__
 │ │ │
 (__)___)
2019/05/22(水) 13:10:44.21ID:o0mLtMWH
iosアプリ作るのは現実的にいけそう?
754デフォルトの名無しさん
垢版 |
2019/05/22(水) 15:26:22.63ID:06P4CJxl
いけるいける
2019/05/22(水) 17:11:00.38ID:ddL9armR
大丈夫大丈夫、なんの問題もない
2019/05/22(水) 19:37:38.21ID:N+dUt+tn
逆引きのAndroid開発用のKotlin本ないの?
Javaのはあるけどさ
2019/05/22(水) 21:14:49.49ID:o0mLtMWH
>>754
>>755
ほんとのほんとに?
作り始めてまうで?
2019/05/22(水) 22:18:54.87ID:mQdasoF8
うん、大丈夫、なにも心配することないから
2019/05/23(木) 00:10:33.20ID:K2oq56d+
>>754,755,758
iOSアプリを実際に作った人がこの板にこんなにいるとは思えないんだがw
いや、自分もないんだけどさw
760デフォルトの名無しさん
垢版 |
2019/05/23(木) 00:56:30.37ID:ClSxeVCE
Kotlinでの競技プログラミングのコンテストがあるよ!

5月28日の23時35分から2時間半!

Kotlin Heroes Announcement
https://codeforces.com/blog/entry/67162
https://codeforces.com/contests/1170
761デフォルトの名無しさん
垢版 |
2019/05/23(木) 01:52:40.87ID:kvy164Qh
英語で書かれた問題を解読するだけで2時間半が経過してしまいそうな予感
2019/05/23(木) 02:45:36.97ID:K2oq56d+
>>760
IntがintになるかIntegerになるか考慮しないといけなかったらちょっと嫌だなあ。
2019/05/23(木) 06:58:10.23ID:ZvIUMcmJ
>>759
大丈夫、Kotlinも業務で使ってるしiOSアプリも業務でいくつも作ってるからさ
Kotlin nativeのiOSアプリも実際に作ってみたって人と勉強会の懇親会で話したことがある
2019/05/24(金) 09:20:43.95ID:1flrLOhd
>>756
必要か?
2019/05/24(金) 13:57:22.09ID:WFuDBTgU
Listの初期化って

var list = listOf<Hoge>()



var list :Hoge? = null

どっちがいいの?
766デフォルトの名無しさん
垢版 |
2019/05/24(金) 15:11:48.77ID:10iCK04b
>>765
全く違うもの出されてどちらがと聞かれても・・・
2019/05/24(金) 16:53:05.84ID:cg0Vnpe0
>>765
その2つでいうなら下はリストを作れてないから上一択になるぞw
2019/05/24(金) 16:57:14.79ID:WFuDBTgU
間違えた下は

var list :List<Hoge>? = null



これならどっちがいい?
2019/05/24(金) 16:59:34.27ID:cg0Vnpe0
どちらにせよその2つは作られる型が違う
nullableにする必要があるかどうかで使い分けろとしか
2019/05/24(金) 17:00:11.96ID:cg0Vnpe0
俺だったら何か理由がない限り上
2019/05/24(金) 17:00:17.36ID:g+HqU4NL
特別な理由がない限り上はvarじゃなくてvalにすべきじゃない?
2019/05/24(金) 17:15:07.02ID:WFuDBTgU
>>770
なぜ?

>>771
valにしたら代入できないじゃん
773デフォルトの名無しさん
垢版 |
2019/05/24(金) 17:52:50.04ID:8qiM3xuo
val にして空の MutableList 作るのは?
2019/05/24(金) 18:01:30.45ID:XLHoRxVW
俺はemptyListだな
2019/05/24(金) 18:03:21.78ID:6OR0USBX
?取るのめんどいから空のリストにしてくれ
2019/05/24(金) 18:27:38.07ID:g+HqU4NL
>>772
ああごめん val にしてMutableList な
だが、おまえが欲しいのはたぶん
var list = emptyList<Hoge>()
2019/05/24(金) 18:51:13.35ID:xfff2+MO
>>772
Kotlinにおいてはvarもnullableもごく限られた場面でしか使わない例外的なものだということは知っておいた方が良い。
nullableは無駄に取り扱いが面倒だったり、varは予期せぬバグを生み出す温床になり得るから。

なので
val list = mutableListof<Unko>()

が、大抵の場面で正解。
2019/05/24(金) 19:42:38.12ID:Oa3ZkFre
Unkoって何ですか
2019/05/24(金) 20:03:18.59ID:g/LimCLF
えっお前んちUnkoねーのだっせー
2019/05/24(金) 20:04:30.18ID:6mh6tvLx
かといって盲目的に mutable collection を使うのもどうかと思うがな
2019/05/24(金) 20:17:54.95ID:73sdMVIH
盲目的も何もコンテキストが分からないんだから一般論としてvarを使うよりはMutableListを使う方が適してると言うしかないだろ
どんな状況でも何がなんでもMutableListを使えなんて誰も言ってない
2019/05/24(金) 20:23:02.45ID:73sdMVIH
俺も>>777にするな。

もしくはlateinitを使うか、どちらか。
2019/05/25(土) 05:49:19.79ID:wB1WneOU
>>768
状況にもよるけど、>>782で出たlateinitか、場所によっては
val list by lazy{ [List<Hoge>を返す式] }
そもそも、listの要素が出揃っていない段階でlistを宣言するのが適切でない可能性も。
val list = [List<Hoge>を返す式]
のようにいきなり最後まで計算するか、少々面倒だけど>>773の言うように一旦
val temporaryList = mutableListOf<Hoge>()
して要素が出揃ったら
val list = temporaryList.toList()
するとか。
2019/05/25(土) 06:37:38.07ID:fh0ztzaz
lateinitはvalにできないから糞
2019/05/25(土) 07:20:32.83ID:Kvnc/U5Q
そんなご無体な
2019/05/25(土) 08:02:42.85ID:9ELY4FpV
valだけが正しい。valにできないなら新しいvalにコピーするべき
787768
垢版 |
2019/05/25(土) 10:50:32.51ID:VlF1HZqT
>>783
それだとvalじゃなくてvarじゃね?

始めに空のList入れる意見が多いけど結局使う時にemptyかチェックするでしょ
nullかどうかチェックするのと同じじゃね?
2019/05/25(土) 10:57:44.94ID:VlF1HZqT
nullの警告が厳しいからこそ使うのはどうだろうか
nullならnullだと知らされるがemptyじゃ何の警告も出ない
2019/05/25(土) 13:16:02.71ID:exhgzloH
・リスト自体を構築するケース
  ・listを使わないケースがかなりある and 非常に効率重視(※)なら
     var list: List<Hoge>? = null
     必要になったら list = mutableListOf()
  ・そうでないなら
     val list = mutableListOf<Hoge>()

  ※mutableListOf(=ArrayListの生成コスト)すら許容出来ない場合
    なおmutableListOfと比較するとlazyの準備処理の方がコストが掛かる

・場合によって構築済みリストを入れ替える(再代入)するケース
  var list = listOf<Hoge>()

補足: listOf()はemptyListにinline展開されEmptyListのシングルトンを返すので生成コストは無い
>>765 >>772は再代入目的のようなのでlistOfで良い
2019/05/25(土) 13:19:44.44ID:F8alA812
>>787
そうとは限らない
単にリストの要素数が0ならそれでいいケースも多い
そう考えると明らかに初期化を忘れてるのが分かるという意味でnullを入れておくのもいいかもしれない
791デフォルトの名無しさん
垢版 |
2019/05/25(土) 17:48:30.03ID:AAsiXMmO
Androidなどで、非同期処理が関わってくると、
valは注意して使わないといけない場面が、意外にたくさんあることに気が付く。
2019/05/25(土) 18:20:07.77ID:lux9UzI+
Activityのbindingはby lazyのval
Fragmentのbindingはlateinit var
2019/05/26(日) 23:17:26.29ID:/1jO9AOV
>>765
そもそもローカル変数の話なのかプロパティの話なのか…
2019/05/27(月) 12:03:53.57ID:j1Bw0s67
emptyListってシングルトンだから生成コストがないってのは分かるんだけど、
今時その程度の生成コストを気にする場面ってそんなない気もする
富豪的プログラミングなんて言われるかもしれんけど、もはやそれ自体死語だしな
795デフォルトの名無しさん
垢版 |
2019/05/27(月) 12:57:29.86ID:ffeERoRR
>>793
ローカルならそもそも悩まない。

val且つmutableにして都度addallするか、var且つimmutableで丸ごと置き換えるか、はケースバイケースで。
2019/05/27(月) 13:34:53.60ID:IGUdGZaE
valで都度変数作るからなぁ
2019/05/27(月) 14:33:20.72ID:24xkxhR7
プロパティの話ね
mutableにしてもそもそも生成は別のところでListごと作るからmutableだろうがListだろうが関係ない
当然後から代入するからvalにはできない
2019/05/27(月) 14:57:26.23ID:EJcO498B
copyメソッド
2019/05/27(月) 23:34:59.34ID:s432cqVY
サーバーサイドばっかだからかもしれんがプロパティにMutableListを使うことがそうそう無い
データクラスのコンストラクタ引数に val list: List はよくある
2019/05/27(月) 23:56:54.45ID:zFWKvIPE
内部DSLとかの指示を構築する系の実装で使うかな
2019/05/28(火) 05:58:36.43ID:sEeuOOEX
サーバーサイドかどうか関係なくない?
俺はよく使うよ。例えばツリー構造になってるデータを読み込む処理で自分の子ノードのリストを持つため、とか、これ昨日書いた。
2019/05/28(火) 06:33:15.65ID:f4BtQ/HR
val text = ""

って

val text :String = ""

って書いた方がいい?
2019/05/28(火) 07:05:11.16ID:Bdaqy37y
>>802
やるメリットは特にない
むしろ本当に宣言通りStringかどうかチェックするぶんビルド遅い
2019/05/28(火) 08:10:42.72ID:sEeuOOEX
>>802
いらない。何をどう見ても明らかにStringだから意味ない。
2019/05/28(火) 23:54:42.49ID:g+jKUI0N
>>802
Javaのvarで似たような議論がある。
https://orablogs-jp.blogspot.com/2018/03/style-guidelines-for-local-variable.html
2019/05/29(水) 01:39:37.10ID:KhqOXHGU
Kotlinに、SwiftのExpressibleByStringLiteralみたいなのが無くて本当に良かったと思う
あれは呪いだ
2019/05/29(水) 02:17:57.59ID:Qb2i3AGM
>>802 は、IntelljIDEA か Android Studio 使ってないのかね?
警告消して緑色になるようがんばれ
おれは警告にどうしても従えない場合でも、アノテーション使って絶対緑色にする
2019/05/29(水) 04:33:25.97ID:XoYuC6Fl
Charは'a'なのね
2019/05/29(水) 06:05:24.96ID:ouhOLTM0
>>806
なにそれ?
2019/05/29(水) 07:50:04.16ID:KhqOXHGU
>>809
https://ideone.com/3YQTSZ

文字列リテラルが本当に文字列なのか分からなくなるやつ
2019/05/31(金) 14:21:13.30ID:Jjn+Dq6k
>>806
PHPだと1リクエストごとにFWの初期化処理を行っているのが遅い理由でしょ
特にLaravelは読み込むファイルも多いし重い

他の言語だとアプリケーションサーバ起動時に一回だけ初期化処理をするので1リクエストあたりの処理が少ない

PHPでもSwooleやReactPHPなどを使えば同じことはできるけど、まあ既存のFWを乗っけてもバグりやすいだろうね
2019/05/31(金) 18:46:44.28ID:R6sHUJ5K
なんの話だよ
2019/05/31(金) 22:32:24.72ID:VAUlN9pw
やべぇやつが来たなwww
2019/06/01(土) 07:53:39.61ID:6Ne8KtIA
普通に誤爆でしょ
815デフォルトの名無しさん
垢版 |
2019/06/01(土) 11:37:30.64ID:OCCxHMSa
android用途:元気
サーバーサイド用途:全く流行らず
kotlin/native: 瀕死
kotlin.js: 死亡

現状こんな認識なんだけど合ってる?
2019/06/01(土) 11:43:16.53ID:HBXiOctn
Xamarin程の糞はない
2019/06/01(土) 12:20:19.48ID:oJ6AvSx+
>>815
Kotlin nativeはなんかもう不死鳥とかみたく蘇ったりする予定なので書いておいてください
818デフォルトの名無しさん
垢版 |
2019/06/01(土) 14:59:33.17ID:7bqJsR1f
身内のGraalにトドメ刺されて終わりだろ。
2019/06/01(土) 15:47:15.77ID:v1/bDBif
/NativeがGraalにやられても/JVMがスイッチするから大丈夫
2019/06/01(土) 16:20:49.17ID:4wvh7Cn2
>>815
合ってる
821デフォルトの名無しさん
垢版 |
2019/06/01(土) 16:55:01.52ID:uuPo6pHP
nativeはまだ作成中みたいな感じなので瀕死とは違うと思うが
822デフォルトの名無しさん
垢版 |
2019/06/01(土) 17:46:40.68ID:xELmXxSQ
Kotlinを勉強し始めたんだけどさあ
これってレファレンスを見てエディタで打ち込む->kotlincでコンパイル=>javaで動かす・・・・ってのを繰り返さないとならんの?
Swiftに言う「swift asdf.swift」みたいなのに相当するコマンドはないのかしら
823デフォルトの名無しさん
垢版 |
2019/06/01(土) 17:49:07.58ID:FZbdo0L3
そうか。合ってるか。。

サーバーサイド kotlinが流行ってないのは何でなんだろ。
現状問題なく使えるように思うけど、ほとんど開発案件出てこないね。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。