3
respostas

Por que as funções alteram o dicionario da console sem usar o "return" para sobrescrever?

Na "AULA 01 O problema do paradigma procedural" do curso de Introdução à Orientação à Objetos, são criadas funções procedurais para tratar de um dicionário chamado "conta".

Nas funções deposita(), saca() e extrato(), não foi utilizado "return".

Por que as mudanças no escopo local dessas funções alteram dicionario que é entregue na chamada da função, pela console?

3 respostas

Fala Bruno, blz?

As funções deposita e saca não utilizam nenhum retorno porque elas servem para o processamento da conta. Seria o equivalente ao "void" na linguagem Java caso você esteja familiarizado com ela. É um tipo de dado do retorno, que no caso de "void" justamente é para identificar que não retorna nada. O java é mais verboso que Python. Já a função extrato possui a saída invocada pelo método print() e com isso algo será retornado no console. As mudanças ocorrem porque no código as funções saca e deposita são invocadas e com isto elas fazem o processamento que foi solicitado e quando é chamado a função extrato ela irá exibir o conteúdo atual das variáveis em questão.

Obrigado pela resposta, Thiago. Apenas para eu verificar se entendi corretamente,

  • omitir o return nas funções do Python equivale ao "return void" do C ou Java;

Apenas fiquei confuso em relação a diferença entre escopo local e escopo global.

Quando estamos falando de classes e objetos, me parece que está implícito que o objeto é sempre passado para a função como "self" e de certa forma retornado (ocultamente) com qualquer modificação que tenha ocorrido nele a partir de algum método.

Mas no início do curso, quando estamos usando as funções do paradigma procedural, o dicionário que as funções usam é entregue como uma entrada para a função. Após a execução da função, que altera valores do dicionário dentro do escopo local da função, o dicionário absorve essas mudanças.

Em outras linguagens, a console é considerada um escopo global e os códigos das funções são escopos locais. A não ser que você explicitamente altere uma variável do escopo global (ex: uma atribuição da saída de uma função), ela não deve se alterar.

Você poderia comentar sobre essa diferença dos escopos nesse vídeo? Achei um pouco confuso.

As variáveis globais podem ser acessadas por todas as funções presentes naquele módulo e as variáveis locais "nascem" e "morrem" dentro daquela função onde foi criada. E realmente, quando temos uma variável global e ela é alterada dentro de uma função, dentro daquela função irá prevalecer a nova declaração daquela variável. É como se estivéssemos criando uma nova variável com o mesmo nome da variável global. E isso pode gerar confusão tanto para o próprio desenvolvedor quanto para outro desenvolvedor que irá fazer a manutenção do código.

Além disso, é uma boa prática da programação diminuir o acoplamento, ou seja, diminuir ao máximo o número de variáveis globais e se possível reduzi-la a zero.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software