1
votes

Impossible de réaffecter la valeur au paramètre de fonction, alors qu'il n'est pas déclaré comme val, val ne peut pas être réaffecté

J'essaie d'écrire une fonction dans kotlin mais je ne suis pas en mesure de réaffecter une valeur aux paramètres de fonction, son disant val ne peut pas être réaffecté.

class WebView{

    var homepage = "https://example.com"

    fun webViewLoad(url: String, preferredOrientation: String) {

            if (url.equals("homepage")){
                url = homepage
            }
        }
    }

quand j'essaie d'attribuer une valeur à url = homepage. cela me donne une erreur val ne peut pas être réaffecté, je suis nouveau sur kotlin, je ne comprends pas quel est le problème, peu l'aide sera appréciée.


5 Réponses :


2
votes

Les paramètres de fonction fonctionnent comme des variables val qui n'ont pas pu être réaffectées. Ici, vous devez ajouter une variable avec une initialisation conditionnelle:

fun webViewLoad(url: String, preferredOrientation: String) {
    val urlValue = if (url.equals("homepage")){
        homepage
    } else {
        url
    }
    ... //use here "urlValue" variable
}

Au fait, dans kotlin , vous n'avez pas besoin d'utiliser la fonction equals pour comparer la chaîne: l'opérateur commun == sera automatiquement remplacé par est égal à en octet.


2 commentaires

Salut merci pour votre réponse, mais je ne comprends pas, pourquoi cela ne fonctionne pas comme la fonction java. Si l'URL est variable que pourquoi je ne peux pas lui attribuer de valeur?


Je dirais que c'est quelque chose comme l'idéologie kotlin. Si cela vous intéresse, vous pouvez en lire dans ce post et commenter.



1
votes

Les paramètres de la fonction Kotlin sont définitifs. Il n'y a pas de mot clé val ou final car c'est la valeur par défaut (et ne peut pas être modifiée). Jetez un œil à ceci .


0 commentaires

2
votes

Les paramètres Kotlin sont immuables depuis Kotlin M5.1 ( Référence )

La raison principale est que c'était déroutant: les gens ont tendance à penser que cela signifie passer un paramètre par référence, ce que nous ne prenons pas en charge (cela coûte cher à l'exécution). Les constructeurs primaires sont une autre source de confusion: «val» ou «var» dans une déclaration de constructeur signifie quelque chose de différent de la même chose si une fonction déclare (à savoir, il crée une propriété). De plus, nous savons tous que la mutation des paramètres n'est pas un bon style, donc écrire «val» ou «var» devant un paramètre dans une fonction, le bloc catch de la boucle for n'est plus autorisé.


0 commentaires

2
votes

Cela vous donne l'erreur "val ne peut pas être réaffecté" car les paramètres de la fonction Kotlin sont immuables, c'est-à-dire "val" par défaut. Vous n'avez pas besoin de mentionner le code> mot clé "val" pour cela.

La solution rapide serait:

class WebView{

    var homepage = "https://example.com"

    fun webViewLoad(url: String, preferredOrientation: String) {
            val finalUrl = if (url.equals("homepage")) homepage else url
        }
    }


0 commentaires

0
votes

Par défaut, les paramètres passés dans la fonction sont définitifs, ce que vous pouvez faire est d'ajouter var. J'espère que cela aide.

fun webViewLoad(var url: String, preferredOrientation: String) {

            if (url.equals("homepage")){
                url = homepage
            }
        }


0 commentaires