1. Kotlin / Говнокод #28891

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    @JvmInline
    value class Code(val value: Short) {
    
        companion object {
    
            fun from(value: Number): CurrencyCode {
                checkValid(value)
                return CurrencyCode(value.toShort())
            }
    
            private fun checkValid(value: Number) {
                val targetValue = value.toDouble()
                val isValueInvalid = floor(targetValue) != targetValue
                        || targetValue < 0
                        || targetValue > Short.MAX_VALUE
                if (isValueInvalid) {
                    throw DomainRuleViolationException(
                        "Code must be of 'short' type, greater than 0 and lower than ${Short.MAX_VALUE}. Provided: [$value]"
                    )
                }
            }
    
        }
    
        init {
            checkValid(value)
        }
    
    }

    Валидация данных приходящих в контроллер. При этом в проекте существует Эксепшнхендлер на неверный инпут от пользователя, который отлично работает еще во время десерелизации запроса.

    Запостил: Boeing1337, 22 Декабря 2023

    Комментарии (3) RSS

    • There are times we need to use a companion object to define class members that are going to be used independently of any instance of that class. The Kotlin compiler guarantees we will have one and only one instance of a companion object. For those of us with a background in Java and C#, a companion object is similar to static declarations.

      хуйня какая-то
      Ответить
      • это единственный способ сделать статические члены в коко
        Ответить
    • Использовать исключения для валидации в котлине -- тупо.
      Силд классы кому выдали?
      Ответить

    Добавить комментарий