X



Kotlin 2
■ このスレッドは過去ログ倉庫に格納されています
0104デフォルトの名無しさん垢版2017/11/08(水) 06:28:34.57ID:ShM00Q+N
>>94
器用貧乏とは言ったものの、翻訳書が原書+1000円くらいの値段になることがざらなことを考えると
英語の公式チュートリアルを訳しただけでも、値段相応なのかもしれん。

しかし、著者のことをよく知らずにタイトルだけでうっかり買ってしまったものの身にもなって欲しい(自己責任)
深く理解した上で書かれた本かどうかは、(本を必要とするレベルの人には)立ち読み程度ではわからない。
0105デフォルトの名無しさん垢版2017/11/08(水) 08:32:48.67ID:a/cZ4nXd
Kotlinに限らずあれもこれも全く初心者に寄り添っていないことを鑑みると、初心者向けの本を書くというだけで価値があるのやもしれぬ
あなたがライブラリマニュアル作るときに開発環境のダウンロードやプログラミング言語の文法から説明しないのと同じだ
0106デフォルトの名無しさん垢版2017/11/09(木) 10:27:49.04ID:IVrwQxMl
「単純に意味や役割が似通ってるメソッドを集めただけのメソッド集」を表すものってないですかね
Rubyでいうmoduleみたいなやつ
特にどのオブジェクトに属してるってわけでもない、誰も初期化しなくてよくてすぐメソッドが使えるやつ
いまobjectでシングルトンクラスにしてるけど、なんか漂う特別感に違和感が
0107デフォルトの名無しさん垢版2017/11/09(木) 12:13:06.41ID:77e4Bz/I
適当なネームスペースで、メソッドじゃなくて関数だけ複数定義したファイルを作ればいいんじゃないかな?
0108デフォルトの名無しさん垢版2017/11/09(木) 13:29:13.78ID:IVrwQxMl
ああなるほど、packageで分ければいいのか…
シングルトンクラスの中に書くよりはしっくりくる…ような…気が…す…うん、そういうものだと思うことにします
0109デフォルトの名無しさん垢版2017/11/09(木) 21:56:51.74ID:+8G/D3P4
Kotlinで以下の処理をスマートに書き直したらどうなりますか

int idx = -1;
for (int i=0; i<list.size(); i++) {
  if (list[i].data == data) {
    idx = i;
    break;
  }
}
(idxを使った処理)
0111デフォルトの名無しさん垢版2017/11/09(木) 22:25:18.35ID:UmUHoiDy
逆引き、ポケットリファレンスものを出して
0113デフォルトの名無しさん垢版2017/11/10(金) 09:13:11.87ID:oAWKYFWM
>>111
とりあえずここで質問すれば答えが書かれるので、後でまとめページを作れば良い。
0116デフォルトの名無しさん垢版2017/11/11(土) 03:22:51.50ID:xG+5Xfzv
>>115
なんだその国民の妹みたいな表現は
0119デフォルトの名無しさん垢版2017/11/11(土) 11:27:33.83ID:GExxj/Q0
お前ら「よーし新しく覚えたKotlinのあんな技こんな技使ってコーディングするぞー」
〜 数日後コードレビュー 〜
リーダー「あー、これ全部Javaと同じ感じで作り直しといてネ、ヨロシク」
0122デフォルトの名無しさん垢版2017/11/11(土) 21:12:50.74ID:F2DPX6tK
>>121
トップがKotlinへの移行を目指して次はKotlinとJavaの混在プロジェクトにするとか言って、
でも所属するチームのトップがJavaしか使わないとかいうシナリオなら、
>>119のような事が起きたとしても>>121の言うような矛盾はない...と思う。
0123122垢版2017/11/11(土) 21:14:35.14ID:F2DPX6tK
そして逆コンパイルしたJavaを提出して盛大に怒られる...みたいな。

こんなことで連投してスマン
0126デフォルトの名無しさん垢版2017/11/13(月) 09:38:49.46ID:Ffr39/Md
0128デフォルトの名無しさん垢版2017/11/15(水) 12:16:34.07ID:XQCt13cq
println(";")
0130デフォルトの名無しさん垢版2017/11/15(水) 17:33:26.94ID:NOd3J7Vc
そういや print って印刷って意味だよな。もはや時代も変わり誰も印刷してないのにプログラミング言語では print で出力が定番になっちゃったな。
0131デフォルトの名無しさん垢版2017/11/15(水) 18:04:14.40ID:svkVDlGw
厳密には印字なのでギリギリ合ってる
原初のBASICのPRINT対象はテレタイプだったから印刷するという意図とはそもそもちょっとだけ違う
0133デフォルトの名無しさん垢版2017/11/15(水) 20:09:08.28ID:hiEIJUlA
ブラウン管に文字を焼き付けるから print

無理があるな。
0134デフォルトの名無しさん垢版2017/11/16(木) 10:46:41.50ID:Wcsn/bEa
printの古い意味は押すだからな
0136デフォルトの名無しさん垢版2017/11/16(木) 11:54:15.38ID:czRbGJih
putもあるやん
0137デフォルトの名無しさん垢版2017/11/16(木) 12:14:02.89ID:Wcsn/bEa
>>136
putは置く
0138デフォルトの名無しさん垢版2017/11/16(木) 16:02:46.86ID:bDWmFK6d
押して痕跡残すようなのが print だな。
0139デフォルトの名無しさん垢版2017/11/16(木) 20:15:28.89ID:Sk98YgzR
kotlinの文法ってちょっと省略しすぎだし、やりすぎじゃねぇの・・・
C#の方がバランス取れてるわ。
0141デフォルトの名無しさん垢版2017/11/17(金) 08:55:38.80ID:YqqDZ5Dd
慣れの問題だと思うけどなあ
0142デフォルトの名無しさん垢版2017/11/17(金) 09:43:27.88ID:Ddb5xKAY
抽象化と少ないコードが正義な昨今の風潮ではこういう文法が受ける
本当にこれで良かったのかは後10年ぐらいしたらわかるだろう
0143デフォルトの名無しさん垢版2017/11/17(金) 09:59:51.99ID:QGpoznNs
>>140
どれがとは言いにくいけど>>139の言いたいこともわかる気がする。
個人的にはコンストラクタをクラス宣言に書けば、フィールドやコンストラクタの宣言を省略できる仕様とか。
2つ以上のコンストラクタを定義したり複雑なコンストラクタを定義しようとするときの表現に一貫性がなくなったと思う。
フィールド(Kotlinではプロパティだっけ)の記述場所もクラス宣言と本体にバラバラの配置になるし。

Javaにしとけばいいのかもしれないけど、null安全に書いてみたいと思って使っている。
あとwhenがお気に入り。
0145デフォルトの名無しさん垢版2017/11/17(金) 10:46:54.88ID:8xh7qM4F
これはこれで同じこと書いてる感がん〜って感じではある
class MyData(name: String, age: Int){
val name = name
val age = age
}
引数にval書けちゃうことでの「見かけ一貫性の破れ」と「引数もチェックしなければならなくなったという手間」は肯定する
0146デフォルトの名無しさん垢版2017/11/17(金) 10:51:53.19ID:ENBrszFD
というかあれはdataクラスを便利に書くためだけのギミックな気がするぞ
しかし言われてみれば視線的にめっちゃ遠いのはその通りだな、家のやつは今度使わずに書いてみるか
0147デフォルトの名無しさん垢版2017/11/17(金) 11:08:33.26ID:YqqDZ5Dd
>>144
JavaVMが動かんわw
0148デフォルトの名無しさん垢版2017/11/17(金) 15:22:12.81ID:4edLbtL+
KotlinがNull安全といっても結局、Javaなどの使用するクラスライブラリがNull安全じゃないからな。
Kotlinだけで閉じてればいいけど、Kotlin最小限のライブラリしか用意してねぇし。どうすりゃいいんでしょうか??
「!!」演算子積極的に使えばいいの?
0150デフォルトの名無しさん垢版2017/11/17(金) 15:42:27.11ID:4edLbtL+
うん。自分のメソッドはNot Nullにしてるけど、その実装で結局、Javaのクラスが絡む事多いから、
その実装部分で「!!」連発してるんだけど、なんだかなぁ・・・・・
0151デフォルトの名無しさん垢版2017/11/17(金) 15:49:49.94ID:ENBrszFD
ぬるぽが出そうならトラップするという記法がKotlinにはいくつもあるだろそれ使え

chackNotNull(nullable){ "ぬるぽだけは阻止しましたが例外で落ちますさようなら" }
nullable?.aaa?.bbb ?: throw RuntimeException("エラーとぬるぽって死ぬ点で大差なくね?")
when(){
nullable == null -> println("おかあさんに言いつける")
isSomeState -> nullable.xxx.yyy // 文脈上nullが来得ないので ?. で書かなくていい
}
0153デフォルトの名無しさん垢版2017/11/17(金) 16:16:30.86ID:4edLbtL+
>ぬるぽが出そうならトラップ
ぬるぽが出そうというより、Javaのクラスから返される型は「型名!」ってAndroid Studioを
表示されてて、この型ってNullableの「型名?」と同じでNullチェックしないといけないと思ってて
「!!」連発してたんだが、これ違うな・・・

「型名!」ってNullチェックしなくてもいいのか・・・
つか、言語仕様上どんな扱いになってんだこれ・・
0155デフォルトの名無しさん垢版2017/11/17(金) 16:38:25.33ID:ENBrszFD
T? と T or T? は違うよ
Nullableかどうかすらわからない後者の場合はnullチェックしなくてもコンパイルは通るよ
「だってそれはNullableではないから」
まあ、そしてぬるぽが出るんだけども
Kotlin的にはnullチェックは不要だけどIDE的にはnullが入りうることがわかってるので気を付けてね! の ! だ
0156デフォルトの名無しさん垢版2017/11/17(金) 17:00:12.18ID:4edLbtL+
>>155
ありがとうございます。
Platform Typesについてしっかり読んでませんでした。そこに色々書いてありましたね。
0157デフォルトの名無しさん垢版2017/11/17(金) 17:09:53.72ID:4edLbtL+
>T? と T or T? は違うよ
T or T?がプラットフォーム型というやつですかね。で、プラットフォーム型ではNullチェックが緩和される
って書いてありましたね。

T? と T or T? は同じと勘違いしてました。要はT or T?か分からないから、よりたくさん表現できるT?として扱えばいいし、
そうなってるのかと勘違いしてました。
0158デフォルトの名無しさん垢版2017/11/17(金) 17:41:51.36ID:4edLbtL+
つか、デバッグしてて思ったけど、C#のusing (resource)やlock文に相当する言語組み込みの
文がkotlinにないのがちょっとめんどくさいよね。ステップオバーで順にどんどん進めねぇじゃねぇか・・
inputStream.use {
 // いちいちここにブレークポイント設定しないと・・・
}とかだと、実態は関数呼び出しだから、ステップオーバーだと、内部のブロック飛び越えちゃう・・
0160デフォルトの名無しさん垢版2017/11/17(金) 18:06:21.43ID:4edLbtL+
ああ、ステップインで行けたね。ステップインすると、最初useなどの拡張関数の方にぶっとぶかと思ったけど、
自分のブロックの方に直接飛べるのか。
まぁ、オーバー・インを切り替えるのひと手間だけど、まぁそれぐらいなら。
0161デフォルトの名無しさん垢版2017/11/17(金) 20:50:48.90ID:4edLbtL+
正直、AndroidのJavaの代替としてKotlinを使うなら、Android Studio 3.0でJavaで全APIレベルでラムダ式が
使えるようになったらしいし、後、Javaにvarなどのローカル変数の型推論あたりがくれば、Javaでも
いいかなと思うが(async/awaitもほしいけど)、Kotlin for JavaScriptの存在を知って、
ちょうど、JavaScriptとかスクリプト言語を本格的に使った事なく動的型付け言語使いたくない自分にぴったしだと
思ってKotlin覚えてみようかなと思ってきた。

Kotlin,JavaScriptでググってもあんま引っかからんけど、TypeScriptとかにとって代わったりしそうじゃねぇか??
0162デフォルトの名無しさん垢版2017/11/17(金) 21:21:37.83ID:3GAWOghK
>>161
> Javaにvarなどのローカル変数の型推論あたりがくれば

それ実現されるまでまってられっかよ
0163デフォルトの名無しさん垢版2017/11/17(金) 21:40:35.61ID:/4Y2zvAi
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 をやると、他の言語がクソに見える
0165デフォルトの名無しさん垢版2017/11/17(金) 23:45:36.46ID:aGWwpVlc
>>163
言語がどうのこうの言ってるうちは、まだまだだよ。
016625垢版2017/11/18(土) 00:02:14.05ID:oC0amP9+
kotlinから始めたら挫折して、
結局Javaの勉強再開しました。
何個かアプリ作れるようになったけどまだまだ。
Java覚えたらkotlinまで追いつきたい。
0167デフォルトの名無しさん垢版2017/11/18(土) 00:31:51.67ID:ZnPkEcCx
Javaで動くアプリ作れてKotlin書けないってのもわりとレアケースだと思うのだが(完全に全くJava以外の経験がないとか?)
まあ個人の進度に文句もないしKotlinはしばらく逃げないので焦らずお好きにやっていただきたい
0168デフォルトの名無しさん垢版2017/11/18(土) 00:47:06.52ID:oC0amP9+
>>167
Javaの勉強途中でちょうどkotlinが盛り上がってて、
両方覚えられる!と欲張った結果、
なんか情報も少なく、混乱して挫折。
とりあえずJavaで慣れたらkotlinもやってみます。
0169デフォルトの名無しさん垢版2017/11/18(土) 16:34:14.39ID:6foiYhRZ
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
0172デフォルトの名無しさん垢版2017/11/19(日) 08:38:46.28ID:OIO3sRlf
C#のusingもJavaのtry-with-resourcesもkotlin.io.useも気に入らない

GCだからC++やSwiftのようなデストラクタまでは無くてもいいけど
せめて use val xx = ... のようにキーワード付き変数の場合に
スコープアウトでcloseする構文を用意して欲しい

後処理の指定ごときでいちいちブロックスコープ増やすなと
0174デフォルトの名無しさん垢版2017/11/19(日) 11:57:19.58ID:2bHJHjAx
そーゆークラスを作ればいい
内部的にはそうしてても使う側が意識しなきゃそれでいい
0175デフォルトの名無しさん垢版2017/11/19(日) 12:11:45.04ID:IcfiaN/i
StackOverFlowで「○○するにはどうすればいいですか」に対して
自作の20行くらいの関数返して「こうすれば1行で書ける」とか言う回答者みたいだなw
0176デフォルトの名無しさん垢版2017/11/19(日) 13:20:53.07ID:OIO3sRlf
例えばこれを

  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()
  }
0177デフォルトの名無しさん垢版2017/11/19(日) 13:22:16.49ID:OIO3sRlf
次点で、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関数での書き方が駄目とまでは言わないが俺は気に入らない
0178デフォルトの名無しさん垢版2017/11/19(日) 14:00:39.13ID:uqF6CIR0
そういやjetbrainのIDEってjavaで出来てるんだよな。
kotlinで書き直されたりしてんのかな。そのへんどうなの?中の人とか?
0180デフォルトの名無しさん垢版2017/11/19(日) 15:32:50.61ID:XHxD1mSV
>>176 >>177
純粋な興味で質問するんだけど
その書き方で各段階のデバイスオープン不可だったとき対処できる言語ってあるの?try-catchで括っておくとかなのかな。

>>176の下の書式は最初のデバイスがヌルが返ってきたときに雪崩式にハングしそう。
>>177は最初にデバイスクローズして下に流れたらどうなってしまうのか。
0181デフォルトの名無しさん垢版2017/11/19(日) 15:53:26.75ID:YGg5hSh9
try-with-resourcesみたいに「ここでリソース開いてるしエラーも起こりうるぞ!」って明示してくれるのが好き
0182デフォルトの名無しさん垢版2017/11/19(日) 16:35:29.23ID:ziYSLzJF
文句の本質的には「ブロックネスト深すぎて見かけの空白多くてキモい」ってだけだよねコレ
まあ見かけはかなり重要なのだが
どこでcloseが起こるかわかるほうがいいとは思うけどな
ブロック深いのとは別件な気がする
0183デフォルトの名無しさん垢版2017/11/19(日) 17:52:32.52ID:OIO3sRlf
>>180
3例とも同じ動作想定のサンプルコードだよ
オープン不可はnullでなく例外、どこで例外が起きても開いた分はcloseされる

>>182
そう、キモいってだけ
実行のタイミングと順序は厳密に決まるからどこでcloseが起こるかは分かる
closeの仕掛けとブロック増加が不可分なのが気に入らないという話
0185デフォルトの名無しさん垢版2017/11/19(日) 20:14:04.01ID:wMfO08BI
kotlinはまず開発環境をもっと整えてほしいわ。
特にVisual Studio Codeで無料の拡張プラグインを。
JetBrainはIDEを打ってる会社なのかもしれんが・・
0187デフォルトの名無しさん垢版2017/11/19(日) 20:38:00.92ID:ziYSLzJF
forを読めるが書けない
これだけが毎回全く覚えられない(あの形式はレガシーであって何の意味もないと思う)
イテレータでいいと思うのだが、Rangeはなにやら遅いとか言われてて憂鬱だ
0193デフォルトの名無しさん垢版2017/11/19(日) 22:15:39.30ID:VtdgNv5T
>>176はそんなにopenとcloseをしないといけないのはクラス設計に問題があるのではないだろうか。
そこまでしないといけないことが頻繁にあるケースはまれだと思うので、拡張関数を定義して解決しては。
あと、個人が気に入らないと思うたびに構文を増やしたらC++みたいになるのは歴史が示すところかと。

>>173
Kotlinでは>>176のケースはif式のように{}を省略することはできないような気がするのですが。
省略できても見かけのブロックがなくなるだけで、多重ネスト構造なのは変わらない気がする。
0194デフォルトの名無しさん垢版2017/11/20(月) 00:57:34.61ID:iI7hyhyt
>>191
俺も分からないので是非書いて欲しい。
こちらはKotlin学習中なので重症ではない。単にわからないだけだ。
0195デフォルトの名無しさん垢版2017/11/20(月) 03:18:31.42ID:GkhyFhEh
>>177
File.open(ファイル名) do |file|
処理
end

Ruby では、File.open()に、クロージャの実装である、ブロックを渡すと、
close()する必要がなくなる。
自動的に内部的に、例外処理で囲んで、finally で、close してくれる

たいていの言語で、そう
0196デフォルトの名無しさん垢版2017/11/21(火) 07:47:12.65ID:UlNCYsFF
JVM版とNative版など環境がいくつかあるけど、標準ライブラリは基本共通なの?
0197デフォルトの名無しさん垢版2017/11/21(火) 11:37:34.13ID:y9fg6IYd
こういう風に違うシグネチャの関数の参照はどうしたら良いのか?
https://ideone.com/jXVu5V
0198デフォルトの名無しさん垢版2017/11/21(火) 12:00:29.42ID:7oGfHzA7
未対応なので回避策とるくらいしか
val fa = {n:Int -> f(n) }
val fb = {n:Int, s:String -> f(n, s) }
0199デフォルトの名無しさん垢版2017/11/21(火) 12:29:26.29ID:y9fg6IYd
あ。未対応だったのか。どうりでいくら調べても見つからないと思った。
それならそんな風に書くしかないね。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況