O Visual Cobra não tem passagem por referência com var como no VisuAlg. Para efeito parecido, usamos objetos mutáveis (como lista) e alteramos seu conteúdo.
def tenta_aumentar(s):
s = s + 500 # Reatribui o nome local s; o nome externo continua com o objeto original
escreva("Salário dentro do procedimento:", s)
salario = 1000.0
tenta_aumentar(salario)
escreva("Salário original fora do procedimento:", salario) # Continua 1000
# Em Python, para mudar “por referência”, usamos um objeto mutável como lista
def realmente_aumentar(s):
s[0] = s[0] + 500
salario = [1000.0]
realmente_aumentar(salario)
escreva("Salário original agora é:", salario[0]) # Mudou para 1500!
Distinguir reatribuição de mutação de uma lista
A função recebe referências aos objetos usados na chamada. Atribuir outro valor ao nome local não muda o nome da variável de quem chamou. Já alterar um elemento de uma lista modifica o objeto compartilhado. Essa diferença não exige um parâmetro var e não corresponde a copiar automaticamente todo o objeto. Compare as duas operações do exemplo: numero recebe uma nova associação local; valores mantém a lista recebida e modifica sua posição zero.
Preserve a indentação dos blocos ao modificar este exemplo em Visual Cobra.
def alterar(numero, valores):
numero = numero + 5
valores[0] = valores[0] + 5
inicial = 10
lista = [10]
alterar(inicial, lista)
escreva("Inteiro:", inicial)
escreva("Lista:", lista[0])
Resultado esperado e testes
Execute o exemplo sem fornecer entradas. A saída deve ser:
Inteiro: 10 Lista: 15
Fora da função, inicial continua dez e o conteúdo da lista passa a quinze. Como exercício, substitua a mudança do elemento por uma reatribuição de valores para uma nova lista. Preveja por que a lista externa deixa de mudar. Quando quiser evitar a alteração de uma lista recebida, construa uma cópia adequada ao tipo de dado antes de modificar seus elementos.
Depois, compare o raciocínio com a versão do mesmo assunto nas outras linguagens do menu.