Kotlin 2
■ このスレッドは過去ログ倉庫に格納されています
俺は逆に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が入る状態でコンパイルできるのはどう考えてもバグでしょ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる