[JAVA] Grand décimal à Kotlin

kotlin_800x320.png

Cela fait quelques jours que j'ai commencé à utiliser Kotlin comme passe-temps, et je suis impressionné par le soutien poli des démangeaisons de Java.L'arithmétique BigDecimal en fait partie.

Les opérations numériques sont souvent nécessaires dans les applications professionnelles, mais Double n'est pas utilisable, donc BigDecimal est une option. Et cette opération BigDecimal est extrêmement illisible.

Comparaison des styles de codage

Édition de base

BigDecimalBasicSample.kt


/**
 * BigDecimal coding style : (a + b) / 2
 */
fun main(args: Array<String>) {
    val a = BigDecimal.ONE
    val b = BigDecimal.TEN

    // Java style
    println(a.add(b).divide(BigDecimal.valueOf(2L), RoundingMode.HALF_EVEN))

    // Kotlin basic style
    println((a + b) / 2.toBigDecimal())
}

Java est terrible. Kotlin est très facile à lire car il peut appliquer des opérateurs arithmétiques à quatre règles, mais «2.toBigDecimal ()» reste insatisfait.

Version avancée

BigDecimalCustomSample.kt



/** custome operator BigDecimal / Long */
operator fun BigDecimal.div(other : Long) : BigDecimal = this / other.toBigDecimal()

/**
 * BigDecimal coding style : (a + b) / 2
 */
fun main(args: Array<String>) {
    val a = BigDecimal.ONE
    val b = BigDecimal.TEN

    // Java style
    println(a.add(b).divide(BigDecimal.valueOf(2L), RoundingMode.UP))

    // Kotlin custom oeprator style
    println((a + b) / 2)
}

En implémentant l'opérateur d'origine «BigDecimal / Long», la lisibilité a été améliorée.

À propos du mécanisme

Comment implémenter les opérateurs Kotlin

Dans Kotlin, les opérateurs sont équivalents à appeler une méthode donnée. Dans Surcharge des opérateurs, chaque opérateur et son correspondant La méthode à faire est indiquée. Voici un extrait de l'opérateur à quatre règles.

Expression Translated to
a + b a.plus(b)
a - b a.minus(b)
a * b a.times(b)
a / b a.div(b)
a % b a.rem(b), a.mod(b) (deprecated)
a..b a.rangeTo(b)

En implémentant des méthodes telles que plus avec ʻoperator fun`, vous pouvez définir vos propres opérateurs entre des classes arbitraires.

Implémentation d'opérateurs pour BigDecimal

L'implémentation de l'opérateur se trouve dans BigDecimals.kt inclus dans kotlin-stdlib. Il est décrit. Extrait de l'implémentation de la division "/" comme exemple. Vous pouvez voir que BigDecimal # divide est utilisé et RoundingMode.HALF_EVEN est utilisé comme argument.

BigDecimals.kt


/**
 * Enables the use of the `/` operator for [BigDecimal] instances.
 *
 * The scale of the result is the same as the scale of `this` (divident), and for rounding the [RoundingMode.HALF_EVEN]
 * rounding mode is used.
 */
@kotlin.internal.InlineOnly
public inline operator fun BigDecimal.div(other: BigDecimal): BigDecimal = this.divide(other, RoundingMode.HALF_EVEN)

Recommended Posts

Grand décimal à Kotlin
HMAC à Kotlin
Java Big Decimal
[Ruby] Big Decimal et DECIMAL
Comment utiliser Big Decimal
[Java] Obtenir KClass en Java [Kotlin]
[Java] Utilisez correctement Big Decimal ~ 2018 ~
Apache POI Excel avec Kotlin
Implémentation de HashMap avec kotlin
Transition d'écran à l'aide de l'intention dans Kotlin
Implémentation d'une vue de conception de matériaux dans Kotlin
Imiter l'interface fonctionnelle de Java avec Kotlin
Pourquoi la suspension synchronisée ne fonctionne pas dans Kotlin
"Hello, World!" Avec Kotlin + CLI en 5 minutes
Ce que les programmeurs Java trouvent utile avec Kotlin
Ne soyez pas accro au Big Decimal de Java
Mémorandum Big Decimal Always Int pour débutants