Estoy leyendo un libro de programación introductorio y enumera un ejemplo simple en pseudocódigo:
Start
input myNumber
set myAnswer = myNumber * 2
output myAnswer
Stop
¿Por qué no podemos omitir la creación de otra variable llamada myAnswer
y simplemente poner la operación en el comando de salida, así:
Start
input myNumber
output myNumber * 2
Stop
¿Por qué el primero es correcto y el segundo no?
pseudocode
structured-programming
usuario1475207
fuente
fuente
Respuestas:
Podría hacerlo, pero lo otro es para que vea lo que está sucediendo y para que pueda usarlo
myAnswer
más adelante en el programa. Si usa el segundo, no puede reutilizarlomyAnswer
.Entonces, más adelante en el programa, es posible que desee:
Es posible que tenga diferentes operaciones para las que quiera usarlo.
Considere intercambiar números:
Eso sería difícil sin variables. Los libros de computadora comienzan a ser realmente básicos, y la mayoría de la programación es fácil hasta que vea complejidad. Casi todo es trivial en los tutoriales, y solo en la complejidad se ve dónde las cosas tienen sentido o no.
fuente
result
variable incluso para funciones cortas, de modo que la depuración agregandoprint(result)
es realmente rápida. Sin embargo, es más por conveniencia que por una buena práctica.Otra razón, la asignación
set myAnswer = myNumber * 2
le da un nombre al valor resultante . Una persona que lee la versión de dos líneas de su código solo sabe que imprime el valor demyNumber * 2
. Una persona que lee la versión de tres líneas puede ver que esamyNumber * 2
es la respuesta .Puede que no parezca importante en un ejemplo tan trivial, pero a veces, asignar un valor de resultado a una variable con un nombre significativo puede hacer que sea mucho más fácil para otros programadores leer y comprender su código.
fuente
i
,result
o algún otro identificador sin sentido no hace nada para mejorar la claridad, y solo satura el códigoi
Será mejor que sea un índice de matriz. Si hay unresult
, la función debería terminar conreturn result
o el equivalente moral. Y así sucesivamente ...return result
, entonces también puedes alinearte para devolver lo que fueras a asignar como resultado. Podemos ver que es un resultado. Lo estás devolviendo, lo entendemos.Eso es seudocódigo. No se supone que sea un lenguaje implementado en particular.
Algunos lenguajes de programación no admiten evaluar una expresión y luego superar el resultado en la misma línea de código. Por ejemplo, la mayoría de los ensambladores no lo admiten. Quizás el autor del libro quería mostrar las cosas de una manera de bajo nivel.
fuente
Otras respuestas han abordado los detalles mecánicos específicos y ejemplos de cuándo una u otra forma sería mejor, pero quiero mencionar un poco más de antecedentes, algo filosófico:
Estás aprendiendo un idioma.
Un lenguaje es algo en el que las ideas pueden expresarse y entenderse (comunicarse). Un lenguaje de programación de computadora tiene la propiedad adicional de que puede ser analizado mecánicamente por una máquina diseñada para actuar (ejecutar) en base a ideas (decisiones) que se especifican y se alimentan al usar ese lenguaje.
En CUALQUIER lenguaje que sea útil, hay más de una forma de expresar casi cualquier idea expresable en ese idioma.
Considere la gran variedad de matices disponibles en el idioma inglés. Incluso una oración simple, como
se puede variar para expresar ideas ligeramente diferentes o poner énfasis en diferentes partes de la escena mientras se refiere a la misma acción exacta del universo físico.
Primero están las variaciones gramaticales:
Luego hay variaciones cada vez más amplias, que aún se refieren a la misma acción física:
Basta con mirar las implicaciones de la palabra "cerca" en esa última oración. Su inclusión transmite una gama completamente nueva de conceptos no presentes de otra manera.
Hay siempre más de una manera de hacerlo, Python Zen en sentido contrario.
Por supuesto, habrá UNA forma que exprese perfectamente su intención y sea la más adecuada, al igual que elegiría UNA de las oraciones en inglés anteriores, dependiendo exactamente de lo que desea comunicar. De eso se trata el Zen de Python.
Pero en un curso introductorio de programación o un curso introductorio de inglés, primero debe aprender las diversas formas (redacción, fragmentos de código) en las que puede expresar una idea antes de desarrollar el juicio para elegir cuál es el más adecuado.
fuente
__init__
y__new__
, sólo para nombrar unos pocos. El punto es que cada uno es apropiado para un problema sutilmente diferente. No elegiría una de esas oraciones en inglés al azar, ni elegiría una de estas características del lenguaje Python al azar.Solo pregunta sobre la
myAnswer
variable que parece ser redundante. Otras respuestas ya explican algunos de los por qué y cuándo tendría sentido omitirlo o usarlo, pero aquí hay uno más: ¿qué tal esto?o incluso eso
En la mayoría de los idiomas, esto todavía funcionaría, pero ¿puedes leerlo? Es difícil, por lo que a menudo usamos variables auxiliares porque las computadoras no son las únicas que leen el código. Necesitamos mantenerlo y comprenderlo en pocos meses y es aún más difícil escribir código que aún pueda entender más tarde que uno que funcione ... por lo general, después de unos pocos días, no sabrá por qué hizo algo de una manera específica .
fuente
(*2)
. Sin embargo, objetaría que realizar una entrada no necesariamente puede expresarse de manera segura como simplemente acceder a una variable / realizar una operación aritmética: puede tener efectos secundarios observables.Puede hacer ambas variantes (en este caso simple), pero la primera variante se vuelve más legible y estructurada para casos más complejos. La primera variante muestra el modelo IPO con una línea para cada paso (dos de los que ya tienen el nombre correcto):
fuente