◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:Kotlin 6 YouTube動画>4本 ->画像>4枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1561186797/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
※前スレ
Kotlin 5
http://2chb.net/r/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 と出て来たよ。
今更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.
VIDEO >>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が糞
https://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での並行性についての話
VIDEO >>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 言語外の仕様か。いくらか眉唾だが興味深い。
雑食系エンジニア・KENTA
Scalaが日本で衰退し始めている理由を説明します
VIDEO 動画で食ってる奴がエンジニアを名乗る不思議な世の中
>>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人だから
-curl lud20241225084430caこのスレへの固定リンク: http://5chb.net/r/tech/1561186797/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「Kotlin 6 YouTube動画>4本 ->画像>4枚 」 を見た人も見ています:・Kotlin 5 ・Kotlin 2 ・Kotlin 3 ・次世代言語議論スレ[Rust Kotlin Haskell]第6世代 ・次世代言語15 Go Rust Swift Kotlin TypeScript ・"Shiritori" in English ・【HP】 Pavilion Notebook PC ★11 ・Dart これ以上変な言語を増やすんじゃねえ! Kotlin ・次世代言語17 Go Rust Kotlin TypeScript Julia ・It's like you're moving in slow motion! ・次世代言語14 Go Rust Swift Kotlin TypeScript ・次世代言語13 Go Rust Swift Kotlin TypeScript ・次世代言語Part7[Go Rust Swift Kotlin TypeScript] ・English Dictionary for anime fags / Aniota no tameno eigo jiten ・【IT】Kotlin 1.2正式版リリース。KotlinはJavaとJavaScriptのマルチプラットフォーム対応に ・Kotlin ・Kotlin 7 ・【HP】Pavilion Notebook PC ★14 ・次世代言語21 Go Nim Rust Swift Kotlin TypeScript ・次世代言語22 Go Nim Rust Swift Kotlin TypeScript ・次世代言語25 TypeScript Swift Go Kotlin Rust Nim ・次世代言語28 TypeScript Swift Go Kotlin Rust Nim ・次世代言語23 Go Nim Rust Swift Kotlin TypeScript ・次世代言語24 Go Nim Rust Swift Kotlin TypeScript ・【Library of Ruina】Project Moon 総合 Part53【Lobotomy】 ・【Library of Ruina】Project Moon 総合 Part38【Lobotomy】 ・【Library of Ruina】Project Moon 総合 Part84【Lobotomy】 ・【Library of Ruina】Project Moon 総合 Part42【Lobotomy】 ・【Library of Ruina】Project Moon 総合 Part46【Lobotomy】 ・【Library of Ruina】Project Moon 総合 Part62【Lobotomy】 ・【Library of Ruina】Project Moon 総合 Part49【Lobotomy】 ・【Library of Ruina】Project Moon 総合 Part7【Lobotomy Corp】 ・【Library of Ruina】Project Moon 総合 Part12【Lobotomy Corp】 ・【Library of Ruina】Project Moon 総合 Part19【Lobotomy Corp】 ・【Library of Ruina】Project Moon 総合 Part21【Lobotomy Corp】 ・IPv6 IPoE(DS-Lite)サービスのZOOT NATIVE 月額2160円から1080円に引き下げ ・■ アンジュルム ■ YouTube『愛すべきべき Human Life』Promotion Edit ■ 21:00~プレミア公開 ■ ・Kotlin 8 (234) ・ZOZOTOWN pt.56 ・ZOZOTOWN pt.86 ・ZOZOTOWN pt.136 ・Red Hot Chili Peppers 136 ・【LoV】LORD of VERMILION V【Re:3】不死スレ 96 ・【エムステ】アイドルマスター SideM LIVE ON ST@GE! Part.6 ・Kotlin初心者質問スレ ・●(07L06)2016 MotoGP R07 カタルーニャGP LIVE8● ・【LIVE】東京五輪 開会式 20:00〜 【NHK】 ★26 [potato★] ・Red Hot Chili Peppers 120 ・SlipKnoT .61: The Gray Chapter ・【ROM焼き】Huawei P8 lite root1 ・【WoT】World of Tanks Blitz Tier198 ・【WoT】World of Tanks Blitz Modスレ Tier4 ・【新生】Dorothy little happy 【ドロシー】 ・【WoT】World of Tanks Blitz チラシの裏 35枚目 ・【PS4】eFootball ウイニングイレブン 2020 LITE ・至急困ってます dyld: Library not loaded エラーで ・【WoT】World of Tanks Blitz 初心者スレ Tier120 ・【ビリーアイドル】BILLIE IDLE part2【NOT IDOL】 ・【SLIP有】【PILOT】パイロット万年筆71【Namiki】 ・雑談 The Greatest Oracle from Deep Universe of Other Intelligence. ・Horizon、NRK FilmpolitietでGOTY獲得 ゼルダBOTW、マリオデの存在価値とは何か ・Mana様がオンラインサロンを開設。「ElegantGothicLolitaAristocratVampireRomanceは不滅である」 ・元HKT菅本裕子 11/15、モデル務めるプリ機筐体"MOTEgenic"設置前に自撮up (*11/6、Biz系サイト「東洋経済ONLINE」にて自著連載コラムupも ・コーエーテクモ、スマホ版『モンスターファーム』が12月2日時点でのモンスター再生ランキングTOP10を発表 1位はLiSAさんの「紅蓮華」!
06:57:32 up 27 days, 17:21, 1 user, load average: 11.42, 10.41, 9.60
in 0.060398101806641 sec
@0.060398101806641@0b7 on 010820