Kotlin 2

■ このスレッドは過去ログ倉庫に格納されています
2017/11/01(水) 00:07:43.82ID:jxmKQQAl
JetBrainsが開発した期待の新言語Kotlinについて語りましょう
https://kotlinlang.org

前スレ
Kotlin
http://mevius.5ch.net/test/read.cgi/tech/1456505161/
2017/12/20(水) 16:11:14.74ID:skPFcOgX
>>337
このコードだとFalse以外のAnyでは
2017/12/20(水) 16:17:54.73ID:f5FKKl5l
>>337
>>333>>335のコードが示すように
Nullable(null)もStringも真偽値ではないため
falseとtrueどちらにも等値でない

falseでない真偽値はtrueだが
falseでない値はtrueとは限らない

「True, null」だから違和感が有って
「not false, null」なら無かったのでは
2017/12/20(水) 16:28:57.34ID:f5FKKl5l
>>333
リンク先のコード消えてるよ

同じ接続元・同じURLで開くと変更モードになるようだから
「新規コード」を押してから扱わないといけない
341デフォルトの名無しさん
垢版 |
2017/12/20(水) 18:13:04.50ID:oPcnMRgu
>>340
ごめん。うっかりしていた。

で、書き直してグレードアップしたよ。
https://paiza.io/projects/KX6WsUduUz1OoV0sEOwyTw
2017/12/20(水) 18:27:37.40ID:AIjICjtT
糞みてえな言語だな
2017/12/20(水) 18:40:45.87ID:GLW9SuF+
Xamarin程の糞はない
2017/12/20(水) 21:01:27.13ID:SZt84l7a
糞だからこそ良い
2017/12/25(月) 05:24:40.47ID:CQjgWB2v
やはりJavaを超えられなかったか。
2017/12/25(月) 09:22:20.35ID:pKfklu/G
    \   ∩─ー、    ====
      \/ ● 、_ `ヽ   ======
      / \( ●  ● |つ
      |   X_入__ノ   ミ   そんな餌で俺様が釣られクマ――
       、 (_/   ノ /⌒l
       /\___ノ゙_/  /  =====
       〈         __ノ  ====
       \ \_    \
        \___)     \   ======   (´⌒
           \   ___ \__  (´⌒;;(´⌒;;
             \___)___)(´;;⌒  (´⌒;;  ズザザザ
2017/12/25(月) 14:41:12.11ID:eNXAkvu4
>>343
ちょまど神への信仰が不足しているか背教者ですね
348デフォルトの名無しさん
垢版 |
2017/12/28(木) 18:16:09.77ID:xKYb+xvk
>>278の本は何故か新品よりも高い中古がもう出ているw
(値段のタイプミスか?)
2017/12/28(木) 20:08:10.60ID:g7xH4Ri4
購入者の確認不足や品切れ時にたまたま買われることを狙った有名な詐欺だよ
350デフォルトの名無しさん
垢版 |
2017/12/29(金) 01:04:43.78ID:05sEmydS
>>347
確かに可愛いがムネ大き過ぎ。
D,EかせめてFカップなら信者になってた。
2017/12/29(金) 10:11:40.46ID:RRbpiG2U
>>350
盛ってるから問題ないで
2018/01/10(水) 07:01:15.70ID:IyW1fpec
classのdelegateってinterfaceしか出来ないみたいだけど、
classやabstractのインスタンスでdelegateできない理由をご存知の方いらっしゃいますでしょうか。

可: class SubClass(instance: Interface) : Interface by instance
不可: class SubClass(instance: SuperClass) : SuperClass by instance
2018/01/10(水) 07:32:55.52ID:IyW1fpec
もちろんSuperClassはopen指定してあります。
>>352 に答えられる人にそんな野暮なこと言う方はいないと思いますが念のため。

In Actionには「インターフェースを実装しいているなら〜」とさらっと書いていて
クラスでdelegateできない理由は触れられていませんでした。
2018/01/10(水) 21:04:38.05ID:CUBllmbw
androidにdelegateなんて言葉はない
2018/01/10(水) 22:52:38.58ID:68cAMYmT
>>352-353
例えばこんな感じのKotlinコードをJavaへ変換してみればわかる
interface Interface1 { ... }
interface Interface2 { ... }
class SubClass (impl1:Interface1, impl2:Interface2) : Interface1 by impl1, Interface2 by impl2
2018/01/11(木) 06:56:39.64ID:irxu1jkK
>>355 ありがとうございます。
interface Interface1 { ... } が
open class Interface1 { ... } であったとしても、
class SubClass extends Interface1 implements Interface2
になるので、支障ないと思うのですが、どこか勘違いしていますでしょうか。
2018/01/11(木) 07:43:33.12ID:rggai+wG
>>356
ごめん多重継承は関係無かったね
問題になるのはコンストラクタかな
class SubClass extends SuperClass というJavaコードに相当するものに変換されるからには
SuperClass のコンストラクタを呼ぶ必要があるけど、
でも SuperClass by instance によってインスタンスが別に渡されたらSuperClassの実体が二つになってしまう
2018/01/11(木) 10:00:24.62ID:J2rrbjux
>>352
インターフェースでないと移譲が保証出来ないからでは

インターフェースと違ってクラスの場合はそれが持つオーバーライド可能なメンバ全て移譲しても移譲になるとは限らない
例えば、あるライブラリがInterface, SuperClass, それらを引数に取る関数を提供しているとする
Interfaceを受け取るならInterfaceとして扱うべき
(内部の実装クラスへダウンキャスト出来ること等を前提とすべきでない)で、
SuperClassを受け取る場合も同様だが
こちらはprivateメンバへのアクセスなども含まれていてそれは移譲出来ない
2018/01/12(金) 02:36:59.71ID:EycqiUrc
>>352
abstractやclassじゃextendsになっちゃうじゃん
したいのはimplementsじゃん
だからOnly interfaces can be delegated toって言われちゃうんだよ
2018/01/12(金) 17:51:43.69ID:to65cpCS
>>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)メンバへのアクセスがなくても、
実装可能でないかと思います。

ご指摘で理解できていない点があればご指摘いただければ幸いです。

皆様ありがとうございました。
361デフォルトの名無しさん
垢版 |
2018/01/12(金) 19:14:43.07ID:EycqiUrc
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
こういうのじゃだめなの?
2018/01/12(金) 22:32:24.26ID:to65cpCS
>>361
自分が作ったクラスの場合ならそうできることは考えましたが、
他人がinterfaceを定義せずに作ったクラスでやりたい場合どうすればいいんだろうという疑問でした。
2018/01/13(土) 08:10:52.44ID:9rLeDqe4
Java, C# が、interface を作った理由は、
C++ のclass の、ひし形の形になる、ダイヤモンド継承を嫌ったから

ほとんどの言語は、単一継承 + interface。
継承チェーンに、同じクラスが現れると困る

親クラス ← 子クラス1・2 ← 孫クラス

孫クラスが、子クラス1・2を多重継承すると、
両方の子クラス部分に、親クラスのメンバ変数を含んでしまう

孫クラスからすると、どちらの子クラス経由で、
親クラスのメンバ変数にアクセスすべきか、ややこしい

だから多重継承用に、メンバ変数を持たず、メソッドだけを持つ、interface が作られた

is-a・class・継承よりも、has-a・interface・委譲の方が、柔軟性があって好まれる
2018/01/13(土) 10:05:52.35ID:RtHYbtnJ
複数のinterfaceでメソッド名が被ってたらどうするの?
2018/01/13(土) 10:11:05.35ID:i594883x
そんな事態見たことないけど確かにどうなるんだ?
2018/01/13(土) 10:23:17.39ID:Rp7yFlms
パッケージ名とinterface名で指定するんじゃね
367デフォルトの名無しさん
垢版 |
2018/01/13(土) 11:09:24.85ID:rLmRRKlD
>>364
実装はサブクラス側でやるんだからどうもなんねーだろ
2018/01/13(土) 12:17:34.58ID:7idPsqBM
delegataion 使った >>355 みたいなので Interface1 と Interface2 に同じメソッドが定義されている場合にはエラーになるけど、
SubClass で override しろって IDE が言ってくるので、それすればエラーは消える
delegatation 使わないのなら >>367 が言うようにサブクラスで実装するんだから関係無いね
2018/01/13(土) 12:18:29.46ID:7idPsqBM
Delegataion ってなんだ・・・Delegation ね
2018/01/18(木) 20:57:21.62ID:uaAP/nEg
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.とかついてるのですが、これはなんなんでしょうか??
2018/01/18(木) 22:13:56.56ID:h6w5lyYQ
>>370
block内でのthisがその型のインスタンスになる

https://ideone.com/KsS26N
2018/01/18(木) 22:42:32.43ID:uaAP/nEg
>>371
ありがとうございます。

うーん。ややこしい。何のためにこんなのが必要なんだ・・
呼び出される関数の方でもインスタンス(val a = A("aa"))を作って
関数を呼び出さないといけないってことですよね。
2018/01/18(木) 23:47:50.82ID:h6w5lyYQ
>>372
基本的にはDSL用の機能だと思う
https://ideone.com/CGz7Fp
https://kotlinlang.org/docs/reference/type-safe-builders.html
2018/01/22(月) 22:47:52.97ID:FT3BkIDm
delegateってパフォーマンス悪かったりします?
>>361のような方法を試したら、目に見えて遅くなりました。
もっとも他にも色々いじった後だから、他が原因の可能性もありますが....。
2018/01/23(火) 18:27:08.00ID:himcush7
仕組み的に体感出来る程の劣化は起きないと思う
376デフォルトの名無しさん
垢版 |
2018/01/23(火) 19:46:07.93ID:leMx6cGU
エルビス式のエルビスって何ですか?プレスリーしか出てこないんですけど
2018/01/23(火) 19:47:46.14ID:leMx6cGU
と思ってググったら本当にプレスリー由来だったのね、、
2018/01/23(火) 23:26:39.49ID:9+CEbA1m
>>375
調べてみたら、delegateよりも前に速度低下はあったようでした。ありがとうございました。
2018/01/24(水) 07:00:29.98ID:YOaqJu3C
?: これのどこがプレスリーなんだよ?と思った時の脳内に浮かんでいたのはサタデーナイトフィーバーの人だったのは俺だけだろうな
380デフォルトの名無しさん
垢版 |
2018/01/24(水) 09:46:01.11ID:yQK5cwW2
?:)
2018/01/24(水) 12:18:03.47ID:wZvPOi0Q
?が5
2018/01/31(水) 15:59:06.95ID:4N9XMFe/
>>161だけど
Javaのリリースサイクルが6か月ごとになったので2018/3/20リリース予定
http://openjdk.java.net/projects/jdk/10/
ローカル変数の型推論きたー

後はGoogleさん早めにAndroidで使えるように。
2018/01/31(水) 16:05:14.51ID:4N9XMFe/
後はkotlinを使ってみて自分的にうらやましのは
・Null safety
・1ファイルに複数のクラス書ける
・コルーチン
ぐらいかな・・
2018/01/31(水) 18:17:51.93ID:hwMh3j1W
俺は
・val
・最後の引数のラムダを括弧の外に書けること
・「==」でnull考慮込みのequals()呼び出しにしてくれること
2018/01/31(水) 18:53:28.83ID:F5No3k5g
とにかくJavaと同じことをするのに記述量が圧倒的に少なくて済むのが良いわ。

一つ一つはそれこそ数行程度の違いになるけど、チリが積もって最終的にかなり短くなって可読性が段違い
2018/01/31(水) 20:20:09.40ID:CrWRl7VR
Sから始まる某言語と違って何故か読みやすい
2018/01/31(水) 20:58:06.42ID:UVbJv7LF
Smalltalkの悪口はやめろ
2018/01/31(水) 21:14:03.77ID:AX72W1bb
俺のS言語が・・・
2018/01/31(水) 23:02:47.38ID:Mw3vWzBx
SQL
2018/02/01(木) 07:20:22.31ID:d+x91pir
Objective-Cを経験すれば大抵の言語は涙が出るほど読みやすい
2018/02/01(木) 07:42:19.46ID:XxNDw1fe
Schemeの悪口?
2018/02/01(木) 08:58:05.91ID:0qxcm1IL
perl「せやな」
2018/02/01(木) 23:11:28.90ID:PazMLs1n
>>390
現役言語じゃないからもう新たに触ることないしなあ
394デフォルトの名無しさん
垢版 |
2018/02/01(木) 23:15:10.58ID:oMkeAueE
そういえば Objective-C ってMacとかiOSで使われてるんだっけ?
2018/02/01(木) 23:28:46.21ID:xVAl4gBi
MacとかiOSでしか使われていない
2018/02/02(金) 01:47:08.99ID:sNIUDAKb
SwiftはiOSでしか使われていない
2018/02/02(金) 05:20:56.67ID:s78i1eOK
いくらいい言語でも林檎様の傘下だと何されるかわからんからな
使えねーわ
2018/02/02(金) 07:12:32.55ID:gnaQFUD2
swiftってオープンソースじゃなかったっけ?
2018/02/02(金) 08:41:42.94ID:V6ypn24z
Swiftはオープンソース化以降は言語開発もコミュニティベースで行われてる
頑張ってはいるようだけどいくつかの問題でObjCに戻る人も割と居るし
クロスプラットフォーム系との競合もあって人気は減少傾向
2018/02/02(金) 08:43:29.60ID:2JRgrNpV
Kotlinの方がよくできてる
2018/02/02(金) 09:20:26.67ID:V6ypn24z
Kotlinでのクロスプラットフォームは Kotlin/Native(まだベータ) と Multi-OS Engine があるけど
UI部分が固有になるから React NativeのKotlin版のような
UIブリッジするライブラリが生まれてほしい
WebViewも手だけど
2018/02/02(金) 09:22:41.58ID:V6ypn24z
JavaScriptエンジンを挟みたくない
2018/02/02(金) 12:06:11.99ID:jTuMDwxk
C#でええやん
2018/02/02(金) 12:35:18.11ID:V6ypn24z
コミュニティの条件に収まらなくてサブスクリプションが要る都合でそっちは二の足
言語自体は割と好きだけど
2018/02/02(金) 19:53:43.35ID:YRu1rdgq
何年か前はiOSとandroidのクロスプラットフォーム開発はいまいちすぎて結局それぞれネイティブて開発したけど、今はどうなんだろうな
最近スマホアプリさわらんからよくわからん
406デフォルトの名無しさん
垢版 |
2018/02/02(金) 21:37:32.04ID:00GaqTOE
あ、そうだ。iOSやMacの開発にKotlin使えれば全て丸く収まるじゃねえか。
MacだけならJREあるから既に動くのかな?
2018/02/02(金) 21:43:50.82ID:zvuXw/YQ
Android studioはMac版もあるし当然Kotlinも使える
ただ、iPhoneアプリは作れねぇ
2018/02/02(金) 22:32:37.72ID:iI1eaKOA
>>406
MacとiOSはMacが無いとコンパイルすら出来ないって糞みたいな仕様が一番のネックだからな
2018/02/02(金) 22:38:07.24ID:zvuXw/YQ
Windowsもネイティブアプリはそうだろ? 違うっけ?
2018/02/02(金) 23:17:28.47ID:2JRgrNpV
クロスプラットフォームは糞
2018/02/02(金) 23:39:49.14ID:4J1UtiB3
Xamarin C#が正解
2018/02/03(土) 00:17:14.67ID:Pk3rL+mD
ちょまど教の狂信者か
2018/02/03(土) 02:29:40.70ID:rIodJ30B
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エンジニアは全員死んだ方が良い
2018/02/03(土) 08:57:07.88ID:cx3bBBlj
>>413
KotlinもUIはJVM, JS, Nativeとそれぞれ開発しないといけないという方向性なんだよね。
マルチプラットフォームでUIもKoltinで1回書くだけで済む日は来ないんだろうか。
>>406
Gluonという会社がAndroidとiOS向けのJVM(JavaFX付き)を作るとか言っていたんだけどどうなったのかな。
ページを見に行くとあるにはあるっぽい。
使った人とかいます?
2018/02/03(土) 09:01:37.02ID:w4Z6vlfg
>>406
Macだけなら余裕。
TornadoFXであっさり作れる。
2018/02/03(土) 09:18:56.79ID:JaWlScCi
>>406 >>407
KotlinでiPhoneアプリは作れる
2018/02/03(土) 09:33:24.43ID:JaWlScCi
参考

Android・iOS対応のクロスプラットフォームライブラリ、Intel Multi-OS Engine(MOE)
https://qiita.com/yyYank/items/2d96640d713a527691be

Kotlin/Nativeを使ってiOSアプリを作ってみる
https://qiita.com/noripi/items/4ee969c48b3da5ca6fbd
2018/02/03(土) 09:37:01.92ID:cwvA0gbQ
面倒くさそう
2018/02/03(土) 09:45:23.72ID:JaWlScCi
>>418
面倒なら
 ・SwiftやObjective-Cで直に作る
 ・Cordovaなどで作る
 ・iPhoneアプリは諦める
詳細は該当のスレでどうぞ
2018/02/03(土) 09:50:47.55ID:w4Z6vlfg
>>417
こんなんあるのか、知らなかった。試してみるよありがとう。
ただクロスプラットフォームのライブラリって大体最終的にうまくいかないから、つい警戒してしまうw
2018/02/03(土) 10:04:18.17ID:g4V8Xpml
Xamarin C#が正解だよ
簡単で高品質
2018/02/03(土) 11:58:07.39ID:rIodJ30B
時間掛かって低品質のアプリが出来上がるだけクロスプラットフォーム
2018/02/03(土) 12:05:11.68ID:Pk3rL+mD
正式セミナーで技術より人脈なんて宣伝する糞プラットフォームは使わない
2018/02/03(土) 12:51:45.20ID:3SRelbb9
Xamarinは簡単だけど高品質かと言われると、、
2018/02/03(土) 12:54:52.62ID:3SRelbb9
実際クロスプラットフォームが最適なアプリってそんな多くないよな。
何かの画像処理をするとかそういう端末内で複雑なビジネスロジックを組まなくちゃいけないものならそこを共通化できるメリットはあるだろうけど、
サーバーサイドと通信して何かをするのがメインなクライアント系アプリなら普通にネイティブで2つ作った方が楽
2018/02/03(土) 13:19:34.45ID:cwvA0gbQ
Unityでええやん
2018/02/03(土) 13:29:02.91ID:g4V8Xpml
APIクライアントやちょっとした処理も完全に共通化できるから便利だよXamarin
Java,Kotlin / Swift,obj-cだと日付型と日付操作apiみたいな些細な部分でも違いがある
C#にすると文法や基本ライブラリの粒度で共通化できる
2018/02/03(土) 13:58:55.43ID:cwvA0gbQ
C++使いなら、QTとかSDLとか
2018/02/03(土) 14:47:37.76ID:rIodJ30B
Xamarinみたいな糞はプロトタイプ開発でしか使い道ない
まともなアプリはみんなネイティブ
任天堂のXamarin製アプリもカブドットコムのXamarin製アプリも星平均3.0の糞アプリ認定されてる
Microsoft自身も糞認定して使わない糞開発環境がXamarin
2018/02/03(土) 15:38:21.40ID:I3vkx3c9
Unityは日本語入力の問題さえ解決すれば多分かなりの部分の解決になると思う。
なんせ画面を描くところから自力でやってるからな。
業務アプリでもポチポチ画面押すだけの物とか結構いけると思うし、実際あるんじゃないかな。
2018/02/03(土) 15:57:45.75ID:h3rMVgMV
共通部分はともかくUiはそのプラットフォームのネイティブでやったほうが結局は簡単なんだよな
2018/02/03(土) 16:06:38.75ID:g4V8Xpml
どのプラットフォームでもネイティヴで書いてもVとVMは普通に分離するだろ
なんでマルチプラットフォーム対応で追加のコストはかからない
2018/02/03(土) 16:32:01.67ID:c+hycmxt
>>430
おう業務アプリと入力フォーム部品の蜜月性なめんあ
Unityはゲームと家庭向けアプリ特化の方向性のままでいいと思うぞ
2018/02/03(土) 18:14:08.46ID:05c/5eCT
クロプラは凝ったことしようとすると詰むね
2018/02/03(土) 18:35:13.80ID:biHS6/dY
Xamarin程の糞はない
2018/02/03(土) 18:46:40.72ID:I3vkx3c9
>>433
確かにそうか。
社内カレンダー通りの休日がマークされる日付選択とか、営業日入力とか色々あるもんな。
2018/02/03(土) 23:11:11.34ID:w4Z6vlfg
>>432
すまんけどそろそろXamarinスレに帰ってもらっていいかな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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