Kotlin 2
レス数が1000を超えています。これ以上書き込みはできません。
やってみるとわかるのだが(やらなくてもいいが)、中上級者向けの本というのは全然儲からないのだ
書くの時間かかるし分厚くなって値段高くなるし売れなくなるしチェック内容増えるし時代遅れが混じるし下手すると共書だし
出来によっては「あのすごい便利な本を書いた人」という称号はいくらかの称賛になり、ひょっとしたら生活豊かルートをも開拓するかもしれないが、分は悪い
初心者向けの本をひとりで年に2冊くらい書いてたほうが、志低いと揶揄されながらもきちんと生活できるのさ 掌田津耶乃って何者? (Late 2012)
http://egg.2ch.net/test/read.cgi/mac/1349360916/
1 :Mac Fan Letterより転載 [sage] :2012/10/04(木) 23:28:36.22 ID:ZGQCgQTH0
● ネットサーフの溺死者たち
「友がみな我より偉く見ゆる日よ」
「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版など環境がいくつかあるけど、標準ライブラリは基本共通なの? こういう風に違うシグネチャの関数の参照はどうしたら良いのか?
https://ideone.com/jXVu5V 未対応なので回避策とるくらいしか
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でジャンプできるんだしどうでもいいでしょ。 >定義に飛ぶから
>定義なんてIDEでジャンプできる
なんだよ
(いろいろ眺めつつ)IntelliJ IDEAではF4かな。とう。おお。…さっきのとこ戻るにはどうすればいいんだろう
https://youtrack.jetbrains.com/issue/IDEA-119474
無理か。まあいいや
いや、それにしても固めて書いておく時の一般的なやり方とか見てて迷わない書き方とかあるのかなーと思って >>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 の、クロージャ・ブロックで囲まれた、
スコープを持つソースコードであるから、変数宣言や処理も書ける >>265
キモい
>>263
たとえ女だとしてもキモい。やるならもっと自然な文体にしてくれww リアルの女と接点がなく、妄想で女はこうだろうと決めて話してるのがわかる
昭和生まれのジジイですわ Kotlin Advent Calendar がAndroid以外の話題多めだな
ここでナチュラルにIntellijIDEA の話題だしちゃったけど
Android以外の人も IntellijIDEA を買って使ってるのかねえ? 12/18にこの本が出るようだ。Amazonには本の表紙画像がまだ出ていない。
Androidアプリ開発のためのKotlin実践プログラミング
http://amzn.asia/4GO28m2 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 かどうかの情報が抜け落ちているような。 >>322
1はmap["hage"]とか存在しないキー指定すると落ちるだろ
2はエルビスで落ちないようになってて
3が落ちないのは、
ここ https://kotlinlang.org/docs/reference/equality.html
Structural equality あたりに書いてある仕組みのせいかな
どうmapを使えばいいのかは知らん 知らんが、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")){/* 処理 */}
これで基本的にキーが存在しないと例外に行くしシンプルだね 直感的にはおかしく感じるな。(最初結果見た時は驚いたw)
https://paiza.io/projects/zLCe3AYlPO9luQp7z2NaIw
しかしクラスの参照同士の比較なのでこれで良い。 322です。
こんな速くレスいっぱい貰えるとは....皆ありがとう!
基本的にNullチェックは必須なんだね
>>331
そういうことか!あくまで等値比較なのかー
>>327
>感が方がJavaっぽい
これやったんだけど、あんまりキレイな感じしないし、何よりJavaっぽくて....
>>332
そのメソッド知らなかった。使ってみます。 >>333
おかしく感じたのはprintln("True")と書いたからじゃないの
not False と True は同義でないよ
https://paiza.io/projects/1WgctVAqXu8SWmlIYtx4YA おまえがそう思うのならそうなのだろう。おまえの中ではな。 >>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.とかついてるのですが、これはなんなんでしょうか?? >>370
block内でのthisがその型のインスタンスになる
例
https://ideone.com/KsS26N >>371
ありがとうございます。
うーん。ややこしい。何のためにこんなのが必要なんだ・・
呼び出される関数の方でもインスタンス(val a = A("aa"))を作って
関数を呼び出さないといけないってことですよね。 delegateってパフォーマンス悪かったりします?
>>361のような方法を試したら、目に見えて遅くなりました。
もっとも他にも色々いじった後だから、他が原因の可能性もありますが....。 エルビス式のエルビスって何ですか?プレスリーしか出てこないんですけど と思ってググったら本当にプレスリー由来だったのね、、 >>375
調べてみたら、delegateよりも前に速度低下はあったようでした。ありがとうございました。 ?: これのどこがプレスリーなんだよ?と思った時の脳内に浮かんでいたのはサタデーナイトフィーバーの人だったのは俺だけだろうな >>161だけど
Javaのリリースサイクルが6か月ごとになったので2018/3/20リリース予定
http://openjdk.java.net/projects/jdk/10/
ローカル変数の型推論きたー
後はGoogleさん早めにAndroidで使えるように。 後は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であっさり作れる。 >>406 >>407
KotlinでiPhoneアプリは作れる >>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 >>497
言いたいことを想像しながらの答えになるけど、ビット演算もシフト演算もKotlinにはあるよ。
ttps://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html
Cのような見栄えにならないとしても、それはKotlinの目指すところではないということかと。 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 だもの >>537
.NET上で動くJVMならあるけど(実用に耐えるとは言っていない)。
ttp://www.ikvm.net/index.html 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)とか >>593
中身が空っぽなだけで、プライマリコンストラクタは常にあるよ
https://ideone.com/tSGMPY >>594
でも、空のプライマリコンストラクタを明示的に宣言するのと省略するのでは厳密には同一ではないですよね??
だから、言葉の定義の問題にもなっちゃうけど、initブロックはinitブロックであってプライマリコンストラクタと同一視
しない方がいいとか。プライマリコンストラクタはあくまでclass Test(val p1: String)のval p1: String部分だけで、
プライマリコンストラクタはボディは持てない。
初期化はinitブロックで行うとか? https://kotlinlang.org/docs/reference/classes.html
正式な言語仕様書とかないんでしったけ??
JavaとかC#はしっかりした言語仕様書みたいのあって言葉もしっかり定義されてると
思いますが、kotlinはそういうのないとか・・ 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 >>658-659
そのコードの意図がよく分からないんだけど、何がしたいの?ゆ >>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はこんなポカしないと思うけど。 ・セカンダリコンストラクタが存在する
・代入して初期化してる(ように見える)プライマリコンストラクタかセカンダリコンストラクタがある
この2つを満たすとコンパイル通っちゃうのかな
https://paiza.io/projects/78ZAW5fM_jNEyfhRPD5VbA 完全に趣味で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なんだぜぇ こんな本が出てたんだな。
Androidアプリ開発の教科書
http://amzn.asia/59lxVwl あ、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使いたくないんだけど。 >>779-780
太郎本でも読むことをお勧めする >>775
jsを、撲滅ってESの最新仕様追いかけなよ。
悪くないから コンパイルエラーがでるからそこらへん適当にやっててもなんとかなったけどww。
真面目に考えるとどうなってんだこれww
今までコンパイルエラーが消えるように適当に例えば、
fun testAsync(): Deffered<String> {
return async {
lock.withLock {
"ABC"
}
}
}
むしろ、retrunを付けると怒られたからこのままにしたけど。return@asyncってラベルつけるればいいのか。
ラベルつけない場合はどうなってんだこれ。 inline の場合は return の意味がちょっと変わっちゃうんじゃない? >>785
ありがとう。ちょっと前に話題になってたのね。
つか、前に教えてもらったhttp://jetbrains.github.io/kotlin-spec/
にそれに関する事のってねぇな?
DartだってECMAでしっかりした仕様書になってるのに、
仕様書がいまだにこんなレベルなのにAndroidのFirst Class Languageにするなんて
Google何考えてんだか・・ 後、
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のバイトコード見てみたんですけど最適化されてるのか??
メソッド呼び出しされてるのかと思ったら、定数値に置き換えられてました。
最適化のせいなら将来のコンパイラでどうなるかわかりませんけど、とりあえず、普通にプロパティ参照使って
置き換えてます。
ありがとうございました。 アンカ>>810じゃなくて>>811でした。すみません。 でもそれ結局今日も同じメニューになるよな
たまにはやよい軒行きたいわ、遠いけど すまん誤爆した
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でエラーがでて型チェックができません。 https://ideone.com/IAkBb8
あれ、マジですか。Android Studioの方で駄目です。
バージョンって
ext.kotlin_version = '1.2.21'
これかな ああ、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]
ttps://www.youtube.com/watch?v=sRV_bSdyDjw 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個買う このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 152日 10時間 52分 32秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。