X



Kotlin 2
■ このスレッドは過去ログ倉庫に格納されています
0634デフォルトの名無しさん
垢版 |
2018/02/19(月) 23:50:04.20ID:bFR3uyhH
ラムダに束縛したいのはthisだけとは限らないしネストも有り得るので
クラス外の関数として分離した場合の引数名のイメージで変数名付けてる

val view = this
val cal = activeCalculator
async {
  cal.recalc()
  transaction {
    val tran = this
    check(cal, tran)
  }
  view.notifyUpdate()
}
0638デフォルトの名無しさん
垢版 |
2018/02/20(火) 10:02:36.87ID:pltRTpB+
>>636
フォントが違うと見え方が変わりそう
0640デフォルトの名無しさん
垢版 |
2018/02/20(火) 12:57:02.91ID:DWBDu+Jk
ま、しかし、あまりにもネストが深くなるようならロジック考え直した方が良いかも
0641デフォルトの名無しさん
垢版 |
2018/02/20(火) 20:10:18.67ID:xSX01qXm
メソッド参照とか別クラスとか。
0642デフォルトの名無しさん
垢版 |
2018/02/20(火) 20:29:10.81ID:qXSQ9QV9
ネストは三段ぐらいまでにしといた方がいいだろうな。
その辺が迷宮の入り口だ。

Cのポインタとかも同じ。3段以上先には魔物が住んでいる。
0644デフォルトの名無しさん
垢版 |
2018/02/20(火) 22:17:03.69ID:/iBGk+pN
androidでデータバインディングしようとして
class Foo {
 @Bindable
 val bar get() = hoge.bar
}
とかできないの??・・・
0645デフォルトの名無しさん
垢版 |
2018/02/20(火) 22:18:25.44ID:/iBGk+pN
エラー内容はThis annotation is not applicable to target 'member property without
backingField or delegate'です。
どうしたらいいでしょかね
0646デフォルトの名無しさん
垢版 |
2018/02/20(火) 22:30:04.18ID:/iBGk+pN
Javaでは
class Foo {
 @Bindable
 String getBar() { hoge.getBar() }
}
で、hogeはFooのフィールド変数です。
0648デフォルトの名無しさん
垢版 |
2018/02/21(水) 00:01:54.65ID:CION/kfn
また、アノテーションだけど。遅延初期化ではアノテーションつけれんの?しょぼーん。
@field:Transient
val lazyVal by lazy {}
だめか・・
0649デフォルトの名無しさん
垢版 |
2018/02/21(水) 14:48:51.57ID:aopUu534
いま触れてないけどkotlin-Nativeってどんな感じ?
ほとんどなんでもコンパイルかけれる?
見たところLLVM通すから行けそうだけど
0650デフォルトの名無しさん
垢版 |
2018/02/21(水) 15:35:13.89ID:HWbyxxJS
実用で使うのはまだ怖いけど、遊びで触る分にはちゃんと動くよ。
javaの標準パッケージが全く使えないから、jvmで動かす前提で作ってあるクラスだのライブラリだのが動かないという辛さはある。
0651デフォルトの名無しさん
垢版 |
2018/02/21(水) 16:03:44.92ID:wwQ+gY6z
javaのパッケージ使えないんならわざわざJVM言語使う価値なんかないわwさよなら〜
0652デフォルトの名無しさん
垢版 |
2018/02/21(水) 16:13:56.98ID:4d1xezjM
うん。はっきり言って現状ではこれを使うメリットが何一つ思い浮かばないよ俺も。
0653デフォルトの名無しさん
垢版 |
2018/02/21(水) 17:59:59.69ID:ftdNQJg9
地味にアップデートされてるからJBが飽きなければそのうち実用レベルになるかもねえ
0654デフォルトの名無しさん
垢版 |
2018/02/21(水) 18:05:11.04ID:2C7myRiq
それなりの標準ライブラリはあるんでしょ?まだないの?(ないわけないか。なければ Hello world も出せないもんな)
0655デフォルトの名無しさん
垢版 |
2018/02/21(水) 18:28:14.61ID:aopUu534
ありがとう。
なるほどまだ様子見しとくわ
Javaの標準パッケージ動かないの辛いね
0658デフォルトの名無しさん
垢版 |
2018/02/21(水) 19:15:48.38ID:CION/kfn
この言語意味不明になってきた。
class Test {
 var str: String
  get() = field
  set(value) { }
 constructor() {
  str = "あいう"
 }
}
val t = Test()
普通にstrがnullになる
0659デフォルトの名無しさん
垢版 |
2018/02/21(水) 19:17:58.58ID:CION/kfn
セカンダリコンストラクタでstrのbakcingFieldにアクセスできないの??
 constructor() {
  str = "あいう" // これはsetter経由のプロパティアクセス
 }
0662デフォルトの名無しさん
垢版 |
2018/02/21(水) 19:30:46.29ID:CION/kfn
>>661
意図はないけど、null安全とかいっておきながらkotlin側だけでnull入るコード書けるのまずいような気がする。
いや、プロパティの初期化方法がうざくて色々調べてたら気づいただけ。
0663デフォルトの名無しさん
垢版 |
2018/02/21(水) 19:35:19.91ID:CION/kfn
プロパティ宣言すると初期値与えろってうるさいんだけど、うるさいのはいいんだけど初期値の与え方が
val str: String = プロパティイニシャライザ
プロパティイニシャライザ以外、bakcingFieldに直接与える方法ないの??
>>659だって、初期値与えろってコンパイルエラーでるから、セカンダリコンストラクタに
str = "あいう" // これはsetter経由のプロパティアクセス
書いたんだけど、setter経由のプロパティアクセスだとsetterが>>658のようになってるって初期値実際与えられてないし・・
0664デフォルトの名無しさん
垢版 |
2018/02/21(水) 19:38:04.92ID:CION/kfn
>書いたんだけど、setter経由のプロパティアクセスだとsetterが>>658のようになってるって初期値実際与えられてないし・・

>書いたんだけど、setter経由のプロパティアクセスだとsetterが>>658のようになってるいじわるコードだと初期値実際与えられてないし・・
に修正
0665デフォルトの名無しさん
垢版 |
2018/02/21(水) 19:44:04.71ID:ftdNQJg9
そういうことね
確かにこれならsetterの部分でコンパイルエラー出て欲しい気がするな
帰ったらドキュメント舐め回してみるか
0667デフォルトの名無しさん
垢版 |
2018/02/21(水) 22:24:25.01ID:mU+xwBkv
>>666は勘違いでした。申し訳ない。
>>658
多分あまりにも悪意に満ちた常人なら間違え内容のない契約プログラミング違反だから、
そこまでは面倒を見られないということかも。
0668デフォルトの名無しさん
垢版 |
2018/02/21(水) 22:33:20.79ID:A2iqRMA5
悪意の無い初心者がめちゃくちゃ書いてもちゃんと面倒見てくれるべきだと思う
0669デフォルトの名無しさん
垢版 |
2018/02/21(水) 23:05:16.86ID:CION/kfn
null安全の導入とともに変数は宣言時に初期値を与えなきゃいけなくなって、
ローカル変数は宣言時に与えなきゃいけないけど、インスタンス変数は宣言時または
コンストラクタ内で与えればOKなんだけど、
backingFieldを持つプロパティと相性悪かった?ってことかな。

backingFieldを持つプロパティはプロパティイニシャライザを与えるか、
コンストラクタ内でbackingFieldに直接初期化するという条件を付けくわえないとだめ?

field:str = "あいう" // コンストラクタ内でのみ使えるbakckingFieldにアクセスする専用構文の導入が必要 か
str = "あいう” // コンストラクタ内でのプロパティへの代入はsetterは経由しないとかの条件が必要
0670デフォルトの名無しさん
垢版 |
2018/02/22(木) 00:40:47.03ID:P3OwyHQx
バグ相当だと思う

初期化(setter呼び出し)の有無は判定出来ているのだから
コンパイルエラーにするのが難しいなら
その直後にそのプロパティのBacking Fieldがnullだったら
KotlinNullPointerExceptionを投げる処理を暗黙的に追加すべき
0672デフォルトの名無しさん
垢版 |
2018/02/22(木) 01:34:10.26ID:2g+h2XZc
null安全の導入->非nullableのクラス型のデフォルト値なんてないから、変数は必ず初期化する
必要がある->(この再、nullable、非nullable関係なく全変数初期化するように)

未初期化の変数がコンパイラエラーにならないんて、これが言語仕様なら
仕様がクソだったってことだな(さすが、適当に作った言語ってことに)。
コンパイラのバグであることを祈ろう。
0673666
垢版 |
2018/02/22(木) 06:49:37.65ID:W5l1Fr+S
>>658は、Test()でconstructor()が呼ばれないことについて
エラーも警告も出ないことも問題かもしれない。
>>672
Javaで1回しか代入できないフィールドを作るのにsetterに渡された値を捨ててしまうことは
手法としては考えれられなくはないから、バグではなく仕様かも。
逆にチェックを厳しくし過ぎると出来そうなことができなくなる罠も出てくるから
完璧は無理かと。
Kotlin自体「実用的な」範囲でバランスをとったというコンセプトだし。
0674666
垢版 |
2018/02/22(木) 06:57:22.88ID:W5l1Fr+S
>>673
の一つ目は勘違いでした。
Kotlinは便利だけど、いくつかの規則は言語仕様でなく契約に基づいていて
契約違反のコードは勘違いを起こさざるを得ないと言い訳する...orz
0677デフォルトの名無しさん
垢版 |
2018/02/22(木) 07:44:53.50ID:HpXxCMc4
一回しか代入したくないならセッターの中にそういう処理を書けばいいだけだし、
非NullableなのにNullが入る状態でコンパイルできるのはどう考えてもバグでしょ
0678デフォルトの名無しさん
垢版 |
2018/02/22(木) 07:45:17.47ID:P3OwyHQx
>>673
そういう手法のときは内部フィールド側はNullableになっているべきじゃないかな
通常ケースの一つとしてnullがあるパターンなわけだから

private var strF: String? = null
var str: String get(){return strF ?: ""} set(value) { }
0679デフォルトの名無しさん
垢版 |
2018/02/22(木) 09:29:54.25ID:tZO46ghF
setterを空にしたらバッキングフィールドへの代入は永遠にされないのでは?
外部からバッキングフィールドへの代入ってできないよね?
(getterで値を変更するカウンターみたいなやつは別として)。
0680デフォルトの名無しさん
垢版 |
2018/02/22(木) 21:30:53.59ID:MQzOZIuj
Nullableでないプロパティのsetterがnullの状態で呼ばれることがあるって考えるとなんか気持ち悪いな
俺の感覚だとsetterが呼ばれた時点でフィールドは初期化されていて欲しいしフィールドの初期化にsetterは使って欲しくない
0682デフォルトの名無しさん
垢版 |
2018/02/23(金) 00:50:16.39ID:U4AoY/IO
>>658の var str : String の部分を var str = "aaa" みたいに書くと var なのに str に何を代入しても
中身が"abc"のまま変化しないプロパティが完成w
0684デフォルトの名無しさん
垢版 |
2018/02/23(金) 07:49:04.02ID:bsuGQjVb
>>682
ワロタ
嫌な会社を辞めるときにテロとしてそういうコード残しておくイタズラとかできそう
それはそうとnullableじゃないのにnullになりうるセッターがコンパイル通るのはやっぱおかしいよな
そんなんする奴がいるのかって話ではあるが
0685デフォルトの名無しさん
垢版 |
2018/02/23(金) 08:31:33.24ID:nqFe2RWJ
githubにあるkotlinのプロジェクトはissuesのリンクがないや
どこに報告すればいいんだ
0690デフォルトの名無しさん
垢版 |
2018/02/23(金) 20:44:31.66ID:Py5a3myD
>>688
C#はこういうこと起きないの?
てか、そもそも同じような形式のプログラム作れるの?
0692デフォルトの名無しさん
垢版 |
2018/02/23(金) 21:26:34.63ID:i7MOfoRF
8.0ではoptinでnull安全にできるようになるんじゃなかったけ。まあ、でもmicrosoftはこんなポカしないと思うけど。
0696デフォルトの名無しさん
垢版 |
2018/02/23(金) 22:46:50.15ID:ZKkKvK7/
完全に趣味でSwift触り始めたんだけど、ことりんと似すぎてて脳の切り替えが大変
0702デフォルトの名無しさん
垢版 |
2018/02/24(土) 08:17:33.01ID:vmshfWHt
引数や戻り値の属性(アノテーション)としての出自でNullable (@Nullable)
型引数を持つデータ構造として出自でOptional (Optional<T>)
0711デフォルトの名無しさん
垢版 |
2018/02/24(土) 23:25:19.26ID:QE7g/pJn
神は糞である。
0715デフォルトの名無しさん
垢版 |
2018/02/25(日) 11:44:58.69ID:XjF3qDop
こんな本が出てたんだな。

Androidアプリ開発の教科書
http://amzn.asia/59lxVwl
0716デフォルトの名無しさん
垢版 |
2018/02/25(日) 11:46:33.02ID:XjF3qDop
あ、Kotlin で検索したら出てきた本だけど Kotlin とは限らないみたいだな。すまん。
0718デフォルトの名無しさん
垢版 |
2018/02/25(日) 12:40:42.33ID:pcyqC+jB
Kotlinイン・アクション、2017

Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016

せっかく太郎が、イン・アクションを参考にして、わかりやすく書いたのだから、
日本人は、太郎本を読んだ方がよい
0719デフォルトの名無しさん
垢版 |
2018/02/25(日) 13:02:41.55ID:OHKw3fir
情報量はインアクションの方が多いから、わざわざ薄めた本を買う必要なんてないよ
0721デフォルトの名無しさん
垢版 |
2018/02/25(日) 14:16:36.00ID:4s22ePtw
Kotlin本といえば今のところインアクションとスタートブックの2択だと思うけど、
「難しい」って理由でレビュー評価下げるのはどうよ?と思ったんで、難しい以外に
インアクションで問題点ある?
バージョンが古いとか?
0722デフォルトの名無しさん
垢版 |
2018/02/25(日) 14:31:03.18ID:VQCl2C19
※716
Androidの入門本なんてAndroid搭載機種の種類と同じくらい大量に出てるのになぜわざわざそれを貼ろうと思ったのか
0725デフォルトの名無しさん
垢版 |
2018/02/26(月) 08:03:23.98ID:RZjRtr5i
知らんけどkotlinのandroid入門書なんてもう山ほど出てるんちゃうの?まだjavaばっかなの?
0726デフォルトの名無しさん
垢版 |
2018/02/26(月) 08:23:30.09ID:t40oU2wX
まだ一冊しかないのでは?
0729デフォルトの名無しさん
垢版 |
2018/02/26(月) 09:20:17.57ID:G+urRbGd
細切れ情報を探すのはやだな。レベルも方針もバラバラだし。
良書があるなら本がいい。
0731デフォルトの名無しさん
垢版 |
2018/02/26(月) 09:43:22.22ID:CZmy/XEe
本は中古やで何冊かあったよ、まだ高かったけど
正直Pythonは失敗だったと思う
■ このスレッドは過去ログ倉庫に格納されています