Kotlin 6

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/06/22(土) 15:59:57.23ID:zj+KJbMh
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう

※前スレ
Kotlin 5
https://mevius.5ch.net/test/read.cgi/tech/1544268581/
2019/11/21(木) 09:05:08.85ID:OWTu/Eih
require と check の使い分けちゃんとしとけよ
2019/11/21(木) 10:47:03.33ID:iVxfes4g
>>438
オモチャだから発売日が気になっちゃう精神やん
441デフォルトの名無しさん
垢版 |
2019/11/21(木) 10:50:30.22ID:PQRrRahX
>>435
ものによる。初期化しないとか by lazy にするとか他の方法があるならそちらを使う方が良いかも知れない。
2019/11/21(木) 11:30:32.58ID:rXpcOZh/
nullのまま素通りさせたくない場合は
!!でなくcheckNotNullやrequireNonNullを使えばOK?

このコードの3つ目のように
https://paiza.io/projects/Ao4mGnYxwoWEuMNRtj_gkg
2019/11/21(木) 13:52:56.76ID:fDxQUKzN
香ばしくなってまいりました
2019/11/21(木) 14:50:53.35ID:TLoSEVN8
!!を使うやつを絶対に許してはいけない
2019/11/21(木) 15:08:48.23ID:t44F/vpr
明日の朝刊載ったゾ テメー!!
2019/11/21(木) 15:30:07.46ID:9TFt1oIy
>>438
nullには型チェックが働かないことを忘れちゃいかん。

nullobjectじゃなくてnullがきたときは型チェックでエラーにできるんだから、nullobjectを使ったほうがいい。
447デフォルトの名無しさん
垢版 |
2019/11/21(木) 16:27:17.17ID:Bt7t64ET
!!潔癖症でもいい
変更方法さえ教えて頂けるなら
それに従い変更します
2019/11/21(木) 16:37:36.16ID:GN1h9TxM
Kotlinプログラマーは未だにforce unwrappingの使いどころを知らない
NullObjectのメリットデメリットも知らない
ということはよ〜くわかった
2019/11/21(木) 18:30:46.10ID:rXpcOZh/
>>444
>432と>>442についても意見が欲しい
2019/11/21(木) 18:59:57.13ID:ikLBAUPH
>>448
nullobjectのデメリットって、null汚染されたクラスの再利用が面倒なことくらいじゃない?
他になんかある?
2019/11/21(木) 19:03:08.50ID:Bs6+HN1r
NullObjectのデメリット?
「オナニーとしては気持ちいいが、実際の開発において便利なシーンがほとんどない」
これに尽きる
2019/11/21(木) 20:29:13.59ID:ikLBAUPH
>>451
オナニーとして気持ちいいなら誰でも使うだろ。
そんなこともわからない無能かぁ……
2019/11/21(木) 22:54:14.17ID:Vn+a4ljF
あるデータが有限の数値をとる場合と
値なしの特殊な状態をとる場合があるとする
その厄介さってのは多くの場合、処理の場合分けが必要ってところにある
ヒトがそういう分岐を書き忘れがちなのはご存じの通り
その結果もあって多くのプログラマはNPE恐怖症になったが、NPEを回避することが目的になっても意味がない
NullObjectの多態性やアルゴリズムの妙で分岐を潰せるならベスト
だがそうでない場合、むしろ分岐を書き忘れたとき、下手なNullObjectはフェイルファストのメリットを失うことがある
2019/11/22(金) 08:14:50.32ID:GTCFu0T7
nullセーフな言語におけるNullable型の素晴らしい点は
そのままではメソッドを呼び出すことができず
特殊値に対し場合分けの判断が必要ではないかとヒトに思い出させてくれること
不適切な!!はこれを台無しにする
不適切なNullObjectも同じで、より厄介なバグ隠蔽をもたらす
2019/11/22(金) 09:18:52.84ID:hf/6/1tn
>>454
requireNotNullやcheckNotNullも同じく台無しにする?
それともこっちは良い?
2019/11/22(金) 10:51:25.32ID:+tlCvVPc
!!のほうが2文字だし、ここでヌルポが上がるかもと分かるので好き
2019/11/22(金) 11:13:57.45ID:hf/6/1tn
念のため書いておくとKotlin標準ライブラリの関数のことね
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/check-not-null.html
2019/11/22(金) 15:35:14.32ID:GTCFu0T7
>>455
何を使うにしても状況に適したものを使えば問題ないと思うよ
2019/11/24(日) 06:37:41.88ID:wyfl3vqB
>>450
NullObjectはどのような場合でも正しく機能するNullObjectを定義できるなら優れているが、「どのような場合でも」を満たすのは難しい。
null発生の状況が複数ある場合は「どのような場合でも」というい条件を満たすNullObjectが定義可能である保証もない。
最初は条件を満たしていても、プログラムを修正していくうちに条件を満たせない場合が出てくる可能性もある。
しかも「気づかないうちに」そうなっている可能性がありたちが悪い。
条件を満たせない場所だけ分岐させるのは、NullObjectがnullチェック分岐消去を目的にしている
ことを考えると本末転倒な解決策。
2019/11/24(日) 12:53:04.20ID:gnIUHiL6
APIレスポンスとかデータ定義はNULLじゃない扱いしておいてビルドエラーもでないけど、
実際に動作させるとNULLが来てクラッシュするとかあるな
461デフォルトの名無しさん
垢版 |
2019/11/25(月) 11:44:00.50ID:8LK1eAYw
すごーく簡略化すれば、
private hoge: Hoge? = null
public Hoge apiX() {
if (hoge == null) hoge = Hoge() //
return hoge!! // ここでnullはあり得ないよと「宣言」
}
実際にHoge()のところは、さらにJavaの他のAPI呼び出しだったりするとしても、
とにかくnullでないことさえはっきりしているならばなんでもいい。
要するにこの場合は、apiXがnullを消費する責任を持つってことだ。
持たないなら、nullableのまま返す(つまりAPIとしてはnullも正常系だと言っている)。
そんだけのことじゃないかな。
2019/11/25(月) 12:58:08.39ID:Yrf4rnTG
>>459
nullobjectは「賢いnull」なんだから、null的な使い方してもいいだろ。
型安全なnullとして受け取ってnull分岐してもいいしな。

あと、null発生の状況が複数あるなら、それぞれ別のnullobjectにしていいんじゃない?。
2019/11/25(月) 16:14:54.66ID:c3GBXbYR
Javaではnullobjectを賢いnullとするのは正しいと思う

でもnull許容/非許容を型で区別出来るようになったKotlinでは
nullobjectはその利点を無くしてしまう

実装持ちobjectとnullobjectを区別する必要が無い場合は何も問題無いけど
もし「nullobjectかどうか」を判定する必要がある場合は
賢いどころか逆になると思う
2019/11/25(月) 17:15:40.69ID:1vTuETYq
NullObjectは"Tell, Don't Ask"なクラス設計ではうまく機能するんだけど、
関数型チックになAskだらけのコードだと使い物にならんね
465デフォルトの名無しさん
垢版 |
2019/11/25(月) 17:22:39.99ID:6yLunbOP
>もし「nullobjectかどうか」を判定する必要がある場合は
これはないだろ。動機そのものだから。
2019/11/25(月) 18:23:52.73ID:c3GBXbYR
>>465
それなら良いけど、ケースによらずnullの代わりに使うみたいな話の流れだったから
ログインユーザーとかも無効ユーザーオブジェクトになるのかなと
2019/11/25(月) 18:24:22.70ID:OXWkeipl
nullの場合の動作を
呼び出す側が決めるのか呼び出される側が決めるのか
どちらが適切なのかを考えるといい

呼び出される側が100%決め打ちできるユースケースならNullObjectは有効
呼び出し側でハンドリングしたくなったら邪魔
2019/11/25(月) 18:27:30.40ID:WgtQU+bP
java脳からkotlin脳へアプデが必要だけど
私の脳はnull
469デフォルトの名無しさん
垢版 |
2019/11/25(月) 18:49:15.70ID:6yLunbOP
Null Objectは単なる先送りで、ある意味!!が目指す方向とは真逆。
エラーが起きないから落ちることはないだろうけど、
使う側はエラーなのか無視されているのかわかりにくくなる。
2019/11/25(月) 19:00:53.76ID:Yrf4rnTG
>>468
>呼び出し側でハンドリングしたくなったら邪魔

型無しのnull使うよりマシだろ。
許容するととんでもないところから紛れ込むnullの方がよっぽど邪魔。
2019/11/25(月) 19:04:09.34ID:OXWkeipl
>>470
Nullableって知ってる?
2019/11/26(火) 08:06:30.50ID:cEMWujE4
>>471
nullableでnon-nullにできたっけ?
2019/11/26(火) 09:17:18.40ID:i6eVGflj
>>472
nullが正常系である場所ではnullabeを使い、nullが紛れ込んだらバグになる場所では非nullを使うって話がもう出てる
適切にゾーニングできているなら紛れ込むことをそう恐れる必要がない
nullという特殊値に対して意識が必要な場所はnullabeという型で言語仕様レベルで明確化でき区別できるからメリットがあり、型無しのnullというほど不便なものでもない
2019/11/26(火) 09:21:30.92ID:i6eVGflj
>>465
それがないならNullObjectがいいと思うよ
そこを否定している人はいないはず
ただ多くの人は経験上避けがたいと思ってるから意見が合わないんだろうね
解放閉鎖原則と単一責任原則とで作ってくと最初の動機だけではなかなか完結しない
全部ビジターパターンでとことんNullObject-ableな型にお伺いをたてるように作れば完璧にできるだろうけど、そこまで作り込むコストを考えたら適材適所でnullableを使い分けるのが現実解ってのが落としどころだと思う
Kotlinが選び提供している価値はnullセーフであってnullフリーではないし
2019/11/26(火) 10:05:06.19ID:XO/gVUyI
NullObjectって非同期呼び出しとかどうすんの
OOの原理主義的にはコールバックの呼び出しもしないのが正しいんだろうけど、
最近は前後で文脈が繋がってて、コールバックが呼ばれないままだとまともに動かないケースがほとんどだよね
かといってコールバックしようにも引数に何渡せばいいのかとか色々無理がある
2019/11/27(水) 12:20:06.50ID:OjEIAAu4
>>473
nullを使っても問題は限定的だと思うけど、あえてnullを使うメリットはあるのかしらん?
実装上の手間が省ける、くらいしかないと思うけど。
2019/11/27(水) 12:55:51.34ID:4s/5SlmV
>>476
>>438,453-454あたりを見てくれ
2019/12/06(金) 11:58:04.47ID:tlCdS/Zs
なぜKotlin/Nativeのメモリモデルが成り立たないか
https://itnext.io/why-the-kotlin-native-memory-model-cannot-hold-ae1631d80cf6
479デフォルトの名無しさん
垢版 |
2019/12/06(金) 14:42:47.13ID:08yg4gJX
三行に要約すると?
2019/12/06(金) 15:14:59.67ID:tlCdS/Zs
>>479
freezeによる制限とAPIはKotlin/Nativeのみ
そのせいでマルチプラットフォーム機能がお通夜状態
だから考え直せ
2019/12/06(金) 16:40:22.09ID:e8Nbwz4h
> This is the work of “top-level objects are frozen by default” and “a frozen datum cannot be mutated”.
Kotlin native試したことないけどこれ糞過ぎやろ
既存の(JVM向けに書かれた)コードがほぼ例外なく実行時にクラッシュすることになるやんけ
こんな互換性の欠片もないもん作るんやったらもう別言語でええやろ
482デフォルトの名無しさん
垢版 |
2019/12/06(金) 22:26:57.61ID:7KbOmiy4
kotlinてクラス変数に型推論使えるの?
Javaで無名クラスに利用できたらいいのにと思ったことがある

class Hello {
public var xyz = new Object (){ int x; int y; int z; };
void setX(int value){ xyz.x = value; }
}
2019/12/06(金) 23:00:45.17ID:tlCdS/Zs
>>482
private varでもいいなら使える
https://paiza.io/projects/qjWZT-Uy91UelIcTFqoKIA
484デフォルトの名無しさん
垢版 |
2019/12/09(月) 00:07:21.07ID:MrA/6cBN
>>483
できるのか! これができるとリフレクションを使ったフレームワークに幅が広がりそうだよねえ
特定の変数名をもつオブジェクトに値を代入するとかさ
2019/12/11(水) 10:04:40.40ID:YSNG9ChM
Kotlin 1.4以降に何を期待するか
https://blog.jetbrains.com/kotlin/2019/12/what-to-expect-in-kotlin-1-4-and-beyond/

品質とパフォーマンスに焦点を当て
大きな機能追加よりエクスペリエンスを向上させること(小さな機能追加はある)

Trailing Commaはありがたい
2019/12/11(水) 10:35:44.03ID:YSNG9ChM
GitHub統計
https://madnight.github.io/githut/

中々上がらない原因になってそうなのは
・スマホアプリでのクロスプラットフォーム性が他より劣る
・Kotlin/NativeやGraalVMのAOTの性能が
 他のGC持ちAOT(Go, C#)に全然追いつけてない
・AltJSとしてはTSに完敗
・Javaが割とモダン化していってる
2019/12/11(水) 17:32:54.10ID:zuvdOeFn
kotlin/jsは可能性がなさすぎるから諦めて他のとこにリソース使ってほしい。。
2019/12/11(水) 18:11:35.13ID:QRMyBX+7
ちょっとオワコン感が漂い始めたよね
2019/12/11(水) 18:44:39.88ID:3C9pU9bg
これから始めようと思ってた
2019/12/11(水) 21:20:44.17ID:cbWhmdF6
クロスプラットフォームは糞に例外なし
2019/12/12(木) 03:31:17.93ID:HDvavFF6
nativeでクロスプラットフォーム狙うならリッチな標準クラスライブラリがないと駄目だろ。言語だけ用意されても。
kotlin/JVMみたく他に寄生するなら寄生先のライブラリ使えるからいいけど。

nativeどうする気なの。

.netやjavaみたいな最低限の標準クラスライブラリないと役立たず。
2019/12/12(木) 10:07:02.43ID:Ijd1d2r8
どうする気もないでしょ
JBが本気でKotlinで天下獲るつもりならGoLandとRiderとResharperを今すぐ廃止すればいい
それをしていないということはその程度の覚悟なんだよ
粛々とチームを解散して開発者を解雇するだけだ
2019/12/13(金) 23:58:30.55ID:++ulbKLC
クロスプラットフォームがこんなに早く普及し始めるとはのぉ。
2019/12/14(土) 00:19:00.68ID:df1+QJt4
JavaでWindowsで開発してlinuxでうごかしとる
バージョンはこないだまで6だった
やっとJavaのかかとの所ぐらいまで世界が追い付いてきたようだ
2019/12/17(火) 06:30:13.16ID:noRj1Nsm
Kotlin/Nativeってバージョン番号が1.0を越えてるけど、
ベータ版を脱したってことでいいの?
2019/12/17(火) 10:45:01.35ID:buNxOUZu
クラスのnullableなインスタンスプロパティが複数(a,b,c)あって、
それらが全部nullじゃないときに実行できるメソッドあり、
fun execute() {
 if (!canExecute)
  return
 val a_ = a!!
 val b_ = b!!
 val c_ = c!!

}
いちいちこういう事やってんだけど、なんとかならんもんか・・
2019/12/17(火) 11:51:21.83ID:CYemexLv
小手先のテクニックよりも設計を見直すべきでは
a, b, cを一つの型に纏められないの?
2019/12/17(火) 18:50:15.12ID:buNxOUZu
MVVMのViewModelつくったことないの?
ViewModelを作るとたいがいこんなことになるんだが。
2019/12/17(火) 19:23:57.27ID:CYemexLv
>>498
いや、なんでa, b, cをわざわざ別個の変数に代入し直す必要があるの?
そこMVVM云々の事情は無関係だよね
HogeModel(a!!, b!!, c!!).execute()とかなら別に違和感ないやろ
2019/12/17(火) 19:27:54.98ID:buNxOUZu
普通のクラスだとこんなことにならんが、複雑に状態が遷移するViewModelだとこんなことになる。

ちょっと前にNullオブジェクトパターンの話題あったけど、NullオブジェクトじゃなくてViewModelの内部でStateパターン使えばたぶんいけると思うがめんどくさそう。
2019/12/17(火) 19:32:07.34ID:buNxOUZu
>>499
ああ、!!排除するために内部でそのために別のクラスに追い出せってことかなるほど。
2019/12/17(火) 20:00:31.90ID:buNxOUZu
つか、そのためだけならクラスを別に用意するんじゃなくてもいいんだよな。
ただ、executeCoreって別のnon-nullableな引数とるメソッド用意してexecuteCore(a!!,b!!,c!!)するだけで

実際のその先の処理もa_.hoge(b_,c_)とかでちゃんと処理委譲してるから毎回10数行レベルで、更に他に分割するって発想なかったわ。
2019/12/17(火) 21:26:42.16ID:sdUma5iy
!! はいかんぞ
2019/12/17(火) 21:41:44.72ID:Ef4LKPDY
みんないろいろなやり方で頑張ってるみたい
https://discuss.kotlinlang.org/t/kotlin-null-check-for-multiple-nullable-vars/1946
https://stackoverflow.com/questions/35513636/
2019/12/18(水) 01:11:24.71ID:Kzz0aLWj
nullチェックのガード節後に、スマートキャストが効けばいいわけだな
2019/12/18(水) 02:07:44.40ID:J0mER5OC
あたたたたたたた!!
2019/12/19(木) 00:36:56.60ID:pvCX0U01
あたたたたたたた?.let {
}
2019/12/19(木) 08:27:47.53ID:0eo+DnKB
みなさん
今日からKotlinを目指す事になった者です
よろしくお願いします
2019/12/19(木) 08:45:53.31ID:xYioGlNJ
kotlinを目指す
java始めたってことか?
2019/12/19(木) 08:55:17.26ID:0eo+DnKB
>>509
え?
Kotlinって言語の事じゃなかったんですか!?
てっきり言語かと
2019/12/19(木) 08:56:43.83ID:0eo+DnKB
やっぱりプログラミング言語で合ってるじゃないですか
初心者をいじめないで下さいよ
2019/12/19(木) 08:57:14.39ID:0eo+DnKB
ID:xYioGlNJをNGにした
2019/12/19(木) 09:10:42.29ID:sBMQ4GMS
kotlin始めましたならわかる
kotlin目指したらhallo world書いたら目標到達じゃないか
2019/12/19(木) 09:11:54.91ID:0eo+DnKB
>>513
Kotlin始めました
2019/12/19(木) 09:14:19.85ID:0eo+DnKB
>>513
でもまだ本が届いてないんです!
かといってプロゲートを調べたらKotlinがないしドットインストールを調べたらクッソ高ぇし
ヨ■■■で
作って楽しむプログラミング Androidアプリ超入門―Android Studio3.3 & Kotlin1.3で学ぶはじめてのスマホアプリ作成
って本をポチりました
2019/12/19(木) 09:15:16.14ID:0eo+DnKB
>>513
こんな状態で僕はKotlinを始めている事になるのでしょうか!?
2019/12/19(木) 11:32:38.18ID:5d66kii1
思い込みが大事
2019/12/19(木) 12:36:14.53ID:DRlK3voY
>>516
なってるよ
だからもう書き込まないでね
519デフォルトの名無しさん
垢版 |
2019/12/19(木) 12:51:05.10ID:0uPukb6z
>>514
そんなこと書いた張り紙がラーメン屋にさりげなく貼られてたらどうしよう
2019/12/19(木) 13:37:11.92ID:0eo+DnKB
>>509
すいませんでした
調べたらKotlinの源がJavaという事が判明しました
NGIDを解除しました
ですから今はまずプロゲートでJavaをやってます
2019/12/19(木) 13:41:10.68ID:0eo+DnKB
オンライン講座やアプリにカネをかけたら負けだと思っているのでJavaの本もポチりました
「Java1年生―体験してわかる!会話でまなべる!プログラミングのしくみ」
まずはこれを読んでから
「作って楽しむプログラミング Androidアプリ超入門―Android Studio3.3 & Kotlin1.3で学ぶはじめてのスマホアプリ作成」
を読む事にしました

アデュー
522デフォルトの名無しさん
垢版 |
2019/12/19(木) 13:48:14.38ID:+cpLTGtZ
逆やろ
本買ったら負け
ほぼオンラインで事足りる
2019/12/19(木) 13:58:35.22ID:0eo+DnKB
>>522
俺たちは理解力ゼロの人間だから
2019/12/19(木) 14:25:11.21ID:dMnFAlGo
各言語のスッキリシリーズを生み出した、伝説の本!
まずこの本で、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014

その後に、太郎本をやるのが定番!
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
2019/12/19(木) 15:34:22.45ID:Cn4tHGlw
>>515
たぶん開発環境があってないから楽しめないと思う
サンプル系の本は苦しみながら修正して作るものだと覚悟して望んでください
そうすればとてもいい本です
526デフォルトの名無しさん
垢版 |
2019/12/19(木) 16:26:30.93ID:0uPukb6z
>>522
そういや動画はわかりやすいと誰かが書いてたな。俺はわざわざ動画探して見ないけど。
2019/12/19(木) 19:30:40.54ID:lI3TBUYc
手動かしてたら覚える
本も動画もメンターもいらなかった
2019/12/19(木) 21:42:53.35ID:+kCyq/oE
勉強してプログラミングを覚えてからアプリを作るっていう考えがそもそも間違い
まず作りたいものがあるべきでその作りたいものを作るために必要な知識を
都度調べて問題の解決を繰り返すという方法で進むべき
作りたいものがないなら向いてないからプログラミングなんかやめてしまえ時間の無駄
2019/12/19(木) 22:02:46.62ID:rHJ8IYKv
まあ、そう言わんでも
君が数学を学んでいた頃、数学でやりたかったことあったの?
2019/12/19(木) 22:20:55.18ID:57XsBiPj
回転機能とワイヤーフレーム3Dでドヤってたら
あっという間に世間はポリゴンだのテクスチャだのバンプマッピングだの

ほんの数年の間の話
2019/12/19(木) 22:23:45.85ID:WqEVCHn0
大体アプリを作るのに必要な知識って言語の文法だけじゃない
Android SDKの知識も必要だし設計もMVVMとかfluxとかいろいろある
今の主流の外部ライブラリが何かとか非同期処理の実装はどうするか
Firebaseとかも活用した方がいいだろう
必要な知識が広すぎるのに目的もなくただ漠然と必要そうだとつまみ食いしてるだけで
あっという間に時間は終わっていく
大体5年もすればソフトウェアの世界は一変する
結局何も生み出せないまま技術に振り回されて時間が過ぎていくだけ
2019/12/19(木) 23:03:29.10ID:rHJ8IYKv
ふーん、偉いんだね
2019/12/19(木) 23:26:51.07ID:Cn4tHGlw
さっき気がついたんだけど
kotlinってimportしなくなった?不要なの?
Math.sin/cos/tan使ってもimportせずに使えてなんか変な感じです
2019/12/20(金) 06:46:42.42ID:YAC9G70z
>>533
https://kotlinlang.org/docs/reference/packages.html#default-imports

Javaでも java.lang.* (StringやMathなど) はインポート書かずに使える
2019/12/20(金) 10:39:15.14ID:JC7V0cWR
1.4でkotlin/nativeが爆速になってgoが死亡する世界線に行きたい
2019/12/20(金) 19:57:21.77ID:fz/tpFJr
誰かが1000億円の間違いしなかった世界がいい
今更Kotlinとか付け焼刃
537デフォルトの名無しさん
垢版 |
2019/12/20(金) 21:49:59.43ID:BqL6wPJ0
>>528
その通り。

まあしかしそれ言ったら学校教育は完全にダメだね。
538デフォルトの名無しさん
垢版 |
2019/12/21(土) 15:23:12.50ID:z0W1zCos
>>536
何の話?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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