Kotlin 7

■ このスレッドは過去ログ倉庫に格納されています
2020/05/06(水) 16:00:38.76ID:LXTBA+hx
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう

※前スレ
Kotlin 6
https://mevius.5ch.net/test/read.cgi/tech/1561186797/
2020/11/19(木) 13:12:52.76ID:633mdzZ1
そんなのはどうでもいい
そろそるnullをヌルと呼ぶかナルと呼ぶか決着を着けないか
2020/11/19(木) 13:44:30.40ID:WG490rcQ
nullはニュルだが?
2020/11/19(木) 16:29:15.73ID:r3/rn3nu
>>438
null安全でないのは大抵クソコードクソ設計だろ。特にjava。
2020/11/19(木) 17:01:35.94ID:BWsq8VAk
!!を許容するのか認めないのか
2020/11/19(木) 17:11:04.81ID:BWsq8VAk
はっきりしてほしい
2020/11/19(木) 17:13:08.06ID:dc7Xh8c+
Kotlinは言語選択として許容しない!
445デフォルトの名無しさん
垢版 |
2020/11/19(木) 21:01:29.88ID:m5Mf/5d8
>>437
Haskellしろってこと?
2020/11/20(金) 00:02:42.39ID:chBH1D/L
SEGA Saturnしろ
2020/11/20(金) 08:30:09.55ID:iF0AxdEN
>>437
そのインシュリンで助かってる人もいてるんやで。
君このご時世マスクもせんとチョロチョロするタイプやろ?
2020/11/20(金) 08:33:58.36ID:iF0AxdEN
ニュルポ
2020/11/21(土) 10:23:05.58ID:ts1N/QFR
null安全ってどうゆう意味?
2020/11/21(土) 11:10:14.55ID:U5RwLwtV
>>449
null安全なコード(null safe code)は
ヌルポが発生しないことが保証されてるコードのこと

null安全な言語は(language with null safety)は
ヌルポが発生を防ぐ安全装置が備わってる言語のこと
2020/11/21(土) 15:22:01.91ID:y+uPyUUI
null安全したところでデータの安全は保証しないからな。
下手したら試験時にnullで落ちてくれたほうがマシな場合もあるだろうよ。
だからnullは猫のように愛されてきたんだ。
2020/11/21(土) 18:58:29.84ID:FLFe6WLj
APIレスポンス受ける data class のプロパティもコンパイル時に null安全できるようにしてほしい
2020/11/22(日) 11:05:20.91ID:umfLP4bc
>>451
たしかにnullを安易に排斥したところで却って不具合を地下に潜らせることになる
nullの利用価値を保ったまま安全をサポートしてくれるのがKotlinのnull安全
null safeであってnull freeではない

Kotlinではnullかもしれない値を限定でき、その利用時に、分岐するのかエラーで落とすのか初期値で代用するのかを文法的に問うのでより安全
Javaでは試験時に落ちるところを、Kotlinではさらに早くコード補完時や自動ビルド時に気付かせてくれる
454デフォルトの名無しさん
垢版 |
2020/11/23(月) 15:21:42.81ID:QcOiDeXE
>>433
絶対に許さない。
2020/11/28(土) 10:17:31.66ID:TP8nXubU
Jetpack Compose for Desktop ってどうなんだろう。
TornadoFXが死に体なので脱出先を探しているが、
Android用の設計を無理に移植していびつだったりするんだろうか。
456デフォルトの名無しさん
垢版 |
2020/11/29(日) 14:55:05.68ID:KxupmnON
Kotlin って List の内容をローテートするメソッドって用意されてないの?
[1, 2, 3] の右回しなら結果が [3, 1, 2] で左回しなら [2, 3, 1] になるようなやつ。
(シフトしかできなくても組み合わせれば作れるから良いんだけど)。
自作するしかない?

ていうか自作することそのものは簡単なんだけどね。例えばこんな風に書けばいいだけだから。

fun <E> List<E>.rotateLeft() = ((1..lastIndex) + 0).map { get(it) }

ただ元からライブラリに用意されていたら無駄になるので存在の有無を知りたいということ。
2020/11/29(日) 15:24:23.71ID:IcRbcY/o
Javaにある
458デフォルトの名無しさん
垢版 |
2020/11/29(日) 18:30:32.35ID:KxupmnON
>>457
おお!ありがとう。java.util.Collections.rotate() ね。

でもこれ、Kotlin の List でも使えるけど List の内容が変わっちゃうのな。
(MutableList じゃないのに)

>>> val ls = listOf(1, 2, 3, 4)
>>> ls
res14: kotlin.collections.List<kotlin.Int> = [1, 2, 3, 4]
>>> java.util.Collections.rotate(ls, 1)
>>> ls
res16: kotlin.collections.List<kotlin.Int> = [4, 1, 2, 3]
>>> java.util.Collections.rotate(ls, -1)
>>> ls
res18: kotlin.collections.List<kotlin.Int> = [1, 2, 3, 4]
>>> java.util.Collections.rotate(ls, -1)
>>> ls
res20: kotlin.collections.List<kotlin.Int> = [2, 3, 4, 1]
>>>

まあ変換して Java 側に渡してるだけだろうから仕方がないか。
2020/11/30(月) 00:21:55.65ID:XdYfXM2+
お約束だけどKotlinのListには最初からイミュータブル性はないよ
変更機能に関心のないビューでしかない
MutableListがListを継承してるというのが何よりの性質
2020/11/30(月) 21:07:46.44ID:d/P6xXcm
クロスプラットフォームは総じて糞と相場は決まっている
2020/12/01(火) 07:14:35.59ID:1c6vRoBT
できることがOR結合ではなくAND結合で絞られてしまうのがクロスプラットフォーム。
できることしかできない。
2020/12/01(火) 07:41:02.13ID:7egfpP3/
!!や?って説明できるなら使ってもいいんだよね
いま宣言したけど中身がない、下の行で関数かなんか呼び出して空の変数に入れる、その変数を使う
コードの中に書いたらダメならそもそも書けないし
見る人が嫌ってだけだよね
2020/12/01(火) 08:37:49.02ID:A2yZQJjL
javaでいいよ
無理矢理感有り過ぎの上
文法がひどい
2020/12/01(火) 12:39:29.78ID:xAN1+Wpp
>>462
明快な話だよ
どちらの演算子も、if文を使ったそれと等価のロジックに置き換えて考えて、そのロジックを使うべきだと思えば使えばいい
特定の頻出イディオムの短縮記法に過ぎないと捉えれば、長ったらしく書くよりも演算子ですっきり書いた方がいいとわかるはず
追加メッセージのないNPEを送出するなんて絶対にムリという状況下なら !! は使わないことになるだろうし、低リスクな部分なんて元々エラーメッセージ考えないし万一落ちたらスタックトレース見りゃいいやという状況なら !! を使うのは理に適ってる

状況を問わず絶対に使うなというのは原理主義者かアホだと思う
Javaを使ってるのにクラスや例外を避けようとする老人と似たようなもの
2020/12/01(火) 14:06:45.61ID:Y3029ltu
!!を使わなくても書けるのに敢えてクラッシュのリスクのある!!を使う必要ない
2020/12/01(火) 14:51:50.13ID:GnBhcVmn
コントラクト書いてもスマートキャストできないならアリ
2020/12/01(火) 17:28:10.09ID:/2lR8en+
assert文もクラッシュのリスクがあるから使わないって言うんだろうか
フェイルセーフで進めるべきシーンとフェイルファストで落とすべき部分を判断して使い分けてほしい
2020/12/01(火) 17:44:21.87ID:VNs10yiL
そんなのは設計が糞
センスないからしね
2020/12/01(火) 18:45:05.23ID:1c6vRoBT
いろんな宗教食タブーに配慮した結果、鶏肉料理しか選択肢がなくなる感じ。それがクロスプラットフォーム。
2020/12/01(火) 19:28:13.47ID:+SEOBXSY
そうそう、そんな感じ
471デフォルトの名無しさん
垢版 |
2020/12/01(火) 21:58:25.69ID:G7RpB3vG
>>459
あー。Stringとかと同じか。書き換えられないように作ってあるだけで言語レベルでリードオンリーというわけではないという。
2020/12/02(水) 07:55:24.49ID:qZqo4QmM
そういうこと。ただ変更のためのAPIを提供してないだけ。
2020/12/02(水) 10:41:02.88ID:i+bjk1CY
Stringはクラスがfinalで閉じてる分、変更可能性という意味では層が少し違うかな
2020/12/02(水) 10:42:20.86ID:i+bjk1CY
CharSequenceが等価だと思う
2020/12/04(金) 16:14:35.33ID:aGuBhpl1
>>461
何つながりでいっているのか知らないけれど、まあ、それでも基本部分だけでも
動作すればだいぶ楽にはなる。
同じように書いてHelloWorldが出て、直線や矩形描画、文字描画、キー入力が
共通化されていて、同じ言語で書けるならかなり楽になるから。
クロスプラットフォームキットを何も使わなければ、言語自体も違ったりして、
ロジック部分すら共通化できず、大変なことになる。
WindowsではC++(またはC#), AndroidはJava, AppleはSwiftみたいに。
そしてprintf()文すら共通しては使えない。
476デフォルトの名無しさん
垢版 |
2020/12/05(土) 12:38:19.27ID:Na39OKS5
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
2020/12/12(土) 16:10:56.29ID:2H3Jk65M
Kotlinは人気順位をどんどん下げてんね。
2020/12/12(土) 17:12:12.40ID:DUS5CJRd
型違いやぬるぽのエラーが動かす前にわかるというが
逆に言うと動かせばすぐわかることだ
今時そのパスとおってませんとかテストでありえんから

型なんかいらんかったんや
2020/12/12(土) 17:37:35.65ID:UcLPJJJE
そんなしっかりテスト書くなら型あった方が楽じゃん
2020/12/12(土) 19:11:57.44ID:s2JPaqvY
変数は全部public staticで MutableList<Object>じゃい!
goto文も好きに使え!
だって全部テストでパス通せばいいじんじゃい!

うん、暴論だと思う
null安全も型安全もカプセル化も、言ってしまえばほんのちょっとの便利ツールでしかないんだけど、そのほんのちょっとがバグを減らし、思考の負荷を落としてくれる
2020/12/12(土) 19:17:54.50ID:s2JPaqvY
万全のテストが組み上がった後では言語ごとの安全設計の違いはプロダクトの品質に影響をほとんど及ぼさない、それはそうかもしれない
ただ、その万全のテストが手にはいるまでにどれだけのコストを要するかが違う
流れるように書くことができて、書き間違えや考慮漏れが起こりにくく、テスト作成中にfailが出てもすぐに特定して直せる、その結果生産性が高い、それがいい言語だと思う
2020/12/12(土) 19:17:56.76ID:DUS5CJRd
誤りは防ぐが思考の負荷は増えるぞ
2020/12/12(土) 19:31:00.69ID:s2JPaqvY
とても小さいスクリプトを書く場合と、バグをいくらでも作ってよく誰かが直してくれるならそうだな
VBの変数宣言不要のVariant天国は何でも格納できて極楽
一方である程度大きいものをバグなく作る必要があるなら脳内に展開する必要のあるデータ量が増えてスケールしなくなる
2020/12/13(日) 08:02:21.21ID:VmHeogwF
単純に型のあるなしだと設計を疎結合にしやすいとかリファクタの安全性が高いとか色々変わってきますがな
2020/12/13(日) 11:22:13.31ID:OcllVIux
それでもやっぱり型が好き
2020/12/13(日) 13:22:32.62ID:5EW0FlRD
シェルスクリプトやマクロみたいな簡単な治具には形を意識せずにすむ言語がお手軽だし、バックエンドのシステムを組み上げるにはnull安全のある厳しい静的型付き言語がフィットするので使い分けましょうねという結論でいいと思う
使い分けのミスマッチを解消したいい例がTypeScript
2020/12/13(日) 17:03:49.88ID:nviDagiX
Rubyも型のような何かを入れたし、時代の流れだわね
488デフォルトの名無しさん
垢版 |
2020/12/14(月) 00:35:19.60ID:6zFeqNk6
数値や String が保持出来て計算出来れば良いんだったらそういうクラス作って
operator で色々作って計算出来るようにしちゃえば良いんじゃないか?
効率悪いかも知れないが。
2020/12/14(月) 08:23:45.23ID:NKntA+ls
>>478
> 今時そのパスとおってませんとかテストでありえんから

そのテストを自動で実現するテストフレームワークが無いんじゃない?
せめてnull安全ぐらい関数1つで実現してほしいわ。
2020/12/14(月) 10:17:36.45ID:wjvd2Hwv
君らみたいにkotlinやってる人ってアプリ開発者が多いのか?
2020/12/14(月) 10:24:57.92ID:gp9Z60vS
Android以外でKotlin使ってんだなぁて思う
JavaだったとこをKotlinに置き換えてんの?
2020/12/14(月) 10:39:03.40ID:sJtbd1yB
元々Javaのサーバアプリ書いてる
2020/12/14(月) 18:48:58.24ID:rjPJQsvc
サーバーサイドだね
完全にbetter Javaとして使ってる
既存コードの置き換えもするし、新規実装するものに関しては完全にことりん
2020/12/14(月) 18:50:01.54ID:gp9Z60vS
Androidやってるだけだからサーバーとか行っても戦力にならないんだろうな
同じ言語なのにここに出てくるサーバーサイドの会話がなんとなくわかったつもりの異次元
2020/12/14(月) 18:50:06.38ID:rjPJQsvc
サーバーサイドkotlinは採用も意外に楽よ
それ自体の経験者はほぼいないけど、Kotlin書きたいJava経験者はかなりいるから
2020/12/14(月) 18:50:39.52ID:rjPJQsvc
>>494
それはお互いにそうでしょ。
言語そのものの知識なんて大して重要じゃないし。
2020/12/14(月) 22:34:42.15ID:dZWdULI2
nullsafeでぬるぽが減った人いますか?
2020/12/22(火) 19:15:05.74ID:oIaxfxum
減るっていうか0になったけど何が言いたいんだろ
2020/12/22(火) 21:19:38.41ID:3Bv244xN
ぬるぽを無くすためのnullsafeだからな
2020/12/22(火) 22:42:34.84ID:Df60bwVz
DBカラムに入ってるはずのデータがなかったときどんなエラーがでるんすか
2020/12/22(火) 23:40:20.45ID:Olju/RJS
ヌルポよりも大切なものを失います
2020/12/23(水) 00:04:41.19ID:6GFRBN6f
APIのレスポンスがnullじゃないはずなのにnullが返ってきたときどうしたらいいんですか
2020/12/23(水) 19:38:57.98ID:NEftcK31
nullsafe って言うのは Null チェックしなくていいという意味じゃないよ?
チェック必要なものと不要なものを区別して、必要なものはチェックしてからアクセスしないとコンパイルエラーになるんだよ?
2020/12/24(木) 07:36:37.88ID:woO5Pxu8
>>502
普通にnullチェック入れればいいんじゃないの?
2020/12/24(木) 08:10:29.60ID:QpUzPsdF
>>502
nullチェックしながら
APIの作者にバグレポート上げろよ。
2020/12/24(木) 08:57:55.57ID:N8XXHmSr
まずレスポンスのデータクラスのフィールドををnullableにしないといけない
nonnullでもコンパイルエラーならないのにだ
2020/12/25(金) 09:41:57.24ID:yOAc+N/y
何で companion object って一番下なんすか
一番上じゃ駄目なんすか
2020/12/25(金) 11:57:59.25ID:LVz6iinV
kotlin世界との境界部分はもろもろを自分で気を付けるしかない
2020/12/27(日) 23:41:45.31ID:mqWB+gDR
>>507
文法的にはどっちでもいいよ
2021/01/01(金) 17:03:56.74ID:oTJ6QRVP
kotlin/nativeでサーバーサイド作る話はどうなった?
2021/01/02(土) 07:50:34.05ID:7+xZsyvI
SuperJobだと、子の失敗は親に影響与えないとのことですが、子をキャンセルすると親もキャンセルされてしまうとのことです

子が失敗しようが、子をキャンセルしようが親に全く影響を与えたくないのですがどうすればいいでしょうか?
2021/01/02(土) 08:31:31.17ID:7+xZsyvI
SupervisorJobだった
つか、なんかややこしくなってきた
間違ってた、SupervisorJobは子のキャンセルは親に影響しないからスーパーなのか?
2021/01/02(土) 12:00:19.22ID:7+xZsyvI
間違ってた
子Jobのcacelメソッドによるキャンセルは親が普通のJobだろうがSupervisorJobだろうが親をキャンセルさせない

子JobがCacellationException以外の例外で失敗したとき、違いがでてくるのか
2021/01/02(土) 13:51:40.78ID:iRQWAItx
おちつけ
515デフォルトの名無しさん
垢版 |
2021/01/07(木) 12:30:36.60ID:upgodNBv
明けましておめでとうございます。
ことりんもよろしくお願いします。
2021/01/07(木) 13:06:35.86ID:n0qoIkIN
酉年にやれよ
2021/01/08(金) 00:22:29.53ID:q8lyQLUk
2029年までネタとして取っておこう…
2021/01/08(金) 00:30:46.51ID:s1r0Khta
その時まで生きてるのかな、ことりん
2021/01/08(金) 07:52:19.70ID:AiUWBAU5
こぅのとぉりん生きてますよ
2021/01/08(金) 08:38:56.45ID:rfni5yw0
ことりんじゅうさまです

なんてことならないように使っていこう
2021/01/09(土) 09:13:47.78ID:ZIgIrWmA
例えばUserクラスがあって、userIdプロパティとネストしたUser型のuserプロパティがあります

このときList<User> users
から、users.map?とかcollection apiを使ってネストしたUserも含めたすべてのuserIdのリストを求める方法があれば教えて下さい

再帰関数を用意しないと無理?
2021/01/09(土) 09:19:13.14ID:ZCNL7UEp
flatmap
2021/01/09(土) 09:28:30.58ID:ZIgIrWmA
userプロパティは多段ネストする可能性があるんですがflatMapでいけましたっけ?
2021/01/09(土) 15:43:34.22ID:v5qb+Ohk
プロパティをどう辿るかはcollection apiだけじゃどうにもならないから自分で実装するしかないでしょ
扱うデータによっては重複や循環なんかも考慮が必要かも

https://paiza.io/projects/JkGNST_vjmARbX8XFfMLnA
2021/01/10(日) 00:59:41.08ID:vFHdkGQn
>>521
そのロジックに意味のあるものならUserにallChildrenUser : List<User>メソッドを作って子のallChildrenUserを呼び出す、つまり再帰構造、allChildrenUser() -> users.flatmap{ it.allChildrenUser() }
かな

ネスト構造の時点で循環参照の可能性があるわけで言語機能でどうにかなる話とは違うと思う
または、データ構造として最適なツリーを採用したほうが良いかもしれん
2021/01/10(日) 01:38:59.42ID:Kq/dusa6
自分が出来ると心から信じることができれば必ずやれる
2021/01/10(日) 20:09:18.30ID:JmQQkhyb
言語機能でどうにかなるか否かはまた別の話でしょう
データが循環していたらスタックオーバーフローなりその他の例外なりが出るように標準ライブラリが設計されていればいいだけなので
2021/01/10(日) 20:13:22.96ID:JmQQkhyb
余談だけどグラフの探索は再帰を使わなくてもループに書き換えることができる
スタックオーバーフローしなくなるのが利点
ループではなく再帰でしか解決できないアルゴリズム問題が存在し得るかどうかは不勉強なので知らない
2021/01/10(日) 20:31:18.39ID:N5z3vzVP
再帰は必ずループに出来る
2021/01/10(日) 21:54:19.01ID:YxBPzBtX
クイックソートどうすんじゃ
2021/01/10(日) 21:56:12.30ID:YxBPzBtX
木の探索は横探索すればいいか
スタックのかわりにヒープがあふれる
2021/01/10(日) 22:08:14.99ID:fqhi9u3I
whileループでbreakすればいい
2021/01/10(日) 22:25:02.75ID:GNExugp7
flatmapで何でも解決できる
534デフォルトの名無しさん
垢版 |
2021/01/22(金) 13:56:01.26ID:g1yAjsTk
じゃあflatmapで俺の資産を増やしてくれ
2021/01/22(金) 14:36:13.50ID:JAaKTTQV
flatmapと元気があれば何でもできる!
2021/01/22(金) 20:45:59.10ID:xnRnhQMQ
Kotlin Roadmap
https://kotlinlang.org/roadmap.html
2021/01/25(月) 06:26:23.02ID:hTvlKNeR
>>534
理論上はflatmapで何でも解決できるとしても、実装するには十分な数学的能力が必要なのだ。
538デフォルトの名無しさん
垢版 |
2021/01/25(月) 18:04:21.90ID:gx6uUcGg
>>537
そうか。じゃあお前なら出来るんだな。任せたぞ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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