09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

182 Capítulo 8. Procedimi<strong>en</strong>tos y funciones<br />

simples. Tanto para los procedimi<strong>en</strong>tos como para las funciones, dichos valores<br />

pued<strong>en</strong> <strong>en</strong>viarse mediante parámetros por refer<strong>en</strong>cia.<br />

Una tercera vía consiste <strong>en</strong> utilizar las variables globales (o las no locales),<br />

porque dichas variables son reconocidas <strong>en</strong> cualquier lugar del bloque. En consecu<strong>en</strong>cia,<br />

si d<strong>en</strong>tro de un procedimi<strong>en</strong>to o función se hace refer<strong>en</strong>cia a una variable<br />

global (o no local), asignándole un nuevo valor, dicha asignación es correcta, al<br />

m<strong>en</strong>os desde el punto de vista sintáctico.<br />

Sin embargo, esta última posibilidad merma la autonomía de los subprogramas,<br />

y es perjudicial porque puede introducir cambios <strong>en</strong> variables globales y<br />

errores difíciles de detectar. Asimismo, resta indep<strong>en</strong>d<strong>en</strong>cia a los subprogramas,<br />

reduci<strong>en</strong>do la posibilidad de reutilizarlos <strong>en</strong> otros programas.<br />

❡❡ <br />

Si se evita sistemáticam<strong>en</strong>te el uso de los objetos globales <strong>en</strong> los subprogramas,<br />

los cambios que efectúa un subprograma se id<strong>en</strong>tifican inspeccionando<br />

la lista de parámetros por refer<strong>en</strong>cia. Por ello, se recomi<strong>en</strong>da adquirir esta<br />

costumbre desde el principio.<br />

Si por el contrario se suel<strong>en</strong> escribir subprogramas que emplean objetos<br />

globales, para conocer los efectos de un subprograma se t<strong>en</strong>drá que repasar<br />

cuidadosam<strong>en</strong>te la totalidad del procedimi<strong>en</strong>to o función. Por ello, esta<br />

práctica es desaconsejable y debe evitarse siempre.<br />

Como norma g<strong>en</strong>eral, debe evitarse toda alusión a las variables globales d<strong>en</strong>tro<br />

de los subprogramas. No obstante, se incluirán como parámetros cuando sea<br />

preciso. Es importante que la comunicación se realice exclusivam<strong>en</strong>te a través<br />

de los parámetros para garantizar la indep<strong>en</strong>d<strong>en</strong>cia de los subprogramas.<br />

A los cambios <strong>en</strong> variables globales producidos por subprogramas se les d<strong>en</strong>omina<br />

efectos laterales o secundarios. Veamos un ejemplo de una función cuya<br />

ejecución modifica una variable global de la que dep<strong>en</strong>de el propio resultado de<br />

la función.<br />

Program ConDefectos (output);<br />

var<br />

estado: boolean;<br />

function Fea (n: integer): integer;<br />

begin<br />

if estado th<strong>en</strong><br />

Fea:= n<br />

else<br />

Fea:= 2 * n + 1;<br />

estado:= not estado<br />

<strong>en</strong>d; {Fea}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!