Kotlin 6
レス数が1000を超えています。これ以上書き込みはできません。
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
※前スレ
Kotlin 5
https://mevius.5ch.net/test/read.cgi/tech/1544268581/ 仕事で使う android アプリを作ろうと思って
とりあえずは「はざめての android プログラミング 第4版」
を買ってきました。まずはこれ読んで頑張ってみます。
開発環境のメモリが 8GBしかないのですが、
さすがにメモリ食いますね。 >>7
>「はざめての android プログラミング 第4版」
内容を的確に表したすばらしい表現だと思う Kotlin 1.3.40 released
https://blog.jetbrains.com/kotlin/2019/06/kotlin-1-3-40-released/
Kotlin/Nativeのメモリマネージャ周りの改良により
パフォーマンスが2倍程度向上したそうだ そろそろ言語機能はいいからライブラリ充実させてほしいわ Kotlinコンパイラのセルフホスティングを完成してほしい >>16
roadmapを見る限り、やるべきことが山積みで先は長そうだ。 まぁ出して欲しいとか言いつつまだ出せる状況じゃないのは分かる
だからこれは5000兆円欲しいみたいな類いの願い >>11
こんなのが出る。
$ kotlinc
exception: java.lang.NoClassDefFoundError: org/jline/reader/LineReaderBuilder
(以下略)
これだな。
https://youtrack.jetbrains.com/issue/KT-32085 >>19
5000兆円あればStable版も夢ではない気がする。
Ktor, KotlinどころかJVMの仕様から作り直しても余りそう。 人生100年として、1秒間に約158万円使える額だ。 5000兆円あったらさすがにエンジニアやめて田舎の山奥で陶芸家にでもなるわ >>29
誤爆ついでに乗ると俺も有安推しだったから今はソロの方応援してる >>24
そして自ら田畑を耕し自給自足して金を一切使わない。 >>31
いや、5000兆円の札束を窯焼きの燃料にする >>33
お札(日本銀行券)は破損しても逮捕されないよ。
逮捕されるのはお金(硬貨)の方だ。 5000兆円を1万円札にしたら50万トン
毎日、1トン燃やして1369年
どんだけの量なんじゃw おれのビットコインなら0gだかそろそろ値が落ちそうだ お札を数珠繋ぎにして裸で首輪ってのが今のトレンドらしいが
千円でやるなんてみみっちい
壱万円でやれ 5000兆円だと100万円の札束を数珠繋にして地球と月とを往復できる長さ。
どんだけー 5000兆円手に入ったらこのスレの住人に1兆円ずつ分配するわ まず金にものを言わせてロビー活動をして日本政府に1000兆円札を作らせる。
するとたったの5枚に。 5000兆円を預金できる銀行はあるのだろうか?
桁数がオーバーフローしそう
金利0.001%でも膨大な額になる 例え話で出したつもりが5000兆円の話になってて草 >>44
スイス銀行なら大丈夫な感じするな。
無理なら複数の銀行に分散したり自分で銀行作ったりするしかないかな。 自分で銀行作るのが最良だな
100兆円くらい使えば最高の施設と最高の人材を用意できるだろう >>40
> お札を数珠繋ぎにして裸で首輪ってのが今のトレンドらしいが
kwsk 専業主婦27歳結婚5年目の実態
1. テレビ、家事、買い物
2. 優柔不断、決定に時間がかかる
3. 映画、カラオケ
4. 細身、目鼻立ちハッキリ
5. 経験一人
6. 胸のサイズ(I), 毎日でもヤリタイ
経験人数は夫ただ1人 27歳Icup巨乳妻。もっとSEXがしてみたくてAVデビュー!! 松浦理央 MEYD-230
冒頭インタビューまとめ そういやアクセス集中でサーバが重くて会員登録中々できないと今話題のファミペイアプリはアプリについて出すと先頭に Kotlin と出て来たよ。
https://i.imgur.com/0dlMYaV.jpg 今更Androidアプリをjavaで書く奴なんていないだろ ファミペイは今日、テレビでやってた
公共料金なども支払えるから、ポイントが莫大! ところが今はチャージがファミマのレジでの現金チャージかファミマTカードのクレジットカードでしかできない。
他のカード使えないので持ってない人にはあまりメリットが感じられない。
わざわざ現金チャージするぐらいなら他のなんとかペイを使っちゃうんじゃないかな。普通は。 7月中にチャージすれば、還元率は現金チャージで10%(上限2,000円)、
ファミマTカード(クレジットカード)のチャージで15%(上限3,000円)です
上限額あり
普段は、200円で、1円のポイントだって。
0.5% >>51
2019年の新規開発ならそらそうだろとしか この手のものの開発は1.5年はかかりそうだが・・・ >>53
15%と聞いて飛びつきそうになったが、上限3,000円ということは450円分。
500ポイントプレゼントにすら劣るわけで、一瞬騙されそうになって自己嫌悪。 いやーしかし、この頃なんとかペイが増えて俺のスマホも関連アプリだらけになったよ。 Androidのアプリを作りたいと思っている一般人ですが、現状Kotlinが最適解なんですかね? >>61
Kotlinは言語としては超複雑な部類で初心者向けの情報も少ないから初学者にはお勧めできない
まずはJavaの入門書を一冊終えよう Kotlinは割とプロ仕様、ただ動かすだけならすっきりしていて良い言語だと思う 最初から kotlin やるならどうしたらいいですか >>65
普通に入門書読めば?
またはネットで検索しまくって調べる。 >>68
お前の使い道が無くて干されただけじゃね? まだある。特に歴史のあるサービスだと新規部分はKotlinでも既存Javaコードはそうそうなくならない。 >>65
速習 Kotlin
俺、Paperwhiteにdownloadしたけど、まだ最初読んだだけ。
固定レイアウトではなくflow layoutなのもGood. >>70
Kotlinコンパイラ自体がその状態だから困るw javaだろ。データが魔改造したstrutsらしいし。 というかそもそもあれは仕様が頭おかしいだけで実装言語は関係ないだろww Kotlinさえ使っていれば・・・
なんてことはない。 エルビス演算子のあとってrunとletどれがいいんですか もしかしてデータ担当の大手企業って全部魔改造struts1の可能性ないですか もう死んでるけどNTTデータとかいうネクロマンサーが独自パッチを当てて使い続けてるそうだ >>81
もしかしてエルヴィス演算子?:じゃなくてSafe Calls ?.のこと?
>>87
別にラムダ式の中でthisが使いたいならrunでいいんじゃないかと。 run/apply を選択する時は let/also における it を省略したい時
省略した際にプロパティと同じ名前のローカル変数・引数があると後者が優先されるので注意な >>87
凡ミスのリスクが上がるからDSLの文脈以外では
thisを差し替えるラムダはおすすめ出来ない
別言語での例として、JavaScriptのアロー関数式もfunction式と異なり
thisを差し替えないことが利点の一つとなっている >>90
applyの方が単語の意味的にコードの意図が明確になる気がするから好きなんだけど、そのローカル変数と名前被り問題がネックだわな。 だったらrunとかalsoとか文法から消せばいいのに
混在して統一感取れなくてバグの原因にもなるからコーディング規約を決めないといけなくなるし
これは一つのKotlinが糞な点の一つだなあ一つの alsoじゃなくてapplyか
この辺すぐ分からなくなるのも糞 T.run, with, applyは実際消したほうがいい
let, alsoは要る
レシーバ無しのrunは上記と違いローカルスコープ用なので要る(Swiftでのdo) ちょっとしたシンタックスシュガーのせいでバグりやすい仕組みを作ったので、今度は曖昧さを無くすために明示的な記述を強制するターンだぞ apply はインスタンス化した後にそれに対する設定が書けるので便利
後、ビルダーパターンを独自スコープで書けるのも
with, run はほぼ使わないな… >>95
レシーバ無しのrun{ ... }は{ ... }()でも書けるからやはりいらないのでは。
>>94
自分はスコープ関数早見表をブックマークしてる。
>>96
Effective Kotlinが出版されたら「itやthisよりも明示的な引数名を使う」が多分入ると思う。 >>100
↓のコードの run{ ... } を { ... }() に置き換えてビルドすれば違いが分かるはず
https://paiza.io/projects/TL1UeckyJ8oSVbRwNo9t_Q?language=kotlin
これらはインラインかどうかとトレイリングラムダの性質による そこらへんは実装時にちゃんと統制取れずグダグダと追加しちゃった感じあるよな
まじでスコープ関数こんなに何種類もいらんかったわ でも言語そのものではなく言語仕様に則って誰でも作れてしまう拡張関数だからな。標準的なライブラリに含めなくても何れ誰かが作っちゃうのではないかな。(それなら使用頻度が少ないから良いのかも知れないが)。 >>105
「Xamarinほどの〜」は止めてそれを繰り返すことにしたの? 確かに拡張関数が言語標準じゃなくて社内の誰かが勝手に作ってプルリク出してきてたらリジェクトするな、たぶん
紛らわしくてバグの原因になるからもうちょっと種類を減らせって言うわ >>109
.also()が出来た理由が、ネストしたラムダ式の中で、itとthis両方を同時に使って引数名を
省略できるようににするためとかいう話があった気がするから、言語の方針として諦めざるを得ない...? >>110
あー、そういうことなのか
言われればわかるけど、なんというか、その場しのぎ感が否めないな Androidだけじゃなくて、サーバー側も勉強しようと思って
Goの勉強してるんだけどこれってサービスとしてリリースしようと思ったら
どこの環境で公開したらいいの
やっぱawsですかね従量課金怖いんですが このスレで聞くならサーバーサイドもKotlinで書けよ。
Spring bootはもうKotlinでなんの問題もないぞ。 時期早々なんで試してないんだけど、aws lambda にkotlin native乗せて遊んでみてほしい。
api gateway/dynamo db繋げればandroidからの呼び出しにちょうどいい課金形態やろうし。 そうだ。このスレにおいては何もかも Kotlin にするのが正しい。 URLがザマリンじゃねーか
Xamarinスレへ行け kotlin 1.0 + spring boot 1.4 ぐらいの時から何の問題も無かったぞ そう言えばkotlinにはマスコットキャラいないの? >>124
なぜにKotlinの後継にしたし。
"Kotlin Class" Destroyer だけど、どうしても Kotlin "Class Destroyer" に見えてしまう。
デストラクタ的な何か。 ことりん覚えるのって公式サイト見るのが一番ええんか? 公式サイト見ながらIntelliJで実際に書いてみるのが一番かな Xamarin程の糞はない
少なくともflutterよりは優先度が低い try kotlin で IntelliJ 無しでも勉強できんじゃね >>130
このスレに昔からあるネタだから真面目に反応しなくていいぞ 🔹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 >>133
どうやら、is/are being Vppは動作を表すみたいだ。
e.g.
The potted plant is being placed under the picture. そろそろkotlin nativeのコンパイル速くなった? CoroutineとRxはどう使い分けるんだろう。 そういやコルーチンって中でどうやって実現してるの?見た目スレッドとほぼ同じ動きになってるようだけど。 >>141
非suspendからの非同期開始は、JVMなどではスレッドプールへのタスク登録
JavaScriptではPromise(仕組みはsetTimeoutなどでのイベントループへのタスク登録)
suspend内は終わったら呼ばれるコールバック関数でのチェーン
val a = suspendFn1()
val b = suspendFn2(a)
print(b)
↓
suspendFn1() { a ->
suspendFn2(a) { b ->
print(b)
}
} >>140
過渡期
目的によるけど、正直今となってはRxを新しく使う必要はあまりない
ただし例えばスマホでRxSwiftに慣れてるメンバーがAndroidも作るならRxの方が良いとか色々ある java.beans.XMLEncoder や java.beans.XMLDecoder で XML 読み書きする場合に、書くのは出来ても読む時にクラスないって出て読めない。
うまく行ってる人居る?Java で作るとうまく行っても Kotlin だとダメなんだけど、何が原因なのかわからない。 エラーが起きる最小コードを作って
環境/コード/エラーの3つをセットで貼るといいよ >>146
せめてコードとエラーを貼ってくれないと なんとなくだけど、import書き忘れとかの本当にしょうもない理由な気はする 実行時にうまく行くパターンとダメなパターンがあることがわかった。
(というかむしろ自分でうまく行かないパターンをピンポイントで選んで実行していたような感じ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 コマンドの中を延々と調べて行けば何れ分かるんだろうけどね・・・)。 またkotlinc君か
そんなもの誰も使ってないからバグは多そうだね 趣味でやってるならどうでもいいけど業務でそんな無駄なことしてたら引っ叩くわ Set<K>とSet<V>からMap<K, V>を作りたいんだけどいい方法ある? (両方のSetは同じサイズ) >>164
ど、いい方法ある?(両方のSetは同じサイズ) >>165
LinkedHashSetかTreeSetにように順序付けがあるならいいけど
単にSetとして考えるなら順序不定だから2つのSetの関連付けが出来ない
仕様の前提から考え直したほうが良い
一応順序があるなら m = setK.zip(setV).associate{it} で出来る 今コード書いていて疑問に思ったんだけど、String#sliceとString#substringって何が違うの? あー。しかしちょっと違うね。CharSequence と String の違いか。 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) この並存状態と微妙な差はJavaScriptの現状に倣ったんじゃないかな
いずれにしてもそれぞれの意図が明確にドキュメント化されていないみたいなので実装の差を活用する気にはなれないけど >>172
どうでもいいけどすごく読みにくいコードを書きそうな人だね コードが読みにくいというか命名が15年前のセンスだと思う >>176
書き捨てなのと5chの制限回避で文字数・行数圧縮してるんすよ・・・
2文字以下で現代的(?)なのがあるならすまん >>172
ちょっとわかった。ありがとう。
>>173
なんとなくそうかなと思っていたけど、やっぱりJavaScriptとの互換性のためにsliceを導入したのかな。
>>177
中高生... こういうところもKotlinがとっつきにくいと言われる一因だよな
まあ実際には知らなくても困ることはあまりないんだけど firebase firestoreを使っていて月額固定のflameプランを契約しているんですが、
一日の上限の読み取り回数である25万回を超えても普通に使えてるんですが何なんですかね サポートに聞いてみたら?
勝手に追加課金されることはないだろうけど、確かめるに越したこたはない てか読み取り回数すぐ増え過ぎじゃないですか
realtimedatabaseより遥かに高い
これからはfirestoreに移行するもんだと思って使ってみてるのに
クエリー使わないならrealtimedatabase使ったほうがいいし googleの新しいカモ要員っしょ
開発力あるなら柔軟性のあるGAEとかを直接叩くほうがいいと思う オフライン機能ついたデータ同期する場合はfirestore楽なんだけど。
それを自前で実装?ご冗談を たぶんfirebaseで何ができるのか良く分かってない人なんだよ これもしかして25万回超えなかった日の分が
超えた日の分に補填されてるんですかね アプリの更新がなかなかすぐにアップされなくなったり 初心者向けの本を買ったんだが、この方が簡単ですとか言いながらガラケー時代の画面を作らせるとんでもない本をつかまされた… >>195
ぐぐると出てくる
>>196
ガラケー?今さら実行可能な環境がないように思うが。
Androidだけどガラホで画面が狭いだけではなく? >>197
FF作れないと怒る初心者の方はいまだにいますよ あーそれ系か。
昔(2000年頃)、DirextXで3Dシューティングを作るための勉強本が出たんだけど、
物凄く丁寧で最初は数学の復習が書いてあった。
(高校数学の法線ベクトルの考えたかとか)
で、読んでも意味がわからん勉強ができない俺を馬鹿にしてるのか金返せと
本屋に怒鳴り込んできた20代の子が居たんだよ。
だからかは知らないが、本に載ってるゲームは結構簡単なレベルのものが多くなったなあ。 >>200
尼でもコメントに理解出来ないって書いて評価下げる香具師が多いな まあ、著者や編集者の力不足で教えるの下手くそな本はあるにはあるよ
名プログラマーであるからといって、そのシステムの開発者であるからといって、他人(初学者)に教える文章を書くのがうまいとは限らない
ただ、思ったようなアプリの作り方が載ってないってのはあんまり作者の責任ではないな 造り方が既にそこら中に転がってて後追いで造っても面白くないやろ
創り方は自分で考えろ 後追いいいじゃないか
先人が1ヶ月悩んだ結果を15分で乗り越えて経験積めるんだぞ
残り29日23時間45分はそれをもとにしたさらに別なことに使えるんだ
梃子の効果すごいだろ(間違い) 今からプログラミングを学ぶとしたらjavaよりkotlinのほうがいいよね? 内部DSLで無茶するよりコード生成の方が最終的には小回り効いて好きだな >>219
DSLは汎用ライブラリのために丁寧に設計する時用かな。
スキルによるだろうけどDSLのライブラリを使いたいとは思うけど、作りたいとは思わななかった。 もうAndroid Javaの仕事はないぞ
Kotlinがわからないやつに仕事はないぞ Kotlinでマウントするのはさすがに無理筋
こんなもんJavaわかれば誰にでもできる JavaができるならいずれはKotlinもできるようになるだろうがすぐにではない。
すぐにできたとしても最初の内は Kotlin らしくない Kotlin の良さを生かし切れていない「セミコロンなし Java」みたいな、何年後かに自分で読み直すと修正したくてしたくてたまらなくなるようなプログラムになるであろう。 実は俺、N88BASIC(86)も使えるんだ(キリッ アセンブラは価値があるかもだな。
どちらかというと何を作れるか、
もっと言うなら何を作ったことがあるかが大事かと。 Kotlinって結局のところJVM言語のひとつなんじゃない javaはkotlinに変換できるのに
kotlinはjavaに変換できないのか? >>231
できると思うよ。
kotlin→jvmコード→逆コンパイル 逆コンパイルしたやつってかなり非効率なコードしてそう あ、すまん、回答ありがと
実際にjavaにしたいわけじゃない
将来的にkotlinだけの巨大なスパゲッティを見たときに正しく読めるかな?と不安になってね Kotlin使ってもなおスパゲッティになるようならJavaに変換したらもっと凄いスパゲッティになるのではないか? Javaで書くと冗長な感じになる表現を小さくまとめられる事が多いしKotlinはそういうのも目標にして作られた言語だからな。
だからJava→Kotlin変換をするとだいたいは量が増えて複雑怪奇なソースになると思う。 作るのはまだjavaでいいだろうけどkotlinをネイティブで読めるようにはなりたい Java読むよりKotlin読む方がすんなり入ってくる >>240
完成品はね
でも製作途中で何処かがおかしいんですとか相談に来られても見れない javaをkotlinに変換すると大体20%ぐらい減る 開発中の任意のタイミングでKotlinの方が分かりやすいと思うけど 今まで買ったjavaの本、全部kotlinにならないかなぁ…
逆引きのkotlin版ってないの? java見ながらkotlinにして書いてると
つまずいたときにjavaでいいやってなる
変換はなんとなくわかるけど、省略するとこがいまいちわからん
どうやら自分は省略すればいいとこを無理に変換しようとしてるぽい
そしてまたjavaを書く 書きやすい方からでいいよ
言語の慣れもあるけどプログラム経験の方が重要
プログラムイディオムや関数型の理解などが進めば
言語の切り替えもスムーズになる 速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ Kindle版
山田祥寛 (著)
まあまあ、良かった。Delegate、移譲の部分が消化不良だが、byっていうキーワードでメソッドcallの時にReceiverを取り替えられるって事がわかった。
by Delegate()でa.someMethodっていうメソッド呼び出しをDelegateオブジェクトのsomeMethod呼び出しへと変換できるらしい。
someMethod呼び出しの中でNotificationを行うとかの応用ができる。
lazyとかっていうオブジェクトがよく解らんかった。動かしながら理解しないとだめだな。本を読んだだけではピンと来ない。 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} >>251
Genericsの汎用型、型パラメータの書き方はKotlinの方が好みだな。
e.g.
interface ISome<T: U> {…} 他言語プログラマのためのKotlin基礎 Kindle版
Independent Laboratory (著)
その他()の形式およびエディションを表示する
Kindle版
¥0
Kindle Unlimited では、このタイトルや100万冊以上の本をお 漏れのフレームワーク本の著者の評価では、
掌田津耶乃がトップで、山田祥寛は2番目
山田は100名まで、1人4万円の講座もやってた 英語の本でいいのある?
逆引き的な辞書的なサンプル集的なやつ あ、kotlinの英語の本です
技術英語なんて日本語の本と書いてあることはだいたい同じだから >>256
漏れなんて言い方久しぶりに見たよ(藁) >>256
>掌田
この人の本、めったに当たりが無い。
Rubyの本は良かったな。特に、CGIの部分。Rails出現以前の本だった。
この本でhttpdがCGIをどう扱ってるか理解した。
httpのputリクエストのrequest headerをRubyアプリは、stdinから取り込むと知ったのだ。
それまでコマンドライン引数でrequest headerを受け取るのか?
はたまた、環境変数で受け取るのか不思議だったのだ。 >>262
言語は関係ない。とにかく標準入力から読めば良いのだ。 つのだは糞
ネットで調べればすぐわかるような入門的なことしか書かない >>253
この本、Win10環境で、Kotlinソースをコンパイルする方法が、巻末にあって良い!おまけにsource code download serviceもいい感じ。
Macbook Proをお布施代として払うのはこれからは遠慮したいし。
もう一冊の本、>他言語プログラマのためのKotlin基礎 Kindle版
こいつは、InteliJ IDEAだかなんだかのinstall方法からの説明で、思いやられる。
おれは、Vim + quickrun.vimで動かしたいのだ。おまけに、書籍掲載のソースのdownloadサービスも無し。 >>266
他言語…本は、すぐ読めた。山田本には無いpackage文の説明があっていい感じ。
package sample.pkg
class Person(val name: String) {…}
って書ける様になるらしい。
それから、
kotlin-prior-learning-book.pdf
へのlinkがあって、これもこれから読んでみる。 >>267
package文でクラス、メソッドをexportして
import文でクラス、メソッドをimportする訳だ。
import sample.pkg.Person
とか
import sample.pkg.*
とか、
import sample.pkg.launch as launch
でlaunch関数の呼び出しをsample.pkg.launchではなくlaunch一発記述OK. var f = syori()
while (f != null){
syori2()
f = syori()
}
これ↑かっこいい書き方ない? while (syori() != null){
syori2()
} generateSequence(::syori).forEach { syori2() } 作ればわかる!のkotlin対応版いいね
androidをkotlinで始める人で、とにかくサンプルを書き写したい!って人にお勧め
書け!ってとこを色分けで指示してあるからどこに書けばいいのかも分かりやすい
3.5環境のkotlinXのチェック入った状態でウクレレ前までやったけどimportを自分で書こうとしなければ変なエラーもなく普通に実行できた
中身が分かったか?と言われたらこれからだw
頑張る >>273
>作ればわかる
作ればわかる! Androidプログラミング Kotlin対応 10の実践サンプルで学ぶAndroidアプリ開発入門 単行本(ソフトカバー) – 2019/6/19 >>274
それ
今はAndroidアプリ開発の教科書 kotlin対応 基礎&応用力をしっかり育成 ってのやってる
実は最初にこっち買った
今なら読める val adapter = mSpinner.adapter //Spinner
for (i in 0 until adapter.count) {
if (adapter.getItem(i) == ”ここ”) {
mSpinner.setSelection(i)
break
}
}
これ↑もっとかっこよく書ける? >>275
>Androidアプリ開発の教科書
基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン
これ良さそうですね。消費増税前に買っちゃおうかな。 >>277
今年から趣味で休日プログラマー始めた初心者なんだけどSQLサンプルあるから最初にこれ買った
Android studioに慣れてなかったから初心者にはちょっと難しいかな
だから少し慣れた人にお勧め
こういうサンプル書いてある本は実際に動いて満足感得られるし紙上で矢印とかペン入れできるし理解を得るには良いですよね
サンプル載ってる本は他にもjavaも含めて5冊くらい買っちゃった この一連の自己レス臭い本の宣伝は何なんだ
こんな所でやっても効果無いだろ・・・ >>278
解る。
Visual Studio本、多量に買った。▶仕事でGUIアプリ作った。
Xcode本、10冊位買った。▶仕事でアプリ作ったが、職場で採用。
Android Studio本、1冊買った。Yahoo黒帯とか言うやつ▶趣味で始めたが、時間が取れない。◀イマココ >>276
searchのところは、ArrayAdapter#getPosition(T)がある。 >>273だけど
もう一度最初からやってみたらビジネスカードのところで躓いた
どうやらandroidXになる前に作ってたぽい
PreperenceManagerがXになって廃止になったとかなんとか、
一応他の方法で回避できたけど全くの初心者はここで立ち止まると思う >>283
あらら、ダメだ
血圧アプリのRealmの書き方もandroidXに対応してないな
ん〜悩む kotlinのsynchronizedってdeprecatedなんすかね Kotlinの文字列中に変数かけるやつ
依存関係が逆転してる感じですごい嫌だなーとおもってたら
C#まで真似しやがった
世も末 あんなの単なるStringBuilderの構文糖衣じゃん
あと変数でなく式な
"aa${10+1}bb"
↓
StringBuilder("aa").append(10+1).append("bb").toString() ""に値を設定するんでなく""から外を参照する形になって文字列が文字列じゃなくなった
書いてある文脈中でしか使えない。フォーマットと違ってどっかよそに貼り付けてもそれだけじゃ動かんくなる
変数の名前同じにしとけとかねーよ
最初から式ならまだしも""の中が実質文字列じゃないとか勘弁 sh の "〜" が遥か昔から中の変数等を展開してくれる仕様
代わりに '〜' を使うと変数等の展開をしない 大体の言語には埋め込みと.format呼ぶ2つのやり方があるんだから、簡単に文字列結合したいときと固定フォーマットを定義したいときで使い分けたらいいんじゃないかな? 言いたいことは分かるけど、新しいものを受け入れられなくなるってのはこういうことなんだな、と思った 俺はシェルみたいな埋め込みができて素晴らしいと思ったけどね。
楽だし。 Ruby の文字列・ヒアドキュメント内の式展開だろ。
"abc = #{ 式 }"
Rubyを真似て、Python, JavaScript(JS), Elixir でも採用された。
JS(ES2015)で言う、テンプレートリテラル ERB(埋め込みRuby)と同じ
最初は、HTML の文字列をつなげて、HTMLを作っていたのが、
発想を逆転させて、HTMLの中に、<% 〜 %> で、Rubyの式を書けるようにした
<p>
Name: <%=h name %>
</p>
h は、HTMLエスケープをする関数 kotlin nativeが成熟するのはいつなんだろ。。。 try kotlinとかの上に出てくるネコのシルエットって何ですか?
ネコちゃんの名前が知りたい >>304
ギットの猫?
Monalisa モナリサです ∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< ・・・
( ) \_____
| | |
(__)_) >>305
ギット?ということで調べて来ました
身体はタコなんですね…w
ありがとうございました Octocatが名前と思ってたけど種族名だったのか はじめてのandroidプログラミングのサンプルで使われてるライオンの画像がかわいいw べつにされてもどうってことないよ
毎日食ってウンコしてシコって寝てるだけのオッサンのハゲ頭監視して
それ何か得することあんのか? 監視してるやつはバカとしかいいようがない kotlinよかJavaの方が汎用性が高いので
androidappもJavaで書きたいんだけど
リファレンスではkotlinfirstだからな!って威張りやがるので
androidapp開発って、いつまでjavaで引っ張れるか、だれかプリーズ! そんなもんわからないので俺の主観で直感のみを使ってお答えしよう。
あと・・・3年ぐらいかな? それは無意味な心配だよ
Javaがなくなれば自動的にKotlinも消える Androidのアプリ開発で使われる事は減るのではないかな。 Android自体がJavaの塊だからサポート外になることはありえないよ ありえないとは思わんが、もしJavaサポートをAndroidから排除する日がくるとしたら
それはGoogle端末がAndroidを載せるのを止める日だな サポート外にはならなくてもアプリを作る時のJava使用率は減るのではないかな。 どうでもいいでしょ
世の中で圧倒的にKotlin<<Javaなのはこれからもずっと変わらないんだし、
たぶんJavaからKotlinへの移行が進むよりもスマホアプリをJVMモドキで作ること自体が廃れる方が早いよ そしたら Kotlin native なりなんなりそのプラットフォームに合わせたコンパイラ使えば良い。 java知ってるならkotlinは楽
androidはkotlin化で立ち止まるよりライブラリの統合で使えないの?!ってなって考えることの方が多い リファレンス様の顔色を窺ってみますと
android app作るのならkotlinな
サポートもkotlinに絞るぞと言っているような勢いを感じてしまう googleはもうjavaのサポートレベルあげなさそうだよな。
今はJava8までの言語機能使えるんだっけか? Go当てただけで十分だろ
MSの打率がおかしいだけ Googleの言語は理想ばっかりで現実(ライブラリとサポート)が
追いつかなかったからなあ。 google天才レベルばかり集めた結果、大多数の凡人が付いてこられなくなった感じはある、なににつけても IQ150以上の人が作ったものなんて
大半(IQ90〜120)の人が使っても使いづらいだけ
ギフテッドは汎用ものを手掛けたらだめでしょ 的外れやな
じゃあ天才ばかりのMicrosoft Researchは?ってなるし AndroidのMSスマホだろ?
スマホに関してはWindows諦めたということだな。 Googleはデータドリブンに傾倒しすぎた結果、プログラミング言語自体の面白さが生産性を高めないことを確信してしまったんだろう
MSもJetBrainsもそんなことは昔から重々承知だろうけど、
さすがに長年開発ツールを作ってきただけあって使ってもらうためにはプログラマに心理的に好まれることも大事であると理解してるんだろうね Swiftのコードを移植しやすくするために、プロトコルを移植する術を用意して欲しいな >>334
スマホや、インターネット使ってる癖に?w >>334
今回ノーベル賞貰った人のIQは150未満だったのか?
電池使いやすいぞ。入れとくだけだし。 ま、しかし、大人のIQって一体何を基準にして出すのか謎だな。子供ならまだわかるんだが。 >>341
その前にfunとfuncを統一して欲しかった
いまだにとっさにどちらだか分からなくなる >>345
そうするって決まってるの?どこで決めた? 偏差値50でIQ100
50前後だと合ってるが端の方は違うだろうな >>348
そうか。
とりあえずWikipediaで「知能指数」を見てみることをおすすめする。
16歳ぐらいまでしかちゃんとした測定はできないと考えて良い。 >>346
ぱっと見ただけでどの言語のコードかわかるので、悪い話ばかりではない。 kotlinがサーバサイドで動く日は来るのだろうか ていうかだな、VMのレベルでJavaとの互換性あるんだからJavaでできることはなんでもできるよな。
互換性というかJavaバイトコードそのままなわけだが。 何で誰もscalaのライブラリ移植してくれないんだ? >>358
JavaからScalaを呼び出せるはずだから、Kotlinからも呼び出せるのでは? bit演算子がand/orで、conditionalの方が&&/||って紛らわしいな。 >>360
伝統的に BASIC言語では、and, or が条件分岐(BOOL)用だったので、
混乱しそうですね。 単語と記号の混在が紛らわしいって話でしょ
VB系がAndとAndAlsoで、C系が&と&&で一貫しているのに対して、Kotlinはandと&&の組み合わせを選んでて言われてみると少し変
andはメソッドで&&は演算子だから差別化したかったというなら理解できるが、andを演算子オーバーロードしなかったのは何でだろうな
notはしてるのに VBではAndもAndAlsoも、条件分岐用(BOOL系)で、AndAlsoが、
C での&&相当なんですね。x And y も C のx && yに近いが、
xが偽の場合でもyを評価してしまうところが && と違う。
そこで && と同じ動作を行わせるために導入されたのが AndAlsoと。 Pythonは、kotlinとは反対だな。
and/orはいかにも文章的で、こっちの方がしっくりくる。 それに、&& や || は長さも & や | より長いので、少し長い and, or と対応し易い。
後やはり、伝統的なBASIC言語との互換性は重要だ。そっちを覚えている人は
世界では沢山入るはず。特にアメリカ。 >>365
誤:世界では沢山入るはず。特にアメリカ。
正:世界では沢山いるはず。特にアメリカ。 and, orは値によっては計算を評価しないというifの役目もしてるから
ほかの演算子と一緒くたにするのは気分が悪かったのかもしれない
とおもったけど&&使ってもandと評価される項目一緒だっけ Kotlinの言語開発者は、andとorは拡張関数で実装すればKotlinの文法の範囲内で文章的に書けると思ったのかも。
ただ、>>367が指摘するように拡張関数のand, orは短絡評価がないから
&&, ||とは同じ動作にならない上にパフォーマンスも若干落ちるという残念な仕様に。
将来的に短絡評価するアノテーションとかを作れば何とか出来ると思っているのかいないのか。 >>368
短絡評価しないから残念というものではなく副作用を考えて使い分けるものだよ
だから多くの言語ではわざわざ2種類用意されてる
前段については同意だがやはりなぜ演算子オーバーロードしなかったのか疑問 ビット演算と論理演算の違いって>>360が書いてるやろ
ビット演算を短絡評価のない論理演算と捉えてるやつが多くてオシッコちびるわ ビット演算と論理演算の違いはC C# Javaとかでも同じっすよ
言語仕様を広げたくなかったんじゃね
Kotlinのandとかは言語仕様に無くて単なる標準ライブラリの関数扱いだし >>369
演算子オーバーロードを許すと、Int, Boolean等以外のLocalDateTimeのようなプリミティブでない
クラスにまでユーザーが論理演算(もしくはビット演算)を定義できてしまうから
好ましくないと思ったのかなと。
>>370
Booleanに限って言えばビット演算と論理演算は(短絡評価を除けば)等価なはず。
Booleanとand, orを組み合わせれば、(短絡評価の問題を除けば) &&, || が不要になる。 >>374
notやplusは演算子オーバーロードしてるのにandがしてないのが疑問だと言っているんだよ >>375
何を言っても推測にしかならないけど、一つは&&の短絡評価を演算子オーバーロードで再現できないからではと思う。
a && b が bがBooleanかどうかでbが評価されるかどうかが変わるということを避けたかったのではと。
もう一つは、>>372の言うように言語仕様を最低限にしようとしたのではと思う。
Kotlinはシフト演算を見る限り、ビット演算しようとする人には優しくない気がする。
>>375がandでオーバーロードしたかったのが&か&&かはっきりしないけど、少なくともどちらか一つは答えになっているかと。 「演算子オーバーロードしなかった」の意味がよくわからない
&演算子が無いことの話なのか、オーバーロード出来るかどうかの話なのか
後者なら単なる関数なので普通に出来るけど
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") ) 演算子がないことを、演算子オーバーロードしてないと言ってるんだろう
https://github.com/Kotlin/KEEP/issues/142
中の人は演算子提供するのに乗り気じゃなさそうだけどそのうち追加されるんじゃないか
shl/shrとかわかりにくいしand/orも他言語から来ると思考ノイズでしかない ビット演算するとき、|=、&=って激しく便利だし頻出だと思うんだけどなぁ。 そもそも複数のbooleanで扱うべきフラグをビット演算で1つにしてるAPI設計が良くない説 >>380
ハードウェアがそうなってるのだから仕方なかろう。
いっぺんに書き換えないと挙動が変わってしまう javaラーがコトリンに乗り換える勉強するのにどれくらい移行期間かかります? 超天才でスーパーな人なら入門書パラパラめくって眺めて30分ぐらいかな java -> kotlin変換しますか?
Y?/N?
Y -> 数秒まて それだと !! がたくさん残るしそもそもビルド通らない そっから手直しすればいいんじゃない??
無駄が多いし効率も悪いけど… あれ?forループで変数インクリメントするようなのできねーじゃん。なに?while使ってやれっての?えー!
ってなってから、なーんだ (a..b).forEach { } でやりゃあいいんじゃん。
と、気づくまでに3日以上掛かった。 ていうか for (n in a..b) でもいいのだが、a..b が Range になっててあとはコンパイラが自動でうまいことやってくれる事に気づかなかった。 ひとまず小一時間感覚で書いてみるのは良いとしても
言語リファレンスを一通り流し読みする時間をどこかで確保しないとな
https://kotlinlang.org/docs/reference/idioms.html !!ってダメなのか?
むしろ入れて解決してるんだが…w なぜどうしてもそこに必要なのかを説明できない!!は書いてはならない
あとあと絶対にそこでコード的にまたは仕様的にバグるから、むしろ遠回りになる null許容変数がnullになるかもしれないから!!なんじゃないの?
そういう認識なんだが val a = ThreadLocal<String>().get()
val b:String = a //暗黙の a!! >>400
動作の説明としては全くその通り
しかしそれをコードに適用するデメリットが大きいので全世界中からやめと毛と言われている >>403
nullになるかも?なだけで実行順を追っていくとならないことが多いからそのままにしている
必要なら対策するけど、ほとんどの場合は実行タイミングに何か値が入ってる
変に怖れて潔癖にならない方がいい !! は、絶対に、null にならない場合だけに使うべし!
notnull
強制キャストと同じ 例外が発生するから!!が良くないと考えているならそれはnull安全を履き違えている
重要なのは区別することで、どう処理するかは要件次第
処理のタイミングで非nullであるべき変数なら
ガード節、requireNotNull、!! などによって早期にスマートキャストすべき
そのような箇所で不用意にセーフコール(?.)を使うことはいわゆるエラーの隠蔽に繋がる
nullが正常系の内ならもちろんセーフコールなりエルビスなりで問題無い !!はforce unwrapと呼ぶべし!!
!!演算子に名前を付けない言語は滅ぶべし!! >>408
Kotlin公式では not-null assertion operator とある
Swiftと合わせた方が分かりやすいとは思うけどな 例えば画像Aを表示する座標x,y
初期値を画面外の-500,-500にしておけば!!は消せるけど
画面外に表示ってリソースの無駄
これを良しとするやつは複数の画像を画面外に常に表示している
逆にメモリ足らなくなって落ちない?
使わない場合はnullでよくね?
読込みに時間かかるなら初期値設定するのもありだけど
あくまで重い画像を複数使用する例なんだけどnullを悪としてとらえず利用しようよ
上記の理由により、!!潔癖症はただ邪魔なだけ !!を使わなくても安全に実装できるのにあえて!!を使うのは頭が悪いですと言っているようなもの ファイルヘッダとかにマジック定数あるが、これを表現するには
val hoge = arrayOf('a','1').map { it.toByte() }.toByteArray()
みたいな悲しいことしないといけないのでしょうか?
それとkotlinで一般的なバイトバッファを表現するにはByteArrayつかっておけば間違いなないでしょうか? 今はJVM環境で使ってますが、一応コード書くときに、特定のプラットホームに依存しないように書けるとこは書こうと思います
ちょっとつっぱしてByteArrayじゃなくてexperiment なUByteArrayを使おうと思いますが >>411
なぜ使うべきでないのかを説明出来ない限り、議論の出発点にも立っていない
例えば俺は>>407で書いた順の通りガード節、requireNotNullの方が
より明示的かつメッセージ付加可能でなので!!より優先すべきと考えるが
本質的には大差無い
NullObjectパターンは有用ではあるが
セーフコールがあるKotlinでは必ずしも必要としない
そのようなケースはnullが正常系の内であるのと同義 >>410
使わない場合はnull、っていうケースは文字通りガード節や?.を使って
nullならなにもしない場合、と同義なのでは
!!を使うべき例としてはピンとこない
!!を使っている関数は引数つまり関数の仕様としては一見null許容型だけど、実装としてはnullを拒絶する不整合がある
何らかの事情で回避が難しいときの苦肉の策で、多用するのは作りが悪いように思う
あとは関数内で既に非nullであることが保証されてるパスの中にいる場合の簡略化で使うか
でもこれを多用するようなら関数が長すぎるという問題を暗に抱えていたり
安全や可読性よりも手抜きを選ぶ悪癖の疑いを感じる !! null即エラー演算子。
force unwrapでは全く本質を言ってない。 >>414
型安全でないnullを使うこと自体が問題。
!!も、使う前に型安全なnullobjectを検討すべき。 checkNotNull(nullable) { "説明" } がいいんだろうけど、!! で楽したくなる時がある
>>412
byteArrayOf が使いたいって言ってる? >>410
もし遅延初期化、lateinit が使えるなら、その方がよい java のライブラリの @Nullable とか、json で条件によって null / not null が切り替わるプロパティとか >>427
nullableな値を返す外部の関数について、文脈上nullが返らないことが保証できる場合にまで
null対応を書くのは、可読性やパフォーマンスの上で無駄が多いからだと思う。
特にJava(あるいはJavascriptやnative)由来の関数とか。 >>429
誤解されそうなので補足。
1行目の「外部」っていうのは3行目のKotlin外という意味ではなくて、
標準ライブラリを含めて他人が作ったライブラリという意味です。 そのkotlinの存在意義ぶち壊す特異性からしても、どーしても仕方なく使うものであるのだけど
エラー消すおまじないみたいなノリで初心者から中級者が使うので戒められている次第
あと、感染するんだコレ >>426 >>431
requireNotNullは? 1.3.60出てたから久しぶりにkotlin native試してみたらhello,worldのコンパイル時間が更に伸びてた!
10秒→16秒!
何か早くする方法ないの? 実行タイミングが来るまで置いておくだけの関数の中で使う変数は、その関数を実行する前までnullでいいよな?
そういう理由で!!のままにしてるんだけど!!潔癖以外の意見が聞きたい、ロジカルな理由を
その会社の規約なら!!使わないけど
使っていけないならそもそもビルド通らんだろ >>435
型安全が破綻するのでnullobject定義して使っとけ。 >>433
所詮はオモチャなんだからどうでもいいでしょ
JetBrainsとしてもまだコンパイル時間の最適化なんか気にする段階じゃないだろうし 状況が限定されるが、あるクラスがnull相当の状態をとりうるメンバ変数を持っていて
その値がnullのときに呼んだらバグとして例外を出したいメソッドがあるときは
!!を使ってもいいかなと思う
requireNonNullのほうが可読性と保守性でベターだけど本質的には大差ない
残念な!!の使い方ではないんですよと表明している程度(それが重要でもあるわけだが)
NullObjectパターンは必ずしも良い置き換えにはならない
NullObjectかどうか忘れず判定してIllegalStateExcptionを投げなければならない状況になるくらいなら
nullチェックを言語仕様で強制されるほうが手が掛からず安全性も高い
上でも言われていたが例外も何も出ずにバグがしれっと埋もれるほうが危険 require と check の使い分けちゃんとしとけよ >>438
オモチャだから発売日が気になっちゃう精神やん >>435
ものによる。初期化しないとか by lazy にするとか他の方法があるならそちらを使う方が良いかも知れない。 nullのまま素通りさせたくない場合は
!!でなくcheckNotNullやrequireNonNullを使えばOK?
このコードの3つ目のように
https://paiza.io/projects/Ao4mGnYxwoWEuMNRtj_gkg >>438
nullには型チェックが働かないことを忘れちゃいかん。
nullobjectじゃなくてnullがきたときは型チェックでエラーにできるんだから、nullobjectを使ったほうがいい。 !!潔癖症でもいい
変更方法さえ教えて頂けるなら
それに従い変更します Kotlinプログラマーは未だにforce unwrappingの使いどころを知らない
NullObjectのメリットデメリットも知らない
ということはよ〜くわかった >>444
>432と>>442についても意見が欲しい >>448
nullobjectのデメリットって、null汚染されたクラスの再利用が面倒なことくらいじゃない?
他になんかある? NullObjectのデメリット?
「オナニーとしては気持ちいいが、実際の開発において便利なシーンがほとんどない」
これに尽きる >>451
オナニーとして気持ちいいなら誰でも使うだろ。
そんなこともわからない無能かぁ…… あるデータが有限の数値をとる場合と
値なしの特殊な状態をとる場合があるとする
その厄介さってのは多くの場合、処理の場合分けが必要ってところにある
ヒトがそういう分岐を書き忘れがちなのはご存じの通り
その結果もあって多くのプログラマはNPE恐怖症になったが、NPEを回避することが目的になっても意味がない
NullObjectの多態性やアルゴリズムの妙で分岐を潰せるならベスト
だがそうでない場合、むしろ分岐を書き忘れたとき、下手なNullObjectはフェイルファストのメリットを失うことがある nullセーフな言語におけるNullable型の素晴らしい点は
そのままではメソッドを呼び出すことができず
特殊値に対し場合分けの判断が必要ではないかとヒトに思い出させてくれること
不適切な!!はこれを台無しにする
不適切なNullObjectも同じで、より厄介なバグ隠蔽をもたらす >>454
requireNotNullやcheckNotNullも同じく台無しにする?
それともこっちは良い? !!のほうが2文字だし、ここでヌルポが上がるかもと分かるので好き >>455
何を使うにしても状況に適したものを使えば問題ないと思うよ >>450
NullObjectはどのような場合でも正しく機能するNullObjectを定義できるなら優れているが、「どのような場合でも」を満たすのは難しい。
null発生の状況が複数ある場合は「どのような場合でも」というい条件を満たすNullObjectが定義可能である保証もない。
最初は条件を満たしていても、プログラムを修正していくうちに条件を満たせない場合が出てくる可能性もある。
しかも「気づかないうちに」そうなっている可能性がありたちが悪い。
条件を満たせない場所だけ分岐させるのは、NullObjectがnullチェック分岐消去を目的にしている
ことを考えると本末転倒な解決策。 APIレスポンスとかデータ定義はNULLじゃない扱いしておいてビルドエラーもでないけど、
実際に動作させるとNULLが来てクラッシュするとかあるな すごーく簡略化すれば、
private hoge: Hoge? = null
public Hoge apiX() {
if (hoge == null) hoge = Hoge() //
return hoge!! // ここでnullはあり得ないよと「宣言」
}
実際にHoge()のところは、さらにJavaの他のAPI呼び出しだったりするとしても、
とにかくnullでないことさえはっきりしているならばなんでもいい。
要するにこの場合は、apiXがnullを消費する責任を持つってことだ。
持たないなら、nullableのまま返す(つまりAPIとしてはnullも正常系だと言っている)。
そんだけのことじゃないかな。 >>459
nullobjectは「賢いnull」なんだから、null的な使い方してもいいだろ。
型安全なnullとして受け取ってnull分岐してもいいしな。
あと、null発生の状況が複数あるなら、それぞれ別のnullobjectにしていいんじゃない?。 Javaではnullobjectを賢いnullとするのは正しいと思う
でもnull許容/非許容を型で区別出来るようになったKotlinでは
nullobjectはその利点を無くしてしまう
実装持ちobjectとnullobjectを区別する必要が無い場合は何も問題無いけど
もし「nullobjectかどうか」を判定する必要がある場合は
賢いどころか逆になると思う NullObjectは"Tell, Don't Ask"なクラス設計ではうまく機能するんだけど、
関数型チックになAskだらけのコードだと使い物にならんね >もし「nullobjectかどうか」を判定する必要がある場合は
これはないだろ。動機そのものだから。 >>465
それなら良いけど、ケースによらずnullの代わりに使うみたいな話の流れだったから
ログインユーザーとかも無効ユーザーオブジェクトになるのかなと nullの場合の動作を
呼び出す側が決めるのか呼び出される側が決めるのか
どちらが適切なのかを考えるといい
呼び出される側が100%決め打ちできるユースケースならNullObjectは有効
呼び出し側でハンドリングしたくなったら邪魔 java脳からkotlin脳へアプデが必要だけど
私の脳はnull Null Objectは単なる先送りで、ある意味!!が目指す方向とは真逆。
エラーが起きないから落ちることはないだろうけど、
使う側はエラーなのか無視されているのかわかりにくくなる。 >>468
>呼び出し側でハンドリングしたくなったら邪魔
型無しのnull使うよりマシだろ。
許容するととんでもないところから紛れ込むnullの方がよっぽど邪魔。 >>471
nullableでnon-nullにできたっけ? >>472
nullが正常系である場所ではnullabeを使い、nullが紛れ込んだらバグになる場所では非nullを使うって話がもう出てる
適切にゾーニングできているなら紛れ込むことをそう恐れる必要がない
nullという特殊値に対して意識が必要な場所はnullabeという型で言語仕様レベルで明確化でき区別できるからメリットがあり、型無しのnullというほど不便なものでもない >>465
それがないならNullObjectがいいと思うよ
そこを否定している人はいないはず
ただ多くの人は経験上避けがたいと思ってるから意見が合わないんだろうね
解放閉鎖原則と単一責任原則とで作ってくと最初の動機だけではなかなか完結しない
全部ビジターパターンでとことんNullObject-ableな型にお伺いをたてるように作れば完璧にできるだろうけど、そこまで作り込むコストを考えたら適材適所でnullableを使い分けるのが現実解ってのが落としどころだと思う
Kotlinが選び提供している価値はnullセーフであってnullフリーではないし NullObjectって非同期呼び出しとかどうすんの
OOの原理主義的にはコールバックの呼び出しもしないのが正しいんだろうけど、
最近は前後で文脈が繋がってて、コールバックが呼ばれないままだとまともに動かないケースがほとんどだよね
かといってコールバックしようにも引数に何渡せばいいのかとか色々無理がある >>473
nullを使っても問題は限定的だと思うけど、あえてnullを使うメリットはあるのかしらん?
実装上の手間が省ける、くらいしかないと思うけど。 >>476
>>438,453-454あたりを見てくれ >>479
freezeによる制限とAPIはKotlin/Nativeのみ
そのせいでマルチプラットフォーム機能がお通夜状態
だから考え直せ > This is the work of “top-level objects are frozen by default” and “a frozen datum cannot be mutated”.
Kotlin native試したことないけどこれ糞過ぎやろ
既存の(JVM向けに書かれた)コードがほぼ例外なく実行時にクラッシュすることになるやんけ
こんな互換性の欠片もないもん作るんやったらもう別言語でええやろ kotlinてクラス変数に型推論使えるの?
Javaで無名クラスに利用できたらいいのにと思ったことがある
class Hello {
public var xyz = new Object (){ int x; int y; int z; };
void setX(int value){ xyz.x = value; }
} >>483
できるのか! これができるとリフレクションを使ったフレームワークに幅が広がりそうだよねえ
特定の変数名をもつオブジェクトに値を代入するとかさ Kotlin 1.4以降に何を期待するか
https://blog.jetbrains.com/kotlin/2019/12/what-to-expect-in-kotlin-1-4-and-beyond/
品質とパフォーマンスに焦点を当て
大きな機能追加よりエクスペリエンスを向上させること(小さな機能追加はある)
Trailing Commaはありがたい GitHub統計
https://madnight.github.io/githut/
中々上がらない原因になってそうなのは
・スマホアプリでのクロスプラットフォーム性が他より劣る
・Kotlin/NativeやGraalVMのAOTの性能が
他のGC持ちAOT(Go, C#)に全然追いつけてない
・AltJSとしてはTSに完敗
・Javaが割とモダン化していってる kotlin/jsは可能性がなさすぎるから諦めて他のとこにリソース使ってほしい。。 nativeでクロスプラットフォーム狙うならリッチな標準クラスライブラリがないと駄目だろ。言語だけ用意されても。
kotlin/JVMみたく他に寄生するなら寄生先のライブラリ使えるからいいけど。
nativeどうする気なの。
.netやjavaみたいな最低限の標準クラスライブラリないと役立たず。 どうする気もないでしょ
JBが本気でKotlinで天下獲るつもりならGoLandとRiderとResharperを今すぐ廃止すればいい
それをしていないということはその程度の覚悟なんだよ
粛々とチームを解散して開発者を解雇するだけだ クロスプラットフォームがこんなに早く普及し始めるとはのぉ。 JavaでWindowsで開発してlinuxでうごかしとる
バージョンはこないだまで6だった
やっとJavaのかかとの所ぐらいまで世界が追い付いてきたようだ Kotlin/Nativeってバージョン番号が1.0を越えてるけど、
ベータ版を脱したってことでいいの? クラスのnullableなインスタンスプロパティが複数(a,b,c)あって、
それらが全部nullじゃないときに実行できるメソッドあり、
fun execute() {
if (!canExecute)
return
val a_ = a!!
val b_ = b!!
val c_ = c!!
}
いちいちこういう事やってんだけど、なんとかならんもんか・・ 小手先のテクニックよりも設計を見直すべきでは
a, b, cを一つの型に纏められないの? MVVMのViewModelつくったことないの?
ViewModelを作るとたいがいこんなことになるんだが。 >>498
いや、なんでa, b, cをわざわざ別個の変数に代入し直す必要があるの?
そこMVVM云々の事情は無関係だよね
HogeModel(a!!, b!!, c!!).execute()とかなら別に違和感ないやろ 普通のクラスだとこんなことにならんが、複雑に状態が遷移するViewModelだとこんなことになる。
ちょっと前にNullオブジェクトパターンの話題あったけど、NullオブジェクトじゃなくてViewModelの内部でStateパターン使えばたぶんいけると思うがめんどくさそう。 >>499
ああ、!!排除するために内部でそのために別のクラスに追い出せってことかなるほど。 つか、そのためだけならクラスを別に用意するんじゃなくてもいいんだよな。
ただ、executeCoreって別のnon-nullableな引数とるメソッド用意してexecuteCore(a!!,b!!,c!!)するだけで
実際のその先の処理もa_.hoge(b_,c_)とかでちゃんと処理委譲してるから毎回10数行レベルで、更に他に分割するって発想なかったわ。 nullチェックのガード節後に、スマートキャストが効けばいいわけだな みなさん
今日からKotlinを目指す事になった者です
よろしくお願いします >>509
え?
Kotlinって言語の事じゃなかったんですか!?
てっきり言語かと やっぱりプログラミング言語で合ってるじゃないですか
初心者をいじめないで下さいよ kotlin始めましたならわかる
kotlin目指したらhallo world書いたら目標到達じゃないか >>513
でもまだ本が届いてないんです!
かといってプロゲートを調べたらKotlinがないしドットインストールを調べたらクッソ高ぇし
ヨ■■■で
作って楽しむプログラミング Androidアプリ超入門―Android Studio3.3 & Kotlin1.3で学ぶはじめてのスマホアプリ作成
って本をポチりました >>513
こんな状態で僕はKotlinを始めている事になるのでしょうか!? >>516
なってるよ
だからもう書き込まないでね >>514
そんなこと書いた張り紙がラーメン屋にさりげなく貼られてたらどうしよう >>509
すいませんでした
調べたらKotlinの源がJavaという事が判明しました
NGIDを解除しました
ですから今はまずプロゲートでJavaをやってます オンライン講座やアプリにカネをかけたら負けだと思っているのでJavaの本もポチりました
「Java1年生―体験してわかる!会話でまなべる!プログラミングのしくみ」
まずはこれを読んでから
「作って楽しむプログラミング Androidアプリ超入門―Android Studio3.3 & Kotlin1.3で学ぶはじめてのスマホアプリ作成」
を読む事にしました
アデュー 各言語のスッキリシリーズを生み出した、伝説の本!
まずこの本で、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014
その後に、太郎本をやるのが定番!
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016 >>515
たぶん開発環境があってないから楽しめないと思う
サンプル系の本は苦しみながら修正して作るものだと覚悟して望んでください
そうすればとてもいい本です >>522
そういや動画はわかりやすいと誰かが書いてたな。俺はわざわざ動画探して見ないけど。 手動かしてたら覚える
本も動画もメンターもいらなかった 勉強してプログラミングを覚えてからアプリを作るっていう考えがそもそも間違い
まず作りたいものがあるべきでその作りたいものを作るために必要な知識を
都度調べて問題の解決を繰り返すという方法で進むべき
作りたいものがないなら向いてないからプログラミングなんかやめてしまえ時間の無駄 まあ、そう言わんでも
君が数学を学んでいた頃、数学でやりたかったことあったの? 回転機能とワイヤーフレーム3Dでドヤってたら
あっという間に世間はポリゴンだのテクスチャだのバンプマッピングだの
ほんの数年の間の話 大体アプリを作るのに必要な知識って言語の文法だけじゃない
Android SDKの知識も必要だし設計もMVVMとかfluxとかいろいろある
今の主流の外部ライブラリが何かとか非同期処理の実装はどうするか
Firebaseとかも活用した方がいいだろう
必要な知識が広すぎるのに目的もなくただ漠然と必要そうだとつまみ食いしてるだけで
あっという間に時間は終わっていく
大体5年もすればソフトウェアの世界は一変する
結局何も生み出せないまま技術に振り回されて時間が過ぎていくだけ さっき気がついたんだけど
kotlinってimportしなくなった?不要なの?
Math.sin/cos/tan使ってもimportせずに使えてなんか変な感じです 1.4でkotlin/nativeが爆速になってgoが死亡する世界線に行きたい 誰かが1000億円の間違いしなかった世界がいい
今更Kotlinとか付け焼刃 >>528
その通り。
まあしかしそれ言ったら学校教育は完全にダメだね。 >>533
俺は変な感じがしない。なぜならJavaの頃からそのように使っているからだ。というかむしろそうでない方に違和感がある。 >>538
本人ではないが>>536はJavaに最初からnulll(=1000億円の間違い)がなかった世界線に行きたいらしい。 union って、C言語の union のこと? そういうのはないね。自分で無理矢理 Byte 配列に詰め込むのなら出来るが。 こういうやつでしょ
var a : (String | List<Int>) = "aaa"
a = listOf(10)
無いよ 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の足枷が重いから劇的に使いやすくなることはなさそう Union typeをサポートするとString?型もString | nullの略記でしかなくなるのだろうか Unitと同じくオブジェクト宣言にすれば型としても値としても使える
TypeScriptのようにリテラル型という方式もあるけど
function f(): string | null | 10 { return 10; } sealed classってinterfaceを持たないfinalなクラスをEither型には出来ないってことであってる? あけましておめでとうございます。
ことりんもよろしくおねがいします。 大学のC言語の授業で2分木の深さ優先探索と幅優先探索を再帰関数で書かされたなあ 言語の名前がかわいいというだけの理由でkotlinを勉強し始めました。
書きやすくていいですね! PCの気晴らし2Dゲームやスマホアプリやかんたんゲーム作ろうかなーと思ってKotlin始めたのだけど、
微妙絶妙にメインストリームから外れて手間が合わんのだな
Unity的なゲームじゃないスマホアプリはうまく合ってる気はするが C#相手だと言語的なアドバンテージはほとんど無いから勝ち目はないわな 要は「めっちゃ書きやすいJava」なので、Javaのときに特段盛り上がってなかった分野はKotlinでも特段盛り上がってはいない
Kotlinで利用者が流入爆増してKotlin独自のライブラリが各分野でじゃんじゃん作られるみたいな未来予想図もあったのだが、まあ、世の中なかなか冷静で頼もしい限りではある レベルS プラットフォームを問わずKotlinが広く利用される
レベルA Kotlinを使うためにJavaプラットフォームが採用される
レベルB KotlinによってJavaプラットフォームの採用障壁が下がる
レベルC Kotlinによって既存のJava開発者の満足度が改善する
今のところせいぜいCだな Javaやってたら取っつきやすいみたいな扱いされてるけどC#の方が覚えやすくね? kotlinってandroid専用言語という位置づけだと思っていいですか?
Webでも積極的に使われている言語ですか? 現状ではandroid専用。Java代替目指してる言語だからwebで使うポテンシャルはあるけど、その用途で流行ってるとは言い難い。 ま、しかし、みんながやってると自分もやるみたいなのはやはり日本人的な感じがするな。
保守的と言うか開拓精神がないというか。だから悪いということはないけどな。
自分が率先して使って自分を中心に世界中に広めるみたいなこともできるかも知れないのだが、そういう考えが最初から起こらないぐらい頭が固くなってガチガチに保守化していると。 「〇〇を作りたいのでKotlinを使う」の〇〇に入るのは非ゲームAndroidアプリ、ではある
現状これ以外で使うのは趣味とか修行とか苦行とかバカとかなんかそんな感じ
Kotlinは一応だいたいのものは作れるには作れるので、Kotlinで作ってみたいという情熱(または狭窄)で個人でいろんなもの作ること自体は別に止めない
手段が目的と化してるという点以外は問題はないからね
みんなあまりやらないことをやるという点では面白いはずだとは思うよ
どっすかRubyの二の舞 >>574
欧米の人って明確な目的があって、それに合う道具なら古いものも新しいものも使う印象
日本列島に生息するアーリーアダプタ猿はたいてい手段と目的が逆転していて、
新しいものを触っても「やってみた」で終わるからそれ以上の発展がない 有名人が使ってるから使おう・それが正しいみたいのがあるね >>577
その後誰も使わなくなるものに手を出して半年で天を仰ぐ事例は事欠かない
だったらちょっとか有名人にも頼りたくなるというものだ その、「失敗したらどうしよう・・失敗しないように安全パイを狙おう」ていう発想が日本人ていう話 まぁ結局はjavaなんだから、だったらjavaのままでいいじゃんで終わってそう。 webなんかどうでもいい
今やブラウザからよりもアプリからの方がインタネットアクセスしてる人多い
サーバー側処理もこれから firebase的なものが主流になって独自実装はなくなっていく
Android専用とは即ち最強ということ サーバーサイドがDB直結で済むようなアプリなんてミニゲームくらいだろ firestoreってrate limitやIP banみたいなこと課金なしにできないの?
セキュリティルールで、他人のデータおもらしや、入力データ検証はできるけど。個人で使うとrate limitみたいのないと課金攻撃食らうのが怖い小心者の俺。 貧乏人のくせにうるせえな
ガキはオフラインでlampでもやってろ まあ、金払って押しつけるのが正しくはある
自社メールサーバーを運営するのが今や愚かな行為であるのと同じ flutterきてるからもう色々諦めて、サーバーサイドkotlinに注力して欲しい。。 クロスプラットフォームは全部糞
そもそもDartが糞
ちょうど今日はてぶでflutterの記事を読んだがやっぱりDartが糞
ttps://hachibeechan.hateblo.jp/entry/flutter-is-great-good-but-dart-is-dirt
結局サンプルアプリみたいな見た目のしょぼいごみアプリしか作れないのがオチ Dartが糞なのはわかる。でもflutterがきてるのも事実。
もう「どこでもkotlin」とか言ってる場合じゃない。
このままだとandroid->fuchsia移行と共にkotlinは終わる。
なのでjava,goを押しのけて静的サーバーサイド言語の第一候補になるしか道はないと思う と思うけど、googleはなぜかKotlin版flutterのJetpack Composeを今年ベータリリース?に向けて作業中。
Jetpack Composeは最初はandroid向けかもしれんが、kotlinはnativeでクロスプラットホームになるし、Jetpack Composeも将来いつの間にかクロスプラットホームになったり? まぁ、composeはクロスプラットホームにならなくてもcomposeの存在はかなりflutterへの移行を押し留めることになりそう。
もちろんflutterはクロスプラットホームだけど。 K/JVMとK/Nチームがあまり仲良くない感じだったし
K/Nの設計上の戦略ミスもあって先は厳しい
企業リソースが潤沢でないことも大きいんだろうけど 相変わらず世間で流行るかどうかばかりを気にしている。世間に依存して頼りすぎている。その結果振り回され続けてしまう。 俺なんて世間の流行なんか無視して我が道をいってるから
メインはDelphiパスカルだぜ! 趣味なら何でもいいんだろうけど仕事なら需要を考慮しないと糞仕事で薄給とかやってられないでしょ 流行ってるやつの方が情報多くて学習し易いというのはあるな。
そういえば今はまだJavaが結構使われてるようだがCも増えたんだってな。組み込み関係が増えたせいらしい。 >>602
給料あげたかったら、プログラマーは卒業しないとね >>601
自分が楽しめるならレガシーシステムのお守役としてニッチ極めるのは全然ありだべ exposedのDAOとDSLってどっち使った方がいいんですか? 流行るか流行らないなんてどうでもいいんだよ
やりたいことをやれるかどうか
JavaScript界隈の気持ち悪いやつがflutterは流行らないといってるけど
流行ったらどういう態度にでるのか見てみたいものだ KotlinのコンパイラはKotlinで書かれてるの?それともJava? Javaに決まっているだろ
Kotlinで書かれてたらどうやってコンパイラをコンパイルするのだ
鶏は卵からしか生まれないのだ コンパイラがどの言語で書かれてるかを質問する人よくいるけど
知ったところで何か意味あるの? >>615
最初はJavaで次からはKotlinに変換して自分で自分を記述する状態にしてるかもよ。するとその後はずっとKotlinでKotlinを書く状態になる。
昔はPASCALをPASCALで書いてハンドコンパイルしてから自身をコンパイルさせるなんての本当にあったようだけどな。 >>616
コンパイラを作れる言語かどうかがわかる。
ということ以外の意味はないかな。 最初は別言語で書かれるが、その後自身の言語で書き直すことはよくある
セルフホスティングと言ってGo,Rustなども達成している
成果物の動作環境で自身も動作可能になるので
Kotlin/JSがセルフホスティングなら
babel/standaloneのようにブラウザ上でコンパイルが可能になったり
Kotlin/NativeのビルドにJVMが不要になったりする
実用上はJVM需要が主だしGradleが便利なので変えないだろうけど >>618
KotlinのコンパイラがJavaで作られたとしても
Kotlinがコンパイラを作れない言語ということにはならないと思うんだが 美人のまんこと豚のまんことどっちが良いかって豚の方が名器なら豚を選べば良い
気にすんな >>621が童貞だとしても、
>>621が性的不能ということにはならない
つまりこういうことだ kotlin1.4の展望を読んだんだけど、
「kotlin/nativeのコンパイル速度は、まだしばらく改善できません」
って言ってるのかな。。楽しみにしてたのに いままでバックエンドにIL採用してなかったのは不仲が原因・・・? 今日もnull安全だから…プロパティに代入して欲しいの 近所の本屋ではkotlinの棚にflutterが侵食してきている
kotlin本は必要だー!出せー! //
/ ./
/ ./ パカ
/ ∩彡⌒ ミ 髪のはなし終わった?
/ .|(´・ω・`)_
// | ヽ/
" ̄ ̄ ̄ ̄"∪ 通話中でもバックグランドで処理するアプリとか、スマートウォッチ向けアプリ作ってみたい >>639
どうぞ。遠慮なく。思う存分作ってよいぞ。どんどん作ってくれたまへ。 大丈夫。お前ならできる。俺は信じてるぞ。
とりあえずネットで検索しろ。 完成したらその事を本に書いて出せ。
Amazonの電子書籍なら簡単な審査だけで出せる。 スマートキャストで、これは問題なくできる。
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の中身まで推論してられっかボケってこと? Listに色々なクラスのインスタンス入れて返すメソッドを思い付いたのだがKotlinはスマートキャスト使えるから楽に書けるかなと思ったんだよね。
で、試してみてわかったんだけど、これだとJavaと大差ないね。 >>650
[0]は.get(0)のシンタックスシュガー
でgetが要素を変更しない保証がない covariantの問題だから、将来的にもそこは変わないと思う。 .get()がthisを変更しないことを
関数定義時に保証する文法を追加すれば解決可能では?
val y = x[i]で一旦受ければいいから
JBの言語改善にかける意欲の低さを考えれば超期待薄 > Listに色々なクラスのインスタンス入れて返すメソッド
これのメリットがよく分からんけど List<Any> に対して get(i) + cast する拡張関数作ればいいんじゃね リストにいろいろと聞くとつい、生Listを構造体代わりにする昔ながらのクソコードを思い出す
あのアンチパターンに名前はないのだろうか
静的ならDestructuring Declarationsを使い動的ならSequenceを返してitをスマートキャストすればいいのでは >>650 >>654
メソッドを2回呼んで同じ値を返す保証は結構難しい
言語レベルでのメモ化や参照透過性、所有権システムなどが必要になる
フロー解析で出来たところでコンパイル可否がlistOfの実装に依存して
柔軟性もコンパイル速度も悪化するから
Kotlinディスカッションに投げても多分改悪判定される
valやletで十分だと思うけどな >>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) }
} >>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"が実行されている可能性が微粒子レベルで存在するのかなと。 data classなんかの読み取り専用プロパティへの参照なら同じ書き方でスマートキャストできる
そのプロパティを参照するだけのメソッドやカスタムgetterを経由したら不可
コンパイラ設計上、メソッドの副作用がないことを無制限に推論することは時間的制約の面で不可能で、どこかで線引きするしかない
リフレクションで変数を書き換えてるかもしれない
その合理的な線引きの範囲がval値への参照なんだと思う >>659
あ、そーか。その可能性あるな。
Listの皮を被ったMutableListね。 kotlinはc++みたいな玄人向けのクソ言語になろうとしてるのか?複雑すぎやろ。コルーチンでどうやってエラー伝えればいいんだ
https://qrunch.net/@kyoutoday/entries/64IYC8Ye81WyzA5L >>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") }
} runBlockingって、名前の通りスレッドブロックするん?だったらさすがに実際そんな使わないだろ。launch,asyncなどのコルーチンビルダーで例外キャッチできないと >>665
基礎無しで応用を全部使おうとして混乱してるように見える
Kotlinに関しては道筋のドキュメント不足が原因かもしれない
> launch,asyncなどのコルーチンビルダーで例外キャッチできないと
C#のasyncやJavaScriptのPromiseでも変わらんよ
言語に限らず非同期処理の基礎知識として
コールバック、待機/通知、イベントループをまず学ぶべき エラー処理については
まず、正常値/エラー値/多値/例外 はどれも
結果(処理への入力に対する出力)の一形態に過ぎないというところからスタート >C#のasyncやJavaScriptのPromiseでも変わらんよ
他の言語とkotlinの違いはkotlinの場合は、suspend関数を呼ぶにはどっかにcoroutineが必要で、
coroutineの境界(lanuchなどで)例外は外側に伝わらないじゃん。
try {
GlobalScope.launch { 例外発生}
} catch (ex: Exception) { キャッチできない }
で、どうすりゃいいの?ってことで悩んでて、ググったら上記の記事が出てきて、kotlinは他の方法でやるの??
って思ったけど今回とあんま関係なかったのかも。
とりあえず、JobにinvokeOnCompletionで完了ハンドラ登録できるから、
coroutineの外側ではJobを受けわたせばいいのかな・・ 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?) { }
}
とまぁこんな感じになっちまうけどいいか・・
他の言語なら普通に例外を伝搬させられるが・・? と、coroutine境界の内外でどうエラーの例外を伝えればいいか悩んでた次第です・・ >>669
>>664をC#で書くとこうなる → https://ideone.com/QwtGY4
try{ GlobalScope.launch {例外発生} } ...
これはスレッドで言えば
try{ Thread {例外発生}.start() } ...
と同じこと
>>668で書いたように戻り値も例外も同じで
待機やコールバックにより「受け取る」ことが必要
Kotlinでは runBlocking{}
C#では .Resultまたは.Wait() (どちらもスレッドをブロックする)
JavaScript(Promise)ではonRejectedコールバック >>670
> 他の言語なら普通に例外を伝搬させられる
まずここに勘違いがある
Kotlinに限らず同期メソッドと非同期メソッド間で
待機やコールバック無しに伝搬することは無い
main自体を非同期メソッドにしているか
ブロックする呼び出しをしていることに気付いていないだけ >>673
うん。だから、他の言語でmainメソッドを非同期メソッドにして、普通にtry-catchで
例外捕まえれるけど、kotlinだと無理だから他の方法あるのかな??って
話をしてたんですけど・・・ >>674
mainを非同期メソッドにして普通にtry-catch出来るけど
suspend fun fun2() { throw Exception("hoge") }
suspend fun fun1() { fun2() }
suspend fun main() {
try { fun1() }
catch(e:Exception){ println("catch") }
} 躓きの原因になってそうな点を書いてみる
・Kotlinのsuspendメソッド間は暗黙で同期して明示で非同期するが
他言語のasyncメソッド間は暗黙で非同期して明示で同期する
・GlobalScope.launchには地雷がある(joinで例外が受け取れない)
※同スコープの launch は受け取れる
GlobalScope.async/await に置き換えるのが良いと思う
・同スコープで非同期起動(async{})した場合の連鎖キャンセルで混乱している
スコープがよく分からなければ GlobalScope.async を使っておけばいい
GlobalScope.launchの件は使わないから気付かなかった
基本的には GlobalScope.async/await, runBlocking を使えば良い 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 >>680
ビッグデータはJavaが強い分野で、オワScalaの代替としてKotlinを推すのはわりと自然な戦略
まあJupyterを全面に押し出すのはちょっと的外れだが >>682
バグかな。1.4リリースまでには抹殺されることを祈る。
valの値がミュータブルオブジェクトだったりするのはありえることだから、常に警戒はしている。 >>682
open valじゃん
それが変化しないと考える奴はただの初心者だろ・・・
Kotlinでは@JvmFieldを付けない限り
privateでないアクセサがメソッド(getter/setter)になるのは基礎の範疇
public class Read {
public String getValue(){return "hello";}
}
でgetValueがオーバーライドされて固定値じゃなくなることに騒いでるのと同じ kotlinのvalは「valで定義されたものに=を使われていたら、コンパイル時にエラー出して止める」というご利益しかないよ
動作的にイミュータブルにする機能はないよ valの前にわざわざopenを書いてる以上、こういう拡張への意図があったということだよ
慌てなくても怖いならopenをむやみに書かなければそれでいい
継承がカプセル化を破壊するというのは昔Effective Javaで習ったろ
これはその端的な例で、だからこそKotlinはopenを明示しないと継承できない道を選んでる interface の val も実装を var にできるしな 関数の引数をラムダ式にして、それをnullableにしたいんですがどう書いたらいいですか
fun fuck(abc: () -> Unit) {
}
みたいにして、呼び出す方は
fuck({
})
でも
fuck()
でも良いようにしたいんですが fun fuck((abc: () -> Unit)? = null) {
}
でできましたありがとうございました!
呼び出す方は
abc?.invoke()
としたら良いようですね それなら、nullable外してデフォルト値{}がよくない? 尼で検索したら Kotlin の新しい本が出てきた。
尼はURLがNGワードになってて書けないので以下にタイトルだけ並べておく。一番上の本だけが紙の本とKindle版両方ある。それ以外はKindle版のみ。
みんなのKotlin 現場で役立つ最新ノウハウ!
プログラマーにおくるKotlin流し読み入門: Androidアプリ開発の新言語をスピードマスター
解決!Androidアプリ開発のアレコレ >>691
去年に出たのを見ると、超初心者向けのが若干少ない気がするね Kotlin始めました。導入しましたって話聞く機会が減ってきた悲しい。 結局残るのは考えがしっかりした言語だ
小粋なのははやりすたりが激しい
MSはおかしい まあC#から拝借した機能の多さを考えるとMSが作ったと言えなくもない kotlinで関数型を受け付けるメソッドに、特定のクラスのメソッドを渡したいのですがどうすればいいでしょうか??
fun registerHandler(handler: (Int, Int) -> Unit)
にhanlderと同じシグニチャを持つメソッド(例えばhoge)を持つクラス(例えばFoo)を作って
val a = Foo()
registerHandler(a.hoge)
みたいなことをやりたいのですがどうすればいいでしょうか?
要するにコードを再利用したいのです Kotlin 1.3.70 Released
品質改善がメイン >>703
効いたと思うが、他スレッドから変更される可能性があるならダメなのでは? 普通に書いていれば別スレッドから書き換えられるvarにsmartcastはできない 変数にもローカル変数やらいろいろあるし
ローカルは効きそう、インスタンス変数は無理だろう IntellijでKotlinでJavaコード呼び出した時
どんなchecked Exception投げるか簡単に知る方法教えてください。 Kotlinって単純にJavaの上位互換と考えていいんですかね?
それとも特定の用途ならJavaの方が優れてることもある? >>712
・とにかく即動ける開発者を大人数集めないといけない場合
・約1MBのアプリサイズ増加が許容出来ない場合
ならJavaかな 特別な俺に酔いしれる、アートなプログラミングをするスレ民にふさわしいな 異端だな。
Androidアプリ作ってる場合はまあ普通だが。 アンドロイドアプリ作る案件でしか触ったことないけどアンドロイドアプリ以外でもこの言語使うことってどれくらいあるんだ?
フリーでいろんな会社のいろんな案件に携わってきたけどアンドロイドアプリ以外でこの言語選択してるシステムに出会ったことがない アプリ制作専用言語という認識で差し支えないってことね 2年前くらいの頃はサーバーサイドJavaも食いそうな勢いだったんだけど、見る影もないね
もうAndroidアプリ制作専用言語以上は何も期待できない 何度も言われてるがベターJavaで、近代Java案件の置き換えが可能なのだが、
新規Java案件が今はもうAndroid非ゲームアプリくらいしかないため、結局Android非ゲームアプリくらいしか用途がない
もちろんかつてのJavaのように何を作っても構わないしなんでもだいたい作れるが、そもそもわざわざJavaで作る理由がもうないので… javaの上位互換だからjava出来るならKotlinも直ぐ出来るって勘違いしてる人結構いるけど、
細かいところで書き方とか違うからそれなりに慣れるまで時間かかるよね Javaはお固い分野でも新規に使われてるのに
縁がない人は頓珍漢な分析するよね Java<kotlinだけどそもそも新規でのJava需要が下がってきてるから流行らないって事か? >>726
「新規に使われてる」の解釈が違う
文字通りの意味じゃない >>727
Java<Kotlinな業界ではサーバーサイドJVMは落ち目だね
世間一般には圧倒的にJava>Kotlin >>728
どういうこと?
否定をするなら解説込みで欲しい かつてJavaは凄く人気が有った言語だから、エコシステムが物凄く大きい。
一方、KotlinはAndroid開発で使う人は使うと言う位置づけなのでは。 エンタープライズでJavaを採用するような案件や環境は安定と安心が最優先すぎるのが逆風だと思う
Kotlinで生産性が上がると言われても移行の総コスト、安いコーダーが安定供給できるか
この先立ち消えたりJBがやらかしたりでKotlinコードが不良資産化しないかなど不安が大きい
おじさんを説得するには実績が欲しいがまだキャズムを越えない
越えて欲しいなあ エンタープライズではテストと比べればコーディングの手間は無視できるし、
一発作り切ったら運用に移管して手を切るのが基本だからコードが冗長で見通しが悪いとかはあまり問題にならない
どう考えてもマイナー言語ロックインのリスクをペイしないよ KotlinはJavaとは宣言の書き方が前後逆になっただけの様な言語のイメージ。
それ以外でも何かは良くなっているかもしれないが、何かは悪くなっているだろうと予想され、敢えてJavaの代わりに使おうとは思えない。
KotlinはAndroidでは使えても、デスクトップでは難しいだろうが、
Javaなら、Swingを使えば、Win/Mac/Linuxで共通アプリが作れる。
昔はさらにここにブラウザ内のアプレットも加わっていたが、今はそれが動かなくなった。
ところが、アプレットをWasmとして復活させる動きも出ているようだから、プラットフォームは広い。
恐らくそのうちSwingもAndroidやiOSで動くようになるのではないか。 >>733
短い簡単なプログラムなら、習いたての新しい言語でも作れるが、長くて複雑なプログラムには、十分に時間をかけて習熟した言語でないと作るのは難しい。
次々に生まれる新しい言語をニワカに学んでもいいプログラムを作るのは難しいのだ。
新しい言語では逆に間違ってしまったり、やりたいことを実現する方法が分からなくてそれを調べるために効率が下がることが多い。
Javaの言語仕様は、人気が有ったことからも分かるように昔から既に優れており、それはそれで一つの完成系をなしている。
根本的に新しい言語は一部だけは優れていても、どこかではむしろ劣っていることが多い。
一方でJavaはJavaで進化し続けている。 そういうことなんだろな。
JAVAだけやっとけば安心なんだ!って自分に言い聞かせてるようにしか見えん >>739
そういう観点でいえば、学ぶべきはKotlinじゃなくてGoやC#などの非JVM系言語だろう
Kotlinを選んでいる時点で、自分もまたコンフォートゾーンに留まろうとしている平凡な人間の一員であることを自覚したほうがいいぞ どんなに優秀な人でも、あらゆる言語やツールキットを学ぶほどの時間は無いから、学ぶべきものを取捨選択や優先順位付けが重要。
一つの言語だけを学んで、プログラムに必要ななんらかの(専門的な)知識を学ぶのも立派な選択だ。 令和のstaticおじさん(この方はJavaおじさん)かな ねぇねぇScalaって息してる?Kotlinとどっちがすごい? 息はしているがどっちが凄いかは知らん
ScalaのコードをJavaScriptのコードに変換する「Scala.js 1.0」リリース
https://thinkit.co.jp/news/bn/17374 >>743
何でも学べばよいと言うわけではない。
優先順位を付けられない人は非効率。 >>746
というか、新しい言語を学んで無い人を馬鹿にするのは良くない。
自然法則は昔からずっと変化しないから学んで損は無いが、言語は人工的なため、不変性も無く学ぶ価値の無いものも多数含まれる。
その取捨選択が重要。 少なくとも多言語のスレでJAVAだけでいいんだ!って力説されてもね Kotlinが蔓延することで困る人もいるんだから。 >>748
ネットではKotlinそのものに価値があるようなことを言う人を良く見かけるが、実際はGoogleがOracleとの訴訟に負けて、Javaを使っていることを注意されて、それで使われるようになっただけの言語、と捉えるのが標準見解だ。 >>734
> Javaなら、Swingを使えば、Win/Mac/Linuxで共通アプリが作れる。
Javaのライブラリ使うならKotlinでもできることになるが? >>736
わかった。それじゃあかれこれ30年ぐらい使い続けているPerlと35年ぐらい使い続けているC言語を使うことにするよ。Javaのような新言語に手を出すのは止めておこう。 >>754
別にそれでいいんじゃない。
俺はJavaの回し者でもなんでもないからな。 >>736
そういう観点なら、better javaのkotlinを学習する費用対効果は大きい。
実際、自分でクラスを設計するのならnull freeにできるkotlinの価値は高い。
……というより、型無しのnullを排除できないjavaの型システムが破綻しているだけだけどな。いいかげん、nullを受け付けないクラス/変数に対応してほしいぜ。 >>756
むしろ、null を使うことは美しいと思っている。
引数にnullを渡すかどうかで動作を変えられることは、プログラミングの中でも最もスマートな方法。 でも、いざnull safetyの言語使ってみると!!演算子使う自分のコードが気になって負けた気になる !!は便利だけど後で見返すと消したくなるわ
見てて綺麗じゃない >>756
JDK25ぐらいでなんとかならんのかな Javaできるならサンプル見ただけでなんとなく使える
本読まなきゃいけないような奴が手を出す言語ではない 当然、Kotlin の会長である太郎本!
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016 >>763
本読まなきゃいけない奴が手を出す言語ではない(ドヤァ)
キモすぎアホすぎて草
んなこと誰も聞いてねえってのw
質問に答えてやれよカス
そもそも仕事だったら新規言語に手を出す出さないは個人の判断関係なく強いられることもあるだろうw
それともニートか?お前w
>>762
完全初心者なら>>273-275あたりで出てる本がいいんじゃないかな >>763
サンプルコピペして使えた気になってるコピペプログラマーの典型みたいなこと言っててワロタ 有名な雑食系エンジニア・KENTA も、YouTube で言ってたけど、
Scala が廃れた理由は、初心者にマウント取って、悦に入る人が多いからw
JVM 系は土方だから、土木業と同じ産業構造、多重請負・奴隷構造を持つから、
奴隷は初心者に対して、マウントを取らざるを得ないw
Ruby が、なぜナイスなのか、Cookpad などの自社サービス系だから。
多重請負・奴隷構造じゃないから
JVM 系は高学歴総合職・ノンプログラマーが、
低学歴奴隷・IT 土方を使って、もうける商売だから
だから、勧める人が少ない >>767
言語外の仕様か。いくらか眉唾だが興味深い。 動画で食ってる奴がエンジニアを名乗る不思議な世の中 >>767-769
なるほど
KENTAはクソだけど内容は腑に落ちる部分があるな >>757
Kotlinでそのようにしたければそのように書けば良い。できないわけではない。使い分けできて尚且つコンパイル時のチェックが厳しいだけ。 ここの人はjavaを触る前にkotlin触った人いる? 要するに、複雑なものは習得コストが高いから、暇人しか集まらないようになる。
暇人は、初心者に参入されると食えなくなるから、マウント取って邪魔してくる
防衛省・原発みたいなものと同じ。
誰にも分からないから、チェック体制も構築できなくなる
誰にも何をやっているのか、さっぱり分からないけど、
上層部は高い給料をもらえる体制。
その体制を維持していくことが目的になっている
複雑なものには、真実ではないダマシが入ってくる。
人々を煙に巻く。それがガン
逆に、簡単なRuby には、嘘が付け入る隙がないから、誰もだませない。
これが本当のオープン。
ブロックチェーンみたいなもの。支配者が国民をだませない >>776
長くなったのに>>767の最初の2行しか説明できてない。残念。
KENTAがRuby推しということはわかった。 >>757
型自体の操作(メタプログラミングとか)ならともかく、まずはクラスの中での操作を考えるべき。多態とかnull objectとか。
javaで一番多いトラブルはヌルポだろ。本来なら真っ先に対策すべきだと思うがね。 >>779
C++ で言えばたったこんな程度のこと。
NULLの処理なんて難しくもなんとも無い。
CWnd *MyCreateWindow(const char *pszTitle); //プロトタイプ宣言
// 使い方の例:
MyCreateWindow(NULL); // タイトル無しでWindow作成
MyCreateWindow("タイトル文字列"); // タイトル有りでWindow作成
// 関数定義:
CWnd *MyCreateWindow(const char *pszTitle)
{
if ( pszTitle == NULL ) {
(タイトルが無いとして処理);
}
else {
(タイトルが有るとして処理);
}
} なんで頓珍漢な流れになってるんだ
nullを安全に扱える言語なのにKotlin未経験者多すぎだろこのスレ ネットでドヤ顔したりマウント取ったりするには有用な知識 >>785
特殊な場合があるときにそれを-1とかで表すよりも100億倍まし
特殊な場合がないのにnullableにするのは論外
何も考えず!!演算子を使うのも論外
NullObjectを作るかどうかはメリットデメリットあるのでケースバイケース
脳死で作るのはJavaでenumを使わずにTypesafe enumパターンを手書きするような冗長さになることもあるし
下手に使うと-1と同じ弱点を埋め込む場合もある
nullに忌避感がある人はこのスレをnullで検索すると議論が参考になるかもしれない >>757 はKotlinを否定してJavaでnullを扱いたいのか、KotlinのT?型と?.演算子や?:演算子を奨励したいのか
読んでいてよく分からなくなってきた。 >>790
少なくとも>>781の内容はnullでやる必要ないよね?って話なんだけど?
あれは特殊な場合なの? >>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を新規作成);
}
} >>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を新規作成);
}
} >>794
メソッドを引数なしと親ウィンドウ指定ありの2種類にオーバーロードすればいいね
オーバーロードできない言語でも名前を分かりやすいように分ければいい
この場合はnullは使わない方がベター >>794
現実には、「ダミーのWindow(のアドレス)」なんてものは作りえないかもしれない。
だとすれば、NULLを使わずにこれらの事を行いたいなら次のように、関数を2つに分けるしかなくなってしまうかもしれない。
しかしそれは間違いが入り込みやすい良く無いプログラムである:
CWnd *MyCreateTopWindow(); //親の無いWindowを作成する関数。
CWnd *MyCreateChildindow(CWnd *pParent); //pParentの子Windowを作成する関数。
// 使い方の例:
MyCreateTopWindow(); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateChildWindow(親Window); // 指定したWindowの子WindowとしてWindowを作成 >>795
似たような処理を行う関数は、完全に2つに分けてしまうとバグの原因になる。
理由は、内部で似た処理を行っている箇所を両方とも修正する必要が出て来やすくなり、一方だけ修正して他方は修正し忘れたりすることが多くなるから。
こまごまとした違いが有って、一致している部分もあったりするので、単純な機械比較は出来ないので同一性チェックを人間の目で行わなければならなくなる。
だから、>>793のように書いたほうがずっと安全になる。 >>797
「親が有るかどうか」
という一つのパラメータだけなら、まだ良いが、
「メニューオブジェクトを渡すか渡さないかでメニューが付くかどうか分ける」
なども付いたりすれば、組み合わせ爆発が起きるため、関数を完全に分けてしまうのは非常に非効率で危険なプログラミングとなる。 共通化が必要ならNullObjectの多態でも関数型でも使えばいいよ
C言語時代からアップデートされてない知識でモダン言語でのプラクティスを説こうとしているのが謎だよ
タイムスリップしたお侍が自衛隊に兵法を指南するような冗談だよ 組み合わせ爆発についてはデフォルト引数使えばよろし >>800
そのデフォルト引数には、NULLかNullObjectを指定するしかないはず。
なんで、NULLで済むのにNullObjectを使うの。
それで安全になるのか? >>799
では、>>793の例を NullObjectや多態を使って分かり易くて安全に書き直してみてください。 >>796
すべてのウインドウはRootWindow配下とするみたいなルールを設定して、親のないウインドウは禁止するればいい。
linuxのプロセスが必ずinit配下になるのと同じ感じ。 >>803
それは可能だけど、グラフィックのFrameBufferの容量が大きいので、
デスクトップに浮いているWindowの場合にChildWindowと同じ処理をしたのでは
メモリーの無駄使いになることがあったり、
デスクトップに浮いているWindowとChildWindowとでは動作がかなり違っていたり
することが多いので初期化段階から if 文で場合分けしないと無理が有る事が多い。
だから、そのような「統一した考え」では結局は、効率が下がるために
実際には駄目プログラムとなる。 >>804
さらに付け加えるなら、RootWindow のオブジェクトの名前を「覚えるのが面倒」
だったり、打ち込むのが長くなって大変と言う事情もある。
例えば、Windowの場合には、「DesktopWindow」という名前で、
Menuオブジェクトが無い場合には、「MenuNull」みたいな名前となる。
しかし実際にはこんな簡単な名前で無い事が多いので、マニュアルをいちいち調べ
直す手間がいる。
一方、NULLだといろんな場面全てNULLなので、覚えることが少なくて済むし、
打ち込むにも4文字で済むので楽。
関数を呼び出す際も短いので一行で書ける場合が多くなり、見易い。 >>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 言語やベンチマークの議論一般にいえることだけど、自分の有利な土俵に引っ張りこめば何とでも主張できる。
Kotlinは>>805向けには作られていない。というだけのこと。 >>804
そこはクラス分けてポリモーフィズムで上手くやろうよ
先のウインドウタイトルといい、例が良くないんでは? >>801
書かれてたサンプルコードでは真っ先に分岐が入ってたから「この場合は」オーバーロードかメソッド分割がベターと回答した
後付けされた条件を加味するなら>>806のnullable型がいい
privateな処理内で局所的にnullabeを使うことに異論はない
Kotlinならヌルポが出ないから安全
覚えるのが面倒ということまで気にする公開APIなら親にnullを指定すると親無しになるというルールを覚えさせるよりも
親の引数を省略可能にするかメソッド名を用途別に分けてクラス内で処理を共通化した方が使いやすい
nullは単一なので楽という話は、nullは単一なのでいろんな意味がまぜこぜに使われ区別できないという裏返しでもある
variantは型がないので楽、グローバル変数は楽、staticは楽というのに通じる メソッド引数にnullを与えたときヌルポが出るのかトップレベルウィンドウになるのかドキュメントを読まないと判別できない公開APIは残念
省略時デフォルトとして内部的に使うのとはまた違う Kotlin では、プログラマーが自分で、null を判断したら、ダメ!
null チェックを書かない人がいるから、バグが残る
C++ で言えば、スマートポインターみたいなものを使って、
自動的に判断するのが正しい
どこかで、nullチェックをして、nullじゃなければ、
null許容型を使わないように書く >>811
だったらそもそも静的な型がない上に基本的にプログラマが明示的な型チェックもしないことが普通なRubyは、
Kotlinで常にnull許容でチェックも一切しない以上に遥かにバグが残るってことになる(実際そう)なのだが、
自分で意味分かって言ってんのかなこいつ 「真っ先に条件分岐が入ってたから」
はどこいったんだろう
適当やな.. それにそもそもオーバーロードかメソッド分割がベターとかいってるが、設定するメソッドじゃなくて現在設定されてる値を取得するメソッドまたはプロパティを追加するときはいったいどんな値返すんだ??
普通に元からnullでいいだろ >>814
nullable使わないなら異なる型を返すんだよ。nullable含め場合分けを型で強制することで不必要なバグが入り込む余地を無くすのがnull safetyな言語の流儀 そういう他人をわざと変な方向に導こうとしてもひっかからんしつまらんから.. >>808
>そこはクラス分けてポリモーフィズムで上手くやろうよ
具体的にポリモーフィオズムでどうやれば分かり易く書き直せるか教えてください。 >>813
どこ行ったの意味がわからない
どこに矛盾を感じたの?
>>814
俺はメリットデメリット考慮してnullableも含めて最適なものを選ぶのがいいと言ってるんだよ
前提が変わればnullableが簡潔で具合いいところもあるだろ
>>794のサンプルでnullabeを選ぶ理由ある? >>818
訂正
デフォルト引数の初期値をnullとして使うケースは良かった
理由は上で書いた通り そもそも null はそんなに危険ではない。
そのまま使おうとすれば、Windowsの場合だと、Release版ですらほぼ100%一般保護例外が生じるからどこで問題がおきているかも分かるし。 nullが危険といっている人は、MMUを使ってない化石の様なOSでの経験に基づくものなのかな。 if で場合分けせずに、オブジェクトのclassの仮想関数で場合分けさせると言う考え方
は時々聞くが、それはすべてをオブジェクト指向に置き換えれば上手く行くと言う根拠
のない浅はかな考え方だ。
経験を積むとその思想は間違いであることが分かってくる。 ページ違反が起きて特定に悩まされたのが昭和
一般保護例外なりヌルポなりの発生元ステップをテストで洗い出すのが平成
モダン言語ではコンパイル時に検出するので品質もコストも優位
老人は自らの成功体験に頼るので新しく良いものが現れても知識体系に取り入れることが難しく適材適所の選択ができない >>823
むしろ、OOPでやればなんでも上手く行くと思い込んでいる頭の固い馬鹿にしか思えんが。 Javaカスイライラで草
プログラマのくせに新しいもの嫌いとか致命的にセンスないだろw
さっさとやめろよこの業界w 新しくても駄目なものは駄目。
新しければいいと思うな。
若ければ年上に勝てると思うな。 >>828
今時厳密にコーダープログラマーをわけてる現場なんかないだろwクソ老害か?w >>829
老害イライラで草
顔真っ赤にしてる暇あったらkotlinの勉強しようなwww >>833
Javaはブームとなるほど、当時としてはちょっと革新的な言語だった。
Kotlinは全然違う。 >>832
君が派遣されてるドカタ現場ではそうなんだね nullセーフもoopも嫌いならgoがオススメですよ >>835
君が派遣されてるクソ現場は下流しかやってないから律儀にフロントとバックでコーダープログラマー分けてるんだねw
普通上流の仕事してたらそんな底辺下流の扱いなんか厳密に分けてないよwwwww
勉強になったねえ w >>829
年寄りだったのか。
若い頃に苦労して身につけたテクニックが、言語仕様でカバーされて誰でも実践できるようになって、
脅かされている自分のアイデンティティを守るために必死になっている、ってところかな。 >>839
この板に居るようなパンチカード(?)を語るようなほどの年寄りではない。
NullObjectでNULLを代用することが、
「言語仕様で誰でも実践できるようになって、自分のアイデンティティーが脅かされる」
に該当するとはとても思えない。 >>840
> この板に居るようなパンチカード(?)を語るようなほどの年寄りではない。
この板にパンチカードなんて単語一度も出てきてないけど誰のこと?
パンチカード世代ではないにしても、NULLを駆使するのが美しいテクニックだった時代の年寄りなんでしょ?
相手の主張を反論しやすいように歪曲するのはやめた方がいいですよ。
>NullObjectでNULLを代用することが、
「NullObjectでNULLを代用すること」はKotlinの言語仕様でないから、
そのように受け取ったのなら、Kotlinのコンセプトを理解していないか、
相手の主張を反論しやすいように歪曲する癖があるかのどちらか。
>>840が対話の成立しない相手であることが証明されたので
>>840の回答には大変満足しております。ありがとうございました。 なんだ、親無しWindow を、null にしただけか。
確かに、そういうAPI があるけど、マネしない方がよい
それって、0 でも空文字列でも、何でもよいわけでしょ。
そうい所に、nullを使うのはおかしい
nullは、ヌルポだけに限定すべき!
異なる意味で使ってはならない!
使い方を文章に書いた時にも、
引数がnullなら、親無しWindowになりますというのも、ちょっとおかしい
そういう用途には、デフォルト引数! >>820
それどっちかというと Windows 独自の文化だと思う
たまに Windows 系の助っ人に行ってコンソールに例外出まくりなのみてビビるよ >>843
nullは存在しないことを意味すると考えれば、あながち間違いでもないと思うし、
デフォルト引数を使うにしてもデフォルト値はNullObjectになるだろうし。
というのは置くとして>>842で述べたように>>840にこれ以上構わないほうがいいと思うんだが。 俺が老人という言葉を使ったのは実年齢のことではなく振る舞いだよ
Kotlinのコンセプトを理解してないどころか学ぶ気すらない
C++でサンプルを提示する辺りJavaを知っているかすら怪しい
自分のアイデンティティーを脅かされるという自覚はなく、わざわざ下らないものの詳細を学ばなくても俺には経験上わかるんだという老人特有の驕りが見える
全貌が見えてないから議論が噛み合わない
このスレにはnullは一切使わずにNullObjectを使うべきと主張する層とnullableは安全とする層と適材適所で使うという層がいて、この老人にとっては全員敵であり区別できないのだろう
NullObjectはJavaでは効果的なプラクティスだったけどKotlinではStateパターンのような役割でないとさほど輝かないと俺は思う
KotlinでNullObjectが常にnull(able)の良き代替になるなんて誰も提示できないはず
この老人がその一点に拘り他を無視する限りやっぱり俺は正しいんだと信じ続けるだろうな >>845
あながち間違いでないことと良いAPIであることには隔たりがあると思うよ
参考としてはJavaが提供しているライブラリにおいてnullを指定してくださいというメソッドよりもオーバーロードを提供しているメソッドの方が多い
ウィンドウの例だけでなく一般化して考えると、引数のデフォルト値として空の関数を与えて綺麗に書けるケースも多い
メソッドごとにnullを渡すべきなのか空の関数を渡すべきなのかNullObjectがあるのかを考えず、引数を省略するというシグネチャーで判別可能な一貫した利用ができるのは優れたメソッド設計だと思う 爺さんが引数に null 渡す例出したのに釣られちゃってるけど
Javaでも戻り値に null かオブジェクト返す API は普通にあるからね
これは NullObject か nullable に修正したい プログラマーの気持ち悪い部分をいい感じに体現してくれてる
ここであれこれ書いてもぬかに釘
noteかブログにでも書いておけ なんでも古い古いと言っていれば、どんなに駄目でも新しい言語や若い人が有利になってしまう法則。 引数の個数や型だけが異なる「関数の多態性」を行うと、プログラムが間違い易くなる。
なぜなら型や引数の個数の書き間違いをコンパイラが報告してくれなくなることがあるから。
C/C++で型が導入されたのもそういう間違いをコンパイラに発見してもらうためも有ったが、それが働きにくくなってしまう。 >>852
一つの関数名に引数の型や個数が異なる関数が10種類くらい多重定義されていたとする。
これを使ったプログラムする際には、マニュアルを見、関数名だけでなく引数も非常に正確に書かなくてはならなくなる。
型や引数の順序や個数などが僅かでも間違っていると、自分が思っていたのとは違う定義のものが呼び出されてしまうことになるが、それでも「合法」になってしまうのでコンパイラがエラーを出してくれない。
また、後から動作を調べようと思ってマニュアルを見たときにも、見間違いで間違った定義の部分の説明を読んでしまう現象が生じ易くなる。 >>853
func(1,2);
と書いたつもりで、タイプミスなどで
func(1,2,0);
と書いたとしよう。
func()が多重定義されていない場合なら、コンパイラがエラーを出してくれる。
ところが、func()が多重定義されてしまっている場合、たまたま、3つの整数引数の定義があった場合、自分の思ったのとはかなり違う動作の関数なのに、コンパイラが何もエラーを出してくれなくなってしまうことが有り得る。
それから、知らず知らずに「引数の自動型変換」機能が働いてしまうことが有り得る。
それと関数の多重定義の両方が組み合わされると、自分が思っていたのとはかなり
違う動作の関数が間違って呼び出されることになっていても、気づくことができない。
本当はどの関数が呼び出されているのかが分からず、どんなにチェックしても原因が分からない難しいバグが入ってしまうことになるかもしれない。 技術的な話でスレが進むのは、過疎ってるよりは良いことだよ
ほぼ読んでないから内容は知らんけど >>854
その話は、引数爆発は嫌だ、じゃあデフォルト引数使え、で解決してるだろ
さらに付け加えるなら名前付き引数も使え
そのあたりのCやJava時代の弱点をKotlinやC#は克服済みだ
あと多重定義は多態とは呼ばない >>854
たまたま同じ型ばかりを引数にとる関数で順番を間違えるヒューマンエラーには配慮できるのに、nullを多用したときに誰かがミスして実行時エラーが多発するリスクに目を向けないのは何故? >>857
>あと多重定義は多態とは呼ばない
異なる型に対する多重定義は多態の一種だよ >>853
ほんそれ
同じように思ってた人が居て良かった >>853
混同するのが危険なほど挙動が違うのなら、そもそも同じ関数名を使うべきじゃない。
関数・クラス設計における命名規則の問題だろ。言語設計(javaのヌルポ)の問題と関係ない。
この主張が、なんで型なしnullのマジックナンバー利用の肯定に繋がると考えているの? >>857
「ポリモーフィズムは次のようないくつかの種類に分けられる:
・アドホック多相(Ad hoc polymorphism):ある関数が、異なる型の引数に対してそれぞれ異なる実装を持つ場合。多くのプログラミング言語で関数の多重定義としてサポートされる。
・XXXX
・XXXX
・・・
」 >>858
親Windowのポインタを受け取る引数にNULLとした場合、意味は分かり易い。
「親がない」こと以外に意味を取りようがないから。
同様に、メニューオブジェクトへのポインタをNULLとした場合も、
「メニューがない」こと以外に意味を取りようがないので分かり易い。
それに比べて、関数を多重定義した場合には、ミスによってとんでもない動作をしてしまうことが有り得る。 >>864
結局、関数の実装者がミスってnull参照エラーを起こすリスクは見えてないのか >>865
この例の場合、NULLにすると、それぞれ親Windowがない場合、Menuがない場合で、どちらも重要なので、さすがにテストしてあるはずなのだ。
この例に限らず、引数にNULLを指定する場合は、そのような「重要な変化」をもたらす事が多いので、必ずテスト済みの場合が多い故に安全なことが圧倒的多い。 >>864
何を言いたいのか全然わからん。
NULLの利点は親Windowの指定方法だと言っているのに、
>>854だと全く関係のない関数funcでoverloadに問題があると言っている。
自分の主張に沿うようにいいとこ取りしすぎ。
同じケースでNULL利用の利点とoverloadの欠点を比較しろよ。
>親Windowのポインタを受け取る引数にNULLとした場合、意味は分かり易い。
nullよりも"NoWindow"というNullObjectを定義して使ったほうが意味はわかりやすい。
なんでnullを使わなきゃいけないのかね? >>867
後半、NULLで十分なのに敢えて、NoWindow なんてオブジェクトを定義する必要
を感じない。それでバグが減るわけでもないし。 >>866
それは言い換えると、nullを安全に使えるのはテストのパターン漏れがあり得ないような重要な変化があるところに限られ、それ以外で使うと安全とは言えないってことだよな
「安全なことが多い」ってのは危険は残っていると認めてるね
「さすがに〜はず」ってのは希望的観測だし、最後の文だけ「圧倒的」を付け足したのも論拠不足だよな
人は多重定義で引数順を間違えるような凡ミスをすると理解できているんだ
では人が重要ではない甘いところでnullを不用意に使ってしまうミスは当然あるよな >>868
前半の準備できてから議論続けてね。
>「必要を感じない。」
それは個人の感想なので、主張としては弱くて役に立たないですね。
・メソッドを使う時に「NoWindow」であることをより明確化できる。
・間違えて「NoWindow」を指定してもnullより目立つので間違いに気づきやすい。
・名称がより明確なので、第三者がソースコードを読む時に読みやすい。
・それ専用に定義された変数に入っているので、IDEの支援を受けやすい。
・このケースだと必要性は薄いが、nullの意味が複数あるような場合でも(null,undefineなど)別々に定義できる。
くらいの利点はあるけど? NullObjectパターン使ったライブラリーとかほとんどみかけないから...
もうここまで言えば後はワカルナ? GetParentやGetMenuでnullチェックを忘れたらヌルポ
それを万が一忘れてもコンパイルエラーにしてくれるのがNullable >>871
c言語の悪癖に冒されているだけだろ。
「マジックナンバーは悪」というのは常識だろうにマジックナンバー的にnullを使う設計者の気が知れんわ。 Springもいるんじゃない?
小規模だけど去年bootで案件やったよ >>873
Keep It Simple.
NULLで現実に全く問題ないのに、NullObjectを導入することで新たな問題をむしろ入り込む余地が生まれる。
Polymorphism というが、「親Windowが無い」「Menuが無い」のような劇的な変化
は、Polymorphismでやるより、その場で if 文で場合分けするほうがプログラミングし易い。
例えば、Polymorphismに向いているのは、動物の種類を分けるようなときで、
「動物そのものが存在しない」時には向いていない。
後者は、if文無しで対処するより、本文の方でif文をちゃんと書いて場合分けした方が間違いが
生じにくくなるし、コード量も少なくなる。
だからNullObjectを使って、NullObject自身に処理を行わせて本文にはif分を使わないより、
ちゃんと本文にif文を書く方が適切なのだ。
仮にNullObjectを使っても結局、本文に if ( pMenu == &NullObject ) などという if 文を
書いてしまっては、Polymorphismにはならないし。 KotlinはNullObjectよりnull推奨で
そのための前提として構文レベルで区別するための仕組みがある
x,yなのかrow,colなのか順番分からんから名前付き引数使うとか
どのオーバーロードが呼ばれるかとか
そういうのも区別出来るかどうかという似たような話になる >>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にはない。 Kotlinってnullableを使っても安全だし
NullObjectも書きやすいんだよなあ
sealed classならNullObjectがこの上なく簡単に定義できて
whenで受けたときプログラマーが分岐を漏らさないようにコンパイラが教えてくれる
スマートキャストも安全で便利だ 古いものが大好きなnull爺にこの話を教えてやろう
Kotlin公式ドキュメントからリンクされてる学習者には有名なエピソードだ
nullポインタを発明したのは、クイックソート等の数々のアルゴリズムを発明し、C言語の源流にもなったALGOLを実装した天才トニー・ホーア氏
彼は近年こう回顧し謝罪している
>それは10億ドルにも相当する私の誤りだ。null参照を発明したのは1965年のことだった。
(中略)
>私は単にそれが容易だというだけで、無効な参照を含める誘惑に抵抗できなかった。これは、後に数え切れない過ち、脆弱性、システムクラッシュを引き起こし、過去40年間で10億ドル相当の苦痛と損害を引き起こしたとみられる。 >>880
偉いとされる人が言った、または、有名な団体が作ったようなものを無条件で信じるあなたのような権威主義者が多いだけ。
有名な所が出してきたものは初期の衣の凄くもてはやされる。
使ったこともちゃんと学んだことも無いのに多くの人が褒めちぎる。
それはなぜかというと、そうすることで自分が新しいものに追いついていると
人に錯覚させることが出来ると思い込んでいるからだ。
実際には何も知らないくせに適当に新しいものを褒めているだけ。 null自体が問題なんじゃなくて、既存の言語の型システムでnon nullableな参照型がないのが問題なだけ。ごっちゃにしすぎ。 だから、null自体はあった方が便利、ただ、型システムの方で値型だろうが参照型だろうがnullable、non-nullableの両方定義できるようにしとけってだけ >>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>() >>876
自分勝手な論理展開が多くて議論にならんね。
ここはkotlinスレだし、「javaではヌルポのトラブルが多い」という事実を無視した主張はクソの役にも立たない。
「ヌルポのトラブルを避けるためにはどうしたらいいか」くらい考えたら?じゃなきゃスレ違いだからNGにするわ。
そういや、>>870にヌルポの観点が抜けてるな。追加すると、
・変数の初期化ミスで変数にデフォルト値(null)が入っていても、意図しない(親無しウインドウでの)呼び出しにならない。 初めてAndroidアプリ作成の案件に携わってるけどクソOSクソ端末に対応するコスト無駄すぎるな
イライラするわ >>895
それを判断するのは社長
現場のお前じゃない まぁあれな感じのあれだけど、変に煽るのやめろ、誰も得しない サーバーサイドkotlinを導入したいんだが、なんて言って上司を説得するのがいいと思う?
上司は昔java1.6やってたくらい。 言語云々を論点にしてはいけない
「技術選定も含めて俺に任せてくれ」だ
お前の全責任においてお前が成果を出せば誰も文句は言わない
それができないんなら黙って前例踏襲してなさい すまん。ちょっと聞き方悪かったわ。
単純にメリデメ教えてくれって言われたらなんて答える? ライブラリが同じなのでフツーのJava経験者なら3日もあれば習得できます
開発環境にJavaのソースをコピペすると自動変換もできます
null参照はコンパイラーが検出してくれる言語仕様なのでnullに関するバグを排除できます
ちなみにA案件でのnull参照バグは全体のxx%でした
Java14で計画されている言語仕様の改善も全て先取りしているので開発効率が上がります
中でもrecord型の先取りにより開発規模がA案件試算でxx%削減できます
ほかに口説き文句あれば俺も知りたい >>907
クッソ頭悪いだろお前
説得する材料くれって言う要件に対してその回答はあまりにも的外れだわ Kotlin採用していただけないのなら辞めますといえば一発や。 自分にとってどういうメリットがあるのかと
そのメリットが既存のものを捨てて乗り換えるコストを上回りそうかどうかという
2点をクリアしないと普通の人は新しいものを導入しようって気持ちにはならない
2つとも個々の状況によるものだから
現状の問題点や比較対象無しに聞いてもフワッとしたものしか返ってこないと思う javaの仕様に追従してる層にならメリットは説明できるけど、そうじゃない層に説明するのは難しい。。
実際、アドバイスくれてる人の説明もjavaの辛みが分かってこその主張だと思う
なんかjava1.6で止まってる人にも分かりやすいメリットないかな。。
ちなみに上司は、人の集めづらさを懸念をしてるだけで、本格的に反対してる訳では無い。純粋にメリット何?って感じ >>906
ここは一つネガキャンで。「KotlinがあるのにJavaをやるのは、JavaがあるのにCをやるようなもの。」
ただ、上司がJava至上主義者なら、「Cなんかと一緒にするな!!」と激怒するおそれあり。 そろそろ転職しようと思ってたんだがコロナの影響でエンジニアの求人は減ってるの?まだ待った方が良い? プログラマとエンジニアは別物なので、まずその辺の違いをハッキリさせたほうがいい でも、もしJavaならバージョンいくつ使うつもり?
そこどこ新しめJavaならそこまで苦痛にならんぞ
1.6ぐらいと比較して俺のペインポイントだったローカル変数の型推論もあるし、ラムダもあるし、コレクションのストリーム操作もあるし。
大きめの機能でasync/awaitないけど Kotlinのdata classがJava14でrecordとして採用されると聞いて感動したのも束の間、まだPreviewなので正式採用はJava16辺りと知り気が遠くなった
誰もが普通に使えるようになるのは2026年頃じゃろか 誰もが普通にと書いたのはJava11の延長サポートが2026までだから遅い現場だとそこまで待つかなと
でもそれを言うなら8は2030まで延長できるんだった >>919
ラムダ式とOptionalで行けるのではと思っていた時代が、私にもありました。
ただ参照透過なプログラミングをしようとした途端、Listと配列がMutableなことが越えられない壁になる。
Java9から不変リストを作るList.of()があるけど、必要なのは実行時エラーでなくコンパイルエラーで教えてくれる不変リスト。 それを言ったらKotlinのListも不変リストではなく読み取り専用のビューなので同じなのでは いや追加や更新機能のないリストインターフェースが欲しいということか Windows 10 で IntelliJ IDEA を 2020.1 にアップデートしたら起動後にちゃんと動かなかった。
ウインドウは出るがその中が灰色のまま。右下に赤いやつが点滅していてマウスカーソルを
持って行ってクリックすると IDE Internal Error Occurred See Details and Submit Report と
出てくるが、Detail も何も出てこない。ウィンドウの右上の×を押しても終わらず、しょうがない
のでタスクマネージャで終了させた。
Community edition だが、試しに Ultimate の同バージョン方をインストールしたら動いた。
ま、しかし、ライセンスあるわけではないのでとりあえず Community edition の 2019.3.4 に
しておいた。これはちゃんと動く。 javaすらやったことない人におすすめのKotlinの参考書ありますでしょうか? Kotlinは腐りきったJavaをなんとか少しでも便利に使うための車椅子のようなもの
古いのを勉強したくないならKotlin含めJava系の世界に飛び込むこと自体を考え直してもいいんじゃないかな 当然、日本ユーザー会会長の太郎本!
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
スッキリわかる Java入門 第2版、2014
超有名なスッキリを読んでないと、オブジェクト指向が分からないのでは?
Ruby をやってれば、オブジェクト指向・メソッドチェーンによる関数型と、両方とも理解できるけど >>930
C++, C#, Java, Swift, Rubyみたいなモダン言語の経験が無いと、Kotlinは難しいかも。
1. Clousure
2. Generics
3. Type Annotation Estimation
4. Collection
5. protocol
こう言うのが意味不明となる。
OOP自身は難しく無い。 全然関係ないんだけどさ
前々から思ってたんだが
「モダン」って言い方になんか古臭さを感じるんだよな
大正時代的な
他に良い呼び方ってないもんだろうか >>939
>3. Type Annotation Estimation
なんのこっちゃ? >>940
最新新言語、State of Arts computer language、Advanced Language、Recent Language、Up-to-date Language
御好きにすれば! >>946
such like Interface in Java or Abstruct Class in C++ >>948
機能的に違いないのに、名前だけ別のものつけたん? >>940
日本人的には大正モダンでハイカラなイメージが強いけど、英単語のmodernにそんなニュアンスはないんだから直訳でモダンでもイイでしょ
アートやインテリアではモダンって普通に使うし >>949
1. 違いない
2. 似ている
3. 同じ
これらは、全く異なる意味を持っている。 >>953
ありがとう
知らないなら普通にそう答えてくれればいいのに >>940
ナウいヤングな君は和製英語の事は忘れて英語の modern を思い浮かべなさい。 アマゾンで検索したら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/ >>957
その出版社の本、本のサイズの割に字が小さくて、読みにくいんだよね。 プロトコルってなんなのかよくわからんからググったんだけどさ
Swiftだと主に構造体を使うことになっていて!?構造体にも適用できるインターフェイスがプロトコルってことなのか?
もしそうだとしたら、構造体が主流じゃないKotlinにプロトコルがあろうがなかろうがほとんど変わらん気がするが・・・・ プロトコルとインターフェースは呼び名が違うだけ
JavaのインターフェースはObjective-Cのプロトコルを真似して違う名前を付けたもの
SwiftはObjective-Cからプロトコルという名前をそのまま受け継いでる >>966
まじで?>>948は冗談で言ってるんだと思ったぜ・・・・ Interfaceって機能がなぜ必要?
1. Super1, Super2を多重継承したDerived ClassからSuper1, 2に共にあるfooメンバにアクセスすると、Super1.foo, Super2.fooのどちらが呼ばれる?
2. この問題を回避するには、多重継承を禁止すれば良い(菱形継承問題、Diamond Problem)
3. もう一つの解決方法は、宣言しか実装していないClass(Interface, Prototype, Abstruct Class, Module)を使えば良い。
この理解でOK? >>968
具体例
図形 -> 四角形 -> 平行四辺形 -> 長方形
平行四辺形 -> 菱形
こう言うClass Hierarchyがあった時に
長方形 -> 正方形
菱形 -> 正方形
なる正方形を作りたい。
こんな時に、Diamond Problemが発生。 C++は仕様多すぎて複雑怪奇すぎて意味わからん
C++以外の、高速で、メモリ、OSネイティブAPIを直接いじれて、アセンブリに近い言語って無いんか?
大体ネイティブ機能実装とかだと C++ でやることになるけど
Python とかも結構頑張ってるん? >>971
Golangがそれに近いのでは?
Swift, Kotlin Nativeが高速コードを吐く、万能言語を目指してるけど、今のところ達成されていない。
かといってC++が普及しているか?と言われると、初学者を撥ね付ける仕様の複雑さで、そうもなってない。 学生向けGoogleの社会貢献事業、今年のAnnouncing our Google Summer of Code 2020 students
Swiftやるみたい。
https://forums.swift.org/t/announcing-our-google-summer-of-code-2020-students/36147 複数のクラスから継承(is-a)するのは、難しすぎる・柔軟ではないので、
Ruby でも継承は、1つのクラスからしかできない
その代わり、複数の機能・モジュールを、Mixin(has-a, インタフェース)できる
mixinすると継承チェーンに割り込むので、継承チェーンは一直線になる。
同名の関数は、親クラスよりも先に、mixinでみつかる
子 → mixin → 親 >>971
Rustでしょ
goはGCだからちょっと違う >>975
なるホドォ
mix-inってのは継承チェーンに割込むって意味なのね。
気がつかなかった。
なんで、mix-inって名前なのか今、気がついた。 >>971
> C++以外の、高速で、メモリ、OSネイティブAPIを直接いじれて、アセンブリに近い言語って無いんか?
C言語 >>979
確かに。
新しいC++の仕様やSTLはとても難しいので、Cを基本として、class などの概念を使いたいなら、C++98などの古いC++の私用の範囲でやることがお勧め。 Rubyを覚えるとキチガイになるのか、Rubyがキチガイを集めるのか… 基地外がどうこうと言うより
正常な人は Ruby を選ばない
ただそれだけのこと
結果的に基地外濃度が上昇する可能性は否定しない オリジナルのルビー男を離れて模倣犯が続出したルビー荒し事件を総括して名付けられたのがスタンドアローン・コンプレックス
プログラミング技術という新たな情報ネットワークにより、独立した個人が、結果的に集団的総意に基づく行動を見せる社会現象を指し、孤立した個人でありながらも全体として集団的な行動を取ることを意味する Rubyキチが1人なのはもちろん
Rubyキチに粘着してるやつも1人だから このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 319日 7時間 40分 44秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。