Kotlin 5
■ このスレッドは過去ログ倉庫に格納されています
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう ※前スレ https://mevius.5ch.net/test/read.cgi/tech/1531818027/ Ruby では、クラスに、each メソッドが定義されていれば、 include Enumerable で、map, each_line などの便利な機能を使える(Mix-in) Enumerableのラッパーが、Enumerator で、 eachを定義していないクラス、例えば、String クラスに、Enumerable の機能を追加する Enumerableは内部イテレータで、Enumeratorは外部イテレータ。 外部イテレータは、繰り返しの進行を制御できる enum = "a\nb".to_enum( :each_line ) # Enumerator enum.with_index do | line, idx | # 1行ずつ処理する p [ idx, line ] end 出力 [0, "a\n"] [1, "b"] with_index は、Enumeratorクラスのメソッドで、 map に、インデックスを渡すことも出来る p enum.with_index.map { | line, idx | "#{ idx } : #{ line.swapcase }" } #=> ["0 : A\n", "1 : B"] >>691 あー。そうか。 まあ Iterable は中に Iterator 返すやつ一つ作ってしまえば良いだけなので object で作ってそのまま forEachOndexed で使えば良いだけなのだがなんというか面倒。 あ、自分でそういう拡張関数作ればいいだけか。てか作っておいて欲しかっな。 >>689 イテレーターは列挙するものだからインデックスと直結しないのでは n件のリストがあったとして、それをイテラブルとして回すときのインデックスはほぼ自明だけど そいつを3から始めるイテレーターや逆順のイテレーター 3歩進んで2歩下がるイテレーターのインデックスというのは ルールを決めてしまえばいいんだけど本質的な属性ではないと思う 拡張関数ってグローバルだよな どこに書けばいいか迷ったあげく使うクラスと同じファイルに書いてしまう 拡張関数めっちゃ便利だけど、用法用量を守らないととても危険だよな 拡張関数の定義を interface の中にすれば、使用可能範囲をコントロールできる どのみち、IDEがないと読み難い言語だから、Extensionはさして気にならない。 プロパティアクセスのせいで、知らず知らずにシャドウしてしまう方がずっと気になる。 ts2ktって放置されているっぽいけど、今でも使いものになるの? >>699 Android以外はちゃんと動くんかな・・・・? >>698 拡張した本人しか認識できないのもができるからな。 >>699 興味あるわこれ 今やってるの終わったら使ってみようと思うんだけど誰か試してみた? 社内の持ち回りの勉強会で、vimでKotlin開発する環境を気合いで整える、という発表をしたら大受けしたわ もちろんネタとしてな。絶対idea使った方がいいぞ。 やらないと後で「おまえやるって言ったよな」と責められるw kotlinでandroid開発の記事載ってる雑誌ないですか ネットや書籍から情報得るしかない? そもそも今ではプログラミングについての雑誌が少ないよね。 Software Design か日経ソフトウェアぐらいなんじゃないか? ハードウェア寄りな Interface みたいなのもあるが。 断片的なのはネットで調べればいいが、 体系的に全体をまんべんなく知りたいってときは、 やっぱり書籍が適してると思う。 書籍もガッツリ読むなら紙の本がいいし、写経するなら電子書籍の方がいいし 選択肢が増えた分だけむしろ選ぶのが大変になってるな SoftwareDesignは最近はもう読んでない バックナンバーも大量に棄てた 川上さんの連載のだけ残してる 雑誌のいいとこは判型が大きいことだなw ただのブログよりは読者層を意識してる率が高くて、Web記事よりはまとまりと終わりがある可能性が高いという感じか なにの情報を欲しいと思ってるのかに依存する気がするぞ 雑誌の良いところは、本よりも情報の鮮度が高いってとこだね。 日経ソフトウェアは、素人向け SoftwareDesign ぐらいか。 WEB+DB は、システム環境・プログラマーが半々ぐらい 他は、日経Linux は、ラズパイが多い フレームワークの巨匠と言えば、掌田津耶乃・山田祥寛 山田の講習会は、数万円とか。 掌田なら、十万円ぐらい行きそうw 最近の日経ソフトウェアはPython雑誌みたいになってる Kotlinの記事なんて全く載らない そういやPython大ブームだね。 機械学習関係で火が着いた感じか。 数年後に始まる小学校でのプログラミング授業もPython採用と予想。 おすすめかどうかを意識しろ あるかどうかではなく、おすすめかどうかだ 検索すりゃこのご時世英語含めてたくさん出てくる そんなの見りゃわかる おすすめできるものかどうかがいちばん大事 kotlin使った事無くて勉強中なんですが null安全は通信で届いたオブジェクトについてどう働きますか? あるいはデシリアライズされたオブジェクトについて そこでもnull安全ですか? 当然どんなオブジェクトであれKotlinで書かれている限りnull安全は機能するけど、君はそもそもnull安全を誤解してそうな予感がする 検索すると、null不可な変数にnullを代入できないこと、とあります。 そうすると通信で受信したオブジェクト等はどうなるのかなと。 この理解は間違っていますか? どこまで「使ったことない」かにもよるんだが ・nullかどうかの条件分岐をクリアした変数 ・nullかどうかの条件分岐をまだやってない変数 の2つがあるだけだと思っていい 外部から取得したデータがあったとして、nullチェックをまだしていないならnullableだ どこかで誰かが(静的文法解析上)nullではないという条件分岐を通したあとならそれはnonnull どこかで誰かがその後にnullになるかもしれない処理を通したらnullableに戻る >>736 文字列とか通信データから、新たなオブジェクトを構築するのでしょ? 構築できたら、null ではないし、 データがおかしくて構築できなかったら、エラー! 当然nonnull出ない変数ににnullをぶち込んだらエラーになる >>736 nullを入れられない型なのにnullを入れようとしたらその時点でオブジェクトを生成できずにエラー なので、json文字列を受け取ってオブジェクトを生成する部分で要件に合わせて適宜いい感じに処理する必要がある >>736 試してみればわかると思うが、nillableな型にnull入れてObjectOutputStreamで書いた後でnullableでなくしてコンパイルしなおしてからObjectInputStreamで読もうとするとInvalidClassExceptionが出る。 kotlin使ったことないって奴向けの説明ではないな そもそも聞かれてることに対する回答としてはピントがズレてる 自分の知識自慢したいイキリオタク感がすごい >>734 がおそらくしているであろう幻想を抱いていた時期が自分にもありました とエスパーしながらいうと、通信で受信したオブジェクト等はnullableな型を持つことになるだけで、 Kotlinにしたからといってnullチェックが要らなくなるわけではない。 >>736 には誰の説明が分かりやすかっただろうか。 >>744 ずれてないだろ。通信でオブジェクト送る話なんだから。 Javaのコードを呼び出すところは、全部そうだね。 Kotlinはnullableであることを「強制しない」。 AndroidとかjavaxのAnnotationでもついていない限り。 コンパイルエラーになるかぬるぽでばーんってなるかの違い null安全は以下の機能を包括する言葉 ・型システムでnull許容とnull不可を区別出来る ・null許容型の取扱いを容易にするモナド操作などを言語仕様や標準ライブラリに持つ ∧_∧ / ̄ ̄ ( ´∀`)< ド? ( ) \__ │ │ │ (__)___) 逆引きのAndroid開発用のKotlin本ないの? Javaのはあるけどさ >>754 >>755 ほんとのほんとに? 作り始めてまうで? >>754 ,755,758 iOSアプリを実際に作った人がこの板にこんなにいるとは思えないんだがw いや、自分もないんだけどさw Kotlinでの競技プログラミングのコンテストがあるよ! 5月28日の23時35分から2時間半! Kotlin Heroes Announcement https://codeforces.com/blog/entry/67162 https://codeforces.com/contests/1170 英語で書かれた問題を解読するだけで2時間半が経過してしまいそうな予感 >>760 IntがintになるかIntegerになるか考慮しないといけなかったらちょっと嫌だなあ。 >>759 大丈夫、Kotlinも業務で使ってるしiOSアプリも業務でいくつも作ってるからさ Kotlin nativeのiOSアプリも実際に作ってみたって人と勉強会の懇親会で話したことがある Listの初期化って var list = listOf<Hoge>() と var list :Hoge? = null どっちがいいの? >>765 全く違うもの出されてどちらがと聞かれても・・・ >>765 その2つでいうなら下はリストを作れてないから上一択になるぞw 間違えた下は var list :List<Hoge>? = null ね これならどっちがいい? どちらにせよその2つは作られる型が違う nullableにする必要があるかどうかで使い分けろとしか 特別な理由がない限り上はvarじゃなくてvalにすべきじゃない? >>770 なぜ? >>771 valにしたら代入できないじゃん val にして空の MutableList 作るのは? >>772 ああごめん val にしてMutableList な だが、おまえが欲しいのはたぶん var list = emptyList<Hoge>() >>772 Kotlinにおいてはvarもnullableもごく限られた場面でしか使わない例外的なものだということは知っておいた方が良い。 nullableは無駄に取り扱いが面倒だったり、varは予期せぬバグを生み出す温床になり得るから。 なので val list = mutableListof<Unko>() が、大抵の場面で正解。 かといって盲目的に mutable collection を使うのもどうかと思うがな 盲目的も何もコンテキストが分からないんだから一般論としてvarを使うよりはMutableListを使う方が適してると言うしかないだろ どんな状況でも何がなんでもMutableListを使えなんて誰も言ってない 俺も>>777 にするな。 もしくはlateinitを使うか、どちらか。 >>768 状況にもよるけど、>>782 で出たlateinitか、場所によっては val list by lazy{ [List<Hoge>を返す式] } そもそも、listの要素が出揃っていない段階でlistを宣言するのが適切でない可能性も。 val list = [List<Hoge>を返す式] のようにいきなり最後まで計算するか、少々面倒だけど>>773 の言うように一旦 val temporaryList = mutableListOf<Hoge>() して要素が出揃ったら val list = temporaryList.toList() するとか。 valだけが正しい。valにできないなら新しいvalにコピーするべき >>783 それだとvalじゃなくてvarじゃね? 始めに空のList入れる意見が多いけど結局使う時にemptyかチェックするでしょ nullかどうかチェックするのと同じじゃね? nullの警告が厳しいからこそ使うのはどうだろうか nullならnullだと知らされるがemptyじゃ何の警告も出ない ・リスト自体を構築するケース ・listを使わないケースがかなりある and 非常に効率重視(※)なら var list: List<Hoge>? = null 必要になったら list = mutableListOf() ・そうでないなら val list = mutableListOf<Hoge>() ※mutableListOf(=ArrayListの生成コスト)すら許容出来ない場合 なおmutableListOfと比較するとlazyの準備処理の方がコストが掛かる ・場合によって構築済みリストを入れ替える(再代入)するケース var list = listOf<Hoge>() 補足: listOf()はemptyListにinline展開されEmptyListのシングルトンを返すので生成コストは無い >>765 >>772 は再代入目的のようなのでlistOfで良い >>787 そうとは限らない 単にリストの要素数が0ならそれでいいケースも多い そう考えると明らかに初期化を忘れてるのが分かるという意味でnullを入れておくのもいいかもしれない Androidなどで、非同期処理が関わってくると、 valは注意して使わないといけない場面が、意外にたくさんあることに気が付く。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる