Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] Passagem de argumento por referência

Fiz alguns testes e observei que o problema poderia ser resolvido utilizando a passagem de argumento por referência (comum em lingugens como C e C++), a baixo segue o meu código de teste, no Caso 1 cheguei a conclusão de que o valor não muda pois quando numbers é passado para a função ele tem referência a uma lista, já dentro da função eu basicamento mudo a referência da lista por isso o valor para o numbers presente na main não muda. No caso Caso 2 como continuo trabalhando na mesma referêncida da lista que foi passada utilizando somente os métodos é possível mudar os valores direto no endereço de memória, cheguei as essas conclusões mas não sei se está correto o meu pensamento, outro ponto seria se alguém poderia explicar melhor o que está acontecendo?

void main() {
    List<int> numbers = [1, 2, 3];

    // Caso 1
    novoValor(numbers);
    print(numbers); // [1, 2, 3]

    // Caso 2
    newValue(numbers);
    print(numbers); // [4, 5, 6]
}

void novoValor(List<int> numbers) {
    numbers = [4, 5, 6];
}

void newValue(List<int> numbers) {
    numbers.clear();
    numbers.addAll([4, 5, 6]);
}
1 resposta

Opa!

Pelo visto o Dart não permite que você faça as atribuições dessa forma para uma lista local dentro de outra função, mas quando você faz as devidas referências ele entender perfeitamente, como no exemplo abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade