Estou examinando um livro de programação introdutório e ele lista um exemplo simples no pseudocódigo:
Start
input myNumber
set myAnswer = myNumber * 2
output myAnswer
Stop
Por que não podemos omitir a criação de outra variável chamada myAnswer
e simplesmente colocar a operação no comando de saída, assim:
Start
input myNumber
output myNumber * 2
Stop
Por que o primeiro está correto e o segundo não?
pseudocode
structured-programming
user1475207
fonte
fonte
Respostas:
Você poderia, mas o outro é para ver o que está acontecendo e usar
myAnswer
mais tarde no programa. Se você usar o seu segundo, não poderá reutilizarmyAnswer
.Então, mais tarde, no programa, você pode querer:
Você pode ter operações diferentes para as quais deseja usá-lo.
Considere trocar números:
Isso seria difícil sem variáveis. Os livros de computador começam realmente básicos, e a maior parte da programação é fácil até você ver a complexidade. Quase tudo é trivial nos tutoriais, e é apenas na complexidade que você vê onde as coisas fazem ou não fazem sentido.
fonte
result
variável mesmo para funções curtas, para que a depuração adicionandoprint(result)
seja realmente rápida. É mais por conveniência do que por boas práticas.Outro motivo: a atribuição
set myAnswer = myNumber * 2
atribui um nome ao valor resultante . Uma pessoa que lê a versão de duas linhas do seu código sabe apenas que ele imprime o valor demyNumber * 2
. Uma pessoa que lê a versão de três linhas pode ver quemyNumber * 2
é a resposta .Pode não parecer importante em um exemplo tão trivial, mas às vezes, atribuir um valor de resultado a uma variável com um nome significativo pode tornar muito mais fácil para outros programadores ler e entender seu código.
fonte
i
,result
ou algum outro identificador sentido não faz nada para melhorar a clareza, e só tumultua o códigoi
é melhor que seja um índice de matriz. Se houverresult
, a função deve terminar comreturn result
ou o equivalente moral. E assim por diante ...return result
, também pode simplesmente fazer a fila para retornar o que estava atribuindo ao resultado. Podemos ver que é um resultado. Você está devolvendo, nós entendemos.Isso é pseudocódigo. Não é suposto ser qualquer linguagem implementada específica.
Algumas linguagens de programação não suportam avaliar uma expressão e, em seguida, ultrapassar o resultado na mesma linha de código. Por exemplo, a maioria dos montadores não suporta isso. Talvez o autor do livro quisesse mostrar as coisas de uma maneira baixa.
fonte
Outras respostas abordaram os detalhes mecânicos específicos e exemplos de quando uma ou outra forma seria melhor, mas quero mencionar um pouco mais de fundo, meio filosófico:
Você está aprendendo um idioma.
Uma linguagem é algo em que as idéias podem ser expressas e compreendidas (comunicadas). Uma linguagem de programação de computador tem a propriedade adicional de poder ser analisada mecanicamente por uma máquina projetada para executar ações (executar) com base em idéias (decisões) especificadas e alimentadas com o uso dessa linguagem.
Em QUALQUER idioma que seja útil, há mais de uma maneira de expressar praticamente qualquer idéia expressável nesse idioma.
Considere a grande variedade de nuances disponíveis no idioma inglês. Mesmo uma frase simples, como
pode variar para expressar idéias ligeiramente diferentes ou enfatizar diferentes partes da cena, enquanto se refere à mesma ação exata do universo físico.
Primeiro são as variações gramaticais:
Então existem variações cada vez mais amplas, ainda se referindo à mesma ação física:
Basta olhar para as implicações da palavra "nas proximidades" nessa última frase. Sua inclusão transmite toda uma nova gama de conceitos que não estavam presentes.
Há sempre mais do que uma maneira de fazer isso, Python Zen em contrário.
Obviamente, haverá uma maneira que expressa perfeitamente sua intenção e é a mais adequada, assim como você escolheria apenas uma das frases em inglês acima, dependendo exatamente do que deseja comunicar. É disso que trata o Zen do Python.
Mas em um curso introdutório de programação ou em um curso introdutório de inglês, você deve primeiro aprender as várias maneiras (palavras, trechos de código) pelas quais você pode apresentar uma ideia antes de desenvolver o julgamento para escolher qual é a mais adequada.
fonte
__init__
e__new__
, só para citar alguns. O ponto é que cada um é apropriado para um problema sutilmente diferente. Você não escolheria uma dessas frases em inglês aleatoriamente, nem escolheria um desses recursos da linguagem Python aleatoriamente.Você está perguntando apenas sobre a
myAnswer
variável que parece ser redundante. Outras respostas já explicam parte do porquê e quando faria sentido omiti-lo ou usá-lo, mas aqui está mais uma: que tal isso?ou mesmo isso
Na maioria dos idiomas, isso ainda funcionaria, mas você consegue lê-lo? Como é difícil, geralmente usamos variáveis auxiliares porque os computadores não são os únicos que lêem o código. Precisamos mantê-lo e entendê-lo em alguns meses e é ainda mais difícil escrever código que você ainda possa entender mais tarde do que um código em funcionamento ... geralmente depois de alguns dias você não saberá por que fez algo de uma maneira específica .
fonte
(*2)
. Eu objetaria, no entanto, que executar entradas não pode necessariamente ser expresso com segurança, como apenas acessar uma variável / executar uma operação aritmética: pode ter efeitos colaterais observáveis.Você pode executar as duas variantes (neste caso simples), mas a primeira variante se torna mais legível e estruturada para casos mais complexos. A primeira variante mostra o modelo de IPO com uma linha para cada etapa (duas delas já com o nome correto):
fonte