Kotlin 4

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/07/17(火) 18:00:27.88ID:PDZGrLP2
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
https://kotlinlang.org


※前スレ
http://mevius.5ch.net/test/read.cgi/tech/1521401186/
2018/07/24(火) 19:06:30.65ID:/05DIiMI
>>97
GitHub見てこいよ
アレをプロダクトで安定して使えるようになるまでまだまだ先は長そうだぞ
2018/07/24(火) 19:30:50.32ID:dd1bPMMo
>>87
val map = HashMap<String, 抽象的な何か>()
map["hoge"] = "文字列"
map["fuga"] = 100

val str = map["hoge"] // :String
val num = map["fuga"] // :Int

みたいな感じで
とにかく型チェックやらキャストやらが面倒くさい
実際には自作クラスとかも突っ込みたい
2018/07/24(火) 19:54:27.68ID:K9O8BSac
試してないんで適当言うけど
Class.forName(className).kotlin.cast(value)
とかでなんとかならんの
101デフォルトの名無しさん
垢版 |
2018/07/24(火) 20:39:35.62ID:3bmjSXS4
>>99
型チェックなしだと取り出した変数が何型になっているかわからなくて結局扱えないのでは?
2018/07/24(火) 20:48:13.92ID:7FTYhXzS
その後処理分ける時点で型は見ることになりそう
2018/07/24(火) 21:04:13.34ID:2ywwbIJ/
すまん伝わりやすいかと思って抽象的な何かって書いたけど語弊があるわ
まず抽象クラスやらスーパークラスやらこの時点で指定してたらダメだしな
ちなみにarrow-ktのHListはタプルみたいな感じになってた
2018/07/24(火) 21:09:27.91ID:VXjn8z1z
マップに値を突っ込む人は中身の詳細を知らなくて、値を取り出す人はどのキーに何が格納されているか知っているようなシチュエーション、例えば設定ファイルのローダーみたいな奴への適用ならわからんでもない。
2018/07/24(火) 21:17:20.64ID:2ywwbIJ/
何に使う気かっていうとJSFでFlushっていう画面間で値渡すためのMapがあるんだけど、型チェック面倒くさいしチェックしないのも嫌だしでいっそ別に用意できないかと思った
入れるときも取り出すときも型は分かってる状況だな
2018/07/24(火) 21:30:43.77ID:pjRgCp/n
XMLなりで文字列化しといて使うときにデシリアライズすれば?
2018/07/24(火) 21:57:49.15ID:43FBDpPt
keyごとに型が決まってるならjson文字列にしておいてGson使って取り出すとか
2018/07/24(火) 22:34:12.22ID:GyqBpo0D
>>99
Mapに代入のみで型認識するのは難しいな

タプル的な感じでやるか
https://ideone.com/Aekjqn

事前定義でMapに関連付けるか
https://ideone.com/rCFcai

むしろ変数に型が無い言語使うか
https://ideone.com/BUHFe3
2018/07/24(火) 23:50:03.73ID:2ywwbIJ/
>>106-107のやり方が使うときにはスッキリできそうだなぁ
>>108
二つ目のやつって色々出来そうに見えて汎用的にならないのが惜しい
2018/07/24(火) 23:53:36.51ID:jFaMrYyE
動的型言語「呼んだ?」
2018/07/24(火) 23:59:34.61ID:0G/WUWgn
よく調べないで書くけどMapでしか渡せないならMapの値にクラス突っ込めないの
2018/07/25(水) 00:05:15.27ID:Mo9tZ0hU
普通に data class 書くかイヤなら動的型使え案件だな
2018/07/25(水) 00:32:44.86ID:X9aSb7/J
動的型付言語でもMapから取り出したインスタンスに何かするにはそのインスタンスの型のチェックは必要なんだから、
KotlinでもAnyの変数に取り出した後、何かするとき型チェックすればいいのでは?
2018/07/25(水) 00:41:37.28ID:7AbAukpx
>>109
汎用的ってどういうこと?
2018/07/25(水) 02:34:30.53ID:NuE3ewHE
一回シリアライズするとか正気かよ。

inline fun <reified T: Any> cast(any: Any): T = T::class.javaObjectType.cast(any)

val i = cast<Int>(map["hoge"])
2018/07/25(水) 02:52:17.20ID:X9aSb7/J
Mapのキーの文字列に対して格納されてる型が決まってるのか
エラーチェック無しで間違ったのが入ってたら例外で良いなら、そんな感じにキャストでいいかもね
2018/07/25(水) 06:23:31.29ID:tppUcJNh
全角読みにくい
2018/07/25(水) 07:17:57.17ID:mjDoqtlK
>>113
動的型付言語は人間が頭の中で実際の型を把握してればコード上では型チェック不要だよ

Ruby
map = {}
map["hoge] = "今は文字列"
map["hoge"] = 100 #今は整数
map["hoge"] = [1,2,3] #今は整数の配列

map["hoge"].each{|i| puts i.to_s} # 今入ってるのは整数の配列だと人間が把握してるので適正なコード
2018/07/25(水) 07:34:47.16ID:NuE3ewHE
>>117
半角のまま貼り付けたら弾かれたんだ。
2018/07/25(水) 07:40:45.40ID:nUGMun5h
>>115
明示的にキャスト、間違ってたら実行時例外でいいなら as でよくね

val map = HashMap<String, Any?>()
map["hoge"] = 10
map["hage"] = "zura,katsura"
map["hoge"] = map["hage"]

val list = (map["hage"] as String).split(',')
println(list) // [zura, katsura]
2018/07/25(水) 08:28:43.96ID:pc8pXKsN
Kotlinスレが珍しくKotlinの話してるのか
2018/07/25(水) 10:22:42.75ID:7AbAukpx
元の>>99についての話なら「キャストなし」が前提なのでは

とはいえシリアライズやGSONなら型定義が必須だろうから
キャストより手間増える気がする
2018/07/25(水) 10:56:38.61ID:QsHBqRMq
使うたびにキャストするのが面倒くさいって話なら一度定義しとけばあとはそのまま使えるgsonはアリじゃね
2018/07/25(水) 11:39:23.46ID:1gumeC8R
てか別にGsonなんて使わなくてもHashを渡して初期化したら中でいい感じにkeyごとにキャストしておいてくれるラッパークラス作れば良いのでは
2018/07/25(水) 12:12:16.20ID:RwqHQTi+
結局取り出すときに型がわかってるようにするには事前定義が必須と
2018/07/25(水) 12:55:48.93ID:1gumeC8R
せやな
2018/07/25(水) 14:31:05.88ID:alBChnpJ
当たり前の話
嫌なら静的型付けなんてやめちまえ
2018/07/25(水) 15:13:33.72ID:CbElzlsD
性的片付けならお手伝いします。
129デフォルトの名無しさん
垢版 |
2018/07/25(水) 15:46:24.96ID:rOB4O81b
Mapから特定のキーで取り出した値の型をプログラマが知っている場合だけでしか使えなくて、型がわからないなら型チェックが必要になり、そうするとスマートキャストが使えるので現状のままで問題ない事になる。
型チェックなしで使えるようにできたとしてもやはりバグの温床になりそうだというのもある。(しかも見つけにくいバグにならないか?)
2018/07/25(水) 15:49:44.09ID:dm3jJ5Gu
特にKotlinの場合はJavaのウンコ仕様のせいでジェネリクスの型引数を安全にダウンキャストできないからな
2018/07/25(水) 17:01:14.13ID:xG56qnJC
やっぱJetbrain VM作ってよ〜
2018/07/25(水) 18:05:14.18ID:7AbAukpx
>>131
何のメリットが?
2018/07/25(水) 18:13:55.24ID:60VZ2ETs
そもそもVM利用してるのってJavaの遺産利用する為だしな
134デフォルトの名無しさん
垢版 |
2018/07/25(水) 18:16:24.83ID:ekeRKo17
資産ではなく遺産
2018/07/25(水) 20:57:40.57ID:OXaxpOj9
>>99
https://ideone.com/Bxe3Vj
2018/07/26(木) 20:21:16.47ID:v8/TcxRM
>>135
map["hoge"] as String → map.get<String>("hoge")
map["fuga"] as Int → map.get<Int>("fuga")
無 → inline fun <reified T> HashMap<String, Any?>.get(key: String) = get(key) as T

ただのキャストよりコード量が増えて危険な操作であることがわかりにくくなっただけやんけ
137デフォルトの名無しさん
垢版 |
2018/07/27(金) 02:00:17.48ID:O4NPrPXG
全然関係ない話

これが出来る事を知らなかった。

val s = "abc"
println("${s + "xyz"}")

ダブルクォーテーションで括った中にダブルクォーテーションで括った文字列がある状態なのに問題なくコンパイルも実行もできる。
${ ... } はコンパイル時に特別扱いしてたんだな。
2018/07/27(金) 07:04:48.78ID:8+KT0NyM
>>137
マジか、知らなかった。
まあやることはあまりないだろうがw
2018/07/27(金) 07:05:22.41ID:UmDdNteT
{}の中はプラグラムのコードやからな。
それだけやで
2018/07/27(金) 08:06:17.19ID:BgbV5sVA
一番内側のデリミタが来るまでは外側のデリミタはマスクされて見えないという話
2018/07/27(金) 08:36:58.60ID:xnwtYCKh
むしろコンパイル時じゃなかったらビビる
evalがある言語じゃないんだから
2018/07/27(金) 08:45:57.59ID:xnwtYCKh
もちろんネストも出来る

Kotlin   https://ideone.com/9oQrPl
Groovy  https://ideone.com/PkZexd
Swift   https://ideone.com/vCuTyE
bash   https://ideone.com/9GW6lT
2018/07/27(金) 18:32:30.58ID:BbfW0v3N
>>141
そんな威張るなよ
2018/07/27(金) 18:38:45.51ID:eMZjpBCY
そんな僻むなよ
2018/07/28(土) 13:18:16.11ID:S6ztPmt9
unit testしたいんですが
junit って標準モジュールじゃないんですか?
2018/07/28(土) 21:07:10.68ID:yXUefUq2
じゃないです。
2018/07/28(土) 21:53:41.27ID:AhCis0X4
ようやくKotlin1.3の話が出てきた。
ttps://blog.jetbrains.com/kotlin/2018/07/see-whats-coming-in-kotlin-1-3-m1/
148デフォルトの名無しさん
垢版 |
2018/07/29(日) 08:07:58.83ID:7lOBGcOb
operator で何も返さない Unit のやつを作るとどうなるかを実験していて気づいたこと。
例えば plus() って + 記号が出てきただけで呼ばれるわけで、そうなると + 記号だけで中身を書き換える事も可能になるんだな。

https://paiza.io/projects/wtY0TgCLyLhRsls2-6wcuQ
2018/07/29(日) 08:59:34.65ID:4MUmFrCs
そりゃまあただのメソッド呼び出しを糖衣構文だし
150デフォルトの名無しさん
垢版 |
2018/07/29(日) 09:51:20.17ID:7lOBGcOb
>>149
これができるのなら Unit ではない演算子の結果を捨てるような式はエラーにして欲しかった。
2018/07/29(日) 10:47:26.84ID:DahY5MEG
DSLに使うからそれは困る
152デフォルトの名無しさん
垢版 |
2018/07/30(月) 18:02:59.40ID:xHVHgAPA
JetBrains のサイトに StringBuilder.set メソッドのドキュメントがない事に気づいた。
いやググると見つかるので正確にはあるのだが、どこからリンクされているかがわからない。
普通に考えるとこれは StringBuilder のページからなんだろうが、それはない。getならある。
2018/08/01(水) 15:30:30.04ID:wHCC+gZS
JavaFX+Kotlinでクロスプラットフォームのアプリ作ろうと思ったけど、
やっぱ今からだとElectronの方がいいのかな
SDKからも切り離されたし
2018/08/01(水) 16:27:09.30ID:BRE0Gb7p
TornadoFX使ってみてよ
2018/08/01(水) 17:14:08.32ID:o97vF+z4
竜巻外為良さそうだけど、そもそもJavaFXが流行ってない気が
2018/08/01(水) 17:17:06.60ID:BRE0Gb7p
現時点で流行ってないし、java自体がこの状況で今から人気が出てくるとも思えないよなあ
electronかみんな大好きXamarinでも使った方がいいだろう
2018/08/01(水) 22:35:46.35ID:SQGsQ61c
TornadoFX良かった。JavaFXが切り離されさえしなければ...
2018/08/01(水) 23:16:43.13ID:CtMSSjTe
トーナードは良いものだよ。
JavaFX自体が消滅しそうだけど
159デフォルトの名無しさん
垢版 |
2018/08/02(木) 00:14:03.14ID:vClc7nAi
tornado の発音はトーネイドに聞こえるが・・・
2018/08/02(木) 00:40:41.05ID:ZvszlWDN
なんでJavaFXって人気ないの?
Electronが人気すぎるだけ?
Electronコード隠蔽できないから嫌なんだけどな
2018/08/02(木) 01:22:59.89ID:PUemVwHx
>>160
なんでって、Javaだからだよ
有史以来、FXに限らずクライアントJavaに人気があったことなど無い
162デフォルトの名無しさん
垢版 |
2018/08/02(木) 02:34:55.79ID:vClc7nAi
Android で大人気だけどなw
2018/08/02(木) 02:35:51.35ID:M4JJW8Mq
javafxscript用の設計だったからね
script潰れてjava向けに再設計とか時間かけすぎなんだよ
164デフォルトの名無しさん
垢版 |
2018/08/02(木) 06:11:52.44ID:L4dxCzkb
アンドロイドせいでjava/kotlinを書かざるを得ない迷惑なはなし
2018/08/02(木) 06:43:03.26ID:t5505cjw
>>164
C++やJavaScriptでも書けるだろ
2018/08/02(木) 07:38:05.58ID:NvR76J0F
C#で書けるだろ、忘れるな
2018/08/02(木) 08:27:55.22ID:02Lt02wr
はいxamarinネタ禁止
2018/08/02(木) 13:16:08.31ID:QRqag3vd
加速度センサーに木星や土星の重力加速度があるのですが、何に使うんでしょうか?
2018/08/02(木) 13:35:16.77ID:0TA/kWAT
なんかの実験用じゃない
170デフォルトの名無しさん
垢版 |
2018/08/02(木) 13:39:12.92ID:Cp7uV85Z
木星や土星へ行った時のため
2018/08/02(木) 15:31:09.75ID:cpkp83Z6
たまに使うよね
2018/08/02(木) 15:55:49.44ID:mx93PpF6
俺も前職で何度か土星行ったから、そういう時は役に立った
173デフォルトの名無しさん
垢版 |
2018/08/02(木) 16:26:00.89ID:SFe9zIxE
どしぇー
2018/08/02(木) 17:47:49.29ID:kLlfQZwC
10年前にJavascriptとDA PUMPが再ブレークすることを予想してた奴が居たら凄いと思う
2018/08/02(木) 20:26:30.99ID:ChN5Xojk
Electron + Kotlin/JS というのはアリ? というかしている人いる?
2018/08/02(木) 20:41:24.62ID:5ti5JZJP
ElectronならTypeScriptでいいだろ
2018/08/02(木) 21:35:16.65ID:t5505cjw
プロシュート兄貴を見習え
2018/08/02(木) 22:16:27.96ID:0hgfJcdZ
>>175
ReactNativeをKotlin/JSで書こうとして死亡してた人なら知ってる。
出来ないことはない、ってレベルらしい
2018/08/03(金) 16:55:37.97ID:dH+GGA6R
Javascriptが流行ってるのって言語の作りが良いからとかじゃなくて、結局はブラウザで動くからなんだよな
だから、誰かがことりんが動くブラウザを作ればことりん流行ると思う
180デフォルトの名無しさん
垢版 |
2018/08/03(金) 16:57:00.14ID:X+nM2ZWl
>>179
君に任せた
2018/08/03(金) 17:51:01.66ID:/71FxLcE
コトリンが動くブラウザをお前らが作っても流行らんよ
182デフォルトの名無しさん
垢版 |
2018/08/03(金) 18:04:24.79ID:X+nM2ZWl
あ、そうか。JavaScriptの代わりにKotlinスクリプトが動けばいいんじゃないか。そうすればわざわざJavaScriptに変換しなくて済む。
2018/08/03(金) 19:10:58.88ID:Sg6jgRzL
GoogleがDartで、それやろうとして、結局、あきらめたじゃん。
Dart自体は、Fuchsiaで復活するみたいだけど。
2018/08/03(金) 19:29:20.15ID:MrVuCq4o
dartもいい言語じゃねぇけど、JSよりかはましだからな。flutter人気でてdart使われるようになったら、dartのchromeブラウザ搭載計画を復活させて欲しい
2018/08/03(金) 19:32:54.71ID:NM98E0T5
wasmにDOM/GCが搭載されれば色んな言語からの需要があるだろうしそれほど夢物語でもない
kotlinがその中で天下取れるかはまた別の話だけど
2018/08/03(金) 19:33:36.87ID:ZdEKhS09
Chromeだけ動くようになったとしても他のブラウザが追随して、かつそれ以前のバージョンが駆逐されるまで待たないと実用できないからな。

それにDart自体がクソみたいな言語であることは変わらないから、多大なコストかけてまで乗り換えたくはないな
2018/08/03(金) 19:38:42.60ID:1Ao96BNz
TypeScriptという手軽でまあまあなソリューションが広まって、なんかもういいんじゃねという空気だよね
2018/08/03(金) 20:00:01.04ID:M4do4FkD
プログラミング言語は素晴らしいから広まるんじゃないのだということを我々はこの30年でイヤというほど味わったのでるふぁい
189デフォルトの名無しさん
垢版 |
2018/08/03(金) 20:25:03.99ID:X+nM2ZWl
でるふぁい
2018/08/03(金) 21:06:23.69ID:C7OuABnl
Algol
2018/08/03(金) 23:27:02.39ID:YJ+EXEAl
WebもアプリもKotlinよりTypescriptだろうか
2018/08/03(金) 23:43:06.58ID:EZZ8bH2k
まあそうだね
オラクルの件のせいで今後は(Kotlinが使えるような会社においては)Javaプラットフォームが積極的に選ばれることももう無くなるだろう
どうしてもJavaプラットフォームを使わざるを得ない事情があるときのマシな選択肢としての限定的なポジションに落ち着いていくんだろうね
2018/08/04(土) 07:38:33.47ID:5xMt+ptm
Kotlinは贔屓目でもなんでもなく、Java環境で動く素晴らしいJava代替物なのだが
その肝心の「Java環境でなければならなかったこと」が唐突に外部要因で縮小し始めており回復の理屈もないのだ…
現時点でJavaに業務で縁のない人はちょっと立ち止まったほうがいいかもしれん
Androidでプログラミングしたい? Unity使えUnity
2018/08/04(土) 09:36:50.04ID:+3XGJmmJ
一年前のだけど興味深いディスカッション

なぜKotlin Native?
https://discuss.kotlinlang.org/t/2275/

JetBrainsチームのコメントに気になる文言もある
Rock54のせいで引用出来ないけど18と22
2018/08/04(土) 09:44:43.94ID:+3XGJmmJ
今後の状況次第ではJava環境からの脱出口になるから
もっとKotlin/Nativeにパワーを

Kotlin/Native v0.8 released
https://blog.jetbrains.com/kotlin/2018/07/kotlinnative-v0-8-released/
2018/08/04(土) 10:09:54.85ID:XWbY/qAH
言っちゃ悪いけど、開発言語を前提にして物事を考えるのってエンジニアとしてはだいぶ低レベルな段階だよ
そのレベルの連中が多数派を占めるほどにはまだKotlinの裾野は広がってないと思う
梯子外されるのがもうちょっと遅かったらもしかしたらとは思うけど、残念だね
2018/08/04(土) 10:31:19.81ID:x/iry6Ka
仕事と趣味は別という発想が出てこない君はエンジニア以前に社会人としてとても低レベルだね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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