独自クラスのオブジェクトを突っ込んだListのソート処理がKotlinだと楽すぎてワロタ Comparatorとか実装する必要すらない
>>8 流行り初めてんだよ。ようやっと日本語の入門書が増え始めたんだから。 まずはAndroidアプリ用で使う人が増えると思う。 Kotlinの仕事にありつけてないお前ら全員失業wwwざまああwwww
kotlinインアクション買った人いる?良さそう?
ちょっとカジってみたけど、JavaとかC#とかScalaとかF#とかをごった煮にした感じだね イマイチ新鮮味が無いけど、JVMでAndroidやらSpringやらで使えるっていうのが重要なのかな
下手に新機軸で目新しかったらScalaの轍を踏んでしまうだけだからな Javaと併用するベターJavaの範囲を逸脱しなかったことでここまでの地位を短期間で得たのだ ほどほどって何事も大事ね
>>9 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.age} : ${it.name}") } 出力 20 : Alice 20 : Kate 25 : Dave 25 : Tom >>17 逆に言うと中途半端で わざわざ覚えるのに 新しく使えるものが少ない でもまあScalaだと そこそこ難しくなってしまうから Kotlinの方が流行るだろうね ボイラープレート自体が消えるということに喝采した人が多い 「それくらいIDEが自動で大量に書いてくれる」ではなく「そもそも無い」が好まれるのだ 視覚情報大事
android専用みたいになってるけど、 javaでやれることは、 全部kotlinでもできるの?
誰だそんなAndroid専用とか変なこと言ってるの… ただほんのちょっと、現時点でのJavaの新規用途や一般人用途がAndroidアプリ作成しかないだけじゃないか… ということで「ふつうの」Javaが使えるとこはだいたいKotlinが使えるよ 企業に勤めてるような人でもない限り Javaプログラミング=Androidアプリプログラミング なのでそんな認識になってるだけだ 組み込みとかあのへんの大変そうなとこはたぶんまだ無理だけど、そういうとこに使えるかどうか気になるような人はKotlinが動作しうるかどうかは見てわかるだろう
ていうか Java にできて Kotlin にできない事ってあるのか? そんなもん無いようにしか見えないんだが。
>>23 ありがとうございます。 Javaの勉強中断して、 kotlinから始めてみます。 >>24 吐き出すのはただのclassファイルなんで、滅多なことではないと思うんだけど、断言できるほど知識もないのでドリームを残しておいた きっと凄い人が無償で調べてカッコよく回答してくれるはずだ これまでのまとめ Java にできて Kotlin にできないこと 1. バグの量産 2. 奴隷の大量使い捨て
flag |= x flag &= ~x これを flag = flag or x flag = flag and x.inv() こう書かなきゃならない冗長さ 開発者曰く、可読性の問題なら関数にすればいいじゃんと
超一般論としては論理演算子付き自己代入はそれによって陰に実行されるものがあんまり自明ではないので使わないほうがよい あんまり自分の分析能力を信用してはイカンよ
Kotlinインアクションはいいことはいいのだが索引が貧弱で、 例えばソートしようと思って索引見ても sort が載っていない。 じゃあ List のメソッドだろうということで List を探しても載っていない。 ということでリファレンスとして使えない。内容同じままでいいから索引を大幅拡充したの出して欲しい。
エルビス演算子ってエルビス・プレスリーからきてたんだな
エルビス・プレスリー知らない人も多そうだし、常識として知っててもなにがどうエルビスなのかわからん人もいそうだ 袖のじゃらじゃらした飾りだと思ってる人もいるけど違うからね ? は髪型だからね Kotlin in actionのおかげでやっとflatmapの意味が分かった
ifとか式にできるくせに、代入文は式にできねぇの??しょっぺぇ。 while ((bytesRead = stream.read(bytes)) != -1) とかできねぇの?しょっぺぇ
あれ、ひょっとして、kotlinてまだシリアライズできねぇの?? しょっぺぇ・・・ 普通にデータの保存にJavaのバイナリフォーマットのシリアライズ使ってたんだけどな・・・ あぼぼぼぼぼ。
whileはみんなそこで詰まるNE! Kotlinは条件部分で副次作用が起こることをよしとしないのだ 数少ない「単体部分で見ればJavaより記述量多い」部分なので、 我慢して明示的に変数定義に切り分けるか、素直に組み込みのBufferedReaderとか使ってくれ よっぽどオリジナルでない限りwhileでなんかしてたやつは「whileの外ごとまとめて」3行くらいで書ける
昔、ポインタ演算できないからJavaはしょぼい、というような主張してる奴が たまに居たのを思い出した
Kotlinの仕事ができてないお前ら失業確定www無職ざまあwwwwww
>>49 Java使ってれば違和感なく移行できますと言われつつ、実際はプチパラダイムシフトの受け入れが必要なのはちょっと不誠実かなとは思う 我々は「うっひょー○○言語や××言語のアレみたいだね!」とか喜ぶわけなんだが Javaしかやらないような人から見たら「Javaとは全く違うだけの気持ち悪い何かがくっついてる」としか思えない可能性は高い >>51 アピールしてるのは「相互運用性が高いから移行できます」であって、「違和感なく移行できます」では無いよ そういうのを書いてる第三者の記事はありそうだけど 公式的にはむしろ関数型に力入れてるのを売りにしてる >>51 > Javaしかやらないような人から見たら「Javaとは全く違うだけの気持ち悪い何かがくっついてる」としか思えない可能性は高い そうやって全く関数型やらモダン言語らしいとこ使わない違和感あるKotlinコードが出来そう プロパティと型推論しか使わないのもあり? それならできそう。
>>38 Kotlin in action買おうか迷っているけど、公式サイトの解説と比べてもっと深いことが書いてあったりする? ちなみにKotlinスタートブック は読了済み。 >>54 javaとの対比だとプロパティとnull安全だな。最も有用 それ以外はコーディング的な進化だから追々覚えればよい 俺のお気に入りのF#はなんだかんだでnull残ってるから、その点はkotlin羨ましい
残念ながらjava互換だからnullは無くならないのだよ
ガードしない場合、ぬるぽが起こる割合はJavaとほぼ同じ 言語の仕組み上安楽にガードしやすいってだけの話だからね しない・できない・忘れてたという場合はぬるぽぬるぽぬるぽだ コードはまさに意図した通りではなく書いた通りに動く そこでは思想など無意味だ
Android Studioでのコード補完のパラメータ表示にInputStream!とか末尾に「!」が ついてるんですが、これは何なんでしょうか?
IntelliJ の T! は「T か T? のどちらか」を示す つまりNullableかどうかすらわかんねえという記号
>>60 ありがとうございます。Java絡みのは当たり前ですが、ほぼそうなってますね。 理解しました。 忘れてたって言ったって全部に?付けないとJavaと同じにならないわけで ?付けなけりゃコンパイル通らないしNULL安全意識せざるを得ない
!! は、Nullable を、NotNull に強制変換する、危険な演算子だから、 requireNotNull 関数を使え 例えば、Java から、null が代入される場合、 String → IllegalStateException。ヌルポよりまし String? → Nullable なのでOK Platform Type 型を省略(String!) → デリファレンス時に、ヌルポ Java からの戻り値がすべて、Nullable になるのは困るので、 その折衷案がPlatform Type
Java からの戻り値をすべて、Nullable にするのは面倒なので、 そのまま使ったのが、Platform Type デリファレンス時に、ヌルポとなるため危険!
Javaのほうのコードに@NonNullアノテーションつけとけば、KotlinからT!じゃなくてTとして扱える
現代的な気遣いのされてるJavaライブラリはKotlinからでも便利に扱える シガラミがあって旧来のままのライブラリはそりゃ利用者側が手間かけるしかない
ラッパークラスもありだし、OSSなライブラリだったらアノテーション付与してPR送るのも有用だな
Kotlinから使いやすくなりました! みたいに言えるのはひょっとしたら売りになるかもしれんね
それは君には中々理解できない理由による。 例えば以前Appleが傾いた時にジョブズが復帰してiMacを作ってAppleは救われたが、iMacはハードウェアとしてそんなに素晴らしかっただろうか? たいして素晴らしくはないのだ。ブラウン管ディスプレイに本体入れて一体化しただけだ。しかし売れた。なぜか? デザインがよかったからだ。コンピュータとしてはどうでもいい見た目が売れ行きに多大に影響した。 技術者から見ればどうでもよさそうなものでも甘く見てはいけないということだ。
>>77 技術的な話をスレでされても理解できなくて不愉快だから「とにかくほかの話」をさせたがっている 知らない言語のスレなんて見なきゃいいのにね goが人気になった要因もgopher君が半分くらいあるからな。ことりんはいいな
ほんとおまえらはばかだなあ 日本の電子IT系なんてオタクの巣窟なんだから萌えキャラことりんで流行言語間違いなしやで
インアクションとなんとか太郎本どっち買おう 後者は本屋で見たんだけど
目指すとこがちゃうからな 現在どのくらい習熟してるかにもよるかと
「たのしいRuby 第5版、2016」高橋 征義 「みんなのPython 第4版、2017」柴田 淳 「Kotlinスタートブック、2016」長澤 太郎 この辺は、日本では、避けては通れない人達
>>91 公式のチュートリアルをパクって チョコっと変えて解説してるだけ 掌田津耶乃は、ほとんどの言語・フレームワーク・開発環境の、本を書いてる 売れ筋では、必ず顔を出す。 売れる分野に、掌田あり!
公式見て自習しろや、が通じるならセミナーとか講演会とか必要ないわけでな(いや、これに関しては別に必要ないとは思ってるが) 世の中の需要はあんまりロジカルではないのだ
>>85 太郎しか読んでないでActionは買ったばかりだけど、 Javaは一通りで来てKotlinをとりあえずやってみたいなら太郎、 Kotlinにどっぷり漬かることが確定しているならAction?かな いずれにしてもJavaの理解はないとかなり不利。 >>95 器用貧乏というやつですね、わかります。 やってみるとわかるのだが(やらなくてもいいが)、中上級者向けの本というのは全然儲からないのだ 書くの時間かかるし分厚くなって値段高くなるし売れなくなるしチェック内容増えるし時代遅れが混じるし下手すると共書だし 出来によっては「あのすごい便利な本を書いた人」という称号はいくらかの称賛になり、ひょっとしたら生活豊かルートをも開拓するかもしれないが、分は悪い 初心者向けの本をひとりで年に2冊くらい書いてたほうが、志低いと揶揄されながらもきちんと生活できるのさ
>>94 器用貧乏とは言ったものの、翻訳書が原書+1000円くらいの値段になることがざらなことを考えると 英語の公式チュートリアルを訳しただけでも、値段相応なのかもしれん。 しかし、著者のことをよく知らずにタイトルだけでうっかり買ってしまったものの身にもなって欲しい(自己責任) 深く理解した上で書かれた本かどうかは、(本を必要とするレベルの人には)立ち読み程度ではわからない。 Kotlinに限らずあれもこれも全く初心者に寄り添っていないことを鑑みると、初心者向けの本を書くというだけで価値があるのやもしれぬ あなたがライブラリマニュアル作るときに開発環境のダウンロードやプログラミング言語の文法から説明しないのと同じだ
「単純に意味や役割が似通ってるメソッドを集めただけのメソッド集」を表すものってないですかね Rubyでいうmoduleみたいなやつ 特にどのオブジェクトに属してるってわけでもない、誰も初期化しなくてよくてすぐメソッドが使えるやつ いまobjectでシングルトンクラスにしてるけど、なんか漂う特別感に違和感が
適当なネームスペースで、メソッドじゃなくて関数だけ複数定義したファイルを作ればいいんじゃないかな?
ああなるほど、packageで分ければいいのか… シングルトンクラスの中に書くよりはしっくりくる…ような…気が…す…うん、そういうものだと思うことにします
Kotlinで以下の処理をスマートに書き直したらどうなりますか int idx = -1; for (int i=0; i<list.size(); i++) { if (list[i].data == data) { idx = i; break; } } (idxを使った処理)
val idx = list.indexOfFirst{ it.data == data }
>>110 サンクス!まさか1行でできてしまうとは。。 Android Studioに貼り付けてもこうはならないよね >>111 とりあえずここで質問すれば答えが書かれるので、後でまとめページを作れば良い。 お前ら「よーし新しく覚えたKotlinのあんな技こんな技使ってコーディングするぞー」 〜 数日後コードレビュー 〜 リーダー「あー、これ全部Javaと同じ感じで作り直しといてネ、ヨロシク」
>>119 コーディングルールでピュアJava使えってなってるならただのアホだろw >>121 トップがKotlinへの移行を目指して次はKotlinとJavaの混在プロジェクトにするとか言って、 でも所属するチームのトップがJavaしか使わないとかいうシナリオなら、 >>119 のような事が起きたとしても>>121 の言うような矛盾はない...と思う。 そして逆コンパイルしたJavaを提出して盛大に怒られる...みたいな。 こんなことで連投してスマン
そういや print って印刷って意味だよな。もはや時代も変わり誰も印刷してないのにプログラミング言語では print で出力が定番になっちゃったな。
厳密には印字なのでギリギリ合ってる 原初のBASICのPRINT対象はテレタイプだったから印刷するという意図とはそもそもちょっとだけ違う
ブラウン管に文字を焼き付けるから print 無理があるな。
kotlinの文法ってちょっと省略しすぎだし、やりすぎじゃねぇの・・・ C#の方がバランス取れてるわ。
>>139 具体的にはどういう文法のこと言ってるの? 抽象化と少ないコードが正義な昨今の風潮ではこういう文法が受ける 本当にこれで良かったのかは後10年ぐらいしたらわかるだろう
>>140 どれがとは言いにくいけど>>139 の言いたいこともわかる気がする。 個人的にはコンストラクタをクラス宣言に書けば、フィールドやコンストラクタの宣言を省略できる仕様とか。 2つ以上のコンストラクタを定義したり複雑なコンストラクタを定義しようとするときの表現に一貫性がなくなったと思う。 フィールド(Kotlinではプロパティだっけ)の記述場所もクラス宣言と本体にバラバラの配置になるし。 Javaにしとけばいいのかもしれないけど、null安全に書いてみたいと思って使っている。 あとwhenがお気に入り。 これはこれで同じこと書いてる感がん〜って感じではある class MyData(name: String, age: Int){ val name = name val age = age } 引数にval書けちゃうことでの「見かけ一貫性の破れ」と「引数もチェックしなければならなくなったという手間」は肯定する
というかあれはdataクラスを便利に書くためだけのギミックな気がするぞ しかし言われてみれば視線的にめっちゃ遠いのはその通りだな、家のやつは今度使わずに書いてみるか
KotlinがNull安全といっても結局、Javaなどの使用するクラスライブラリがNull安全じゃないからな。 Kotlinだけで閉じてればいいけど、Kotlin最小限のライブラリしか用意してねぇし。どうすりゃいいんでしょうか?? 「!!」演算子積極的に使えばいいの?
うん。自分のメソッドはNot Nullにしてるけど、その実装で結局、Javaのクラスが絡む事多いから、 その実装部分で「!!」連発してるんだけど、なんだかなぁ・・・・・
ぬるぽが出そうならトラップするという記法がKotlinにはいくつもあるだろそれ使え chackNotNull(nullable){ "ぬるぽだけは阻止しましたが例外で落ちますさようなら" } nullable?.aaa?.bbb ?: throw RuntimeException("エラーとぬるぽって死ぬ点で大差なくね?") when(){ nullable == null -> println("おかあさんに言いつける") isSomeState -> nullable.xxx.yyy // 文脈上nullが来得ないので ?. で書かなくていい }
ああまた空whenに()つけてる 毎回間違って毎回IDEに文句言われるんだよなこれ
>ぬるぽが出そうならトラップ ぬるぽが出そうというより、Javaのクラスから返される型は「型名!」ってAndroid Studioを 表示されてて、この型ってNullableの「型名?」と同じでNullチェックしないといけないと思ってて 「!!」連発してたんだが、これ違うな・・・ 「型名!」ってNullチェックしなくてもいいのか・・・ つか、言語仕様上どんな扱いになってんだこれ・・
>>60 で質問したときに、>>61 で答えてもらって ただのIDEの表示上の事なんだと思ってたが違うのか?? T? と T or T? は違うよ Nullableかどうかすらわからない後者の場合はnullチェックしなくてもコンパイルは通るよ 「だってそれはNullableではないから」 まあ、そしてぬるぽが出るんだけども Kotlin的にはnullチェックは不要だけどIDE的にはnullが入りうることがわかってるので気を付けてね! の ! だ
>>155 ありがとうございます。 Platform Typesについてしっかり読んでませんでした。そこに色々書いてありましたね。 >T? と T or T? は違うよ T or T?がプラットフォーム型というやつですかね。で、プラットフォーム型ではNullチェックが緩和される って書いてありましたね。 T? と T or T? は同じと勘違いしてました。要はT or T?か分からないから、よりたくさん表現できるT?として扱えばいいし、 そうなってるのかと勘違いしてました。
つか、デバッグしてて思ったけど、C#のusing (resource)やlock文に相当する言語組み込みの 文がkotlinにないのがちょっとめんどくさいよね。ステップオバーで順にどんどん進めねぇじゃねぇか・・ inputStream.use { // いちいちここにブレークポイント設定しないと・・・ }とかだと、実態は関数呼び出しだから、ステップオーバーだと、内部のブロック飛び越えちゃう・・
ああ、ステップインで行けたね。ステップインすると、最初useなどの拡張関数の方にぶっとぶかと思ったけど、 自分のブロックの方に直接飛べるのか。 まぁ、オーバー・インを切り替えるのひと手間だけど、まぁそれぐらいなら。
正直、AndroidのJavaの代替としてKotlinを使うなら、Android Studio 3.0でJavaで全APIレベルでラムダ式が 使えるようになったらしいし、後、Javaにvarなどのローカル変数の型推論あたりがくれば、Javaでも いいかなと思うが(async/awaitもほしいけど)、Kotlin for JavaScriptの存在を知って、 ちょうど、JavaScriptとかスクリプト言語を本格的に使った事なく動的型付け言語使いたくない自分にぴったしだと 思ってKotlin覚えてみようかなと思ってきた。 Kotlin,JavaScriptでググってもあんま引っかからんけど、TypeScriptとかにとって代わったりしそうじゃねぇか??
>>161 > Javaにvarなどのローカル変数の型推論あたりがくれば それ実現されるまでまってられっかよ Haxe(ヘックス)はOSSで、JSに型チェックを付けたような言語で(altJS)、 JS(ES5), Flash, PHP, C++, Java, C#, Python, Lua に書き出せる。 Windows8.1対応。IDEは、FlashDevelop このサイトで、ブラウザでプログラミングして、実行できる Try Haxe ! try.haxe.org/ Kotlin = Java + Groovy Haxe, Kotlin, Ruby をやると、他の言語がクソに見える
>>163 言語がどうのこうの言ってるうちは、まだまだだよ。 kotlinから始めたら挫折して、 結局Javaの勉強再開しました。 何個かアプリ作れるようになったけどまだまだ。 Java覚えたらkotlinまで追いつきたい。
Javaで動くアプリ作れてKotlin書けないってのもわりとレアケースだと思うのだが(完全に全くJava以外の経験がないとか?) まあ個人の進度に文句もないしKotlinはしばらく逃げないので焦らずお好きにやっていただきたい
>>167 Javaの勉強途中でちょうどkotlinが盛り上がってて、 両方覚えられる!と欲張った結果、 なんか情報も少なく、混乱して挫折。 とりあえずJavaで慣れたらkotlinもやってみます。 Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
プログラミング言語初学に向かないのは多分間違いない
C#のusingもJavaのtry-with-resourcesもkotlin.io.useも気に入らない GCだからC++やSwiftのようなデストラクタまでは無くてもいいけど せめて use val xx = ... のようにキーワード付き変数の場合に スコープアウトでcloseする構文を用意して欲しい 後処理の指定ごときでいちいちブロックスコープ増やすなと
>>172 中括弧省略すればブロックスコープ増えないし、ほぼそれと同じ構文で書けるやん そーゆークラスを作ればいい 内部的にはそうしてても使う側が意識しなきゃそれでいい
StackOverFlowで「○○するにはどうすればいいですか」に対して 自作の20行くらいの関数返して「こうすれば1行で書ける」とか言う回答者みたいだなw
例えばこれを openCamera(id).use { dev -> dev.video().use { vidIn -> File(dstPath).outputStream().use { output -> val vidOut = videoWriter(output) vidIn.eachFrame { frame -> filter.write(frame, vidOut) return checkContinue() } } } } このように use val dev = cameraOpen(id) use val vidIn = dev.video() use val output = File(dstPath).outputStream() val vidOut = videoWriter(output) vidIn.eachFrame { frame -> filter.write(frame, vidOut) return checkContinue() }
次点で、golangのdeferのように val dev = cameraOpen(id) defer{dev.close()} val vidIn = dev.video() defer{vidIn.close()} val output = File(dstPath).outputStream() defer{output.close()} val vidOut = videoWriter(output) vidIn.eachFrame { frame -> filter.write(frame, vidOut) return checkContinue() } としたい usingやuse関数での書き方が駄目とまでは言わないが俺は気に入らない
そういやjetbrainのIDEってjavaで出来てるんだよな。 kotlinで書き直されたりしてんのかな。そのへんどうなの?中の人とか?
>>176 >>177 純粋な興味で質問するんだけど その書き方で各段階のデバイスオープン不可だったとき対処できる言語ってあるの?try-catchで括っておくとかなのかな。 >>176 の下の書式は最初のデバイスがヌルが返ってきたときに雪崩式にハングしそう。 >>177 は最初にデバイスクローズして下に流れたらどうなってしまうのか。 try-with-resourcesみたいに「ここでリソース開いてるしエラーも起こりうるぞ!」って明示してくれるのが好き
文句の本質的には「ブロックネスト深すぎて見かけの空白多くてキモい」ってだけだよねコレ まあ見かけはかなり重要なのだが どこでcloseが起こるかわかるほうがいいとは思うけどな ブロック深いのとは別件な気がする
>>180 3例とも同じ動作想定のサンプルコードだよ オープン不可はnullでなく例外、どこで例外が起きても開いた分はcloseされる >>182 そう、キモいってだけ 実行のタイミングと順序は厳密に決まるからどこでcloseが起こるかは分かる closeの仕掛けとブロック増加が不可分なのが気に入らないという話 kotlinはまず開発環境をもっと整えてほしいわ。 特にVisual Studio Codeで無料の拡張プラグインを。 JetBrainはIDEを打ってる会社なのかもしれんが・・
>>184 すまんそれがどう「ほぼそれと同じ構文」に繋がるのかイメージ出来ない >>176 の例だとどうなる? forを読めるが書けない これだけが毎回全く覚えられない(あの形式はレガシーであって何の意味もないと思う) イテレータでいいと思うのだが、Rangeはなにやら遅いとか言われてて憂鬱だ
>>178 ,185 誤 : JetBrain 正 : JetBrains >>189 ifの中括弧省略と一緒と聞いて本当にわからないのであれば重症やな >>191 煽ってくる意味が分からない 具体例を示すだけだと思うんだが・・・ >>176 はそんなにopenとcloseをしないといけないのはクラス設計に問題があるのではないだろうか。 そこまでしないといけないことが頻繁にあるケースはまれだと思うので、拡張関数を定義して解決しては。 あと、個人が気に入らないと思うたびに構文を増やしたらC++みたいになるのは歴史が示すところかと。 >>173 Kotlinでは>>176 のケースはif式のように{}を省略することはできないような気がするのですが。 省略できても見かけのブロックがなくなるだけで、多重ネスト構造なのは変わらない気がする。 >>191 俺も分からないので是非書いて欲しい。 こちらはKotlin学習中なので重症ではない。単にわからないだけだ。 >>177 File.open(ファイル名) do |file| 処理 end Ruby では、File.open()に、クロージャの実装である、ブロックを渡すと、 close()する必要がなくなる。 自動的に内部的に、例外処理で囲んで、finally で、close してくれる たいていの言語で、そう JVM版とNative版など環境がいくつかあるけど、標準ライブラリは基本共通なの?
未対応なので回避策とるくらいしか val fa = {n:Int -> f(n) } val fb = {n:Int, s:String -> f(n, s) }
あ。未対応だったのか。どうりでいくら調べても見つからないと思った。 それならそんな風に書くしかないね。
>>200 おー。なるほど。ありがとう。 まあでも自分でシグネチャ指定して振り分ける感じに書く必要はあるということだね(Cでの関数へのポインタみたいなもんだからそうならざるを得ないか)。 あるメソッドの中の処理を切り出して作った1行系プライベートメソッドってあるよね 親メソッドの前に書いたほうがいい? 後に書いたほうがいい? 親メソッドに長いJavaDoc、または長めのコメントがある場合、前に書いちゃうとプライベートメソッドが離れちゃって見難い/醜いよね // subするメソッド private fun subMethod() = ... /* * メインなことをするメソッド * がんばってつくりました * 3行も説明書いたのでボーナスください */ fun mainMethod(arg: SomeObj){ ... } そういう意味ではメインのあとに書いたほうがいいんだけど、親メソッド読んでる最中に見たことないメソッドが出てきちゃって「ん??」ってなるよね fun mainMethod{ ... ....subMethod(...) ← えっコレ何? } private fun subMethod() = ←定義ここかよおせーよ Java書いたことないからこのへんの作法わかんないんだけど、なにか傾向とかあるのかな
IDEの機能で定義に飛ぶから別に気にならない ソースファイルを上から順に眺めていくってあんまりないなあ
どっちでもいいけど自分は後ろ。 定義なんてIDEでジャンプできるんだしどうでもいいでしょ。
>>206 subMethodのKDocをしっかり書いておけば、ジャンプしなくてもマウスオーバーで 何をするメソッドかわかるから後置でいいのではと思う。 戻るのはデフォルトだとたぶん Ctrl+Alt+左 定義に飛んでその後戻るのをキーボードで素早くできるようにしとかないと作業が捗らんから、 おれはどんな環境でもAlt+ピリオドとAlt+カンマにカスタマイズする たまにカスタマイズできない環境もあるが
>>206 F4ではなくCTRL+マウスクリックじゃない? F4 は "Jump to Source" で、Ctrl+Button1 は "Decraration" だね 両方とも定義へ飛ぶけど、定義を選択して操作したときに "Decraration" のほうは使用箇所へ飛ぶメニューがでるね おれは間違えて押したときにメニューでるのが面倒なのでキーにカスタマイズして使ってるのは "Jump to Source" の方 使用箇所へ飛びたいときには Find usages を使うし
あー F4でjump to sourceし CMD+F4 (Macの場合)でタブクローズすればいいんじゃない あと、quick definitionってのもある
vimのプラグイン入れてるけどcommand+[ですぐ戻れる
基本はそれですね、開いたタブを同時に閉じたい場合はcloseかな
Jump to SourceとDecrarationの違いを、もうひとつ見つけてしまった DecrarationはAndroid環境だとリソースIDからレイアウトXMLへ飛んだりもできるのね Jump to SourceだとリソースIDそのものの値を定義してるファイルに飛んじゃうので意味無い やっぱデフォルトはDecrarationにしよう・・・
haskellとか知ってると、まず宣言的コードがあって実装はあとからついてくるコードスタイルでも違和感はない。 トップダウンで見るかボトムアップで見るかの違い。
まあ、IDEさまさまなところはあるにはある IDEがなかったら全然違っていただろうなと思う事象は多い
IDEってEclipse?AndroidStudioのベータ?
JetBrains製以外のIDE使ってる人居るのかな Vimは居そう
>>217 そら第一候補はIntelliJでしょ ≒ Android Studio Eclipseとか原始時代の道具をまだ使ってるやつがいるのか
ん?でも Linux でも IntelliJ 使えるよ。
ああ。まあ。確かにviってかvim使う方が多いが、さほど困らんなあ。
リモートデスクトップ経由でLinuxのIntelliJ&Android Studio使ってうっひょーって言ってるよ Emacsのkotlin-modeがぜんぜんイマイチなのはIntelliJ IDEAのせいではないかと思っている
>>226 IDEAがあるせいで他がしょぼいというより、Kotlinの歴史の浅さやまだゴミのようなシェアの割にはIDEAの出来が良いんだろ Kotlin自体がJetBrainsによってIDEAで使うために作った言語なんだから当然 Kotlinはidea以外の環境を最低一つサポートしろよな。自社でIDEを売ってるからやだとかはやめてくれ。 VisualStudio Codeかatomのどっちかの軽量環境は最低どちらかサポートしろよ。
言語提供側がすべきなのは処理系の提供であって IDE云々で文句を言うのは筋違い
それは処理系に言う筋合いのものではないが。 最近のエコシステムに慣れすぎるとそう言いたくなるのはわからんでもないが。
使う側からしてみれば、言語提供側だろうが処理系だろうがどうでもいい。 ユーザーにとって使いやすくしたいとおもってて、他がやらないなら 最終的に言語提供側が提供すればいいだけだし。
もちろん、JetBrainsの開発リソースも限られてるが、そんなの使う側からしたら それもどうでもいい。使いやすければユーザーが増える可能性あるし、使いにくければないだろう。 ただそれだけ。
>>235 1行目からして意味が分からん 処理系が何か分かって書いているのか? >>237 ごめんごめんww 「処理系」に関してはそれは完全にとちくるってた >使う側からしてみれば、言語提供側だろうが処理系だろうがどうでもいい は >使う側からしてみれば、言語提供側だろうが言語提供側以外だろうがどうでもいい あたりでw
時代はジェットブレインなんだよ MicrosoftのVisualStudioとかいう原始時代の道具は時代遅れ
Kotlinで文字列を返すenumを使うときは、 やっぱりJavaと同じようにnameとかtoStringを呼ばないといけませんか? 例えば↓のようなenumがあったときに enum class Name(name: String) { Foo("foo") } "foo"を使うときはこうすると思います val name = Name.Foo.name() しかし、name()が気に入りません。↓のようにはできませんでしょうか val name = Name.Foo
>>240 骨董品UNIXより常に20年先行ってる。 >>241 MS製JVMは性能が良すぎてみなそれを使うようになり、Sunに訴えられたから捨てたんだぞ。 >>243 Name.Fooがenumのメンバーを返さないのなら、enumじゃなくてもいいのではない? 今やUnix向けの開発者も揃ってVSCodeだもんなあ 開発環境ではMSには敵わないよ Kotlinは遠からずVSCodeに持ってかれるだろうけど、そうなったらJetBrainsはどうするんだろうね
アホすぎ ジェットブレインの開発環境を使ってないのは IT後進国の日本だけだぞ
>>249 そうかもしれません Kotlinで文字列の定数をまとめて扱うにはどうするのがベストですか? >>250 > 今やUnix向けの開発者も揃ってVSCodeだもんなあ を3回くらい読んで何を指してるのかなんとなくわかった サーバサイドのスクリプト言語プログラミングもVSCodeで行われることは増えた EmacsでFTPやらSSHやらして一生懸命書いてた頃とは隔世の感はある (いや、まあ、ぶっちゃけるなら、Emacs+xx-modeがVSCode+プラグインに置き換わっただけではあるが) VSCodeはElectronを捨てることができた瞬間に勝利が確定する >>250 資金力ではMSに太刀打ちできるはずのないJetBrainsはGoogleに買収されるべきなのだろうか。 >>241 むしろMSはJ#の時代から.NETさらには最近のXamarinの買収まで一貫してJavaに敵対的だよね。 >>228 めでたい。 >>253 捨てたらもうそれVSCodeじゃない気がw >>252 Javaからの見え方を気にしないのならこれでもいいかな? object Name { val Foo = "foo" } >>256 なるほど、これでいっぱいval書いたら良さそうですね ありがとうございました IntelliJをバージョンアップしたらSpekテスト設定のSpec欄ヨコのSearch by Nameが動かなくなった これまではモジュール適当に指定したら勝手に探して候補出してくれてマウスぽちぽちで済んだのだが、なんかspec欄を自力入力で埋めないといかん それともこれは普通は使わない所だったのだろうか
多分日本で俺だけだろうけど、 Kotlinの公式PDFはフォントのAlignがずれてて 読み始めて1分しない内に直視に耐えられなくなってしまう…。 直そうと頑張ってみたが有料ソフト使うしかないみたいで諦めた。 しかし治ってたら嬉しいなと定期的にダウンロードし直してしまう。
"sourcefiles"という名の.ktソースファイル名一覧ファイルを作り、 kotlinc @sourcefiles を走らせると、 error: source file or directory not found: @sourcefiles が画面に表示されてしまいます。 javac @sourcefiles scalac @sourcefiles に相当する機能はkotlincには無いのでしょうか?
質問の答えは知らないので他の人に任せるけど ビルドはkotlinc直よりGradle使うことを勧める
またそんなこと言って。 あなたはいつも他人任せね。 いいかげん私も待ちくたびれちゃうわ。
>>262 正しい 可能ならIDE使って欲しいけどね いまはgradle安定 Gradle, Vagrant は、yaml, XML, JSON のような、単なる設定ファイルではなく、 それ自体が、Groovy, Ruby の、クロージャ・ブロックで囲まれた、 スコープを持つソースコードであるから、変数宣言や処理も書ける
リアルの女と接点がなく、妄想で女はこうだろうと決めて話してるのがわかる 昭和生まれのジジイですわ
Kotlin Advent Calendar がAndroid以外の話題多めだな ここでナチュラルにIntellijIDEA の話題だしちゃったけど Android以外の人も IntellijIDEA を買って使ってるのかねえ?
KotlinはAndroidが対応したってだけでそのためだけに使う人は少数派やろ
いやあ、しかし楽にはなりそうだからねえ、流行ると思うけどねえ。
>>260 Adobe readerじゃダメなの? cmで始まってdpで終わってるからどこかのレビューページから飛んだURLだと思うんだが なにもしないとcm_cr_dpなんだけどな cpが入ってるってことは「この商品を見た後に買っている」を1回表示してるのかもしれない
cm_sw_ ... _dp はシェア用URLの生成形式だね ツイッター用ならcl_twで超わかりやすいんだがr_cp_epはなんだろう
>>284 それはわからんが>>278 のリンクはAmazonで「シェアする」のリンク使って出てきたURLだよ。誰がやっても同じになると思う。 lateinit var value: Int って書いたら'lateinit' modifier is not allowed on properties of primitive typesのエラーになるんですが、 どう書き直したらいいんでしょうか var value: Int? = null って書いて、 if (value == null) { value = initValue() } ってするしかないんでしょうか。
プリミティブ型にlateinitは必要ないからつけられない
>>288 試してないけど var var value by { var value: Int } ではだめ? >>290 ペーストに失敗したorz var value by { initValue() } >>291 自分はスタートブックを推す。 Javaを知っていることを前提としない入門書の存在を自分は知らない。 >>292 慌てて修正したらlazy落としていたorz orz var value by lazy { initValue() } 連投申し訳ない。これで違っていたら目も当てられんが、それもすみません。と誤っておきます。 >>291 Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016 一番良いもクソも無い。 この1冊しか出ていないだろ アスペは質疑応答解説に使えねーなーもう >>288 なぜlateinitを使うかというと「初期値というものがうまく定義できなくてうまく初期化できないから」だ ※実際にはjavaでprimitive typeであるものはnull代入できないからという理屈なのだが知らなくていい Intとかは0とか-1とかで初期化できるだろ、最初にvarで0や-1入れとけ Nullableもnullで初期化できるからlateinit使わずにただのvarでnull入れとけ で、どーしても遅延初期化を使いたいなら var value: Int by Delegates.notNull<Int>() とか書くと形式上遅延初期化になる。むろん二度手間だが、遅延初期化という目的は一応達成される こんなごっついことせずに素直に0とか入れておいたほうがいいんじゃねーかなと思った感覚は正しい。0入れとけ0 あとはちらっと出てたけどby lazyで val value: Int by lazy { initValue() } と書くことでも一応達成される。こっちだとvalで書けるので好まれることが多いみたいだね 長澤太郎の本に書いてあるけど、 lateinit は、DI(Dipendency Injection)か、ユニットテスト時か、 フレームワークが自動的に初期化すると、不都合な場合に使う
>>306 でもCの方が有力って書いてあるね。Cは何で増えんたんだろう。 >>308 デフォルト値はコンパイラが定義参照してるだけで、 型にもインスタンスにも持って無いから変数に入れた時点で使えないよ fun f1(n: Int=1) { print(n) } val f2 = ::f1 f1() //OK f2() //コンパイルエラー Cが必要なレベルの仕事の割合自体は 減ってるはずなのに…謎だ
Cでググってもノイズが拾われてくる率が高い 他のCと間違われてるんじゃないのか
Cの半分はC++という時代があったからな Cの半分はC#とC++ということでも不思議はない C sharpならC#確定なのだが
C++はcocos2dやUnrealでのゲーム開発とかあるけどCはなんだろうな 廃れることはあり得ないけど
機械学習とかロボティクスとか自動運転とかがメディアで取り上げられるようになって学生にプログラミングへの関心がいっそう高まって教育現場での採用が増えてるのかもしれないな 就職にも有利なスキルだろうし もともと人気の高い言語だし本格的なプログラミングの登竜門的な立ち位置の言語でもあるし
検索エンジンで+"C programming" で検索した結果参照してるだけだからな 単にデータとしてうんこオブうんこだ githubやstackoverflow読んでるIEEEのランキングのほうがなんぼかマシ
Javaの無名スコープを表す構文が無いことから調べていってみたけど 色々と良く設計されてると感心した 構文が無い代わりにrun関数がある ラムダ生成コストやブロック内でのreturnが気になったけど inline関数に渡すラムダはそれごとインライン化されるため コストも無くreturnはちゃんと呼び出し元関数から抜ける そうするとinlineでない関数にラムダを渡す場合のreturnとで 区別出来なくて危険かと思ったけど inlineでないラムダではラベル無しreturnが禁止されていた returnにラベル必須だと面倒ではと思ったけど 最後のステートメントが戻り値になる仕様だからむしろ楽だった
■Java int f(){ { String a = "a"; if(a.length() < 10){return 1;} // fから抜ける } return 2; //ここには来ない } ■Kotlin fun f(): Int { run { val a = "a" if(a.length < 10){ return 1 } // runでなくfから抜ける } return 2 //ここには来ない }
fun fcall(f1: () -> Int): Int = f1() fun f(){ val a = fcall { val a = "a" if(a.length < 10){ return@fcall 1 } //ラベル付き else { 2 } //returnキーワード無し } }
マップの値を条件判定に使いたいんだけど、Nullableをどう扱って良いのかわからない... val map = mapOf<String,Boolean>("hoge" to false,"fuge" to true,"piyo" to false) // ↓こんな感じで書きたいが、Nullableなので怒られる if (map["hoge"]){/*処理*/} //---------- 解決策 ---------- // @強制的に!!でNotnullにする。でもなんか気持ち悪い。 if (map["hoge"]!!){/*処理*/} // Aエルビス演算子を使う。しかし、IDEからBの書き方を提案される if (map["hoge"] ?: false){/*処理*/} // B凄いバカっぽい。ていうか、これOKで一番上ダメなんだ... if (map["hoge"] == true){/*処理*/} なんか、どれもしっくりこない。どうするのが正解なの.... 誰か教えて!お願いします!
if (map.getOrDefault("hoge", false)) { ... } とか。 うーん。なんか変だね。mapOf では nullable かどうか判定しているのに get 時には nullable かどうかの情報が抜け落ちているような。
知らんが、kotlinみたいな言語だとキーが無いときの処理を適当にごまかすわかにはいかんだろ
>強制的に!!でNotnullにする。でもなんか気持ち悪い。 >if (map["hoge"]!!){/*処理*/} そもそも、map は、そのキーが存在しない場合もあるのが、当たり前だろ。 そのキーが存在するかどうかを、チェックするメソッドもある 君が仕様・設計を考えるんだ。 1. そのキーが存在した場合の処理と、 2. 存在しなかった場合の処理 初心者は、強制変換の使い方をわかっていないのだから、!! を使うな
>>325 +1 「知らないキーでmapに問い合わせたときの結果はnullになることがある」問題をコード的になんとかする必要がどうしてもある これは本当にどうしようもないので、どっかでKotlin(実際にはIDE)に知らせる面倒を許容するしかない ポイントとしては面倒でも一旦変数にぶち込むこと。これですべてうまくいく // checkNotNullの書き方だけ覚えればいいので最近全部これで書いてる val mapValue: Boolean = checkNotNull(map["hoge"]){ "map does not have key:<hoge>" } if (mapValue) { doSomething() } // またletをそんな用途に使って map["hoge"]?.let{ doSomething() } // 考え方がJavaっぽい(偏見)変数に入れないとnullチェックした履歴保持できないよ val mapValue = map["hoge"] if (mapValue!= null && mapValue) { doSomething() } // ほら、Kotlinの人はなんでもかんでもwhenで書きたがるから when(map["hoge"]){ null -> println("ぬるぽ") // なくても動く true -> doSomethingTrue() false -> doSomethingFalse() } 寝起きで書いたら!=がくっついた if (mapValue != null && mapValue) { doSomething() } まだ頭寝てるので動作チェックしてないから細かいとこは適当に直したりしてくれ >>326 安易に nullableValue?.let{ ... } を使って欲しくないのも似たような感じ 今回で言うと現在のmapに"hoge"が登録されていることの保証はどうするんだろうと思う ぬるぽ出ると追うのもしんどいわけでさ 1行で済むし動作にも影響らしい影響はないんだから脳死状態で checkNotNull(...){ "やべえhoge登録されてねえ" } とか書いとくのおすすめしたいわ map, hash は、集合の概念だから、 集合A に属するか属さないか、のどちらかの状態をとる 1. そのキーが集合A にあれば、値が取得できる 2. そのキーが集合A になければ、値が取得できない 1, 2 で、君がどういう処理をするか、仕様・設計を決めるのは君!
Bがバカっぽいと感じるのは 真偽値 == 真偽値 だと勘違いしているから 実際には2つのNullableTypeの等値比較
if(map.getValue("hoge")){/* 処理 */} これで基本的にキーが存在しないと例外に行くしシンプルだね
322です。 こんな速くレスいっぱい貰えるとは....皆ありがとう! 基本的にNullチェックは必須なんだね >>331 そういうことか!あくまで等値比較なのかー >>327 >感が方がJavaっぽい これやったんだけど、あんまりキレイな感じしないし、何よりJavaっぽくて.... >>332 そのメソッド知らなかった。使ってみます。 おまえがそう思うのならそうなのだろう。おまえの中ではな。
>>335 not false が true でない? じゃあなに? >>337 このコードだとFalse以外のAnyでは >>337 >>333 と>>335 のコードが示すように Nullable(null)もStringも真偽値ではないため falseとtrueどちらにも等値でない falseでない真偽値はtrueだが falseでない値はtrueとは限らない 「True, null」だから違和感が有って 「not false, null」なら無かったのでは >>333 リンク先のコード消えてるよ 同じ接続元・同じURLで開くと変更モードになるようだから 「新規コード」を押してから扱わないといけない \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ そんな餌で俺様が釣られクマ―― 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ
>>343 ちょまど神への信仰が不足しているか背教者ですね >>278 の本は何故か新品よりも高い中古がもう出ているw (値段のタイプミスか?) 購入者の確認不足や品切れ時にたまたま買われることを狙った有名な詐欺だよ
>>347 確かに可愛いがムネ大き過ぎ。 D,EかせめてFカップなら信者になってた。 classのdelegateってinterfaceしか出来ないみたいだけど、 classやabstractのインスタンスでdelegateできない理由をご存知の方いらっしゃいますでしょうか。 可: class SubClass(instance: Interface) : Interface by instance 不可: class SubClass(instance: SuperClass) : SuperClass by instance
もちろんSuperClassはopen指定してあります。 >>352 に答えられる人にそんな野暮なこと言う方はいないと思いますが念のため。 In Actionには「インターフェースを実装しいているなら〜」とさらっと書いていて クラスでdelegateできない理由は触れられていませんでした。 >>352-353 例えばこんな感じのKotlinコードをJavaへ変換してみればわかる interface Interface1 { ... } interface Interface2 { ... } class SubClass (impl1:Interface1, impl2:Interface2) : Interface1 by impl1, Interface2 by impl2 >>355 ありがとうございます。 interface Interface1 { ... } が open class Interface1 { ... } であったとしても、 class SubClass extends Interface1 implements Interface2 になるので、支障ないと思うのですが、どこか勘違いしていますでしょうか。 >>356 ごめん多重継承は関係無かったね 問題になるのはコンストラクタかな class SubClass extends SuperClass というJavaコードに相当するものに変換されるからには SuperClass のコンストラクタを呼ぶ必要があるけど、 でも SuperClass by instance によってインスタンスが別に渡されたらSuperClassの実体が二つになってしまう >>352 インターフェースでないと移譲が保証出来ないからでは インターフェースと違ってクラスの場合はそれが持つオーバーライド可能なメンバ全て移譲しても移譲になるとは限らない 例えば、あるライブラリがInterface, SuperClass, それらを引数に取る関数を提供しているとする Interfaceを受け取るならInterfaceとして扱うべき (内部の実装クラスへダウンキャスト出来ること等を前提とすべきでない)で、 SuperClassを受け取る場合も同様だが こちらはprivateメンバへのアクセスなども含まれていてそれは移譲出来ない >>352 abstractやclassじゃextendsになっちゃうじゃん したいのはimplementsじゃん だからOnly interfaces can be delegated toって言われちゃうんだよ >>357 の言いたかったこととは違うかもしれませんが、以下のように理解しました。 KotlinのdelegateはIn ActionではCollectionを引き合いに出しているが、 実際には、実装したクラスのコンストラクタがprivateで、 ヘルパークラスのファクトリメソッドを通じてしかインスタンスを生成できない ようなケースで力を発揮する。 コンストラクタがpublicでopenなclassやabstractの場合、素直に継承することを想定している。 In Actionの例も(共変とか反変とかを抜きにすれば)実はArrayListの継承で解決できる。 逆に、classでのdelegateを認めるとfinalなclassも継承できてしまい、 これを禁止するために規則を増やすことになる。 >>359 書き込んだ動機としては、多数のプロパティを持ったクラスを継承したい時に、 class SuperClass(val comp1: Comp1, val com2: Comp2, ...) class SubClass(instance: SuperClass) : SuperClass(instance.comp1, instance.comp2,...) とすると、かなり宣言が不格好になるので、 class SubClass(instance: SuperClass) : SuperClass by instance としたかったのです。 >>358 SuperClass内のSuperClassを引数に取る関数は、 SubClassにおいても引数としてSuperClassを渡せば正しく動作するので、 private(あるいはprotected)メンバへのアクセスがなくても、 実装可能でないかと思います。 ご指摘で理解できていない点があればご指摘いただければ幸いです。 皆様ありがとうございました。 interface InterfaceClazz{ val comp1:Any var comp2:Any fun method1() } class SuperClazz(override val comp1: Any, override var comp2: Any) :InterfaceClazz { override fun method1() { println("SuperClazz.method1 comp1:$comp1 comp2:$comp2") } } class SubClazz(instance:SuperClazz):InterfaceClazz by instance こういうのじゃだめなの?
>>361 自分が作ったクラスの場合ならそうできることは考えましたが、 他人がinterfaceを定義せずに作ったクラスでやりたい場合どうすればいいんだろうという疑問でした。 Java, C# が、interface を作った理由は、 C++ のclass の、ひし形の形になる、ダイヤモンド継承を嫌ったから ほとんどの言語は、単一継承 + interface。 継承チェーンに、同じクラスが現れると困る 親クラス ← 子クラス1・2 ← 孫クラス 孫クラスが、子クラス1・2を多重継承すると、 両方の子クラス部分に、親クラスのメンバ変数を含んでしまう 孫クラスからすると、どちらの子クラス経由で、 親クラスのメンバ変数にアクセスすべきか、ややこしい だから多重継承用に、メンバ変数を持たず、メソッドだけを持つ、interface が作られた is-a・class・継承よりも、has-a・interface・委譲の方が、柔軟性があって好まれる
複数のinterfaceでメソッド名が被ってたらどうするの?
パッケージ名とinterface名で指定するんじゃね
>>364 実装はサブクラス側でやるんだからどうもなんねーだろ delegataion 使った >>355 みたいなので Interface1 と Interface2 に同じメソッドが定義されている場合にはエラーになるけど、 SubClass で override しろって IDE が言ってくるので、それすればエラーは消える delegatation 使わないのなら >>367 が言うようにサブクラスで実装するんだから関係無いね Delegataion ってなんだ・・・Delegation ね
coroutine builderの例えばasyncの定義を見ると、 fun <T> async( context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, block: suspend CoroutineScope.() -> T ): Deferred<T> (source) ってなってんですが、blockパラメータの型が関数型になっているのですが、 型の前にCoroutieScope.とかついてるのですが、これはなんなんでしょうか??
>>371 ありがとうございます。 うーん。ややこしい。何のためにこんなのが必要なんだ・・ 呼び出される関数の方でもインスタンス(val a = A("aa"))を作って 関数を呼び出さないといけないってことですよね。 delegateってパフォーマンス悪かったりします? >>361 のような方法を試したら、目に見えて遅くなりました。 もっとも他にも色々いじった後だから、他が原因の可能性もありますが....。 エルビス式のエルビスって何ですか?プレスリーしか出てこないんですけど
と思ってググったら本当にプレスリー由来だったのね、、
>>375 調べてみたら、delegateよりも前に速度低下はあったようでした。ありがとうございました。 ?: これのどこがプレスリーなんだよ?と思った時の脳内に浮かんでいたのはサタデーナイトフィーバーの人だったのは俺だけだろうな
後はkotlinを使ってみて自分的にうらやましのは ・Null safety ・1ファイルに複数のクラス書ける ・コルーチン ぐらいかな・・
俺は ・val ・最後の引数のラムダを括弧の外に書けること ・「==」でnull考慮込みのequals()呼び出しにしてくれること
とにかくJavaと同じことをするのに記述量が圧倒的に少なくて済むのが良いわ。 一つ一つはそれこそ数行程度の違いになるけど、チリが積もって最終的にかなり短くなって可読性が段違い
Objective-Cを経験すれば大抵の言語は涙が出るほど読みやすい
>>390 現役言語じゃないからもう新たに触ることないしなあ そういえば Objective-C ってMacとかiOSで使われてるんだっけ?
いくらいい言語でも林檎様の傘下だと何されるかわからんからな 使えねーわ
Swiftはオープンソース化以降は言語開発もコミュニティベースで行われてる 頑張ってはいるようだけどいくつかの問題でObjCに戻る人も割と居るし クロスプラットフォーム系との競合もあって人気は減少傾向
Kotlinでのクロスプラットフォームは Kotlin/Native(まだベータ) と Multi-OS Engine があるけど UI部分が固有になるから React NativeのKotlin版のような UIブリッジするライブラリが生まれてほしい WebViewも手だけど
コミュニティの条件に収まらなくてサブスクリプションが要る都合でそっちは二の足 言語自体は割と好きだけど
何年か前はiOSとandroidのクロスプラットフォーム開発はいまいちすぎて結局それぞれネイティブて開発したけど、今はどうなんだろうな 最近スマホアプリさわらんからよくわからん
あ、そうだ。iOSやMacの開発にKotlin使えれば全て丸く収まるじゃねえか。 MacだけならJREあるから既に動くのかな?
Android studioはMac版もあるし当然Kotlinも使える ただ、iPhoneアプリは作れねぇ
>>406 MacとiOSはMacが無いとコンパイルすら出来ないって糞みたいな仕様が一番のネックだからな Windowsもネイティブアプリはそうだろ? 違うっけ?
Xamarin程の糞はない C#も10年前の時代遅れの言語だし圧倒的にswift,Java,Kotlinの方が人気が高いし求人も多い VS for Macはgitでブランチを切り替えたりするだけでビルドできなくなって、 クリーン、リビルド、IDE再起動、PC再起動を頻繁に繰り返さないといけなくなる欠陥品なのが糞 大体MicrosoftはWindowsPhoneのシェアを二桁取ってからモノを言えと言いたい MicrosoftがやっていることはGoogleやAppleの作ったパイを横取りしようとしているだけ MVVM前提の開発環境とか言うくせに外部ライブラリを入れないと良い感じでMVVMできないのが糞 UIは共通化できると言うわりにListViewは重くてスワイプがもたついたり画像の表示が遅かったりするのが糞 Xamarin.Formsはちょっと複雑なことしようとするとお得意のdependency serviceとcustom rendererの連発 クロスプラットフォームと言うならXamarin.Formsだけでできないことを恥じろよ WebViewなどXamarin.Formsの提供するUI部品が糞すぎて 一旦Xamarin.Formsの提供する機能で実装して糞な思いをさせられた後で Xamarin.AndroidとXamarin.iOSで計3回も同じ実装をさせられるのが糞 Xamarinなんてマイナーな環境使っている人が少ないせいでググって調べものするのに時間がかかるのが糞 qiitaやstackoverflowの情報もXamarinに関するものはAndroidの10分の1以下の投稿しかなくて 下手すると解決策が見つからなくてデザインや機能の面で妥協する結果となる 任天堂のXamarin製アプリもカブドットコムのXamarin製アプリも星平均3.0の糞アプリ認定されてる MicrosoftのAndroid向けedgeブラウザもXamarin製でなく、 Microsoft自身も糞認定して使わない糞開発環境がXamarin エンジニアもデザイナーもお客さんも全員がっかりするのがXamarin 結論としてXamarinを使うと開発工数は伸びアプリのクオリティは落ちるということ XamarinをやっているやつというのはC#の機能を使うことやXamarinを使うことそれ自体が目的化していて お客さんに良いものを届けたいという意思が存在していない ソフトウェアを作るということは価値のあるものを世の中に提供して世の中をもっといい場所にするために 行われることであるべきで、完全に自分本位でゴミを量産し続けるXamarinエンジニアは全員死んだ方が良い
>>413 KotlinもUIはJVM, JS, Nativeとそれぞれ開発しないといけないという方向性なんだよね。 マルチプラットフォームでUIもKoltinで1回書くだけで済む日は来ないんだろうか。 >>406 Gluonという会社がAndroidとiOS向けのJVM(JavaFX付き)を作るとか言っていたんだけどどうなったのかな。 ページを見に行くとあるにはあるっぽい。 使った人とかいます? >>406 Macだけなら余裕。 TornadoFXであっさり作れる。 >>418 面倒なら ・SwiftやObjective-Cで直に作る ・Cordovaなどで作る ・iPhoneアプリは諦める 詳細は該当のスレでどうぞ >>417 こんなんあるのか、知らなかった。試してみるよありがとう。 ただクロスプラットフォームのライブラリって大体最終的にうまくいかないから、つい警戒してしまうw 時間掛かって低品質のアプリが出来上がるだけクロスプラットフォーム
正式セミナーで技術より人脈なんて宣伝する糞プラットフォームは使わない
Xamarinは簡単だけど高品質かと言われると、、
実際クロスプラットフォームが最適なアプリってそんな多くないよな。 何かの画像処理をするとかそういう端末内で複雑なビジネスロジックを組まなくちゃいけないものならそこを共通化できるメリットはあるだろうけど、 サーバーサイドと通信して何かをするのがメインなクライアント系アプリなら普通にネイティブで2つ作った方が楽
APIクライアントやちょっとした処理も完全に共通化できるから便利だよXamarin Java,Kotlin / Swift,obj-cだと日付型と日付操作apiみたいな些細な部分でも違いがある C#にすると文法や基本ライブラリの粒度で共通化できる
Xamarinみたいな糞はプロトタイプ開発でしか使い道ない まともなアプリはみんなネイティブ 任天堂のXamarin製アプリもカブドットコムのXamarin製アプリも星平均3.0の糞アプリ認定されてる Microsoft自身も糞認定して使わない糞開発環境がXamarin
Unityは日本語入力の問題さえ解決すれば多分かなりの部分の解決になると思う。 なんせ画面を描くところから自力でやってるからな。 業務アプリでもポチポチ画面押すだけの物とか結構いけると思うし、実際あるんじゃないかな。
共通部分はともかくUiはそのプラットフォームのネイティブでやったほうが結局は簡単なんだよな
どのプラットフォームでもネイティヴで書いてもVとVMは普通に分離するだろ なんでマルチプラットフォーム対応で追加のコストはかからない
>>430 おう業務アプリと入力フォーム部品の蜜月性なめんあ Unityはゲームと家庭向けアプリ特化の方向性のままでいいと思うぞ >>433 確かにそうか。 社内カレンダー通りの休日がマークされる日付選択とか、営業日入力とか色々あるもんな。 >>432 すまんけどそろそろXamarinスレに帰ってもらっていいかな >>417 MOE ART って、もう狙ったネーミングとしか思えない。 今更だけど、ことりんとこっとりんどっちが正しいんだろ
XamarinをやっているやつというのはC#の機能を使うことやXamarinを使うことそれ自体が目的化していて お客さんに良いものを届けたいという意思が存在していない ソフトウェアを作るということは価値のあるものを世の中に提供して世の中をもっといい場所にするために 行われることであるべきで、完全に自分本位でゴミを量産し続けるXamarinエンジニアは全員死んだ方が良い
ことりんの記述の簡潔さが良いと言われているスレに来てC#書けなんて言われたらそりゃ嫌がらせだよ
C#の方がエレガントなコードを書けるでしょ エレガントで保守性の高いプログラムはお客にとってもありがたい お客にいいものを届けたいならXamarinだよ Kotlinの奇形じみたセンスのない文法はお客も辟易してる kotlinを使いたいというプログラマのわがままでお客に迷惑をかけちゃダメだ
C#は、.Net か Monoを入れないといけないのがウザいし JavaやKotlinは、JDK入れないといけないし、 やっぱそういう意味では、Swiftが最強やな
Xamarinスレでは相手にされないものでね ここなら最初からできる
うーん。しかし、Xamarin って本屋行くとiOSアプリ関係の本の所にちょっとしか置いてないし、 ほとんど名前しか知らないから俺には批判することすらできないなあ。眼中にない感じ。 仕事でも必要になることは今のところ全くないし。(ま、仕事で使わないと言えば Kotlin も Java も俺は使わないんだけどね)。
Xamarinに興味ないのならこのスレ来んなよカス
お前らそんなに暇ならKotlinで人の役に立つブラグラムでも書いてこいよ
ことりんはBカップ、ザマリンはHカップだそうだ。 どっちが優れているかは明らかだろう。
ある非同期関数を呼び出し側のコンテキストで実行したいのですが、例えばC#の場合 void async testAsync() { await funAsync1(); // configureAwait(false)しない hoge1(); await funAsync2(); // configureAwait(false)しない hoeg2(); } で、testAsyncをメインスレッドから呼び出しせば、hoge1とhoge2は呼び出し側のコンテキストつまり メインスレッド上で実行されるのですが、 同じ事をkotlinでやるにはどうすればいいでしょうか?? fun testAsync() : Job { return launch { funAsync1().await() hoge1(); funAsync2().await() hoge2(); } }
launch(UI)とか昔のコードみるとあるのですが、UIは廃止されたのでしょうか?
ここXamarinスレだから、そんなこと聞かれても困る
なんかスレチな話題ばっかりなんだが、コトリンインアクション買う価値ある? 本家HPのリファレンスで十分?
>>473 わからない。それは今のお前の状態によって変わる。立ち読みして自分で決めろ。 まあしかし俺のエスパー能力を使った直観によれば、多分買った方が良い。 launch(UI)のUIはcoroutine-androidの別モジュールだった。すみません。
コルーチンは実験的らしいけど Androidなら「android kotlin 非同期」とかでググってみたらいいんじゃないかな 実験的じゃない方なら「android 非同期」でJavaのやり方をそのままKotlinに
>>473-474 Kotlinイン・アクション、2017 Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016 太郎はたぶん、イン・アクションを参考にしながら、スタートブックを書いたのかな? そういう意味では、太郎本の方が有利 >>473 本家HPの英文リファレンスを読みこなせるなら、イン・アクションはいらない。 Kotlinをこれから始める人で1冊しか買えないのなら>>477 の言う通り太郎本がいい。 コルーチンっていつまで実験的扱いなんだ 普通に十分実用に耐えるんだが
>>478 サンクス じゃー、様子見するよ 立ち読みしろって言われても近くにでかい本屋ねーし、4000円越えで無駄に高いしな 標準でページ翻訳を備えるブラウザが便利 stackoverflow(英語本家)のやり取りなんかは本じゃ得られないし
Amazonでkindle版のサンプルがただで読めるよ。サンプルだからどの程度まで読めるかはわからないが。
Stackoverflowを翻訳なしで読めないならKotlinより先に英語を勉強した方が良いと思う 煽りじゃなくてマジで
全く読めないならその通りだね その場合検索もまともに出来ないだろうし でも情報を探しているときに日本語と同じ速度で流し読み出来る人以外には翻訳おすすめ
Google先生の翻訳精度も最近上がってる気がする
読めなくても文法の基礎知識があれば翻訳を修正しながら読める
最近のGoogle先生はほんと優秀で、一回全部Google翻訳にかけて、意味がわからんところだけ英文見て修正するだけでも単語調べる時間減るから、だいぶ時間の節約になる
精度が良いからって頼りきりなのは問題だよ データシートも翻訳するの?
時間節約や翻訳支援に有用性があるという程度の話に 突っかかって行く意味あるのか?
言語オタクと初心者以外本なんて必要ないような 最低限の知識は軽く公式のドキュメント読んで後は その都度覚えれば十分だなぁ 言語オタクじゃないので言語よりアプリ作るのが目的だからな
Kotlin自体より、Android SDK等のクラスライブラリの方が使いこなすの大変だわ
新しい言語覚える時は適当に評価高い本を一冊買う派だな俺は 全体像をつかむのに体系的ににまとまった本はやっぱり便利
自分の慣れた言語で当たり前だったやり方でも、他の言語ならもっとスマートに書けるとかあるからな 公式ドキュメントだとどうしても全体を俯瞰的に見るのは難しいから、自分が存在を知っている情報以外の情報に気付きにくい
ねえ // int[] sKey // byte[] wKey // int data wKey[0] += sKey[(int) wKey[1] & 0xFF] - data; wKey[1] -= (byte) ((sKey[(int) data & 0xFF] ^ wKey[2]) & 0xFF); wKey[2] ^= (byte) (data + sKey[(int) wKey[3] & 0xFF]) & 0xFF; wKey[3] -= (byte) (wKey[0] - sKey[(int) data & 0xFF]) & 0xFF; int dKey = ((int) wKey[0]) & 0xFF | (wKey[1] << 8) & 0xFF00 | (wKey[2] << 16) & 0xFF0000 | (wKey[3] << 24) & 0xFF000000; こういうのってKotlinでどう書けばいいの…
>>497 IntelliJかAndroidStudioで変換してエラーを手修正すればOK kotlinでやるならwKeyもIntArrayとかにしたほうがよさそう
普通にJavaでしょ 殆どIntelliJがやってくれる
>>497 IntelliJでunko.ktというファイルを作る そのコードをそのまま貼り付ける 終わり もとの言語知らんけどもっとマシな書き方あるだろと思う
何かの外部の処理論理をそのまま記述したって感じだな 外部の処理記述と突き合わせなければならないような場合はこんなのをよく見る 変にスマートに書き換えされてると脳内再変換コストがかかるというパターンw
>>501 なんか折角いろいろ簡略化して書けて見やすくて良いねって思うけどそういうのは融通利かないな_ あとこれ>>502 何故Byte→Short→Intを自動でやってくれないのか >>507 Javaではこれがfalseになる Integer a = 0; Long b = a + 0L; System.out.println( a.equals(b) ); コード上のプリミティブ型とクラス型の区別を排除していたり(最適化でプリミティブ型になる) 型推論を持つKotlinで数値型の暗黙の型変換は地雷になるのであえて無くしている こういうの見るとセンスねえなあって思う C#の開発者が優秀すぎた
Javaの検査例外になれるとKotlin-JVMで検査例外使えないのが辛い・・
>>508 例えば引数にByteを使う場合にJavaでは数値の明示的変換が要るのに対してKotlinでは要らないけど いざ数値と比較しようとするときには -> Java/Kotlin == -> true/error ==(cast) -> true/true equals -> false/false equals(cast) -> true/true になってKotlin側は値比較をしてくれないのはそのせいか いやでも引数に使うときや代入時には(型の範囲内なら)変換無しで通るんだから 数値比較でも比較される型の範囲内ならキャスト不要にして欲しいな kotlin初心者の質問くんはここでいいですか…?
そういや Kotlin も初心者質問スレみたいのがあった方が良いんじゃないか? 今はまだ言語そのものを知らない人が多いようなのでこのスレだけでも良いかも知れないが、何れ増えて来るだろうし。
そんなん増えてきたら作ればいいだろ このスレですら過疎すぎてxamarinに乗っ取られてるんだからこれ以上住人を分散させなくていい
Kotlinはようやく存在が知られ始めたところだし、これからよ
いやしかし特定の分野でだけではないかな。Web関係とか。 少なくとも俺の日頃の仕事では全く絡まないのでどこでよく使われているのかよくわからない。
C++でAndroid書くみたいなのは完全にオワコン?
>>531 ネイティブってこと?それだと当然CPUが違うと動かないよね。 Xamarinって確かライセンス買わないと使える機能に制限あるんじゃなかったっけ
そうか Java VMで動くC#があれば全て解決するのか
>>535 XamarinのライセンスはVisual Studioライセンスに統合されてる Communityライセンスの条件内なら無料 そうでなければ年間サブスクリプションが必要(約6万円 / 年・開発者) Kotlin だって いいじゃないか JavaVM だもの
kotlinは好きだけどJVMがなぁ・・・ て思ってる人はかなり多いと思うよ kotlin nativeに頑張ってもらって さっさとJVMから足洗ってほしい
ぼきはJavaのライブラリ使うのでJVMでもいいれす(^p^)
俺もとりあえずはJVMで良い。 気になるのはJavaScriptの方かな。
Kotlinに移行しようかとしばらく触ってみたけど、C#の方が痒いところに手が届くいい言語だな、、、
なんだかんだで膨大のJavaのライブラリとそれらのノウハウを使えるってのが大きいわな
Javaの腐ったライブラリよりC#の洗練されたライブラリの方が有り難いんだけど
>>551 >なんだかんだで膨大のJavaのライブラリとそのノウハウ それを負の遺産という >>55 バッドノウハウは要らないのと神託社に抑えられいるのがイヤン ほとんど借金なんだよなぁ COBOLと同じ道辿ってる
JAVAの肩持つわけじゃないがCOBOLと同じ道は流石にないわ
COBOLとは全然状況違うよな 分散処理のフレームワークとかミドルとか活発に開発されてるし 言語としては最先端ではないかもしれないけど、逆に最先端の言語でも優れたプロダクトを生み出してないなら大して存在価値ないし
これから終わるんだよ kotlinとc#に駆逐される
JavaVMの上でCOBOLが動くようになったりして・・・
write once run anywhereとか言われてた頃が懐かしいな
>>560 いつだか覚えていないくらい昔にマジメにそれを開発しようとしてた会社があったような COBOLしか書けないおじさんを救済するためだけの代物ですぐ頓挫したけど まあでも確かにJava言語は使われなくなっていくだろうね。 うちもJavaで作ってるシステムの機能追加なんかはkotlinでやってるし、JVMで動かすのが要件な新規のプログラムももうほぼkotlinに移行してる。 スマホは知らんけどandroid開発はもうkotlinが多いのかな?
ドロイド会議のアンケートでもkotlin使ってるひと多かったし
Kotlinを推しつつもJavaはまだ現役だと考えている しかしJava8でラムダが入ったときと AndroidがJava8に対応したときは正直「余計なことしおって」と思ったな Java6のままだったら今以上にKotlinが推されてただろうからw
しかしJavaのラムダはやりすぎだろって感じがした。
確かに レガシーJavaおじさんと現代人Kotlin使いで棲みわけた方が平和だったかもしれないね
kotlinでandroidの説明してるところなんか全然ない 先進的な一部が勝手に使い始めてるだけで普及の段階ではない、いつもながら日本は遅れてる
最近ネットに出て来るandroid周りのサンプルはほぼkotlinじゃない?
実務経験って、そもそも実務で使われてる所がまだ少なかろう。
実際DroidKaigiのセッションスライドのコードはほぼKotlinだったし、実務もKotilnである割合はかなり増えてるでしょ。 自分も実務ではもう1年くらい使ってるし。
そりゃAndroidだから増えてて当然な感じするが、世の中にはAndroidしかないわけではないからなあ。
俺は逆にandroidまったくやらんけどkotlinめっちゃ使ってるよ ローカルのプログラムでもサーバーサイドでも まだこういうのは少数派だろうけど
ああ。俺は趣味では使うよ。というか学習中なので敢えて使う感じ。Kotlinだとどう書けるかを調べながら書いてる感じ。
ながらというか、CやPerlなら仕事で何十年も使ってて間が働くからどう書くかはすぐ想像できる(Javaも趣味で20年ぐらいやってるのでなんとなくわかる)んだが、 Kotlinはそれと似たようにも書けるしKotlinならではの書き方もできるわけで、その辺のKpylin的な書き方を学習してる感じ。
うう。やはりスマホだと変なタイプミス増えるな。orz
どうせお前らrxもMVVMもfluxも分からないんだろ 失業ざまああwwwwwww
>>583 タイプミスじゃなくて誤変換 フリックは関係ない、注意力が欠けてるだけ >>585 rxとmvvmはわかる fluxがわからないから3行で説明して 今分かったんですけど、プライマリコンストラクタ宣言せずに セカンダリコンストラクタって宣言できるんですね。 プライマリコンストラクタの主な用途ってコンストラクタのパラメータの宣言とプロパティの宣言を 一緒にできるぐらいですか??用途は。 class Test(val p1: String)とか
>>594 でも、空のプライマリコンストラクタを明示的に宣言するのと省略するのでは厳密には同一ではないですよね?? だから、言葉の定義の問題にもなっちゃうけど、initブロックはinitブロックであってプライマリコンストラクタと同一視 しない方がいいとか。プライマリコンストラクタはあくまでclass Test(val p1: String)のval p1: String部分だけで、 プライマリコンストラクタはボディは持てない。 初期化はinitブロックで行うとか? Note that code in initializer blocks effectively becomes part of the primary constructor. Delegation to the primary constructor happens as the first statement of a secondary constructor, so the code in all initializer blocks is executed before the secondary constructor body まぁ、ここにはプライマリコンストラクタの一部になるって書いてあるね。
>>596 そうね暗黙の場合と違いあるから省略という表現は不正確だったごめん セカンダリコンストラクタが無い場合、暗黙のプライマリコンストラクタはpublicになる セカンダリコンストラクタが有る場合、暗黙のプライマリコンストラクタは未初期化メンバを残せる Kotlin使いがJava使いにマウント取ってる様を見てまたこの繰り返しかと思いそっ閉じ
マウント取ってるように見える?そりゃなんていうか、劣等感強すぎでは? てか一々そんなこと考えてないで自分でも使えばいいじゃん。禁止されているわけでもなし。 Java が使える状態になったことのある人が Kotlin 使えるようになれないわけがないと思うが。
ていうかkotlin使いって99%Java使いも兼ねてるだろうからマウントとるも何もないのでは
今使ってる人はそもそもJavaできるからな より使いやすくても、対立構造にはならないよな
>>557 モバイル開発は違うかもだが、業務系は極端に言っちまうとjava要員集めるっつたら使い捨て兵隊集めだよ。 Kotlin, RxJava, MVVMは基本的な必須スキルだからな 未だに実務経験ないやつは失業確定ざまああwwwwwww
>>605 兵隊だなんてでたらめ書くなよ 兵隊じゃなくて奴隷だぞ Android系の技術スレは失業だの兵隊だの低いところでマウント争ってるんだな。稼いでるやついなそう。
そういやKotlinはまだ求人数は少ないけど給与は良いって調査結果があったな 中途半端だと仕事にありつけないかもしれないな
しかしKotlinってKotlinらしくない従来のJavaっぽい書き方をしても動いてしまうからな。金を多く払う意味があまりないかも知れないぞ。
Kotlinで単価が高いのは、チームが今後Kotlinでやってけるように導入の面倒見れる人だよ >>611 が言ってるレベルの奴なんてそもそも高い単価で雇われないから 面倒みなきゃならんほどのものじゃないでしょ プログラム初心者じゃあるまいし
>>613 お前の周辺状況について述べてるわけじゃないことぐらい理解して >>612 雇う側がそれを見抜ければ良いんだろうけどね。 >>614 確認だけど職業としてプログラマやってる人たちの話って前提だよね? 小学校のプログラムの授業とかじゃなくて >>616 もういいよめんどくさい じゃあKotlinできればそのレベルに関わらず誰でも単価高いってことでええわ ラムダ式から式の外側のthisを参照するにはどうすればいいでしょうか?現状、 val this_ = this async { this_ } とかしてますけど、これ以外方法ない?
>>618 結局それが1番手っ取り早いと思うけど、this_っていう変数名は気持ち悪いから嫌 そうじゃねえだろ それを言うなら、self_ もダサい
どう書いても最適化されて同じコードになったりして・・・
>>619 ありがとうござます。this@hogeを使う事にしました val 式の外側のthis = this async { 式の外側のthis.method() } これが1番わかりやすいな
class名.instanceはコトリンではつかえないのん?
>>631 objectで宣言したクラス(シングルトン)のclass名.INSTANCEのことでしょうか? エンクロージングインスタンスの話。 クラス名.thisの間違いだった。
ラムダに束縛したいのはthisだけとは限らないしネストも有り得るので クラス外の関数として分離した場合の引数名のイメージで変数名付けてる val view = this val cal = activeCalculator async { cal.recalc() transaction { val tran = this check(cal, tran) } view.notifyUpdate() }
>>634 真面目にいえば俺もこれ。 this_とかは仮に何かしらでもう一段ネストした時に詰む。 ネストする時は、 this__ this___ this____ this_____ と、_を増やしてけば
ま、しかし、あまりにもネストが深くなるようならロジック考え直した方が良いかも
ネストは三段ぐらいまでにしといた方がいいだろうな。 その辺が迷宮の入り口だ。 Cのポインタとかも同じ。3段以上先には魔物が住んでいる。
せめて他のメソッドに切り出すくらいは最低でもやるべきだわな
androidでデータバインディングしようとして class Foo { @Bindable val bar get() = hoge.bar } とかできないの??・・・
エラー内容はThis annotation is not applicable to target 'member property without backingField or delegate'です。 どうしたらいいでしょかね
Javaでは class Foo { @Bindable String getBar() { hoge.getBar() } } で、hogeはFooのフィールド変数です。
ごめんさい。解決しました。@get:Bindable
また、アノテーションだけど。遅延初期化ではアノテーションつけれんの?しょぼーん。 @field:Transient val lazyVal by lazy {} だめか・・
いま触れてないけどkotlin-Nativeってどんな感じ? ほとんどなんでもコンパイルかけれる? 見たところLLVM通すから行けそうだけど
実用で使うのはまだ怖いけど、遊びで触る分にはちゃんと動くよ。 javaの標準パッケージが全く使えないから、jvmで動かす前提で作ってあるクラスだのライブラリだのが動かないという辛さはある。
javaのパッケージ使えないんならわざわざJVM言語使う価値なんかないわwさよなら〜
うん。はっきり言って現状ではこれを使うメリットが何一つ思い浮かばないよ俺も。
地味にアップデートされてるからJBが飽きなければそのうち実用レベルになるかもねえ
それなりの標準ライブラリはあるんでしょ?まだないの?(ないわけないか。なければ Hello world も出せないもんな)
ありがとう。 なるほどまだ様子見しとくわ Javaの標準パッケージ動かないの辛いね
この言語意味不明になってきた。 class Test { var str: String get() = field set(value) { } constructor() { str = "あいう" } } val t = Test() 普通にstrがnullになる
セカンダリコンストラクタでstrのbakcingFieldにアクセスできないの?? constructor() { str = "あいう" // これはsetter経由のプロパティアクセス }
>>656 現状でこれ使ってハッピーなことがあるなら教えてくれw >>661 意図はないけど、null安全とかいっておきながらkotlin側だけでnull入るコード書けるのまずいような気がする。 いや、プロパティの初期化方法がうざくて色々調べてたら気づいただけ。 プロパティ宣言すると初期値与えろってうるさいんだけど、うるさいのはいいんだけど初期値の与え方が val str: String = プロパティイニシャライザ プロパティイニシャライザ以外、bakcingFieldに直接与える方法ないの?? >>659 だって、初期値与えろってコンパイルエラーでるから、セカンダリコンストラクタに str = "あいう" // これはsetter経由のプロパティアクセス 書いたんだけど、setter経由のプロパティアクセスだとsetterが>>658 のようになってるって初期値実際与えられてないし・・ >書いたんだけど、setter経由のプロパティアクセスだとsetterが>>658 のようになってるって初期値実際与えられてないし・・ は >書いたんだけど、setter経由のプロパティアクセスだとsetterが>>658 のようになってるいじわるコードだと初期値実際与えられてないし・・ に修正 そういうことね 確かにこれならsetterの部分でコンパイルエラー出て欲しい気がするな 帰ったらドキュメント舐め回してみるか
>>658 lateinintつけないでコンパイル通ってしまうなら、Kotlinコンパイラのバグの可能性も... >>666 は勘違いでした。申し訳ない。 >>658 多分あまりにも悪意に満ちた常人なら間違え内容のない契約プログラミング違反だから、 そこまでは面倒を見られないということかも。 悪意の無い初心者がめちゃくちゃ書いてもちゃんと面倒見てくれるべきだと思う
null安全の導入とともに変数は宣言時に初期値を与えなきゃいけなくなって、 ローカル変数は宣言時に与えなきゃいけないけど、インスタンス変数は宣言時または コンストラクタ内で与えればOKなんだけど、 backingFieldを持つプロパティと相性悪かった?ってことかな。 backingFieldを持つプロパティはプロパティイニシャライザを与えるか、 コンストラクタ内でbackingFieldに直接初期化するという条件を付けくわえないとだめ? field:str = "あいう" // コンストラクタ内でのみ使えるbakckingFieldにアクセスする専用構文の導入が必要 か str = "あいう” // コンストラクタ内でのプロパティへの代入はsetterは経由しないとかの条件が必要
バグ相当だと思う 初期化(setter呼び出し)の有無は判定出来ているのだから コンパイルエラーにするのが難しいなら その直後にそのプロパティのBacking Fieldがnullだったら KotlinNullPointerExceptionを投げる処理を暗黙的に追加すべき
null安全の導入->非nullableのクラス型のデフォルト値なんてないから、変数は必ず初期化する 必要がある->(この再、nullable、非nullable関係なく全変数初期化するように) 未初期化の変数がコンパイラエラーにならないんて、これが言語仕様なら 仕様がクソだったってことだな(さすが、適当に作った言語ってことに)。 コンパイラのバグであることを祈ろう。
>>658 は、Test()でconstructor()が呼ばれないことについて エラーも警告も出ないことも問題かもしれない。 >>672 他 Javaで1回しか代入できないフィールドを作るのにsetterに渡された値を捨ててしまうことは 手法としては考えれられなくはないから、バグではなく仕様かも。 逆にチェックを厳しくし過ぎると出来そうなことができなくなる罠も出てくるから 完璧は無理かと。 Kotlin自体「実用的な」範囲でバランスをとったというコンセプトだし。 >>673 の一つ目は勘違いでした。 Kotlinは便利だけど、いくつかの規則は言語仕様でなく契約に基づいていて 契約違反のコードは勘違いを起こさざるを得ないと言い訳する...orz >>674 いや、この件は普通にコンパイラの仕様バグだと思うからissue上げて来なよ 一回しか代入したくないならセッターの中にそういう処理を書けばいいだけだし、 非NullableなのにNullが入る状態でコンパイルできるのはどう考えてもバグでしょ
>>673 そういう手法のときは内部フィールド側はNullableになっているべきじゃないかな 通常ケースの一つとしてnullがあるパターンなわけだから private var strF: String? = null var str: String get(){return strF ?: ""} set(value) { } setterを空にしたらバッキングフィールドへの代入は永遠にされないのでは? 外部からバッキングフィールドへの代入ってできないよね? (getterで値を変更するカウンターみたいなやつは別として)。
Nullableでないプロパティのsetterがnullの状態で呼ばれることがあるって考えるとなんか気持ち悪いな 俺の感覚だとsetterが呼ばれた時点でフィールドは初期化されていて欲しいしフィールドの初期化にsetterは使って欲しくない
>>658 の var str : String の部分を var str = "aaa" みたいに書くと var なのに str に何を代入しても 中身が"abc"のまま変化しないプロパティが完成w >>682 ワロタ 嫌な会社を辞めるときにテロとしてそういうコード残しておくイタズラとかできそう それはそうとnullableじゃないのにnullになりうるセッターがコンパイル通るのはやっぱおかしいよな そんなんする奴がいるのかって話ではあるが githubにあるkotlinのプロジェクトはissuesのリンクがないや どこに報告すればいいんだ
>>687 えぇ…これ仕様通りなん?だとしたら糞じゃね? >>688 C#はこういうこと起きないの? てか、そもそも同じような形式のプログラム作れるの? C#はそもそもnull安全じゃないから出てくること自体おかしい
8.0ではoptinでnull安全にできるようになるんじゃなかったけ。まあ、でもmicrosoftはこんなポカしないと思うけど。
完全に趣味でSwift触り始めたんだけど、ことりんと似すぎてて脳の切り替えが大変
setterがNOPだからでしょ 何もおかしくないと思うんだが
>>697 Javaなら何もおかしくないけど、これはkotlinなんですよ あー、ごめんごめん、nullableじゃないのにってことね
引数や戻り値の属性(アノテーション)としての出自でNullable (@Nullable) 型引数を持つデータ構造として出自でOptional (Optional<T>)
Optionalではアンラップが必要で、Nullableでは不要
間違えた逆だNullableは神Optionalは糞
Kotlinではnullにならない型など存在しないのだ、がっはっは
Kotlinインアクションの尼評価低いなと思ったら理由が「難しい」ってw
やっぱGroovy in Actionだろ、GradleはGrooovyなんだぜぇ
あ、Kotlin で検索したら出てきた本だけど Kotlin とは限らないみたいだな。すまん。
すまん。Kotlin の K の字も出てこないな。忘れてくれ。
Kotlinイン・アクション、2017 Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016 せっかく太郎が、イン・アクションを参考にして、わかりやすく書いたのだから、 日本人は、太郎本を読んだ方がよい
情報量はインアクションの方が多いから、わざわざ薄めた本を買う必要なんてないよ
Kotlin本といえば今のところインアクションとスタートブックの2択だと思うけど、 「難しい」って理由でレビュー評価下げるのはどうよ?と思ったんで、難しい以外に インアクションで問題点ある? バージョンが古いとか?
※716 Androidの入門本なんてAndroid搭載機種の種類と同じくらい大量に出てるのになぜわざわざそれを貼ろうと思ったのか
>>722 先に書いた通り、AmazonでKotlinで検索して出てきたため。 知らんけどkotlinのandroid入門書なんてもう山ほど出てるんちゃうの?まだjavaばっかなの?
細切れ情報を探すのはやだな。レベルも方針もバラバラだし。 良書があるなら本がいい。
まあ、AndroidでKotlin使うのは増え続けるだろうから何れ本も増えるだろう。
本は中古やで何冊かあったよ、まだ高かったけど 正直Pythonは失敗だったと思う
>>733 流行るも何もgof23パターンのうちの一つだぞ >>735 すまぬ。 どうやらボケが始まったようだ… 気にするな、禊としてXamarinのライセンス買ってこい
>>721 本を読んだけどどっちもよかったよ。 ただ読み手のスキルで理解力に差があるからそこで評価が分かれてるのかも。 IntelliJの変換機能使ってシコシコKotlinに変換してるけどstatic無いのがウザくなって来た Swiftにはあるのにー
自動変換使ったら普通にcompanion objectにならなかったっけ
自動変換してもコンパニオンにならなかったから、シコシコ変えてる
Android stuiosって糞重いのな Xcodeの比じゃなかったわ
Core i7、メモリ32GBだけど、コーディングに支障があるほど重いとは感じないかな
あ、Android StudioじゃなくてAndroid stuiosの話なのか それなら知らんわ
Android Studioはエミュレータの起動が激重
そういやエミュレータは遅いな。あれ速くならんもんかね?実機に繋いじゃうしかないか?
Flutterが話題になってるけど、Dartなんだよなあ、、
IntelliJファミリーのIDEが不自然に重い時はプラグインを疑った方が良い もしくは単純にindexingか何かをしてるだけか とりあえず2013年モデルでメモリ8GBのMBPでもサクサク動く
googleさんの本命はkotlinじゃなくてflutterのDartだったってこと?
いや、あの会社がプログラミング言語を開発するのは趣味みたいなもんだから。
有名どころだけでもGASとgoとDartとあるからな 統一しろや
なんかgoogleって統一感無いよなー。 dart捨てたと思ってたのに、このタイミングで復活させるとかさ。ならchromeに予定通りvm載せろや
>>773 それが望ましいな。まぁ、Flutter+Dartが成功したらchromeにもDartVM搭載復活とかあるかもね。 それで、JavaScript絶滅に追いやってほしいわ。 今どきの言語ならなんえり好みしないからフロントエンドからJavaScriptを絶滅に追いやってほしい。 未だにKotlinの実務経験のないやつは完全失業ざまあwww
つか、あれ、ラムダ式の中で値返すときretrunとかキーワードつけないのかー ふーんって思ったけど、制御までreturnするんじゃないのか・・ { if (条件式) 値1 その他の文 値2 } で、if文の条件式が真の時、値1が返ってreturnするのかと思ったらその後も実行されるのか・・
あれ、どうやって値返すんだよん。if else使いたくないんだけど。
>>775 jsを、撲滅ってESの最新仕様追いかけなよ。 悪くないから コンパイルエラーがでるからそこらへん適当にやっててもなんとかなったけどww。 真面目に考えるとどうなってんだこれww 今までコンパイルエラーが消えるように適当に例えば、 fun testAsync(): Deffered<String> { return async { lock.withLock { "ABC" } } } むしろ、retrunを付けると怒られたからこのままにしたけど。return@asyncってラベルつけるればいいのか。 ラベルつけない場合はどうなってんだこれ。
inline の場合は return の意味がちょっと変わっちゃうんじゃない?
後、 https://ideone.com/RIMEHi で、 val t = Test() t.update() にすると、propertyが変更されないっぽいんですけど、なんででしょうか?? Android環境でコルーチンを使ってます よろしくお願いします。 あれ、そういや、>>787 でfieldってラムダ式の中から変更できるの?? え、Androidやろうと思って今ならKotlinかなって思って調べてたのに。
>>787 Androidやコルーチンであることは直接の関係が無く インラインでないラムダとprivate setの組み合わせが影響しているようだ https://ideone.com/aLit2X ↑これの「4」が出力されるケースと同じでsetの処理を通らずに バッキングフィールドに直に代入されてると思う バグか仕様か断言はしないけど、多分コンパイラのバグじゃないかな >>791 うぉぉ。ありがとう。コルーチン関係なかったのか。 まだ、インラインとか勉強してなくてさっぱりだけどw この前の>>658 も俺だし、 真面目にkotlinで開発しようと思って2週間ぐらいでこのザマとか なんなのkotlinの品質。笑えないな。 そうだよね。俺もちょっと前というか昨日もそうだけど、>>787 のまた変な動きに出くわして さすがにうんざりしてIssue Trackerのぞいたけど、前のも報告されてないっぽいよねww つか、前のやつは単なるコンパイラのバグですまされない仕様修正とか入りそうな予感してるんだけど。 まぁ、現状の仕様ってのがなんだかよくわからんけど。 コンパイラのバグはバグとして直すのが当然だけど この前のバッキングフィールドの初期化回避や setter内のインラインでないラムダからバッキングフィールドにアクセスするのを 普通のアプリ開発として書いているのなら止めた方が良いと思う 個人的な感覚では動作以前に「コンパイルが通るべきでは無いコード」だと思うので
仕様がないとバグかそうでないか判断できないが仕様はどこにあるんだ?
kotlinで3000行くらいすでに書いちゃったけど、とりあえず、private setをpublic setに直して回避・・ しばらくflutterで遊んでくるか
>>658 のコードなんかは誰も書かないから発見さえされないし報告されてないんだろうね これからプログラミング初心者がkotlinを触るようになったらそこらへんも色々見つかるだろうね 今はまだほぼ他の言語で経験のある人しか触ってないでしょ
他の言語っていうか、java本業の人しか触ってないでしょ Androidの入門書もまだほぼjavaばっかだし
コマンドラインから何も引数付けずに kotlinc 実行するとRPELで動くけどこの時に :help で出てくる :dump bytecode ってなんなの? 名前からしてバイトコードをダンプするであろうことはわかるけど、いつやっても何も出ないんだよね。
C#のnameof演算子だと、コンパイル時に評価されますけど。 kotlinのプロパテイ参照は結構オーバーヘッド高いですかね?? when (propertyName) { ::property1.name -> ::property2.name -> } 結構頻繁に評価されるコードなんですよね
今は定数でやってんですけど、まだ書き換えるべきが保留してるんです。 when (propertyName) { "property1" -> "property2" -> } リフレクション絡みのオブジェクトも普通にGC対象?で、その都度生成されたり破棄されたりすると予想しますが。 もちろんアプリ全体のボトルネックになるぐらい影響はないですけど、うーん。踏ん切りがつかん。
>>810 ありがとうございます。そうですね。プロパティ増やすたびにEnumの定数も定義する必要がありますが、 パフォーマンス的にはいいですよね。 で、今ちょっと見たことなかったんですけど、Javaのバイトコード見てみたんですけど最適化されてるのか?? メソッド呼び出しされてるのかと思ったら、定数値に置き換えられてました。 最適化のせいなら将来のコンパイラでどうなるかわかりませんけど、とりあえず、普通にプロパティ参照使って 置き換えてます。 ありがとうございました。 でもそれ結局今日も同じメニューになるよな たまにはやよい軒行きたいわ、遠いけど
すまん誤爆した Xamarinのライセンス買ってくるわ
やよい軒の鳥カツ定食なくなったらしいな あれしか食わなかったのに
waitとかマルチスレッド機能ぐらい用意しとけよー 結局java.lang.Objectから離れれられんじゃないか
逆に言えばJavaの機能で出来ることをわざわざKotlinで独自に作り直す必要ってあるかね
クロスプラットフォーム押していくなら、Javaからある程度離れて開発できないとな。 Kotlin=JVMなら別にいいけど。
flutterがKotlinでできるようになったら流行りそうなのになー
それが一番だけど、そうなるにはそうなるにはJetBrainsの対応待ってると時間かかりそうだから、 Google買収しないと。IDE全体抱えてもあれだからkotlin部門だけでも
>>822 機能的に同じでも、より簡潔に書けるなら価値ある ゆくゆくはそうなっていくかもしれないけど、まずはJava完全互換を徹底して開発者を集めないとKotlin自体終わっちゃうし
日本のことりん本の電書、固定レイアウトなのか・・・
ことりん本に限らず図表の多い専門書は基本固定レイアウトが多い
超初心者で申し訳ありません。 Kotlinスタートブックを購入しました。 REPLを多用してるのでAndroid Studio3.01のREPLで進めたいのですが、 単純に、Kotlin REPLパネル内に、書籍のコード〜 じゃ無いようで、今一つ、Android StudioのREPLの使い方が分かりません。 Android Studio3.01のREPLで、「Kotlinスタートブック」をスターと部分だけでも紹介してる情報なありますでしょうか?
あれこれして 書籍 P28の最初の一発目 class Rational(val numerator: Int, val denominator: Int) val half = Rational(1,2) half.denominator と、打ち込んで 実行させたら、2って出来ました〜 Android Studio3.01のREPLを使って、読みすすめそうです。
解決したみたいだからいいけど、 技術書を写経するときはREPLよりもコードをファイルとして残しておいた方がいいと思うよ 読み進めた後にちょっと前に見たところを戻って書き換えたりとかしたくなることが多いと思う
>>833 んなこと言うならテストとして書いたほうがいい。 テストの書き方も覚えるし ちょこちょこバージョンアップしてるみたいだけど、リリースノートってあるのかな?
Swiftのバージョンアップは破壊的変更が多くてダルいらしいけどKotlinはどうなの?
>>834 まあそれが理想だね なんにせよ書いたものはちゃんと残しておいた方が良いわ >>835 Android studio使ってるならファイルをデバッグ実行してEvaluate Expressionするのが1番フィードバックが早くて使い勝手も良い >>843 ごくごく初期はなんか色々あったらしいけど、最近は既存のコードが動かなくなるような変更は記憶にないな。 そこらへんはJavaのカルチャーかも >>845 WantedのPython需要はやっぱAI関連なのかな >>822 少数でも信者が多ければ上位に食い込みやすいランキングに見える >>806 Androidアプリを完全にkotlinで実装するのはまだ苦労する >>851 何で苦労する? いま、フルKotlinで問題がないから聞いておきたい あ、すまん。ちゃんと読んでなかった。 入門の文脈か
ぶっちゃけ、PythonとKotlin覚えときゃ十分だよな ソース見られてもいいようなちょっとした内部処理はPythonでやって、それ以外はKotlinでやればいいし
REPLの使い方の説明ないんだよねあの本 ぶっちゃけ最初からいきなりファイル書いたほうがいいと思うわ
REPL の :dump bytecode が未だにわからん。 分かるやつは居ないのか?
githubで検索してmasterブランチのソース見たけど :dump bytecodeの対象は ReplFromTerminal 経由で ReplInterpreterが直に持ってるReplClassLoaderで ReplClassLoaderはaddClassされたものをdumpするみたい それで addClass探したら HistoryActionsForNoRepeat で ReplClassLoaderを新たに生成してaddClassしてるのしか見当たらなかった 読み間違いでなければ、addと列挙を異なるReplClassLoaderインスタンスでやってるので dump bytecodeは常に何も出ないのでは
HistoryActionsForNoRepeatで作られるReplClassLoaderは topClassLoaderと合わせて3重にネストしてるように見える ReplClassLoader (HistoryActionsForNoRepeatのメソッド内のclassLoader) →親 URLClassLoader →親 ReplClassLoader (状態によってはGenericReplEvaluatorStateのtopClassLoader) →親 URLClassLoader →親 ReplClassLoader (ReplInterpreterのclassLoader) →親 URLClassLoader makeReplClassLoaderは引数のbaseClassloaderがReplInterpreterだったら newせず引数をキャストして返した方がいいような気が
× ReplInterpreterだったら ○ ReplClassLoaderだったら
>>856 わからないことがあったらコードを読む習慣がある奴と乞食するだけのお前 どんどん差は開いていくんだろうなぁ まー、わからないことがあればコード読むのが一番だけど、読まなくても質問の仕方ってもんがあるよな
どなたかお分かりになる方はいらっしゃいませんか? だよな、普通は
>>866 医者ではなくて石屋ですが、お役に立てますか? この一言を添えるべきだったな。 「わからない人は書かないでください。」
前々から思ってたけどkotlinスレって加齢臭すごいよな
マグナムドライをマグマグドライと呼ぶほど落ちぶれてはいない
Graalって今年のJava11に間に合うのか? Kotlin/Native(LLVM)なんかよりずっと期待できそうだが。
GraalとKotlin/Nativeって用途もコンセプトも被ってないと思うんだけど LLVMの使い方も逆方向だし
Graalがどうとかいう以前に、JVMがないプラットフォームがあるのを何とかして欲しい。 ライブラリも含めてコードをそのまま持ち込んでも動くならともかく、Graalで多言語をサポートしても、 各言語の基本仕様だけでは大したことは出来ない。
run sometime somewhereだから仕方ない
Graal 世界大百科事典内のGraalの言及 【聖杯伝説】より …12世紀末ヨーロッパで顕在化したキリスト教の色濃い伝説だが,起源には諸説あり, ケルト説話を源とする考えが有力。聖杯Graal(英語はGrail)を扱った最初の作品は フランスの詩人クレティアン・ド・トロアの《ペルスバルまたは聖杯物語》(1185ころ)。 主人公が漁夫王の城で目にしたふしぎな行列,血の滴る槍と光り輝く聖杯について, 心に抱いた質問を口に出さなかった失敗がすべての発端であった。… https://kotobank.jp/word/Graal-1233958 JavaのコードをKotlinにIntteliJさん使って変換すると fun hogehoge(value: String): Int? { var value = value みたいなコードでName shadowedってワーニングがでる 仕方ないのでvar_value = valueみたいに名前変えてんだけど、どうするのがベストかな?これ以外に良い方法あったら教えて
>>887 Analyze>Inspect Code 結果窓で気に入らないインスペクションを選択しスパナアイコンから設定画面でdisableする Inspect Codeをどこをどういじったら変わるのか分からない プロファイルってやつ? 名前の通りインテリすぎて使いこなせてない・・・orz
def initialize (number) @number = number end Ruby のクラス内の、インスタンスメソッドの引数を、インスタンス変数に代入するなど、 @ の有無で、判別できるなら良いけど、 関数の引数と、関数内の変数は、共にローカルスコープで、 完全に、変数名もスコープも一致しているから、明らかな間違い
>>887 Inspectionを切れば出なくなるしなんなら無視してもいいけど、そのコードは明らかに書くべきでないからコードを直した方が良い。 引数が変数の名前を変えるべき。 受け取った値に何かしらの加工を加えて返却する関数だと推測するけど それなら引数の方をrawValueにするとか、変数の方をnewValueにするとか なんでもいいけどとりあえずそのコードは俺がコードレビューするなら絶対指摘する
Javaで a instanceof CharSequence[] してた部分はKotlinではどう置き換えたらいいでしょうか? a is Array<CharSequence> だとcannot check for instance of erased typeでエラーがでて型チェックができません。
ああ、aが実際にArray<CharSequence>のときはエラーにならないぽい Array<*>にするしかないのかなあ
if(a is Array<*>) { b = a.filterIsInstance<CharSequence>().toTypedArray() } とかは?
途中で送っちゃった JavaのコードからAnyでくる何かの配列を扱いたいときに確かこんな感じで書いた記憶が
勉強しようと思いリファレンス読みつつ Koans をやり始めた 最初は var, val や if, for とかかなと思ってたから面食らった
Java訴訟で神託に負けたから、次バージョンからkotlinかな
>>908 Kotolinにしても中身Javaじゃないの? Googleが一兆円払ったら今までと同じようにAndroid使っていけるんですかね Androidがなくなるみたいな話じゃないんですかね
長期的にはAndroidはJavaから離れてSwift化していくと思う Kotlinはそれまでの繋ぎだろう 構文似てるし
問題になっているのはAPI仕様なんで、kotlinに変えただけじゃ解決しないよ。 googleは企業間摩擦で割と子供っぽい対応をするところがあるので、神託を敵対買収とか糞味噌展開を期待。
しかしGoogleがフェアユースとか言い出さなければよかっただけなんじゃないかという感じがする。
つうかAndroidもOpenJDKに移行するんだからもうその訴訟自体どうでも良くなるんじゃねーの
swiftは破壊的変更が多すぎてkotlinが良い
俺も今のところkotlin。かといってswiftほとんど知らないわけだが。Apple関係に手を出さない限り必要性がほとんどないよなあれ。 まあ今後変わるかも知れないが。
フェアユースの方はまだ上告できるけど ひっくり返る望みはほぼ無いようだから諦めて払うか別の弾持ち出してさらに粘るかだろうね 払うにしても時間たってるから賠償請求額上乗せしてくるんだろうけど 損害賠償だけで使用差し止めは要求してないからAndroidからJavaAPIが消えるという事は無い はず
kotlinってAndroid関係以外でも需要あんの?
Swiftはよくできてると思うが、毎年変更があるのがいけてないな まぁー、Javaもついこないだ9出たと思ったら、もう10が出てたりするけど
javaが全部Kotlinに置き換わる 今プログラミング言語で一番使われてるのがjava つまりKotlin最強になるということだ
>>924 googleが主導してるからAndroidになってるだけで 実際何でもできて便利だぞ >>927 なんでも出来るの定義が分からんけど、Swiftよりいろいろ出来るってこと? Nativeがあるといいけどライブラリどうなるのって問題があるな
>>927 JAVAでできることならなんでもできる。サーバーサイドのことでも。 Kotlin/Nativeが1.0になれば、応用範囲はさらに広がる。こっちはいつになるかわかんないけど。 CのDLL呼び出しというかWinAPIはJavaより楽にできるの?
つまり、動かすにはJavaランタイムのインストールが必須ってことですかね デフォルトでJREが入ってないMacのアプリを作るのはきついかな ちなみに、SwiftでもWebアプリのサーバサイド書けるし、コマンドラインで手動コンパイルなしで実行するスクリプト的な使い方もできます。REPLもついてくるし
>>931 もともと、Javaを拡張するのが大変だから、突破口として、Kotlinという新しい言語を作ったといういきさつなので、Javaでできないこともできる。 最近だとコルーチンとか。 サーバーサイドをSwiftで作るメリットが何一つ思いつかない
そういやKotlinはOpenJDKのJREがあれば動くからAndroid以外ではライセンス気にする必要がないね。
Swiftプログラマがスキルをそのまま活かせるというメリットがありますよ
>>911 理解が違ってたらすまんけど記述言語がKotlinだとしても中身はJavaにコンバートしてAndroid上で動いてるんじゃないの?という意味。 >>934 Sandboxの中で何ができるかって文脈じゃないでしょ >>939 コンバートはしてないのでは?直接JVM用のバイトコード出してると思うが。 まあ、それができるならコンバートもできる筈だとは思うけどね。 >>941 ググってみた。ORACLEの特許はJava APIに対してなんだな。 ORACLEの特許はJava全般に渡ると思ってたのでバイトコードに変換しても(俺はこれをコンバートと言ってた。理解出来てなくてすまない)JMVで動いてる事自体が特許にひっかかるんじゃないかと思ってた。 Android OSのソースの特許で揉めてる部分をKotlinに置き換えれば大丈夫って事になるのかな。 apple傘下のものをメインにするのはやっぱちょっと怖い G様なら飽きたら放置だからそこは安心
>>936 appleはwordpress使ってるしな >942 androidで使ってたdalvikはレジスタマシンじゃん。 素のjvmならスタックマシンだからそこで特許は無理じゃね? あとAPIだってそれだけじゃ特許とれんだろ。オラクルも特許侵害は言ってなかったような。
プログラミング言語なんて適材適所だからな 少なくとも現時点ではサーバーサイドSwiftなんて選択肢としては悪手の中の悪手だわ 言語機能云々じゃなくて、エコシステム全体で見た時にあえてSwiftを選ぶ理由が本当に何もない
>>936 かつてそれと全く同じ理屈でなんでもかんでもJavascriptで作ろうといわれた時代があってだな かつてじゃなくて今もNode.jsはそこそこ流行ってるじゃん Electronで作ってるVSCodeとかかなり使いやすいぞ まー自分は使う気になれんが
googleはkotlinやってるのにflutterでdartとか、一つに絞らんのかね?
絞ってるだろ なんか勘違いしてるようだが、Google自身はKotlinもDartも一切使ってないぞ
結局、ちんこが勃つか勃たないかが重要なんだ 人を見た目で判断してはいけないと理屈で考えたとしても ちんこが勃つか勃たないかまでは理性でコントロールはできない だから男の方から女を選ぶ必要がある 女の方からいくら好きだと言って男に言い寄ってもちんこが勃たなければそこで終わりなのだ 男の方から女の方に言い寄る分には問題ない。ちんこが勃つということを表明しているのと同じだからだ 従って、肉食系女子、草食系男子というのはありえないということ
>>922 アメリカだと巨額な賠償命令が出るときは青天井のことはあるけど、 賠償請求額ってふっかけることが多いから、賠償額の審理が終わったら 「8年も引っ張ってこれだけかよ!」みたいな額だったというオチもありえなくはない。 >>953 Google製のAndroidのライブラリでKotlin使ってるぞ しかしAPIが著作権の問題で使ってはいけないとなると、その他のOSやライブラリもそうなりかねんわけで、 コンピュータ業界全体が大混乱に陥るのではないか? 以前 Linux でも似たような点が問われたことがあったように思うが、Linux に UNIX と同じシステムコールを 作った場合に関数名が同じとか関連する定数の定義が同じとか、呼び出し方や機能が同じになるわけで、 その部分に著作権があると言われて使用不能になったら互換OSや互換ライブラリは全滅になる。 同じ機能があっても違う呼び出し方しなければいけなくなってしまうからな。同じファイルオープンなのに open() が使えないなんてなったらかなりアホらしいしもはやそんなもん障害でしかなかろう。 (変換すればいいのでその内なんとかなるだろうが、とても面倒だ)。
>>958 ・Wineは使えなくなってしまい、もはや、Windowsの互換OSは未来永劫作れない。 ・mingw32 の windows.h ヘッダも著作権的にダメなのかい。 ・こうなったのは、アメリカの法制度が悪いから。 世界中のみんなが、アメリカの法律は無視しよう。 いやヘッダの著作権は普通にあるぞ 著作権の利用許諾に反するかどうかの問題
∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ´∀`)< オマエモナー ( ) \_____ │ │ │ (__)___)
>>958 linuxの場合は参考にしてるのがposixだからまたちょっと事情が異なるんじゃない? 著作権問題でゴタゴタしてたのはBSDですな。 あれはBSD失速の要因の一つだったと思う。 以前の会社にBSDを好んで使ってる人が結構いたけど、まだ使ってるんだろうか そんな心配してる私はMacユーザーw
>>961 「コメント」などには著作権はあるけれど、関数のプロトタイプ宣言や構造体定義にまで 著作権を認めてしまうと、互換ライブラリ、互換言語処理系などを作ることが全くできなく なってしまい、人々は困る。 >>966 お前は関数のシグネチャを見ただけで互換実装を書けるエスパーなのか? APIリファレンスや元のソースコードを読んで実装したら、やってることは実質的に盗作だよ MacというかNeXTはどちらかというとBSD系だろ
>>967 料理本に書いてあるやり方を真似て、別の本を出しても、著作権侵害にはならない判例 がアメリカでは基本になっている。 だから、リファレンスを理解して同じ機能のAPIを作っても著作権侵害にはならないと言うのが 原則だとされる。 >>966 今回の判決はその困ったことが起こった、ということ。 googleも似たようなAPIを作って差し替えればいいんじゃねえの
>>970 だからflutterで仕切り直しをしたいんかな。 ついでにosもlinux辞めて全部自分仕切りにしようってことかね だからJavaとかいう臭い言語なんか最初から使ってなきゃよかったんだよ オラクルとかいう臭い企業が牛耳ってる言語なんか使わないでも もっと良い言語作れる能力あるのに 使用者が多いからと開発者に媚びた結果がこれだよ
DroidKaigi 2018 - コードで見るFlutterアプリの実装 / konifar [JA] VIDEO Appleみたいにちゃんと買い取った会社と言語でやるべきだったな
2003年時点のAndroid社が今の状況を予想できるわけがない
Kotlinってのは内部でJavaに変換してるの?
>>978 >>979 ソースコードは変換してないんだ バイトコード直接吐き出すのは先の著作権問題的にはOKなの? >>980 駄目だよ。 問題になっているのはjava APIの著作権なので、それがclassライブラリを指しているのかvm仕様を指してるのかわからんが、いずれにしてもkotlinでも状況は一緒。 ただandroidは神託が自らgpl化したopen jdkに移行したから、今後はjavaを使い続けても問題ない、はず >>973 元は臭く無かったよ ただSunが弱った結果、Oracleに訴訟用の道具として買収されてそうなった >>981 やっぱり駄目なのか Kotlinに完全移行する覚悟しようかと思ってたけど OpenJDKで生きながらえるなら考え直そうかな 個人で作るならコトリンのが作りやすいやろ 仕事だとなかなか採用できんね
>>967 互換実装を作成するプロジェクトはあったのに知らないのかぁ >>982 サンもJAVAの言語自体で儲からんかゴニョゴニョしていたせいで (ISOなどに渡してしまうなどできただろうに拒んだ)オラクルが 滅茶苦茶やれるようにしてしまったという面もある。 >>988 潰された例を具体的に元のプロダクト名と互換実装プロジェクトの名前を上げてどうぞ オラクルなんなん てかフェアユース不適合なの意味わからん
なんらかの理由でgoogleの足を引っ張りたかっただけだろ 下手したらITの世界全体に致命的なダメージを与えかねないクソ前例を作りやがった
>>993 お前何にも理解してないんだな。 J++は互換実装を作ったことが問題になったんじゃねえよ。 >>993 しかもHarmonyを出すとか意味わかっていってるのか? いきなり、お前呼ばわりって頭可笑しいと思うの。 先ずはお礼でしょう?
1000ならXamarinのライセンスを1000個買う
mmp2
lud20190627103912ca
このスレへの固定リンク: http://5chb.net/r/tech/1509462463/ ヒント: 5chスレのurlに
http ://xxxx.5ch
b .net/xxxx のように
b を入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「Kotlin 2 YouTube動画>1本 ->画像>7枚 」 を見た人も見ています:・次世代言語12 Go Rust Swift Kotlin TypeScript ・Kotlin 5 ・Kotlin 6 ・Kotlin 3 ・Kotlin 4 ・Dart これ以上変な言語を増やすんじゃねえ! Kotlin ・次世代言語13 Go Rust Swift Kotlin TypeScript ・次世代言語15 Go Rust Swift Kotlin TypeScript ・次世代言語15 Go Rust Bosque Kotlin TypeScript ・次世代言語Part8[Haskell Rust Kotlin TypeScript] ・次世代言語9[Haskell Rust Kotlin TypeScript Dart] ・次世代言語14 Go Rust Swift Kotlin TypeScript ・次世代言語17 Go Rust Kotlin TypeScript Julia ・次世代言語Part7[Go Rust Swift Kotlin TypeScript] ・次世代言語議論スレ[Rust Kotlin Haskell]第6世代 ・次世代言語18 Go Rust Elixir Kotlin TypeScript ・次世代言語22 Go Nim Rust Swift Kotlin TypeScript ・KoRn Limp Bizkit Slipknot DISTURBED LINKIN PARK ・【IT】Kotlin 1.2正式版リリース。KotlinはJavaとJavaScriptのマルチプラットフォーム対応に ・Kotlin ・Kotlin 7 ・次世代言語21 Go Nim Rust Swift Kotlin TypeScript ・次世代言語28 TypeScript Swift Go Kotlin Rust Nim ・次世代言語24 Go Nim Rust Swift Kotlin TypeScript ・次世代言語23 Go Nim Rust Swift Kotlin TypeScript ・次世代言語29 TypeScript Swift Go Kotlin Rust Nim ・次世代言語25 TypeScript Swift Go Kotlin Rust Nim ・次世代言語議論スレ[Go Rust Kotlin Scala]第4世代 [無断転載禁止] ・【MODARTT】 Pianoteq 2 【Physical modelling】 ・Kotlin 8 (234) ・Kotlin初心者質問スレ ・Alice in Chains 2 ・ScalaにできてKotlinにできないこと ・●2018年 MotoGP 第6戦 イタリアGP Lap 2 ・【スチーム】Steam in Linux 2 ・【TOYOTA】セルシオ30系 / LS430オーナー専用スレ 2 ・【IT】Kotlinで開発された初のAndroid向け不正アプリが発見 ・Led Zeppelin VS Deep Purple 2 ・2018年に急成長したプログラミング言語は「Kotlin」「TypeScript」「HCL」 ・【EXC】新仮想通貨Excaliburcoin エクスカリバーコイン【えくすこ】 2 ・【Netflix】オルタード・カーボン/Altered Carbon 2 ・リネージュ2 レボリューション / Lineage2 Revolution Part 282 ・リネージュ2 レボリューション / Lineage2 Revolution Part 268 ・リネージュ2 レボリューション / Lineage2 Revolution Part 278 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 208 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 205 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 209 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 206 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 207 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 210 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 208 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 215 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 212 ・【糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 214 ・【糞糞運営】リネージュ2 レボリューション / Lineage2 Revolution Part 229 ・【L2R】無課金専用リネージュ2 レボリューション / Lineage2 Revolution Part 20 ・【L2R】無課金専用リネージュ2 レボリューション / Lineage2 Revolution Part 21 ・【鯖統合不労所得】リネージュ2 レボリューション / Lineage2 Revolution Part 241 ・【ヴェンデッタ本スレ】リネージュ2 レボリューション / Lineage2 Revolution Part 271 ・リネージュ2 レボリューション / Lineage2 Revolution Part 276【課金パックを買うだけの過疎アプリ】 ・LINN 2
17:38:03 up 11 days, 18:41, 0 users, load average: 11.89, 11.10, 10.25
in 0.028815031051636 sec
@0.028815031051636@0b7 on 012507