3 votes

Kotlin : Comment insérer la valeur d'une variable dans le nom d'une autre variable ?

Malheureusement, je n'ai pas trouvé de réponse à cette question sur SO ou ailleurs.

J'étudie Kotlin et le développement Android et je me demande comment je peux insérer la valeur d'une variable dans le nom d'une autre variable. Ou s'il existe une autre solution, meilleure, pour résoudre le problème que je rencontre.

Supposons que mon code ressemble à ceci :

...
 private fun rollDice() {
    // Create new Dice object with 6 sides and roll the dice
    val dice = Dice(6)
    val diceRoll = dice.roll()

    // Find the ImageView in the layout
    val diceImage: ImageView = findViewById(R.id.imageView)

    // Determine which drawable resource ID to use based on the dice roll
    val drawableResource = when (diceRoll) {
        1 -> R.drawable.dice_1
        2 -> R.drawable.dice_2
        3 -> R.drawable.dice_3
        4 -> R.drawable.dice_4
        5 -> R.drawable.dice_5
        else -> R.drawable.dice_6
    }

    // Update the ImageView with the correct drawable resource ID
    diceImage.setImageResource(drawableResource)

    // Update the content description
    diceImage.contentDescription = diceRoll.toString()
}
...

Je me demande si dans le "Déterminer l'ID de la ressource à utiliser en fonction du résultat du dé". Je pourrais en fait utiliser quelque chose comme ceci (aussi, désolé, je ne connais pas encore la syntaxe correcte) :

val drawableResource = R.drawable.{"dice_"+ diceRoll.toString()}

De cette façon, j'aurais pu gagner beaucoup d'espace et rendre le code facilement extensible. Si, par exemple, j'avais un dé à 20 faces, j'aurais toujours eu besoin de cette seule ligne de code.

Sinon, j'aurais dû ajouter

when(diceRoll){ 
...
20 lines of code here
...
}

Comment puis-je résoudre ce problème ? Merci.

4voto

Tim Korelov Points 85

Merci à Shlomi Katriel d'avoir indiqué la solution correcte dans un commentaire sur l'article original.

Une façon de formuler ma question dans ce contexte serait exactement comme dans le post lié - "Comment obtenir un identifiant de ressource avec un nom de ressource connu ?".

Mon code de solution pour ce cas précis (changement de 2 blocs) :

// Determine which drawable resource ID to use based on the dice roll
val drawableResourceId : Int = this.resources.getIdentifier("dice_$diceRoll", "drawable",this.packageName)

// Update the ImageView with the correct drawable resource ID
diceImage.setImageResource(drawableResourceId)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X