1
votes

Soustraire 2 type float nullable dans kotlin

J'ai deux propriétés float nullables et je veux les soustraire:

operator fun Float?.minus(dis2: Float?): Float {
  return this - dis2
}

J'ai créé cette fonction d'extension. Mais ça va en boucle infinie:

val dis1: Float? = 10.0f
val dis2: Float? = 5.0f

val value = dis1 - dis2


0 commentaires

4 Réponses :


2
votes

vous ne faites rien sauf appeler l'opérateur moins c'est ainsi que vous obtenez une boucle infinie

faire une vérification nulle et appeler l'opérateur moins par défaut de Float

  val dis1: Float? = 10.0f
  val dis2: Float? = 5.0f

  operator fun Float?.minus(dis2: Float?): Float {
        return (this ?: 0f) - (dis2 ?: 0f)

  val value = dis1 - dis2


2 commentaires

La principale raison pour laquelle j'ai créé cette fonction d'extension n'est pas d'utiliser l'assertion. Une meilleure solution?


c'est bizarre si vous ne voulez pas faire une assertion alors qu'espérez-vous être le résultat de null -1.0f ou 7.0f - null? la signature de votre opérateur renvoyant un Float



2
votes

Vous pouvez simplement retourner 0 si la valeur est null pour éviter une KotlinNullPointerException . Dans votre méthode:

fun minus(value1: Float?, value2: Float): Float{
   val firstValueHelper = value1 :? 0f
   val secondValueHelper = value2 :? 0f

   return firstValueHelper - secondValueHelper
}


0 commentaires

4
votes

Simple que vous pouvez utiliser

operator fun Float?.minus(dis2: Float?): Float {
    return (this ?: 0f) - (dis2 ?: 0f)
}

?: vérifie si la valeur est présente sinon alors il affecte la valeur par défaut

Mais ça va en boucle infinie

Votre extension se déroule en boucle infinie car dans le type de retour, vous appelez à nouveau - (Moins) sur deux flottants Nullable.


0 commentaires

0
votes

Les autres réponses sont bonnes si vous voulez null - null = 0 mais si le cas est que vous voulez null - null = null vous avez besoin de quelque chose de légèrement différent.

Si le comportement souhaité est:

  • 10 - 5 = 5
  • 10 - null = 10
  • null - 5 = -5
  • null - null = null

puis utilisez ce qui suit

operator fun Float?.minus(other: Float?): Float? { 
    return if (this == null && other == null) {
        null
    } else {
        (a ?: 0f) - (b ?: 0f)
    }
}

Notez que l'addition peut être réalisée de la même manière


0 commentaires