X



Kotlin 6
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/06/22(土) 15:59:57.23ID:zj+KJbMh
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう

※前スレ
Kotlin 5
https://mevius.5ch.net/test/read.cgi/tech/1544268581/
0002デフォルトの名無しさん
垢版 |
2019/06/22(土) 16:00:16.55ID:zj+KJbMh
公式サイト
https://kotlinlang.org/
公式ブログ
https://blog.jetbrains.com/kotlin
コードを貼れる所
http://rextester.com/l/kotlin_online_compiler
オンラインコンパイラ
https://ideone.com/

Google、KotlinをAndroidアプリ開発言語に選定
http://jp.techcrunch.com/2017/05/18/20170517google-makes-kotlin-a-first-class-language-for-writing-android-apps/
Library support for Kotlin coroutines
https://github.com/Kotlin/kotlinx.coroutines
0006デフォルトの名無しさん
垢版 |
2019/06/23(日) 13:14:47.73ID:comcN3CJ
5uzuki 1chiro
0007デフォルトの名無しさん
垢版 |
2019/06/23(日) 19:33:46.30ID:qNPyGYcq
仕事で使う android アプリを作ろうと思って
とりあえずは「はざめての android プログラミング 第4版」
を買ってきました。まずはこれ読んで頑張ってみます。
開発環境のメモリが 8GBしかないのですが、
さすがにメモリ食いますね。
0008デフォルトの名無しさん
垢版 |
2019/06/23(日) 19:40:56.30ID:YFm/g+mx
>>7
>「はざめての android プログラミング 第4版」
内容を的確に表したすばらしい表現だと思う
0010デフォルトの名無しさん
垢版 |
2019/06/24(月) 12:51:45.23ID:6xXOOyfa
はざめまして
0019デフォルトの名無しさん
垢版 |
2019/06/25(火) 21:26:27.71ID:uuBaeFE0
まぁ出して欲しいとか言いつつまだ出せる状況じゃないのは分かる

だからこれは5000兆円欲しいみたいな類いの願い
0020デフォルトの名無しさん
垢版 |
2019/06/26(水) 00:47:11.97ID:f7jPAOIX
>>11
こんなのが出る。

$ kotlinc
exception: java.lang.NoClassDefFoundError: org/jline/reader/LineReaderBuilder
(以下略)

これだな。
https://youtrack.jetbrains.com/issue/KT-32085
0021デフォルトの名無しさん
垢版 |
2019/06/26(水) 20:56:59.66ID:eE9WxuCh
>>19
5000兆円あればStable版も夢ではない気がする。
Ktor, KotlinどころかJVMの仕様から作り直しても余りそう。
0024デフォルトの名無しさん
垢版 |
2019/06/27(木) 06:11:57.43ID:0XEDGOcC
5000兆円あったらさすがにエンジニアやめて田舎の山奥で陶芸家にでもなるわ
0025デフォルトの名無しさん
垢版 |
2019/06/27(木) 11:40:01.19ID:te5kXF0f
株に手をだしたら簡単に倍増
0026デフォルトの名無しさん
垢版 |
2019/06/27(木) 11:53:54.54ID:kqKyS1Lp
ももクロは5人時代が1番バランス良かったよな
0029デフォルトの名無しさん
垢版 |
2019/06/27(木) 12:00:13.73ID:poT+X0ln
柏さんかわいい
有安も良かった
0031デフォルトの名無しさん
垢版 |
2019/06/27(木) 16:15:04.17ID:tw9eT+4X
>>24
そして自ら田畑を耕し自給自足して金を一切使わない。
0034デフォルトの名無しさん
垢版 |
2019/06/27(木) 17:55:34.00ID:hnYWi9MG
>>33
お札(日本銀行券)は破損しても逮捕されないよ。
逮捕されるのはお金(硬貨)の方だ。
0035デフォルトの名無しさん
垢版 |
2019/06/27(木) 19:51:19.78ID:LYdb2c+f
>>34
貨幣損傷等取締法
っすね。
0036デフォルトの名無しさん
垢版 |
2019/06/27(木) 21:18:34.17ID:ynp0Kz4J
5000兆円を1万円札にしたら50万トン
毎日、1トン燃やして1369年
どんだけの量なんじゃw
0037デフォルトの名無しさん
垢版 |
2019/06/27(木) 21:26:26.15ID:tw9eT+4X
$100札の方が少しコンパクトではないかな。
0039デフォルトの名無しさん
垢版 |
2019/06/28(金) 09:59:38.37ID:0OgYllET
おれのビットコインなら0gだかそろそろ値が落ちそうだ
0040デフォルトの名無しさん
垢版 |
2019/06/28(金) 15:55:58.93ID:NZvm4G9K
お札を数珠繋ぎにして裸で首輪ってのが今のトレンドらしいが

千円でやるなんてみみっちい
壱万円でやれ
0041デフォルトの名無しさん
垢版 |
2019/06/28(金) 16:40:01.94ID:je8oM0Vb
5000兆円だと100万円の札束を数珠繋にして地球と月とを往復できる長さ。
どんだけー
0043デフォルトの名無しさん
垢版 |
2019/06/28(金) 21:17:21.86ID:ASw3jrNx
まず金にものを言わせてロビー活動をして日本政府に1000兆円札を作らせる。

するとたったの5枚に。
0044デフォルトの名無しさん
垢版 |
2019/06/29(土) 08:25:20.62ID:1As7AYKs
5000兆円を預金できる銀行はあるのだろうか?
桁数がオーバーフローしそう
金利0.001%でも膨大な額になる
0046デフォルトの名無しさん
垢版 |
2019/06/29(土) 18:06:44.77ID:k/WM/TXw
>>44
スイス銀行なら大丈夫な感じするな。
無理なら複数の銀行に分散したり自分で銀行作ったりするしかないかな。
0047デフォルトの名無しさん
垢版 |
2019/06/29(土) 18:40:58.45ID:s82QtMXw
自分で銀行作るのが最良だな
100兆円くらい使えば最高の施設と最高の人材を用意できるだろう
0050デフォルトの名無しさん
垢版 |
2019/07/02(火) 10:28:09.14ID:1e1Toq0F
専業主婦27歳結婚5年目の実態
1. テレビ、家事、買い物
2. 優柔不断、決定に時間がかかる
3. 映画、カラオケ
4. 細身、目鼻立ちハッキリ
5. 経験一人
6. 胸のサイズ(I), 毎日でもヤリタイ
経験人数は夫ただ1人 27歳Icup巨乳妻。もっとSEXがしてみたくてAVデビュー!! 松浦理央 MEYD-230
冒頭インタビューまとめ
0051デフォルトの名無しさん
垢版 |
2019/07/02(火) 12:23:39.55ID:duTOXDdL
そういやアクセス集中でサーバが重くて会員登録中々できないと今話題のファミペイアプリはアプリについて出すと先頭に Kotlin と出て来たよ。

https://i.imgur.com/0dlMYaV.jpg
0053デフォルトの名無しさん
垢版 |
2019/07/02(火) 13:34:21.60ID:uMGeffjZ
ファミペイは今日、テレビでやってた

公共料金なども支払えるから、ポイントが莫大!
0054デフォルトの名無しさん
垢版 |
2019/07/02(火) 14:11:52.81ID:duTOXDdL
ところが今はチャージがファミマのレジでの現金チャージかファミマTカードのクレジットカードでしかできない。
他のカード使えないので持ってない人にはあまりメリットが感じられない。
わざわざ現金チャージするぐらいなら他のなんとかペイを使っちゃうんじゃないかな。普通は。
005553
垢版 |
2019/07/02(火) 15:41:07.45ID:uMGeffjZ
7月中にチャージすれば、還元率は現金チャージで10%(上限2,000円)、
ファミマTカード(クレジットカード)のチャージで15%(上限3,000円)です

上限額あり

普段は、200円で、1円のポイントだって。
0.5%
0058デフォルトの名無しさん
垢版 |
2019/07/03(水) 07:26:46.26ID:ta2V4Cxk
>>53
15%と聞いて飛びつきそうになったが、上限3,000円ということは450円分。
500ポイントプレゼントにすら劣るわけで、一瞬騙されそうになって自己嫌悪。
0059デフォルトの名無しさん
垢版 |
2019/07/03(水) 09:44:57.10ID:0rGzsSa9
いやーしかし、この頃なんとかペイが増えて俺のスマホも関連アプリだらけになったよ。
0061デフォルトの名無しさん
垢版 |
2019/07/04(木) 14:17:38.28ID:9AcphcSS
Androidのアプリを作りたいと思っている一般人ですが、現状Kotlinが最適解なんですかね?
0062デフォルトの名無しさん
垢版 |
2019/07/04(木) 14:37:42.05ID:iqQZWFIm
>>61
Kotlinは言語としては超複雑な部類で初心者向けの情報も少ないから初学者にはお勧めできない
まずはJavaの入門書を一冊終えよう
0064デフォルトの名無しさん
垢版 |
2019/07/04(木) 16:08:20.82ID:E4xID2Gu
Kotlinは割とプロ仕様、ただ動かすだけならすっきりしていて良い言語だと思う
0067デフォルトの名無しさん
垢版 |
2019/07/04(木) 18:43:55.06ID:5l/F9O0W
>>65
普通に入門書読めば?
またはネットで検索しまくって調べる。
0070デフォルトの名無しさん
垢版 |
2019/07/04(木) 22:04:57.11ID:IenyIWZo
まだある。特に歴史のあるサービスだと新規部分はKotlinでも既存Javaコードはそうそうなくならない。
0072デフォルトの名無しさん
垢版 |
2019/07/04(木) 22:29:31.84ID:m3YKpmd7
>>65
速習 Kotlin

俺、Paperwhiteにdownloadしたけど、まだ最初読んだだけ。
固定レイアウトではなくflow layoutなのもGood.
0076デフォルトの名無しさん
垢版 |
2019/07/05(金) 13:32:47.35ID:Faw4Vm9D
7payがkotlinだったら嗤う
0080デフォルトの名無しさん
垢版 |
2019/07/05(金) 18:56:51.67ID:058dVN+5
Kotlinさえ使っていれば・・・

なんてことはない。
0086デフォルトの名無しさん
垢版 |
2019/07/05(金) 22:58:10.78ID:GPWuBIl5
もう死んでるけどNTTデータとかいうネクロマンサーが独自パッチを当てて使い続けてるそうだ
0089デフォルトの名無しさん
垢版 |
2019/07/05(金) 23:19:40.46ID:ooggE2Gp
>>81
もしかしてエルヴィス演算子?:じゃなくてSafe Calls ?.のこと?
>>87
別にラムダ式の中でthisが使いたいならrunでいいんじゃないかと。
0090デフォルトの名無しさん
垢版 |
2019/07/06(土) 01:00:18.43ID:7sFSWmXv
run/apply を選択する時は let/also における it を省略したい時
省略した際にプロパティと同じ名前のローカル変数・引数があると後者が優先されるので注意な
0091デフォルトの名無しさん
垢版 |
2019/07/06(土) 05:40:50.58ID:yJlOMfg/
>>87
凡ミスのリスクが上がるからDSLの文脈以外では
thisを差し替えるラムダはおすすめ出来ない

別言語での例として、JavaScriptのアロー関数式もfunction式と異なり
thisを差し替えないことが利点の一つとなっている
0092デフォルトの名無しさん
垢版 |
2019/07/06(土) 10:15:49.97ID:1dJxNgfF
>>90
applyの方が単語の意味的にコードの意図が明確になる気がするから好きなんだけど、そのローカル変数と名前被り問題がネックだわな。
0093デフォルトの名無しさん
垢版 |
2019/07/06(土) 10:42:53.28ID:PMIwOM+c
だったらrunとかalsoとか文法から消せばいいのに
混在して統一感取れなくてバグの原因にもなるからコーディング規約を決めないといけなくなるし
これは一つのKotlinが糞な点の一つだなあ一つの
0095デフォルトの名無しさん
垢版 |
2019/07/06(土) 10:55:51.02ID:yJlOMfg/
T.run, with, applyは実際消したほうがいい
let, alsoは要る

レシーバ無しのrunは上記と違いローカルスコープ用なので要る(Swiftでのdo)
0096デフォルトの名無しさん
垢版 |
2019/07/06(土) 11:05:16.69ID:NRY4HgVe
ちょっとしたシンタックスシュガーのせいでバグりやすい仕組みを作ったので、今度は曖昧さを無くすために明示的な記述を強制するターンだぞ
0098デフォルトの名無しさん
垢版 |
2019/07/06(土) 12:03:55.73ID:7sFSWmXv
apply はインスタンス化した後にそれに対する設定が書けるので便利
後、ビルダーパターンを独自スコープで書けるのも

with, run はほぼ使わないな…
0100デフォルトの名無しさん
垢版 |
2019/07/06(土) 23:00:37.81ID:QJqGW6Xc
>>95
レシーバ無しのrun{ ... }は{ ... }()でも書けるからやはりいらないのでは。
>>94
自分はスコープ関数早見表をブックマークしてる。
>>96
Effective Kotlinが出版されたら「itやthisよりも明示的な引数名を使う」が多分入ると思う。
0102デフォルトの名無しさん
垢版 |
2019/07/07(日) 09:51:44.20ID:b1ax5+md
そこらへんは実装時にちゃんと統制取れずグダグダと追加しちゃった感じあるよな
まじでスコープ関数こんなに何種類もいらんかったわ
0103デフォルトの名無しさん
垢版 |
2019/07/07(日) 15:50:19.67ID:XjejoYnQ
でも言語そのものではなく言語仕様に則って誰でも作れてしまう拡張関数だからな。標準的なライブラリに含めなくても何れ誰かが作っちゃうのではないかな。(それなら使用頻度が少ないから良いのかも知れないが)。
0109デフォルトの名無しさん
垢版 |
2019/07/08(月) 17:10:08.62ID:hzlBIGWN
確かに拡張関数が言語標準じゃなくて社内の誰かが勝手に作ってプルリク出してきてたらリジェクトするな、たぶん
紛らわしくてバグの原因になるからもうちょっと種類を減らせって言うわ
0110デフォルトの名無しさん
垢版 |
2019/07/08(月) 19:49:03.27ID:hKluWyE4
>>109
.also()が出来た理由が、ネストしたラムダ式の中で、itとthis両方を同時に使って引数名を
省略できるようににするためとかいう話があった気がするから、言語の方針として諦めざるを得ない...?
0111デフォルトの名無しさん
垢版 |
2019/07/08(月) 21:32:26.80ID:Z1fCyrsR
>>110
あー、そういうことなのか
言われればわかるけど、なんというか、その場しのぎ感が否めないな
0112デフォルトの名無しさん
垢版 |
2019/07/09(火) 09:57:55.96ID:gdYXIa6p
あらそう
0113デフォルトの名無しさん
垢版 |
2019/07/10(水) 01:43:17.34ID:TAagG0ML
Androidだけじゃなくて、サーバー側も勉強しようと思って
Goの勉強してるんだけどこれってサービスとしてリリースしようと思ったら
どこの環境で公開したらいいの
やっぱawsですかね従量課金怖いんですが
0115デフォルトの名無しさん
垢版 |
2019/07/10(水) 17:26:54.04ID:ZnoB4bea
このスレで聞くならサーバーサイドもKotlinで書けよ。
Spring bootはもうKotlinでなんの問題もないぞ。
0116デフォルトの名無しさん
垢版 |
2019/07/10(水) 20:36:25.12ID:bnXQMu19
時期早々なんで試してないんだけど、aws lambda にkotlin native乗せて遊んでみてほしい。
api gateway/dynamo db繋げればandroidからの呼び出しにちょうどいい課金形態やろうし。
0117デフォルトの名無しさん
垢版 |
2019/07/10(水) 20:54:12.25ID:lDiVjXP/
そうだ。このスレにおいては何もかも Kotlin にするのが正しい。
0125デフォルトの名無しさん
垢版 |
2019/07/12(金) 05:58:24.36ID:oNRVVyfS
>>124
なぜにKotlinの後継にしたし。
"Kotlin Class" Destroyer だけど、どうしても Kotlin "Class Destroyer" に見えてしまう。
デストラクタ的な何か。
0133デフォルトの名無しさん
垢版 |
2019/07/18(木) 16:02:15.41ID:3t7lxD2f
🔹Part 1傾向、正解のパターン(%)
1. 現在進行形 65
The trains are pulling into the Park Station.

2. 受動態 25
The vehicles are parked in front of the townhouses.

3. その他 10
There is/are
is/are being Vpp
has/have been Vpp

The cars are being parked alone the road.

https://www.youtube.com/watch?v=tTsJbMe_Gx0
0134デフォルトの名無しさん
垢版 |
2019/07/18(木) 16:08:36.41ID:3t7lxD2f
>>133
どうやら、is/are being Vppは動作を表すみたいだ。
e.g.
The potted plant is being placed under the picture.
0135デフォルトの名無しさん
垢版 |
2019/07/18(木) 19:27:38.33ID:q9HPUerJ
i have a pen
0137デフォルトの名無しさん
垢版 |
2019/07/18(木) 21:12:55.10ID:q9HPUerJ
println("你好")
0141デフォルトの名無しさん
垢版 |
2019/07/25(木) 20:32:43.93ID:AjtfUs9C
そういやコルーチンって中でどうやって実現してるの?見た目スレッドとほぼ同じ動きになってるようだけど。
0143デフォルトの名無しさん
垢版 |
2019/07/26(金) 08:25:41.88ID:TLvlzBFz
>>141
非suspendからの非同期開始は、JVMなどではスレッドプールへのタスク登録
JavaScriptではPromise(仕組みはsetTimeoutなどでのイベントループへのタスク登録)

suspend内は終わったら呼ばれるコールバック関数でのチェーン

val a = suspendFn1()
val b = suspendFn2(a)
print(b)
 ↓
suspendFn1() { a ->
  suspendFn2(a) { b ->
    print(b)
  }
}
0144デフォルトの名無しさん
垢版 |
2019/07/26(金) 09:41:46.26ID:OnWiMZ2p
>>140
過渡期
目的によるけど、正直今となってはRxを新しく使う必要はあまりない
ただし例えばスマホでRxSwiftに慣れてるメンバーがAndroidも作るならRxの方が良いとか色々ある
0146デフォルトの名無しさん
垢版 |
2019/08/04(日) 01:08:52.85ID:jdb5IUyg
java.beans.XMLEncoder や java.beans.XMLDecoder で XML 読み書きする場合に、書くのは出来ても読む時にクラスないって出て読めない。
うまく行ってる人居る?Java で作るとうまく行っても Kotlin だとダメなんだけど、何が原因なのかわからない。
0147デフォルトの名無しさん
垢版 |
2019/08/04(日) 07:20:33.29ID:pDN8jIIw
エラーが起きる最小コードを作って
環境/コード/エラーの3つをセットで貼るといいよ
0150デフォルトの名無しさん
垢版 |
2019/08/04(日) 13:55:38.93ID:jdb5IUyg
コードね。ちょっと待って。なるべく今日中に貼る。
0151デフォルトの名無しさん
垢版 |
2019/08/04(日) 15:34:58.73ID:jdb5IUyg
実行時にうまく行くパターンとダメなパターンがあることがわかった。
(というかむしろ自分でうまく行かないパターンをピンポイントで選んで実行していたような感じorz)

https://paiza.io/projects/6UeOmsYQMaYqbOlaYlvB-w

見ての通り paiza.io ではうまく行く。
その他、IntelliJ IDEA の Kotlin でもうまく行く。
コマンドラインで
kotlinc -d xmltest.jar -include-runtime xmltest.kt
java -jar xmltest.jar
でもうまく行く。

駄目パターンはこれだ。

・ コマンドラインから kotlinc -d xmltest.jar -include-runtime xmltest.kt でコンパイル後に
 kotlin xmltest.jar で実行。

・ コマンドラインから kotlinc xmltest.kt でコンパイル後に kotlin XmltestKt で実行。

すると java.lang.ClassNotFoundException: TestData を皮切りに色々と出てくる。
XMLDecoder#readObject() 実行時にクラスが見つからなっていて、要するに kotlin コマンド
内でセットしている CLASSPATH の問題なんだろうとは思うが、直前に writeObject() で
使っているクラスが直後の readObject() で見つからないという謎の状態だ。
(まあ、kotlin コマンドの中を延々と調べて行けば何れ分かるんだろうけどね・・・)。
0155デフォルトの名無しさん
垢版 |
2019/08/05(月) 20:47:56.43ID:LhsszH09
0156デフォルトの名無しさん
垢版 |
2019/08/05(月) 21:20:57.04ID:S7Ie+UC+
趣味でやってるならどうでもいいけど業務でそんな無駄なことしてたら引っ叩くわ
0164デフォルトの名無しさん
垢版 |
2019/08/10(土) 14:39:45.84ID:aHptj8zD
Set<K>とSet<V>からMap<K, V>を作りたいんだけどいい方法ある? (両方のSetは同じサイズ)
0167デフォルトの名無しさん
垢版 |
2019/08/10(土) 14:53:06.48ID:7hwbBJNq
>>165
LinkedHashSetかTreeSetにように順序付けがあるならいいけど
単にSetとして考えるなら順序不定だから2つのSetの関連付けが出来ない

仕様の前提から考え直したほうが良い
一応順序があるなら m = setK.zip(setV).associate{it} で出来る
0168デフォルトの名無しさん
垢版 |
2019/08/11(日) 21:22:32.39ID:ZXwxD5+u
今コード書いていて疑問に思ったんだけど、String#sliceとString#substringって何が違うの?
0169デフォルトの名無しさん
垢版 |
2019/08/11(日) 23:47:08.23ID:oR4Xkpxd
slice?
0171デフォルトの名無しさん
垢版 |
2019/08/12(月) 07:04:34.47ID:+GFDKMmL
あー。しかしちょっと違うね。CharSequence と String の違いか。
0172デフォルトの名無しさん
垢版 |
2019/08/12(月) 09:27:25.92ID:ByCVSLZd
String#slice -> String もあるよ

挙動に差があるようだけど実用上意味があるかは微妙だな
https://ideone.com/lIfuV9

fun ck(nm:String, f:()->String){
try { println("${nm} = ${f()}") }
catch(t:Throwable){ println("${nm} throw ${t}") }
}

fun ck(r:IntRange){
ck("su(${r})"){ "0123456789".substring(r) }
ck("sl(${r})"){ "0123456789".slice(r) }
}

ck(1..3)
ck(3..1)
ck(-2..-4)
ck(1..-1)
ck(-1..1)
ck(8..12)
ck(-4..-2)
0173デフォルトの名無しさん
垢版 |
2019/08/12(月) 10:26:11.95ID:rOThr/rm
この並存状態と微妙な差はJavaScriptの現状に倣ったんじゃないかな
いずれにしてもそれぞれの意図が明確にドキュメント化されていないみたいなので実装の差を活用する気にはなれないけど
0179デフォルトの名無しさん
垢版 |
2019/08/12(月) 17:32:35.13ID:ByCVSLZd
>>176
書き捨てなのと5chの制限回避で文字数・行数圧縮してるんすよ・・・
2文字以下で現代的(?)なのがあるならすまん
0182デフォルトの名無しさん
垢版 |
2019/08/12(月) 23:45:35.98ID:XEveaWQR
>>172
ちょっとわかった。ありがとう。
>>173
なんとなくそうかなと思っていたけど、やっぱりJavaScriptとの互換性のためにsliceを導入したのかな。
>>177
中高生...
0183デフォルトの名無しさん
垢版 |
2019/08/13(火) 15:31:14.99ID:5AmJrB7O
ckは中高年だろjk...
0184デフォルトの名無しさん
垢版 |
2019/08/13(火) 17:47:19.54ID:Jow6dsXJ
こういうところもKotlinがとっつきにくいと言われる一因だよな
まあ実際には知らなくても困ることはあまりないんだけど
0185デフォルトの名無しさん
垢版 |
2019/08/13(火) 19:30:04.03ID:9XoWp9xR
firebase firestoreを使っていて月額固定のflameプランを契約しているんですが、
一日の上限の読み取り回数である25万回を超えても普通に使えてるんですが何なんですかね
0186デフォルトの名無しさん
垢版 |
2019/08/13(火) 23:01:55.66ID:Jow6dsXJ
サポートに聞いてみたら?
勝手に追加課金されることはないだろうけど、確かめるに越したこたはない
0187デフォルトの名無しさん
垢版 |
2019/08/13(火) 23:40:10.49ID:9XoWp9xR
てか読み取り回数すぐ増え過ぎじゃないですか
realtimedatabaseより遥かに高い
これからはfirestoreに移行するもんだと思って使ってみてるのに
クエリー使わないならrealtimedatabase使ったほうがいいし
0188デフォルトの名無しさん
垢版 |
2019/08/14(水) 20:22:16.10ID:yoJp7Q+u
googleの新しいカモ要員っしょ
開発力あるなら柔軟性のあるGAEとかを直接叩くほうがいいと思う
0189デフォルトの名無しさん
垢版 |
2019/08/14(水) 21:19:15.88ID:84Oh9mQQ
オフライン機能ついたデータ同期する場合はfirestore楽なんだけど。
それを自前で実装?ご冗談を
0191デフォルトの名無しさん
垢版 |
2019/08/15(木) 19:17:22.46ID:HuJciu41
これもしかして25万回超えなかった日の分が
超えた日の分に補填されてるんですかね
0196デフォルトの名無しさん
垢版 |
2019/08/31(土) 15:34:13.20ID:8SnjJh04
初心者向けの本を買ったんだが、この方が簡単ですとか言いながらガラケー時代の画面を作らせるとんでもない本をつかまされた…
0197デフォルトの名無しさん
垢版 |
2019/08/31(土) 16:27:15.76ID:E5RG3LAO
>>195
ぐぐると出てくる

>>196
ガラケー?今さら実行可能な環境がないように思うが。
Androidだけどガラホで画面が狭いだけではなく?
0200デフォルトの名無しさん
垢版 |
2019/08/31(土) 21:17:33.98ID:fnsFNUOu
あーそれ系か。
昔(2000年頃)、DirextXで3Dシューティングを作るための勉強本が出たんだけど、
物凄く丁寧で最初は数学の復習が書いてあった。
(高校数学の法線ベクトルの考えたかとか)

で、読んでも意味がわからん勉強ができない俺を馬鹿にしてるのか金返せと
本屋に怒鳴り込んできた20代の子が居たんだよ。

だからかは知らないが、本に載ってるゲームは結構簡単なレベルのものが多くなったなあ。
0202デフォルトの名無しさん
垢版 |
2019/09/01(日) 01:06:54.68ID:sYwYgS29
>>200
尼でもコメントに理解出来ないって書いて評価下げる香具師が多いな
0205デフォルトの名無しさん
垢版 |
2019/09/01(日) 08:38:53.82ID:zZOev42p
まあ、著者や編集者の力不足で教えるの下手くそな本はあるにはあるよ
名プログラマーであるからといって、そのシステムの開発者であるからといって、他人(初学者)に教える文章を書くのがうまいとは限らない
ただ、思ったようなアプリの作り方が載ってないってのはあんまり作者の責任ではないな
0206デフォルトの名無しさん
垢版 |
2019/09/01(日) 11:16:53.58ID:kCJZVLuH
造り方が既にそこら中に転がってて後追いで造っても面白くないやろ
創り方は自分で考えろ
0208デフォルトの名無しさん
垢版 |
2019/09/01(日) 14:35:22.29ID:9BbodNVn
後追いいいじゃないか
先人が1ヶ月悩んだ結果を15分で乗り越えて経験積めるんだぞ
残り29日23時間45分はそれをもとにしたさらに別なことに使えるんだ
梃子の効果すごいだろ(間違い)
0212デフォルトの名無しさん
垢版 |
2019/09/02(月) 12:54:07.77ID:/e661u5A
香具師の木
0216デフォルトの名無しさん
垢版 |
2019/09/03(火) 14:26:04.23ID:6Dqkf6EJ
今からプログラミングを学ぶとしたらjavaよりkotlinのほうがいいよね?
0217デフォルトの名無しさん
垢版 |
2019/09/03(火) 14:34:14.84ID:fMS/rXUz
まあそうだろうな
0220デフォルトの名無しさん
垢版 |
2019/09/04(水) 19:59:15.19ID:juCQidKM
>>219
DSLは汎用ライブラリのために丁寧に設計する時用かな。
スキルによるだろうけどDSLのライブラリを使いたいとは思うけど、作りたいとは思わななかった。
0222デフォルトの名無しさん
垢版 |
2019/09/06(金) 20:10:18.09ID:+qwVl2yS
Kotlinでマウントするのはさすがに無理筋
こんなもんJavaわかれば誰にでもできる
0223デフォルトの名無しさん
垢版 |
2019/09/06(金) 20:29:16.58ID:cFgJ4jGo
JavaができるならいずれはKotlinもできるようになるだろうがすぐにではない。
すぐにできたとしても最初の内は Kotlin らしくない Kotlin の良さを生かし切れていない「セミコロンなし Java」みたいな、何年後かに自分で読み直すと修正したくてしたくてたまらなくなるようなプログラムになるであろう。
0225デフォルトの名無しさん
垢版 |
2019/09/06(金) 21:01:33.69ID:cFgJ4jGo
実は俺、N88BASIC(86)も使えるんだ(キリッ
0227デフォルトの名無しさん
垢版 |
2019/09/07(土) 00:23:23.27ID:C+Vj3AQn
アセンブラは価値があるかもだな。
どちらかというと何を作れるか、
もっと言うなら何を作ったことがあるかが大事かと。
0235デフォルトの名無しさん
垢版 |
2019/09/07(土) 14:20:04.10ID:6re/woh0
あ、すまん、回答ありがと
実際にjavaにしたいわけじゃない
将来的にkotlinだけの巨大なスパゲッティを見たときに正しく読めるかな?と不安になってね
0236デフォルトの名無しさん
垢版 |
2019/09/08(日) 14:12:59.11ID:vQDbHeJD
Kotlin使ってもなおスパゲッティになるようならJavaに変換したらもっと凄いスパゲッティになるのではないか?
0237デフォルトの名無しさん
垢版 |
2019/09/08(日) 14:21:36.92ID:vQDbHeJD
Javaで書くと冗長な感じになる表現を小さくまとめられる事が多いしKotlinはそういうのも目標にして作られた言語だからな。
だからJava→Kotlin変換をするとだいたいは量が増えて複雑怪奇なソースになると思う。
0238デフォルトの名無しさん
垢版 |
2019/09/08(日) 14:22:16.25ID:vQDbHeJD
逆だ。Kotlin→Java変換ね。
0239デフォルトの名無しさん
垢版 |
2019/09/08(日) 14:42:39.98ID:g2jzsvZp
作るのはまだjavaでいいだろうけどkotlinをネイティブで読めるようにはなりたい
0244デフォルトの名無しさん
垢版 |
2019/09/09(月) 23:58:48.28ID:66UIYaje
今まで買ったjavaの本、全部kotlinにならないかなぁ…
逆引きのkotlin版ってないの?
0246デフォルトの名無しさん
垢版 |
2019/09/10(火) 07:03:13.64ID:x/dcDmPS
java見ながらkotlinにして書いてると
つまずいたときにjavaでいいやってなる
変換はなんとなくわかるけど、省略するとこがいまいちわからん
どうやら自分は省略すればいいとこを無理に変換しようとしてるぽい
そしてまたjavaを書く
0247デフォルトの名無しさん
垢版 |
2019/09/10(火) 07:46:08.16ID:EO8p3gy7
書きやすい方からでいいよ

言語の慣れもあるけどプログラム経験の方が重要
プログラムイディオムや関数型の理解などが進めば
言語の切り替えもスムーズになる
0249デフォルトの名無しさん
垢版 |
2019/09/10(火) 12:42:23.43ID:rIrXed8C
むきむき
0250デフォルトの名無しさん
垢版 |
2019/09/11(水) 21:52:55.09ID:+fGXXck4
速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ Kindle版
山田祥寛 (著)

まあまあ、良かった。Delegate、移譲の部分が消化不良だが、byっていうキーワードでメソッドcallの時にReceiverを取り替えられるって事がわかった。
by Delegate()でa.someMethodっていうメソッド呼び出しをDelegateオブジェクトのsomeMethod呼び出しへと変換できるらしい。
someMethod呼び出しの中でNotificationを行うとかの応用ができる。

lazyとかっていうオブジェクトがよく解らんかった。動かしながら理解しないとだめだな。本を読んだだけではピンと来ない。
0251デフォルトの名無しさん
垢版 |
2019/09/11(水) 21:57:51.62ID:+fGXXck4
KotlinはSwiftに似てると思ってたが、言語仕様はSwiftに比べてコンパクトだった。

ただ、Kotlin関連用語がかなり違和感。vs Swift
constructer - initializer
lambda - closure
object - instance
val, var - let, var
fun - func
interface ISome<T: U> - protocol ISome { associatedtype = T where T: U}
0252デフォルトの名無しさん
垢版 |
2019/09/11(水) 21:59:48.92ID:+fGXXck4
>>251
Genericsの汎用型、型パラメータの書き方はKotlinの方が好みだな。
e.g.
interface ISome<T: U> {…}
0253デフォルトの名無しさん
垢版 |
2019/09/11(水) 22:04:19.76ID:+fGXXck4
他言語プログラマのためのKotlin基礎 Kindle版
Independent Laboratory (著)
その他()の形式およびエディションを表示する
Kindle版
¥0
Kindle Unlimited では、このタイトルや100万冊以上の本をお
0254デフォルトの名無しさん
垢版 |
2019/09/11(水) 22:05:44.19ID:+fGXXck4
>>253
次はこれ読んで見る。
0256デフォルトの名無しさん
垢版 |
2019/09/12(木) 07:23:50.51ID:W3DZId8k
漏れのフレームワーク本の著者の評価では、
掌田津耶乃がトップで、山田祥寛は2番目

山田は100名まで、1人4万円の講座もやってた
0260デフォルトの名無しさん
垢版 |
2019/09/12(木) 08:38:14.19ID:lapELpAL
あ、kotlinの英語の本です
技術英語なんて日本語の本と書いてあることはだいたい同じだから
0262デフォルトの名無しさん
垢版 |
2019/09/12(木) 09:27:48.98ID:sCqf+kbI
>>256
>掌田
この人の本、めったに当たりが無い。
Rubyの本は良かったな。特に、CGIの部分。Rails出現以前の本だった。
この本でhttpdがCGIをどう扱ってるか理解した。
httpのputリクエストのrequest headerをRubyアプリは、stdinから取り込むと知ったのだ。

それまでコマンドライン引数でrequest headerを受け取るのか?
はたまた、環境変数で受け取るのか不思議だったのだ。
0263デフォルトの名無しさん
垢版 |
2019/09/12(木) 09:37:40.30ID:mRFzyQxg
more
0264デフォルトの名無しさん
垢版 |
2019/09/12(木) 09:39:32.11ID:mRFzyQxg
>>262
言語は関係ない。とにかく標準入力から読めば良いのだ。
0266デフォルトの名無しさん
垢版 |
2019/09/12(木) 20:03:11.63ID:sCqf+kbI
>>253
この本、Win10環境で、Kotlinソースをコンパイルする方法が、巻末にあって良い!おまけにsource code download serviceもいい感じ。

Macbook Proをお布施代として払うのはこれからは遠慮したいし。
もう一冊の本、>他言語プログラマのためのKotlin基礎 Kindle版
こいつは、InteliJ IDEAだかなんだかのinstall方法からの説明で、思いやられる。

おれは、Vim + quickrun.vimで動かしたいのだ。おまけに、書籍掲載のソースのdownloadサービスも無し。
0267デフォルトの名無しさん
垢版 |
2019/09/12(木) 20:25:58.64ID:sCqf+kbI
>>266
他言語…本は、すぐ読めた。山田本には無いpackage文の説明があっていい感じ。
package sample.pkg
class Person(val name: String) {…}
って書ける様になるらしい。

それから、
kotlin-prior-learning-book.pdf
へのlinkがあって、これもこれから読んでみる。
0268デフォルトの名無しさん
垢版 |
2019/09/12(木) 20:36:51.69ID:sCqf+kbI
>>267
package文でクラス、メソッドをexportして
import文でクラス、メソッドをimportする訳だ。
import sample.pkg.Person
とか
import sample.pkg.*
とか、
import sample.pkg.launch as launch
でlaunch関数の呼び出しをsample.pkg.launchではなくlaunch一発記述OK.
0269デフォルトの名無しさん
垢版 |
2019/09/19(木) 21:23:28.48ID:Q9xACwLf
var f = syori()
while (f != null){
 syori2()
 f = syori()
}

これ↑かっこいい書き方ない?
0271デフォルトの名無しさん
垢版 |
2019/09/19(木) 22:16:26.03ID:Q9xACwLf
>>270
それそれ
さん
0273デフォルトの名無しさん
垢版 |
2019/09/21(土) 14:27:28.60ID:+0XYo8lQ
作ればわかる!のkotlin対応版いいね
androidをkotlinで始める人で、とにかくサンプルを書き写したい!って人にお勧め
書け!ってとこを色分けで指示してあるからどこに書けばいいのかも分かりやすい
3.5環境のkotlinXのチェック入った状態でウクレレ前までやったけどimportを自分で書こうとしなければ変なエラーもなく普通に実行できた
中身が分かったか?と言われたらこれからだw
頑張る
0274デフォルトの名無しさん
垢版 |
2019/09/21(土) 14:55:08.61ID:Ydb2EKuB
>>273
>作ればわかる

作ればわかる! Androidプログラミング Kotlin対応 10の実践サンプルで学ぶAndroidアプリ開発入門 単行本(ソフトカバー) – 2019/6/19
0275デフォルトの名無しさん
垢版 |
2019/09/21(土) 15:14:04.38ID:+0XYo8lQ
>>274
それ
今はAndroidアプリ開発の教科書 kotlin対応 基礎&応用力をしっかり育成 ってのやってる
実は最初にこっち買った
今なら読める
0276デフォルトの名無しさん
垢版 |
2019/09/22(日) 00:45:59.55ID:8WvCpGjB
val adapter = mSpinner.adapter //Spinner
for (i in 0 until adapter.count) {
 if (adapter.getItem(i) == ”ここ”) {
  mSpinner.setSelection(i)
  break
 }
}
これ↑もっとかっこよく書ける?
0277デフォルトの名無しさん
垢版 |
2019/09/22(日) 07:05:45.40ID:T60Ukkg+
>>275
>Androidアプリ開発の教科書

基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン

これ良さそうですね。消費増税前に買っちゃおうかな。
0278デフォルトの名無しさん
垢版 |
2019/09/22(日) 07:57:26.70ID:Lf1jgTon
>>277
今年から趣味で休日プログラマー始めた初心者なんだけどSQLサンプルあるから最初にこれ買った
Android studioに慣れてなかったから初心者にはちょっと難しいかな
だから少し慣れた人にお勧め
こういうサンプル書いてある本は実際に動いて満足感得られるし紙上で矢印とかペン入れできるし理解を得るには良いですよね
サンプル載ってる本は他にもjavaも含めて5冊くらい買っちゃった
0279デフォルトの名無しさん
垢版 |
2019/09/22(日) 08:50:40.04ID:/w4tjdNw
この一連の自己レス臭い本の宣伝は何なんだ
こんな所でやっても効果無いだろ・・・
0280デフォルトの名無しさん
垢版 |
2019/09/22(日) 09:31:14.71ID:T60Ukkg+
>>278
解る。

Visual Studio本、多量に買った。▶仕事でGUIアプリ作った。

Xcode本、10冊位買った。▶仕事でアプリ作ったが、職場で採用。

Android Studio本、1冊買った。Yahoo黒帯とか言うやつ▶趣味で始めたが、時間が取れない。◀イマココ
0281デフォルトの名無しさん
垢版 |
2019/09/22(日) 10:20:57.94ID:Hc6O2uDq
>>276
searchのところは、ArrayAdapter#getPosition(T)がある。
0283デフォルトの名無しさん
垢版 |
2019/09/25(水) 09:07:52.84ID:pkvL+Jrl
>>273だけど
もう一度最初からやってみたらビジネスカードのところで躓いた
どうやらandroidXになる前に作ってたぽい
PreperenceManagerがXになって廃止になったとかなんとか、
一応他の方法で回避できたけど全くの初心者はここで立ち止まると思う
0284デフォルトの名無しさん
垢版 |
2019/09/25(水) 09:28:46.36ID:pkvL+Jrl
>>283
あらら、ダメだ
血圧アプリのRealmの書き方もandroidXに対応してないな
ん〜悩む
0289デフォルトの名無しさん
垢版 |
2019/09/27(金) 00:43:53.70ID:4sT2Ig8J
Kotlinの文字列中に変数かけるやつ
依存関係が逆転してる感じですごい嫌だなーとおもってたら
C#まで真似しやがった
世も末
0290デフォルトの名無しさん
垢版 |
2019/09/27(金) 05:17:59.01ID:JbCMTE4l
あんなの単なるStringBuilderの構文糖衣じゃん
あと変数でなく式な

"aa${10+1}bb"

StringBuilder("aa").append(10+1).append("bb").toString()
0294デフォルトの名無しさん
垢版 |
2019/09/27(金) 08:07:07.40ID:yKrr7IDu
""に値を設定するんでなく""から外を参照する形になって文字列が文字列じゃなくなった
書いてある文脈中でしか使えない。フォーマットと違ってどっかよそに貼り付けてもそれだけじゃ動かんくなる
変数の名前同じにしとけとかねーよ

最初から式ならまだしも""の中が実質文字列じゃないとか勘弁
0295デフォルトの名無しさん
垢版 |
2019/09/27(金) 08:40:34.43ID:UchHMfCe
sh の "〜" が遥か昔から中の変数等を展開してくれる仕様
代わりに '〜' を使うと変数等の展開をしない
0296デフォルトの名無しさん
垢版 |
2019/09/27(金) 14:52:54.16ID:3totJIv/
大体の言語には埋め込みと.format呼ぶ2つのやり方があるんだから、簡単に文字列結合したいときと固定フォーマットを定義したいときで使い分けたらいいんじゃないかな?
0297デフォルトの名無しさん
垢版 |
2019/09/27(金) 17:44:05.63ID:5yEB7nBc
言いたいことは分かるけど、新しいものを受け入れられなくなるってのはこういうことなんだな、と思った
0298デフォルトの名無しさん
垢版 |
2019/09/27(金) 17:47:07.30ID:/3CUbuCi
俺はシェルみたいな埋め込みができて素晴らしいと思ったけどね。
楽だし。
0299デフォルトの名無しさん
垢版 |
2019/09/27(金) 19:04:48.74ID:f2vxlf0q
Ruby の文字列・ヒアドキュメント内の式展開だろ。
"abc = #{ 式 }"

Rubyを真似て、Python, JavaScript(JS), Elixir でも採用された。
JS(ES2015)で言う、テンプレートリテラル
0300299
垢版 |
2019/09/27(金) 19:13:15.44ID:f2vxlf0q
ERB(埋め込みRuby)と同じ

最初は、HTML の文字列をつなげて、HTMLを作っていたのが、
発想を逆転させて、HTMLの中に、<% 〜 %> で、Rubyの式を書けるようにした

<p>
Name: <%=h name %>
</p>

h は、HTMLエスケープをする関数
0301デフォルトの名無しさん
垢版 |
2019/09/29(日) 16:07:58.39ID:YU+7wDew
名前がアニオタっぽくて嫌
0302デフォルトの名無しさん
垢版 |
2019/09/29(日) 17:21:17.15ID:2aSU+D40
琴輪
0304デフォルトの名無しさん
垢版 |
2019/10/01(火) 13:48:25.74ID:EybpXLwx
try kotlinとかの上に出てくるネコのシルエットって何ですか?
ネコちゃんの名前が知りたい
0306デフォルトの名無しさん
垢版 |
2019/10/01(火) 16:05:31.80ID:PlApYvsP
∧_∧  / ̄ ̄ ̄ ̄ ̄
( ´∀`)<  ・・・
(    )  \_____
| | |
(__)_)
0311デフォルトの名無しさん
垢版 |
2019/10/05(土) 00:16:58.11ID:rZgh896s
はじめてのandroidプログラミングのサンプルで使われてるライオンの画像がかわいいw
0313デフォルトの名無しさん
垢版 |
2019/10/05(土) 22:05:30.67ID:8kkLWvad
べつにされてもどうってことないよ
毎日食ってウンコしてシコって寝てるだけのオッサンのハゲ頭監視して
それ何か得することあんのか? 監視してるやつはバカとしかいいようがない
0315デフォルトの名無しさん
垢版 |
2019/10/07(月) 15:34:48.22ID:Sfhnmnfb
kotlinよかJavaの方が汎用性が高いので
androidappもJavaで書きたいんだけど
リファレンスではkotlinfirstだからな!って威張りやがるので
androidapp開発って、いつまでjavaで引っ張れるか、だれかプリーズ!
0316デフォルトの名無しさん
垢版 |
2019/10/07(月) 15:39:15.19ID:rds9MmBY
わしはもうkotlinじゃ
0317デフォルトの名無しさん
垢版 |
2019/10/07(月) 15:47:14.56ID:lSqRbxbA
そんなもんわからないので俺の主観で直感のみを使ってお答えしよう。

あと・・・3年ぐらいかな?
0319デフォルトの名無しさん
垢版 |
2019/10/07(月) 16:09:43.37ID:lSqRbxbA
Androidのアプリ開発で使われる事は減るのではないかな。
0321デフォルトの名無しさん
垢版 |
2019/10/07(月) 16:47:53.96ID:lsopFfLk
ありえないとは思わんが、もしJavaサポートをAndroidから排除する日がくるとしたら
それはGoogle端末がAndroidを載せるのを止める日だな
0322デフォルトの名無しさん
垢版 |
2019/10/07(月) 16:48:30.06ID:lSqRbxbA
サポート外にはならなくてもアプリを作る時のJava使用率は減るのではないかな。
0323デフォルトの名無しさん
垢版 |
2019/10/07(月) 17:10:42.95ID:L7z14gMx
どうでもいいでしょ
世の中で圧倒的にKotlin<<Javaなのはこれからもずっと変わらないんだし、
たぶんJavaからKotlinへの移行が進むよりもスマホアプリをJVMモドキで作ること自体が廃れる方が早いよ
0324デフォルトの名無しさん
垢版 |
2019/10/07(月) 17:14:52.96ID:lSqRbxbA
そしたら Kotlin native なりなんなりそのプラットフォームに合わせたコンパイラ使えば良い。
0325デフォルトの名無しさん
垢版 |
2019/10/07(月) 17:18:51.34ID:rds9MmBY
java知ってるならkotlinは楽
androidはkotlin化で立ち止まるよりライブラリの統合で使えないの?!ってなって考えることの方が多い
0326デフォルトの名無しさん
垢版 |
2019/10/07(月) 17:29:32.36ID:Sfhnmnfb
リファレンス様の顔色を窺ってみますと
android app作るのならkotlinな
サポートもkotlinに絞るぞと言っているような勢いを感じてしまう
0327デフォルトの名無しさん
垢版 |
2019/10/07(月) 18:11:11.20ID:Cu2dn/vN
googleはもうjavaのサポートレベルあげなさそうだよな。
今はJava8までの言語機能使えるんだっけか?
0331デフォルトの名無しさん
垢版 |
2019/10/08(火) 00:00:02.76ID:fx3YZ1T9
Googleの言語は理想ばっかりで現実(ライブラリとサポート)が
追いつかなかったからなあ。
0332デフォルトの名無しさん
垢版 |
2019/10/08(火) 06:11:11.26ID:BYPsqzOs
google天才レベルばかり集めた結果、大多数の凡人が付いてこられなくなった感じはある、なににつけても
0334デフォルトの名無しさん
垢版 |
2019/10/08(火) 09:15:21.58ID:dMLk3GdV
IQ150以上の人が作ったものなんて
大半(IQ90〜120)の人が使っても使いづらいだけ
ギフテッドは汎用ものを手掛けたらだめでしょ
0338デフォルトの名無しさん
垢版 |
2019/10/08(火) 13:33:32.41ID:gO+Oxfwr
AndroidのMSスマホだろ?
スマホに関してはWindows諦めたということだな。
0339デフォルトの名無しさん
垢版 |
2019/10/08(火) 13:39:24.55ID:7Wk+kjRy
Googleはデータドリブンに傾倒しすぎた結果、プログラミング言語自体の面白さが生産性を高めないことを確信してしまったんだろう
MSもJetBrainsもそんなことは昔から重々承知だろうけど、
さすがに長年開発ツールを作ってきただけあって使ってもらうためにはプログラマに心理的に好まれることも大事であると理解してるんだろうね
0340デフォルトの名無しさん
垢版 |
2019/10/08(火) 22:47:14.28ID:UZ4l5hHn
>>339
0341デフォルトの名無しさん
垢版 |
2019/10/09(水) 21:58:29.86ID:+IXxZ8i9
Swiftのコードを移植しやすくするために、プロトコルを移植する術を用意して欲しいな
0343デフォルトの名無しさん
垢版 |
2019/10/10(木) 09:44:34.71ID:f2z6TkRs
>>334
今回ノーベル賞貰った人のIQは150未満だったのか?
電池使いやすいぞ。入れとくだけだし。
0344デフォルトの名無しさん
垢版 |
2019/10/10(木) 09:47:43.02ID:f2z6TkRs
ま、しかし、大人のIQって一体何を基準にして出すのか謎だな。子供ならまだわかるんだが。
0345デフォルトの名無しさん
垢版 |
2019/10/10(木) 09:58:04.45ID:yMym0WfO
IQ = 偏差値 x 2
0347デフォルトの名無しさん
垢版 |
2019/10/10(木) 12:54:39.50ID:f2z6TkRs
>>345
そうするって決まってるの?どこで決めた?
0350デフォルトの名無しさん
垢版 |
2019/10/10(木) 21:06:55.89ID:f2z6TkRs
>>348
そうか。

とりあえずWikipediaで「知能指数」を見てみることをおすすめする。
16歳ぐらいまでしかちゃんとした測定はできないと考えて良い。
0356デフォルトの名無しさん
垢版 |
2019/10/23(水) 13:23:08.82ID:9StfI0ul
サーバかどうかに関わらず動くと言えば動く
0357デフォルトの名無しさん
垢版 |
2019/10/23(水) 13:25:26.53ID:9StfI0ul
ていうかだな、VMのレベルでJavaとの互換性あるんだからJavaでできることはなんでもできるよな。
互換性というかJavaバイトコードそのままなわけだが。
0360デフォルトの名無しさん
垢版 |
2019/10/29(火) 19:28:43.34ID:/JOXqSLR
bit演算子がand/orで、conditionalの方が&&/||って紛らわしいな。
0362デフォルトの名無しさん
垢版 |
2019/10/30(水) 10:21:31.19ID:boKIoRF+
単語と記号の混在が紛らわしいって話でしょ
VB系がAndとAndAlsoで、C系が&と&&で一貫しているのに対して、Kotlinはandと&&の組み合わせを選んでて言われてみると少し変
andはメソッドで&&は演算子だから差別化したかったというなら理解できるが、andを演算子オーバーロードしなかったのは何でだろうな
notはしてるのに
0363デフォルトの名無しさん
垢版 |
2019/10/30(水) 10:32:29.86ID:C/RG5q83
VBではAndもAndAlsoも、条件分岐用(BOOL系)で、AndAlsoが、
C での&&相当なんですね。x And y も C のx && yに近いが、
xが偽の場合でもyを評価してしまうところが && と違う。
そこで && と同じ動作を行わせるために導入されたのが AndAlsoと。
0364デフォルトの名無しさん
垢版 |
2019/10/30(水) 16:18:46.97ID:1J5CWeWV
Pythonは、kotlinとは反対だな。
and/orはいかにも文章的で、こっちの方がしっくりくる。
0365デフォルトの名無しさん
垢版 |
2019/10/30(水) 17:38:05.90ID:C/RG5q83
それに、&& や || は長さも & や | より長いので、少し長い and, or と対応し易い。
後やはり、伝統的なBASIC言語との互換性は重要だ。そっちを覚えている人は
世界では沢山入るはず。特にアメリカ。
0367デフォルトの名無しさん
垢版 |
2019/10/30(水) 20:40:57.63ID:6r1QZ6yg
and, orは値によっては計算を評価しないというifの役目もしてるから
ほかの演算子と一緒くたにするのは気分が悪かったのかもしれない

とおもったけど&&使ってもandと評価される項目一緒だっけ
0368デフォルトの名無しさん
垢版 |
2019/10/31(木) 06:45:28.23ID:GYAqAxt3
Kotlinの言語開発者は、andとorは拡張関数で実装すればKotlinの文法の範囲内で文章的に書けると思ったのかも。
ただ、>>367が指摘するように拡張関数のand, orは短絡評価がないから
&&, ||とは同じ動作にならない上にパフォーマンスも若干落ちるという残念な仕様に。
将来的に短絡評価するアノテーションとかを作れば何とか出来ると思っているのかいないのか。
0369デフォルトの名無しさん
垢版 |
2019/10/31(木) 07:22:01.32ID:HKEmMyl3
>>368
短絡評価しないから残念というものではなく副作用を考えて使い分けるものだよ
だから多くの言語ではわざわざ2種類用意されてる
前段については同意だがやはりなぜ演算子オーバーロードしなかったのか疑問
0370デフォルトの名無しさん
垢版 |
2019/10/31(木) 11:07:41.22ID:JXLI+jKB
ビット演算と論理演算の違いって>>360が書いてるやろ
ビット演算を短絡評価のない論理演算と捉えてるやつが多くてオシッコちびるわ
0372デフォルトの名無しさん
垢版 |
2019/10/31(木) 20:48:39.66ID:rgtTn2y8
ビット演算と論理演算の違いはC C# Javaとかでも同じっすよ
言語仕様を広げたくなかったんじゃね

Kotlinのandとかは言語仕様に無くて単なる標準ライブラリの関数扱いだし
0373デフォルトの名無しさん
垢版 |
2019/10/31(木) 20:58:37.80ID:IuiVo8Vq
>>371
ただちに使いなさい。
0374デフォルトの名無しさん
垢版 |
2019/10/31(木) 22:36:23.90ID:GYAqAxt3
>>369
演算子オーバーロードを許すと、Int, Boolean等以外のLocalDateTimeのようなプリミティブでない
クラスにまでユーザーが論理演算(もしくはビット演算)を定義できてしまうから
好ましくないと思ったのかなと。

>>370
Booleanに限って言えばビット演算と論理演算は(短絡評価を除けば)等価なはず。
Booleanとand, orを組み合わせれば、(短絡評価の問題を除けば) &&, || が不要になる。
0376デフォルトの名無しさん
垢版 |
2019/11/01(金) 01:05:00.03ID:fA7q3dtP
>>375
何を言っても推測にしかならないけど、一つは&&の短絡評価を演算子オーバーロードで再現できないからではと思う。
a && b が bがBooleanかどうかでbが評価されるかどうかが変わるということを避けたかったのではと。
もう一つは、>>372の言うように言語仕様を最低限にしようとしたのではと思う。
Kotlinはシフト演算を見る限り、ビット演算しようとする人には優しくない気がする。
>>375がandでオーバーロードしたかったのが&か&&かはっきりしないけど、少なくともどちらか一つは答えになっているかと。
0377デフォルトの名無しさん
垢版 |
2019/11/01(金) 01:21:46.87ID:RfnyKZTx
「演算子オーバーロードしなかった」の意味がよくわからない
&演算子が無いことの話なのか、オーバーロード出来るかどうかの話なのか

後者なら単なる関数なので普通に出来るけど
class A(val s:String) { override fun toString() = s }
infix fun A.and(o:A) = A("${this.s}∩${o.s}")
fun main(args: Array<String>) = println( A("x") and A("y") )
0378デフォルトの名無しさん
垢版 |
2019/11/01(金) 09:34:45.45ID:zrbJp7o3
演算子がないことを、演算子オーバーロードしてないと言ってるんだろう

https://github.com/Kotlin/KEEP/issues/142
中の人は演算子提供するのに乗り気じゃなさそうだけどそのうち追加されるんじゃないか
shl/shrとかわかりにくいしand/orも他言語から来ると思考ノイズでしかない
0379デフォルトの名無しさん
垢版 |
2019/11/02(土) 17:53:52.29ID:QgMrWwpO
ビット演算するとき、|=、&=って激しく便利だし頻出だと思うんだけどなぁ。
0380デフォルトの名無しさん
垢版 |
2019/11/02(土) 18:52:11.73ID:5tts/hNl
そもそも複数のbooleanで扱うべきフラグをビット演算で1つにしてるAPI設計が良くない説
0381デフォルトの名無しさん
垢版 |
2019/11/03(日) 06:01:49.39ID:1XdbflyH
>>380
ハードウェアがそうなってるのだから仕方なかろう。
いっぺんに書き換えないと挙動が変わってしまう
0382デフォルトの名無しさん
垢版 |
2019/11/08(金) 01:15:52.84ID:cpVwQa3m
しーん
0383デフォルトの名無しさん
垢版 |
2019/11/16(土) 20:04:36.15ID:IPxvB3iz
javaラーがコトリンに乗り換える勉強するのにどれくらい移行期間かかります?
0386デフォルトの名無しさん
垢版 |
2019/11/16(土) 22:11:24.92ID:gv6Xc8ej
超天才でスーパーな人なら入門書パラパラめくって眺めて30分ぐらいかな
0387デフォルトの名無しさん
垢版 |
2019/11/16(土) 22:13:58.74ID:gv6Xc8ej
1時間後にはもっと凄い新言語に閃いて作りはじめる
0392デフォルトの名無しさん
垢版 |
2019/11/17(日) 17:31:59.24ID:8gWobnsK
あれ?forループで変数インクリメントするようなのできねーじゃん。なに?while使ってやれっての?えー!

ってなってから、なーんだ (a..b).forEach { } でやりゃあいいんじゃん。
と、気づくまでに3日以上掛かった。
0393デフォルトの名無しさん
垢版 |
2019/11/17(日) 17:34:56.22ID:8gWobnsK
ていうか for (n in a..b) でもいいのだが、a..b が Range になっててあとはコンパイラが自動でうまいことやってくれる事に気づかなかった。
0397デフォルトの名無しさん
垢版 |
2019/11/19(火) 09:55:32.18ID:c65LTQ+s
>>395
ダメじゃないけど沢山あると嫌な感じ
0399デフォルトの名無しさん
垢版 |
2019/11/19(火) 14:30:37.08ID:trU3CZAC
なぜどうしてもそこに必要なのかを説明できない!!は書いてはならない
あとあと絶対にそこでコード的にまたは仕様的にバグるから、むしろ遠回りになる
0400デフォルトの名無しさん
垢版 |
2019/11/19(火) 16:25:17.02ID:bEq52YpT
null許容変数がnullになるかもしれないから!!なんじゃないの?
そういう認識なんだが
0403デフォルトの名無しさん
垢版 |
2019/11/19(火) 19:39:12.55ID:bMvJvF/Q
>>400
動作の説明としては全くその通り
しかしそれをコードに適用するデメリットが大きいので全世界中からやめと毛と言われている
0404デフォルトの名無しさん
垢版 |
2019/11/19(火) 21:21:13.73ID:c65LTQ+s
0405デフォルトの名無しさん
垢版 |
2019/11/19(火) 23:23:22.22ID:bEq52YpT
>>403
nullになるかも?なだけで実行順を追っていくとならないことが多いからそのままにしている
必要なら対策するけど、ほとんどの場合は実行タイミングに何か値が入ってる
変に怖れて潔癖にならない方がいい
0406デフォルトの名無しさん
垢版 |
2019/11/20(水) 00:18:44.73ID:Cb5VPrea
!! は、絶対に、null にならない場合だけに使うべし!
notnull

強制キャストと同じ
0407デフォルトの名無しさん
垢版 |
2019/11/20(水) 00:47:14.79ID:ENHG5n4o
例外が発生するから!!が良くないと考えているならそれはnull安全を履き違えている
重要なのは区別することで、どう処理するかは要件次第

処理のタイミングで非nullであるべき変数なら
ガード節、requireNotNull、!! などによって早期にスマートキャストすべき
そのような箇所で不用意にセーフコール(?.)を使うことはいわゆるエラーの隠蔽に繋がる

nullが正常系の内ならもちろんセーフコールなりエルビスなりで問題無い
0409デフォルトの名無しさん
垢版 |
2019/11/20(水) 00:53:35.65ID:ENHG5n4o
>>408
Kotlin公式では not-null assertion operator とある
Swiftと合わせた方が分かりやすいとは思うけどな
0410デフォルトの名無しさん
垢版 |
2019/11/20(水) 01:40:06.34ID:We9TyGj3
例えば画像Aを表示する座標x,y
初期値を画面外の-500,-500にしておけば!!は消せるけど
画面外に表示ってリソースの無駄
これを良しとするやつは複数の画像を画面外に常に表示している
逆にメモリ足らなくなって落ちない?
使わない場合はnullでよくね?
読込みに時間かかるなら初期値設定するのもありだけど
あくまで重い画像を複数使用する例なんだけどnullを悪としてとらえず利用しようよ
上記の理由により、!!潔癖症はただ邪魔なだけ
0411デフォルトの名無しさん
垢版 |
2019/11/20(水) 02:09:26.97ID:6LF6wg+P
!!を使わなくても安全に実装できるのにあえて!!を使うのは頭が悪いですと言っているようなもの
0412デフォルトの名無しさん
垢版 |
2019/11/20(水) 07:14:57.99ID:U5Gi9XNc
ファイルヘッダとかにマジック定数あるが、これを表現するには
val hoge = arrayOf('a','1').map { it.toByte() }.toByteArray()

みたいな悲しいことしないといけないのでしょうか?

それとkotlinで一般的なバイトバッファを表現するにはByteArrayつかっておけば間違いなないでしょうか?
0413デフォルトの名無しさん
垢版 |
2019/11/20(水) 07:18:15.00ID:U5Gi9XNc
今はJVM環境で使ってますが、一応コード書くときに、特定のプラットホームに依存しないように書けるとこは書こうと思います

ちょっとつっぱしてByteArrayじゃなくてexperiment なUByteArrayを使おうと思いますが
0414デフォルトの名無しさん
垢版 |
2019/11/20(水) 07:47:32.01ID:ENHG5n4o
>>411
なぜ使うべきでないのかを説明出来ない限り、議論の出発点にも立っていない

例えば俺は>>407で書いた順の通りガード節、requireNotNullの方が
より明示的かつメッセージ付加可能でなので!!より優先すべきと考えるが
本質的には大差無い

NullObjectパターンは有用ではあるが
セーフコールがあるKotlinでは必ずしも必要としない
そのようなケースはnullが正常系の内であるのと同義
0415デフォルトの名無しさん
垢版 |
2019/11/20(水) 09:35:14.21ID:kKZK+bE1
>>410
使わない場合はnull、っていうケースは文字通りガード節や?.を使って
nullならなにもしない場合、と同義なのでは
!!を使うべき例としてはピンとこない

!!を使っている関数は引数つまり関数の仕様としては一見null許容型だけど、実装としてはnullを拒絶する不整合がある
何らかの事情で回避が難しいときの苦肉の策で、多用するのは作りが悪いように思う

あとは関数内で既に非nullであることが保証されてるパスの中にいる場合の簡略化で使うか
でもこれを多用するようなら関数が長すぎるという問題を暗に抱えていたり
安全や可読性よりも手抜きを選ぶ悪癖の疑いを感じる
0416デフォルトの名無しさん
垢版 |
2019/11/20(水) 11:41:13.79ID:NJaF4OnZ
!! null即エラー演算子。
force unwrapでは全く本質を言ってない。
0421デフォルトの名無しさん
垢版 |
2019/11/20(水) 17:12:40.65ID:gQNT2Wxf
val なんだと: Int? = null
0422デフォルトの名無しさん
垢版 |
2019/11/20(水) 22:37:14.64ID:F7b4EQq2
checkNotNull(nullable) { "説明" } がいいんだろうけど、!! で楽したくなる時がある

>>412
byteArrayOf が使いたいって言ってる?
0425デフォルトの名無しさん
垢版 |
2019/11/21(木) 00:03:38.40ID:OWTu/Eih
java のライブラリの @Nullable とか、json で条件によって null / not null が切り替わるプロパティとか
0428デフォルトの名無しさん
垢版 |
2019/11/21(木) 04:20:54.23ID:UJdhtJJC
あたたたたたたたひでぶ!!
0429デフォルトの名無しさん
垢版 |
2019/11/21(木) 06:28:21.69ID:87sZA2Me
>>427
nullableな値を返す外部の関数について、文脈上nullが返らないことが保証できる場合にまで
null対応を書くのは、可読性やパフォーマンスの上で無駄が多いからだと思う。
特にJava(あるいはJavascriptやnative)由来の関数とか。
0430デフォルトの名無しさん
垢版 |
2019/11/21(木) 06:34:18.07ID:87sZA2Me
>>429
誤解されそうなので補足。
1行目の「外部」っていうのは3行目のKotlin外という意味ではなくて、
標準ライブラリを含めて他人が作ったライブラリという意味です。
0431デフォルトの名無しさん
垢版 |
2019/11/21(木) 06:56:28.51ID:SWfOk2xI
そのkotlinの存在意義ぶち壊す特異性からしても、どーしても仕方なく使うものであるのだけど
エラー消すおまじないみたいなノリで初心者から中級者が使うので戒められている次第
あと、感染するんだコレ
0433デフォルトの名無しさん
垢版 |
2019/11/21(木) 08:03:18.32ID:tRt1kz+E
1.3.60出てたから久しぶりにkotlin native試してみたらhello,worldのコンパイル時間が更に伸びてた!
10秒→16秒!
何か早くする方法ないの?
0435デフォルトの名無しさん
垢版 |
2019/11/21(木) 08:06:53.77ID:Bt7t64ET
実行タイミングが来るまで置いておくだけの関数の中で使う変数は、その関数を実行する前までnullでいいよな?
そういう理由で!!のままにしてるんだけど!!潔癖以外の意見が聞きたい、ロジカルな理由を
その会社の規約なら!!使わないけど
使っていけないならそもそもビルド通らんだろ
0437デフォルトの名無しさん
垢版 |
2019/11/21(木) 08:53:15.49ID:0YdMrNda
>>433
所詮はオモチャなんだからどうでもいいでしょ
JetBrainsとしてもまだコンパイル時間の最適化なんか気にする段階じゃないだろうし
0438デフォルトの名無しさん
垢版 |
2019/11/21(木) 08:54:35.85ID:Vn+a4ljF
状況が限定されるが、あるクラスがnull相当の状態をとりうるメンバ変数を持っていて
その値がnullのときに呼んだらバグとして例外を出したいメソッドがあるときは
!!を使ってもいいかなと思う

requireNonNullのほうが可読性と保守性でベターだけど本質的には大差ない
残念な!!の使い方ではないんですよと表明している程度(それが重要でもあるわけだが)

NullObjectパターンは必ずしも良い置き換えにはならない
NullObjectかどうか忘れず判定してIllegalStateExcptionを投げなければならない状況になるくらいなら
nullチェックを言語仕様で強制されるほうが手が掛からず安全性も高い
上でも言われていたが例外も何も出ずにバグがしれっと埋もれるほうが危険
0441デフォルトの名無しさん
垢版 |
2019/11/21(木) 10:50:30.22ID:PQRrRahX
>>435
ものによる。初期化しないとか by lazy にするとか他の方法があるならそちらを使う方が良いかも知れない。
0446デフォルトの名無しさん
垢版 |
2019/11/21(木) 15:30:07.46ID:9TFt1oIy
>>438
nullには型チェックが働かないことを忘れちゃいかん。

nullobjectじゃなくてnullがきたときは型チェックでエラーにできるんだから、nullobjectを使ったほうがいい。
0447デフォルトの名無しさん
垢版 |
2019/11/21(木) 16:27:17.17ID:Bt7t64ET
!!潔癖症でもいい
変更方法さえ教えて頂けるなら
それに従い変更します
0448デフォルトの名無しさん
垢版 |
2019/11/21(木) 16:37:36.16ID:GN1h9TxM
Kotlinプログラマーは未だにforce unwrappingの使いどころを知らない
NullObjectのメリットデメリットも知らない
ということはよ〜くわかった
0450デフォルトの名無しさん
垢版 |
2019/11/21(木) 18:59:57.13ID:ikLBAUPH
>>448
nullobjectのデメリットって、null汚染されたクラスの再利用が面倒なことくらいじゃない?
他になんかある?
0451デフォルトの名無しさん
垢版 |
2019/11/21(木) 19:03:08.50ID:Bs6+HN1r
NullObjectのデメリット?
「オナニーとしては気持ちいいが、実際の開発において便利なシーンがほとんどない」
これに尽きる
0453デフォルトの名無しさん
垢版 |
2019/11/21(木) 22:54:14.17ID:Vn+a4ljF
あるデータが有限の数値をとる場合と
値なしの特殊な状態をとる場合があるとする
その厄介さってのは多くの場合、処理の場合分けが必要ってところにある
ヒトがそういう分岐を書き忘れがちなのはご存じの通り
その結果もあって多くのプログラマはNPE恐怖症になったが、NPEを回避することが目的になっても意味がない
NullObjectの多態性やアルゴリズムの妙で分岐を潰せるならベスト
だがそうでない場合、むしろ分岐を書き忘れたとき、下手なNullObjectはフェイルファストのメリットを失うことがある
0454デフォルトの名無しさん
垢版 |
2019/11/22(金) 08:14:50.32ID:GTCFu0T7
nullセーフな言語におけるNullable型の素晴らしい点は
そのままではメソッドを呼び出すことができず
特殊値に対し場合分けの判断が必要ではないかとヒトに思い出させてくれること
不適切な!!はこれを台無しにする
不適切なNullObjectも同じで、より厄介なバグ隠蔽をもたらす
0459デフォルトの名無しさん
垢版 |
2019/11/24(日) 06:37:41.88ID:wyfl3vqB
>>450
NullObjectはどのような場合でも正しく機能するNullObjectを定義できるなら優れているが、「どのような場合でも」を満たすのは難しい。
null発生の状況が複数ある場合は「どのような場合でも」というい条件を満たすNullObjectが定義可能である保証もない。
最初は条件を満たしていても、プログラムを修正していくうちに条件を満たせない場合が出てくる可能性もある。
しかも「気づかないうちに」そうなっている可能性がありたちが悪い。
条件を満たせない場所だけ分岐させるのは、NullObjectがnullチェック分岐消去を目的にしている
ことを考えると本末転倒な解決策。
0460デフォルトの名無しさん
垢版 |
2019/11/24(日) 12:53:04.20ID:gnIUHiL6
APIレスポンスとかデータ定義はNULLじゃない扱いしておいてビルドエラーもでないけど、
実際に動作させるとNULLが来てクラッシュするとかあるな
0461デフォルトの名無しさん
垢版 |
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も正常系だと言っている)。
そんだけのことじゃないかな。
0462デフォルトの名無しさん
垢版 |
2019/11/25(月) 12:58:08.39ID:Yrf4rnTG
>>459
nullobjectは「賢いnull」なんだから、null的な使い方してもいいだろ。
型安全なnullとして受け取ってnull分岐してもいいしな。

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

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

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

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

型無しのnull使うよりマシだろ。
許容するととんでもないところから紛れ込むnullの方がよっぽど邪魔。
0473デフォルトの名無しさん
垢版 |
2019/11/26(火) 09:17:18.40ID:i6eVGflj
>>472
nullが正常系である場所ではnullabeを使い、nullが紛れ込んだらバグになる場所では非nullを使うって話がもう出てる
適切にゾーニングできているなら紛れ込むことをそう恐れる必要がない
nullという特殊値に対して意識が必要な場所はnullabeという型で言語仕様レベルで明確化でき区別できるからメリットがあり、型無しのnullというほど不便なものでもない
0474デフォルトの名無しさん
垢版 |
2019/11/26(火) 09:21:30.92ID:i6eVGflj
>>465
それがないならNullObjectがいいと思うよ
そこを否定している人はいないはず
ただ多くの人は経験上避けがたいと思ってるから意見が合わないんだろうね
解放閉鎖原則と単一責任原則とで作ってくと最初の動機だけではなかなか完結しない
全部ビジターパターンでとことんNullObject-ableな型にお伺いをたてるように作れば完璧にできるだろうけど、そこまで作り込むコストを考えたら適材適所でnullableを使い分けるのが現実解ってのが落としどころだと思う
Kotlinが選び提供している価値はnullセーフであってnullフリーではないし
0475デフォルトの名無しさん
垢版 |
2019/11/26(火) 10:05:06.19ID:XO/gVUyI
NullObjectって非同期呼び出しとかどうすんの
OOの原理主義的にはコールバックの呼び出しもしないのが正しいんだろうけど、
最近は前後で文脈が繋がってて、コールバックが呼ばれないままだとまともに動かないケースがほとんどだよね
かといってコールバックしようにも引数に何渡せばいいのかとか色々無理がある
0476デフォルトの名無しさん
垢版 |
2019/11/27(水) 12:20:06.50ID:OjEIAAu4
>>473
nullを使っても問題は限定的だと思うけど、あえてnullを使うメリットはあるのかしらん?
実装上の手間が省ける、くらいしかないと思うけど。
0479デフォルトの名無しさん
垢版 |
2019/12/06(金) 14:42:47.13ID:08yg4gJX
三行に要約すると?
0480デフォルトの名無しさん
垢版 |
2019/12/06(金) 15:14:59.67ID:tlCdS/Zs
>>479
freezeによる制限とAPIはKotlin/Nativeのみ
そのせいでマルチプラットフォーム機能がお通夜状態
だから考え直せ
0481デフォルトの名無しさん
垢版 |
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向けに書かれた)コードがほぼ例外なく実行時にクラッシュすることになるやんけ
こんな互換性の欠片もないもん作るんやったらもう別言語でええやろ
0482デフォルトの名無しさん
垢版 |
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; }
}
0484デフォルトの名無しさん
垢版 |
2019/12/09(月) 00:07:21.07ID:MrA/6cBN
>>483
できるのか! これができるとリフレクションを使ったフレームワークに幅が広がりそうだよねえ
特定の変数名をもつオブジェクトに値を代入するとかさ
0486デフォルトの名無しさん
垢版 |
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が割とモダン化していってる
0487デフォルトの名無しさん
垢版 |
2019/12/11(水) 17:32:54.10ID:zuvdOeFn
kotlin/jsは可能性がなさすぎるから諦めて他のとこにリソース使ってほしい。。
0491デフォルトの名無しさん
垢版 |
2019/12/12(木) 03:31:17.93ID:HDvavFF6
nativeでクロスプラットフォーム狙うならリッチな標準クラスライブラリがないと駄目だろ。言語だけ用意されても。
kotlin/JVMみたく他に寄生するなら寄生先のライブラリ使えるからいいけど。

nativeどうする気なの。

.netやjavaみたいな最低限の標準クラスライブラリないと役立たず。
0492デフォルトの名無しさん
垢版 |
2019/12/12(木) 10:07:02.43ID:Ijd1d2r8
どうする気もないでしょ
JBが本気でKotlinで天下獲るつもりならGoLandとRiderとResharperを今すぐ廃止すればいい
それをしていないということはその程度の覚悟なんだよ
粛々とチームを解散して開発者を解雇するだけだ
0494デフォルトの名無しさん
垢版 |
2019/12/14(土) 00:19:00.68ID:df1+QJt4
JavaでWindowsで開発してlinuxでうごかしとる
バージョンはこないだまで6だった
やっとJavaのかかとの所ぐらいまで世界が追い付いてきたようだ
0495デフォルトの名無しさん
垢版 |
2019/12/17(火) 06:30:13.16ID:noRj1Nsm
Kotlin/Nativeってバージョン番号が1.0を越えてるけど、
ベータ版を脱したってことでいいの?
0496デフォルトの名無しさん
垢版 |
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!!

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

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

実際のその先の処理もa_.hoge(b_,c_)とかでちゃんと処理委譲してるから毎回10数行レベルで、更に他に分割するって発想なかったわ。
0511デフォルトの名無しさん
垢版 |
2019/12/19(木) 08:56:43.83ID:0eo+DnKB
やっぱりプログラミング言語で合ってるじゃないですか
初心者をいじめないで下さいよ
0513デフォルトの名無しさん
垢版 |
2019/12/19(木) 09:10:42.29ID:sBMQ4GMS
kotlin始めましたならわかる
kotlin目指したらhallo world書いたら目標到達じゃないか
0515デフォルトの名無しさん
垢版 |
2019/12/19(木) 09:14:19.85ID:0eo+DnKB
>>513
でもまだ本が届いてないんです!
かといってプロゲートを調べたらKotlinがないしドットインストールを調べたらクッソ高ぇし
ヨ■■■で
作って楽しむプログラミング Androidアプリ超入門―Android Studio3.3 & Kotlin1.3で学ぶはじめてのスマホアプリ作成
って本をポチりました
0519デフォルトの名無しさん
垢版 |
2019/12/19(木) 12:51:05.10ID:0uPukb6z
>>514
そんなこと書いた張り紙がラーメン屋にさりげなく貼られてたらどうしよう
0520デフォルトの名無しさん
垢版 |
2019/12/19(木) 13:37:11.92ID:0eo+DnKB
>>509
すいませんでした
調べたらKotlinの源がJavaという事が判明しました
NGIDを解除しました
ですから今はまずプロゲートでJavaをやってます
0521デフォルトの名無しさん
垢版 |
2019/12/19(木) 13:41:10.68ID:0eo+DnKB
オンライン講座やアプリにカネをかけたら負けだと思っているのでJavaの本もポチりました
「Java1年生―体験してわかる!会話でまなべる!プログラミングのしくみ」
まずはこれを読んでから
「作って楽しむプログラミング Androidアプリ超入門―Android Studio3.3 & Kotlin1.3で学ぶはじめてのスマホアプリ作成」
を読む事にしました

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

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

ほんの数年の間の話
0531デフォルトの名無しさん
垢版 |
2019/12/19(木) 22:23:45.85ID:WqEVCHn0
大体アプリを作るのに必要な知識って言語の文法だけじゃない
Android SDKの知識も必要だし設計もMVVMとかfluxとかいろいろある
今の主流の外部ライブラリが何かとか非同期処理の実装はどうするか
Firebaseとかも活用した方がいいだろう
必要な知識が広すぎるのに目的もなくただ漠然と必要そうだとつまみ食いしてるだけで
あっという間に時間は終わっていく
大体5年もすればソフトウェアの世界は一変する
結局何も生み出せないまま技術に振り回されて時間が過ぎていくだけ
0533デフォルトの名無しさん
垢版 |
2019/12/19(木) 23:26:51.07ID:Cn4tHGlw
さっき気がついたんだけど
kotlinってimportしなくなった?不要なの?
Math.sin/cos/tan使ってもimportせずに使えてなんか変な感じです
0537デフォルトの名無しさん
垢版 |
2019/12/20(金) 21:49:59.43ID:BqL6wPJ0
>>528
その通り。

まあしかしそれ言ったら学校教育は完全にダメだね。
0538デフォルトの名無しさん
垢版 |
2019/12/21(土) 15:23:12.50ID:z0W1zCos
>>536
何の話?
0539デフォルトの名無しさん
垢版 |
2019/12/21(土) 15:26:06.69ID:z0W1zCos
>>533
俺は変な感じがしない。なぜならJavaの頃からそのように使っているからだ。というかむしろそうでない方に違和感がある。
0542デフォルトの名無しさん
垢版 |
2019/12/22(日) 02:55:53.04ID:lBW/6Z3k
union って、C言語の union のこと? そういうのはないね。自分で無理矢理 Byte 配列に詰め込むのなら出来るが。
0545デフォルトの名無しさん
垢版 |
2019/12/22(日) 17:46:16.29ID:buP4BnNs
sealed class Either<L, R>{
class Left<L, R>(val value: L): Either<L, R>()
class Right<L, R>(val value: R): Either<L, R>()
}

var a: Either<String, List<Int>> = Either.Left(“foo”)

https://pl.kotl.in/1oWpsAGCs

KotlinはJavaの足枷が重いから劇的に使いやすくなることはなさそう
0546デフォルトの名無しさん
垢版 |
2019/12/22(日) 22:24:55.21ID:qcLf379+
Union typeをサポートするとString?型もString | nullの略記でしかなくなるのだろうか
0547デフォルトの名無しさん
垢版 |
2019/12/23(月) 13:25:26.95ID:8tSOZ4fL
しかしnullは型の名前ではないな。
0548デフォルトの名無しさん
垢版 |
2019/12/23(月) 21:19:46.42ID:UCqRJFPo
Unitと同じくオブジェクト宣言にすれば型としても値としても使える

TypeScriptのようにリテラル型という方式もあるけど
function f(): string | null | 10 { return 10; }
0549デフォルトの名無しさん
垢版 |
2019/12/23(月) 22:41:55.78ID:38BjLmtU
sealed classってinterfaceを持たないfinalなクラスをEither型には出来ないってことであってる?
0551デフォルトの名無しさん
垢版 |
2020/01/01(水) 00:07:09.43ID:fUaq4dOi
あけましておめでとうございます。
ことりんもよろしくおねがいします。
0557デフォルトの名無しさん
垢版 |
2020/01/04(土) 10:36:41.93ID:trUJS7QS
自己再帰禁止
0560デフォルトの名無しさん
垢版 |
2020/01/05(日) 19:42:27.74ID:YU7sLweA
そよそよ
0563デフォルトの名無しさん
垢版 |
2020/01/06(月) 22:45:33.84ID:MYKIKe5Z
大学のC言語の授業で2分木の深さ優先探索と幅優先探索を再帰関数で書かされたなあ
0564デフォルトの名無しさん
垢版 |
2020/01/07(火) 00:31:39.93ID:hqMcZlsr
言語の名前がかわいいというだけの理由でkotlinを勉強し始めました。
書きやすくていいですね!
0565デフォルトの名無しさん
垢版 |
2020/01/07(火) 11:18:31.53ID:R7wg2P50
PCの気晴らし2Dゲームやスマホアプリやかんたんゲーム作ろうかなーと思ってKotlin始めたのだけど、
微妙絶妙にメインストリームから外れて手間が合わんのだな
Unity的なゲームじゃないスマホアプリはうまく合ってる気はするが
0568デフォルトの名無しさん
垢版 |
2020/01/07(火) 12:41:10.88ID:v179ZXJD
要は「めっちゃ書きやすいJava」なので、Javaのときに特段盛り上がってなかった分野はKotlinでも特段盛り上がってはいない
Kotlinで利用者が流入爆増してKotlin独自のライブラリが各分野でじゃんじゃん作られるみたいな未来予想図もあったのだが、まあ、世の中なかなか冷静で頼もしい限りではある
0569デフォルトの名無しさん
垢版 |
2020/01/07(火) 13:06:26.78ID:muv+YNpY
レベルS プラットフォームを問わずKotlinが広く利用される
レベルA Kotlinを使うためにJavaプラットフォームが採用される
レベルB KotlinによってJavaプラットフォームの採用障壁が下がる
レベルC Kotlinによって既存のJava開発者の満足度が改善する

今のところせいぜいCだな
0570デフォルトの名無しさん
垢版 |
2020/01/07(火) 20:56:09.81ID:LyNNZa7r
Javaやってたら取っつきやすいみたいな扱いされてるけどC#の方が覚えやすくね?
0571デフォルトの名無しさん
垢版 |
2020/01/07(火) 21:10:11.11ID:mPccAZYV
kotlinってandroid専用言語という位置づけだと思っていいですか?
Webでも積極的に使われている言語ですか?
0572デフォルトの名無しさん
垢版 |
2020/01/07(火) 22:30:31.70ID:I2Ol6zE2
現状ではandroid専用。Java代替目指してる言語だからwebで使うポテンシャルはあるけど、その用途で流行ってるとは言い難い。
0573デフォルトの名無しさん
垢版 |
2020/01/08(水) 14:29:53.70ID:HfJa1tF4
流行ってないだけで専用というわけでもない。
0574デフォルトの名無しさん
垢版 |
2020/01/08(水) 14:36:25.48ID:HfJa1tF4
ま、しかし、みんながやってると自分もやるみたいなのはやはり日本人的な感じがするな。
保守的と言うか開拓精神がないというか。だから悪いということはないけどな。
自分が率先して使って自分を中心に世界中に広めるみたいなこともできるかも知れないのだが、そういう考えが最初から起こらないぐらい頭が固くなってガチガチに保守化していると。
0575デフォルトの名無しさん
垢版 |
2020/01/08(水) 14:43:05.37ID:266dC9mX
「〇〇を作りたいのでKotlinを使う」の〇〇に入るのは非ゲームAndroidアプリ、ではある
現状これ以外で使うのは趣味とか修行とか苦行とかバカとかなんかそんな感じ
Kotlinは一応だいたいのものは作れるには作れるので、Kotlinで作ってみたいという情熱(または狭窄)で個人でいろんなもの作ること自体は別に止めない
手段が目的と化してるという点以外は問題はないからね
みんなあまりやらないことをやるという点では面白いはずだとは思うよ
どっすかRubyの二の舞
0576デフォルトの名無しさん
垢版 |
2020/01/08(水) 15:08:09.71ID:NG22H+Rz
>>574
欧米の人って明確な目的があって、それに合う道具なら古いものも新しいものも使う印象
日本列島に生息するアーリーアダプタ猿はたいてい手段と目的が逆転していて、
新しいものを触っても「やってみた」で終わるからそれ以上の発展がない
0578デフォルトの名無しさん
垢版 |
2020/01/08(水) 20:42:10.23ID:UOnWj2Kr
>>577
その後誰も使わなくなるものに手を出して半年で天を仰ぐ事例は事欠かない
だったらちょっとか有名人にも頼りたくなるというものだ
0579デフォルトの名無しさん
垢版 |
2020/01/08(水) 21:44:46.93ID:IfVHQg0W
その、「失敗したらどうしよう・・失敗しないように安全パイを狙おう」ていう発想が日本人ていう話
0580デフォルトの名無しさん
垢版 |
2020/01/08(水) 21:51:52.21ID:SxJLgebM
自分が有名人になろうという発想もない。
0581デフォルトの名無しさん
垢版 |
2020/01/08(水) 22:07:34.74ID:sWXWn+ML
まぁ結局はjavaなんだから、だったらjavaのままでいいじゃんで終わってそう。
0582デフォルトの名無しさん
垢版 |
2020/01/08(水) 22:07:56.44ID:l2iB3kWY
webなんかどうでもいい
今やブラウザからよりもアプリからの方がインタネットアクセスしてる人多い
サーバー側処理もこれから firebase的なものが主流になって独自実装はなくなっていく
Android専用とは即ち最強ということ
0585デフォルトの名無しさん
垢版 |
2020/01/09(木) 17:44:04.75ID:ZcunmaZD
firestoreってrate limitやIP banみたいなこと課金なしにできないの?
セキュリティルールで、他人のデータおもらしや、入力データ検証はできるけど。個人で使うとrate limitみたいのないと課金攻撃食らうのが怖い小心者の俺。
0588デフォルトの名無しさん
垢版 |
2020/01/09(木) 22:37:38.83ID:Oq4NA2+9
まあ、金払って押しつけるのが正しくはある
自社メールサーバーを運営するのが今や愚かな行為であるのと同じ
0590デフォルトの名無しさん
垢版 |
2020/01/10(金) 19:52:27.62ID:GhmlZgNK
かといってサーバなしにはできない
0592デフォルトの名無しさん
垢版 |
2020/01/10(金) 21:12:38.40ID:akcZyu4v
flutterきてるからもう色々諦めて、サーバーサイドkotlinに注力して欲しい。。
0594デフォルトの名無しさん
垢版 |
2020/01/10(金) 23:00:11.09ID:i7XOn7b7
クロスプラットフォームは全部糞
そもそもDartが糞
ちょうど今日はてぶでflutterの記事を読んだがやっぱりDartが糞
ttps://hachibeechan.hateblo.jp/entry/flutter-is-great-good-but-dart-is-dirt
結局サンプルアプリみたいな見た目のしょぼいごみアプリしか作れないのがオチ
0595デフォルトの名無しさん
垢版 |
2020/01/13(月) 10:33:07.31ID:2cuyt0IW
Dartが糞なのはわかる。でもflutterがきてるのも事実。
もう「どこでもkotlin」とか言ってる場合じゃない。
このままだとandroid->fuchsia移行と共にkotlinは終わる。
なのでjava,goを押しのけて静的サーバーサイド言語の第一候補になるしか道はないと思う
0596デフォルトの名無しさん
垢版 |
2020/01/13(月) 11:34:02.40ID:tegDOPxe
と思うけど、googleはなぜかKotlin版flutterのJetpack Composeを今年ベータリリース?に向けて作業中。
Jetpack Composeは最初はandroid向けかもしれんが、kotlinはnativeでクロスプラットホームになるし、Jetpack Composeも将来いつの間にかクロスプラットホームになったり?
0597デフォルトの名無しさん
垢版 |
2020/01/13(月) 11:36:48.21ID:tegDOPxe
まぁ、composeはクロスプラットホームにならなくてもcomposeの存在はかなりflutterへの移行を押し留めることになりそう。
もちろんflutterはクロスプラットホームだけど。
0598デフォルトの名無しさん
垢版 |
2020/01/13(月) 12:51:17.02ID:E4iJfsMG
K/JVMとK/Nチームがあまり仲良くない感じだったし
K/Nの設計上の戦略ミスもあって先は厳しい
企業リソースが潤沢でないことも大きいんだろうけど
0599デフォルトの名無しさん
垢版 |
2020/01/13(月) 13:45:04.59ID:iUioslZh
相変わらず世間で流行るかどうかばかりを気にしている。世間に依存して頼りすぎている。その結果振り回され続けてしまう。
0601デフォルトの名無しさん
垢版 |
2020/01/14(火) 00:16:09.33ID:d22nWjNN
俺なんて世間の流行なんか無視して我が道をいってるから
メインはDelphiパスカルだぜ!
0603デフォルトの名無しさん
垢版 |
2020/01/14(火) 15:44:20.83ID:/0srrHag
趣味なら何でもいいんだろうけど仕事なら需要を考慮しないと糞仕事で薄給とかやってられないでしょ
0604デフォルトの名無しさん
垢版 |
2020/01/14(火) 17:03:38.63ID:65PQRowg
流行ってるやつの方が情報多くて学習し易いというのはあるな。

そういえば今はまだJavaが結構使われてるようだがCも増えたんだってな。組み込み関係が増えたせいらしい。
0611デフォルトの名無しさん
垢版 |
2020/01/16(木) 18:03:07.20ID:zJukF7BC
>>608
いかにも。お前はクソだ。
0612デフォルトの名無しさん
垢版 |
2020/01/18(土) 20:25:30.67ID:AwYhHf6y
流行るか流行らないなんてどうでもいいんだよ
やりたいことをやれるかどうか
JavaScript界隈の気持ち悪いやつがflutterは流行らないといってるけど
流行ったらどういう態度にでるのか見てみたいものだ
0613デフォルトの名無しさん
垢版 |
2020/01/18(土) 21:28:55.28ID:uMWc60b6
全部自力で作るわってレベルの奴ならそれでいいけど
流行りはコミュニティ規模、延いてはライブラリや関連技術の発展に繋がるわけでさ

何はともあれIOインターフェースのデファクトスタンダードを早くしろください!

https://github.com/ktorio/ktor/tree/master/ktor-io/common/src/io/ktor/utils/io/core
https://github.com/Kotlin/kotlinx.serialization/tree/master/runtime/commonMain/src/kotlinx/io
https://github.com/Kotlin/kotlinx-io/tree/master/core/commonMain/src/kotlinx/io
0615デフォルトの名無しさん
垢版 |
2020/01/22(水) 13:59:16.59ID:qc9Q1TGx
Javaに決まっているだろ
Kotlinで書かれてたらどうやってコンパイラをコンパイルするのだ
鶏は卵からしか生まれないのだ
0616デフォルトの名無しさん
垢版 |
2020/01/22(水) 14:59:42.36ID:rj2HkyIb
コンパイラがどの言語で書かれてるかを質問する人よくいるけど
知ったところで何か意味あるの?
0617デフォルトの名無しさん
垢版 |
2020/01/22(水) 16:21:05.17ID:3jquT0bn
>>615
最初はJavaで次からはKotlinに変換して自分で自分を記述する状態にしてるかもよ。するとその後はずっとKotlinでKotlinを書く状態になる。

昔はPASCALをPASCALで書いてハンドコンパイルしてから自身をコンパイルさせるなんての本当にあったようだけどな。
0618デフォルトの名無しさん
垢版 |
2020/01/22(水) 16:22:45.42ID:3jquT0bn
>>616
コンパイラを作れる言語かどうかがわかる。

ということ以外の意味はないかな。
0619デフォルトの名無しさん
垢版 |
2020/01/22(水) 16:30:08.45ID:Ho7opIM1
最初は別言語で書かれるが、その後自身の言語で書き直すことはよくある
セルフホスティングと言ってGo,Rustなども達成している

成果物の動作環境で自身も動作可能になるので
Kotlin/JSがセルフホスティングなら
babel/standaloneのようにブラウザ上でコンパイルが可能になったり
Kotlin/NativeのビルドにJVMが不要になったりする

実用上はJVM需要が主だしGradleが便利なので変えないだろうけど
0621デフォルトの名無しさん
垢版 |
2020/01/22(水) 16:48:14.42ID:rj2HkyIb
>>618
KotlinのコンパイラがJavaで作られたとしても
Kotlinがコンパイラを作れない言語ということにはならないと思うんだが
0622デフォルトの名無しさん
垢版 |
2020/01/22(水) 17:03:14.84ID:54HMiZ6v
美人のまんこと豚のまんことどっちが良いかって豚の方が名器なら豚を選べば良い
気にすんな
0625デフォルトの名無しさん
垢版 |
2020/01/23(木) 18:56:14.34ID:GW8kqb26
kotlin1.4の展望を読んだんだけど、
「kotlin/nativeのコンパイル速度は、まだしばらく改善できません」
って言ってるのかな。。楽しみにしてたのに
0627デフォルトの名無しさん
垢版 |
2020/01/23(木) 21:18:33.10ID:G/hRyFJo
>>621
ならないね。実証できてないだけで。
0633デフォルトの名無しさん
垢版 |
2020/01/26(日) 23:29:22.09ID:k2+mT4PN
自分で作れば良いのではないか?
0635デフォルトの名無しさん
垢版 |
2020/01/27(月) 10:04:25.03ID:5yIKV7tf
近所の本屋ではkotlinの棚にflutterが侵食してきている
kotlin本は必要だー!出せー!
0636デフォルトの名無しさん
垢版 |
2020/01/27(月) 13:13:48.97ID:MAYcFInA
みんなで薄い本を出しまくろう
0638デフォルトの名無しさん
垢版 |
2020/01/27(月) 22:02:28.60ID:l6kTq6zA
      //
    / ./
    /  ./     パカ
   / ∩彡⌒ ミ 髪のはなし終わった?
   / .|(´・ω・`)_
  // |     ヽ/
  " ̄ ̄ ̄ ̄"∪
0639デフォルトの名無しさん
垢版 |
2020/01/28(火) 00:20:15.54ID:BrmWR/YB
通話中でもバックグランドで処理するアプリとか、スマートウォッチ向けアプリ作ってみたい
0640デフォルトの名無しさん
垢版 |
2020/01/28(火) 04:30:56.90ID:ms/fb6kS
じゃあ厚い紙の本で
0641デフォルトの名無しさん
垢版 |
2020/01/28(火) 04:32:09.25ID:ms/fb6kS
>>639
どうぞ。遠慮なく。思う存分作ってよいぞ。どんどん作ってくれたまへ。
0643デフォルトの名無しさん
垢版 |
2020/01/28(火) 12:56:22.85ID:Bdltl+Ea
大丈夫。お前ならできる。俺は信じてるぞ。
とりあえずネットで検索しろ。
0645デフォルトの名無しさん
垢版 |
2020/01/29(水) 09:57:21.18ID:Ji+gdkxY
完成したらその事を本に書いて出せ。
Amazonの電子書籍なら簡単な審査だけで出せる。
0647デフォルトの名無しさん
垢版 |
2020/02/03(月) 02:56:28.79ID:gyzZZyLf
いやできる。絶対に完璧にできる。頑張れ。
0649デフォルトの名無しさん
垢版 |
2020/02/03(月) 16:52:51.88ID:EEPHYlO9
ヤレばデキる
0650デフォルトの名無しさん
垢版 |
2020/02/05(水) 17:46:33.75ID:9nK7Yle0
スマートキャストで、これは問題なくできる。

val x: Any = 0.3
if (x is Double) println(x + 0.2)

しかしこれはできなかった。

val x2: List<Any> = listOf(0.3)
if (x2[0] is Double) println(x2[0] + 0.2)

足し算する前に as Double でキャストすると問題なし。

if (x2[0] is Double) println(x2[0] as Double + 0.2)

なんで? val で List だから内容が変更されることはない筈で、スマートキャストできそうに見えるんだけど。
Listの中身まで推論してられっかボケってこと?
0651デフォルトの名無しさん
垢版 |
2020/02/05(水) 17:49:43.62ID:9nK7Yle0
Listに色々なクラスのインスタンス入れて返すメソッドを思い付いたのだがKotlinはスマートキャスト使えるから楽に書けるかなと思ったんだよね。
で、試してみてわかったんだけど、これだとJavaと大差ないね。
0653デフォルトの名無しさん
垢版 |
2020/02/05(水) 19:35:44.69ID:gUkl9CZ9
covariantの問題だから、将来的にもそこは変わないと思う。
0654デフォルトの名無しさん
垢版 |
2020/02/05(水) 20:28:21.91ID:sFY5zr3G
.get()がthisを変更しないことを
関数定義時に保証する文法を追加すれば解決可能では?

val y = x[i]で一旦受ければいいから
JBの言語改善にかける意欲の低さを考えれば超期待薄
0655デフォルトの名無しさん
垢版 |
2020/02/06(木) 00:02:18.36ID:E0QPZagj
> Listに色々なクラスのインスタンス入れて返すメソッド

これのメリットがよく分からんけど List<Any> に対して get(i) + cast する拡張関数作ればいいんじゃね
0656デフォルトの名無しさん
垢版 |
2020/02/06(木) 01:30:37.85ID:hv8rQXh6
リストにいろいろと聞くとつい、生Listを構造体代わりにする昔ながらのクソコードを思い出す
あのアンチパターンに名前はないのだろうか
静的ならDestructuring Declarationsを使い動的ならSequenceを返してitをスマートキャストすればいいのでは
0657デフォルトの名無しさん
垢版 |
2020/02/06(木) 01:34:47.55ID:c8/ceEGP
>>650 >>654
メソッドを2回呼んで同じ値を返す保証は結構難しい
言語レベルでのメモ化や参照透過性、所有権システムなどが必要になる

フロー解析で出来たところでコンパイル可否がlistOfの実装に依存して
柔軟性もコンパイル速度も悪化するから
Kotlinディスカッションに投げても多分改悪判定される

valやletで十分だと思うけどな
0658デフォルトの名無しさん
垢版 |
2020/02/06(木) 01:42:08.64ID:c8/ceEGP
>>651
型チェック+処理を頻繁に書きたいのなら
こういうの用意しておくといいんじゃね

inline fun <reified T> Any?.letif(b:(T)->Unit){ if(this is T) this.let(b) }

fun main() {
val x2: List<Any> = listOf(0.3)
x2[0].letif<Double>{ println(it + 0.2) }
}
0659デフォルトの名無しさん
垢版 |
2020/02/06(木) 06:43:59.78ID:SCigAXfk
>>650
val x2: List<Any> = listOf(0.3)
val x3 = x2[0]
if (x3 is Double) println(x3 + 0.2)
これはスマートキャストいけた。

雑に考察すると、x2の右辺には別スレッドで
val x4: MutableList<Any> = mutableListOf(0.3)
と定義したx4を書くことも出来て、
ifの条件式が評価されてprintlnが実行されるまでに、
元のスレッドでx4[0] = "string"が実行されている可能性が微粒子レベルで存在するのかなと。
0660デフォルトの名無しさん
垢版 |
2020/02/06(木) 09:49:06.64ID:hv8rQXh6
data classなんかの読み取り専用プロパティへの参照なら同じ書き方でスマートキャストできる
そのプロパティを参照するだけのメソッドやカスタムgetterを経由したら不可
コンパイラ設計上、メソッドの副作用がないことを無制限に推論することは時間的制約の面で不可能で、どこかで線引きするしかない
リフレクションで変数を書き換えてるかもしれない
その合理的な線引きの範囲がval値への参照なんだと思う
0661デフォルトの名無しさん
垢版 |
2020/02/06(木) 09:57:34.37ID:/RKPlkxl
>>659
あ、そーか。その可能性あるな。
Listの皮を被ったMutableListね。
0664デフォルトの名無しさん
垢版 |
2020/02/07(金) 01:10:47.77ID:cvaigXbo
>>662
>coroutinesなどで実行している非同期なコードの例外をキャッチすることができません。
どういうこと?出来るだろ?

suspend fun f(): String { throw RuntimeException() }

fun main() {

try { runBlocking { f() } }
catch(e:RuntimeException){ println("catch") }

val d = GlobalScope.async { f() }

try { runBlocking { d.await() } }
catch(e:RuntimeException){ println("catch") }

}
0665デフォルトの名無しさん
垢版 |
2020/02/07(金) 03:04:38.78ID:nyDcvFOU
runBlockingって、名前の通りスレッドブロックするん?だったらさすがに実際そんな使わないだろ。launch,asyncなどのコルーチンビルダーで例外キャッチできないと
0667デフォルトの名無しさん
垢版 |
2020/02/07(金) 06:43:46.22ID:cvaigXbo
>>665
基礎無しで応用を全部使おうとして混乱してるように見える
Kotlinに関しては道筋のドキュメント不足が原因かもしれない

> launch,asyncなどのコルーチンビルダーで例外キャッチできないと
C#のasyncやJavaScriptのPromiseでも変わらんよ

言語に限らず非同期処理の基礎知識として
コールバック、待機/通知、イベントループをまず学ぶべき
0668デフォルトの名無しさん
垢版 |
2020/02/07(金) 06:46:22.97ID:cvaigXbo
エラー処理については
まず、正常値/エラー値/多値/例外 はどれも
結果(処理への入力に対する出力)の一形態に過ぎないというところからスタート
0669デフォルトの名無しさん
垢版 |
2020/02/07(金) 08:06:13.01ID:lRgw/j43
>C#のasyncやJavaScriptのPromiseでも変わらんよ
他の言語とkotlinの違いはkotlinの場合は、suspend関数を呼ぶにはどっかにcoroutineが必要で、
coroutineの境界(lanuchなどで)例外は外側に伝わらないじゃん。
try {
 GlobalScope.launch { 例外発生}
} catch (ex: Exception) { キャッチできない }

で、どうすりゃいいの?ってことで悩んでて、ググったら上記の記事が出てきて、kotlinは他の方法でやるの??
って思ったけど今回とあんま関係なかったのかも。
とりあえず、JobにinvokeOnCompletionで完了ハンドラ登録できるから、
coroutineの外側ではJobを受けわたせばいいのかな・・
0670デフォルトの名無しさん
垢版 |
2020/02/07(金) 08:06:35.60ID:lRgw/j43
suspend fun fun2() {
 throw Exception("hoge")
}

suspend fun fun1() {
 fun2()
}

// コルーチンスコープが定義されてるところはJobで返す
fun test(): Job {
 return launch {
  fun1()
 }
}

// 大元
fun main() {
 val job = test()
 job.invokeOnComplete(t: Throwable?) { }
}

とまぁこんな感じになっちまうけどいいか・・
他の言語なら普通に例外を伝搬させられるが・・?
0671デフォルトの名無しさん
垢版 |
2020/02/07(金) 08:11:00.57ID:lRgw/j43
と、coroutine境界の内外でどうエラーの例外を伝えればいいか悩んでた次第です・・
0672デフォルトの名無しさん
垢版 |
2020/02/07(金) 08:54:24.91ID:cvaigXbo
>>669
>>664をC#で書くとこうなる → https://ideone.com/QwtGY4

try{ GlobalScope.launch {例外発生} } ...
これはスレッドで言えば
try{ Thread {例外発生}.start() } ...
と同じこと

>>668で書いたように戻り値も例外も同じで
待機やコールバックにより「受け取る」ことが必要

Kotlinでは runBlocking{}
C#では .Resultまたは.Wait() (どちらもスレッドをブロックする)
JavaScript(Promise)ではonRejectedコールバック
0673デフォルトの名無しさん
垢版 |
2020/02/07(金) 09:11:43.28ID:cvaigXbo
>>670
> 他の言語なら普通に例外を伝搬させられる
まずここに勘違いがある
Kotlinに限らず同期メソッドと非同期メソッド間で
待機やコールバック無しに伝搬することは無い

main自体を非同期メソッドにしているか
ブロックする呼び出しをしていることに気付いていないだけ
0674デフォルトの名無しさん
垢版 |
2020/02/07(金) 09:21:26.29ID:lRgw/j43
>>673
うん。だから、他の言語でmainメソッドを非同期メソッドにして、普通にtry-catchで
例外捕まえれるけど、kotlinだと無理だから他の方法あるのかな??って
話をしてたんですけど・・・
0675デフォルトの名無しさん
垢版 |
2020/02/07(金) 10:13:20.15ID:cvaigXbo
>>674
mainを非同期メソッドにして普通にtry-catch出来るけど

suspend fun fun2() { throw Exception("hoge") }
suspend fun fun1() { fun2() }
suspend fun main() {
try { fun1() }
catch(e:Exception){ println("catch") }
}
0676デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:43:04.21ID:cvaigXbo
躓きの原因になってそうな点を書いてみる

・Kotlinのsuspendメソッド間は暗黙で同期して明示で非同期するが
 他言語のasyncメソッド間は暗黙で非同期して明示で同期する

・GlobalScope.launchには地雷がある(joinで例外が受け取れない)
 ※同スコープの launch は受け取れる
 GlobalScope.async/await に置き換えるのが良いと思う

・同スコープで非同期起動(async{})した場合の連鎖キャンセルで混乱している
 スコープがよく分からなければ GlobalScope.async を使っておけばいい

GlobalScope.launchの件は使わないから気付かなかった
基本的には GlobalScope.async/await, runBlocking を使えば良い
0678デフォルトの名無しさん
垢版 |
2020/02/11(火) 05:13:51.51ID:LP4Ep5U4
>>677
脈絡がなさすぎてよくわからんが、これがやりたかったん?
https://ja.wikipedia.org/wiki/Will_%E3%80%9C%E5%9C%B0%E5%9B%B3%E3%81%AB%E3%81%AA%E3%81%84%E5%A0%B4%E6%89%80%E3%80%9C
水をさして悪いが地図にはあるんだなこれが。島の名前が由来だからね。
https://www.google.com/maps/place/%E3%82%B3%E3%83%88%E3%83%AA%E3%83%B3%E5%B3%B6/@60.0019041,29.649169,12z/data=!3m1!4b1!4m5!3m4!1s0x4696454b3c730d79:0x84277e6a3fbe0093!8m2!3d60.0125003!4d29.7336138
0679デフォルトの名無しさん
垢版 |
2020/02/11(火) 08:36:48.94ID:NSYf+CGe
KaMP Kitの紹介 (Kotlin Multiplatform用のツール)
https://blog.jetbrains.com/kotlin/2020/02/accelerate-your-kotlin-multiplatform-evaluation-with-kamp-kit/

試してないけど、マルチプラットフォームでアプリを作る際の
注意点やどのように書くかのガイドを目的としたツールのようだ

ツール自体ではないけど、ツールを作った会社の人によるKotlin/Nativeでの並行性についての話
https://www.youtube.com/watch?v=oxQ6e1VeH4M
0681デフォルトの名無しさん
垢版 |
2020/02/13(木) 00:51:57.99ID:29zvuXGO
>>680
ビッグデータはJavaが強い分野で、オワScalaの代替としてKotlinを推すのはわりと自然な戦略
まあJupyterを全面に押し出すのはちょっと的外れだが
0683デフォルトの名無しさん
垢版 |
2020/02/14(金) 22:57:32.18ID:ZYSFhOo2
>>682
バグかな。1.4リリースまでには抹殺されることを祈る。
valの値がミュータブルオブジェクトだったりするのはありえることだから、常に警戒はしている。
0684デフォルトの名無しさん
垢版 |
2020/02/14(金) 23:20:06.53ID:1RNC29HJ
>>682
open valじゃん
それが変化しないと考える奴はただの初心者だろ・・・

Kotlinでは@JvmFieldを付けない限り
privateでないアクセサがメソッド(getter/setter)になるのは基礎の範疇

 public class Read {
   public String getValue(){return "hello";}
 }

でgetValueがオーバーライドされて固定値じゃなくなることに騒いでるのと同じ
0685デフォルトの名無しさん
垢版 |
2020/02/14(金) 23:34:40.26ID:08nJ6zct
kotlinのvalは「valで定義されたものに=を使われていたら、コンパイル時にエラー出して止める」というご利益しかないよ
動作的にイミュータブルにする機能はないよ
0686デフォルトの名無しさん
垢版 |
2020/02/15(土) 00:55:36.25ID:/QpUFa9s
valの前にわざわざopenを書いてる以上、こういう拡張への意図があったということだよ
慌てなくても怖いならopenをむやみに書かなければそれでいい
継承がカプセル化を破壊するというのは昔Effective Javaで習ったろ
これはその端的な例で、だからこそKotlinはopenを明示しないと継承できない道を選んでる
0688デフォルトの名無しさん
垢版 |
2020/02/23(日) 23:35:56.01ID:gLwCsTk/
関数の引数をラムダ式にして、それをnullableにしたいんですがどう書いたらいいですか

fun fuck(abc: () -> Unit) {
}

みたいにして、呼び出す方は

fuck({
})

でも

fuck()

でも良いようにしたいんですが
0689デフォルトの名無しさん
垢版 |
2020/02/23(日) 23:39:09.88ID:gLwCsTk/
fun fuck((abc: () -> Unit)? = null) {
}

でできましたありがとうございました!

呼び出す方は

abc?.invoke()

としたら良いようですね
0691デフォルトの名無しさん
垢版 |
2020/02/25(火) 05:29:25.56ID:SMgXQhso
尼で検索したら Kotlin の新しい本が出てきた。
尼はURLがNGワードになってて書けないので以下にタイトルだけ並べておく。一番上の本だけが紙の本とKindle版両方ある。それ以外はKindle版のみ。

みんなのKotlin 現場で役立つ最新ノウハウ!

プログラマーにおくるKotlin流し読み入門: Androidアプリ開発の新言語をスピードマスター

解決!Androidアプリ開発のアレコレ
0694デフォルトの名無しさん
垢版 |
2020/02/29(土) 20:08:01.92ID:46OW7AmV
結局残るのは考えがしっかりした言語だ
小粋なのははやりすたりが激しい

MSはおかしい
0697デフォルトの名無しさん
垢版 |
2020/03/01(日) 11:08:43.11ID:70xHYE3h
kotlinで関数型を受け付けるメソッドに、特定のクラスのメソッドを渡したいのですがどうすればいいでしょうか??
fun registerHandler(handler: (Int, Int) -> Unit)
にhanlderと同じシグニチャを持つメソッド(例えばhoge)を持つクラス(例えばFoo)を作って
val a = Foo()
registerHandler(a.hoge)
みたいなことをやりたいのですがどうすればいいでしょうか?
要するにコードを再利用したいのです
0701デフォルトの名無しさん
垢版 |
2020/03/04(水) 23:04:30.12ID:G7V9iIFO
日本語に翻訳してくれ。
0704デフォルトの名無しさん
垢版 |
2020/03/06(金) 09:22:52.49ID:7w4EZP5c
>>703
効いたと思うが、他スレッドから変更される可能性があるならダメなのでは?
0706デフォルトの名無しさん
垢版 |
2020/03/06(金) 11:38:02.14ID:VtIZxMve
変数にもローカル変数やらいろいろあるし
ローカルは効きそう、インスタンス変数は無理だろう
0707デフォルトの名無しさん
垢版 |
2020/03/11(水) 00:08:05.10ID:IcorLBpl
IntellijでKotlinでJavaコード呼び出した時
どんなchecked Exception投げるか簡単に知る方法教えてください。
0712デフォルトの名無しさん
垢版 |
2020/03/14(土) 08:26:54.32ID:AOabs0cu
Kotlinって単純にJavaの上位互換と考えていいんですかね?
それとも特定の用途ならJavaの方が優れてることもある?
0713デフォルトの名無しさん
垢版 |
2020/03/14(土) 08:50:35.96ID:uPAEOS5i
>>712
・とにかく即動ける開発者を大人数集めないといけない場合
・約1MBのアプリサイズ増加が許容出来ない場合
ならJavaかな
0715デフォルトの名無しさん
垢版 |
2020/03/14(土) 15:02:17.48ID:SYJjC+91
特別な俺に酔いしれる、アートなプログラミングをするスレ民にふさわしいな
0716デフォルトの名無しさん
垢版 |
2020/03/15(日) 01:00:14.34ID:UPbVmx1a
異端だな。
Androidアプリ作ってる場合はまあ普通だが。
0717デフォルトの名無しさん
垢版 |
2020/03/15(日) 13:40:42.45ID:JeE8EKc6
アンドロイドアプリ作る案件でしか触ったことないけどアンドロイドアプリ以外でもこの言語使うことってどれくらいあるんだ?
フリーでいろんな会社のいろんな案件に携わってきたけどアンドロイドアプリ以外でこの言語選択してるシステムに出会ったことがない
0718デフォルトの名無しさん
垢版 |
2020/03/15(日) 13:43:15.79ID:G4jfON4Y
SwiftもRustもそんな感じ
0720デフォルトの名無しさん
垢版 |
2020/03/15(日) 14:45:30.20ID:3NnqBxtE
2年前くらいの頃はサーバーサイドJavaも食いそうな勢いだったんだけど、見る影もないね
もうAndroidアプリ制作専用言語以上は何も期待できない
0721デフォルトの名無しさん
垢版 |
2020/03/15(日) 14:57:29.36ID:+eqDq3h/
何度も言われてるがベターJavaで、近代Java案件の置き換えが可能なのだが、
新規Java案件が今はもうAndroid非ゲームアプリくらいしかないため、結局Android非ゲームアプリくらいしか用途がない
もちろんかつてのJavaのように何を作っても構わないしなんでもだいたい作れるが、そもそもわざわざJavaで作る理由がもうないので…
0723デフォルトの名無しさん
垢版 |
2020/03/15(日) 19:04:24.46ID:U0exLU+5
javaの上位互換だからjava出来るならKotlinも直ぐ出来るって勘違いしてる人結構いるけど、
細かいところで書き方とか違うからそれなりに慣れるまで時間かかるよね
0726デフォルトの名無しさん
垢版 |
2020/03/15(日) 19:24:15.07ID:W4rB3Afy
Javaはお固い分野でも新規に使われてるのに
縁がない人は頓珍漢な分析するよね
0727デフォルトの名無しさん
垢版 |
2020/03/15(日) 19:57:21.56ID:sgfXfD7p
Java<kotlinだけどそもそも新規でのJava需要が下がってきてるから流行らないって事か?
0731デフォルトの名無しさん
垢版 |
2020/03/17(火) 01:35:07.82ID:Aeuh89FK
かつてJavaは凄く人気が有った言語だから、エコシステムが物凄く大きい。
一方、KotlinはAndroid開発で使う人は使うと言う位置づけなのでは。
0732デフォルトの名無しさん
垢版 |
2020/03/17(火) 07:47:03.83ID:sU5dKoAT
エンタープライズでJavaを採用するような案件や環境は安定と安心が最優先すぎるのが逆風だと思う
Kotlinで生産性が上がると言われても移行の総コスト、安いコーダーが安定供給できるか
この先立ち消えたりJBがやらかしたりでKotlinコードが不良資産化しないかなど不安が大きい
おじさんを説得するには実績が欲しいがまだキャズムを越えない
越えて欲しいなあ
0733デフォルトの名無しさん
垢版 |
2020/03/17(火) 10:22:24.77ID:aozOj1qc
エンタープライズではテストと比べればコーディングの手間は無視できるし、
一発作り切ったら運用に移管して手を切るのが基本だからコードが冗長で見通しが悪いとかはあまり問題にならない
どう考えてもマイナー言語ロックインのリスクをペイしないよ
0734デフォルトの名無しさん
垢版 |
2020/03/17(火) 14:06:05.53ID:Aeuh89FK
KotlinはJavaとは宣言の書き方が前後逆になっただけの様な言語のイメージ。
それ以外でも何かは良くなっているかもしれないが、何かは悪くなっているだろうと予想され、敢えてJavaの代わりに使おうとは思えない。
KotlinはAndroidでは使えても、デスクトップでは難しいだろうが、
Javaなら、Swingを使えば、Win/Mac/Linuxで共通アプリが作れる。
昔はさらにここにブラウザ内のアプレットも加わっていたが、今はそれが動かなくなった。
ところが、アプレットをWasmとして復活させる動きも出ているようだから、プラットフォームは広い。
恐らくそのうちSwingもAndroidやiOSで動くようになるのではないか。
0736デフォルトの名無しさん
垢版 |
2020/03/17(火) 14:26:37.12ID:Aeuh89FK
>>733
短い簡単なプログラムなら、習いたての新しい言語でも作れるが、長くて複雑なプログラムには、十分に時間をかけて習熟した言語でないと作るのは難しい。
次々に生まれる新しい言語をニワカに学んでもいいプログラムを作るのは難しいのだ。
新しい言語では逆に間違ってしまったり、やりたいことを実現する方法が分からなくてそれを調べるために効率が下がることが多い。
Javaの言語仕様は、人気が有ったことからも分かるように昔から既に優れており、それはそれで一つの完成系をなしている。
根本的に新しい言語は一部だけは優れていても、どこかではむしろ劣っていることが多い。
一方でJavaはJavaで進化し続けている。
0739デフォルトの名無しさん
垢版 |
2020/03/17(火) 15:07:56.32ID:IQmvYlpF
そういうことなんだろな。
JAVAだけやっとけば安心なんだ!って自分に言い聞かせてるようにしか見えん
0741デフォルトの名無しさん
垢版 |
2020/03/17(火) 15:56:41.70ID:aozOj1qc
>>739
そういう観点でいえば、学ぶべきはKotlinじゃなくてGoやC#などの非JVM系言語だろう
Kotlinを選んでいる時点で、自分もまたコンフォートゾーンに留まろうとしている平凡な人間の一員であることを自覚したほうがいいぞ
0742デフォルトの名無しさん
垢版 |
2020/03/17(火) 16:00:09.84ID:Aeuh89FK
どんなに優秀な人でも、あらゆる言語やツールキットを学ぶほどの時間は無いから、学ぶべきものを取捨選択や優先順位付けが重要。
一つの言語だけを学んで、プログラムに必要ななんらかの(専門的な)知識を学ぶのも立派な選択だ。
0744デフォルトの名無しさん
垢版 |
2020/03/17(火) 16:29:11.06ID:XIub247n
ねぇねぇScalaって息してる?Kotlinとどっちがすごい?
0747デフォルトの名無しさん
垢版 |
2020/03/17(火) 16:49:51.14ID:Aeuh89FK
>>746
というか、新しい言語を学んで無い人を馬鹿にするのは良くない。
自然法則は昔からずっと変化しないから学んで損は無いが、言語は人工的なため、不変性も無く学ぶ価値の無いものも多数含まれる。
その取捨選択が重要。
0752デフォルトの名無しさん
垢版 |
2020/03/17(火) 17:17:56.69ID:Aeuh89FK
>>748
ネットではKotlinそのものに価値があるようなことを言う人を良く見かけるが、実際はGoogleがOracleとの訴訟に負けて、Javaを使っていることを注意されて、それで使われるようになっただけの言語、と捉えるのが標準見解だ。
0753デフォルトの名無しさん
垢版 |
2020/03/17(火) 17:27:30.89ID:4Vk7SyLR
>>734
> Javaなら、Swingを使えば、Win/Mac/Linuxで共通アプリが作れる。

Javaのライブラリ使うならKotlinでもできることになるが?
0754デフォルトの名無しさん
垢版 |
2020/03/17(火) 17:31:48.86ID:4Vk7SyLR
>>736
わかった。それじゃあかれこれ30年ぐらい使い続けているPerlと35年ぐらい使い続けているC言語を使うことにするよ。Javaのような新言語に手を出すのは止めておこう。
0756デフォルトの名無しさん
垢版 |
2020/03/17(火) 19:06:22.80ID:+Hw83ygo
>>736
そういう観点なら、better javaのkotlinを学習する費用対効果は大きい。

実際、自分でクラスを設計するのならnull freeにできるkotlinの価値は高い。

……というより、型無しのnullを排除できないjavaの型システムが破綻しているだけだけどな。いいかげん、nullを受け付けないクラス/変数に対応してほしいぜ。
0757デフォルトの名無しさん
垢版 |
2020/03/17(火) 19:15:03.66ID:Aeuh89FK
>>756
むしろ、null を使うことは美しいと思っている。
引数にnullを渡すかどうかで動作を変えられることは、プログラミングの中でも最もスマートな方法。
0758デフォルトの名無しさん
垢版 |
2020/03/17(火) 19:30:31.89ID:s3acJuhP
でも、いざnull safetyの言語使ってみると!!演算子使う自分のコードが気になって負けた気になる
0763デフォルトの名無しさん
垢版 |
2020/03/18(水) 00:01:29.88ID:rB/x/s49
Javaできるならサンプル見ただけでなんとなく使える
本読まなきゃいけないような奴が手を出す言語ではない
0764デフォルトの名無しさん
垢版 |
2020/03/18(水) 00:33:22.47ID:LQtyodHE
当然、Kotlin の会長である太郎本!

Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
0765デフォルトの名無しさん
垢版 |
2020/03/18(水) 00:35:21.26ID:qIM0w55M
>>763
本読まなきゃいけない奴が手を出す言語ではない(ドヤァ)
キモすぎアホすぎて草
んなこと誰も聞いてねえってのw
質問に答えてやれよカス
そもそも仕事だったら新規言語に手を出す出さないは個人の判断関係なく強いられることもあるだろうw
それともニートか?お前w


>>762
完全初心者なら>>273-275あたりで出てる本がいいんじゃないかな
0766デフォルトの名無しさん
垢版 |
2020/03/18(水) 00:37:04.70ID:JGfgRlCq
>>763
サンプルコピペして使えた気になってるコピペプログラマーの典型みたいなこと言っててワロタ
0767デフォルトの名無しさん
垢版 |
2020/03/18(水) 03:25:07.07ID:LQtyodHE
有名な雑食系エンジニア・KENTA も、YouTube で言ってたけど、
Scala が廃れた理由は、初心者にマウント取って、悦に入る人が多いからw

JVM 系は土方だから、土木業と同じ産業構造、多重請負・奴隷構造を持つから、
奴隷は初心者に対して、マウントを取らざるを得ないw

Ruby が、なぜナイスなのか、Cookpad などの自社サービス系だから。
多重請負・奴隷構造じゃないから

JVM 系は高学歴総合職・ノンプログラマーが、
低学歴奴隷・IT 土方を使って、もうける商売だから

だから、勧める人が少ない
0771デフォルトの名無しさん
垢版 |
2020/03/18(水) 12:35:47.10ID:fwLKdVFo
>>767-769
なるほど
KENTAはクソだけど内容は腑に落ちる部分があるな
0772デフォルトの名無しさん
垢版 |
2020/03/18(水) 13:23:33.04ID:B9Jc5Lrr
>>757
Kotlinでそのようにしたければそのように書けば良い。できないわけではない。使い分けできて尚且つコンパイル時のチェックが厳しいだけ。
0776767
垢版 |
2020/03/19(木) 03:59:43.72ID:JDU05jIv
要するに、複雑なものは習得コストが高いから、暇人しか集まらないようになる。
暇人は、初心者に参入されると食えなくなるから、マウント取って邪魔してくる

防衛省・原発みたいなものと同じ。
誰にも分からないから、チェック体制も構築できなくなる

誰にも何をやっているのか、さっぱり分からないけど、
上層部は高い給料をもらえる体制。
その体制を維持していくことが目的になっている

複雑なものには、真実ではないダマシが入ってくる。
人々を煙に巻く。それがガン

逆に、簡単なRuby には、嘘が付け入る隙がないから、誰もだませない。
これが本当のオープン。
ブロックチェーンみたいなもの。支配者が国民をだませない
0779デフォルトの名無しさん
垢版 |
2020/03/19(木) 12:38:32.21ID:3l1mva9i
>>757
型自体の操作(メタプログラミングとか)ならともかく、まずはクラスの中での操作を考えるべき。多態とかnull objectとか。

javaで一番多いトラブルはヌルポだろ。本来なら真っ先に対策すべきだと思うがね。
0781デフォルトの名無しさん
垢版 |
2020/03/19(木) 15:15:37.74ID:VRFqiqhe
>>779
C++ で言えばたったこんな程度のこと。
NULLの処理なんて難しくもなんとも無い。

CWnd *MyCreateWindow(const char *pszTitle);  //プロトタイプ宣言

// 使い方の例:
MyCreateWindow(NULL); // タイトル無しでWindow作成
MyCreateWindow("タイトル文字列"); // タイトル有りでWindow作成

// 関数定義:
CWnd *MyCreateWindow(const char *pszTitle)
{
 if ( pszTitle == NULL ) {
  (タイトルが無いとして処理);
 }
 else {
  (タイトルが有るとして処理);
 }
}
0782デフォルトの名無しさん
垢版 |
2020/03/19(木) 17:10:21.28ID:rBTxc+YZ
なんで頓珍漢な流れになってるんだ
nullを安全に扱える言語なのにKotlin未経験者多すぎだろこのスレ
0790デフォルトの名無しさん
垢版 |
2020/03/19(木) 21:17:12.88ID:rBTxc+YZ
>>785
特殊な場合があるときにそれを-1とかで表すよりも100億倍まし
特殊な場合がないのにnullableにするのは論外
何も考えず!!演算子を使うのも論外
NullObjectを作るかどうかはメリットデメリットあるのでケースバイケース
脳死で作るのはJavaでenumを使わずにTypesafe enumパターンを手書きするような冗長さになることもあるし
下手に使うと-1と同じ弱点を埋め込む場合もある

nullに忌避感がある人はこのスレをnullで検索すると議論が参考になるかもしれない
0791デフォルトの名無しさん
垢版 |
2020/03/19(木) 22:46:33.35ID:z/hUxg19
>>757 はKotlinを否定してJavaでnullを扱いたいのか、KotlinのT?型と?.演算子や?:演算子を奨励したいのか
読んでいてよく分からなくなってきた。
0793デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:28:48.16ID:405ti7Ej
>>792
少し例が悪かったので変えてみる:

CWnd *MyCreateWindow(CWnd *pParent);  //プロトタイプ宣言

// 使い方の例:
MyCreateWindow(NULL); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateWindow(親Window); // 指定したWindowの子WindowとしてWindowを作成

// 関数定義:
CWnd *MyCreateWindow(CWnd *pParent)
{
 if ( pParent == NULL ) {
  (親が存在しない最上位Windowを新規作成);
 }
 else {
  (pParentの子Windowを新規作成);
 }
}
0794デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:34:03.99ID:405ti7Ej
>>793
もし、NULLを使いたくないのなら次のようにするしかないことになり、2つの引数に分かれてしまいむしろ危険性が増すばかりでなく、親が存在しない場合にはダミーのWindowのアドレスを指定しなければならなくなる:
CWnd *MyCreateWindow(CWnd *pParent, BOOL bChild);  //プロトタイプ宣言

// 使い方の例:
MyCreateWindow(ダミーのWindow, FALSE); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateWindow(親Window, TRUE); // 指定したWindowの子WindowとしてWindowを作成

// 関数定義:
CWnd *MyCreateWindow(CWnd *pParent, BOOL bChild)
{
 if ( !bChild ) {
  (親が存在しない最上位Windowを新規作成);
 }
 else {
  (pParentの子Windowを新規作成);
 }
}
0795デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:38:28.40ID:i2c+AgK7
>>794
メソッドを引数なしと親ウィンドウ指定ありの2種類にオーバーロードすればいいね
オーバーロードできない言語でも名前を分かりやすいように分ければいい
この場合はnullは使わない方がベター
0796デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:41:51.33ID:405ti7Ej
>>794
現実には、「ダミーのWindow(のアドレス)」なんてものは作りえないかもしれない。
だとすれば、NULLを使わずにこれらの事を行いたいなら次のように、関数を2つに分けるしかなくなってしまうかもしれない。
しかしそれは間違いが入り込みやすい良く無いプログラムである:

CWnd *MyCreateTopWindow();        //親の無いWindowを作成する関数。
CWnd *MyCreateChildindow(CWnd *pParent); //pParentの子Windowを作成する関数。

// 使い方の例:
MyCreateTopWindow(); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateChildWindow(親Window); // 指定したWindowの子WindowとしてWindowを作成
0797デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:45:38.48ID:405ti7Ej
>>795
似たような処理を行う関数は、完全に2つに分けてしまうとバグの原因になる。
理由は、内部で似た処理を行っている箇所を両方とも修正する必要が出て来やすくなり、一方だけ修正して他方は修正し忘れたりすることが多くなるから。
こまごまとした違いが有って、一致している部分もあったりするので、単純な機械比較は出来ないので同一性チェックを人間の目で行わなければならなくなる。
だから、>>793のように書いたほうがずっと安全になる。
0798デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:48:47.36ID:405ti7Ej
>>797
「親が有るかどうか」
という一つのパラメータだけなら、まだ良いが、
「メニューオブジェクトを渡すか渡さないかでメニューが付くかどうか分ける」
なども付いたりすれば、組み合わせ爆発が起きるため、関数を完全に分けてしまうのは非常に非効率で危険なプログラミングとなる。
0799デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:52:10.51ID:i2c+AgK7
共通化が必要ならNullObjectの多態でも関数型でも使えばいいよ

C言語時代からアップデートされてない知識でモダン言語でのプラクティスを説こうとしているのが謎だよ
タイムスリップしたお侍が自衛隊に兵法を指南するような冗談だよ
0801デフォルトの名無しさん
垢版 |
2020/03/20(金) 01:59:36.15ID:405ti7Ej
>>800
そのデフォルト引数には、NULLかNullObjectを指定するしかないはず。
なんで、NULLで済むのにNullObjectを使うの。
それで安全になるのか?
0803デフォルトの名無しさん
垢版 |
2020/03/20(金) 02:49:45.65ID:4pMtFWMQ
>>796
すべてのウインドウはRootWindow配下とするみたいなルールを設定して、親のないウインドウは禁止するればいい。

linuxのプロセスが必ずinit配下になるのと同じ感じ。
0804デフォルトの名無しさん
垢版 |
2020/03/20(金) 02:54:28.27ID:405ti7Ej
>>803
それは可能だけど、グラフィックのFrameBufferの容量が大きいので、
デスクトップに浮いているWindowの場合にChildWindowと同じ処理をしたのでは
メモリーの無駄使いになることがあったり、
デスクトップに浮いているWindowとChildWindowとでは動作がかなり違っていたり
することが多いので初期化段階から if 文で場合分けしないと無理が有る事が多い。

だから、そのような「統一した考え」では結局は、効率が下がるために
実際には駄目プログラムとなる。
0805デフォルトの名無しさん
垢版 |
2020/03/20(金) 03:01:28.97ID:405ti7Ej
>>804
さらに付け加えるなら、RootWindow のオブジェクトの名前を「覚えるのが面倒」
だったり、打ち込むのが長くなって大変と言う事情もある。
例えば、Windowの場合には、「DesktopWindow」という名前で、
Menuオブジェクトが無い場合には、「MenuNull」みたいな名前となる。
しかし実際にはこんな簡単な名前で無い事が多いので、マニュアルをいちいち調べ
直す手間がいる。
一方、NULLだといろんな場面全てNULLなので、覚えることが少なくて済むし、
打ち込むにも4文字で済むので楽。
関数を呼び出す際も短いので一行で書ける場合が多くなり、見易い。
0806デフォルトの名無しさん
垢版 |
2020/03/20(金) 05:05:17.32ID:Edy1QoAW
>>793
Kotlin ならこんな風にすれば良いんじゃないの?

fun myCreateWindow(parent: CWnd? = null): CWnd = if (parent == null) 親なし上位Window作成 else parentの子Window作成

nullable がどうしても嫌ならこうするか。

fun myCreateWindow(parent: CWnd = 親なし上位Window): CWnd = if (parent != 親なし上位Window) parentの子Window作成 else parent
0807デフォルトの名無しさん
垢版 |
2020/03/20(金) 06:32:14.26ID:Oo7Eeggj
言語やベンチマークの議論一般にいえることだけど、自分の有利な土俵に引っ張りこめば何とでも主張できる。

Kotlinは>>805向けには作られていない。というだけのこと。
0808デフォルトの名無しさん
垢版 |
2020/03/20(金) 06:53:01.35ID:4pMtFWMQ
>>804
そこはクラス分けてポリモーフィズムで上手くやろうよ

先のウインドウタイトルといい、例が良くないんでは?
0809デフォルトの名無しさん
垢版 |
2020/03/20(金) 07:53:37.14ID:i2c+AgK7
>>801
書かれてたサンプルコードでは真っ先に分岐が入ってたから「この場合は」オーバーロードかメソッド分割がベターと回答した
後付けされた条件を加味するなら>>806のnullable型がいい
privateな処理内で局所的にnullabeを使うことに異論はない
Kotlinならヌルポが出ないから安全

覚えるのが面倒ということまで気にする公開APIなら親にnullを指定すると親無しになるというルールを覚えさせるよりも
親の引数を省略可能にするかメソッド名を用途別に分けてクラス内で処理を共通化した方が使いやすい

nullは単一なので楽という話は、nullは単一なのでいろんな意味がまぜこぜに使われ区別できないという裏返しでもある
variantは型がないので楽、グローバル変数は楽、staticは楽というのに通じる
0810デフォルトの名無しさん
垢版 |
2020/03/20(金) 07:58:22.42ID:i2c+AgK7
メソッド引数にnullを与えたときヌルポが出るのかトップレベルウィンドウになるのかドキュメントを読まないと判別できない公開APIは残念
省略時デフォルトとして内部的に使うのとはまた違う
0811デフォルトの名無しさん
垢版 |
2020/03/20(金) 09:18:27.10ID:CQQp7Y75
Kotlin では、プログラマーが自分で、null を判断したら、ダメ!
null チェックを書かない人がいるから、バグが残る

C++ で言えば、スマートポインターみたいなものを使って、
自動的に判断するのが正しい

どこかで、nullチェックをして、nullじゃなければ、
null許容型を使わないように書く
0812デフォルトの名無しさん
垢版 |
2020/03/20(金) 10:12:13.96ID:1hj/B9bx
>>811
だったらそもそも静的な型がない上に基本的にプログラマが明示的な型チェックもしないことが普通なRubyは、
Kotlinで常にnull許容でチェックも一切しない以上に遥かにバグが残るってことになる(実際そう)なのだが、
自分で意味分かって言ってんのかなこいつ
0814デフォルトの名無しさん
垢版 |
2020/03/20(金) 10:38:58.93ID:EaZGEhh2
それにそもそもオーバーロードかメソッド分割がベターとかいってるが、設定するメソッドじゃなくて現在設定されてる値を取得するメソッドまたはプロパティを追加するときはいったいどんな値返すんだ??

普通に元からnullでいいだろ
0815デフォルトの名無しさん
垢版 |
2020/03/20(金) 10:47:13.64ID:IqcuAu3D
>>814
nullable使わないなら異なる型を返すんだよ。nullable含め場合分けを型で強制することで不必要なバグが入り込む余地を無くすのがnull safetyな言語の流儀
0816デフォルトの名無しさん
垢版 |
2020/03/20(金) 11:02:35.25ID:EaZGEhh2
そういう他人をわざと変な方向に導こうとしてもひっかからんしつまらんから..
0817デフォルトの名無しさん
垢版 |
2020/03/20(金) 13:05:07.29ID:405ti7Ej
>>808
>そこはクラス分けてポリモーフィズムで上手くやろうよ
具体的にポリモーフィオズムでどうやれば分かり易く書き直せるか教えてください。
0818デフォルトの名無しさん
垢版 |
2020/03/20(金) 13:55:01.27ID:i2c+AgK7
>>813
どこ行ったの意味がわからない
どこに矛盾を感じたの?

>>814
俺はメリットデメリット考慮してnullableも含めて最適なものを選ぶのがいいと言ってるんだよ
前提が変わればnullableが簡潔で具合いいところもあるだろ
>>794のサンプルでnullabeを選ぶ理由ある?
0820デフォルトの名無しさん
垢版 |
2020/03/20(金) 14:39:06.40ID:405ti7Ej
そもそも null はそんなに危険ではない。
そのまま使おうとすれば、Windowsの場合だと、Release版ですらほぼ100%一般保護例外が生じるからどこで問題がおきているかも分かるし。
0821デフォルトの名無しさん
垢版 |
2020/03/20(金) 14:40:27.30ID:405ti7Ej
nullが危険といっている人は、MMUを使ってない化石の様なOSでの経験に基づくものなのかな。
0822デフォルトの名無しさん
垢版 |
2020/03/20(金) 14:47:03.13ID:405ti7Ej
if で場合分けせずに、オブジェクトのclassの仮想関数で場合分けさせると言う考え方
は時々聞くが、それはすべてをオブジェクト指向に置き換えれば上手く行くと言う根拠
のない浅はかな考え方だ。
経験を積むとその思想は間違いであることが分かってくる。
0823デフォルトの名無しさん
垢版 |
2020/03/20(金) 15:49:29.05ID:i2c+AgK7
ページ違反が起きて特定に悩まされたのが昭和
一般保護例外なりヌルポなりの発生元ステップをテストで洗い出すのが平成
モダン言語ではコンパイル時に検出するので品質もコストも優位

老人は自らの成功体験に頼るので新しく良いものが現れても知識体系に取り入れることが難しく適材適所の選択ができない
0827デフォルトの名無しさん
垢版 |
2020/03/20(金) 17:03:18.75ID:lyFWLrjP
Javaカスイライラで草
プログラマのくせに新しいもの嫌いとか致命的にセンスないだろw
さっさとやめろよこの業界w
0829デフォルトの名無しさん
垢版 |
2020/03/20(金) 17:12:54.71ID:405ti7Ej
新しくても駄目なものは駄目。
新しければいいと思うな。
若ければ年上に勝てると思うな。
0831デフォルトの名無しさん
垢版 |
2020/03/20(金) 18:18:29.68ID:405ti7Ej
おまえが愚者だ。
0838デフォルトの名無しさん
垢版 |
2020/03/20(金) 21:28:58.30ID:lyFWLrjP
>>835
君が派遣されてるクソ現場は下流しかやってないから律儀にフロントとバックでコーダープログラマー分けてるんだねw
普通上流の仕事してたらそんな底辺下流の扱いなんか厳密に分けてないよwwwww
勉強になったねえ w
0839デフォルトの名無しさん
垢版 |
2020/03/20(金) 21:50:19.69ID:Oo7Eeggj
>>829
年寄りだったのか。
若い頃に苦労して身につけたテクニックが、言語仕様でカバーされて誰でも実践できるようになって、
脅かされている自分のアイデンティティを守るために必死になっている、ってところかな。
0840デフォルトの名無しさん
垢版 |
2020/03/20(金) 23:35:23.46ID:405ti7Ej
>>839
この板に居るようなパンチカード(?)を語るようなほどの年寄りではない。
NullObjectでNULLを代用することが、
「言語仕様で誰でも実践できるようになって、自分のアイデンティティーが脅かされる」
に該当するとはとても思えない。
0842デフォルトの名無しさん
垢版 |
2020/03/21(土) 06:24:08.00ID:JAKzE64M
>>840
> この板に居るようなパンチカード(?)を語るようなほどの年寄りではない。
この板にパンチカードなんて単語一度も出てきてないけど誰のこと?
パンチカード世代ではないにしても、NULLを駆使するのが美しいテクニックだった時代の年寄りなんでしょ?
相手の主張を反論しやすいように歪曲するのはやめた方がいいですよ。

>NullObjectでNULLを代用することが、
「NullObjectでNULLを代用すること」はKotlinの言語仕様でないから、
そのように受け取ったのなら、Kotlinのコンセプトを理解していないか、
相手の主張を反論しやすいように歪曲する癖があるかのどちらか。

>>840が対話の成立しない相手であることが証明されたので
>>840の回答には大変満足しております。ありがとうございました。
0843デフォルトの名無しさん
垢版 |
2020/03/21(土) 09:04:23.03ID:Nklv0DXu
なんだ、親無しWindow を、null にしただけか。
確かに、そういうAPI があるけど、マネしない方がよい

それって、0 でも空文字列でも、何でもよいわけでしょ。
そうい所に、nullを使うのはおかしい

nullは、ヌルポだけに限定すべき!
異なる意味で使ってはならない!

使い方を文章に書いた時にも、
引数がnullなら、親無しWindowになりますというのも、ちょっとおかしい

そういう用途には、デフォルト引数!
0844デフォルトの名無しさん
垢版 |
2020/03/21(土) 09:36:51.55ID:oUFNTFet
>>820
それどっちかというと Windows 独自の文化だと思う
たまに Windows 系の助っ人に行ってコンソールに例外出まくりなのみてビビるよ
0845デフォルトの名無しさん
垢版 |
2020/03/21(土) 09:44:12.11ID:JAKzE64M
>>843
nullは存在しないことを意味すると考えれば、あながち間違いでもないと思うし、
デフォルト引数を使うにしてもデフォルト値はNullObjectになるだろうし。

というのは置くとして>>842で述べたように>>840にこれ以上構わないほうがいいと思うんだが。
0846デフォルトの名無しさん
垢版 |
2020/03/21(土) 09:55:22.84ID:3uF/mjPQ
俺が老人という言葉を使ったのは実年齢のことではなく振る舞いだよ
Kotlinのコンセプトを理解してないどころか学ぶ気すらない
C++でサンプルを提示する辺りJavaを知っているかすら怪しい
自分のアイデンティティーを脅かされるという自覚はなく、わざわざ下らないものの詳細を学ばなくても俺には経験上わかるんだという老人特有の驕りが見える
全貌が見えてないから議論が噛み合わない

このスレにはnullは一切使わずにNullObjectを使うべきと主張する層とnullableは安全とする層と適材適所で使うという層がいて、この老人にとっては全員敵であり区別できないのだろう
NullObjectはJavaでは効果的なプラクティスだったけどKotlinではStateパターンのような役割でないとさほど輝かないと俺は思う
KotlinでNullObjectが常にnull(able)の良き代替になるなんて誰も提示できないはず
この老人がその一点に拘り他を無視する限りやっぱり俺は正しいんだと信じ続けるだろうな
0848デフォルトの名無しさん
垢版 |
2020/03/21(土) 10:12:24.90ID:3uF/mjPQ
>>845
あながち間違いでないことと良いAPIであることには隔たりがあると思うよ
参考としてはJavaが提供しているライブラリにおいてnullを指定してくださいというメソッドよりもオーバーロードを提供しているメソッドの方が多い
ウィンドウの例だけでなく一般化して考えると、引数のデフォルト値として空の関数を与えて綺麗に書けるケースも多い
メソッドごとにnullを渡すべきなのか空の関数を渡すべきなのかNullObjectがあるのかを考えず、引数を省略するというシグネチャーで判別可能な一貫した利用ができるのは優れたメソッド設計だと思う
0849デフォルトの名無しさん
垢版 |
2020/03/21(土) 11:44:22.68ID:oUFNTFet
爺さんが引数に null 渡す例出したのに釣られちゃってるけど
Javaでも戻り値に null かオブジェクト返す API は普通にあるからね
これは NullObject か nullable に修正したい
0850デフォルトの名無しさん
垢版 |
2020/03/21(土) 12:37:46.26ID:R4utYKoB
プログラマーの気持ち悪い部分をいい感じに体現してくれてる
ここであれこれ書いてもぬかに釘
noteかブログにでも書いておけ
0851デフォルトの名無しさん
垢版 |
2020/03/21(土) 14:00:49.01ID:txJMIm7g
なんでも古い古いと言っていれば、どんなに駄目でも新しい言語や若い人が有利になってしまう法則。
0852デフォルトの名無しさん
垢版 |
2020/03/22(日) 04:45:41.69ID:HvrypJyW
引数の個数や型だけが異なる「関数の多態性」を行うと、プログラムが間違い易くなる。
なぜなら型や引数の個数の書き間違いをコンパイラが報告してくれなくなることがあるから。
C/C++で型が導入されたのもそういう間違いをコンパイラに発見してもらうためも有ったが、それが働きにくくなってしまう。
0853デフォルトの名無しさん
垢版 |
2020/03/22(日) 04:50:38.77ID:HvrypJyW
>>852
一つの関数名に引数の型や個数が異なる関数が10種類くらい多重定義されていたとする。
これを使ったプログラムする際には、マニュアルを見、関数名だけでなく引数も非常に正確に書かなくてはならなくなる。
型や引数の順序や個数などが僅かでも間違っていると、自分が思っていたのとは違う定義のものが呼び出されてしまうことになるが、それでも「合法」になってしまうのでコンパイラがエラーを出してくれない。
また、後から動作を調べようと思ってマニュアルを見たときにも、見間違いで間違った定義の部分の説明を読んでしまう現象が生じ易くなる。
0854デフォルトの名無しさん
垢版 |
2020/03/22(日) 04:56:18.54ID:HvrypJyW
>>853
func(1,2);
と書いたつもりで、タイプミスなどで
func(1,2,0);
と書いたとしよう。
func()が多重定義されていない場合なら、コンパイラがエラーを出してくれる。
ところが、func()が多重定義されてしまっている場合、たまたま、3つの整数引数の定義があった場合、自分の思ったのとはかなり違う動作の関数なのに、コンパイラが何もエラーを出してくれなくなってしまうことが有り得る。

それから、知らず知らずに「引数の自動型変換」機能が働いてしまうことが有り得る。
それと関数の多重定義の両方が組み合わされると、自分が思っていたのとはかなり
違う動作の関数が間違って呼び出されることになっていても、気づくことができない。
本当はどの関数が呼び出されているのかが分からず、どんなにチェックしても原因が分からない難しいバグが入ってしまうことになるかもしれない。
0856デフォルトの名無しさん
垢版 |
2020/03/22(日) 08:47:08.62ID:sfJQKmPV
技術的な話でスレが進むのは、過疎ってるよりは良いことだよ
ほぼ読んでないから内容は知らんけど
0857デフォルトの名無しさん
垢版 |
2020/03/22(日) 09:31:29.37ID:nwybfWiz
>>854
その話は、引数爆発は嫌だ、じゃあデフォルト引数使え、で解決してるだろ
さらに付け加えるなら名前付き引数も使え
そのあたりのCやJava時代の弱点をKotlinやC#は克服済みだ
あと多重定義は多態とは呼ばない
0858デフォルトの名無しさん
垢版 |
2020/03/22(日) 09:32:27.12ID:nwybfWiz
>>854
たまたま同じ型ばかりを引数にとる関数で順番を間違えるヒューマンエラーには配慮できるのに、nullを多用したときに誰かがミスして実行時エラーが多発するリスクに目を向けないのは何故?
0861デフォルトの名無しさん
垢版 |
2020/03/22(日) 11:43:59.28ID:F4lre3ad
>>853
ほんそれ
同じように思ってた人が居て良かった
0862デフォルトの名無しさん
垢版 |
2020/03/22(日) 12:55:36.51ID:q5xwUBc3
>>853
混同するのが危険なほど挙動が違うのなら、そもそも同じ関数名を使うべきじゃない。
関数・クラス設計における命名規則の問題だろ。言語設計(javaのヌルポ)の問題と関係ない。

この主張が、なんで型なしnullのマジックナンバー利用の肯定に繋がると考えているの?
0863デフォルトの名無しさん
垢版 |
2020/03/22(日) 15:36:31.56ID:HvrypJyW
>>857
「ポリモーフィズムは次のようないくつかの種類に分けられる:

・アドホック多相(Ad hoc polymorphism):ある関数が、異なる型の引数に対してそれぞれ異なる実装を持つ場合。多くのプログラミング言語で関数の多重定義としてサポートされる。
・XXXX
・XXXX
・・・
0864デフォルトの名無しさん
垢版 |
2020/03/22(日) 15:39:40.53ID:HvrypJyW
>>858
親Windowのポインタを受け取る引数にNULLとした場合、意味は分かり易い。
「親がない」こと以外に意味を取りようがないから。
同様に、メニューオブジェクトへのポインタをNULLとした場合も、
「メニューがない」こと以外に意味を取りようがないので分かり易い。

それに比べて、関数を多重定義した場合には、ミスによってとんでもない動作をしてしまうことが有り得る。
0866デフォルトの名無しさん
垢版 |
2020/03/23(月) 01:38:55.49ID:bf1cRh+B
>>865
この例の場合、NULLにすると、それぞれ親Windowがない場合、Menuがない場合で、どちらも重要なので、さすがにテストしてあるはずなのだ。
この例に限らず、引数にNULLを指定する場合は、そのような「重要な変化」をもたらす事が多いので、必ずテスト済みの場合が多い故に安全なことが圧倒的多い。
0867デフォルトの名無しさん
垢版 |
2020/03/23(月) 02:26:57.24ID:dalJ4OEg
>>864
何を言いたいのか全然わからん。

NULLの利点は親Windowの指定方法だと言っているのに、
>>854だと全く関係のない関数funcでoverloadに問題があると言っている。
自分の主張に沿うようにいいとこ取りしすぎ。

同じケースでNULL利用の利点とoverloadの欠点を比較しろよ。

>親Windowのポインタを受け取る引数にNULLとした場合、意味は分かり易い。
nullよりも"NoWindow"というNullObjectを定義して使ったほうが意味はわかりやすい。
なんでnullを使わなきゃいけないのかね?
0868デフォルトの名無しさん
垢版 |
2020/03/23(月) 02:48:11.59ID:bf1cRh+B
>>867
後半、NULLで十分なのに敢えて、NoWindow なんてオブジェクトを定義する必要
を感じない。それでバグが減るわけでもないし。
0869デフォルトの名無しさん
垢版 |
2020/03/23(月) 03:14:15.98ID:6F6bSuZt
>>866
それは言い換えると、nullを安全に使えるのはテストのパターン漏れがあり得ないような重要な変化があるところに限られ、それ以外で使うと安全とは言えないってことだよな
「安全なことが多い」ってのは危険は残っていると認めてるね
「さすがに〜はず」ってのは希望的観測だし、最後の文だけ「圧倒的」を付け足したのも論拠不足だよな
人は多重定義で引数順を間違えるような凡ミスをすると理解できているんだ
では人が重要ではない甘いところでnullを不用意に使ってしまうミスは当然あるよな
0870デフォルトの名無しさん
垢版 |
2020/03/23(月) 08:20:48.10ID:E0UAbPRX
>>868
前半の準備できてから議論続けてね。


>「必要を感じない。」

それは個人の感想なので、主張としては弱くて役に立たないですね。

・メソッドを使う時に「NoWindow」であることをより明確化できる。
・間違えて「NoWindow」を指定してもnullより目立つので間違いに気づきやすい。
・名称がより明確なので、第三者がソースコードを読む時に読みやすい。
・それ専用に定義された変数に入っているので、IDEの支援を受けやすい。
・このケースだと必要性は薄いが、nullの意味が複数あるような場合でも(null,undefineなど)別々に定義できる。

くらいの利点はあるけど?
0871デフォルトの名無しさん
垢版 |
2020/03/23(月) 08:53:23.76ID:7Cqb7CJ8
NullObjectパターン使ったライブラリーとかほとんどみかけないから...
もうここまで言えば後はワカルナ?
0872デフォルトの名無しさん
垢版 |
2020/03/23(月) 09:58:46.34ID:iyDg9ARV
GetParentやGetMenuでnullチェックを忘れたらヌルポ
それを万が一忘れてもコンパイルエラーにしてくれるのがNullable
0873デフォルトの名無しさん
垢版 |
2020/03/23(月) 12:12:09.69ID:E0UAbPRX
>>871
c言語の悪癖に冒されているだけだろ。

「マジックナンバーは悪」というのは常識だろうにマジックナンバー的にnullを使う設計者の気が知れんわ。
0876デフォルトの名無しさん
垢版 |
2020/03/23(月) 23:43:05.45ID:bf1cRh+B
>>873
Keep It Simple.

NULLで現実に全く問題ないのに、NullObjectを導入することで新たな問題をむしろ入り込む余地が生まれる。
Polymorphism というが、「親Windowが無い」「Menuが無い」のような劇的な変化
は、Polymorphismでやるより、その場で if 文で場合分けするほうがプログラミングし易い。

例えば、Polymorphismに向いているのは、動物の種類を分けるようなときで、
「動物そのものが存在しない」時には向いていない。
後者は、if文無しで対処するより、本文の方でif文をちゃんと書いて場合分けした方が間違いが
生じにくくなるし、コード量も少なくなる。
だからNullObjectを使って、NullObject自身に処理を行わせて本文にはif分を使わないより、
ちゃんと本文にif文を書く方が適切なのだ。
仮にNullObjectを使っても結局、本文に if ( pMenu == &NullObject ) などという if 文を
書いてしまっては、Polymorphismにはならないし。
0877デフォルトの名無しさん
垢版 |
2020/03/23(月) 23:59:37.49ID:Kfc9ZaIq
KotlinはNullObjectよりnull推奨で
そのための前提として構文レベルで区別するための仕組みがある

x,yなのかrow,colなのか順番分からんから名前付き引数使うとか
どのオーバーロードが呼ばれるかとか

そういうのも区別出来るかどうかという似たような話になる
0878デフォルトの名無しさん
垢版 |
2020/03/24(火) 00:18:55.74ID:T0vrM+QL
>>873
NULLは、「無い」という真空状態のようなものに対応している。
(古典物理学的にはだが原則的に)真空は唯一のものであるから、
親ウィンドウがないことと、Menuがないことで、別の真空が存在する
わけではなく、唯一無二の真空で十分だとも考えられる。
それとマジックナンバーでは全く異なる、
マジックナンバーが問題なのは、後で修正しようとした時に簡単に修正できないことや、
その意味での定数を使っている場所をgrep検索で発見できないことだ。
親ウィンドウやMenuが無い事をgrep検索する必要はないし、「無い」状態を
簡単に修正する必要もない。WindowNullやMenuNullと区別した所で何か便利になる
可能性は低い。
マジックナンバーとは、
int TOMATO_PRICE = xxx;
int NUMBER_OF_TOMATO = xxx;
・・・
int TOTAL_PRICE = TOMATO_PRICE * NUMBER_OF_TOMATO + CAROT_PRICE * NUMBER_OF_CAROT;
みたいにしてから、
func(TOTAL_PRICE);
とするのと、いきなり合計価格を計算してしまった結果だけを使って
func(4032);
などとするのでは大きく分かり易さも訂正し易さも変わってくると言うことだ。
この場合、TOMATOの一個当りの値段を変えたり、個数を変えたりすることが、4032という数値では
簡単に修正できなくなってしまうのだ。
そのような問題点は、NULLにはない。
0879デフォルトの名無しさん
垢版 |
2020/03/24(火) 00:35:30.02ID:0F/GzGem
Kotlinってnullableを使っても安全だし
NullObjectも書きやすいんだよなあ
sealed classならNullObjectがこの上なく簡単に定義できて
whenで受けたときプログラマーが分岐を漏らさないようにコンパイラが教えてくれる
スマートキャストも安全で便利だ
0880デフォルトの名無しさん
垢版 |
2020/03/24(火) 00:44:02.15ID:0F/GzGem
古いものが大好きなnull爺にこの話を教えてやろう
Kotlin公式ドキュメントからリンクされてる学習者には有名なエピソードだ
nullポインタを発明したのは、クイックソート等の数々のアルゴリズムを発明し、C言語の源流にもなったALGOLを実装した天才トニー・ホーア氏
彼は近年こう回顧し謝罪している

>それは10億ドルにも相当する私の誤りだ。null参照を発明したのは1965年のことだった。
(中略)
>私は単にそれが容易だというだけで、無効な参照を含める誘惑に抵抗できなかった。これは、後に数え切れない過ち、脆弱性、システムクラッシュを引き起こし、過去40年間で10億ドル相当の苦痛と損害を引き起こしたとみられる。
0881デフォルトの名無しさん
垢版 |
2020/03/24(火) 01:42:20.76ID:T0vrM+QL
>>880
偉いとされる人が言った、または、有名な団体が作ったようなものを無条件で信じるあなたのような権威主義者が多いだけ。
有名な所が出してきたものは初期の衣の凄くもてはやされる。
使ったこともちゃんと学んだことも無いのに多くの人が褒めちぎる。
それはなぜかというと、そうすることで自分が新しいものに追いついていると
人に錯覚させることが出来ると思い込んでいるからだ。
実際には何も知らないくせに適当に新しいものを褒めているだけ。
0883デフォルトの名無しさん
垢版 |
2020/03/24(火) 03:32:39.53ID:kBVBs/yt
null自体が問題なんじゃなくて、既存の言語の型システムでnon nullableな参照型がないのが問題なだけ。ごっちゃにしすぎ。
0884デフォルトの名無しさん
垢版 |
2020/03/24(火) 03:41:54.20ID:kBVBs/yt
だから、null自体はあった方が便利、ただ、型システムの方で値型だろうが参照型だろうがnullable、non-nullableの両方定義できるようにしとけってだけ
0886デフォルトの名無しさん
垢版 |
2020/03/24(火) 08:13:59.70ID:PfG4KY3E
>>880
その失敗の本質は、いつでもnullポインタを入れられてしまうことだよ

Nullableの元でもあるHaskellのMaybeモナドやScalaのOptionモナドは
無効を表現出来るが何ら脆弱と見られていない

KotlinのNullableは効率のため単なる参照型変数にコンパイルされるが
プログラム上は以下のようなコンテナと概念的には同じ

sealed class Nullable<T> {
open val isNull:Boolean get() = true
open val value:T get() = throw NullPointerException()
}
class Some<T>(override val value:T): Nullable<T>() {
override val isNull:Boolean get() = false
}
class None<T>: Nullable<T>()
0887デフォルトの名無しさん
垢版 |
2020/03/24(火) 08:34:24.48ID:nrIfxQG3
>>876
自分勝手な論理展開が多くて議論にならんね。

ここはkotlinスレだし、「javaではヌルポのトラブルが多い」という事実を無視した主張はクソの役にも立たない。
「ヌルポのトラブルを避けるためにはどうしたらいいか」くらい考えたら?じゃなきゃスレ違いだからNGにするわ。

そういや、>>870にヌルポの観点が抜けてるな。追加すると、
・変数の初期化ミスで変数にデフォルト値(null)が入っていても、意図しない(親無しウインドウでの)呼び出しにならない。
0895デフォルトの名無しさん
垢版 |
2020/03/25(水) 19:58:41.50ID:R+JOhqjs
初めてAndroidアプリ作成の案件に携わってるけどクソOSクソ端末に対応するコスト無駄すぎるな
イライラするわ
0896デフォルトの名無しさん
垢版 |
2020/03/25(水) 20:11:20.32ID:i/r3a70w
テスト用に全ての実機用意するとかマジで有り得ん
0906デフォルトの名無しさん
垢版 |
2020/03/30(月) 12:29:37.34ID:XS9n9xNo
サーバーサイドkotlinを導入したいんだが、なんて言って上司を説得するのがいいと思う?
上司は昔java1.6やってたくらい。
0907デフォルトの名無しさん
垢版 |
2020/03/30(月) 12:36:40.55ID:Q7TXlLL8
言語云々を論点にしてはいけない
「技術選定も含めて俺に任せてくれ」だ
お前の全責任においてお前が成果を出せば誰も文句は言わない
それができないんなら黙って前例踏襲してなさい
0908デフォルトの名無しさん
垢版 |
2020/03/30(月) 15:01:23.30ID:XS9n9xNo
すまん。ちょっと聞き方悪かったわ。
単純にメリデメ教えてくれって言われたらなんて答える?
0909デフォルトの名無しさん
垢版 |
2020/03/30(月) 16:14:25.46ID:S7P/1C/L
ライブラリが同じなのでフツーのJava経験者なら3日もあれば習得できます
開発環境にJavaのソースをコピペすると自動変換もできます
null参照はコンパイラーが検出してくれる言語仕様なのでnullに関するバグを排除できます
ちなみにA案件でのnull参照バグは全体のxx%でした
Java14で計画されている言語仕様の改善も全て先取りしているので開発効率が上がります
中でもrecord型の先取りにより開発規模がA案件試算でxx%削減できます

ほかに口説き文句あれば俺も知りたい
0910デフォルトの名無しさん
垢版 |
2020/03/30(月) 18:20:58.26ID:LtUNGbMV
>>907
クッソ頭悪いだろお前
説得する材料くれって言う要件に対してその回答はあまりにも的外れだわ
0912デフォルトの名無しさん
垢版 |
2020/03/30(月) 18:40:18.84ID:/1SwYHDd
自分にとってどういうメリットがあるのかと
そのメリットが既存のものを捨てて乗り換えるコストを上回りそうかどうかという
2点をクリアしないと普通の人は新しいものを導入しようって気持ちにはならない

2つとも個々の状況によるものだから
現状の問題点や比較対象無しに聞いてもフワッとしたものしか返ってこないと思う
0915デフォルトの名無しさん
垢版 |
2020/03/30(月) 20:58:19.14ID:XS9n9xNo
javaの仕様に追従してる層にならメリットは説明できるけど、そうじゃない層に説明するのは難しい。。
実際、アドバイスくれてる人の説明もjavaの辛みが分かってこその主張だと思う
なんかjava1.6で止まってる人にも分かりやすいメリットないかな。。

ちなみに上司は、人の集めづらさを懸念をしてるだけで、本格的に反対してる訳では無い。純粋にメリット何?って感じ
0916デフォルトの名無しさん
垢版 |
2020/03/30(月) 21:25:01.20ID:Y9H00XEN
>>906
ここは一つネガキャンで。「KotlinがあるのにJavaをやるのは、JavaがあるのにCをやるようなもの。」
ただ、上司がJava至上主義者なら、「Cなんかと一緒にするな!!」と激怒するおそれあり。
0917デフォルトの名無しさん
垢版 |
2020/03/30(月) 22:39:22.47ID:cikRGyRQ
そろそろ転職しようと思ってたんだがコロナの影響でエンジニアの求人は減ってるの?まだ待った方が良い?
0918デフォルトの名無しさん
垢版 |
2020/03/30(月) 23:14:36.65ID:9vU1dCrA
プログラマとエンジニアは別物なので、まずその辺の違いをハッキリさせたほうがいい
0919デフォルトの名無しさん
垢版 |
2020/03/31(火) 01:21:29.69ID:09jFIsyL
でも、もしJavaならバージョンいくつ使うつもり?
そこどこ新しめJavaならそこまで苦痛にならんぞ
1.6ぐらいと比較して俺のペインポイントだったローカル変数の型推論もあるし、ラムダもあるし、コレクションのストリーム操作もあるし。

大きめの機能でasync/awaitないけど
0922デフォルトの名無しさん
垢版 |
2020/03/31(火) 12:30:43.25ID:mNevEI+p
>>911
一発で辞めることができたりして
0923デフォルトの名無しさん
垢版 |
2020/04/02(木) 00:15:49.69ID:MNI6t01H
Kotlinのdata classがJava14でrecordとして採用されると聞いて感動したのも束の間、まだPreviewなので正式採用はJava16辺りと知り気が遠くなった
誰もが普通に使えるようになるのは2026年頃じゃろか
0925デフォルトの名無しさん
垢版 |
2020/04/02(木) 02:07:24.43ID:MNI6t01H
誰もが普通にと書いたのはJava11の延長サポートが2026までだから遅い現場だとそこまで待つかなと
でもそれを言うなら8は2030まで延長できるんだった
0926デフォルトの名無しさん
垢版 |
2020/04/03(金) 06:46:06.71ID:/ReAKvRh
>>919
ラムダ式とOptionalで行けるのではと思っていた時代が、私にもありました。
ただ参照透過なプログラミングをしようとした途端、Listと配列がMutableなことが越えられない壁になる。
Java9から不変リストを作るList.of()があるけど、必要なのは実行時エラーでなくコンパイルエラーで教えてくれる不変リスト。
0927デフォルトの名無しさん
垢版 |
2020/04/03(金) 09:39:44.79ID:yWt1Tau8
それを言ったらKotlinのListも不変リストではなく読み取り専用のビューなので同じなのでは
0929デフォルトの名無しさん
垢版 |
2020/04/12(日) 01:08:01.34ID:NWUkpCEz
Windows 10 で IntelliJ IDEA を 2020.1 にアップデートしたら起動後にちゃんと動かなかった。
ウインドウは出るがその中が灰色のまま。右下に赤いやつが点滅していてマウスカーソルを
持って行ってクリックすると IDE Internal Error Occurred See Details and Submit Report と
出てくるが、Detail も何も出てこない。ウィンドウの右上の×を押しても終わらず、しょうがない
のでタスクマネージャで終了させた。

Community edition だが、試しに Ultimate の同バージョン方をインストールしたら動いた。
ま、しかし、ライセンスあるわけではないのでとりあえず Community edition の 2019.3.4 に
しておいた。これはちゃんと動く。
0931デフォルトの名無しさん
垢版 |
2020/04/14(火) 11:07:51.69ID:VpWClbHP
Javaやれ
0934デフォルトの名無しさん
垢版 |
2020/04/14(火) 11:31:09.72ID:ARe9d0+J
Kotlinは腐りきったJavaをなんとか少しでも便利に使うための車椅子のようなもの
古いのを勉強したくないならKotlin含めJava系の世界に飛び込むこと自体を考え直してもいいんじゃないかな
0938デフォルトの名無しさん
垢版 |
2020/04/14(火) 21:14:44.96ID:CfDohWIc
当然、日本ユーザー会会長の太郎本!
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016

スッキリわかる Java入門 第2版、2014

超有名なスッキリを読んでないと、オブジェクト指向が分からないのでは?
Ruby をやってれば、オブジェクト指向・メソッドチェーンによる関数型と、両方とも理解できるけど
0939デフォルトの名無しさん
垢版 |
2020/05/01(金) 08:16:22.65ID:q8mD6cDI
>>930
C++, C#, Java, Swift, Rubyみたいなモダン言語の経験が無いと、Kotlinは難しいかも。

1. Clousure
2. Generics
3. Type Annotation Estimation
4. Collection
5. protocol

こう言うのが意味不明となる。
OOP自身は難しく無い。
0940デフォルトの名無しさん
垢版 |
2020/05/01(金) 09:25:47.40ID:MJ8FtJpe
全然関係ないんだけどさ

前々から思ってたんだが
「モダン」って言い方になんか古臭さを感じるんだよな
大正時代的な
他に良い呼び方ってないもんだろうか
0941デフォルトの名無しさん
垢版 |
2020/05/01(金) 09:32:44.13ID:k2YlXFh6
ダイナミックレンジですねわかります
0943デフォルトの名無しさん
垢版 |
2020/05/01(金) 10:56:25.01ID:q8mD6cDI
>>942
Type inference
0944デフォルトの名無しさん
垢版 |
2020/05/01(金) 10:58:18.55ID:q8mD6cDI
>>940
最新新言語、State of Arts computer language、Advanced Language、Recent Language、Up-to-date Language

御好きにすれば!
0948デフォルトの名無しさん
垢版 |
2020/05/01(金) 12:20:45.98ID:q8mD6cDI
>>946
such like Interface in Java or Abstruct Class in C++
0951デフォルトの名無しさん
垢版 |
2020/05/01(金) 13:13:27.88ID:578ddPng
>>940
日本人的には大正モダンでハイカラなイメージが強いけど、英単語のmodernにそんなニュアンスはないんだから直訳でモダンでもイイでしょ
アートやインテリアではモダンって普通に使うし
0953デフォルトの名無しさん
垢版 |
2020/05/01(金) 15:33:32.05ID:q8mD6cDI
>>949

1. 違いない
2. 似ている
3. 同じ

これらは、全く異なる意味を持っている。
0956デフォルトの名無しさん
垢版 |
2020/05/01(金) 18:17:15.79ID:m4mY1Cpc
>>940
ナウいヤングな君は和製英語の事は忘れて英語の modern を思い浮かべなさい。
0957デフォルトの名無しさん
垢版 |
2020/05/02(土) 04:45:48.24ID:HrddHHvE
アマゾンで検索したら7/17発売予定の本が見つかった。表紙デザインもまだ出てこない。

基礎からわかる Kotlin
富田 健二 (著)

単行本: 224ページ
出版社: シーアンドアール研究所 (2020/7/17)
言語: 日本語
ISBN-10: 4863542917
ISBN-13: 978-4863542914
発売日: 2020/7/17

アマゾンのURL書くとここに書き込みできないのでヨドバシのURL書いておく。
https://www.yodobashi.com/product/100000009003256396/
0961デフォルトの名無しさん
垢版 |
2020/05/02(土) 20:00:00.13ID:HrddHHvE
10秒ぐらい考え込んでフリーズした。
0964デフォルトの名無しさん
垢版 |
2020/05/04(月) 05:41:02.53ID:ZCjfeBBX
>>957
その出版社の本、本のサイズの割に字が小さくて、読みにくいんだよね。
0965デフォルトの名無しさん
垢版 |
2020/05/04(月) 20:57:12.28ID:gMqnLc6N
プロトコルってなんなのかよくわからんからググったんだけどさ
Swiftだと主に構造体を使うことになっていて!?構造体にも適用できるインターフェイスがプロトコルってことなのか?
もしそうだとしたら、構造体が主流じゃないKotlinにプロトコルがあろうがなかろうがほとんど変わらん気がするが・・・・
0966デフォルトの名無しさん
垢版 |
2020/05/04(月) 21:27:04.79ID:au6sJ5VU
プロトコルとインターフェースは呼び名が違うだけ

JavaのインターフェースはObjective-Cのプロトコルを真似して違う名前を付けたもの
SwiftはObjective-Cからプロトコルという名前をそのまま受け継いでる
0967デフォルトの名無しさん
垢版 |
2020/05/05(火) 04:39:20.00ID:VadYgeyG
>>966
まじで?>>948は冗談で言ってるんだと思ったぜ・・・・
0968デフォルトの名無しさん
垢版 |
2020/05/05(火) 06:35:08.05ID:L2fj2Ukz
Interfaceって機能がなぜ必要?

1. Super1, Super2を多重継承したDerived ClassからSuper1, 2に共にあるfooメンバにアクセスすると、Super1.foo, Super2.fooのどちらが呼ばれる?

2. この問題を回避するには、多重継承を禁止すれば良い(菱形継承問題、Diamond Problem)

3. もう一つの解決方法は、宣言しか実装していないClass(Interface, Prototype, Abstruct Class, Module)を使えば良い。

この理解でOK?
0969デフォルトの名無しさん
垢版 |
2020/05/05(火) 06:40:25.13ID:L2fj2Ukz
>>968
具体例

図形 -> 四角形 -> 平行四辺形 -> 長方形
平行四辺形 -> 菱形

こう言うClass Hierarchyがあった時に
長方形 -> 正方形
菱形 -> 正方形

なる正方形を作りたい。

こんな時に、Diamond Problemが発生。
0971デフォルトの名無しさん
垢版 |
2020/05/05(火) 06:53:54.99ID:MSVPcbFQ
C++は仕様多すぎて複雑怪奇すぎて意味わからん
C++以外の、高速で、メモリ、OSネイティブAPIを直接いじれて、アセンブリに近い言語って無いんか?
大体ネイティブ機能実装とかだと C++ でやることになるけど
Python とかも結構頑張ってるん?
0973デフォルトの名無しさん
垢版 |
2020/05/05(火) 06:57:28.64ID:L2fj2Ukz
>>971
Golangがそれに近いのでは?

Swift, Kotlin Nativeが高速コードを吐く、万能言語を目指してるけど、今のところ達成されていない。

かといってC++が普及しているか?と言われると、初学者を撥ね付ける仕様の複雑さで、そうもなってない。
0975デフォルトの名無しさん
垢版 |
2020/05/05(火) 07:56:44.92ID:rwJ86+M0
複数のクラスから継承(is-a)するのは、難しすぎる・柔軟ではないので、
Ruby でも継承は、1つのクラスからしかできない

その代わり、複数の機能・モジュールを、Mixin(has-a, インタフェース)できる

mixinすると継承チェーンに割り込むので、継承チェーンは一直線になる。
同名の関数は、親クラスよりも先に、mixinでみつかる

子 → mixin → 親
0978デフォルトの名無しさん
垢版 |
2020/05/05(火) 14:25:41.55ID:L2fj2Ukz
>>975
なるホドォ

mix-inってのは継承チェーンに割込むって意味なのね。
気がつかなかった。

なんで、mix-inって名前なのか今、気がついた。
0979デフォルトの名無しさん
垢版 |
2020/05/05(火) 17:57:01.37ID:pxHbBt7R
>>971
> C++以外の、高速で、メモリ、OSネイティブAPIを直接いじれて、アセンブリに近い言語って無いんか?

C言語
0980デフォルトの名無しさん
垢版 |
2020/05/05(火) 18:21:58.43ID:0KGdisEr
>>979
確かに。

新しいC++の仕様やSTLはとても難しいので、Cを基本として、class などの概念を使いたいなら、C++98などの古いC++の私用の範囲でやることがお勧め。
0982デフォルトの名無しさん
垢版 |
2020/05/06(水) 00:38:39.08ID:izcxg96Z
懐かしい
0985デフォルトの名無しさん
垢版 |
2020/05/06(水) 09:52:46.95ID:q6Rk1GB6
基地外がどうこうと言うより
正常な人は Ruby を選ばない
ただそれだけのこと

結果的に基地外濃度が上昇する可能性は否定しない
0987デフォルトの名無しさん
垢版 |
2020/05/06(水) 12:12:52.32ID:q8N1X/Ij
オリジナルのルビー男を離れて模倣犯が続出したルビー荒し事件を総括して名付けられたのがスタンドアローン・コンプレックス
プログラミング技術という新たな情報ネットワークにより、独立した個人が、結果的に集団的総意に基づく行動を見せる社会現象を指し、孤立した個人でありながらも全体として集団的な行動を取ることを意味する
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 319日 7時間 40分 44秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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