Kotlin 5

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

※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1531818027/
2019/02/07(木) 10:01:05.59ID:ygKhuk/7
>>238
根幹の言語機能の所有権とライフタイムにより
C++でのムーブセマンティクスやRAIIみたいなのをより高度にコンパイラが認識出来るので
速度(効率)を保ったまま安全性を高められてる
240デフォルトの名無しさん
垢版 |
2019/02/07(木) 10:55:21.09ID:esduY2Xd
Goはフットプリントも小さいからな。
C++だと、iostreamを静的リンクしただけでもそこそこ大きくなるのに。
2019/02/07(木) 12:43:04.54ID:nkNDSe3E
上で1..10の速さ書いたんやけどあれは実測じゃなくて速さランクのイメージや。
go<kotlin native<<jvm<<壁<<script言語
こうなるなら納得なんやけど、現実には
kotlin native ≒ jvmなの?
最適化されたらgoに迫ると思い込んでるんやけどそんな甘くないんかな。
2019/02/07(木) 13:44:29.30ID:Ftq4Fy0N
最適化できたらそらそうだけど、その最適化がどこまで出来るかどうかはお天道様にしか分からない
2019/02/07(木) 14:46:10.65ID:nkNDSe3E
それもそうやね。大人しく半年か1年くらい待ってみるわ
2019/02/07(木) 14:47:12.25ID:ygKhuk/7
コンパイラの頑張り次第で Go ≒ Kotlin/Native まで行ける可能性はある

ベンチマークでは C ≒ Rust << Go ≒ JVM
Rust vs Go https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/rust-go.html
Go vs Java https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/go.html

しかしGCの性質の違い、JVM起動時間、JIT、並列処理サポートなどにより
各ユースケースに対する適性は速度だけでは決まらない
2019/02/08(金) 16:17:29.13ID:nPWMA0BU
3桁ごとにカンマ打つには、
val str= "123456"
println( str.format("%,d"))

想定では、123,456のはずが123456になる
使い方間違ってるかな?
2019/02/08(金) 17:15:55.53ID:3DPCoowD
逆じゃね?
2019/02/08(金) 18:09:56.46ID:nPWMA0BU
逆+Intでないとダメみたい
BigDecimal放り込んだら勝手に12,345.6789みたいになればと思ったんだけど、自分で作るの面倒で信用ならん
2019/02/08(金) 18:45:11.42ID:MkVUfclC
jvmならNumberFormatでいいんじゃないの

import java.math.BigDecimal
import java.text.NumberFormat

val BigDecimal.fmtStr: String
get() = NumberFormat.getNumberInstance().format(this)

fun main(args: Array<String>) {
val a = BigDecimal(12345.6789)
println("${a.fmtStr}")
}
2019/02/08(金) 19:35:10.36ID:MkVUfclC
ごめんよく見たら丸められてたから訂正
https://ideone.com/AvbxFT
2019/02/08(金) 19:59:36.92ID:nPWMA0BU
>249

"."探して、整数と小数点以下に分けて整数部分にカンマ打ってから合体させようとしこしこ作ってたら別のアイデア出てた
ありがと
2019/02/09(土) 06:09:56.82ID:6/bHpQ6m
locale によってはカンマが3桁区切りではないかも知れないし記号がカンマではないかも知れないので
こうやって自分でやっちゃった方が良いのでは?

println(java.text.DecimalFormat("#,##0.000").format(java.math.BigDecimal("1234567890.1235"))) // 1,234,567,890.124
2019/02/09(土) 07:35:37.20ID:fJwH+mSX
>>251
ロケールに従わず常にカンマにしたいという意図ならそれだとそぐわないと思う
DecimalFormatに与えたカンマはカンマという文字ではなくグループ区切り子なのでロケールに応じた文字で出力されるよ
2019/02/10(日) 17:34:05.13ID:BbTEeZaP
日本, アメリカ, イギリス 他
1 = 1.000 < 10 < 1,000 = 1000

ドイツ, イタリア 他
1 = 1,000 < 10 < 1.000 = 1000

ロシア, フランス 他
1 = 1,000 < 10 < 1 000 = 1000

オーストラリア, カナダ 他
1 = 1.000 < 10 < 1 000 = 1000

国際単位系(SI)
1 = 1,000 = 1.000 < 10 < 1 000 = 1000
  空白を小数区切りに使う国が無いことと、ポイントとカンマの各国のばらつきから
  読み取り間違いを避けるための妥協案のようなもの
2019/02/10(日) 17:41:28.40ID:BbTEeZaP
おまけ

Ruby, Java, Kotlin 他
1 = 1.000 < 10 < 1_000 = 1000

C++
1 = 1.000 < 10 < 1'000 = 1000
 アンダースコアをユーザー定義リテラル用に使っていたため
255デフォルトの名無しさん
垢版 |
2019/02/10(日) 18:10:30.74ID:6jFJUgix
そうか。じゃあグループセパレータを自分でカンマにセットしとかないと確実にカンマにはならないってことだな。
2019/02/12(火) 05:43:38.35ID:xDY2FToe
Java全然書いたことないんだけどJavaのこと調べてたらこの言語に辿り着いた
Android公式言語とのことだけど、Androidアプリ開発以外の用途でJavaでやることもKotlinで出来るの?
もうJavaじゃなくてKotlin学んだほうがいい?
PythonとCしか書けない
257デフォルトの名無しさん
垢版 |
2019/02/12(火) 05:56:17.28ID:SvKCMiwA
おわこん
2019/02/12(火) 06:15:00.09ID:PanSk5rI
>>256
> JavaでやることもKotlinで出来るの?
できる。
> もうJavaじゃなくてKotlin学んだほうがいい?
JavaをやってからKotlinを学んだほうがいいけど、PythonとCができるなら、Kotlinから始めるのもありかも。
2019/02/12(火) 08:01:07.40ID:zazJl4ej
>>256
APIリファレンス読むためにJavaのメソッド定義の構文を知っておくくらいで
Kotlinをメインに学んで良いと思うよ

成果物はJavaクラスファイル(※)なので出来ることは同じ
やろうと思えば1プロジェクトで混在しても普通にお互い呼べる

※Kotlin/JS, Kotin/Nativeとかの別形式もある
260デフォルトの名無しさん
垢版 |
2019/02/12(火) 11:22:53.23ID:8lolhehX
Scalaってどこいったん?
261デフォルトの名無しさん
垢版 |
2019/02/12(火) 14:31:00.63ID:8DpMAebM
Scalaは衰退しました
2019/02/12(火) 15:06:09.44ID:ncKC6kPX
使われてるところでは安定して使われてるみたい
拡大は止まったと思うけど
2019/02/12(火) 20:08:57.00ID:hkCwi0n8
scala組がkotlinに合流してくれたら覇権言語狙えるんやないか。
ということは、kotlinに必要なのはお洒落感?
2019/02/12(火) 20:28:23.96ID:VerJGrBE
Scalaやってた意識高い系はみんなとっくにRustへ移行した
2019/02/12(火) 21:03:35.46ID:pT/fbk4d
>>256
それをJavaで作る必要があって、Javaで作ることを誰かに強制されているなら、それはJavaで作る
それをJavaで作る必要があって、Javaで作ることを誰にも強制されてないなら、それはKotlinで作る
それをJavaで作る必要がないなら、JavaでもKotlinでも作らない。他の言語を使う。めんどくさいじゃん
2019/02/13(水) 09:04:09.69ID:KRdNZL9E
ちょっと前はScala民がやたらKotlinを叩いてたけど、それももう見なくなったな
2019/02/13(水) 13:18:45.36ID:ikkFeMPB
現在はKotlin教とGo教の戦い?
2019/02/13(水) 14:52:01.31ID:e0d6KWci
言語に自己肯定感を求める人は無難無個性言語Kotlinや低脳言語Goでは欲求が満たされないことを知りRustへ行った
2019/02/13(水) 18:00:16.64ID:41RZIXro
>>267
両方とも同時期に流行り始めたけど、用途的にあんまり競合してない希ガス
2019/02/13(水) 19:36:21.84ID:n4QfG8LN
おれもどうせならオシャレな言語がいいんだがスマホのアプリ作りたいならkotlinしかないよね?
2019/02/13(水) 20:05:24.56ID:o4GE+skC
つDart
2019/02/13(水) 20:07:39.49ID:kPXKdc0M
dartがオシャレ…?
2019/02/13(水) 20:43:21.05ID:KRdNZL9E
flutter普及への最大の障害がDartだよな
2019/02/13(水) 22:02:27.55ID:O2gl0nE8
>>270
あなたの言うスマホアプリがゲームだけであるなら、Unityを使うことができる
これはWindowsマシンでAndroidゲームもiPhoneゲームも作ることができる(iPhoneの実機はあったほうがいいけど)

あなたの言うスマホアプリがiPhoneアプリであるなら開発マシンはMacでiPhoneは必須、個人なら言語は公式のSwift(就職する気なら今からObjective-Cに手を出して時間不足で爆死しよう)
Windowsマシンでも作成だけはできるがユーザーの「よくわからないけど動きません」に対して「よくわからないので直せません」と答えるしかなくなる(所詮エミュ)

あなたの言うスマホアプリがAndroidアプリである場合のみ、Windows(別にLinuxでもMacでもいいけど)でKotlinを使うことで作ることができる
ゲームを作ることももちろんできるが、基本的に全部自力での実装になるので序盤から山が高いし若干面倒くさい(後々勉強にはなるが)
手間と面倒だけ考えるならUnityとC#でやったほうがサンプルも解説も書籍もライブラリも山ほどあるし楽は楽、詰まってもだいたい先人が解いてるのでイージー。タイムイズマネー

もちろん他の言語で作ることもできて、たとえばもしあなたにC++の知識があるならC++でゴリゴリ作ることもできるんだけど、そんな人はこんなこと聞かないよね
えっXamarin?ごめーん忘れてた。「もしあなたがいっぱしのWindowsアプリケーション開発者であるなら」その知識とXamarinとC#と.NETを使うことでAndroid/iPhoneアプリ開発ができるよ
275デフォルトの名無しさん
垢版 |
2019/02/13(水) 23:07:05.67ID:eA/7rWxO
>>268
それぞれちょっとずつカジってみたんだけどScalaの人がRustでファイナルアンサーするとは思えんかった。
RustはWebやるにはキツかったからまだどっかで彷徨ってるのかも。

>>269
現在のGoの用途→Webサーバ、Nativeアプリ
JetBrainsが思惑ってるKotlin, Kotlin/Nativeの用途→ Webサーバ, Nativeアプリ、というか何だか色々。
うまく行けばこれから競合していくんかな。
2019/02/14(木) 06:44:05.14ID:l2sDxPpK
>>275
Goもこちょりんもどちらも使うけど、一口にWEBサーバーと言っても得意なジャンルが違うな、少なくとも現時点では。
今後GoにSpringみたいなフルスタックのフレームワークが出てきたら思いっきり競合するかもね。
277デフォルトの名無しさん
垢版 |
2019/02/14(木) 09:29:59.23ID:9tQDIG7c
合体させて Gotlin
2019/02/14(木) 11:59:45.42ID:PQjGjDTM
実際、Goの運用性とKotlinの生産性が合わさればわりと最強だと思う
Kotlin nativeみたいにKotlinのエコシステムを再現する方向だとどうしてもJVMをエミュレーションするような感じになって歪みが出る
逆にGoの文法をKotlinに寄せるほうが筋がいい
2019/02/14(木) 13:00:16.45ID:DBAMfZpK
歪みってどういうの?
2019/02/14(木) 15:39:16.51ID:cVDEqZjL
>>279
逆に聞くが、仮に完全にゼロベースで Kotlin native を開発してたとして、今と同じ言語仕様になったと思う?
特定の処理系を前提にして作られて普及した言語が他へ移植されて成功した例はない
2019/02/14(木) 17:06:41.26ID:DBAMfZpK
具体的な支障は無いってことでいいの?
2019/02/14(木) 19:02:02.86ID:HgCh9LDM
横からだけどjvmの負の特性も引き継ぎやすいってことかと思った。
起動が遅いとか、メモリ食うとか。
283デフォルトの名無しさん
垢版 |
2019/02/14(木) 21:20:40.39ID:FnxMJF+D
起動が遅い事は遅いが昔からすれば今時のPCは速いね。
Windows95や98の頃なんかどうしてくれようというほど遅かったからなあ。
昔はみんな忍耐力強かったよなあ。
2019/02/15(金) 05:29:24.84ID:Ytmv+Yd8
>>280
確かにJVMのジェネリクス型消去がなかったら、reifiedみたいな複雑怪奇な仕様はなかったろうな。

移植については大抵は非公式移植事例だから、楽観はできないけど、まだ決めつけるには速いかと。
Scala.NET...うっ、頭が...
2019/02/15(金) 08:15:53.64ID:EWf/hEPb
新しいところでいうと、inline classなんか普通にユーザー定義の値型があれば全く必要ないな
unsigned integerもだいぶ無理矢理感が酷い
Kotlin native特有の話だと、C interopのための構造体のマッピングとか超無理矢理で最高にエイリアン感ある
286デフォルトの名無しさん
垢版 |
2019/02/15(金) 09:58:26.61ID:KLsspNaS
iPhoneにおけるSwiftの立ち位置=AndroidにおけるKotlinの立ち位置
2019/02/15(金) 10:48:24.63ID:szDoWtiX
あ、はい
2019/02/15(金) 10:54:34.88ID:tar5L0r6
inline class = ユーザー定義の値型 = C#のstruct
そして最適化が十分ならそれらが必要無いことをRustとGoが証明してる
ヒープかスタックかは自動で判断される
2019/02/15(金) 10:56:38.52ID:PR4djPv7
特定のVM前提で設計されて他へ移植されて成功した言語の例としてはAndroidのJava/KotlinやUnityのC#、Node.jsのJSあたりが該当すると言えなくもないけど、
それらは言語の移植ではなくVMごと移植だからなあ
基本的にVM言語の他への移植は成功しないよ
2019/02/15(金) 11:07:58.47ID:tar5L0r6
AndroidやC#のいくつかのターゲットはAOTで
それらも「VMごと」に含むなら
LLVMを使うC++(Clang)も同じ扱いになる
2019/02/15(金) 15:42:23.69ID:FI28dGgE
最近、kotlin触ってるけど、C#より学習コストが高いです
それで、C#erがkotlinに切り替える際に、意識すべき点って何かありますか?
2019/02/15(金) 16:15:05.26ID:PR4djPv7
>>291
Javaの制限を理解すること
JVMは.NETのCLRに比べて機能的にはずっとショボくて、その制限に由来する奇妙な仕様がKotlinには数多く存在する
Javaに慣れてないとそのあたりは直感的に理解しづらい
2019/02/15(金) 17:24:02.62ID:Hx3jejna
>>292さんの言ってる「Javaの制限」て例えばどんなこと?
2019/02/15(金) 17:29:59.00ID:tar5L0r6
>>291
プログラム言語全般に言えることだけど
各構文を概要程度でも良いので、まずは一通り知ること

C#知ってて引っ掛かりそうな箇所として思いついたのは
・最後のパラメータがラムダの場合は丸括弧の後に書ける
 他に引数が無い場合は丸括弧も省略出来る
 (GroovyやSwiftのTrailing Closureと同じ)
・レシーバ付きラムダ
・inlineラムダ
・returnはfunから抜けるもので、ラムダから抜けるものではない
・IterableとSequenceは遅延評価
・コンパイルでジェネリクス情報は消える
・suspendは同期(await)が基本動作
2019/02/15(金) 17:31:30.02ID:tar5L0r6
>>294脱字
× ・IterableとSequenceは遅延評価
〇 ・Iterableと違ってSequenceは遅延評価
2019/02/15(金) 22:07:22.01ID:KHCIiBIM
kotlin勉強中なんだけど、結局のところjetbrainsがscala推さずにkotlin出したのは何でなの?
商業的に旨みがあるから?それともbetter javaとしてのscalaに見切りをつけたから?それとも?
2019/02/15(金) 22:33:17.97ID:tar5L0r6
コンセプトの違い
2019/02/15(金) 23:10:54.49ID:9S5XTVoX
>>296
自分でScalaやってみればすぐにわかるよ
まともな感性があれば、あんなものが普及するわけがないことは明らかだった
JetBrainsもIDEを作る会社として自由にできる言語が一つは欲しかったというのはもちろんあっただろうけどね
299デフォルトの名無しさん
垢版 |
2019/02/15(金) 23:25:58.35ID:KHCIiBIM
>>296
なるほど。Scalaのこれ以上の普及は難しいという判断があった(だろう)ってことなら納得。
2019/02/15(金) 23:41:27.98ID:KHCIiBIM
まちがえた。上は >>298
雑念を捨ててkotlin邁進してきます
2019/02/16(土) 15:17:06.30ID:lTjIe/CZ
Scalaは言語マニアのオナニー言語だよなあ
2019/02/16(土) 17:00:29.98ID:odkD9xpX
なんだかんだでscalaは採用企業多いけどね
kotlinもtwitterとかpaypalみたいな大手で使ってくれると宣伝になるんだけど
2019/02/16(土) 17:31:16.36ID:W7DuQqzW
日本のYahooがKotlin採用したくらいではさざなみさえ立たないか
304デフォルトの名無しさん
垢版 |
2019/02/17(日) 08:06:13.22ID:8BWCGdz7
Scalaの方が出たのが早かったし意識高い系(笑)が挙って使ったから
でもそれを維持出来る新人たちが居ないのが現状
Scalaは端的に複雑で難解な部分が多い
2018年後半以降Scalaの記事殆ど見かけないやろ?
コップ本(笑)
2019/02/17(日) 11:12:07.88ID:IdBTBZJc
Androidの公式言語がScalaになる世界線もあり得たと思うけど、そうならなかったってことはつまりそういうこと
2019/02/17(日) 11:17:52.27ID:IdBTBZJc
一年くらいScalaで仕事してたしまあ慣れればどうってことはないと思うけど、ScalaとKotlinで選べるとしたらよほどの変人以外はKotlin選ぶと思うわw
2019/02/17(日) 11:30:47.79ID:OQFPUwNT
ScalaはHaskellを意識しすぎ
簡潔に書きたいだけならKotlinかClosureの方がいい
2019/02/17(日) 11:57:32.09ID:nzXhLQND
Scalaのコンセプトは、スケーラビリティの理論実証
 オブジェクト指向と関数型の統合によりスケーラビリティが実現すると考え
 小規模から大規模まで同じ書き方/考え方で記述出来るように設計されている
 出自はコンピュータサイエンスの学者

Kotlinのコンセプトは、より良い産業向け言語
 Javaからの移行や相互運用、コンパイル速度、使い勝手について
 「仕事の道具」であることを意識して設計されている
 出自はIDE製品を提供する企業
309デフォルトの名無しさん
垢版 |
2019/02/17(日) 12:47:22.79ID:7MWZQWrl
どっちも我田引水なだけやん
2019/02/17(日) 13:01:53.97ID:nzXhLQND
設計思想と既存資産があるから多様に派生し人が集まる
C, C++, Objective-Cが合流しないのも同様
それを我田引水と評することに何の意味もない
2019/02/17(日) 15:40:49.55ID:1RbyA1NJ
>>310
クスクス
2019/02/17(日) 15:53:56.04ID:tF7RiGiR
scalaでAndroidのプラグインとかあった気がする
我田引水ってなんか意味わからんな
2019/02/17(日) 23:16:27.59ID:ek0K0t7B
>>309
むしろ我田引水でない言語なんかあるんだろうか。
強いて言うならgrassとかwwww
2019/02/18(月) 02:04:27.28ID:XPBhJDxI
我田引水ってのは共用物について不正に占有したり自らの便宜を図ったりするような場合を言う
自己アピールや競争を含めた利己的な行動すべてを我田引水と揶揄するのは農耕民族的な発想が過ぎる
そういうのは道徳というより村八分や出る杭が打たれるのを恐れる面が強くイノベーションの足枷
2019/02/18(月) 11:11:01.50ID:+13B6eaL
もはや何のスレだか分からない
316デフォルトの名無しさん
垢版 |
2019/02/18(月) 13:20:37.82ID:cZFby2gr
道徳説教スレ
317デフォルトの名無しさん
垢版 |
2019/02/18(月) 13:34:09.52ID:trvxFZJG
我田引水スレ
2019/02/18(月) 19:19:37.69ID:I6FKQlBO
後ろ盾がjetbrainsっていうのはどうなんやろ。
大手と比べてどんなメリットデメリットあると思う?
2019/02/18(月) 19:29:55.81ID:Sk2Bqw0/
てか、我田引水ってどういう意味だっけwwww
2019/02/18(月) 19:50:06.12ID:TrdfW/q6
>>318
googleと仲いいしintellijシリーズが売れなくなるとも思えんし安泰なんじゃ?
2019/02/18(月) 20:44:26.76ID:bWM4TeHv
スカラ信者がまた荒らしてるな
2019/02/18(月) 21:57:58.91ID:EXht3ErA
>>318
大手と比べるとメリットはない。後ろ盾のない言語よりはいい。
IDEの開発会社という意味では、言語の普及がIDEの売上に直結する可能性があるので
Oracleみたいに独立不採算だからマネタイズに走るという思考にはなりにくいが、
絶対的なものではない。
2019/02/18(月) 22:33:30.93ID:nEhvYQ88
IDEの開発会社であるが故のリスクもあるけどね
VSCodeのような強力な他の開発ツールがKotlinサポートにおいてIntelliJを超えてしまってユーザーが流れた場合、
JetBrainsにとってKotlinの開発を続けることにもはや意味がなくなってしまう
2019/02/18(月) 22:58:18.56ID:/oirkxE3
後ろ盾最強はやっぱrust?
2019/02/18(月) 23:02:22.94ID:3dpq5+94
Goでぇす!
326デフォルトの名無しさん
垢版 |
2019/02/19(火) 08:14:46.86ID:cAOiK8uf
後ろ盾の強さでいったらGoだべ
あれだけの巨大企業がついてる上に、開発も独裁せずに異常なまでにオープンであることを重視してるし
2019/02/19(火) 09:12:17.39ID:D8b3v+Fo
>>326
最強のSEO力でそう見せてるだけだぞ
それでもDartに対するヘイトは抑えきれなかったようだが
2019/02/19(火) 09:33:24.18ID:cAOiK8uf
>>327
直接Go開発周りのディスカッションを見てきての感想だから、SEOも何も関係ねーよ
英語が読めるなら自分の目で確かめることをお勧めする
あれはある意味理想的なOSS開発の形かもしれない
2019/02/19(火) 13:20:28.53ID:VQ802aqj
goは好きじゃないが>>326の言うことには同意
でもDartちゃんは駄目だから早く眠らせてあげて…
2019/02/19(火) 14:47:06.45ID:dYxLB9sm
FlutterがDartじゃなければ一気に覇権を取るまでありえただろうにな
2019/02/20(水) 14:22:13.38ID:v2qgHXVs
Android次期OSの開発言語がDartになるみたいな話どうなったん
2019/02/20(水) 15:43:28.44ID:YlCEZG7R
夢のOSなので夢で終わる
333デフォルトの名無しさん
垢版 |
2019/02/20(水) 15:54:05.41ID:agArr1lp
ダー子
2019/02/20(水) 16:09:47.41ID:xuurx1V0
>>331
https://9to5google.com/2019/01/02/android-runtime-app-support-fuchsia/

つまりJavaもKotlin/JVMも使える
2019/02/20(水) 17:27:44.53ID:9tgV50SM
Dream → Nightmare
336デフォルトの名無しさん
垢版 |
2019/02/20(水) 19:05:59.81ID:v7iPz90J
夢は見るもの
目標は叶えるもの
2019/02/20(水) 19:45:33.26ID:TCqLAjvR
夢を見る島
2019/02/20(水) 21:47:37.37ID:sBZRwN3G
>>337
小鳥ん島
>>336
揚げ足鳥で悪いが、目標は達成するものだと思う。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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