JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
※前スレ
Kotlin 5
https://mevius.5ch.net/test/read.cgi/tech/1544268581/
探検
Kotlin 6
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2019/06/22(土) 15:59:57.23ID:zj+KJbMh359デフォルトの名無しさん
2019/10/25(金) 08:03:33.95ID:h86JIRQS >>358
JavaからScalaを呼び出せるはずだから、Kotlinからも呼び出せるのでは?
JavaからScalaを呼び出せるはずだから、Kotlinからも呼び出せるのでは?
360デフォルトの名無しさん
2019/10/29(火) 19:28:43.34ID:/JOXqSLR bit演算子がand/orで、conditionalの方が&&/||って紛らわしいな。
361デフォルトの名無しさん
2019/10/30(水) 09:41:04.16ID:C/RG5q83362デフォルトの名無しさん
2019/10/30(水) 10:21:31.19ID:boKIoRF+ 単語と記号の混在が紛らわしいって話でしょ
VB系がAndとAndAlsoで、C系が&と&&で一貫しているのに対して、Kotlinはandと&&の組み合わせを選んでて言われてみると少し変
andはメソッドで&&は演算子だから差別化したかったというなら理解できるが、andを演算子オーバーロードしなかったのは何でだろうな
notはしてるのに
VB系がAndとAndAlsoで、C系が&と&&で一貫しているのに対して、Kotlinはandと&&の組み合わせを選んでて言われてみると少し変
andはメソッドで&&は演算子だから差別化したかったというなら理解できるが、andを演算子オーバーロードしなかったのは何でだろうな
notはしてるのに
363デフォルトの名無しさん
2019/10/30(水) 10:32:29.86ID:C/RG5q83 VBではAndもAndAlsoも、条件分岐用(BOOL系)で、AndAlsoが、
C での&&相当なんですね。x And y も C のx && yに近いが、
xが偽の場合でもyを評価してしまうところが && と違う。
そこで && と同じ動作を行わせるために導入されたのが AndAlsoと。
C での&&相当なんですね。x And y も C のx && yに近いが、
xが偽の場合でもyを評価してしまうところが && と違う。
そこで && と同じ動作を行わせるために導入されたのが AndAlsoと。
364デフォルトの名無しさん
2019/10/30(水) 16:18:46.97ID:1J5CWeWV Pythonは、kotlinとは反対だな。
and/orはいかにも文章的で、こっちの方がしっくりくる。
and/orはいかにも文章的で、こっちの方がしっくりくる。
365デフォルトの名無しさん
2019/10/30(水) 17:38:05.90ID:C/RG5q83 それに、&& や || は長さも & や | より長いので、少し長い and, or と対応し易い。
後やはり、伝統的なBASIC言語との互換性は重要だ。そっちを覚えている人は
世界では沢山入るはず。特にアメリカ。
後やはり、伝統的なBASIC言語との互換性は重要だ。そっちを覚えている人は
世界では沢山入るはず。特にアメリカ。
366デフォルトの名無しさん
2019/10/30(水) 17:38:32.15ID:C/RG5q83367デフォルトの名無しさん
2019/10/30(水) 20:40:57.63ID:6r1QZ6yg and, orは値によっては計算を評価しないというifの役目もしてるから
ほかの演算子と一緒くたにするのは気分が悪かったのかもしれない
とおもったけど&&使ってもandと評価される項目一緒だっけ
ほかの演算子と一緒くたにするのは気分が悪かったのかもしれない
とおもったけど&&使ってもandと評価される項目一緒だっけ
368デフォルトの名無しさん
2019/10/31(木) 06:45:28.23ID:GYAqAxt3 Kotlinの言語開発者は、andとorは拡張関数で実装すればKotlinの文法の範囲内で文章的に書けると思ったのかも。
ただ、>>367が指摘するように拡張関数のand, orは短絡評価がないから
&&, ||とは同じ動作にならない上にパフォーマンスも若干落ちるという残念な仕様に。
将来的に短絡評価するアノテーションとかを作れば何とか出来ると思っているのかいないのか。
ただ、>>367が指摘するように拡張関数のand, orは短絡評価がないから
&&, ||とは同じ動作にならない上にパフォーマンスも若干落ちるという残念な仕様に。
将来的に短絡評価するアノテーションとかを作れば何とか出来ると思っているのかいないのか。
369デフォルトの名無しさん
2019/10/31(木) 07:22:01.32ID:HKEmMyl3 >>368
短絡評価しないから残念というものではなく副作用を考えて使い分けるものだよ
だから多くの言語ではわざわざ2種類用意されてる
前段については同意だがやはりなぜ演算子オーバーロードしなかったのか疑問
短絡評価しないから残念というものではなく副作用を考えて使い分けるものだよ
だから多くの言語ではわざわざ2種類用意されてる
前段については同意だがやはりなぜ演算子オーバーロードしなかったのか疑問
370デフォルトの名無しさん
2019/10/31(木) 11:07:41.22ID:JXLI+jKB ビット演算と論理演算の違いって>>360が書いてるやろ
ビット演算を短絡評価のない論理演算と捉えてるやつが多くてオシッコちびるわ
ビット演算を短絡評価のない論理演算と捉えてるやつが多くてオシッコちびるわ
371デフォルトの名無しさん
2019/10/31(木) 19:32:54.61ID:ZaVwx2RY kotlin使ったことないもので
372デフォルトの名無しさん
2019/10/31(木) 20:48:39.66ID:rgtTn2y8 ビット演算と論理演算の違いはC C# Javaとかでも同じっすよ
言語仕様を広げたくなかったんじゃね
Kotlinのandとかは言語仕様に無くて単なる標準ライブラリの関数扱いだし
言語仕様を広げたくなかったんじゃね
Kotlinのandとかは言語仕様に無くて単なる標準ライブラリの関数扱いだし
373デフォルトの名無しさん
2019/10/31(木) 20:58:37.80ID:IuiVo8Vq >>371
ただちに使いなさい。
ただちに使いなさい。
374デフォルトの名無しさん
2019/10/31(木) 22:36:23.90ID:GYAqAxt3375デフォルトの名無しさん
2019/11/01(金) 00:09:01.18ID:SSpVj4+E >>374
notやplusは演算子オーバーロードしてるのにandがしてないのが疑問だと言っているんだよ
notやplusは演算子オーバーロードしてるのにandがしてないのが疑問だと言っているんだよ
376デフォルトの名無しさん
2019/11/01(金) 01:05:00.03ID:fA7q3dtP377デフォルトの名無しさん
2019/11/01(金) 01:21:46.87ID:RfnyKZTx 「演算子オーバーロードしなかった」の意味がよくわからない
&演算子が無いことの話なのか、オーバーロード出来るかどうかの話なのか
後者なら単なる関数なので普通に出来るけど
class A(val s:String) { override fun toString() = s }
infix fun A.and(o:A) = A("${this.s}∩${o.s}")
fun main(args: Array<String>) = println( A("x") and A("y") )
&演算子が無いことの話なのか、オーバーロード出来るかどうかの話なのか
後者なら単なる関数なので普通に出来るけど
class A(val s:String) { override fun toString() = s }
infix fun A.and(o:A) = A("${this.s}∩${o.s}")
fun main(args: Array<String>) = println( A("x") and A("y") )
378デフォルトの名無しさん
2019/11/01(金) 09:34:45.45ID:zrbJp7o3 演算子がないことを、演算子オーバーロードしてないと言ってるんだろう
https://github.com/Kotlin/KEEP/issues/142
中の人は演算子提供するのに乗り気じゃなさそうだけどそのうち追加されるんじゃないか
shl/shrとかわかりにくいしand/orも他言語から来ると思考ノイズでしかない
https://github.com/Kotlin/KEEP/issues/142
中の人は演算子提供するのに乗り気じゃなさそうだけどそのうち追加されるんじゃないか
shl/shrとかわかりにくいしand/orも他言語から来ると思考ノイズでしかない
379デフォルトの名無しさん
2019/11/02(土) 17:53:52.29ID:QgMrWwpO ビット演算するとき、|=、&=って激しく便利だし頻出だと思うんだけどなぁ。
380デフォルトの名無しさん
2019/11/02(土) 18:52:11.73ID:5tts/hNl そもそも複数のbooleanで扱うべきフラグをビット演算で1つにしてるAPI設計が良くない説
381デフォルトの名無しさん
2019/11/03(日) 06:01:49.39ID:1XdbflyH382デフォルトの名無しさん
2019/11/08(金) 01:15:52.84ID:cpVwQa3m しーん
383デフォルトの名無しさん
2019/11/16(土) 20:04:36.15ID:IPxvB3iz javaラーがコトリンに乗り換える勉強するのにどれくらい移行期間かかります?
384デフォルトの名無しさん
2019/11/16(土) 20:26:59.99ID:t3f2p1SX 1年働く
385デフォルトの名無しさん
2019/11/16(土) 20:43:38.98ID:C0dcrxXu >>383
君の全角半角のセンスからするとだな
君の全角半角のセンスからするとだな
386デフォルトの名無しさん
2019/11/16(土) 22:11:24.92ID:gv6Xc8ej 超天才でスーパーな人なら入門書パラパラめくって眺めて30分ぐらいかな
387デフォルトの名無しさん
2019/11/16(土) 22:13:58.74ID:gv6Xc8ej 1時間後にはもっと凄い新言語に閃いて作りはじめる
388デフォルトの名無しさん
2019/11/16(土) 23:33:33.74ID:uUrUP5Ld java -> kotlin変換しますか?
Y?/N?
Y -> 数秒まて
Y?/N?
Y -> 数秒まて
389デフォルトの名無しさん
2019/11/17(日) 00:14:20.35ID:JQ6H4Wt1 それだと !! がたくさん残るしそもそもビルド通らない
390デフォルトの名無しさん
2019/11/17(日) 09:48:27.71ID:fq5Zb79J そっから手直しすればいいんじゃない??
無駄が多いし効率も悪いけど…
無駄が多いし効率も悪いけど…
391デフォルトの名無しさん
2019/11/17(日) 11:45:54.92ID:os2yIBUt 3日で慣れる
392デフォルトの名無しさん
2019/11/17(日) 17:31:59.24ID:8gWobnsK あれ?forループで変数インクリメントするようなのできねーじゃん。なに?while使ってやれっての?えー!
ってなってから、なーんだ (a..b).forEach { } でやりゃあいいんじゃん。
と、気づくまでに3日以上掛かった。
ってなってから、なーんだ (a..b).forEach { } でやりゃあいいんじゃん。
と、気づくまでに3日以上掛かった。
393デフォルトの名無しさん
2019/11/17(日) 17:34:56.22ID:8gWobnsK ていうか for (n in a..b) でもいいのだが、a..b が Range になっててあとはコンパイラが自動でうまいことやってくれる事に気づかなかった。
394デフォルトの名無しさん
2019/11/17(日) 23:38:24.23ID:moRzMRqx ひとまず小一時間感覚で書いてみるのは良いとしても
言語リファレンスを一通り流し読みする時間をどこかで確保しないとな
https://kotlinlang.org/docs/reference/idioms.html
言語リファレンスを一通り流し読みする時間をどこかで確保しないとな
https://kotlinlang.org/docs/reference/idioms.html
395デフォルトの名無しさん
2019/11/19(火) 06:21:31.09ID:bEq52YpT !!ってダメなのか?
むしろ入れて解決してるんだが…w
むしろ入れて解決してるんだが…w
396デフォルトの名無しさん
2019/11/19(火) 09:50:11.74ID:LM0oqXyj !!は全部消さないとダメ
397デフォルトの名無しさん
2019/11/19(火) 09:55:32.18ID:c65LTQ+s >>395
ダメじゃないけど沢山あると嫌な感じ
ダメじゃないけど沢山あると嫌な感じ
398デフォルトの名無しさん
2019/11/19(火) 10:47:58.28ID:DczGG2/f Kotlin 1.3.60 リリース
https://blog.jetbrains.com/kotlin/2019/11/kotlin-1-3-60-released/
https://blog.jetbrains.com/kotlin/2019/11/kotlin-1-3-60-released/
399デフォルトの名無しさん
2019/11/19(火) 14:30:37.08ID:trU3CZAC なぜどうしてもそこに必要なのかを説明できない!!は書いてはならない
あとあと絶対にそこでコード的にまたは仕様的にバグるから、むしろ遠回りになる
あとあと絶対にそこでコード的にまたは仕様的にバグるから、むしろ遠回りになる
400デフォルトの名無しさん
2019/11/19(火) 16:25:17.02ID:bEq52YpT null許容変数がnullになるかもしれないから!!なんじゃないの?
そういう認識なんだが
そういう認識なんだが
401デフォルトの名無しさん
2019/11/19(火) 16:29:22.93ID:DczGG2/f val a = ThreadLocal<String>().get()
val b:String = a //暗黙の a!!
val b:String = a //暗黙の a!!
402デフォルトの名無しさん
2019/11/19(火) 19:32:30.25ID:OgKqA1p2 !!は全部消すべき
403デフォルトの名無しさん
2019/11/19(火) 19:39:12.55ID:bMvJvF/Q404デフォルトの名無しさん
2019/11/19(火) 21:21:13.73ID:c65LTQ+s 毛
405デフォルトの名無しさん
2019/11/19(火) 23:23:22.22ID:bEq52YpT >>403
nullになるかも?なだけで実行順を追っていくとならないことが多いからそのままにしている
必要なら対策するけど、ほとんどの場合は実行タイミングに何か値が入ってる
変に怖れて潔癖にならない方がいい
nullになるかも?なだけで実行順を追っていくとならないことが多いからそのままにしている
必要なら対策するけど、ほとんどの場合は実行タイミングに何か値が入ってる
変に怖れて潔癖にならない方がいい
406デフォルトの名無しさん
2019/11/20(水) 00:18:44.73ID:Cb5VPrea !! は、絶対に、null にならない場合だけに使うべし!
notnull
強制キャストと同じ
notnull
強制キャストと同じ
407デフォルトの名無しさん
2019/11/20(水) 00:47:14.79ID:ENHG5n4o 例外が発生するから!!が良くないと考えているならそれはnull安全を履き違えている
重要なのは区別することで、どう処理するかは要件次第
処理のタイミングで非nullであるべき変数なら
ガード節、requireNotNull、!! などによって早期にスマートキャストすべき
そのような箇所で不用意にセーフコール(?.)を使うことはいわゆるエラーの隠蔽に繋がる
nullが正常系の内ならもちろんセーフコールなりエルビスなりで問題無い
重要なのは区別することで、どう処理するかは要件次第
処理のタイミングで非nullであるべき変数なら
ガード節、requireNotNull、!! などによって早期にスマートキャストすべき
そのような箇所で不用意にセーフコール(?.)を使うことはいわゆるエラーの隠蔽に繋がる
nullが正常系の内ならもちろんセーフコールなりエルビスなりで問題無い
408デフォルトの名無しさん
2019/11/20(水) 00:51:02.81ID:I+/vz2hc !!はforce unwrapと呼ぶべし!!
!!演算子に名前を付けない言語は滅ぶべし!!
!!演算子に名前を付けない言語は滅ぶべし!!
409デフォルトの名無しさん
2019/11/20(水) 00:53:35.65ID:ENHG5n4o410デフォルトの名無しさん
2019/11/20(水) 01:40:06.34ID:We9TyGj3 例えば画像Aを表示する座標x,y
初期値を画面外の-500,-500にしておけば!!は消せるけど
画面外に表示ってリソースの無駄
これを良しとするやつは複数の画像を画面外に常に表示している
逆にメモリ足らなくなって落ちない?
使わない場合はnullでよくね?
読込みに時間かかるなら初期値設定するのもありだけど
あくまで重い画像を複数使用する例なんだけどnullを悪としてとらえず利用しようよ
上記の理由により、!!潔癖症はただ邪魔なだけ
初期値を画面外の-500,-500にしておけば!!は消せるけど
画面外に表示ってリソースの無駄
これを良しとするやつは複数の画像を画面外に常に表示している
逆にメモリ足らなくなって落ちない?
使わない場合はnullでよくね?
読込みに時間かかるなら初期値設定するのもありだけど
あくまで重い画像を複数使用する例なんだけどnullを悪としてとらえず利用しようよ
上記の理由により、!!潔癖症はただ邪魔なだけ
411デフォルトの名無しさん
2019/11/20(水) 02:09:26.97ID:6LF6wg+P !!を使わなくても安全に実装できるのにあえて!!を使うのは頭が悪いですと言っているようなもの
412デフォルトの名無しさん
2019/11/20(水) 07:14:57.99ID:U5Gi9XNc ファイルヘッダとかにマジック定数あるが、これを表現するには
val hoge = arrayOf('a','1').map { it.toByte() }.toByteArray()
みたいな悲しいことしないといけないのでしょうか?
それとkotlinで一般的なバイトバッファを表現するにはByteArrayつかっておけば間違いなないでしょうか?
val hoge = arrayOf('a','1').map { it.toByte() }.toByteArray()
みたいな悲しいことしないといけないのでしょうか?
それとkotlinで一般的なバイトバッファを表現するにはByteArrayつかっておけば間違いなないでしょうか?
413デフォルトの名無しさん
2019/11/20(水) 07:18:15.00ID:U5Gi9XNc 今はJVM環境で使ってますが、一応コード書くときに、特定のプラットホームに依存しないように書けるとこは書こうと思います
ちょっとつっぱしてByteArrayじゃなくてexperiment なUByteArrayを使おうと思いますが
ちょっとつっぱしてByteArrayじゃなくてexperiment なUByteArrayを使おうと思いますが
414デフォルトの名無しさん
2019/11/20(水) 07:47:32.01ID:ENHG5n4o415デフォルトの名無しさん
2019/11/20(水) 09:35:14.21ID:kKZK+bE1 >>410
使わない場合はnull、っていうケースは文字通りガード節や?.を使って
nullならなにもしない場合、と同義なのでは
!!を使うべき例としてはピンとこない
!!を使っている関数は引数つまり関数の仕様としては一見null許容型だけど、実装としてはnullを拒絶する不整合がある
何らかの事情で回避が難しいときの苦肉の策で、多用するのは作りが悪いように思う
あとは関数内で既に非nullであることが保証されてるパスの中にいる場合の簡略化で使うか
でもこれを多用するようなら関数が長すぎるという問題を暗に抱えていたり
安全や可読性よりも手抜きを選ぶ悪癖の疑いを感じる
使わない場合はnull、っていうケースは文字通りガード節や?.を使って
nullならなにもしない場合、と同義なのでは
!!を使うべき例としてはピンとこない
!!を使っている関数は引数つまり関数の仕様としては一見null許容型だけど、実装としてはnullを拒絶する不整合がある
何らかの事情で回避が難しいときの苦肉の策で、多用するのは作りが悪いように思う
あとは関数内で既に非nullであることが保証されてるパスの中にいる場合の簡略化で使うか
でもこれを多用するようなら関数が長すぎるという問題を暗に抱えていたり
安全や可読性よりも手抜きを選ぶ悪癖の疑いを感じる
416デフォルトの名無しさん
2019/11/20(水) 11:41:13.79ID:NJaF4OnZ !! null即エラー演算子。
force unwrapでは全く本質を言ってない。
force unwrapでは全く本質を言ってない。
417デフォルトの名無しさん
2019/11/20(水) 12:48:32.17ID:RdkdotSG418デフォルトの名無しさん
2019/11/20(水) 14:43:02.05ID:6LF6wg+P !!を使うやつとは一緒に仕事したくない
419デフォルトの名無しさん
2019/11/20(水) 15:16:56.32ID:zV5Z2B9p なんだと!!
420デフォルトの名無しさん
2019/11/20(水) 15:29:37.98ID:Y9hbFaQz >>419
ちょっとワロタw
ちょっとワロタw
421デフォルトの名無しさん
2019/11/20(水) 17:12:40.65ID:gQNT2Wxf val なんだと: Int? = null
422デフォルトの名無しさん
2019/11/20(水) 22:37:14.64ID:F7b4EQq2423デフォルトの名無しさん
2019/11/20(水) 23:09:14.16ID:V5o6b7gh 絶対nullにならないなら型変えるべき
424デフォルトの名無しさん
2019/11/20(水) 23:19:54.39ID:Cb5VPrea >>410
もし遅延初期化、lateinit が使えるなら、その方がよい
もし遅延初期化、lateinit が使えるなら、その方がよい
425デフォルトの名無しさん
2019/11/21(木) 00:03:38.40ID:OWTu/Eih java のライブラリの @Nullable とか、json で条件によって null / not null が切り替わるプロパティとか
426デフォルトの名無しさん
2019/11/21(木) 02:18:34.58ID:TLoSEVN8 !!使うやつは馬鹿でFA
427デフォルトの名無しさん
2019/11/21(木) 03:55:49.74ID:Bt7t64ET ならなんであるんだろう
428デフォルトの名無しさん
2019/11/21(木) 04:20:54.23ID:UJdhtJJC あたたたたたたたひでぶ!!
429デフォルトの名無しさん
2019/11/21(木) 06:28:21.69ID:87sZA2Me >>427
nullableな値を返す外部の関数について、文脈上nullが返らないことが保証できる場合にまで
null対応を書くのは、可読性やパフォーマンスの上で無駄が多いからだと思う。
特にJava(あるいはJavascriptやnative)由来の関数とか。
nullableな値を返す外部の関数について、文脈上nullが返らないことが保証できる場合にまで
null対応を書くのは、可読性やパフォーマンスの上で無駄が多いからだと思う。
特にJava(あるいはJavascriptやnative)由来の関数とか。
430デフォルトの名無しさん
2019/11/21(木) 06:34:18.07ID:87sZA2Me431デフォルトの名無しさん
2019/11/21(木) 06:56:28.51ID:SWfOk2xI そのkotlinの存在意義ぶち壊す特異性からしても、どーしても仕方なく使うものであるのだけど
エラー消すおまじないみたいなノリで初心者から中級者が使うので戒められている次第
あと、感染するんだコレ
エラー消すおまじないみたいなノリで初心者から中級者が使うので戒められている次第
あと、感染するんだコレ
432デフォルトの名無しさん
2019/11/21(木) 07:43:43.53ID:rXpcOZh/433デフォルトの名無しさん
2019/11/21(木) 08:03:18.32ID:tRt1kz+E 1.3.60出てたから久しぶりにkotlin native試してみたらhello,worldのコンパイル時間が更に伸びてた!
10秒→16秒!
何か早くする方法ないの?
10秒→16秒!
何か早くする方法ないの?
434デフォルトの名無しさん
2019/11/21(木) 08:04:59.80ID:SWfOk2xI >>432
値チェックに使う字面だからいいのでは
値チェックに使う字面だからいいのでは
435デフォルトの名無しさん
2019/11/21(木) 08:06:53.77ID:Bt7t64ET 実行タイミングが来るまで置いておくだけの関数の中で使う変数は、その関数を実行する前までnullでいいよな?
そういう理由で!!のままにしてるんだけど!!潔癖以外の意見が聞きたい、ロジカルな理由を
その会社の規約なら!!使わないけど
使っていけないならそもそもビルド通らんだろ
そういう理由で!!のままにしてるんだけど!!潔癖以外の意見が聞きたい、ロジカルな理由を
その会社の規約なら!!使わないけど
使っていけないならそもそもビルド通らんだろ
436デフォルトの名無しさん
2019/11/21(木) 08:38:35.83ID:9TFt1oIy >>435
型安全が破綻するのでnullobject定義して使っとけ。
型安全が破綻するのでnullobject定義して使っとけ。
437デフォルトの名無しさん
2019/11/21(木) 08:53:15.49ID:0YdMrNda438デフォルトの名無しさん
2019/11/21(木) 08:54:35.85ID:Vn+a4ljF 状況が限定されるが、あるクラスがnull相当の状態をとりうるメンバ変数を持っていて
その値がnullのときに呼んだらバグとして例外を出したいメソッドがあるときは
!!を使ってもいいかなと思う
requireNonNullのほうが可読性と保守性でベターだけど本質的には大差ない
残念な!!の使い方ではないんですよと表明している程度(それが重要でもあるわけだが)
NullObjectパターンは必ずしも良い置き換えにはならない
NullObjectかどうか忘れず判定してIllegalStateExcptionを投げなければならない状況になるくらいなら
nullチェックを言語仕様で強制されるほうが手が掛からず安全性も高い
上でも言われていたが例外も何も出ずにバグがしれっと埋もれるほうが危険
その値がnullのときに呼んだらバグとして例外を出したいメソッドがあるときは
!!を使ってもいいかなと思う
requireNonNullのほうが可読性と保守性でベターだけど本質的には大差ない
残念な!!の使い方ではないんですよと表明している程度(それが重要でもあるわけだが)
NullObjectパターンは必ずしも良い置き換えにはならない
NullObjectかどうか忘れず判定してIllegalStateExcptionを投げなければならない状況になるくらいなら
nullチェックを言語仕様で強制されるほうが手が掛からず安全性も高い
上でも言われていたが例外も何も出ずにバグがしれっと埋もれるほうが危険
439デフォルトの名無しさん
2019/11/21(木) 09:05:08.85ID:OWTu/Eih require と check の使い分けちゃんとしとけよ
440デフォルトの名無しさん
2019/11/21(木) 10:47:03.33ID:iVxfes4g >>438
オモチャだから発売日が気になっちゃう精神やん
オモチャだから発売日が気になっちゃう精神やん
441デフォルトの名無しさん
2019/11/21(木) 10:50:30.22ID:PQRrRahX >>435
ものによる。初期化しないとか by lazy にするとか他の方法があるならそちらを使う方が良いかも知れない。
ものによる。初期化しないとか by lazy にするとか他の方法があるならそちらを使う方が良いかも知れない。
442デフォルトの名無しさん
2019/11/21(木) 11:30:32.58ID:rXpcOZh/ nullのまま素通りさせたくない場合は
!!でなくcheckNotNullやrequireNonNullを使えばOK?
このコードの3つ目のように
https://paiza.io/projects/Ao4mGnYxwoWEuMNRtj_gkg
!!でなくcheckNotNullやrequireNonNullを使えばOK?
このコードの3つ目のように
https://paiza.io/projects/Ao4mGnYxwoWEuMNRtj_gkg
443デフォルトの名無しさん
2019/11/21(木) 13:52:56.76ID:fDxQUKzN 香ばしくなってまいりました
444デフォルトの名無しさん
2019/11/21(木) 14:50:53.35ID:TLoSEVN8 !!を使うやつを絶対に許してはいけない
445デフォルトの名無しさん
2019/11/21(木) 15:08:48.23ID:t44F/vpr 明日の朝刊載ったゾ テメー!!
446デフォルトの名無しさん
2019/11/21(木) 15:30:07.46ID:9TFt1oIy447デフォルトの名無しさん
2019/11/21(木) 16:27:17.17ID:Bt7t64ET !!潔癖症でもいい
変更方法さえ教えて頂けるなら
それに従い変更します
変更方法さえ教えて頂けるなら
それに従い変更します
448デフォルトの名無しさん
2019/11/21(木) 16:37:36.16ID:GN1h9TxM Kotlinプログラマーは未だにforce unwrappingの使いどころを知らない
NullObjectのメリットデメリットも知らない
ということはよ〜くわかった
NullObjectのメリットデメリットも知らない
ということはよ〜くわかった
449デフォルトの名無しさん
2019/11/21(木) 18:30:46.10ID:rXpcOZh/450デフォルトの名無しさん
2019/11/21(木) 18:59:57.13ID:ikLBAUPH451デフォルトの名無しさん
2019/11/21(木) 19:03:08.50ID:Bs6+HN1r NullObjectのデメリット?
「オナニーとしては気持ちいいが、実際の開発において便利なシーンがほとんどない」
これに尽きる
「オナニーとしては気持ちいいが、実際の開発において便利なシーンがほとんどない」
これに尽きる
452デフォルトの名無しさん
2019/11/21(木) 20:29:13.59ID:ikLBAUPH453デフォルトの名無しさん
2019/11/21(木) 22:54:14.17ID:Vn+a4ljF あるデータが有限の数値をとる場合と
値なしの特殊な状態をとる場合があるとする
その厄介さってのは多くの場合、処理の場合分けが必要ってところにある
ヒトがそういう分岐を書き忘れがちなのはご存じの通り
その結果もあって多くのプログラマはNPE恐怖症になったが、NPEを回避することが目的になっても意味がない
NullObjectの多態性やアルゴリズムの妙で分岐を潰せるならベスト
だがそうでない場合、むしろ分岐を書き忘れたとき、下手なNullObjectはフェイルファストのメリットを失うことがある
値なしの特殊な状態をとる場合があるとする
その厄介さってのは多くの場合、処理の場合分けが必要ってところにある
ヒトがそういう分岐を書き忘れがちなのはご存じの通り
その結果もあって多くのプログラマはNPE恐怖症になったが、NPEを回避することが目的になっても意味がない
NullObjectの多態性やアルゴリズムの妙で分岐を潰せるならベスト
だがそうでない場合、むしろ分岐を書き忘れたとき、下手なNullObjectはフェイルファストのメリットを失うことがある
454デフォルトの名無しさん
2019/11/22(金) 08:14:50.32ID:GTCFu0T7 nullセーフな言語におけるNullable型の素晴らしい点は
そのままではメソッドを呼び出すことができず
特殊値に対し場合分けの判断が必要ではないかとヒトに思い出させてくれること
不適切な!!はこれを台無しにする
不適切なNullObjectも同じで、より厄介なバグ隠蔽をもたらす
そのままではメソッドを呼び出すことができず
特殊値に対し場合分けの判断が必要ではないかとヒトに思い出させてくれること
不適切な!!はこれを台無しにする
不適切なNullObjectも同じで、より厄介なバグ隠蔽をもたらす
455デフォルトの名無しさん
2019/11/22(金) 09:18:52.84ID:hf/6/1tn456デフォルトの名無しさん
2019/11/22(金) 10:51:25.32ID:+tlCvVPc !!のほうが2文字だし、ここでヌルポが上がるかもと分かるので好き
457デフォルトの名無しさん
2019/11/22(金) 11:13:57.45ID:hf/6/1tn 念のため書いておくとKotlin標準ライブラリの関数のことね
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/check-not-null.html
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/check-not-null.html
458デフォルトの名無しさん
2019/11/22(金) 15:35:14.32ID:GTCFu0T7 >>455
何を使うにしても状況に適したものを使えば問題ないと思うよ
何を使うにしても状況に適したものを使えば問題ないと思うよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ】「有能だったんじゃ」おこめ券で批判殺到の鈴木農水大臣…ネットでは前任の“進次郎再評価” ★2 [ぐれ★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は ★2 [蚤の市★]
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 [少考さん★]
- オイルマッサージ施術中20代女性にわいせつ行為か セラピストの男(30)を再逮捕 余罪複数とみて警視庁が捜査 [どどん★]
- 内閣支持、微減59.9% 5割超が補正予算評価 時事通信世論調査 [どどん★]
- 【中国外務省】日本への渡航自粛を再度呼びかけ 今度は「地震発生」を理由に [ぐれ★]
- 高市内閣の支持率、下落wwwwwwwwwww [834922174]
- Vtuber「人気アニメとコラボします!」←これでVが叩かれるの謎じゃね
- Xでフォローしてきた人をフォロバして相手のフォロー解除するのが趣味なんだが
- お前ら嫁や彼女にセックス中にどんな声がけしてる? [369521721]
- あー…女児のつるつるまんまん舐め回してえなあ…
- 中年男性のオナニー死が激増、原因は不明 [422186189]
