Open Hiiragi283 opened 2 months ago
これTag.Identified<T>
にも使えるんじゃね?
fun <T: Any> Tag<T>.idResult: Result<Identifier>
get() = runCatching { (this as Tag.Identified<T>).id }
ただなんでもかんでもResult<T>
で包んじゃっていいのだろうか
失敗する可能性を型で表現するためにResultを使うのは良いことだと思いますよ ただ命名はtryGetId()みたいにしたほうが良いかも?
そもkotlinでメソッドの表記を括弧つけるかつけないかのルールってあるんすかね(素朴な疑問)
Resultを使うか使わないか、全体を通して方針を統一しないと無秩序になるので、何かしらの統一はしたい そんでぱっと思いついた指針
Tag<T>.values()
は、「値が存在しない」事に起因すると思うので、nullを返す(か空のリストを返す)のが良いと思う
List<T>?
は気持ち悪いからemptyList()
すかね
Tag
.values()は、「値が存在しない」事に起因すると思うので、nullを返す(か空のリストを返す)のが良いと思う
これちゃんと確認したんですけど、吐かれる可能性あるのは IllegalStateException みたいですね。例外潰してemptyList返すなら一応warnで例外をログに流すとかはした方が良いかもしれません
こんな感じかな
fun <T : Any> Tag<T>.safeValues(): List<T> = runCatching { values() }
.onFailure { e: Throwable -> HTLogger.log { logger: Logger -> logger.throwing(e) } }
.getOrDefault(emptyList())
実装次第では
Tag<T>.values()
を呼ぶと例外を吐かれる 現状らぎマテで使ってるのはこれこれを改善して
的なのをつくれないだろうか