Kotlin [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
JetBrainsが開発した期待の新言語Kotlinについて語りましょう https://kotlinlang.org ?なvarをif != null したら!!いらないようにしてほしいな〜 valに入れ直すのはスマートじゃないよ >>156 似たようなとこで詰まってた Nullableでご安全にする理屈はわかるけど連想配列の利用法としては煩雑だね 覚えとくしかないか それともこのへん便利な格納構造があるのかな >>> var map = mapOf(1 to 10,2 to 20) >>> map[3] null >>> var list = listOf(10,20) >>> list[3] java.lang.ArrayIndexOutOfBoundsException: 5 at java.util.Arrays$ArrayList.get(Arrays.java:3841) >>157 の言う通り、究極的にはこのしょーもない内部仕様のせいである この仕様を知ってるKotlinがmap作った時点で全要素Nullableにしてくれてるのだね >>> var value = map[2] >>> value 20 >>> value + 5 error: infix call corresponds to a dot-qualified call 'value.plus(5)' which is not allowed on a nullable receiver 'value'. Use '?.'-qualified call instead >>> var value:Int = map[2] error: type mismatch: inferred type is Int? but Int was expected このへんも、Null安全のない言語から来た人はふんす!!ってなると思われ >>163 C#文法とC#ライブラリを学習するよりは楽そう >>165 Java APIをKotlin APIに透過的に見せるからラッパーの用意すら要らんでしょ 最終的に訴訟のネタにもなってるjavaを切り離す方向まで行かないんですかね。 VMの問題なんだからいまさらどうしようもないだろ。 Ruby, JS などで、メソッドチェーンすると、 nil オブジェクトから、メソッドを呼べないと言う、 No Method Error なんて、しょっちゅう起こるし、 メソッドチェーンはテストも、しにくい 素のkotlinでは使えるけどAndroidのkotlinでは使えないのってある? Nullableかどうかは書き手が決められるのがステキとか言っておきながら mapOfだと"暗黙の"Nullableになるように見えるのが初心者的にキモいという主張だろう 誰もNullableの有用性の議論などしてない 読点君には理解できんだろうが >>170-171 VMじゃなくAPI(ライブラリ実装)の問題でしょ Sun(現Oracle)の作った全Java APIを放棄してKotlinで一から作れば訴訟問題からは無関係になれる まぁ、GoogleもJetbrainsもお互いに「お前がやれ」とか思ってそうだけど Google: KotlinはJetbrainsのモノなんだから、JetbrainsがKotlin APIを整備するべき Jetbrains: Java訴訟はGoogleの問題なんだから、GoogleがKotlin APIを整備するべき map を実装する場合、普通は、2種類書く そのキーが無い場合、 null を返すものと、例外をthrow するもの nullable になるのは、null を返すもの >>175 VMの方のAPIだよ。 言語の方のAPIだけの問題なら、OpenJDKだけで解決してしまうだろが。 >>177 確かそのapiのインターフェース自体に著作権があるというのがoracleの主張だったはず OpenJDKにもVM実装は含まれてるんだけどなw Oracle JVMとOpenJDK JVMで微妙に要件や振る舞い違うって業界の人は頭抱えるけどまぁ誤差か >>175 Androidのapiインターフェースの話をしてるんだからgoogleじゃない? でもjavaと切り離すなんてできないだろうから、少しずつやってくしかないね。 コレクション系の独自実装とか始まったりして swiftもobjective-cの文字列型とswiftの文字列型があってapiインターフェース呼び出しの際に暗黙の型変換が行われてた。 そんな感じになるのかな。かなりキモいけど 「apiインターフェース」の「頭痛が痛い」みたいな表現、嫌いじゃない:D >>160 その昔、Apple公式だからという点のみで流行ったSwiftという言語があってな・・・ あれも技術を知らない企画屋がそんな感じで企業内採用を提案したんだよな、嫌な事件だったね null非許容って使ってみると地味に結構不便だな… 今までとは根本的に設計方針を変えなきゃならないものがあるなぁ… 型安全でないnull使うより、その型のnull定数を定義するほうが楽だよ。 null参照の概念は10億ドル単位の過ちってそれ一番言われてるしなw 偉人の言葉を信仰心と共に信じるべし >>183 ?使うだけなのに何言ってんの? 大昔の案件で引数には必ずnullチェックを入れるというコーディング規約があって、保守性は下がるし規約に従わないやつはいるしで散々だった。 intellij、if式を折りたたまないようにするオプションはどこですか? >>189 たとえばintefaceのnotnullなプロパティを亜種的なクラスでnullableにオーバーライド、できないよねぇ。 個人レベルの開発ならそこらへんの曖昧さはかえって便利な場合もあったんだけどね。 まぁ最初から全部nullableにしちゃえば済む話だが9割の非nullに全部?なり!!を付けるのはキモい。 javaコードをそのまんまkotlinコードに移行は、できなくはないけどキモいコードになる。 Λ_Λ \\ ( ・∀・) | | ガッ と ) | | Y /ノ 人 / ) < >_Λ∩ _/し' //. V`Д´)/ (_フ彡 / ←>>188 >>191 わざわざnullableなプロパティを含むインターフェースを使う意味がわかんない。ちゃんとnullチェックして渡せば良いじゃない。 >>193 自分もそんなコードが欲しくなるとは予想しなかったけどな笑 nullであることを利用して動作変える派生クラスをkotlin化しようとして躓いたわ。 結局設計を変えることで対応したけどね。javaで使えてたトリッキーな手は使えなくなった不便さがあるね、便利さの陰に。 まぁ慣れの問題だが。 androidだとonCreateで初期化するような変数はnullableにしなきゃいけないのかと思ってたけど、lateinitってあるのね 個人的にはそこそこ使うから@とかの記号にしてほしかったけど プロパティが、最初からデフォルト値を持っていたら、ダメなのか? どうしても、nullが必要なのか? 関数の戻り値の型ならnullable欲しいな 戻り値がnullになるとき毎回exceptionをthrowするのかって話 例えば数値を文字列として格納してるデータをファイルとかDBとかから取り出すとき その値は数値としてしか使わないけどもしかしたらnullな場合もある getter関数作るのにgetterでは必ず文字列として取得して変換可能か判断してから数値にする処理を毎回するか変換できなかったらcatchするのか そんな場合なnullableがあれば外からみた関数の使い方はシンプルにできる だからnullオブジェクトを用意して使えって。 型安全でないnullなんか窓から投げ捨てろ。 入力欄のオプショナルな項目か 携帯電話を持っていれば、その番号を記入して、みたいな奴か >>196 同じようなことを考えたことがあったけど、「実行時エラーは悪」という考えにとらわれると、 間違った値(デフォルト値)のままエラー無しに処理が進んでしまうのは実行時エラーよりたちが悪い ということを忘れがちになる。 >>197 使用頻度を考えるとnullオブジェクトをいちいち定義するよりnullチェックのほうがましな 変数の方が多いと思われる。 また、nullオブジェクトはどんな状況で使われても適切な結果を返すように実装しなければ、 上で述べたデフォルト値の問題を起こすことになるから、ミスのないデフォルトを 設定すること自体が難しい場合もあると思う(使用経験が少ないからわからない)。 >>205 今時はなるべく完全コンストラクタを使って最初に一括で初期化し、 後は一切変更できないクラス設計が好まれるんだよ C#は見境なく大量のgetsetプロパティを持つクラスを定義するバカが多いけど nullチェックはもうちょっと痒いところまで手が届くといいね たとえば if(a == 0 && b?. == "hoge") {...} で2つめはnullならパスしてくれる みたいに書けたら便利 >>205 コンパイルエラーにできるものを実行時に処理するのは良くない設計だな。 型無しのnullを使うとコンパイルエラーに出来なくなる。 nullオブジェクトでも実行時エラーは処理できるから、必要ならそうすりゃいいし。 >>209 と、いわれても既存APIにはnullableだらけだからなぁ そのAPIの中はそれで良いと思う 今後作るAPIについては別に過去をなぞる必要はないとも思うよ Kotlin/NativeをAndroid(NDK)で動かしたい >>210 およそ nullがコンパイルエラーになる > 適切に設計されたnullオブジェクト > nullチェック > 実行時NPE > 不適切なnullオブジェクトでエラー無しに誤った処理が進む という順位なので>>210 とは特にそれほど見解の相違はないと思う。 nullオブジェクトは必ず容易かつ適切に設計できることを暗黙の前提とするかどうかが相違点かな。 tensorflowをサポートするらしいけど、どうせならpython自体を扱えるのを目指してくれたらいいのに ハマったので備忘録程度に。 Kotlin/JSで@JsNameの使いどころは、公式ドキュメントでは In some cases (for example, to support overloads), となっているが、引数ありのトップレベル関数はoverloadしていなくても @JsNameをつけないとトランスパイル後の名前が変えられる模様。 >>217 目指すの意味がさっぱり分からんけど、kotlinじゃなくjython使うのじゃダメなの? >>219 たぶん>>217 はCPythonのライブラリをKotlinから使いたいのであって、 JavaやKotlinで書かれたものをPythonで呼び出したいのではないと思う。 JythonはPython3に対応するめどもなさそうだし.... そうそう、kotlinから直接pythonライブラリ使えたらいいなー、と。それだけ。 JetBrainsならやってくれそうなんじゃないかとw jython、そうなんだよ、開発止まってない? > CPythonのライブラリをKotlinから使いたい JythonでPythonコード(CPythonのライブラリ)をJVM上に読み込んで KotlinでJVM上に展開されたバイトコードを呼び出せば良いんでないの という意味だったんだけど、そうじゃないんだろうかねぇ 他の在り様を考えたけど、どれも現実的でない構成になってやっぱり分からん 案1. KotlinコンパイラがPythonコードをコンパイルできるようにする => それJythonじゃん... 案2. JNIのサポート言語(C/C++)にPythonを新たに追加する => Oracleに言えよ... 案3. JVM, CPythonプロセス間をWSGI的なもので繋ぐ => もう何が何やら... まぁ深く考えないで、素直にKotlinからtensorflowのJava APIを叩くのが一番楽だと思います >>223 がどの程度Pythonに詳しいかわからないけど、PythonのライブラリはPythonだけでなく C言語などを混ぜて書かれていることも多いので、 > Pythonコード(CPythonのライブラリ)をJVM上に読み込んで ということ自体ができないと思う(自分もそこまで詳しくないから確証はない)。 Pythonで書かれているライブラリでもPython3に移行しているので、Python2ベースのJythonには 使えないし。 あと>>223 はJVM前提みたいだけど>>221 はKotlin/NativeみたいにJVMから離れて CPythonのインタプリタ上で(あるいはCPythonのAPIを呼び出しながら)Kotlinを実行する ことを想定しているからかみあわないんだと思う。 > 素直にKotlinからtensorflowのJava APIを叩くのが一番楽だと思います tensorflowはその通りだけど、>>217 はそれ以外のScipyみたいなライブラリのことを 言っているんだと推測。 >>221 はKotlinコンパイラでPythonコードをコンパイルしたいって言ってるから一旦理解したが >>224 はCPythonコンパイラでKotlinコードをコンパイルしたいって言ってて草生える 別の人間の意見だからそれは良いんだけど、どっちにせよ馬鹿っぽい構成だな Kotlin/NativeでJVMから離れても、 結局はKotlinランタイム, Pythonランタイムの2つの言語/プロセス間通信が必要で 他言語間通信はC言語を挟めというのがイマドキの現実的なI/F設計だろうに そのC言語I/FにKotlin, Pythonのラッパーを噛ませるならギリギリ現実的か Python2が3に移行してるって言うが、Googleが10年以上Python2に固執したせいで ようやく最近Python2, 3が平行実装になった程度で完全移行は進んでないだろ... Jythonなんかはその煽りで3への移行をやらず枯れきった性質だと思うぞ >>224 普通に空気読んでくれてありがとねー笑 >>225 現実に今すぐ俺がkotlinでPythonライブラリ使いたいと言ってるわけじゃないんで、見当違いだが詳しい解説ありがとねー JBはiOSにもネイティブでkotlinを対応させようとしてるくらいだし 方向性としてすべての分野でkotlinを使えるようしようとの野心をもってるらしいし もとものkotlinは産業用に開発してると謳ってるわけだけど tensorflowに対応させるなんて発表聞けば、研究分野、この場合機械学習だけども、にも ターゲットを広げたんかな、と ならばいっそのことpythonライブラリ全般を使えるような開発をやってくれたら さらにいろいろ広がるんじゃないか、とそういう期待 PyCharmとか出してるくらいだし まぁ人的資源とかの関係もあるだろうから優先順位低いだろうけどね googleだってもしかしてJVMと決別を視野に入れてkotlin/nativeを評価したのかもしらんし? 現にFuture plansには入ってるんだよね、Data analysis and Scientific Computingが どうやって実現する予定なのかはわからんけど それとも何か?この科学技術計算ターゲットってのは もしかしてイチからkotlinで科学技術計算ライブラリ もしくはコミュニティまで作ろうってことなのか? まさかtensorflowに対応で完結じゃあるまい?w いずれにせよJBが近い将来どんな具体策を出してくるのか、非常に楽しみである JVMもPythonも知らない素人だった 相手した二人共これには苦笑い kotlin見てみたけどこれscalaをオチンポ向けにした言語やな 全然知らないで書くけど Javaと同等の事をKotlinで出来るの? できるんでないかな Javaの呼び出しもシームレスにできるしな Kotlin = Scala + Groovy(Rubyも同じ) Javaでは、nullを除去できない Javaには、Primitive があるけど、 Kotlinでは、すべてがオブジェクト Java ←変換可能→ Kotlin クロージャのデフォルト引数は、it を使う 第2引数のラムダ式を、引数の外に出せる、糖衣構文あり 関数(引数, { it }) 関数(引数){ it } toString, equals, hashCode の3種の神器を、最初から持っている、データクラスがある >Javaには、Primitive があるけど、 >Kotlinでは、すべてがオブジェクト 実行速度を上げるため、primitiveを使う方法もある 途中からJavaとの違いからKotlinの特徴になっててイマイチ、、、 とりあえず、Javaとおなじこと出来るでいいんでね 初歩的な質問とかしていい? ByteArray使いたいときって val a = byteArrayOf(0x80.toByte(), 0xCA.toByte(), ...) みたいに.toByte()ってつけなきゃいけないん?慣れるまで見づらいな… いろいろ考え方はあるのだと思うけども なにかコレクションがあって、それ全てに何か処理をして返して欲しいときはmapが使える >>> val array = arrayOf("aaa","bbb","ccc").map{ it.toUpperCase() } >>> array [AAA, BBB, CCC] >>238 Kotlinは通常キャストはされないが、byteはリテラルがないからかリテラルだけは型推論されて、 val bytes = byteArrayOf(0x01, 0x02) というのは型検査を通る模様。 kotlinでjsってどんな感じ? typescriptの型情報取り込めると知って ちょっと気になってきた。 type scriptより関数型が強めだから幸せになれそう SwiftとKotlinでちょっと遅延評価リストを比較した ■Kotlin オンラインコンパイラ: https://try.kotlinlang.org/ val a = generateSequence(0){it+1} //A 問題なし println("A: "+ a.take(10).toList() ) //B 問題なし println("B: "+ a.take(10).map{it*10}.toList() ) //C 問題なし println("C: "+ a.filter{3<it}.take(10).toList() ) //D 問題なし println("D: "+ a.map{it*10}.take(10).toList() ) //E 問題なし println("E: "+ a.map{it*10}.filter{50<it}.take(5).toList() ) ファイルの整形処理で少しカジッてみたけど、ファイルIOはJavaのAPIと古い?関数と新しい?関数が混在してて、Googleの海をさ迷ったよw kotlinのsequenceを返すreadLinesが欲しかったんだけど、見つけきれなかったので自作した。 既存であるのかな? lineSequence()とかuseLines()とか? androidアプリってscriptの方で作れますか? kotlinc -script ヘイ親方質問 ファイルをShift_JISで保存してもUTF-8で保存しても fun main(args: Array<String>){ println("日本語です") } が特段のオプションなしのkotlincでコンパイル可能で 特段のオプションなしkotlinでWindowsコマンドプロンプトに無事表示可能なんだけども これはいったいどのへんが気を遣ってくれてるんですかね >>144-150 自己レス。データクラスを使った data class Person(val age: Int, val name: String) val mlist: MutableList<Person> = mutableListOf( ); mlist.add(Person(25, "Tom")); mlist.add(Person(25, "Dave")); mlist.add(Person(20, "Kate")); mlist.add(Person(20, "Alice")); val sortedList = mlist.sortedWith(compareBy({ it.age }, { it.name })) sortedList.forEach { println( it ) } 出力 Person(age=20, name=Alice) Person(age=20, name=Kate) Person(age=25, name=Dave) Person(age=25, name=Tom) C#やってる人にとって凄く扱いやすかったりする? ちなみに母ちゃんのあだ名がコトリン 秋の奈良レンタサイクル“古都りん” - 奈良県自転車利用総合案内サイト nara-cycling.com/rent-a-cycle/ >>247 kotlinじゃなくてJavaの仕様でしょ。 なんでgoogleはkotlinをアンドロイドアプリの公式言語にしたの? なんでgolangじゃないの? オラクルとの訴訟もあるのにjavaを切ったほうがいいんじゃないの? >>254 オラクルとの訴訟での争点は言語じゃなくてAPI 言語を何にしようが無関係 >>254 使ってみればわかるけどgolangってメタプログラミングな部分が弱いから 既存のシステムの置き換えに向いてる言語ではないと思う。 新たに1から構築するなら可能性はあるけど。 >>256 これ。でも段階的にjavaに頼らないようにしていくのかもね。 コレクション系がandroid用に別実装になるとかあれは面白い。 あとオラクルにjavaから離れるアピールして圧力をかける政治的意図もあると思う むしろ、なんで買収しないんだろな。 つーかjetbrainが謎すぎて。 なんで一社であんなに幅広くide作れるのかが謎 共通のベースに言語乗せてるだけだし、開発なんかほとんどオフショアだろ Kotlin nativeも頑張ってるしな。 結構そっちにも期待。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる