Professional Documents
Culture Documents
html
Page 1
Introduccin
Bienvenido a Pauscal, el sistema de desarrollo para los entornos Microsoft Windows de 32 bits. Permite generar aplicaciones de cualquier tipo por medio de un entorno fcil de utilizar. Est pensado para aquellos que deseen iniciarse en la programacin estructurada, o para aquellos que ya poseen conociemientos en el tema y desean adentrarse un poco ms. Posee una caracterstica muy especial: su sintaxis est basada en el idioma espaol. Esto facilita la tarea de recordar los comandos e instrucciones que componen el lenguaje de Pauscal. Cuenta con un compilador que genera cdigo nativo, lo que permite acelerar sus aplicaciones ya que las mismas se ejecutan dirctamente por el procesador.
Volver
Page 2
Cdigo nativo: Ahora el compilador genera cdigo nativo que es ejecutado directamente por el procesador. Esto incrementa considerablemente la velocidad de sus programas. Estructuras de datos: Las estructuras de datos han sido implementadas en Pauscal. Permiten un control ms flexible y ordenado de su cdigo. Matrices: Ahora es posible utilizar matrices en sus programas. No slo matrices estticas, sino tambin matrices dinmicas. Las matrices dinmicas son una de las caractersticas que hacen de Pauscal un lenguaje muy flexible a la hora de administrar correctamente la memoria. Clases y Objetos: Una de las caractersticas ms importantes de esta nueva versin de Pauscal es la posibilidad de crear clases y objetos en sus programas. Esto permite simplificar el cdigo. Control Estructurado de Excepciones: Ahora se pueden proteger las secciones importantes de sus programas por medio del uso del denominado Control Estructurado de Excepciones.
Volver
Page 3
Conceptos bsicos
Pauscal es un lenguaje que permite realizar varias tareas bsicas y otras no tan bsicas. Su sintaxis es fcil de comprender y es similar a otros lenguajes conocidos. Si ya sabe programar, no le costar aprender Pauscal. Si aun no sabe programar, aprender Pauscal le servir para comprender otros lenguajes ms complejos.
Volver
Page 4
Convenciones de documentos
Esta documentacin utiliza las siguientes convenciones tipogrficas: Ejemplo
Var Num:Entero
Descripcin Esta fuente y color se utilizan para el cdigo. En la sintaxis, las palabras que el usuario debe escribir aparecen en negrita. En la sintaxis y el texto, las letras en cursiva pueden indicar marcadores de posicin para la informacin que proporciona. En la sintaxis, los elementos que aparecen entre corchetes son opcionales. En la sintaxis, las llaves y la barra vertical indican una eleccin entre dos o ms elementos. Se debe elegir uno de los elementos, a menos que todos estn entre corchetes. Las letras en maysculas se utilizan para los nombres de teclas y las secuencias de teclas, como ENTRAR y CTRL+R. Un signo ms (+) entre nombres de teclas indica una combinacin de teclas. Por ejemplo, Alt+F1 significa mantener presionada la tecla Alt mientras se presiona la tecla F1.
Redim variable
ENTRAR
ALT+F1
Volver
Page 5
La interfaz de Pauscal
En esta seccin encontrar informacin sobre el editor de Pauscal y su depurador.
Volver
Page 6
El editor de Pauscal
Cuando Ud. abre Pauscal, aparecer una ventana como la siguiente:
Botn 'Guardar'. Guarda los cambios a un programa o biblioteca almacenado en el disco. Si el mismo no fue guardado anteriormente, se le preguntar dnde lo desea guardar.
Page 7
Botn 'Depurar'. Ejecuta el programa actual en el depurador. No es posible depurar una biblioteca.
Barra de archivos abiertos. Muestra los programas y bibliotecas abiertos. [Prog] indica que es un programa, y [Bib] que es una biblioteca.
Informacin sobre el cdigo fuente. Indica la posicin actual del cursor dentro del cdigo fuente, la cantidad de lneas que posee, y si ha sido modificado desde la ltima vez que guard.
Mensajes del compilador. Muestra los mensajes que gener el compilador al generar el ejecutable.
Ventana Configuracin
Volver
Page 8
Ventana Configuracin
En Herramientas/Configuracin... se puede encontrar la siguiente ventana de configuracin. Aqu se configuran varios aspectos del editor de Pauscal, como as tambin algunas opciones del compilador.
Buscar archivos de importacin en: Esta lista indica las carpetas donde Pauscal debe buscar los archivos de importacin. El botn Agregar agrega una nueva carpeta a la lista, y el botn Quitar saca la carpeta seleccionada de la lista. Pauscal siempre busca en la carpeta \Lib en el directorio de Pauscal. Esta carpeta no puede quitarse.
Lnea de comando adicional: Aqu puede agregar los comandos que desea pasarle al compilador de Pauscal. En la mayora de los casos se deja en blanco.
Generar un controlador estructurado... Si est activa esta opcin, el compilador genera un controlador estructurado de excepciones (ver Introduccin al control estructurado de excepciones) en cada procedimiento que posea variables que necesiten ser liberadas, como por ejemplo cadenas, matrices dinmicas, objetos y estructuras que tengan
Page 9
como miembro algunos de estos elementos. En caso de que ocurra una excepcin, si esta opcin esta activa, las variables sern liberadas. Esto es importante en el caso de objetos que poseen un destructor. Esta opcin slo se tiene en cuenta al generar el ejecutable. Al depurar, el compilador siempre genera un controlador estructurado de excepciones en los procedimientos.
Comprobar los lmites de las matrices Si est activa esta opcin, el compilador produce cdigo que verifica cada vez que se accede a un elemento de una matriz si el subndice est dentro de los lmites vlidos de esa matriz. Desactivar esta opcin acelera el trabajo con matrices, pero no ocurrir una excepcin si intenta leer o escribir ms all del lmite de la matriz. Esta opcin slo se tiene en cuenta al generar el ejecutable. Al depurar, el compilador siempre produce cdigo que comprueba los lmites de las matrices.
Asociar las extensiones... Al activar esta opcin, se asocian las extensiones .pdp y .bdp con Pauscal. Esto permite que se puedan abrir los programas y bibliotecas de Pauscal hacindoles doble clic en el Explorador de Windows.
No advertir al cargar un archivo... Si esta opcin est desactiva y se carga un archivo con formato antiguo en el editor de Pauscal, aparecer un mensaje informando esta situacin y que al guardar el archivo se transformar al nuevo formato. Si est opcin est activa, este mensaje no aparece.
Volver
Page 10
Depurador
Al hacer clic en el botn Depurar se inicia el depurador. Con el depurador puede examinar el contenido de las variables del programa sin tener que insertar llamadas adicionales a procedimientos que lo muestren. Puede insertar un punto de interrupcin en el cdigo para detener la ejecucin en el lugar de inters. Cuando el programa est en pausa (modo de interrupcin), puede examinar las variables locales u otros datos relevantes a travs de las inspecciones. Cuando se establece un punto de interrupcin, no se agrega una llamada funcional al cdigo fuente. Por ello, es poco probable que el establecimiento de un punto de interrupcin cambie el comportamiento del programa que se intenta depurar. Para obtener ms informacin, vea Interrumpir la ejecucin. El depurador tiene el siguiente aspecto:
Botn "Ejecutar" (F5) Al hacer clic en este botn el programa se ejecuta hasta que se encuentre un punto de interrupcin, se haga clic en el botn "Pausa", o hasta que se termine.
Botn "Paso a paso" (F7) Cada vez que se hace clic en este botn el programa ejecuta una lnea de cdigo. Es til para ejecutar una instruccin y ver qu efectos produce. (Ver Ejecutar instrucciones paso a paso)
Page 11
Botn "Pausa" (F6) Pausa un programa en ejecucin. Si el punto de ejecucin del programa est fuera del cdigo visible, por ejemplo, dentro de una llamada al procedimiento Mensaje, el programa se detendr en la siguiente instruccin luego de terminar de ejecutar el procedimiento actual. (Ver Interrumpir la ejecucin)
Botn "Saltear llamadas" (F8) Este botn es similar al botn "Paso a paso", con la diferencia de que este botn saltea las llamadas a procedimientos y se detiene en la siguiente instruccin. En caso de que la lnea de cdigo no posea ninguna llamada a un procedimiento, este botn funciona igual al botn "Paso a paso". Es til para ver qu efectos produce una llamada a un procedimiento sin entrar en los detalles de su funcionamiento. (Ver Ejecutar instrucciones paso a paso)
Botn "Interrupcin" (F2) Establece un punto de interrupcin en la lnea de cdigo seleccionada. En caso de que ya haya un punto de interrupcin en esa lnea, el mismo se quita.
Botn "Terminar" Termina la ejecucin del programa siendo depurado. (Ver Detener la ejecucin)
Botn "Cerrar" Termina el programa actual si ste se estuviera ejecutando, y cierra el depurador.
Botn "Establecer siguiente instruccin" Al hacer clic sobre este botn se mueve el punto de ejecucin a la lnea de cdigo seleccionada. Debe ser una lnea de cdigo ejecutable. En caso de que haya ms de una instruccin en la lnea seleccionada, el punto de ejecucin se mover a la primera instruccin de la lnea. Al mover el punto de ejecucin no se puede entrar o salir de un procedimiento, ni tampoco de la mayora de las estructuras de control. (Ver Introduccin a las estructuras de control).
Page 12
Botn "Mostrar siguiente instruccin" Muestra la lnea de cdigo en donde est el punto de ejecucin.
Volver
Page 13
Inspecciones
Las inspecciones son expresiones que el depurador evala, y muestra su resultado en el panel de inspecciones.
Las inspecciones son tiles ya que permiten conocer el valor de las variables del programa siendo depurado.
Botn "Agregar" Permite agregar y configurar una nueva inspeccin. (Ver Agregar una inspeccin).
Botn "Editar" Permite modificar y/o reconfigurar la inspeccin seleccionada. Tambin es posible editar una inspeccin haciendo doble clic sobre la misma.
Volver
Page 14
Pila de llamadas
En el panel Pila de llamadas se pueden ver los nombres de los procedimientos de la pila de llamadas. Cuando se llama a un procedimiento, ste es agregado en la parte superior de la pila de llamadas. Si el procedimiento llama a otro procedimiento, este ltimo es agregado encima del anterior. Cuando un procedimiento termina, es eliminado de la pila de llamadas.
En caso de que el procedimiento sea un mtodo, en la pila de llamadas aparece el nombre de la clase, el separador "::" y luego el nombre del mtodo. La primer llamada siempre es "[cdigo inicial]", que representa el cdigo inicial que est fuera de todo procedimiento.
Botn "Ver" Este botn permite ir a la lnea de cdigo que produjo la llamada seleccionada en la lista de llamadas. Esto tambin se consigue haciendo doble clic sobre la llamada en la lista.
Volver
Page 15
Expresin: Aqu se ingresa la expresin a evaluar. Puede ser cualquier combinacin de variables, constantes y operadores vlidos. No es posible evaluar llamadas a procedimientos ni propiedades que estn implementadas como llamadas a procedimientos.
Tipo de inspeccin Permite especificar el tipo de inspeccin a agregar. Interrumpir cuando el valor sea verdadero: pausa el programa cuando el valor de la expresin sea verdadero. Es verdadero si el valor es diferente de cero (en caso de una expresin numrica) o si es Verd (en caso de una expresin booleana). Interrumpir cuando entre en contexto: pausa el programa cuando se ingrese en el contexto indicado (ver ms abajo). Inspeccin de expresin: la expresin es evaluada, pero en ningn caso produce una pausa en la ejecucin.
Contexto El contexto de una inspeccin es el procedimiento, clase o mtodo en donde Pauscal debe evaluar la expresin. Si la expresin est fuera de su contexto, la misma no se evala. En caso de que Clase sea "[Ninguna]" y Procedimiento sea "[Todos]", la expresin posee contexto global y siempre se evala. Si Clase indica una clase y Procedimiento es "[Todos]", la expresin posee contexto de clase
Page 16
Volver
Page 17
Su primera aplicacin
A continuacin veremos como hacer la clsica aplicacin "hola mundo", la cual muestra dicho mensaje en la pantalla. 1. Abra Pauscal si todava no lo hizo. 2. Ingrese el siguiente cdigo:
' El programa "Hola mundo" hecho en Pauscal Importar "Pauscal.prp" Mensaje("Hola mundo") Fin
Comentarios
La primera lnea del ejemplo contiene un comentario:
' El programa "Hola mundo" hecho en Pauscal
La comilla sencilla (') indica que el resto de la lnea es un comentario y el compilador lo pasar por alto. Es posible tanto hacer un comentario en toda una lnea como anexar un comentario al final de otra instruccin, como se muestra a continuacin:
Mensaje("Hola mundo") ' Muestra el mensaje en pantalla
Page 18
Entrada y salida
Este ejemplo utiliza la biblioteca estndar en tiempo de ejecucin de Pauscal, que est en el archivo Pauscal.prp. Para poder utilizar esta biblioteca primero debe importarla al programa mediante la instruccin Importar. Uno de los procedimientos definidos en el archivo importado es Mensaje, que muestra un mensaje en la pantalla de la computadora. En este caso mostramos la cadena de caracteres "Hola mundo".
Mensaje("Hola mundo")
Compilacin y ejecucin
Una vez que copiado el cdigo fuente del programa en el editor de Pauscal, seleccione Proyecto/Compilar.... Luego Pauscal le permitir elegir la ubicacin que desea para el archivo ejecutable compilado.
Volver
Page 19
Estructura de un programa Instrucciones Operadores Introduccin a las variables Introduccin a los procedimientos Introduccin a las estructuras de control Introduccin al control estructurado de excepciones Introduccin a las estructuras Introduccin a las clases y los objetos
Volver
Page 20
Estructura de un programa
Un programa es un conjunto de instrucciones que la computadora (o mejor dicho, el procesador) puede ejecutar. La estructura de un programa hace referencia a la forma de organizar cdigo. En programas simples, la estructura no es muy importante y todo el cdigo se escribe directamente. Pero a medida que el programa se hace ms complejo, es recomendable separar el cdigo en subrutinas que ejecutan una accin especfica. De esta forma, es ms fcil la lectura y el mantenimiento del cdigo. Esto es un elemento clave en los proyectos que involucran a ms de un programador. Por convensin, la estructura de un programa debera ser de la siguiente forma: <archivos a importar> <declaracin de constantes> <declaracin de estructuras de datos> <declaracin de variables globales> <clases> <procedimientos> <cdigo inicial>
Nota En general, Pauscal no exige que los programas sigan esta convensin. Esto slo permite que sus aplicaciones sean ms fciles de entender y mantener.
Volver
Page 21
Instrucciones
En Pauscal, una instruccin es un comando completo que puede contener palabras clave, operadores, variables, constantes y expresiones. Las instrucciones se clasifican en dos categoras: instrucciones de declaracin, que asignan nombre a una variable, constante o procedimiento, y tambin pueden especificar un tipo de datos, e instrucciones ejecutables, que inician acciones.
Introduccin a las instrucciones Instrucciones de asignacin Instrucciones de declaracin Instrucciones ejecutables Operadores Expresiones
Volver
Page 22
Operadores
Un operador es una unidad de cdigo que realiza una operacin sobre uno o ms elementos de cdigo que devuelven valores. Tal operacin puede ser una operacin aritmtica, como una suma o una multiplicacin; una operacin de concatenacin, que combina dos cadenas en una nueva; una operacin de comparacin, que determina cul de dos valores es mayor; una operacin lgica, que evala si dos expresiones son ambas verdaderas. Los operadores combinados con elementos de cdigo que devuelven valores como literales o variables forman expresiones o, en el caso del operador de asignacin, instrucciones. El siguiente es un ejemplo de una instruccin que utiliza el operador de asignacin (=):
x = 45
En este ejemplo, el operador de asignacin realiza la operacin de asignacin: toma el valor del lado derecho del operador y lo asigna a la variable del lado izquierdo. Varios operadores pueden realizar acciones en una expresin o instruccin simples, como se demuestra a continuacin:
x = 45 + y * z ^ 2
En este ejemplo, se realizan las operaciones de la expresin situada a la derecha del operador de asignacin y el valor resultante se asigna a la variable x, situada a la izquierda. No existe lmite en cuanto al nmero de operadores que se pueden combinar en una expresin, pero debe comprender la prioridad de operadores en Pauscal para asegurarse de que obtendr los resultados previstos. (Ver Prioridad de operador).
Operadores aritmticos Operadores de comparacin Operador de concatenacin Operador de evaluacin Prioridad de operador Expresiones Instrucciones
Volver
Page 23
Expresiones
Una expresin puede considerarse una serie de elementos que representan valores, separados por operadores, que produce un nuevo valor. Como ejemplos de tales elementos que representan valores pueden citarse los literales, las variables, otras expresiones y las llamadas a procedimientos. Los operadores actan sobre los elementos que representan valores realizando clculos, comparaciones y otras operaciones. El resultado final de la expresin representa un valor, que puede ser de tipo numrico, Booleano o Cadena.
Volver
Page 24
Expresiones booleanas
Una expresin booleana es una expresin que da como resultado un valor Booleano. Las expresiones booleanas pueden tener varias formas. La ms simple es la comparacin directa del valor de una variable de tipo Booleano con un literal Booleano, como se muestra en el siguiente ejemplo:
Si x = Verd ' Compara x con el valor booleano Verd. ' Cdigo a ejecutarse si x es igual a Verd Sino ' Cdigo a ejecutarse si x es igual a Falso FinSi
Es de resear que la instruccin de asignacin x = Verd tiene el mismo aspecto que la expresin del ejemplo, pero realiza funciones diferentes y se utiliza de forma distinta. En el ejemplo anterior, la expresin x = Verd representa un valor y por tanto el signo = se interpreta como operador de comparacin. En una instruccin independiente, se interpretara como operador de asignacin y asignara el valor de la derecha a la variable de la izquierda. Esto se ilustra en el siguiente ejemplo:
Si x = Verd y = Falso FinSi ' Compara x con el valor booleano Verd. ' Asigna el valor booleano Verd a la variable y.
Para obtener ms informacin, vea Comparaciones de valores e Instrucciones de asignacin. Los operadores de comparacin, como =, <, >, <>, <= y >=, producen expresiones booleanas mediante la comparacin de la expresin situada a la izquierda del operador con la expresin situada a la derecha, y evala el resultado como verdadero (Verd) o falso (Falso). Por ejemplo:
42 < 81 ' Evala a Verd.
Para obtener ms informacin sobre esta clase de expresin, vea Comparaciones de valores. Las expresiones de comparacin se pueden combinar con operadores lgicos para producir expresiones booleanas ms complejas. El siguiente ejemplo demuestra el uso de operadores de comparacin junto con un operador lgico:
(x > y) And (x < 1000)
En el ejemplo, el valor de toda la expresin depende de los valores de las expresiones especificadas a cada lado del operador And. Si las dos expresiones son verdaderas, la evaluacin de toda la expresin devuelve Verd. Si una de las expresiones es falsa, devuelve Falso. Ntense los parntesis a ambos lados del operador And. Estos parntesis deben ir ya que el operador And posee una prioridad mayor al de los operadores de comparacin, y Pauscal tratara de evaluarlos antes. (Ver Prioridad de operador).
Page 25
Volver
Page 26
Esta expresin se evala como 276, que es el valor de 67 ms 2, multiplicado por 4. Si la expresin numrica contiene ms de un operador, el orden en que se evalan lo determina las reglas de prioridad de operador. Para anular las reglas de prioridad de operador, las expresiones se escriben entre parntesis, como en el ejemplo anterior; tales expresiones se evalan primero. Para obtener ms informacin, vea Prioridad de operador. Puede utilizar una instruccin de asignacin para asignar los valores representados mediante esta expresin a otra variable, como en el ejemplo siguiente:
Var x,y:Entero x = 2 y = 4 * (67 + x)
Aqu, el valor de la expresin a la derecha del operador se asigna a la variable y situada a la izquierda del operador, de modo que y se evala como 276. Para obtener ms informacin sobre la asignacin, vea Instrucciones de asignacin.
Volver
Page 27
Comparaciones de valores
Los operadores de comparacin pueden utilizarse para construir expresiones que comparan los valores de variables numricas. Estas expresiones devuelven un valor Booleano que depende de si la comparacin es verdadera o falsa. Los siguientes son ejemplos de este tipo de expresin:
45 > 26 26 > 45
La evaluacin de la primera expresin devuelve Verd, puesto que 45 es mayor que 26. La evaluacin del segundo ejemplo devuelve Falso, puesto que 26 no es mayor que 45. De esta forma, puede comparar cualquier par de expresiones numricas. Las expresiones comparadas pueden ser complejas, como en el siguiente ejemplo:
x / 45.0 * (y + 17.0) >= RaizCuad(z) / (p - (x * 16.0))
Esta expresin compleja incluye literales, variables y llamadas a procedimientos. Se evalan las expresiones especificadas a ambos lados del operador de comparacin y los valores resultantes se comparan mediante el operador de comparacin >=. Si el valor de la expresin de la izquierda es mayor o igual que el valor de la expresin de la derecha, la evaluacin de la expresin completa devuelve Verd; de lo contrario, devuelve Falso. Las expresiones que comparan valores se utilizan con frecuencia en los bloques condicionales Si, como en el siguiente ejemplo:
Si x > 50 ' Cdigo a ejecutarse si x es mayor a 50 Sino ' Cdigo a ejecutarse si x es menor o igual a 50 FinSi
El signo = es un operador de comparacin, adems de un operador de asignacin. Cuando se utiliza como operador de comparacin, evala si el valor de la izquierda es igual que el valor de la derecha, como se muestra en el siguiente ejemplo:
Si x = 50 ' Cdigo a ejecutarse si x es igual a 50 FinSi
Una expresin de comparacin tambin se puede utilizar all donde sea necesario un valor Booleano, como en una instruccin Si, Mientras, HastaQue, o cuando se asigna o se pasa un valor a una variable de tipo Booleano. En el siguiente ejemplo, el valor devuelto por la expresin de comparacin se asigna a una variable Booleano:
Var x:Booleano x = 50 < 30 ' a x se le asigna Falso.
Volver
Page 28
Tipos de procedimientos
En Pauscal existen dos tipos de procedimientos: los procedimientos que ejecutan acciones, y los procedimientos que, adems de ejecutar acciones, devuelven un valor al cdigo de llamada. Estos ltimos tambin se conocen con el nombre de funciones.
Los procedimientos permiten desglosar los programas en unidades lgicas independientes. Es ms fcil depurar unidades individuales que todo un programa sin procedimientos. Los procedimientos desarrollados para un programa pueden utilizarse en otros programas, generalmente sin tener que realizar grandes modificaciones.
Declaracin de procedimientos Parmetros de procedimientos Procedimientos recursivos Prototipos y variables de procedimientos Fundamentos de la programacin en Pauscal
Volver
Page 29
Estructuras de desicin
Pauscal permite probar condiciones y realizar diferentes operaciones en funcin de los resultados de la prueba. Puede comprobar si una condicin es verdadera o falsa, los distintos valores de una expresin o las diferentes excepciones que se generan al ejecutar una serie de instrucciones. Las instrucciones de decisin que admite Pauscal incluyen:
Si Seleccionar AdmErr
Estructuras de programacin
En esta categora se ubican las estructuras de programacin que no son de bucles ni de desicin.
Eval Bloque
Volver
Page 30
Control estructurado de excepciones Tipos de errores Bloque "AdmErr" Iniciar excepciones Fundamentos de la programacin en Pauscal
Volver
Page 31
Declaracin de estructuras Variables de estructura Temas avanzados de estructuras Uniones Fundamentos de la programacin en Pauscal
Volver
Page 32
Clases y objetos
Los trminos "clase" y "objeto" se utilizan a veces indistintamente, pero en realidad, las clases describen la estructura de los objetos, mientras que los objetos son instancias de clases que se pueden utilizar. Cada instancia es una copia exacta pero diferente de su clase. Puesto que un objeto es una "instancia" de una clase, la accin de crear un objeto se denomina creacin de instancias. Con la analoga de plano, una clase es un plano, y un objeto es un edificio basado en ese plano. Generalmente, el cambio de datos en un objeto no cambia los datos de otro objeto.
Encapsulacin
La encapsulacin es la capacidad de contener y controlar el acceso a un grupo de elementos asociados. Las clases proporcionan una de las formas ms comunes de encapsular elementos. En el ejemplo siguiente, la clase CuentaBancaria encapsula los mtodos, campos, y propiedades que describen una cuenta bancaria. Sin la encapsulacin, sera necesario declarar diferentes procedimientos y campos para almacenar y administrar la informacin de la cuenta bancaria, y sera difcil trabajar con ms de una cuenta bancaria a la vez. La encapsulacin permite utilizar datos y procedimientos de la clase CuentaBancaria como una unidad. Puede trabajar con varias cuentas bancarias al mismo tiempo sin confusin, puesto que cada cuenta se representa mediante una instancia nica de la clase. La encapsulacin tambin permite controlar la forma de utilizar los datos y los procedimientos. Se pueden utilizar modificadores de acceso, como Privado o Pblico, para evitar que procedimientos externos ejecuten mtodos de clase o lean y modifiquen datos privados. Los detalles internos de una clase deben declararse como Privado para evitar que sean utilizados fuera de la misma; esta tcnica se denomina ocultacin de datos. En la clase CuentaBancaria, la informacin del cliente, por ejemplo el saldo de la cuenta, se protege de esta forma. Una de las reglas bsicas de la encapsulacin es que los datos de clase slo se deben modificar o recuperar mediante mtodos o propiedades. Al ocultar los detalles de implementacin de las clases se evita que sean utilizados de forma no deseada y hace posible la modificacin posterior de tales elementos sin problemas de compatibilidad. Por ejemplo, en las versiones posteriores de la clase CuentaBancaria que se muestra a continuacin se podra cambiar el tipo de datos de la variable BalanceDeLaCuenta sin peligro de interrumpir las aplicaciones que se basan en que esa variable tenga un tipo de datos especfico.
Herencia
Page 33
Las clases de Pauscal pueden heredar y extender las caractersticas de otras clases. Las clases que sirven de base para nuevas clases se denominan clases base. Las clases que se derivan de clases base se denominan clases derivadas. Las clases derivadas heredan todos los campos, propiedades y mtodos definidos en la clase base. Esto significa que puede desarrollar y depurar una clase una vez y reutilizarla despus como base de otras clases. En el siguiente ejemplo se define una clase base que representa una cuenta bancaria genrica y una clase especfica que hereda las propiedades de la clase base pero que se personaliza para describir una cuenta corriente:
Clase CuentaBancaria ClaseVar NmeroDeCuenta:Cadena ClaseVar BalanceDeLaCuenta:Real Proc Intereses() ' Cdigo que calcula el inters de la cuenta. FinProc Proc Balance():Real Devolver BalanceDeLaCuenta FinProc FinClase Clase CuentaCorriente(CuentaBancaria) Proc ProcesarCheque ' Cdigo que procesa un cheque de esta cuenta. FinProc FinClase
Duracin de los objetos Constructores y destructores Mtodos de una clase Campos de una clase Propiedades y procedimientos de propiedad Propiedades frente a mtodos Fundamentos de la programacin en Pauscal
Volver
Page 34
Page 35
Volver
Page 36
Control de la ejecucin
El depurador de Pauscal proporciona comandos eficaces para controlar la ejecucin de las aplicaciones. En los temas siguientes se describen las tareas que puede realizar con comandos del depurador para controlar la ejecucin:
Iniciar la depuracin Interrumpir la ejecucin Detener la ejecucin Avanzar paso a paso por la aplicacin Establecer el punto de ejecucin
Volver
Page 37
Iniciar la depuracin
Para iniciar la depuracin
Antes de iniciar la depuracin, Pauscal compilar el proyecto en un archivo temporal. En caso de que no hubieran ocurrido errores, se iniciar el depurador. Una vez iniciado el depurador, el programa se interrumpir en la primera lnea de cdigo ejecutable.
Volver
Page 38
Interrumpir la ejecucin
Cuando se depura una aplicacin con el depurador de Pauscal, la aplicacin o se est ejecutando o est en modo de interrupcin. Numerosas funciones del depurador, como la evaluacin de expresiones en el panel Inspeccin, slo estn disponibles en el modo de interrupcin. El depurador interrumpe la ejecucin del programa cuando llega a un punto de interrupcin o cuando se produce una excepcin. Puede interrumpir manualmente la ejecucin en cualquier momento. Para interrumpir manualmente la ejecucin del programa
Haga clic en el botn Pausa, o F6. El depurador detendr la ejecucin del programa, pero no lo termina. Es posible reanudar su ejecucin en cualquier momento. El depurador y la aplicacin se encuentran ahora en modo de interrupcin. Nota Para interrumpir un programa manualmente, el punto de ejecucin en ese momento debe estar dentro del cdigo fuente. Si, por alguna razn, el programa est en alguna seccin donde no hay cdigo fuente, por ejemplo dentro de un procedimiento externo, Pauscal interrumpir el programa cuando ste ingrese al cdigo fuente.
Volver
Page 39
Detener la ejecucin
Detener la ejecucin significa terminar el programa que se est depurando y concluir la sesin de depuracin. No debe confundirse con interrumpir la ejecucin, que significa detener temporalmente la ejecucin del programa que se est depurando pero dejando la sesin de depuracin activa. Para obtener ms informacin, vea Interrumpir la ejecucin. Para detener la depuracin Haga clic en el botn Terminar. Nota Este botn detiene inmediatamente un programa y todos sus subprocesos sin pedir confirmacin. Esto puede causar prdida de informacin en ciertos casos.
Volver
Page 40
Paso a paso y Saltear llamadas slo se diferencian en la forma en que tratan las llamadas a procedimientos. Ambos comandos indican al depurador que ejecute la siguiente lnea de cdigo. Si la lnea contiene una llamada a un procedimiento, Paso a paso slo ejecuta la llamada en s y, a continuacin, se detiene en la primera lnea de cdigo incluida en el procedimiento. Saltear llamadas ejecuta todo el procedimiento y despus se detiene en la primera lnea que est fuera de ella. Utilice Paso a paso si desea examinar el interior de la llamada al procedimiento. Utilice Saltear llamadas si desea evitar la ejecucin paso a paso de las instrucciones incluidas en el procedimiento. Los comandos anteriores no pueden utilizarse mientras la aplicacin se est ejecutando. Estos comandos slo son vlidos en modo de interrupcin. Para obtener ms informacin, vea Interrumpir la ejecucin.
Volver
Page 41
Haga doble clic sobre la lnea del cdigo fuente en donde desea establecer el punto de ejecucin, o haga clic en el botn Establecer siguiente instruccin luego de seleccionar la lnea de cdigo fuente.
Volver
Page 42
Instrucciones
En Pauscal, una instruccin es un comando completo que puede contener palabras clave, operadores, variables, constantes y expresiones. Las instrucciones se clasifican en dos categoras: instrucciones de declaracin, que asignan nombre a una variable, constante o procedimiento, y tambin pueden especificar un tipo de datos, e instrucciones ejecutables, que inician acciones.
Introduccin a las instrucciones Instrucciones de asignacin Instrucciones de declaracin Instrucciones ejecutables Operadores Expresiones
Volver
Page 43
Instrucciones de declaracin, que dan nombre a una variable, constante o procedimiento y tambin pueden especificar un tipo de datos. Para obtener ms informacin, vea Instrucciones de declaracin. Instrucciones ejecutables, que inician acciones. Estas instrucciones pueden ejecutar un mtodo o procedimiento, y pueden realizar un bucle o una bifurcacin a travs de bloques de cdigo. Las instrucciones ejecutables incluyen instrucciones de asignacin, que asignan un valor o expresin a una variable. Para obtener ms informacin, vea Instrucciones ejecutables e Instrucciones de asignacin.
Aunque ocasionalmente puede resultar conveniente, esta forma de sintaxis dificulta la lectura y el mantenimiento del cdigo. Por tanto, se recomienda mantener una instruccin por lnea.
Agregar comentarios
El cdigo fuente no es siempre fcil de entender, ni siquiera para el programador que lo escribi. Por consiguiente, como ayuda para documentar el cdigo, la mayora de los programadores utilizan libremente comentarios incrustados. Los comentarios en el cdigo pueden explicar un procedimiento o una instruccin concreta a cualquiera que lea o trabaje con ellos posteriormente. No obstante, Pauscal omite los comentarios al ejecutar el cdigo. Las lneas de comentarios comienzan con un apstrofo ('), y puede incluirse en cualquier punto del
Page 44
cdigo. Para anexar un comentario a una instruccin, inserte un apstrofo despus de la instruccin, seguido del comentario. Tal comentario aparece en el ejemplo anterior. Los comentarios tambin pueden escribirse separados en una lnea propia.
Volver
Page 45
Instrucciones de asignacin
Las instrucciones de asignacin realizan operaciones de asignacin. Las operaciones de asignacin consisten en tomar el valor de la derecha del operador y asignarlo a la variable a la izquierda, como en este ejemplo:
x = 42
Aqu, la variable x se asigna al valor literal 42. El valor de la derecha del operador puede ser cualquier literal, variable, expresin o llamada a procedimiento que devuelva un valor, como en este ejemplo:
x = y + z + MiProcedimiento(3)
Aqu, el valor que representa y se agrega al valor que representa z, que se suma al valor que devuelve la llamada a MiProcedimiento(3). Despus, el valor total de esta expresin se asigna a la variable x. El operador de asignacin tambin puede asignar valores a variables y expresiones de tipo Cadena, como en este ejemplo:
Var x:Cadena x = "Asignacin de variable de cadena" x = "Con" + "cat" + "enacin" ' x es igual a "Concatenacin".
Tambin se pueden asignar los valores de variables de tipo Booleano, mediante un literal Booleano o una expresin booleana como argumento de la derecha:
Var x:Booleano x = Verd x = 45 > 1003 ' x es igual a Falso. x = (45 > 1003) Or (45 > 17) ' x es igual a Verd.
El argumento en el lado izquierdo del operador puede ser cualquier variable o propiedad vlidas. En el siguiente ejemplo se muestra como se establece el valor de la propiedad Texto de una caja de texto:
txtNombre.Texto = "Ingrese su nombre aqu"
Para ms informacin, vea Usando las matrices y Temas avanzados sobre las estructuras.
Volver
Page 46
Instrucciones de declaracin
Las instrucciones de declaracin se utilizan para definir procedimientos, variables, matrices y constantes, y asignarles nombre. Cuando se declara un procedimiento, variable o constante, tambin se define su mbito, dependiendo del lugar en el que se coloque la declaracin. El siguiente ejemplo contiene tres declaraciones.
Const Lim = 33 Proc AplicarFormato() Var Texto:Cadena ' Cdigo que implementa el procedimiento. FinProc
Primero, la instruccin Const declara la constante Lim, con el valor 33. A continuacin la instruccin Proc (con la instruccin FinProc correspondiente) declara un procedimiento denominado AplicarFormato. Todas las instrucciones entre Proc y FinProc se ejecutan cada vez que se llama o ejecuta el procedimiento AplicarFormato. Finalmente, la instruccin Var declara la variable local Texto. El tipo de datos de la variable es Cadena .
Volver
Page 47
Instrucciones ejecutables
Una instruccin ejecutable inicia una accin mediante la ejecucin de un mtodo. Puede realizar un bucle o una bifurcacin a travs de bloques de cdigo. Las instrucciones ejecutables a menudo contienen operadores matemticos o condicionales. El siguiente ejemplo utiliza una instruccin Si para ejecutar diferentes bloques basndose en el valor de una variable. Dentro de cada bloque de cdigo, una instruccin Contar hace que se ejecute un bucle un nmero de veces especificado.
Proc Rotar(Img:cImagen, SentidoHorario:Booleano, Revoluciones:Entero) Var i:Entero Si SentidoHorario = Verd Contar i = 1 a Revoluciones Img.GirarSentidoHorario Seguir Sino Contar i = 1 a Revoluciones Img.GirarSentidoAntihorario Seguir FinSi FinProc
La instruccin Si del ejemplo comprueba el valor de la variable SentidoHorario. Si el valor es Verd, se llama al mtodo GirarSentidoHorario de Img. Si el valor es Falso, se llama al mtodo GirarSentidoAntihorario de Img. Las instrucciones Si finalizan con FinSi. Las instrucciones Contar dentro de cada bloque hacen que se llame el mtodo apropiado un nmero de veces igual al indicado por la variable Revoluciones.
Volver
Page 48
Operadores
Un operador es una unidad de cdigo que realiza una operacin sobre uno o ms elementos de cdigo que devuelven valores. Tal operacin puede ser una operacin aritmtica, como una suma o una multiplicacin; una operacin de concatenacin, que combina dos cadenas en una nueva; una operacin de comparacin, que determina cul de dos valores es mayor; una operacin lgica, que evala si dos expresiones son ambas verdaderas. Los operadores combinados con elementos de cdigo que devuelven valores como literales o variables forman expresiones o, en el caso del operador de asignacin, instrucciones. El siguiente es un ejemplo de una instruccin que utiliza el operador de asignacin (=):
x = 45
En este ejemplo, el operador de asignacin realiza la operacin de asignacin: toma el valor del lado derecho del operador y lo asigna a la variable del lado izquierdo. Varios operadores pueden realizar acciones en una expresin o instruccin simples, como se demuestra a continuacin:
x = 45 + y * z ^ 2
En este ejemplo, se realizan las operaciones de la expresin situada a la derecha del operador de asignacin y el valor resultante se asigna a la variable x, situada a la izquierda. No existe lmite en cuanto al nmero de operadores que se pueden combinar en una expresin, pero debe comprender la prioridad de operadores en Pauscal para asegurarse de que obtendr los resultados previstos. (Ver Prioridad de operador).
Operadores aritmticos Operadores de comparacin Operador de concatenacin Operador de evaluacin Prioridad de operador Expresiones Instrucciones
Volver
Page 49
Operadores aritmticos
Los operadores aritmticos se utilizan para realizar muchas de las operaciones aritmticas habituales que implican el clculo de valores numricos representados por literales, variables, otras expresiones, llamadas a procedimientos y propiedades, y constantes.
Operaciones aritmticas
Puede sumar dos valores en una expresin con el operador + o restar un valor de otro con el operador , como se muestra en los siguientes ejemplos:
Var x:EnteroSig x = 67 + 34 x = 32 - 12
La negacin tambin utiliza el operador -, pero con una sintaxis algo diferente, como se muestra a continuacin:
Var x,y:EnteroSig x = 87 y = -x
La divisin de enteros se lleva a cabo con el operador \. La divisin de enteros devuelve el nmero de veces que un entero puede dividirse exactamente en otro. Con este operador, slo se pueden utilizar tipos enteros (ver Resumen de tipos de datos). A continuacin se muestra un ejemplo de una divisin de enteros:
Var k:Entero k = 23 \ 5 ' k = 4
El mdulo aritmtico se calcula con el operador Mod. Este operador devuelve el resto una vez que se divide el divisor por el dividendo un nmero integral de veces. Este operador slo trabaja con tipos enteros.
Var x = y = z = x,y:Entero 100 6 x Mod y ' z = 4
Los operadores Shl (Shift Left) y Shr (Shift Right) mueven del primer operando tantos bits como indica el segundo operando hacia la izquierda y derecha, respectivamente. Matemticamente se puede decir que:
a shl b = a * (2 ^ b) a shr b = a \ (2 ^ b)
Page 50
Primero, los valores se convierten a formato binario, como se muestra a continuacin: 3 en formato binario = 011 5 en formato binario = 101
A continuacin, las representaciones binarias se comparan, de posicin en posicin binaria. Si los dos bits en una posicin dada son 1, entonces se coloca un 1 en esa posicin del resultado. Si uno de los dos bits es un 0, entonces se coloca un 0 en esa posicin del resultado. En el ejemplo, esto funciona como sigue: 011 101 001 3 en formato binario 5 en formato binario El resultado, en formato binario
En la conversin de nuevo a decimal, 001 es la representacin binaria de 1, luego x = 1. La operacin Or bit a bit es similar, con la diferencia de que asigna un 1 al bit de resultado si uno de los dos bits comparados es 1. Xor asigna un 1 al bit de resultado si slo uno de los dos bits comparados vale 1 (no los dos). Not invierte todos los bits de un solo operando y asigna ese valor al resultado. Los operadores And, Or y Not tambin se pueden usar en Pauscal como Y, O y Neg, respectivamente. Nota Las operaciones bit a bit slo se pueden realizar en tipos enteros.
Volver
Page 51
Operadores de comparacin
Los operadores de comparacin comparan dos expresiones y devuelven un valor Booleano que representa el resultado de la comparacin. Existen operadores para comparar valores numricos, operadores para comparar cadenas y operadores para comparar objetos. Los tres tipos de operadores se describen a continuacin.
<> (Desigualdad)
Comparar cadenas
Para comparar cadenas slo se pueden utilizar los operadores de igualdad (=) y de desigualdad (<>), como indica el ejemplo siguiente:
"734" = "734" ' Verd
En este ejemplo, las dos cadenas se comparan directamente y, puesto que son iguales, se devuelve Verd .
"73" <> "9" ' Verd
En este ejemplo, las dos cadenas son diferentes, por lo que se devuelve Verd.
Page 52
Comparar objetos
Puede utilizar el operador Es para determinar si dos variables de objeto hacen referencia a la misma instancia de una clase. Por ejemplo:
Var x,y:MiClase Crear y x = y 'x apunta a y Si x Es y ' Cdigo que se ejecuta si x e y apuntan al mismo objeto FinSi
En este ejemplo, la evaluacin de x Es y devuelve Verd, porque las dos variables hacen referencia a la misma instancia. Compare este resultado con el del ejemplo siguiente:
Var x,y:MiClase Crear x,y Si x Es y ' Cdigo que se ejecuta si x e y apuntan al mismo objeto FinSi
En este ejemplo, la evaluacin de x Es y devuelve Falso, puesto que aunque las variables son del mismo tipo, hacen referencia a instancias diferentes de ese tipo.
Volver
Page 53
Operador de concatenacin
El operador de concatenacin (+) combina varias cadenas en una sola, como se muestra a continuacin:
Var x:Cadena x = "Con" + "caten" + "acin" ' x = "Concatenacin"
Estos operadores tambin concatenan variables de tipo Cadena, como en el ejemplo siguiente:
Var x,y,z:Cadena x = "abc" y = "def" z = x + y
' z = "abcdef"
Volver
Page 54
Operador de evaluacin
El operador de evaluacin >:? se utiliza para seleccionar un valor de entre dos, basndose en una condicin. El operador de evaluacin es el nico en Pauscal que requiere tres operandos.
> condicin ? parteVerdadero : parteFalso
condicin puede ser cualquier expresin de tipo Booleano que pueda evaluarse como Verd o Falso. El operador devuelve parteVerdadero si condicin es Verd. Si condicin es Falso el operador devuelve parteFalso. En el siguiente ejemplo, debido a que la condicin es falsa, el operador devuelve la parte falsa, es decir 6.
Var x,y:Entero x = 9 y = > (x = 4) ? (5) : (6) ' y = 6
Los parentesis de los operandos no son necesarios, pero ayudan a comprender el cdigo. El operador de evaluacin funciona con cualquier tipo de datos, incluso estructuras y matrices.
Var x:Entero Var y[]:Entero x = 4 y = > (x = 4) ? ([5,8,9]) : ([8,6]) ' y = [5,8,9]
Volver
Page 55
Prioridad de operador
Cuando aparecen varias operaciones en una expresin, cada parte se evala y se resuelve en un orden predeterminado conocido como prioridad de operador. En Pauscal, los operadores se evalan en el siguiente orden de prioridad: 1 2 3 4 5 6 7 Not/Neg * + Or/O And/Y = >?: <> <= < > >= Es / Xor \ Shl Shr Mod ^
Cuando aparecen varios operadores de la misma prioridad se evala cada operacin segn aparece de izquierda a derecha. Puede utilizar parntesis para pasar por alto el orden de prioridad y obligar a evaluar algunas partes de una expresin antes que otras. Las operaciones entre parntesis se realizan siempre antes que las de fuera del parntesis. Sin embargo, entre parntesis se mantiene la prioridad de los operadores.
Volver
Page 56
No puede comenzar con un dgito. No puede incluir ningn smbolo utilizado internamente (p.ej: el punto). Debe ser nico en su alcance.
Alcance
Al declarar una variable, sta puede ser local, global o de clase, dependiendo del lugar en donde fue declarada: si fue declarada dentro de un procedimiento, la variable es local; si fue declarada dentro de una clase, la variable es de clase y se denomina campo; y si fue declarada fuera de un procedimiento y fuera de una clase, la variable es global. Las variable locales slo existen dentro del procedimiento en el cual fueron declaradas, es decir, slo pueden ser accedidas desde dentro de ese procedimiento y una vez que el procedimiento se termina, las variable se pierden (como as tambin sus valores). Un hecho interesante de las variables locales es que si existe ms de una instancia de un mismo procedimiento, sus variables locales son independientes de las otras instancias. Las variables de clase, denominadas campos, existen dentro de la instancia de la clase en la que fueron
Page 57
declaras. Al igual que las variables locales, si hay ms de una instancia de una clase, estas variables son diferentes en cada instancia. Las variables globales existen en todo el programa, y su valor permanece hasta que el programa finaliza. Atencin: Las declaraciones de las variables locales dentro de un procedimiento deben estar ubicadas antes que cualquier otra instruccin del procedimiento.
Volver
Page 58
Tipos de datos
El tipo de datos de un elemento de programacin hace referencia al tipo de datos que puede contener y a cmo son almacenados. Los tipos de datos se aplican a todos los valores que pueden almacenarse en la memoria del equipo o participar en la evaluacin de una expresin. Cada variable, propiedad, parmetro de procedimiento y valor devuelto por un procedimiento tiene un tipo de datos. Aqu se describen la declaracin y el uso de los tipos de datos de Pauscal.
Volver
Page 59
Byte
1 byte (8 bits)
0 ~ 255
ByteSig
1 byte (8 bits)
-128 ~ 127
Word
0 ~ 65.535
WordSig
-32768 ~ 32767
Entero
0 ~ 4.294.967.295
EnteroSig
- 2.147.483.648 ~ 2.147.483.647 -1,79769313486232 ~ -324 -4,94065645841247 -922.337.203.685.477,5800 ~ 922.337.203.685.477,5800 0 ~ 2.000 millones de caracteres
308
Real
Decimal
Cadena
Variable
Consumo de memoria
Al declarar un tipo de datos bsico, no debe suponerse que su consumo de memoria es igual a su asignacin de almacenamiento nominal. Pauscal asigna el almacenamiento en funcin de varios factores, incluyendo el alcance de la variable, el contexto en el que se emplea, etc. Esto tambin se aplica a cada miembro de una estructura, clase o una matriz. Adems, algunos tipos compuestos tienen requisitos adicionales de memoria. Por ejemplo, una instancia de una clase utiliza memoria adicional para almacenar la cuenta de referencias. No se puede sumar simplemente todas las asignaciones de almacenamiento nominales de los componentes para obtener el consumo real de memoria.
Volver
Page 60
Tipos de datos integrales Los tipos de datos integrales son aquellos que slo representan nmeros enteros. Los tipos de datos integrales sin signo son Entero (32 bits), Word (16 bits) y Byte (8 bits). Los tipos de datos integrales con signo son WordSig (16 bits), EnteroSig (32 bits) y ByteSig (8 bits). Si una variable almacena siempre nmeros enteros en lugar de nmeros con una parte decimal, declrela como variable de uno de estos tipos. Los tipos de datos sin signos no pueden representar valores negativos, pero pueden representar valores positivos mayores. (Ver Resume de tipos de datos) Los operadores aritmticos son ms rpidos con los tipos integrales que con cualquier otro tipo de datos. Con el que ms rpidos son es con el tipo de datos Entero y EnteroSig. Los tipos integrales son especialmente tiles como variables de contador en bucles Contar...Seguir. Si intenta asignar a una variable de un tipo integral un nmero que est fuera del intervalo correspondiente a este tipo, se produce un error.
Tipos de datos no integrales Los tipos de datos no integrales son aquellos que representan nmeros que contienen tanto partes enteras como decimales. En Pauscal los tipos no integrales son los tipos de datos Real y Decimal. El tipo de datos Real permite almacenar nmeros reales de coma flotante con una presicin de 64 bits. Para indicar que un valor es de tipo Real, el nmero debe tener el separador decimal (.):
1.5 ' es Real 5 ' no es Real 8.0 'es Real
El tipo de datos Decimal almacena nmeros de 64 bits con coma fija de 4 decimales. Para indicar que un valor es de tipo Decimal, el nmero debe tener el sufijo @:
2.15@ ' es Decimal 4.4 ' no es Decimal 468@ ' es Decimal 7 'no es Decimal
Tipo de datos Cadena El tipo de datos Cadena es una secuencia de cero o ms caracteres de un byte. Los primeros 128
Page 61
puntos de cdigo (0127) de ASCII corresponden a las letras y los smbolos de un teclado estndar americano. Los siguientes 128 puntos de cdigo (128255) representan caracteres especiales, como letras de alfabetos latinos, acentos, smbolos de moneda y fracciones. Si una variable siempre contiene una cadena de caracteres y nunca contiene un valor numrico, declrela para que sea del tipo Cadena, como en el ejemplo siguiente:
Var S:Cadena
A continuacin puede asignar cadenas a esta variable y manipularla mediante el uso de procedimientos de cadena, como en el ejemplo siguiente:
S = "Hola"
Un parmetro o variable Cadena siempre es una cadena de longitud variable, que crece o se reduce a medida que se le asignan datos nuevos. Una cadena puede contener hasta unos 2.000 millones (231) de caracteres.
Tipo de datos Booleano El tipo de datos Booleano es un valor sin signo de 8 bits que se interpreta como Verd (Verdadero) o Falso. Si una variable slo puede contener informacin de tipo verdadero/falso, s/no o activado/desactivado, declrela como de tipo Booleano. El valor predeterminado es Falso.
Volver
Page 62
El hecho de ser una matriz La longitud de la matriz El tipo de matriz El tipo de elemento de la matriz
A[12]:Byte B[2]:Byte C[2]:Entero D[]:Entero
En el ejemplo anterior, las variables de matriz A y B no se consideran del mismo tipo de datos porque poseen distintas longitudes. Las variables de matriz B y C no son del mismo tipo porque sus tipos de elemento son distintos. C y D no son del mismo tipo porque una matriz es esttica y la otra dinmica.
Introduccin a las variables Introduccin a las estructuras Matrices Introduccin a las clases y los objetos
Volver
Page 63
Matrices
Las matrices permiten hacer referencia a una serie de variables mediante un mismo nombre y utilizar un nmero, denominado ndice o subndice, para distinguirlas. De esta forma, se puede crear un cdigo ms simple y reducido en muchos casos, ya que es posible utilizar bucles que usen el ndice para procesar eficientemente cualquier nmero de elementos de la matriz.
Tamao de matriz
La matriz tiene un tamao o longitud distinto de cero. Los elementos de la matriz son contiguos, desde 0 hasta el mayor valor del subndice de la matriz, que es igual a su tamao menos uno. Puesto que Pauscal asigna espacio para todos los elementos de una matriz, se debe evitar declarar una matriz mayor de lo necesario. Existen dos tipos de matrices: las matrices estticas y las matrices dinmicas. Una matriz esttica no puede cambiar su tamao. En cambio una matriz dinmica puede variar su tamao mediante la instruccin Redim.
Volver
Page 64
Declaracin de matrices
Matrices estticas
Las matrices estticas se declaran de la misma forma que una variable, pero incluyendo su tamao entre corchetes luego del nombre. As:
Var Matriz[20]:Entero Var Nombres[10]:Cadena
Los elementos de una matriz van desde 0 hasta su tamao menos 1. Por ejemplo, la siguiente matriz:
Var Elementos[10]:Entero
que posee 10 elementos, que van desde 0 (el primer elemento) hasta 9 (el ltimo elemento).
Matrices dinmicas
Una matriz dinmica puede cambiar de tamao en cualquier momento. Las matrices dinmicas son una de las caractersticas ms flexibles de Pauscal, y le ayudan a administrar de forma eficiente la memoria. Por ejemplo, puede utilizar una matriz grande durante un tiempo corto y liberar memoria del sistema cuando no necesite volver a utilizar la matriz. La alternativa consiste en declarar la matriz con el mayor tamao posible y pasar por alto los elementos de la matriz que no necesite. Sin embargo, esta solucin, si se utiliza demasiado, puede hacer que el sistema operativo funcione con muy poca memoria. Para declarar una matriz dinmica, debe declarar la matriz como si fuese una esttica, pero sin especificar su tamao. As:
Var Dinamico[]:Entero Var Elementos[]:Real
Pero antes de poder utilizarlas, hay que dimensionarlas. Para eso se utiliza la instruccin Redim:
Redim Elementos, 200
De esta forma dimensionamos la matriz para que almacene 200 elementos, que van de 0 hasta 199. La instruccin Redim permite, tambin, cambiarle el tamao de una matriz dinmica que ya ha sido dimensionada:
Redim Elementos, 300
Ahora el tamao de la matriz cambia de 200 a 300. Al cambiar el tamao de una matriz dinmica que ya ha sido dimensionada, se pierden los valores que estaban almacenados en la matriz. Si necesita que los valores sean preservados, deber agregarle a la instruccin Redim la palabra clave Preservar:
Redim Preservar Elementos, 255
En caso de que el nuevo tamao de la matriz sea menor, Pauscal liberar los elementos eliminados. En el caso de que sean objetos, stos sern destrudos.
Page 65
Volver
Page 66
El ndice del elemento no necesariamente debe ser conocido en tiempo de diseo, sino que puede estar dado por una variable o incluso una llamada a un procedimiento:
Matriz[3] = 9 + Matriz[7 * Variable]
En este ejemplo se redimensiona la matriz de destino con la cantidad de elementos de la matriz de origen, luego se cuenta desde el primer elemento hasta el ltimo, asignando en cada iteracin el elemento en cuestin de la matriz de origen a la de destino. Aunque este mtodo funciona perfectamente, hay una forma ms fcil y rpida de copiar la matriz:
Matriz1 = Matriz2
Aqu Pauscal se encarga de copiar los elementos de la matriz de forma automtica. Este mtodo es ms transparente e intuitivo, pero tiene sus limitaciones:
Las matrices deben ser del mismo tipo: no basta con que sean compatibles. Ambas matrices deben ser dinmicas. En caso de ser estticas deben ser del mismo tamao.
Page 67
Despus de ejecutar el ejemplo anterior, la matriz Nombres posee tres elementos que corresponden a los valores devueltos por el procedimiento Diseadores.
Constructor de matrices
Si es necesario que una matriz tenga determinados valores asignados a cada uno de sus elementos, se puede hacer:
Var Matriz[4]:Entero Matriz[0] Matriz[1] Matriz[2] Matriz[3] = = = = 7 87 135 28
Este mtodo es perfectamente vlido, pero si la matriz es grande, la sintaxis puede volverse engorrosa, complicada y muy larga. Afortunadamente hay otra forma de hacer lo mismo: emplear el constructor de matrices. La sintaxis del constructor de matrices es la siguiente:
matriz = [ listaElementos ]
donde listaElementos es una lista separada por comas de los elementos que debe tener la matriz. En el caso de matrices dinmicas, la cantidad de elementos de la lista no tiene lmite prctico y puede variar; en cambio si la matriz es una matriz esttica, la cantidad de elementos debe coincidir exactamente con la declaracin de la matriz.
Var Matriz[4]:Entero Matriz = [7, 87, 135, 28]
Este cdigo produce exactamente el mismo resultado que el cdigo anterior, pero es mucho ms simple y fcil de leer. La lista de elementos del constructor de matrices no necesariamente debe estar compuesta de constantes: puede ser cualquier expresin, incluso llamadas a procedimientos. Si el tipo de la matriz es una estructura, en la lista de elementos hay que emplear el constructor de estructuras (ver Temas avanzados sobre las estructuras).
Page 68
Matrices
Volver
Page 69
No pueden ser redimensionadas, es decir su tamao no puede variar. No pueden pasarse como parmetro a un procedimiento. No son compatibles con las matrices dinmicas. Para poder asignar una matriz esttica a otra, ambas deben ser del mismo tamao. Un procedimiento no puede devolver una matriz esttica.
Volver
Page 70
Tipos de procedimientos
En Pauscal existen dos tipos de procedimientos: los procedimientos que ejecutan acciones, y los procedimientos que, adems de ejecutar acciones, devuelven un valor al cdigo de llamada. Estos ltimos tambin se conocen con el nombre de funciones.
Los procedimientos permiten desglosar los programas en unidades lgicas independientes. Es ms fcil depurar unidades individuales que todo un programa sin procedimientos. Los procedimientos desarrollados para un programa pueden utilizarse en otros programas, generalmente sin tener que realizar grandes modificaciones.
Declaracin de procedimientos Parmetros de procedimientos Procedimientos recursivos Prototipos y variables de procedimientos Fundamentos de la programacin en Pauscal
Volver
Page 71
Declaracin de procedimientos
Un procedimiento consiste en una serie de instrucciones delimitadas por las instrucciones Proc y FinProc. Cada vez que se llama a un procedimiento, se ejecutan las instrucciones de ste, desde la primera instruccin ejecutable tras la instruccin Proc hasta la primera instruccin FinProc, Devolver o Salir que se encuentre. Un procedimiento ejecuta acciones, y opcionalmente puede devolver un valor. Puede tomar parmetros, como constantes, variables o expresiones, que le pasa el cdigo de llamada. La sintaxis para declarar un procedimiento es la siguiente:
Proc nombre[(listaparmetros)][:tiporetorno][[]] 'Instrucciones FinProc
Declaracin de parmetros
Los parmetros de un procedimiento se declaran igual que las variables, especificando el nombre y el tipo de datos del parmetro. Tambin puede especificarse el mecanismo que se va a utilizar para pasar el parmetro (ver Mecanismos para pasar parmetros), as como si se trata de un parmetro opcional. La sintaxis de los parmetros en una lista de parmetros es la siguiente:
[Opcional] [Referencia] nombre : tipo
Si el parmetro es opcional, la declaracin de ste puede contener tambin un valor predeterminado, como se muestra a continuacin:
Opcional [Referencia] nombre : tipo [ = valorpredeterminado ]
Valores devueltos
En caso de que un procedimiento devuelva un valor, ste se denomina valor devuelto. El procedimiento puede devolver dicho valor de dos maneras:
El procedimiento asigna un valor a la variable Resultado en una o ms instrucciones del procedimiento. No se devuelve el control al programa que realiza la llamada hasta que se ejecuta una instruccin FinProc o Salir, como en el siguiente ejemplo:
Proc nombre[(listaparmetros)] : tiporetorno ' ... Resultado = expresin 'El control permanece en el procedimiento ' ... FinProc
El procedimiento utiliza la instruccin Devolver para especificar el valor devuelto, e inmediatamente devuelve el control al cdigo de llamada, como en el siguiente ejemplo:
Proc nombre[(listaparmetros)] : tiporetorno ' ... Devolver expresin 'El control se devuelve inmediatamente ' ... FinProc
Page 72
La ventaja de asignar el valor devuelto a la variable Resultado es que el control permanece en el procedimiento hasta que el programa encuentra una instruccin FinProc o Salir, lo que permite asignar un valor previo y, si es necesario, se puede ajustar despus. Nota: la instruccin Devolver slo funciona cuando el procedimiento devuelve un tipo de datos elemental. Un procedimiento tambien puede devolver una matriz. Para ello se deben agregar corchetes vacos ("[] ") en la declaracin del procedimiento. En el siguiente ejemplo, el procedimiento DevolverMatriz devuelve una matriz de enteros, y requiere dos parmetros: el primero indica el tamao de la matriz, y el segundo el valor de cada elemento de esa matriz.
Proc DevolverMatriz(N,V:Entero):Entero[] 'devuelve una matriz Var i:Entero Redim Resultado, N Contar i = 0 a Lmite(Resultado) Resultado[i] = V Seguir FinProc Var Nmeros[]:Entero Nmeros = DevolverMatriz(4, 1) 'devuelve una matriz de 4 elementos
Sintaxis de llamada
Para llamar a un procedimiento, hay que incluir el nombre y los parmetros de ste en la parte derecha de una asignacin o, en el caso de que devuelva un valor, en una expresin. Esto ltimo se ilustra en los siguientes ejemplos de llamada:
valor = nombreprocedimiento[(parmetros)] Si ((nombreprocedimiento[(parmetros)] / 3) <= expresin) ...
El siguiente procedimiento calcula la hipotenusa de un tringulo rectngulo a partir de los valores de los catetos:
Proc Hipotenusa (Lado1, Lado2 : Real) : Real Devolver RaizCuad((Lado1 ^ 2) + (Lado2 ^ 2)) FinProc
Pauscal incluye varios procedimientos. Entre los ms usados se encuentran Mensaje, Val, etc. Puede llamar a estos procedimientos de la misma manera que llama a los procedimientos que ha creado usted mismo. Cuando se llama a un procedimiento que devuelve un valor, no es necesario utilizar ese valor, en cuyo caso se ejecutan todas las acciones del procedimiento, pero el valor devuelto se omite. Las llamadas a Mensaje suelen hacerse de esta manera.
Page 73
Volver
Page 74
Parmetros de procedimientos
En la mayora de los casos, un procedimiento necesita algunos datos sobre las circunstancias en las que se le ha llamado. Un procedimiento que ejecuta tareas repetidas o compartidas utiliza datos distintos en cada llamada. Estos datos se componen de variables, constantes y expresiones que se pasan al procedimiento cuando se le llama. Un valor que se pasa a un procedimiento se denomina parmetro.
Page 75
Los parmetros no variables no se modifican nunca en el cdigo de llamada, por esta razn no pueden ser pasados por referencia. (Ver Mecanismo para pasar parmetros).
Volver
Page 76
Parmetros opcionales
Un parmetro de un procedimiento puede ser opcional si as se especifica, es decir, que no es necesario suministrarlo al llamar al procedimiento. Los parmetros opcionales se indican mediante la palabra clave Opcional en la definicin del procedimiento. Se aplican las siguientes reglas:
Los parmetros opcionales slo pueden ser de un tipo de datos elemental. El valor predeterminado de un parmetro opcional debe ser una expresin constante. Todos los parmetros que vayan a continuacin de un parmetro opcional en la definicin del procedimiento tambin deben ser opcionales.
Parmetros de procedimientos
Volver
Page 77
Parmetros de procedimientos
Volver
Page 78
Procedimientos recursivos
Un procedimiento recursivo es aqul que se llama a s mismo. Por ejemplo, el siguiente procedimiento utiliza la recursividad para calcular el factorial de su parmetro original:
Proc Factorial(N:Entero):Entero Si N <= 1 ' Se alcanz el final de las llamadas recursivas Devolver 1 SiNo ' N > 1, llamar a Factorial de nuevo Devolver Factorial(N - 1) * N FinSi FinProc
Los programas tienen una cantidad de espacio limitado para las variables. Cada vez que un procedimiento se llama a s mismo, se utiliza ms espacio. Si este proceso contina indefinidamente, se acaba produciendo un error de desbordamiento de la pila. La causa puede ser menos evidente si dos procedimientos se llaman entre s indefinidamente, o si nunca se cumple una condicin que limita la recursividad. Debe asegurarse de que los procedimientos recursivos no se llamen a s mismos indefinidamente, o tantas veces que puedan agotar la memoria. La recursividad normalmente puede sustituirse por bucles.
Volver
Page 79
En el ejemplo anterior se puede apreciar el funcionamiento de una variable de procedimiento. La variable vLlamada es de tipo pMostrar, que es el prototipo del procedimiento Mostrar. Una vez que la variable apunta a un procedimiento (en este caso, a Mostrar), se la utiliza como si fuera un procedimiento. El operador @ se utiliza para acceder a la direccin del procedimiento, que es asignada a la variable de procedimiento. Nota: Pauscal no verifica que el procedimiento concuerda con el prototipo. Si bien esto puede ocasionar errores y un mal funcionamiento del programa, tambin es una caracterstica muy poderosa si es usado correctamente.
Volver
Page 80
Estructuras de desicin
Pauscal permite probar condiciones y realizar diferentes operaciones en funcin de los resultados de la prueba. Puede comprobar si una condicin es verdadera o falsa, los distintos valores de una expresin o las diferentes excepciones que se generan al ejecutar una serie de instrucciones. Las instrucciones de decisin que admite Pauscal incluyen:
Si Seleccionar AdmErr
Estructuras de programacin
En esta categora se ubican las estructuras de programacin que no son de bucles ni de desicin.
Eval Bloque
Volver
Page 81
Bucle "Mientras"
Se puede utilizar la instruccin Mientras para ejecutar un bloque de instrucciones, un nmero de veces indefinido, dependiendo del valor de tipo Booleano de una condicin. Las instrucciones se repiten mientras la condicin sea Verdadero. Generalmente, la condicin es el resultado de comparar dos valores, pero tambin puede ser cualquier expresin que da como resultado un valor de tipo Booleano ( Verdadero o Falso). Esto incluye los valores de otros tipos de datos, como los numricos, que han sido convertidos a valores de tipo Booleano. La instruccin Mientras comprueba siempre la condicin antes de iniciar el bucle. La ejecucin en bucle contina mientras el valor de la condicin permanezca en Verdadero. En el ejemplo siguiente, el procedimiento TestearMientras comprueba la condicin antes de entrar en el bucle. Si Num se hubiera inicializado en 6 y no en 10, las instrucciones del bucle nunca se ejecutaran.
Proc TestearMientras() Var Contador, Num : Entero Num = 10 Mientras Num > 6 Num = Num - 1 Contador = Contador + 1 FinMientras ' Contador vale 4 en este punto FinProc
Puede transferirse el control fuera de una instruccin Mientras mediante la instruccin Salir Mientras. Un uso de esta instruccin consiste en comprobar una condicin que pudiera ocasionar un bucle sin fin; es decir, un bucle que pudiera ejecutarse un nmero extremadamente elevado de veces e incluso infinitamente. Si la condicin es Verdadero, utilice Salir Mientras para salir. Si la condicin es Falso, el bucle contina ejecutndose. En el siguiente ejemplo se asigna a Number un valor que podra ocasionar que el bucle se ejecutara ms de 231 veces. La instruccin Si realiza esta comprobacin y sale si existe el valor para evitar un bucle sin fin.
Proc EjemploSalirMientras() Var Contador, Num : Entero Num = 8 Mientras Num <> 10 Si Num < 0 Salir Mientras FinSi Num = Num - 1 Contador = Contador + 1 FinMientras ' Contador vale 9 en este punto FinProc
Volver
Page 82
Bucle "Repetir"
Puede utilizar la instruccin Repetir para ejecutar un bloque de instrucciones un nmero de veces indefinido dependiendo del valor de tipo Booleano de una condicin. Las instrucciones se repiten hasta que el valor sea Verdadero. Generalmente, la condicin es el resultado de comparar dos valores, pero tambin puede ser cualquier expresin que da como resultado un valor de tipo Booleano (Verdadero o Falso). Esto incluye los valores de otros tipos de datos, como los numricos, que han sido convertidos a valores de tipo Booleano. La instruccin Repetir tambin puede funcionar de forma incondicional, es decir que sus instrucciones se ejecuten un nmero de veces indefinido sin depender de una condicin.
Page 83
Volver
Page 84
Bucle "Contar"
Los bucles Repetir y Mientras funcionan bien cuando no se sabe de antemano cuntas veces se necesitan ejecutar las instrucciones en el bucle. No obstante, si tiene previsto ejecutar el bucle un nmero especfico de veces, un bucle Contar es una opcin mejor. A diferencia de otros bucles, un bucle Contar utiliza una variable denominada contador cuyo valor aumenta o disminuye cada vez que se repite el bucle. La sintaxis es la siguiente:
Contar contador = inicio A final [ Dec ] ' Instrucciones a ejecutar para cada valor de contador. Seguir
La variable contador debe ser un tipo de datos numrico entero que admita los operadores mayor que ( >), menor que (<) y suma (+); generalmente es de tipo Entero. Los valores de iteracin inicio y final son expresiones que deben evaluarse como tipos de datos enteros. Normalmente tambin son Entero. La palabra clave Dec opcional permite controlar la direccin de la cuenta; si se omite, la cuenta es positiva, de lo contrario la cuenta es negativa. Al iniciarse la ejecucin del bucle Contar, Pauscal evala inicio y final. Despus asigna inicio a contador. Antes de ejecutar el bloque de instrucciones, compara contador con final. Si contador ya ha superado el valor final, el bucle Contar finaliza y el control pasa a la instruccin que sigue a Seguir. En caso contrario, se ejecuta el bloque de instrucciones. Cada vez que Pauscal encuentra la instruccin Seguir, incrementa (si se omite Dec) o decrementa (si Dec est presente) en uno el contador, y vuelve a la instruccin Contar. Vuelve a comparar el contador con final, y una vez ms ejecuta el bloque o termina el bucle dependiendo del resultado. Este proceso contina hasta que el contador supera final o se ejecuta una instruccin Salir Contar. El procedimiento siguiente preestablece todos los elementos de una matriz en 128. La instruccin Contar especifica la variable de contador i y sus valores de inicio y fin. La instruccin Seguir incrementa el contador en 1, porque se omite Dec.
Proc Inicializar(Referencia M[]:Entero) Var i: Entero Contar i = 0 a Lmite(M) M[i] = 128 Seguir FinProc
Los valores de iteracin inicio y final slo se evalan una vez, antes de iniciarse el bucle. Si el bloque de instrucciones cambia final, estos cambios no afectan a la iteracin del bucle. En el ejemplo anterior, Lmite (que devuelve el ndice del ltimo elemento de una matriz) slo se invoca cuando la instruccin Contar se ejecuta por primera vez. Si el bloque de instrucciones hubiera cambiado posteriormente la longitud de la matriz M, el bucle Contar seguira utilizando la longitud original como valor final, puesto que no vuelve a llamar a Lmite.
Page 85
finalizacin.
Volver
Page 86
Bloque "Si"
Se pueden utilizar instrucciones Si para ejecutar una instruccin especfica o un bloque de instrucciones dependiendo del valor de tipo Booleano de una condicin. Generalmente, la condicin es el resultado de comparar dos valores, pero tambin puede ser cualquier expresin que da como resultado un valor de tipo Booleano (Verdadero o Falso). Esto incluye los valores de otros tipos de datos, como los numricos, que han sido convertidos a valores de tipo Booleano
Para ejecutar ms de una lnea de cdigo cuando la condicin es Verdadero se utiliza la sintaxis de varias lneas, que incluye la instruccin FinSi. Si no existe cdigo que ejecutar cuando la condicin es Falso, se omite la instruccin SiNo, como se muestra en el ejemplo siguiente:
Proc Comprobar Var Valor:Entero Si Valor < 500 Mensaje("Valor invlido") Valor = 500 FinSi FinProc
Las instrucciones Si se pueden anidar a tantos niveles como sea necesario. No obstante, es posible que en favor de la legibilidad, desee utilizar instrucciones Seleccionar en lugar de varios niveles de instrucciones Si anidadas.
Page 87
Volver
Page 88
Bloque "Seleccionar"
Cuando compara una misma expresin con varios valores diferentes, puede utilizar las instrucciones Seleccionar como alternativa a las instrucciones Si. A diferencia de las instrucciones Si, que pueden evaluar una expresin diferente en cada instruccin, la instruccin Seleccionar evala una nica expresin una sola vez y la utiliza para cada comparacin. Pauscal compara el valor de la expresin con los valores de las instrucciones Caso en el orden en que stos aparecen en el bloque Seleccionar. Si encuentra una coincidencia o una instruccin Caso Otro, ejecuta el bloque de instrucciones correspondiente. En cualquier caso, despus ejecuta el cdigo que sigue a la instruccin FinSeleccionar. Puede utilizarse cualquier nmero de instrucciones Caso e incluirse u omitirse una instruccin Caso Otro . En el ejemplo siguiente se usa Seleccionar para evaluar el nivel de rendimiento que se pasa al procedimiento. Observe que cada instruccin Caso puede contener ms de un valor. Cuando una instruccin Caso contiene ms de un valor, el bloque Caso se ejecuta si cualquiera de los valores coincide con el valor de la expresin de instruccin Seleccionar.
Proc Bono(Performance:Entero, Salario:Real):Real Seleccionar Performance Caso 1 ' Performance es 1. Devolver Salario * 0.1 Caso 2, 3 ' Performance es 2 o 3. Devolver Salario * 0.09 Caso 4, 5, 6, 7 ' Performance es 5, 6, o 7. Devolver Salario * 0.07 Caso Otro ' Performance es otro valor. Devolver 0 inSeleccionar FinProc
Cuando Pauscal encuentra una instruccin Caso cuyo valor coincide con la expresin de la instruccin Seleccionar, deja de evaluar las expresiones en ese instante. Si bien esto en general no afecta en nada, hay casos en los que hay que tener cuidado. Por ejemplo, en el siguiente caso el procedimiento Ret nunca se llama:
Proc Ret:Entero Resultado = 3 FinProc Seleccionar 4 Caso 5 ' Instrucciones Caso 4, Ret(), 2 ' Pauscal encuentra el valor coincidente ' antes de llamar a Ret() ' Instrucciones Caso 1 ' Instrucciones FinSeleccionar
Page 89
Bloque "Si"
Volver
Page 90
Bloque "AdmErr"
Puede utilizar la instruccin AdmErr para el control estructurado de excepciones. As puede ejecutarse un bloque concreto de instrucciones si se produce una excepcin especificada mientras se ejecuta el cdigo. Cuando esto ocurre, se dice que el cdigo provoca la excepcin, que se detecta con la instruccin Controlar correspondiente. La ejecucin entra en el bloque AdmErr con el bloque de instrucciones que sigue a la instruccin AdmErr. Si Pauscal finaliza este bloque sin que se genere una excepcin, busca la instruccin opcional Finalmente al final del bloque. Si ha proporcionado la instruccin Finalmente, Pauscal ejecuta el bloque de instrucciones que est a continuacin de dicha instruccin. En cualquier caso, a continuacin el control se transfiere a la instruccin que sigue a la instruccin FinAdmErr. Si se produce una excepcin, Pauscal busca la instruccin opcional Controlar. Si la encuentra, se ejecutan las instrucciones que ha proporcionado la instruccin Controlar. Cuando termina de ejecutar el bloque Controlar, ejecuta el bloque Finalmente, en caso de estar presente. Despus, la ejecucin contina en la instruccin que sigue a FinAdmErr. Si se incluye la instruccin opcional Finalmente, el bloque de instrucciones correspondiente es siempre el ltimo cdigo que se ejecuta inmediatamente antes de que el control abandone AdmErr, excepto cuando se sale del bloque debido a una instruccin Salir AdmErr. Las instrucciones Controlar y Finalmente puede opcionalmente especificar una variable de tipo Entero . En caso de ocurrir una excepcin, esta variable recibe el valor numrico de la excepcin. Si bien las instrucciones Controlar y Finalmente son opcionales, debe utilizarse al menos una de ellas. En el ejemplo siguiente, se utiliza el bloque AdmErr para verificar si el usuario ingres un valor numrico vlido:
Var Valor:Real Var CodigoDeExcepcion:Entero Crear Dos Dos.EscribirLn("Ingrese un nmero entre 0 y 100:") AdmErr Valor = Dos.LeerReal() Si (Valor < 0) o (Valor > 100) Dos.EscribirLn("Valor fuera de rango") FinSi Controlar CodigoDeExcepcion Si (CodigoDeExcepcion=errTipoIncompatible) Dos.EscribirLn("Valor invlido") SiNo Dos.EscribirLn("Error") FinSi Finalmente Dos.Esperar Dos.Finalizar FinAdmErr
El bloque Controlar se ejecutar en caso de que ocurra una excepcin. En el ejemplo, se controla la excepcin errTipoIncompatible, que es generada cuando el usuario ingresa un valor no numrico. Con independencia de lo que suceda, el bloque Finalmente es siempre el cdigo que se ejecuta en
Page 91
Volver
Page 92
Estructura "Eval"
En Pauscal generalmente se debe especificar un objeto en cada instruccin que llame a uno de sus mtodos o que tenga acceso a una de sus propiedades. Sin embargo, si tiene una serie de instrucciones que operan en un mismo objeto, puede utilizar una instruccin Eval...FinEval para especificar el objeto solo una sola vez para todas las instrucciones. De este modo puede acelerar la ejecucin de los procedimientos y evitar la escritura repetitiva. En el siguiente ejemplo se accede a varios miembros de un objeto sin calificarlo completamente.
Eval Obj.Items[4].Fuente .Tamao = 14 ' igual a Obj.Items[4].Fuente.Tamao = 14 .Nombre = "Times New Roman" ' igual a Obj.Items[4].Nombre = "Times New Roman" .Subrayado = Verd ' igual a Obj.Items[4].Subrayado = Verd FinEval
Estructuras de control anidadas Introduccin a las clases y los objetos Instruccin "Salir"
Volver
Page 93
Estructura "Bloque"
La instruccin Bloque permite definir una estructura de programacin Bloque...FinBloque. La nica funcin de esta estructura es la de ser un punto de referencia para la instruccin Salir Bloque. Se utiliza para salir de varias estructuras de desicin y/o de bucles anidadas.
Contar i = 1 a 10 Bloque A = i + A Repetir V = "" Mientras V = "" K = 9 + i * K B = i * A V = HacerLlamada(K - V, B) Si K = 0 Salir Bloque ' Permite que el bucle Contar siga haciendo ' las iteraciones. Sera complicado salir de ' los bloques Repetir y Mientras manualmente ' sin emplear la estructura de programacin ' Bloque. FinSi FinMientras HastaQue (K + i) = (B * A) K = B + A * K A = CalcularValor(V, K + i) FinBloque ' Despus de Salir Bloque la ejecucin contina aqu Seguir
Volver
Page 94
Instruccin "Salir"
La instruccin Salir permite salir directamente de cualquier estructura de decisin, bucle o procedimiento. Transfiere inmediatamente la ejecucin a la instruccin que sigue a la ltima instruccin de control. La sintaxis de la instruccin Salir especifica el tipo de instruccin de control desde la que se transfiere la ejecucin. Son posibles las siguientes versiones de la instruccin Salir:
Salir Contar Salir Mientras Salir Repetir Salir Eval Salir Bloque Salir Seleccionar Salir AdmErr Salir
Tambin puede salir directamente de un procedimiento; para ello especifique Salir solamente:
Las instrucciones Salir pueden aparecer todas las veces que sea necesario, en cualquier punto del cuerpo del procedimiento. Incluso pueden aparecer dentro de una instruccin de control como Si. Estas instrucciones son tiles cuando un procedimiento ha completado su cometido y puede volver inmediatamente.
Page 95
Volver
Page 96
Observe que el primer Seguir cierra el bucle Contar interno y el ltimo Seguir cierra el bucle Contar externo. Del mismo modo, en las instrucciones Si anidadas, las instrucciones FinSi se aplican automticamente a la instruccin Si anterior ms prxima. Los bucles Mientras anidados funcionan de forma similar; la instruccin FinMientras ms interna est emparejada con la instruccin Mientras ms interna.
Volver
Page 97
Declaracin de estructuras Variables de estructura Temas avanzados de estructuras Uniones Fundamentos de la programacin en Pauscal
Volver
Page 98
Declaracin de estructuras
Una declaracin de estructuras se realiza mediante la instruccin Estruc. A continuacin debe declararse por lo menos un miembro. Los miembros pueden ser de cualquier tipo de datos. Si desea mantener un nombre de empleado, su extensin telefnica y su salario juntos en una nica variable, puede declarar una estructura para esta informacin de la siguiente manera:
Estruc Empleado, Nombre:Cadena, ExtTel:Entero, Salario:Real
Para facilitar la lectura de una estructura, se recomienda separar la estructura de tal forma que cada miembro quede en una lnea diferente. Para ello se utiliza el carcter de subrayado (_), que indica que la lnea de cdigo contina en la siguiente lnea. (Ver Introduccin a las instrucciones).
Estruc Empleado, _ Nombre:Cadena, _ ExtTel:Entero, _ Salario:Real
Volver
Page 99
Variables de estructura
Una vez creada una estructura, se pueden declarar variables de procedimiento y de mdulo como del mismo tipo. Por ejemplo, puede crear una estructura que registre informacin acerca de un sistema de equipo, como en el cdigo siguiente:
Estruc InfoDeSistema, _ CPU:Cadena, _ SistemaOperativo:Cadena, _ Memoria:Entero
Tambin puede asignar una variable a otra si ambas son del mismo tipo de estructura. Si lo hace, se copiarn todos los elementos de una estructura en los elementos correspondientes de la otra, como en el ejemplo siguiente:
TuSistema = MiSistema
Si un elemento de una estructura es de tipo referencia, como un objeto o un puntero, se copia el puntero a los datos. Si InfoDeSistema hubiera incluido una variable de objeto, en el ejemplo anterior se habra copiado el puntero de MiSistema a TuSistema, y los cambios realizado en los datos del objeto a travs de una estructura habran surtido efecto al tener acceso a ellos a travs de la otra estructura.
Volver
Page 100
Estructuras y matrices
Una estructura puede contener una matriz como uno de sus elementos, como se muestra en este ejemplo:
Estruc InfoDeSistema, _ CPU:Cadena, _ SistemaOperativo:Cadena, _ Memoria:Entero, _ Discos[]:Cadena
Se obtiene acceso a los valores de una matriz de una estructura del mismo modo que se obtiene acceso a una propiedad de un objeto, como se muestra en este ejemplo:
Var MiSistema:InfoDeSistema Redim MiSistema.Discos, 3 MiSistema.Discos[0] = "1.44 MB"
Tambin se puede declarar una matriz de estructuras, como se muestra en este ejemplo:
Var TodosLosSistemas[100]:InfoDeSistema
Las mismas reglas se siguen para obtener acceso a los componentes de esta arquitectura de datos, como se muestra en este ejemplo:
TodosLosSistemas[5].CPU = "486" TodosLosSistemas[5].Discos[2] = "100M SCSI"
Estructuras y objetos
Una estructura puede contener un objeto como uno de sus elementos, como se muestra en el siguiente ejemplo:
Estruc Info, _ Nombre:Cadena, _ Formulario:pscForm
Estructuras y procedimientos
Puede pasar una estructura como parmetro de un procedimiento, como se muestra en este ejemplo:
Proc LlenarDatos(Referencia Sistema:InfoDeSistema) Sistema.CPU = txtCPU.Texto Sistema.Memoria = lstMemoria.Items.Item(lstMemoria.ItemSeleccionado) Sistema.SistemaOperativo = "Windows XP" FinProc
El ejemplo anterior pasa la estructura por referencia, lo cual permite al procedimiento modificar sus
Page 101
elementos de tal forma que los cambios se hacen efectivos en el cdigo de llamada. Si desea proteger una estructura frente a una modificacin de este tipo, psela por valor. Tambin puede obtener una estructura como resultado de un procedimiento, como se muestra en este ejemplo:
Var TodosLosSistemas[100]:InfoDeSistema Proc BuscarCPU(CPU:Cadena):InfoDeSistema Var i:Entero Contar i = 0 a 99 Si (TodosLosSistemas[i].CPU=CPU) Resultado = TodosLosSistemas[i] Salir FinSi Seguir ' Error. No se encontr el CPU buscado FinProc
Constructor de estructuras
Hay una forma de asignacin que solamente es vlido para las estructuras, llamado constructor de estructuras. El constructor de estructuras permite asignar de una sola vez todos los miembros de una estructura. La sintaxis del constructor de estructuras es la siguiente:
variableEstructura = { listaElementos }
donde listaElementos es una lista separada por comas de los valores de los miembros de la estructura. El orden y la cantidad de los elementos debe coincidir exactamente con la declaracin de la estructura, y los tipos de datos deben ser compatibles.
Estruc InfoDeSistema, _ CPU:Cadena, _ SistemaOperativo:Cadena, _ Memoria:Entero Var MiSistema:InfoDeSistema MiSistema = {"Pentium IV", "Windows XP", 512}
Page 102
La lista de elementos del constructor de estructuras no necesariamente debe estar compuesta de constantes: puede ser cualquier expresin, incluso llamadas a procedimientos. Si la estructura tiene matrices, en la lista de elementos hay que emplear el constructor de matrices (ver Usando las matrices).
Volver
Page 103
Uniones
Una unin es muy similar a una estructura. La diferencia radica en que los miembros de una estructura tienen un espacio asignado individualmente en la memoria; en cambio en una unin todos los miembros comparten el mismo espacio de memoria. Las uniones se declaran de forma anloga a las estructuras, pero utilizando la instruccin Unin :
Unin nombre, miembro1:tipo[, miembro2:tipo]...
En el siguiente ejemplo, los miembros a y b de la estructura son elementos separados: cuando en a se almacena un valor, el valor de b no cambia.
Estruc sPrueba, _ a : Entero, _ b : Entero Var P:sPrueba P.b = 6 P.a = 8 ' En este punto P.a vale 8 y P.b vale 6
En cambio, en el siguiente ejemplo, los miembros a y b comparten el mismo espacio de memoria, lo que significa que si a vara, b tambin vara.
Unin uPrueba, _ a : Entero, _ b : Entero Var P:uPrueba P.b = 6 P.a = 8 ' En este punto P.a vale 8 y P.b vale 8
Volver
Page 104
Clases y objetos
Los trminos "clase" y "objeto" se utilizan a veces indistintamente, pero en realidad, las clases describen la estructura de los objetos, mientras que los objetos son instancias de clases que se pueden utilizar. Cada instancia es una copia exacta pero diferente de su clase. Puesto que un objeto es una "instancia" de una clase, la accin de crear un objeto se denomina creacin de instancias. Con la analoga de plano, una clase es un plano, y un objeto es un edificio basado en ese plano. Generalmente, el cambio de datos en un objeto no cambia los datos de otro objeto.
Encapsulacin
La encapsulacin es la capacidad de contener y controlar el acceso a un grupo de elementos asociados. Las clases proporcionan una de las formas ms comunes de encapsular elementos. En el ejemplo siguiente, la clase CuentaBancaria encapsula los mtodos, campos, y propiedades que describen una cuenta bancaria. Sin la encapsulacin, sera necesario declarar diferentes procedimientos y campos para almacenar y administrar la informacin de la cuenta bancaria, y sera difcil trabajar con ms de una cuenta bancaria a la vez. La encapsulacin permite utilizar datos y procedimientos de la clase CuentaBancaria como una unidad. Puede trabajar con varias cuentas bancarias al mismo tiempo sin confusin, puesto que cada cuenta se representa mediante una instancia nica de la clase. La encapsulacin tambin permite controlar la forma de utilizar los datos y los procedimientos. Se pueden utilizar modificadores de acceso, como Privado o Pblico, para evitar que procedimientos externos ejecuten mtodos de clase o lean y modifiquen datos privados. Los detalles internos de una clase deben declararse como Privado para evitar que sean utilizados fuera de la misma; esta tcnica se denomina ocultacin de datos. En la clase CuentaBancaria, la informacin del cliente, por ejemplo el saldo de la cuenta, se protege de esta forma. Una de las reglas bsicas de la encapsulacin es que los datos de clase slo se deben modificar o recuperar mediante mtodos o propiedades. Al ocultar los detalles de implementacin de las clases se evita que sean utilizados de forma no deseada y hace posible la modificacin posterior de tales elementos sin problemas de compatibilidad. Por ejemplo, en las versiones posteriores de la clase CuentaBancaria que se muestra a continuacin se podra cambiar el tipo de datos de la variable BalanceDeLaCuenta sin peligro de interrumpir las aplicaciones que se basan en que esa variable tenga un tipo de datos especfico.
Herencia
Page 105
Las clases de Pauscal pueden heredar y extender las caractersticas de otras clases. Las clases que sirven de base para nuevas clases se denominan clases base. Las clases que se derivan de clases base se denominan clases derivadas. Las clases derivadas heredan todos los campos, propiedades y mtodos definidos en la clase base. Esto significa que puede desarrollar y depurar una clase una vez y reutilizarla despus como base de otras clases. En el siguiente ejemplo se define una clase base que representa una cuenta bancaria genrica y una clase especfica que hereda las propiedades de la clase base pero que se personaliza para describir una cuenta corriente:
Clase CuentaBancaria ClaseVar NmeroDeCuenta:Cadena ClaseVar BalanceDeLaCuenta:Real Proc Intereses() ' Cdigo que calcula el inters de la cuenta. FinProc Proc Balance():Real Devolver BalanceDeLaCuenta FinProc FinClase Clase CuentaCorriente(CuentaBancaria) Proc ProcesarCheque ' Cdigo que procesa un cheque de esta cuenta. FinProc FinClase
Duracin de los objetos Constructores y destructores Mtodos de una clase Campos de una clase Propiedades y procedimientos de propiedad Propiedades frente a mtodos Fundamentos de la programacin en Pauscal
Volver
Page 106
Tambin es posible utilizar la palabra clave Nuevo para crear una nueva instancia de una clase:
Var Obj:MiClase Obj = Nuevo miClase
Estos dos ejemplos anteriores son equivalentes. En caso de que el constructor de la clase requiera parmetros, stos debern pasarse al crear el objeto.
Var Obj:MiClase Obj = Nuevo miClase(Parmetro)
Constructores y destructores
El constructor de una clase es llamado por Pauscal cada vez que se crea una nueva instancia de la clase. En caso de que sea una clase derivada, Pauscal llama primero al constructor de la clase base y luego al de la clase derivada. Si la clase no especifica un constructor, Pauscal crea implcitamente un constructor interno. El destructor de una clase es llamado por Pauscal justo antes de liberar una instancia de la clase. El destructor puede contener cdigo que es necesario ejecutar inmediatamente antes de destruir un objeto, como cerrar archivos y guardar informacin de estado. Puesto que se produce una ligera disminucin del rendimiento al ejecuta el destructor, ste slo debe definirse cuando sea necesario liberar objetos explcitamente.
Liberacin de objetos
Page 107
Para liberar objetos Pauscal utiliza un sistema denominado recuento de referencias. Cuando una variable de objeto es liberada, Pauscal verifica si hay otras referencias al objeto en cuestin. Si no hay ms referencias, se llama al destructor de la clase e inmediatamente despus el objeto se quita de la memoria.
Volver
Page 108
Constructores y destructores
Los constructores y destructores son mtodos normales que controlan la creacin y destruccin de objetos. Se utiliza la instruccin Constructor para declarar al mtodo constructor de una clase:
Clase cPrueba Proc iInicio Mensaje("Objeto creado") FinProc Constructor:iInicio FinClase
De forma anloga, se utiliza la instruccin Destructor para declarar al mtodo destructor de una clase:
Clase cPrueba Proc iInicio Mensaje("Objeto creado") FinProc Proc iFinal Mensaje("Objeto destruido") FinProc Constructor:iInicio Destructor:iFinal FinClase
Una clase puede tener ms de un constructor y ms de un destructor. En caso de ser una clase derivada, se heredan el constructor y el destructor de la clase base. Si la clase derivada declara un nuevo constructor (o destructor), ste simplemente se agrega, no reemplaza al anterior. Cuando se crea o se destruye el objeto, Pauscal llama al constructor y destructor de la clase base y luego a los de la clase derivada. Si el constructor de la clase base requiere parmetros, el de la clase derivada debe aceptar los mismos parmetros. En caso contrario, el nuevo constructor esconde al constructor anterior, haciendo que Pauscal no lo llame. En el siguiente ejemplo, iConst1 y iConst2 son constructores de la clase. Cuando se cree una nueva instancia de la clase, Pauscal llamar a iConst1 y luego a iConst2.
Clase cPrueba Proc iConst1 Mensaje("Constructor 1") FinProc Proc iConst2 Mensaje("Constructor 2") FinProc Constructor:iConst1 Constructor:iConst2
Page 109
En el siguiente ejemplo, iConst1 y iConst2 son constructores de la clase, al igual que en el ejemplo anterior. Pero como la lista de parmetros de los constructores no coincide, iConst2 esconde a iConst1. Por esta razn, cuando se cree una nueva instancia de la clase, Pauscal no llamar a iConst1, slo a iConst2.
Clase cPrueba Proc iConst1 Mensaje("Constructor 1") FinProc Proc iConst2(Dato:Cadena) Mensaje("Constructor 2: " + Dato) FinProc Constructor:iConst1 Constructor:iConst2 ' Pauscal genera una advertencia que ' indica que el constructor iConst2 ' esconde a iConst1. FinClase
Introduccin a las clases y los objetos Mtodos de una clase Duracin de los objetos
Volver
Page 110
Introduccin a las clases y los objetos Campos de una clase Propiedades y procedimientos de propiedad
Volver
Page 111
Tambin es posible declarar los campos luego del nombre de la clase. Los campos declarados de esta forma son siempre privados y no se puede cambiar su accesibilidad. (Ver Accesibilidad) En el siguiente ejemplo, a y b son campos, pero esta vez son privados.
Clase cPrueba, a,b:Entero Proc Accin ' Cdigo que realiza la accin FinProc FinClase
Volver
Page 112
Page 113
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html Obj.NumProp = 36 ' Muestra el valor 7, ya que el valor 36 no fue almacenado. Mensaje("NumProp = " + EntCad(Obj.NumProp))
Aqu se crea una instancia de la clase y establece y recupera los valores de los campos y propiedades. A efectos de este ejemplo, se considera que slo los valores vlidos son nmeros menores de 10. Puesto que no hay forma de validar los valores asignados a los campos, se puede establecer el valor 36 en el campo. No obstante, la propiedad solamente realiza asignaciones para nmeros menores de 10, de modo que el intento de establecer 36 en el campo no se tiene en cuenta. Tambin es posible hacer que uno o ambos accesos a la propiedad (lectura y asignacin) se realicen a traves de campos en lugar de utilizar procedimientos de propiedad. Esto permite que, por ejemplo, se validen slo los datos de asignacin (por medio de un procedimiento de asignacin de propiedad) pero no los de lectura, o viceversa. Para ello slo especifique en la instruccin Lec o Esc el nombre del campo al que Pauscal deber acceder cuando se produzca la lectura o asignacin de la propiedad, respectivamente. La siguiente clase es similar a la del ejemplo anterior, con la diferencia de que no hay procedimiento de lectura de propiedad.
Clase cPrueba Pblico: ClaseVar NumCampo:Entero Privado: ClaseVar iNumProp:Entero Proc EscNumProp(Valor:Entero) Si Valor < 10 iNumProp = Valor FinSi FinProc Pblico: Prop NumProp:Entero Lec:iNumProp ' Al leer la propiedad, slo se accede al campo iNumProp Esc:EscNumProp ' Al asignar la propiedad, se llama a EscNumProp FinProp FinClase
Aunque las propiedades que utilizan campos en lugar de procedimientos para la lectura y/o escritura de propiedad son ms rpidos (ya que no se realiza ninguna llamada de cdigo), no se tiene mucho control debido a que son similares a los campos pblicos.
Page 114
Volver
Page 115
Sintaxis de propiedades frente a sintaxis de mtodos Una forma de decidir cmo implementar un miembro de una clase consiste en considerar cmo se desea utilizar. Aunque la sintaxis para recuperar informacin de una propiedad parametrizada es casi idntica a la utilizada con un mtodo, la sintaxis para modificar tal valor es algo diferente. Por ejemplo, si implementa el miembro de una clase como propiedad, las sintaxis siguiente describe cmo debera utilizarse:
Objeto.Propiedad(ndice) = Valor
Si implementa el miembro de la clase como mtodo, el valor que se modifica debe ser un parmetro. El fragmento de cdigo siguiente describe el uso de sintaxis equivalente:
Objeto.Propiedad(ndice, Valor)
Mensajes de error Otro factor a considerar a la hora de elegir cmo implementar un miembro de una clase es qu tipo de mensajes se generarn cuando la clase se utilice incorrectamente. Si alguien intenta accidentalmente asignar un valor a una propiedad de slo lectura, el mensaje de error devuelto es distinto del que se obtendra en respuesta a una llamada similar a un mtodo. Los miembros de una clase implementados correctamente devuelven mensajes de error que son ms fciles de interpretar.
Volver
Page 116
Para agregar una propiedad a una clase 1. Declare una variable local en la clase para almacenar el valor de la propiedad. Este paso es necesario puesto que las propiedades no asignan almacenamiento por s mismas. A fin de proteger sus valores contra la modificacin directa, las variables que se utilizan para almacenar valores de propiedad deben declararse como Privado 2. Defina los procedimientos de lectura y de asignacin de la propiedad dentro de la clase. Los procedimientos de lectura de propiedad se utilizan para devolver el valor de una propiedad. Si este procedimiento requiere parmetros, al acceder a la propiedad habr que pasar los parmetros requeridos.. Los procedimientos de asignacin de propiedad se utilizan para establecer el valor de una propiedad; tienen un parmetro ms al comienzo de la lista de parmetros, generalmente denominado Valor, del mismo tipo de datos que la propiedad. Cada vez que se cambia el valor de la propiedad, se pasa el valor de la propiedad en Valor al procedimiento de asignacin de propiedad, donde se puede validar y almacenar en una variable local. 3. Una vez declarados los procedimientos de lectura y de asignacin de propiedad, declare la propiedad mediante la instruccin Prop. 4. Mediante la instruccin Lec establezca el procedimiento de lectura de propiedad. 5. Mediante la instruccin Esc establezca el procedimiento de asignacin de propiedad. 6. Finalice la declaracin de la propiedad con una instruccin FinProp. En el siguiente ejemplo se declara una propiedad en una clase:
Clase cPrueba Privado: ClaseVar iNombre:Cadena ' variable que almacena la propiedad Proc LecNombre():Cadena ' procedimiento de lectura de propiedad Resultado = iNombre FinProc Proc EscNombre(Valor:Cadena) ' procedimiento de escritura de propiedad lNombre = Valor FinProc Pblico: Prop Nombre:Cadena ' declaramos la propiedad y su tipo de datos Lec:LecNombre ' procedimiento a llamar al leer la propiedad Esc:EscNombre ' procedimiento a llamar al asignar a la propiedad
Page 117
Cuando se crea una instancia de cPrueba y se establece el valor de la propiedad Nombre, se llama al procedimiento de asignacin de propiedad EscNombre y se pasa el valor en el parmetro Valor, que se almacena en una variable local denominada iNombre. Cuando se recupera el valor de esta propiedad, se llama al procedimiento de lectura de propiedad LecNombre y devuelve el valor almacenado en la variable local iNombre.
Introduccin a las clases y los objetos Campos de una clase Propiedades y procedimientos de propiedad Mtodos de una clase
Volver
Page 118
Instruccin AdmErr
En el siguiente fragmento de cdigo se muestra la estructura de una instruccin AdmErr:
AdmErr ' Comienza el control estructurado de errores. ' Aqu van las instrucciones con posibilidades ' de generar excepciones. [Controlar [variable] ' Este cdigo se ejecuta cuando el cdigo controlado ' produce una excepcin. variable recibe el valor ' numrico de la excepcin.] [Finalmente [variable] ' Este cdigo se ejecuta inmediatamente antes de salir ' del bloque AdmErr. variable recibe el valor numrico ' de la excepcin, o cero si no hubo una excepcin.] FinAdmErr ' Fin del control estructurado de errores.
Las instrucciones inmediatamente despus de la instruccin AdmErr contiene la seccin del cdigo que el controlador de errores va a supervisar. Si se produce un error durante la ejecucin de cualquier parte del cdigo de esta seccin, Pauscal transferir el control a la primera lnea de cdigo del bloque Controlar, si lo hubiera. El cdigo de la seccin Finalmente siempre se ejecuta en ltimo lugar, inmediatamente antes que el bloque de control de errores pierda su mbito, con independencia de que se ejecute el cdigo del bloque Controlar. Site el cdigo de limpieza (el cdigo que cierra los archivos y libera los objetos, por ejemplo) en la seccin Finalmente. Las instrucciones Controlar y Finalmente pueden indicar una variable de tipo Entero que recibe el valor numrico de la excepcin. Este valor se utiliza para conocer el tipo de excepcin que fue generado. Esta variable es cero si no ocurri una excepcin. El uso de esta variable es opcional. Si se omite, no es posible conocer la excepcin que fue generada, y en el caso de una instruccin Finalmente, tampoco es posible saber si hubo una excepcin o no. Aunque las instrucciones Controlar y Finalmente son opcionales, al menos una de ellas debe aparecen en un bloque AdmErr.
Page 119
Introduccin al control estructurado de excepciones Control estructurado de excepciones Tipos de errores Bloque "AdmErr"
Volver
Page 120
Tipos de errores
En Pauscal, los errores (tambin llamados excepciones) se dividen en tres categoras: errores sintcticos, errores en tiempo de ejecucin y errores lgicos.
Errores sintcticos
Los errores sintcticos (o en tiempo de diseo) son aquellos que aparecen mientras se escribe el cdigo. Se deben a la escritura incorrecta de una palabra o el uso incorrecto de un elemento del lenguaje. Los errores sintcticos son los errores ms frecuentes, y se detectan en el momento de la compilacin.
Errores lgicos
Los errores lgicos son aquellos que aparecen cuando la aplicacin est en funcionamiento. Normalmente se manifiestan en forma de resultados inesperados o no deseados en respuesta a las acciones del usuario. Por ejemplo, una clave mal escrita u otra influencia externa podra hacer que la aplicacin dejase de funcionar an siendo correctos los parmetros, o que simplemente no funcionase. Por lo general, los errores lgicos son los ms difciles de corregir, puesto que no siempre est claro dnde se originan.
Volver
Page 121
Volver
Page 122
Instrucciones de Pauscal
La siguiente tabla contiene una lista de las instrucciones del lenguaje Pauscal. AdmErr Bloque Borrar Caso Clase ClaseVar Const Constructor Contar Controlar Crear Destructor Destruir Devolver Esc Estruc Eval Fin FinAdmErr Finalmente FinBloque FinClase FinEval FinMientras FinProc FinProp FinSeleccionar FinSi GenerarError HastaQue Importar Interrumpir IrHacia Lec Mientras PorSiempre Proc Prop Prototipo PuertoEnviar Redim Repetir Salir Seguir Seleccionar Si SiNo Unin Var
Volver
Page 123
AdmErr (Instruccin)
Esta instruccin proporciona una manera de controlar los errores posibles que pueden ocurrir en un bloque de cdigo determinado mientras se ejecuta el cdigo. AdmErr [ instruccionesControladas ] [ Controlar [ cdigoErrorControlar ] ] [ instruccionesControlador ] ] [ Finalmente [ cdigoErrorFinalmente ] [ instruccionesFinalmente ] ] FinAdmErr instruccionesControladas Opcional. Instrucciones en las que puede ocurrir un error. Puede ser una instruccin compuesta. Controlar Opcional. Marca el comienzo del bloque Controlar, que administra el error. Este bloque es ejecutado slo cuando ocurre un error en instruccionesControladas. cdigoErrorControlar Opcional si se especifica Controlar. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Controlar. Finalmente Opcional. Marca el comienzo del bloque Finalmente. Siempre se ejecuta un bloque Finalmente cuando se termina de ejecutar instruccionesControladas o el bloque Controlar. cdigoErrorFinalmente Opcional si se especifica Finalmente. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Finalmente. instruccionesFinalmente Opcional. Instrucciones que se ejecutan despus de las dems operaciones de procesamiento de error. FinAdmErr Termina el bloque AdmErr...FinAdmErr.
Comentarios El bloque AdmErr contiene cdigo en el que puede producirse un error, mientras que el bloque Controlar contiene el cdigo para controlar cualquier error que pueda tener lugar. Debido a que el bloque Finalmente se ejecuta sin importar si ocurre un error o no, la variable cdigoErrorFinalmente recibe o el cdigo de error que se produjo o el valor 0 en caso de que no hubiera ocurrido un error. Nota Si una instruccin AdmErr no contiene un bloque Controlar, debe tener un bloque Finalmente. De lo contrario este ltimo es opcional. Nota El bloque Finalmente no se ejecutar si se sale del bloque AdmErr mediante una instruccin Salir. Para ms informacin, vea Instruccin "Salir".
Page 124
Volver
Page 125
Bloque (Instruccin)
Esta instruccin define un bloque de instrucciones. Se utiliza como una estructura de referencia para finalizar rpidamente la ejecucin del bloque de instrucciones. Bloque [ instrucciones ] [ Salir Bloque ] [ instrucciones ] FinBloque instrucciones Opcional. Instrucciones que componen el bloque de instrucciones.
Comentarios La estructura Bloque se utiliza para definir un bloque de instrucciones que se deben ejecutar como una unidad. Mediante la instruccin Salir Bloque es posible romper esta unidad y finalizar el bloque de instrucciones. En muchos casos esto sera ms difcil de realizar si no se utilizara la estructura Bloque.
Volver
Page 126
Borrar (Instruccin)
Se utiliza para liberar una variable de matriz y desasignar la memoria utilizada para sus elementos. Borrar matriz matriz Requerido. Variable de matriz a liberar.
Comentarios Si matriz es una matriz dinmica, luego de ser liberada no tendr elementos. Si matriz es una matriz esttica, los elementos son inicializados a sus valores predeterminados, es decir 0 en caso de ser un tipo de datos numrico, Falso si es Booleano, "" si es Cadena, o un objeto sin crear en caso de ser una clase. Si es una estructura, sus miembros se inicializan como se menciona anteriormente. Si matriz es una matriz dinmica, la instruccin Borrar produce el mismo resultado que si se redimensiona la matriz a cero elementos.
Volver
Page 127
Seleccionar (Instruccin)
Ejecuta uno de varios grupos de instrucciones, segn el valor de una expresin. Seleccionar expresin [ Caso listaExpresiones [ instrucciones ] ] [ Caso Otro [ otrasInstrucciones ] ] FinSeleccionar expresin Requerido. Expresin. Debe evaluarse en uno de los tipos de datos elementales. listaExpresiones Requerido en una instruccin Caso. Lista de clusulas de expresiones que representan valores que coinciden para expresin. Las clusulas de varias expresiones se separan mediante comas. Las expresiones en listaExpresiones pueden ser de cualquier tipo de datos compatible con el de expresin. instrucciones Opcional. Una o ms instrucciones despus de Caso que se ejecutan si expresin coincide con cualquier clusula en listaExpresiones. otrasInstrucciones Opcional. Una o ms instrucciones a continuacin de Caso Otro que se ejecutan si expresin no coincide con ninguna clusula de listaExpresiones. FinSeleccionar Termina un bloque Seleccionar.
Comentarios Si expresin coincide con cualquier clusula Caso listaExpresiones, se ejecutan las instrucciones que siguen a la instruccin Caso hasta la siguiente instruccin Caso o FinSeleccionar. El control pasa despus a la instruccin que sigue a FinSeleccionar. Si expresin coincide con una clusula de listaExpresiones en ms de una clusula Caso, slo se ejecutan las instrucciones que siguen a la primera coincidencia. La instruccin Caso Otro se utiliza para introducir las instrucciones otrasInstrucciones que se ejecutarn si no se encuentra ninguna coincidencia entre expresin y una clusula de listaExpresiones en cualquiera de las dems instrucciones Caso. Aunque no es necesario, es recomendable tener una instruccin Caso Otro en el bloque Seleccionar para controlar los valores de expresin imprevistos. Si ninguna clusula Caso listaExpresiones coincide con expresin y no existe ninguna instruccin Caso Otro, la ejecucin contina en la instruccin que sigue a FinSeleccionar. Las instrucciones Seleccionar pueden anidarse. Cada instruccin Seleccionar anidada debe tener una instruccin FinSeleccionar coincidente. Si no necesita ejecutar ms instrucciones de un bloque Caso o Caso Otro, puede salir del bloque mediante una instruccin Salir Seleccionar. Esto transfiere inmediatamente el control a la instruccin que sigue a FinSeleccionar.
Page 128
Volver
Page 129
Clase (Instruccin)
Declara el nombre de una clase, as como una definicin de las variables, propiedades y mtodos que la componen. Clase nombre [ ( base) ] [ , campos ] [ instrucciones ] [ Constructor: mtodoConstructor ] [ instrucciones ] [ Destructor: mtodoDestructor ] [ instrucciones ] FinClase nombre Requerido. Nombre de la clase. Sigue las convenciones de nomenclatura estndar de las variables. base Opcional. Nombre de la clase base de la cual se heredan los miembros. Si se omite, la clase no posee una clase base. campos Opcional. Lista de los campos de la clase. instrucciones Opcional. Instrucciones que componen las variables, propiedades y mtodos de la clase. mtodoConstructor Requerido si se especifica Constructor. Define el mtodo constructor de la clase. mtodoDestructor Requerido si se especifica Destructor. Define el mtodo destructor de la clase. FinClase Termina la declaracin de la clase.
Cada campo de campos tiene la siguiente sintaxis y partes: [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que el campo es un puntero. nombre Requerido. Nombre del campo. Debe ser un identificador vlido. [] Opcional. Indica que el campo es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos del campo.
Page 130
Comentarios La posibilidad de declarar los campos de una clase en la instruccin Clase slo se mantiene por compatibilidad con versiones anteriores. Se recomienda utilizar la instruccin ClaseVar para declarar los campos de una clase. Los campos declarados en la instruccin Clase son privados. Para ms informacin, vea Accesibilidad. La clusula Constructor define el mtodo que es llamado cuando se crea una nueva instancia de la clase, mientras que la clusula Destructor define el mtodo que es llamado cuando se destruye una instancia de la clase. Para ms informacin, vea Constructores y destructores. Una clase debe poseer al menos un miembro. De lo contrario el compilador genera un error.
Volver
Page 131
ClaseVar (Instruccin)
Es utilizada para declarar y asignar espacio de almacenamiento para campos (variables de clase). ClaseVar [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que el campo es un puntero. nombre Requerido. Nombre del campo. Debe ser un identificador vlido. [] Opcional. Indica que el campo es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos del campo.
Comentarios Un campo es una variable de una clase. Cada instancia de la clase posee una copia independiente del campo. La instruccin ClaseVar declara slamente campos. Para declarar variables globales y locales, utilice la instruccin Var. La instruccin ClaseVar slo es vlida a nivel de clase. No se puede declarar un campo como matriz y puntero a la vez. Es posible declarar varios campos con una sola instruccin ClaseVar, separando los campos con comas. En el siguiente ejemplo se declaran tres campos de tipo Entero:
ClaseVar A,B,C:Entero
Tambin es posible mezclar tipos de datos en una misma instruccin ClaseVar. En el siguiente ejemplo se declaran dos campos de tipo Entero y uno de tipo Cadena:
ClaseVar A,B:Entero, C:Cadena
Introduccin a las variables Introduccin a las clases y los objetos Matrices Var (Instruccin)
Volver
Page 132
Const (Instruccin)
Se utiliza para declarar constantes para utilizar en lugar de valores literales. Const nombre = valor nombre Requerido. Nombre de la constante. Debe ser un identificador vlido. valor Requerido. Expresin que se asigna a la constante cuando se crea.
Comentarios Puede utilizar una constante en cualquier lugar en que pueda utilizar una expresin.
Volver
Page 133
Clase (Instruccin)
Declara el nombre de una clase, as como una definicin de las variables, propiedades y mtodos que la componen. Clase nombre [ ( base) ] [ , campos ] [ instrucciones ] [ Constructor: mtodoConstructor ] [ instrucciones ] [ Destructor: mtodoDestructor ] [ instrucciones ] FinClase nombre Requerido. Nombre de la clase. Sigue las convenciones de nomenclatura estndar de las variables. base Opcional. Nombre de la clase base de la cual se heredan los miembros. Si se omite, la clase no posee una clase base. campos Opcional. Lista de los campos de la clase. instrucciones Opcional. Instrucciones que componen las variables, propiedades y mtodos de la clase. mtodoConstructor Requerido si se especifica Constructor. Define el mtodo constructor de la clase. mtodoDestructor Requerido si se especifica Destructor. Define el mtodo destructor de la clase. FinClase Termina la declaracin de la clase.
Cada campo de campos tiene la siguiente sintaxis y partes: [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que el campo es un puntero. nombre Requerido. Nombre del campo. Debe ser un identificador vlido. [] Opcional. Indica que el campo es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos del campo.
Page 134
Comentarios La posibilidad de declarar los campos de una clase en la instruccin Clase slo se mantiene por compatibilidad con versiones anteriores. Se recomienda utilizar la instruccin ClaseVar para declarar los campos de una clase. Los campos declarados en la instruccin Clase son privados. Para ms informacin, vea Accesibilidad. La clusula Constructor define el mtodo que es llamado cuando se crea una nueva instancia de la clase, mientras que la clusula Destructor define el mtodo que es llamado cuando se destruye una instancia de la clase. Para ms informacin, vea Constructores y destructores. Una clase debe poseer al menos un miembro. De lo contrario el compilador genera un error.
Volver
Page 135
Contar (Instruccin)
Repite un grupo de instrucciones un nmero de veces especificado. Contar contador = inicio A final [ Dec ] [ instrucciones ] [ Salir Contar ] [ instrucciones ] Seguir contador Requerido. Variable. El tipo de contador suele ser Entero o EnteroSig, pero puede ser cualquier tipo numrico entero elemental que admita los operadores mayor que (>), menor que (<) y suma (+). inicio Requerido. Expresin. El valor inicial de contador. La expresin inicio debe evaluarse como cualquier tipo de datos compatible con el tipo de contador. final Requerido. Expresin. El valor final de contador. La expresin final debe evaluarse como cualquier tipo de datos compatible con el tipo de contador. Dec Opcional. Si se omite, indica que la variable de contador se incrementa por cada iteracin. Si se especifica, indica que la variable se decrementa por cada iteracin. instrucciones Opcional. Una o ms instrucciones que se ejecutan un nmero especificado de veces.
Comentarios Las expresiones inicio y final slo se evalan una vez, cuando se encuentra por primera vez la instruccin Contar. No se volvern a evaluar, aunque cambien las partes que componen las instrucciones del bucle. La variable contador se compara con final cada vez que se entra en el bucle. Esto incluye la primera vez que se ejecuta la instruccin Contar. Por consiguiente, si el valor de inicio supera el valor de final al entrar en el bucle, ste no se ejecuta, y la ejecucin pasa inmediatamente a la instruccin que sigue a Seguir. Una vez que se han ejecutado las instrucciones del bucle, se incrementa o decrementa contador (dependiendo si se omite o no la palabra clave Dec). En este momento, la instruccin Contar compara de nuevo contador con final. Como resultado de esta comparacin, bien se ejecutan otra vez las instrucciones del bucle o se termina el bucle y la ejecucin contina con la instruccin que sigue a Seguir . Nota Cambiar el valor de contador mientras se est dentro de un bucle puede dificultar la lectura y la depuracin del cdigo. La instruccin Salir Contar transfiere el control inmediatamente a la instruccin que sigue a la instruccin Seguir. Se puede incluir cualquier nmero de instrucciones Salir Contar en cualquier lugar del bucle Contar. Salir Contar suele utilizarse despus de evaluar alguna condicin, por ejemplo con
Page 136
una instruccin Si. Se pueden anidar bucles Contar, colocando un bucle dentro de otro. Cada bucle debe tener una variable contador nica. La siguiente construccin es correcta:
Contar I = 1 A 10 Contar J = 1 A 10 Contar K = 1 A 10 ' Instrucciones Seguir Seguir Seguir
Es recomendable que el tipo de datos de contador sea EnteroSig u otro tipo de datos con signo. Esto permite que se eliminen errores provocados por valores negativos con tipos sin signo.
Volver
Page 137
AdmErr (Instruccin)
Esta instruccin proporciona una manera de controlar los errores posibles que pueden ocurrir en un bloque de cdigo determinado mientras se ejecuta el cdigo. AdmErr [ instruccionesControladas ] [ Controlar [ cdigoErrorControlar ] ] [ instruccionesControlador ] ] [ Finalmente [ cdigoErrorFinalmente ] [ instruccionesFinalmente ] ] FinAdmErr instruccionesControladas Opcional. Instrucciones en las que puede ocurrir un error. Puede ser una instruccin compuesta. Controlar Opcional. Marca el comienzo del bloque Controlar, que administra el error. Este bloque es ejecutado slo cuando ocurre un error en instruccionesControladas. cdigoErrorControlar Opcional si se especifica Controlar. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Controlar. Finalmente Opcional. Marca el comienzo del bloque Finalmente. Siempre se ejecuta un bloque Finalmente cuando se termina de ejecutar instruccionesControladas o el bloque Controlar. cdigoErrorFinalmente Opcional si se especifica Finalmente. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Finalmente. instruccionesFinalmente Opcional. Instrucciones que se ejecutan despus de las dems operaciones de procesamiento de error. FinAdmErr Termina el bloque AdmErr...FinAdmErr.
Comentarios El bloque AdmErr contiene cdigo en el que puede producirse un error, mientras que el bloque Controlar contiene el cdigo para controlar cualquier error que pueda tener lugar. Debido a que el bloque Finalmente se ejecuta sin importar si ocurre un error o no, la variable cdigoErrorFinalmente recibe o el cdigo de error que se produjo o el valor 0 en caso de que no hubiera ocurrido un error. Nota Si una instruccin AdmErr no contiene un bloque Controlar, debe tener un bloque Finalmente. De lo contrario este ltimo es opcional. Nota El bloque Finalmente no se ejecutar si se sale del bloque AdmErr mediante una instruccin Salir. Para ms informacin, vea Instruccin "Salir".
Page 138
Volver
Page 139
Crear (Instruccin)
Esta instruccin asigna una nueva instancia a la variable de objeto especificado. Crear objeto [ ( [ parmetros ] ) ] objeto Requerido. Variable de objeto. parmetros Requerido si el constructor de la clase requiere parmetros. Parmetros que se pasan al constructor del objeto.
Comentarios La instruccin Crear asigna a objeto una nueva instancia de su clase. Antes de producirse la asignacin, objeto es liberado. En caso de que el constructor de la clase de objeto requiera parmetros, stos deben ser pasados al crear el objeto. Se pueden especificar ms de una variable de objeto en una instruccin Crear, separando cada variable mediante comas. No es necesario que todas las variables sean de la misma clase.
Volver
Page 140
Clase (Instruccin)
Declara el nombre de una clase, as como una definicin de las variables, propiedades y mtodos que la componen. Clase nombre [ ( base) ] [ , campos ] [ instrucciones ] [ Constructor: mtodoConstructor ] [ instrucciones ] [ Destructor: mtodoDestructor ] [ instrucciones ] FinClase nombre Requerido. Nombre de la clase. Sigue las convenciones de nomenclatura estndar de las variables. base Opcional. Nombre de la clase base de la cual se heredan los miembros. Si se omite, la clase no posee una clase base. campos Opcional. Lista de los campos de la clase. instrucciones Opcional. Instrucciones que componen las variables, propiedades y mtodos de la clase. mtodoConstructor Requerido si se especifica Constructor. Define el mtodo constructor de la clase. mtodoDestructor Requerido si se especifica Destructor. Define el mtodo destructor de la clase. FinClase Termina la declaracin de la clase.
Cada campo de campos tiene la siguiente sintaxis y partes: [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que el campo es un puntero. nombre Requerido. Nombre del campo. Debe ser un identificador vlido. [] Opcional. Indica que el campo es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos del campo.
Page 141
Comentarios La posibilidad de declarar los campos de una clase en la instruccin Clase slo se mantiene por compatibilidad con versiones anteriores. Se recomienda utilizar la instruccin ClaseVar para declarar los campos de una clase. Los campos declarados en la instruccin Clase son privados. Para ms informacin, vea Accesibilidad. La clusula Constructor define el mtodo que es llamado cuando se crea una nueva instancia de la clase, mientras que la clusula Destructor define el mtodo que es llamado cuando se destruye una instancia de la clase. Para ms informacin, vea Constructores y destructores. Una clase debe poseer al menos un miembro. De lo contrario el compilador genera un error.
Volver
Page 142
Destruir (Instruccin)
Esta instruccin libera a la variable de objeto especificada y eventualmente destruye el objeto. Destruir objeto objeto Requerido. Variable de objeto.
Comentarios La instruccin Destruir decrementa la cuenta de referencias del objeto al que apunta objeto. En caso de llegar a cero, el objeto se destruye. En cualquier caso, objeto queda liberado. Nota No confundir "liberar" con "destruir". El trmino "liberar" hace referencia a la variable de objeto; en cambio "destruir" hace referencia al objeto en s. Se pueden especificar ms de una variable de objeto en una instruccin Destruir, separando cada variable mediante comas. No es necesario que todas las variables sean de la misma clase.
Volver
Page 143
Devolver (Instruccin)
Devuelve el control al cdigo que llam a un procedimiento. Devolver valor valor Requerido. Expresin que representa el valor que se devolver al cdigo de llamada.
Comentarios Esta instruccin slo es vlida dentro de un procedimiento que devuelve un valor cuyo tipo de datos es elemental.
Volver
Page 144
Prop (Instruccin)
Se utiliza a nivel de clase para declarar una propiedad. Prop nombre : tipo [ Lec : objetoLectura ] [ Esc : objetoEscritura ] FinProp nombre Requerido. Nombre nico que identifica la propiedad. tipo Requerido. Tipo de datos de la propiedad. objetoLectura Requerido si se especifica Lec. Campo o mtodo de clase que se invoca al leer la propiedad. objetoEscritura Requerido si se especifica Esc. Campo o mtodo de clase que se invoca al asignar a la propiedad.
Comentarios La clusula Lec puede especificar un campo o un mtodo. Si especifica un campo, al leer la propiedad se devolver el valor de ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al leer la propiedad se llamar a ese mtodo. El mtodo debe devolver el mismo tipo de datos que la propiedad. Si el mtodo requiere parmetros, al leer la propiedad se debern pasar estos parmetros. La clusula Esc, al igual que Lec, tambin puede especificar un campo o un mtodo. Si especifica un campo, al asignar a la propiedad se almacenar el valor en ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al asignar a la propiedad se llamar a ese mtodo. El primer parmetro del mtodo debe ser del mismo tipo de datos que la propiedad. Si el mtodo requiere ms parmetros, al asignar a la propiedad se debern pasar estos parmetros extra. Si se omite la clusula Esc, la propiedad es de slo lectura. Si se omite la clusula Lec, la propiedad es de slo escritura. Si bien las clusulas Esc y Lec son ambas opcionales, al menos una de ellas se debe especificar en una propiedad.
Introduccin a las clases y los objetos Propiedades y procedimientos de propiedad Clase (Instruccin)
Volver
Page 145
Estruc (Instruccin)
Se utiliza para declarar una estructura y definir sus miembros. Estruc nombre , miembros nombre Requerido. Nombre de la estructura. Debe ser un identificador vlido. miembros Requerido. Miembros de la estructura separados por comas.
Cada miembro de miembros tiene la siguiente sintaxis y partes: [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que el miembro es un puntero. nombre Requerido. Nombre del miembro. Debe ser un identificador vlido. [] Opcional. Indica que el miembro es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos del miembro.
Comentarios En una estructura debe declararse por lo menos un miembro. No se podr inicializar el valor de los miembro de datos de una estructura como parte de su declaracin. Se debe inicializar un miembro de datos despus de crear una instancia de la estructura. El tipo de datos de un miembro de la estructura puede ser la misma estructura slo si el miembro es un puntero o una matriz dinmica. En cualquier otro caso ocurre un error al compilar. A diferencia de una unin, a todos los miembros de una estructura se les asigna una porcin de memoria independiente. Esto quiere decir que cada miembro puede almacenar informacin sin interferir con los otros miembros.
Volver
Page 146
Eval (Instruccin)
Ejecuta una serie de instrucciones que hacen referencia repetidas veces a un nico objeto o estructura. Eval objeto [ instrucciones ] [ Salir Eval ] [ instrucciones ] FinEval objeto Requerido. Referencia a una variable de objeto o una estructura. instrucciones Opcional. Una o ms instrucciones que siguen a Eval que se ejecutan sobre objeto. FinEval Termina la ejecucin de la estructura Eval.
Comentarios La estructura Eval permite realizar una serie de instrucciones sobre un objeto especificado sin volver a calificar el nombre del objeto. Por ejemplo, para cambiar un nmero de propiedades diferentes en un nico objeto, coloque las instrucciones de asignacin de las propiedades dentro de Eval...FinEval, haciendo referencia al objeto una vez, en lugar de utilizar cada asignacin de propiedades para hacerlo. En el siguiente ejemplo se ilustra el uso de la estructura Eval para asignar valores a varias propiedades del mismo objeto:
Eval MiEtiqueta .Visible = Verd .Texto = "Hola mundo" FinEval
Una vez que se ha especificado una instruccin Eval, no se puede reasignar objeto hasta que se pase FinEval. Por consiguiente, se puede tener acceso a los miembros de slo el objeto especificado sin calificarlos. Se pueden acceder a miembros de otros objetos y estructuras, pero es necesario calificarlos con sus respectivos nombres. Se pueden anidar estructuras Eval colocando una dentro de otra. Sin embargo, como los miembros de las estructuras externas estn enmascaradas dentro de las estructuras internas, debe proporcionar una referencia de objeto completa en una estructura Eval interna a cualquier miembro de un objeto de una estructura externa. La instruccin Salir Eval transfiere el control inmediatamente a la instruccin que sigue a la instruccin FinEval. Se puede incluir cualquier nmero de instrucciones Salir Eval en cualquier lugar de la estructura Eval. Salir Eval suele utilizarse despus de evaluar alguna condicin, por ejemplo con una instruccin Si.
Introduccin a las estructuras de control Introduccin a las clases y los objetos Estructura "Eval" Instruccin "Salir"
Page 147
Volver
Page 148
Fin (Instruccin)
Finaliza la ejecucin inmediatamente. Fin
Comentarios La instruccin Fin se puede colocar en cualquier lugar para finalizar la ejecucin de cdigo, destruir objetos y borrar variables. Cuando se ejecuta la instruccin Fin, se destruyen las variables de objeto locales, globales y de clase. El orden de destruccin es indefinido. La instruccin Fin proporciona una manera de forzar la detencin de un programa. Para la finalizacin de un programa de Visual Pauscal, debe llamar al mtodo Terminar del objeto Programa.
Volver
Page 149
AdmErr (Instruccin)
Esta instruccin proporciona una manera de controlar los errores posibles que pueden ocurrir en un bloque de cdigo determinado mientras se ejecuta el cdigo. AdmErr [ instruccionesControladas ] [ Controlar [ cdigoErrorControlar ] ] [ instruccionesControlador ] ] [ Finalmente [ cdigoErrorFinalmente ] [ instruccionesFinalmente ] ] FinAdmErr instruccionesControladas Opcional. Instrucciones en las que puede ocurrir un error. Puede ser una instruccin compuesta. Controlar Opcional. Marca el comienzo del bloque Controlar, que administra el error. Este bloque es ejecutado slo cuando ocurre un error en instruccionesControladas. cdigoErrorControlar Opcional si se especifica Controlar. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Controlar. Finalmente Opcional. Marca el comienzo del bloque Finalmente. Siempre se ejecuta un bloque Finalmente cuando se termina de ejecutar instruccionesControladas o el bloque Controlar. cdigoErrorFinalmente Opcional si se especifica Finalmente. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Finalmente. instruccionesFinalmente Opcional. Instrucciones que se ejecutan despus de las dems operaciones de procesamiento de error. FinAdmErr Termina el bloque AdmErr...FinAdmErr.
Comentarios El bloque AdmErr contiene cdigo en el que puede producirse un error, mientras que el bloque Controlar contiene el cdigo para controlar cualquier error que pueda tener lugar. Debido a que el bloque Finalmente se ejecuta sin importar si ocurre un error o no, la variable cdigoErrorFinalmente recibe o el cdigo de error que se produjo o el valor 0 en caso de que no hubiera ocurrido un error. Nota Si una instruccin AdmErr no contiene un bloque Controlar, debe tener un bloque Finalmente. De lo contrario este ltimo es opcional. Nota El bloque Finalmente no se ejecutar si se sale del bloque AdmErr mediante una instruccin Salir. Para ms informacin, vea Instruccin "Salir".
Page 150
Volver
Page 151
AdmErr (Instruccin)
Esta instruccin proporciona una manera de controlar los errores posibles que pueden ocurrir en un bloque de cdigo determinado mientras se ejecuta el cdigo. AdmErr [ instruccionesControladas ] [ Controlar [ cdigoErrorControlar ] ] [ instruccionesControlador ] ] [ Finalmente [ cdigoErrorFinalmente ] [ instruccionesFinalmente ] ] FinAdmErr instruccionesControladas Opcional. Instrucciones en las que puede ocurrir un error. Puede ser una instruccin compuesta. Controlar Opcional. Marca el comienzo del bloque Controlar, que administra el error. Este bloque es ejecutado slo cuando ocurre un error en instruccionesControladas. cdigoErrorControlar Opcional si se especifica Controlar. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Controlar. Finalmente Opcional. Marca el comienzo del bloque Finalmente. Siempre se ejecuta un bloque Finalmente cuando se termina de ejecutar instruccionesControladas o el bloque Controlar. cdigoErrorFinalmente Opcional si se especifica Finalmente. Variable de tipo Entero que recibe el cdigo de error al ejecutarse el bloque Finalmente. instruccionesFinalmente Opcional. Instrucciones que se ejecutan despus de las dems operaciones de procesamiento de error. FinAdmErr Termina el bloque AdmErr...FinAdmErr.
Comentarios El bloque AdmErr contiene cdigo en el que puede producirse un error, mientras que el bloque Controlar contiene el cdigo para controlar cualquier error que pueda tener lugar. Debido a que el bloque Finalmente se ejecuta sin importar si ocurre un error o no, la variable cdigoErrorFinalmente recibe o el cdigo de error que se produjo o el valor 0 en caso de que no hubiera ocurrido un error. Nota Si una instruccin AdmErr no contiene un bloque Controlar, debe tener un bloque Finalmente. De lo contrario este ltimo es opcional. Nota El bloque Finalmente no se ejecutar si se sale del bloque AdmErr mediante una instruccin Salir. Para ms informacin, vea Instruccin "Salir".
Page 152
Volver
Page 153
Bloque (Instruccin)
Esta instruccin define un bloque de instrucciones. Se utiliza como una estructura de referencia para finalizar rpidamente la ejecucin del bloque de instrucciones. Bloque [ instrucciones ] [ Salir Bloque ] [ instrucciones ] FinBloque instrucciones Opcional. Instrucciones que componen el bloque de instrucciones.
Comentarios La estructura Bloque se utiliza para definir un bloque de instrucciones que se deben ejecutar como una unidad. Mediante la instruccin Salir Bloque es posible romper esta unidad y finalizar el bloque de instrucciones. En muchos casos esto sera ms difcil de realizar si no se utilizara la estructura Bloque.
Volver
Page 154
Clase (Instruccin)
Declara el nombre de una clase, as como una definicin de las variables, propiedades y mtodos que la componen. Clase nombre [ ( base) ] [ , campos ] [ instrucciones ] [ Constructor: mtodoConstructor ] [ instrucciones ] [ Destructor: mtodoDestructor ] [ instrucciones ] FinClase nombre Requerido. Nombre de la clase. Sigue las convenciones de nomenclatura estndar de las variables. base Opcional. Nombre de la clase base de la cual se heredan los miembros. Si se omite, la clase no posee una clase base. campos Opcional. Lista de los campos de la clase. instrucciones Opcional. Instrucciones que componen las variables, propiedades y mtodos de la clase. mtodoConstructor Requerido si se especifica Constructor. Define el mtodo constructor de la clase. mtodoDestructor Requerido si se especifica Destructor. Define el mtodo destructor de la clase. FinClase Termina la declaracin de la clase.
Cada campo de campos tiene la siguiente sintaxis y partes: [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que el campo es un puntero. nombre Requerido. Nombre del campo. Debe ser un identificador vlido. [] Opcional. Indica que el campo es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos del campo.
Page 155
Comentarios La posibilidad de declarar los campos de una clase en la instruccin Clase slo se mantiene por compatibilidad con versiones anteriores. Se recomienda utilizar la instruccin ClaseVar para declarar los campos de una clase. Los campos declarados en la instruccin Clase son privados. Para ms informacin, vea Accesibilidad. La clusula Constructor define el mtodo que es llamado cuando se crea una nueva instancia de la clase, mientras que la clusula Destructor define el mtodo que es llamado cuando se destruye una instancia de la clase. Para ms informacin, vea Constructores y destructores. Una clase debe poseer al menos un miembro. De lo contrario el compilador genera un error.
Volver
Page 156
Eval (Instruccin)
Ejecuta una serie de instrucciones que hacen referencia repetidas veces a un nico objeto o estructura. Eval objeto [ instrucciones ] [ Salir Eval ] [ instrucciones ] FinEval objeto Requerido. Referencia a una variable de objeto o una estructura. instrucciones Opcional. Una o ms instrucciones que siguen a Eval que se ejecutan sobre objeto. FinEval Termina la ejecucin de la estructura Eval.
Comentarios La estructura Eval permite realizar una serie de instrucciones sobre un objeto especificado sin volver a calificar el nombre del objeto. Por ejemplo, para cambiar un nmero de propiedades diferentes en un nico objeto, coloque las instrucciones de asignacin de las propiedades dentro de Eval...FinEval, haciendo referencia al objeto una vez, en lugar de utilizar cada asignacin de propiedades para hacerlo. En el siguiente ejemplo se ilustra el uso de la estructura Eval para asignar valores a varias propiedades del mismo objeto:
Eval MiEtiqueta .Visible = Verd .Texto = "Hola mundo" FinEval
Una vez que se ha especificado una instruccin Eval, no se puede reasignar objeto hasta que se pase FinEval. Por consiguiente, se puede tener acceso a los miembros de slo el objeto especificado sin calificarlos. Se pueden acceder a miembros de otros objetos y estructuras, pero es necesario calificarlos con sus respectivos nombres. Se pueden anidar estructuras Eval colocando una dentro de otra. Sin embargo, como los miembros de las estructuras externas estn enmascaradas dentro de las estructuras internas, debe proporcionar una referencia de objeto completa en una estructura Eval interna a cualquier miembro de un objeto de una estructura externa. La instruccin Salir Eval transfiere el control inmediatamente a la instruccin que sigue a la instruccin FinEval. Se puede incluir cualquier nmero de instrucciones Salir Eval en cualquier lugar de la estructura Eval. Salir Eval suele utilizarse despus de evaluar alguna condicin, por ejemplo con una instruccin Si.
Introduccin a las estructuras de control Introduccin a las clases y los objetos Estructura "Eval" Instruccin "Salir"
Page 157
Volver
Page 158
Mientras (Instruccin)
Ejecuta una serie de instrucciones siempre que una condicin dada sea Verd. Mientras condicin [ instrucciones ] [ Salir Mientras ] [ instrucciones ] FinMientras condicin Requerido. Expresin. Debe evaluarse como Verd o Falso. instrucciones Opcional. Instrucciones a ejecutarse si condicin es Verd. FinMientras Termina la ejecucin del bloque Mientras.
Comentarios Si condicin es Verd, se ejecutan todas las instrucciones hasta que se encuentre la instruccin FinMientras. Despus, el control vuelve a la instruccin Mientras y se comprueba de nuevo condicin. Si condicin an es Verd, se repite el proceso. Si es Falso, la ejecucin se reanuda con la instruccin que sigue a la instruccin FinMientras. La instruccin Salir Mientras transfiere el control inmediatamente a la instruccin que sigue a la instruccin FinMientras. Se puede incluir cualquier nmero de instrucciones Salir Mientras en cualquier lugar del bucle Mientras. Salir Mientras suele utilizarse despus de evaluar alguna condicin, por ejemplo con una instruccin Si. Se pueden anidar bucles Mientras si se coloca un bucle dentro de otro.
Volver
Page 159
Proc (Instruccin)
Declara el nombre, los parmetros y el cdigo que definen un procedimiento. Sintaxis 1: Proc [ clase . ] nombre [ ( parmetros ) ] [ : tipo [ [] ] ] [{ Exportar | Inicio }] [ instrucciones ] [ Salir ] [ instrucciones ] FinProc Sintaxis 2: Proc nombre [ ( parmetros ) ] [ : tipo [ [] ] ] , biblioteca [ export ] Sintaxis 3: Proc nombre [ ( parmetros ) ] [ : tipo [ [] ] ] Adelantado clase Opcional en la sintaxis 1. Nombre de clase. Slo es vlido en caso de que el procedimiento sea un mtodo adelantado definido fuera de la clase. nombre Requerido. Nombre del procedimiento. Debe ser un identificador vlido. parmetros Opcional. Lista de variables que representan los parmetros que se pasan al procedimiento cuando se le llama. Los parmetros mltiples se separan por comas. tipo Opcional. Tipos de datos del valor devuelto por el procedimiento. En caso de omitirse, el procedimiento no devuelve ningn valor. [] Opcional si se suministra tipo. Indica que el procedimiento devuelve una matriz de tipo. Exportar Opcional en la sintaxis 1. Indica que el procedimiento se exporta. Al exportar un procedimiento, ste puede ser llamado desde otro programa. Es til slo en bibliotecas DLL. Inicio Opcional en la sintaxis 1. Indica que el procedimiento es un procedimiento de inicio. Ver la seccin comentarios. instrucciones Opcional en la sintaxis 1. Un bloque de instrucciones que se ejecutan dentro del procedimiento. FinProc Requerido en la sintaxis 1. Termina la definicin del procedimiento. biblioteca Requerido en la sintaxis 2. Nombre de la biblioteca DLL desde donde se importa este procedimiento. export Opcional en la sintaxis 2. Nombre real del procedimiento que es importado. Adelantado
Page 160
Requerido en la sintaxis 3. Indica que el cdigo del procedimiento ser definido ms adelante.
Cada parmetro de parmetros tiene la siguiente sintaxis y partes: [ Opcional ] [ Referencia ] nombre [ [] ] : tipo [ = valor ] Opcional Opcional. Indica que este parmetro no es necesario cuando se llama al procedimiento. Si se utiliza esta palabra clave, todos los parmetros siguientes deben ser opcionales y declararse mediante la palabra clave Opcional. La declaracin opcional de parmetros puede proporcionar la clusula valor. Referencia Opcional. Indica que el parmetro se pasa por referencia, es decir que el procedimiento puede modificar la variable subyacente en el cdigo de llamada de la misma forma que puede hacerlo el propio cdigo de llamada. Si se omite, el parmetro se pasa por valor. nombre Requerido. Nombre de la variable que representa el parmetro. Debe ser un identificador vlido. [] Opcional. Indica que el parmetro es una matriz. tipo Requerido. Tipos de datos del parmetro pasado al procedimiento. valor Opcional para parmetros declarados con Opcional. Cualquier constante o expresin constante que se evala como el tipo de datos del parmetro.
Comentarios La sintaxis 1 declara un procedimiento o mtodo normal. La sintaxis 2 declara un procedimiento externo que est ubicado en una biblioteca DLL. La sintaxis 3 declara un mtodo adelantado. Solamente la sintaxis 1 puede definir cdigo en el procedimiento. Un procedimiento adelantado slo puede declararse dentro de una clase. Se declara especificando la palabra clave Adelantado, e indica que el cdigo del procedimiento se define ms adelante en el cdigo, posiblemente fuera de la clase. Cuando el procedimiento vuelva al cdigo que realiza la llamada, la ejecucin contina con la instruccin que sigue a la instruccin que lo llam. La instruccin Salir provoca una salida inmediata de un procedimiento. Puede aparecer cualquier nmero de instrucciones Salir en cualquier lugar de un procedimiento. Para devolver un valor, se puede asignar el valor a la variable especial Resultado o incluirlo en una instruccin Devolver. Este ltimo caso slo es vlido cuando el tipo de datos que devuelve el procedimiento es un tipo de datos elemental. Si se utiliza Salir sin establecer un valor de devolucin, el procedimiento devolver el valor predeterminado apropiado para el tipo de datos del valor de devolucin, que es 0 si es numrico, Falso si es Booleano, "" si es Cadena, o un objeto sin crear si es una clase. Si es una estructura, se devuelve una estructura cuyos miembros se han inicializado como se menciona anteriormente. Si es una matriz, se devuelve una matriz de tamao 0.
Page 161
Puede aparecer cualquier nmero de instrucciones Devolver en cualquier lugar de un procedimiento. Asimismo, pueden mezclarse las instrucciones Salir y Devolver. La variable Resultado y la instruccin Devolver slo son vlidas dentro de un procedimiento que devuelve un valor. Se puede utilizar un procedimiento que devuelve un valor en el lado derecho de una expresin cuando desee utilizar dicho valor. Puede llamar a un procedimiento mediante su nombre, seguido por la lista de parmetros entre parntesis, en una expresin. Si no se proporcionan parmetros, se pueden omitir los parntesis. Nota Al llamar a un procedimiento, los parmetro se evalan de derecha a izquierda, es decir de atrs para adelante. Tenga esto en cuenta si un parmetro realiza una llamada a otro procedimiento, ya que el orden de llamadas ser inverso al orden de declaracin. Al especificar la palabra clave Inicio se declara un procedimiento de inicio, que es llamado al iniciar el programa. No debe aceptar ningn parmetro ni devolver ningn valor. Puede haber ms de un procedimiento de inicio por programa. En tal caso, el orden de llamada es igual al orden de declaracin.
Volver
Page 162
Prop (Instruccin)
Se utiliza a nivel de clase para declarar una propiedad. Prop nombre : tipo [ Lec : objetoLectura ] [ Esc : objetoEscritura ] FinProp nombre Requerido. Nombre nico que identifica la propiedad. tipo Requerido. Tipo de datos de la propiedad. objetoLectura Requerido si se especifica Lec. Campo o mtodo de clase que se invoca al leer la propiedad. objetoEscritura Requerido si se especifica Esc. Campo o mtodo de clase que se invoca al asignar a la propiedad.
Comentarios La clusula Lec puede especificar un campo o un mtodo. Si especifica un campo, al leer la propiedad se devolver el valor de ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al leer la propiedad se llamar a ese mtodo. El mtodo debe devolver el mismo tipo de datos que la propiedad. Si el mtodo requiere parmetros, al leer la propiedad se debern pasar estos parmetros. La clusula Esc, al igual que Lec, tambin puede especificar un campo o un mtodo. Si especifica un campo, al asignar a la propiedad se almacenar el valor en ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al asignar a la propiedad se llamar a ese mtodo. El primer parmetro del mtodo debe ser del mismo tipo de datos que la propiedad. Si el mtodo requiere ms parmetros, al asignar a la propiedad se debern pasar estos parmetros extra. Si se omite la clusula Esc, la propiedad es de slo lectura. Si se omite la clusula Lec, la propiedad es de slo escritura. Si bien las clusulas Esc y Lec son ambas opcionales, al menos una de ellas se debe especificar en una propiedad.
Introduccin a las clases y los objetos Propiedades y procedimientos de propiedad Clase (Instruccin)
Volver
Page 163
Seleccionar (Instruccin)
Ejecuta uno de varios grupos de instrucciones, segn el valor de una expresin. Seleccionar expresin [ Caso listaExpresiones [ instrucciones ] ] [ Caso Otro [ otrasInstrucciones ] ] FinSeleccionar expresin Requerido. Expresin. Debe evaluarse en uno de los tipos de datos elementales. listaExpresiones Requerido en una instruccin Caso. Lista de clusulas de expresiones que representan valores que coinciden para expresin. Las clusulas de varias expresiones se separan mediante comas. Las expresiones en listaExpresiones pueden ser de cualquier tipo de datos compatible con el de expresin. instrucciones Opcional. Una o ms instrucciones despus de Caso que se ejecutan si expresin coincide con cualquier clusula en listaExpresiones. otrasInstrucciones Opcional. Una o ms instrucciones a continuacin de Caso Otro que se ejecutan si expresin no coincide con ninguna clusula de listaExpresiones. FinSeleccionar Termina un bloque Seleccionar.
Comentarios Si expresin coincide con cualquier clusula Caso listaExpresiones, se ejecutan las instrucciones que siguen a la instruccin Caso hasta la siguiente instruccin Caso o FinSeleccionar. El control pasa despus a la instruccin que sigue a FinSeleccionar. Si expresin coincide con una clusula de listaExpresiones en ms de una clusula Caso, slo se ejecutan las instrucciones que siguen a la primera coincidencia. La instruccin Caso Otro se utiliza para introducir las instrucciones otrasInstrucciones que se ejecutarn si no se encuentra ninguna coincidencia entre expresin y una clusula de listaExpresiones en cualquiera de las dems instrucciones Caso. Aunque no es necesario, es recomendable tener una instruccin Caso Otro en el bloque Seleccionar para controlar los valores de expresin imprevistos. Si ninguna clusula Caso listaExpresiones coincide con expresin y no existe ninguna instruccin Caso Otro, la ejecucin contina en la instruccin que sigue a FinSeleccionar. Las instrucciones Seleccionar pueden anidarse. Cada instruccin Seleccionar anidada debe tener una instruccin FinSeleccionar coincidente. Si no necesita ejecutar ms instrucciones de un bloque Caso o Caso Otro, puede salir del bloque mediante una instruccin Salir Seleccionar. Esto transfiere inmediatamente el control a la instruccin que sigue a FinSeleccionar.
Page 164
Volver
Page 165
Si (Instruccin)
Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresin. Si condicin [ Entonces ] [ instruccionesSi ] [ SiNo [ instruccionesSino ] ] FinSi O bien Si condicin [ Entonces ] instruccionesSi [ ; SiNo instruccionesSino ] condicin Requerido. Expresin. La expresin que proporcione en condicin debe evaluarse como Verd o Falso, o como un tipo de datos que sea implcitamente convertible a Booleano. instruccionesSi Opcional en formato de mltiples lneas; se requiere en formato de una sola lnea. Una o ms instrucciones a ejecutarse si condicin es Verd. instruccionesSino Opcional en formato de mltiples lneas; se requiere en formato de una sola lnea que tenga una clusula SiNo. Una o ms instrucciones a ejecutarse si condicin es Falso. FinSi Termina un bloque Si...FinSi.
Comentarios Puede utilizar la forma de una sola lnea para pruebas cortas y sencillas. Sin embargo, el formato de mltiples lneas proporciona ms estructura y flexibilidad que el formato de una sola lnea y, generalmente, es ms fcil de leer, mantener y depurar. Con el formato de una sola lnea, es posible ejecutar varias instrucciones como resultado de una decisin del bloque Si. Todas las instrucciones deben estar en la misma lnea y separadas por el carcter punto y coma, como en el ejemplo siguiente:
Si A > 10 Entonces A = A + 1 ; B = B + A ; C = C + B
La instruccin Si de varias lneas debe finalizar con una instruccin FinSi. Cuando se encuentra un bloque Si de mltiples lneas, se prueba condicin. Si condicin es Verd, se ejecutan las instrucciones que estn a continuacin. Si condicin es Falso se ejecutan las instrucciones que siguen a SiNo en caso de que est presente. La ejecucin contina con la instruccin que sigue a FinSi. La palabra clave Entonces es opcional en todos los casos. Sugerencia El bloque Seleccionar puede ser ms til cuando se evala una nica expresin que tiene varios valores posibles.
Page 166
Volver
Page 167
GenerarError (Instruccin)
Genera una excepcin en tiempo de ejecucin. GenerarError nmero [ , mensaje ] nmero Requerido. Expresin nmerica entera que representa el cdigo de la excepcin. mensaje Opcional. Expresin de cadena que representa el mensaje de error asociado con la excepcin. Si se omite, se utiliza el mensaje predeterminado para la excepcin indicada.
Comentarios Esta instruccin produce una excepcin en tiempo de ejecucin, que es controlada mediante el bloque AdmErr. En caso de que no haya un bloque AdmErr, esta instruccin muestra un mensaje de error y finaliza el programa.
Volver
Page 168
Repetir (Instruccin)
Ejecuta una serie de instrucciones incondicionalmente, o hasta que una condicin dada sea Verd. Sintaxis 1: Repetir [ instrucciones ] [ Salir Repetir ] [ instrucciones ] PorSiempre Sintaxis 2: Repetir [ instrucciones ] [ Salir Repetir ] [ instrucciones ] HastaQue condicin
condicin Requerido en la sintaxis 2. Expresin. Debe evaluarse como Verd o Falso. instrucciones Opcional. Instrucciones a ejecutarse incondicionalmente o hasta que condicin sea Verd. PorSiempre Requerido en la sintaxis 1. Marca el final del bucle Repetir. HastaQue Requerido en la sintaxis 2. Marca el final del bucle Repetir.
Comentarios El la sintaxis 1, las instrucciones se ejecutan indefinidamente. Se puede utilizar una instruccin Salir Repetir para romper el bucle (ver ms abajo). En la sintaxis 2, las instrucciones se ejecutan hasta que condicin sea Verd. Debido a que condicin se evala al final del bucle, las instrucciones se ejecutan por lo menos una vez. Cuando condicin es Verd, la ejecucin se reanuda con la instruccin que sigue a la instruccin HastaQue. La instruccin Salir Repetir transfiere el control inmediatamente a la instruccin que sigue a la instruccin PorSiempre o HastaQue. Se puede incluir cualquier nmero de instrucciones Salir Repetir en cualquier lugar del bucle Repetir. Salir Repetir suele utilizarse despus de evaluar alguna condicin, por ejemplo con una instruccin Si. Se pueden anidar bucles Repetir si se coloca un bucle dentro de otro.
Page 169
Instruccin "Salir"
Volver
Page 170
Importar (Instruccin)
Indica al compilador que utilice el cdigo y las declaraciones del archivo especificado. Importar archivo archivo Requerido. Nombre entre comillas del archivo a importar. Comentarios Normalmente archivo indica una biblioteca precompilada (extensin .prp). Cuando se importa una biblioteca, todo su cdigo est disponible para la aplicacin.
Volver
Page 171
Interrumpir (Instruccin)
Produce una pausa en el depurador. Interrumpir [ condicin ] condicin Opcional. Expresin de tipo Booleano. Se produce la pausa slo si condicin es Verd.
Comentarios Cuando se encuentra una instruccin Interrumpir, se evala condicin. Si es Verd o se ha omitido condicin, se produce una pausa en el depurador. El uso de la instruccin Interrumpir es similar a establecer un punto de interrupcin en el cdigo. La instruccin Interrumpir se ignora si el programa no est siendo depurado. Nota condicin siempre se evala al encontrarse la instruccin Interrumpir, independientemente de si el programa se est depurando o no. Tenga esto en cuenta si condicin realiza llamadas a procedimientos. Depurador
Volver
Page 172
IrHacia (Instruccin)
Realiza un salto incondicional a una lnea especificada. IrHacia lnea lnea Requerido. Cualquier etiqueta de lnea.
Comentarios La instruccin IrHacia no se puede utilizar para entrar o salir de un procedimiento o estructura de control. Las instrucciones IrHacia pueden dificultar la lectura y el mantenimiento del cdigo. Se recomienda en su lugar emplear, siempre que sea posible, estructuras de control, como por ejemplo Si..FinSi, Mientras...FinMientras, Contar...Seguir, etc. Una etiqueta de lnea se define de la siguiente manera:
etiquetaLnea:
Volver
Page 173
Prop (Instruccin)
Se utiliza a nivel de clase para declarar una propiedad. Prop nombre : tipo [ Lec : objetoLectura ] [ Esc : objetoEscritura ] FinProp nombre Requerido. Nombre nico que identifica la propiedad. tipo Requerido. Tipo de datos de la propiedad. objetoLectura Requerido si se especifica Lec. Campo o mtodo de clase que se invoca al leer la propiedad. objetoEscritura Requerido si se especifica Esc. Campo o mtodo de clase que se invoca al asignar a la propiedad.
Comentarios La clusula Lec puede especificar un campo o un mtodo. Si especifica un campo, al leer la propiedad se devolver el valor de ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al leer la propiedad se llamar a ese mtodo. El mtodo debe devolver el mismo tipo de datos que la propiedad. Si el mtodo requiere parmetros, al leer la propiedad se debern pasar estos parmetros. La clusula Esc, al igual que Lec, tambin puede especificar un campo o un mtodo. Si especifica un campo, al asignar a la propiedad se almacenar el valor en ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al asignar a la propiedad se llamar a ese mtodo. El primer parmetro del mtodo debe ser del mismo tipo de datos que la propiedad. Si el mtodo requiere ms parmetros, al asignar a la propiedad se debern pasar estos parmetros extra. Si se omite la clusula Esc, la propiedad es de slo lectura. Si se omite la clusula Lec, la propiedad es de slo escritura. Si bien las clusulas Esc y Lec son ambas opcionales, al menos una de ellas se debe especificar en una propiedad.
Introduccin a las clases y los objetos Propiedades y procedimientos de propiedad Clase (Instruccin)
Volver
Page 174
Mientras (Instruccin)
Ejecuta una serie de instrucciones siempre que una condicin dada sea Verd. Mientras condicin [ instrucciones ] [ Salir Mientras ] [ instrucciones ] FinMientras condicin Requerido. Expresin. Debe evaluarse como Verd o Falso. instrucciones Opcional. Instrucciones a ejecutarse si condicin es Verd. FinMientras Termina la ejecucin del bloque Mientras.
Comentarios Si condicin es Verd, se ejecutan todas las instrucciones hasta que se encuentre la instruccin FinMientras. Despus, el control vuelve a la instruccin Mientras y se comprueba de nuevo condicin. Si condicin an es Verd, se repite el proceso. Si es Falso, la ejecucin se reanuda con la instruccin que sigue a la instruccin FinMientras. La instruccin Salir Mientras transfiere el control inmediatamente a la instruccin que sigue a la instruccin FinMientras. Se puede incluir cualquier nmero de instrucciones Salir Mientras en cualquier lugar del bucle Mientras. Salir Mientras suele utilizarse despus de evaluar alguna condicin, por ejemplo con una instruccin Si. Se pueden anidar bucles Mientras si se coloca un bucle dentro de otro.
Volver
Page 175
Repetir (Instruccin)
Ejecuta una serie de instrucciones incondicionalmente, o hasta que una condicin dada sea Verd. Sintaxis 1: Repetir [ instrucciones ] [ Salir Repetir ] [ instrucciones ] PorSiempre Sintaxis 2: Repetir [ instrucciones ] [ Salir Repetir ] [ instrucciones ] HastaQue condicin
condicin Requerido en la sintaxis 2. Expresin. Debe evaluarse como Verd o Falso. instrucciones Opcional. Instrucciones a ejecutarse incondicionalmente o hasta que condicin sea Verd. PorSiempre Requerido en la sintaxis 1. Marca el final del bucle Repetir. HastaQue Requerido en la sintaxis 2. Marca el final del bucle Repetir.
Comentarios El la sintaxis 1, las instrucciones se ejecutan indefinidamente. Se puede utilizar una instruccin Salir Repetir para romper el bucle (ver ms abajo). En la sintaxis 2, las instrucciones se ejecutan hasta que condicin sea Verd. Debido a que condicin se evala al final del bucle, las instrucciones se ejecutan por lo menos una vez. Cuando condicin es Verd, la ejecucin se reanuda con la instruccin que sigue a la instruccin HastaQue. La instruccin Salir Repetir transfiere el control inmediatamente a la instruccin que sigue a la instruccin PorSiempre o HastaQue. Se puede incluir cualquier nmero de instrucciones Salir Repetir en cualquier lugar del bucle Repetir. Salir Repetir suele utilizarse despus de evaluar alguna condicin, por ejemplo con una instruccin Si. Se pueden anidar bucles Repetir si se coloca un bucle dentro de otro.
Page 176
Instruccin "Salir"
Volver
Page 177
Proc (Instruccin)
Declara el nombre, los parmetros y el cdigo que definen un procedimiento. Sintaxis 1: Proc [ clase . ] nombre [ ( parmetros ) ] [ : tipo [ [] ] ] [{ Exportar | Inicio }] [ instrucciones ] [ Salir ] [ instrucciones ] FinProc Sintaxis 2: Proc nombre [ ( parmetros ) ] [ : tipo [ [] ] ] , biblioteca [ export ] Sintaxis 3: Proc nombre [ ( parmetros ) ] [ : tipo [ [] ] ] Adelantado clase Opcional en la sintaxis 1. Nombre de clase. Slo es vlido en caso de que el procedimiento sea un mtodo adelantado definido fuera de la clase. nombre Requerido. Nombre del procedimiento. Debe ser un identificador vlido. parmetros Opcional. Lista de variables que representan los parmetros que se pasan al procedimiento cuando se le llama. Los parmetros mltiples se separan por comas. tipo Opcional. Tipos de datos del valor devuelto por el procedimiento. En caso de omitirse, el procedimiento no devuelve ningn valor. [] Opcional si se suministra tipo. Indica que el procedimiento devuelve una matriz de tipo. Exportar Opcional en la sintaxis 1. Indica que el procedimiento se exporta. Al exportar un procedimiento, ste puede ser llamado desde otro programa. Es til slo en bibliotecas DLL. Inicio Opcional en la sintaxis 1. Indica que el procedimiento es un procedimiento de inicio. Ver la seccin comentarios. instrucciones Opcional en la sintaxis 1. Un bloque de instrucciones que se ejecutan dentro del procedimiento. FinProc Requerido en la sintaxis 1. Termina la definicin del procedimiento. biblioteca Requerido en la sintaxis 2. Nombre de la biblioteca DLL desde donde se importa este procedimiento. export Opcional en la sintaxis 2. Nombre real del procedimiento que es importado. Adelantado
Page 178
Requerido en la sintaxis 3. Indica que el cdigo del procedimiento ser definido ms adelante.
Cada parmetro de parmetros tiene la siguiente sintaxis y partes: [ Opcional ] [ Referencia ] nombre [ [] ] : tipo [ = valor ] Opcional Opcional. Indica que este parmetro no es necesario cuando se llama al procedimiento. Si se utiliza esta palabra clave, todos los parmetros siguientes deben ser opcionales y declararse mediante la palabra clave Opcional. La declaracin opcional de parmetros puede proporcionar la clusula valor. Referencia Opcional. Indica que el parmetro se pasa por referencia, es decir que el procedimiento puede modificar la variable subyacente en el cdigo de llamada de la misma forma que puede hacerlo el propio cdigo de llamada. Si se omite, el parmetro se pasa por valor. nombre Requerido. Nombre de la variable que representa el parmetro. Debe ser un identificador vlido. [] Opcional. Indica que el parmetro es una matriz. tipo Requerido. Tipos de datos del parmetro pasado al procedimiento. valor Opcional para parmetros declarados con Opcional. Cualquier constante o expresin constante que se evala como el tipo de datos del parmetro.
Comentarios La sintaxis 1 declara un procedimiento o mtodo normal. La sintaxis 2 declara un procedimiento externo que est ubicado en una biblioteca DLL. La sintaxis 3 declara un mtodo adelantado. Solamente la sintaxis 1 puede definir cdigo en el procedimiento. Un procedimiento adelantado slo puede declararse dentro de una clase. Se declara especificando la palabra clave Adelantado, e indica que el cdigo del procedimiento se define ms adelante en el cdigo, posiblemente fuera de la clase. Cuando el procedimiento vuelva al cdigo que realiza la llamada, la ejecucin contina con la instruccin que sigue a la instruccin que lo llam. La instruccin Salir provoca una salida inmediata de un procedimiento. Puede aparecer cualquier nmero de instrucciones Salir en cualquier lugar de un procedimiento. Para devolver un valor, se puede asignar el valor a la variable especial Resultado o incluirlo en una instruccin Devolver. Este ltimo caso slo es vlido cuando el tipo de datos que devuelve el procedimiento es un tipo de datos elemental. Si se utiliza Salir sin establecer un valor de devolucin, el procedimiento devolver el valor predeterminado apropiado para el tipo de datos del valor de devolucin, que es 0 si es numrico, Falso si es Booleano, "" si es Cadena, o un objeto sin crear si es una clase. Si es una estructura, se devuelve una estructura cuyos miembros se han inicializado como se menciona anteriormente. Si es una matriz, se devuelve una matriz de tamao 0.
Page 179
Puede aparecer cualquier nmero de instrucciones Devolver en cualquier lugar de un procedimiento. Asimismo, pueden mezclarse las instrucciones Salir y Devolver. La variable Resultado y la instruccin Devolver slo son vlidas dentro de un procedimiento que devuelve un valor. Se puede utilizar un procedimiento que devuelve un valor en el lado derecho de una expresin cuando desee utilizar dicho valor. Puede llamar a un procedimiento mediante su nombre, seguido por la lista de parmetros entre parntesis, en una expresin. Si no se proporcionan parmetros, se pueden omitir los parntesis. Nota Al llamar a un procedimiento, los parmetro se evalan de derecha a izquierda, es decir de atrs para adelante. Tenga esto en cuenta si un parmetro realiza una llamada a otro procedimiento, ya que el orden de llamadas ser inverso al orden de declaracin. Al especificar la palabra clave Inicio se declara un procedimiento de inicio, que es llamado al iniciar el programa. No debe aceptar ningn parmetro ni devolver ningn valor. Puede haber ms de un procedimiento de inicio por programa. En tal caso, el orden de llamada es igual al orden de declaracin.
Volver
Page 180
Prop (Instruccin)
Se utiliza a nivel de clase para declarar una propiedad. Prop nombre : tipo [ Lec : objetoLectura ] [ Esc : objetoEscritura ] FinProp nombre Requerido. Nombre nico que identifica la propiedad. tipo Requerido. Tipo de datos de la propiedad. objetoLectura Requerido si se especifica Lec. Campo o mtodo de clase que se invoca al leer la propiedad. objetoEscritura Requerido si se especifica Esc. Campo o mtodo de clase que se invoca al asignar a la propiedad.
Comentarios La clusula Lec puede especificar un campo o un mtodo. Si especifica un campo, al leer la propiedad se devolver el valor de ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al leer la propiedad se llamar a ese mtodo. El mtodo debe devolver el mismo tipo de datos que la propiedad. Si el mtodo requiere parmetros, al leer la propiedad se debern pasar estos parmetros. La clusula Esc, al igual que Lec, tambin puede especificar un campo o un mtodo. Si especifica un campo, al asignar a la propiedad se almacenar el valor en ese campo. El tipo de datos del campo debe coincidir con el de la propiedad. Si se especifica un mtodo, al asignar a la propiedad se llamar a ese mtodo. El primer parmetro del mtodo debe ser del mismo tipo de datos que la propiedad. Si el mtodo requiere ms parmetros, al asignar a la propiedad se debern pasar estos parmetros extra. Si se omite la clusula Esc, la propiedad es de slo lectura. Si se omite la clusula Lec, la propiedad es de slo escritura. Si bien las clusulas Esc y Lec son ambas opcionales, al menos una de ellas se debe especificar en una propiedad.
Introduccin a las clases y los objetos Propiedades y procedimientos de propiedad Clase (Instruccin)
Volver
Page 181
Prototipo (Instruccin)
Declara un prototipo y sus parmetros. Prototipo nombre [ ( parmetros ) ] [ : tipo [ [] ] ] nombre Requerido. Nombre del prototipo. Debe ser un identificador vlido. parmetros Opcional. Lista de variables que representan los parmetros que se pasan al procedimiento cuando se le llama. Los parmetros mltiples se separan por comas. tipo Opcional. Tipos de datos del valor devuelto por el prototipo. En caso de omitirse, el prototipo no devuelve ningn valor. [] Opcional si se suministra tipo. Indica que el prototipo devuelve una matriz de tipo.
Cada parmetro de parmetros tiene la siguiente sintaxis y partes: [ Opcional ] [ Referencia ] [ nombre ] [ [] ] : tipo [ = valor ] Opcional Opcional. Indica que este parmetro no es necesario cuando se llama al procedimiento. Si se utiliza esta palabra clave, todos los parmetros siguientes deben ser opcionales y declararse mediante la palabra clave Opcional. La declaracin opcional de parmetros puede proporcionar la clusula valor. Referencia Opcional. Indica que el parmetro se pasa por referencia, es decir que el procedimiento puede modificar la variable subyacente en el cdigo de llamada de la misma forma que puede hacerlo el propio cdigo de llamada. Si se omite, el parmetro se pasa por valor. nombre Opcional. Nombre de la variable que representa el parmetro. Debe ser un identificador vlido. [] Opcional. Indica que el parmetro es una matriz. tipo Requerido. Tipos de datos del parmetro pasado al procedimiento. valor Opcional para parmetros declarados con Opcional. Cualquier constante o expresin constante que se evala como el tipo de datos del parmetro.
Comentarios Un prototipo es una definicin de un procedimiento y se emplea para crear variables de procedimientos. Para ms informacin, vea Prototipos y variables de procedimientos. Un prototipo solamente define un nuevo tipo de datos; no define ningn cdigo asociado con el mismo.
Page 182
Volver
Page 183
PuertoEnviar (Instruccin)
Enva un valor a travs de un puerto de la PC. PuertoEnviar puerto , valor puerto Requerido. Nmero del puerto. valor Requerido. Valor de tipo Byte a enviar.
Comentarios Slo es posible acceder a los puertos de la PC desde Windows 95/98. En los otros sistemas operativos slo es posible acceder a los puertos desde un controlador de dispositivo o una rutina ejecutndose en modo ncleo.
Volver
Page 184
Redim (Instruccin)
Se utiliza para asignar o reasignar espacio de almacenamiento para una variable de matriz dinmica. Redim [ Preservar ] nombre , tamao Preservar Opcional. Palabra clave utilizada para conservar los datos en una matriz existente. nombre Requerido. Nombre de la variable de matriz dinmica. tamao Requerido. Valor numrico entero que representa el tamao de la matriz. Los elementos de la matriz se cuentan desde 0 hasta su tamao menos uno. Si tamao es 0, la matriz no tendr dimensin.
Comentarios La instruccin Redim no puede cambiar el tipo de datos de una variable de matriz o proporcionar valores nuevos de inicializacin para los elementos de la matriz. La instruccin Redim no puede cambiar el tamao de una matriz esttica. Redim libera la matriz existente y crea una matriz nueva. Los elementos de la nueva matriz se inicializan al valor predeterminado para su tipo de datos, a menos que especifique Preservar. Si se incluye la palabra clave Preservar, Pauscal copia los elementos de la matriz existente en la nueva matriz. Si se utiliza Preservar y la matriz se achica, Pauscal liberar los elementos eliminados de la matriz. Si tamao es cero, la matriz no tendr dimensin. En este caso, la instruccin Redim funciona igual que la instruccin Borrar.
Volver
Page 185
Repetir (Instruccin)
Ejecuta una serie de instrucciones incondicionalmente, o hasta que una condicin dada sea Verd. Sintaxis 1: Repetir [ instrucciones ] [ Salir Repetir ] [ instrucciones ] PorSiempre Sintaxis 2: Repetir [ instrucciones ] [ Salir Repetir ] [ instrucciones ] HastaQue condicin
condicin Requerido en la sintaxis 2. Expresin. Debe evaluarse como Verd o Falso. instrucciones Opcional. Instrucciones a ejecutarse incondicionalmente o hasta que condicin sea Verd. PorSiempre Requerido en la sintaxis 1. Marca el final del bucle Repetir. HastaQue Requerido en la sintaxis 2. Marca el final del bucle Repetir.
Comentarios El la sintaxis 1, las instrucciones se ejecutan indefinidamente. Se puede utilizar una instruccin Salir Repetir para romper el bucle (ver ms abajo). En la sintaxis 2, las instrucciones se ejecutan hasta que condicin sea Verd. Debido a que condicin se evala al final del bucle, las instrucciones se ejecutan por lo menos una vez. Cuando condicin es Verd, la ejecucin se reanuda con la instruccin que sigue a la instruccin HastaQue. La instruccin Salir Repetir transfiere el control inmediatamente a la instruccin que sigue a la instruccin PorSiempre o HastaQue. Se puede incluir cualquier nmero de instrucciones Salir Repetir en cualquier lugar del bucle Repetir. Salir Repetir suele utilizarse despus de evaluar alguna condicin, por ejemplo con una instruccin Si. Se pueden anidar bucles Repetir si se coloca un bucle dentro de otro.
Page 186
Instruccin "Salir"
Volver
Page 187
Salir (Instruccin)
Sale de un procedimiento o bloque y transfiere el control inmediatamente a la instruccin que sigue a la llamada al procedimiento o a la definicin del bloque. Salir [{ Contar | Mientras | Repetir | Eval | Bloque | Seleccionar | AdmErr }] Contar Sale inmediatamente del bucle Contar en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin Seguir. Salir Contar slo se puede utilizar dentro de un bucle Contar. Cuando se utiliza con bucles anidados Contar, Salir Contar transfiere el control al bucle que est anidado un nivel por encima del bucle donde ocurre Salir Contar. Mientras Sale inmediatamente del bucle Mientras en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin FinMientras. Salir Mientras slo se puede utilizar dentro de un bucle Mientras. Cuando se utiliza con bucles anidados Mientras, Salir Mientras transfiere el control al bucle que est anidado un nivel por encima del bucle donde ocurre Salir Mientras. Repetir Sale inmediatamente del bucle Repetir en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin PorSiempre o HastaQue. Salir Repetir slo se puede utilizar dentro de un bucle Repetir. Cuando se utiliza con bucles anidados Repetir, Salir Repetir transfiere el control al bucle que est anidado un nivel por encima del bucle donde ocurre Salir Repetir. Eval Sale inmediatamente de la estructura Eval en la que aparece. La ejecucin contina con la instruccin que sigue a la instruccin FinEval. Salir Eval slo se puede utilizar dentro de una estructura Eval. Cuando se utiliza con estructuras anidadas Eval, Salir Eval transfiere el control a la estructura que est anidada un nivel por encima de la estructura donde ocurre Salir Eval. Bloque Sale inmediatamente de la estructura Bloque en la que aparece. La ejecucin contina con la instruccin que sigue a la instruccin FinBloque. Salir Bloque slo se puede utilizar dentro de una estructura Bloque. Cuando se utiliza con estructuras anidadas Bloque, Salir Bloque transfiere el control a la estructura que est anidada un nivel por encima de la estructura donde ocurre Salir Bloque. Seleccionar Sale inmediatamente del bloque Seleccionar en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin FinSeleccionar. Salir Seleccionar slo se puede utilizar dentro de un bloque Seleccionar. AdmErr Sale inmediatamente del bloque AdmErr en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin FinAdmErr. Salir AdmErr slo se puede utilizar dentro de un bloque AdmErr. Comentarios La instruccin Salir sola se utiliza para salir de un procedimiento. Slo es vlida dentro de un procedimiento.
Page 188
Volver
Page 189
Contar (Instruccin)
Repite un grupo de instrucciones un nmero de veces especificado. Contar contador = inicio A final [ Dec ] [ instrucciones ] [ Salir Contar ] [ instrucciones ] Seguir contador Requerido. Variable. El tipo de contador suele ser Entero o EnteroSig, pero puede ser cualquier tipo numrico entero elemental que admita los operadores mayor que (>), menor que (<) y suma (+). inicio Requerido. Expresin. El valor inicial de contador. La expresin inicio debe evaluarse como cualquier tipo de datos compatible con el tipo de contador. final Requerido. Expresin. El valor final de contador. La expresin final debe evaluarse como cualquier tipo de datos compatible con el tipo de contador. Dec Opcional. Si se omite, indica que la variable de contador se incrementa por cada iteracin. Si se especifica, indica que la variable se decrementa por cada iteracin. instrucciones Opcional. Una o ms instrucciones que se ejecutan un nmero especificado de veces.
Comentarios Las expresiones inicio y final slo se evalan una vez, cuando se encuentra por primera vez la instruccin Contar. No se volvern a evaluar, aunque cambien las partes que componen las instrucciones del bucle. La variable contador se compara con final cada vez que se entra en el bucle. Esto incluye la primera vez que se ejecuta la instruccin Contar. Por consiguiente, si el valor de inicio supera el valor de final al entrar en el bucle, ste no se ejecuta, y la ejecucin pasa inmediatamente a la instruccin que sigue a Seguir. Una vez que se han ejecutado las instrucciones del bucle, se incrementa o decrementa contador (dependiendo si se omite o no la palabra clave Dec). En este momento, la instruccin Contar compara de nuevo contador con final. Como resultado de esta comparacin, bien se ejecutan otra vez las instrucciones del bucle o se termina el bucle y la ejecucin contina con la instruccin que sigue a Seguir . Nota Cambiar el valor de contador mientras se est dentro de un bucle puede dificultar la lectura y la depuracin del cdigo. La instruccin Salir Contar transfiere el control inmediatamente a la instruccin que sigue a la instruccin Seguir. Se puede incluir cualquier nmero de instrucciones Salir Contar en cualquier lugar del bucle Contar. Salir Contar suele utilizarse despus de evaluar alguna condicin, por ejemplo con
Page 190
una instruccin Si. Se pueden anidar bucles Contar, colocando un bucle dentro de otro. Cada bucle debe tener una variable contador nica. La siguiente construccin es correcta:
Contar I = 1 A 10 Contar J = 1 A 10 Contar K = 1 A 10 ' Instrucciones Seguir Seguir Seguir
Es recomendable que el tipo de datos de contador sea EnteroSig u otro tipo de datos con signo. Esto permite que se eliminen errores provocados por valores negativos con tipos sin signo.
Volver
Page 191
Seleccionar (Instruccin)
Ejecuta uno de varios grupos de instrucciones, segn el valor de una expresin. Seleccionar expresin [ Caso listaExpresiones [ instrucciones ] ] [ Caso Otro [ otrasInstrucciones ] ] FinSeleccionar expresin Requerido. Expresin. Debe evaluarse en uno de los tipos de datos elementales. listaExpresiones Requerido en una instruccin Caso. Lista de clusulas de expresiones que representan valores que coinciden para expresin. Las clusulas de varias expresiones se separan mediante comas. Las expresiones en listaExpresiones pueden ser de cualquier tipo de datos compatible con el de expresin. instrucciones Opcional. Una o ms instrucciones despus de Caso que se ejecutan si expresin coincide con cualquier clusula en listaExpresiones. otrasInstrucciones Opcional. Una o ms instrucciones a continuacin de Caso Otro que se ejecutan si expresin no coincide con ninguna clusula de listaExpresiones. FinSeleccionar Termina un bloque Seleccionar.
Comentarios Si expresin coincide con cualquier clusula Caso listaExpresiones, se ejecutan las instrucciones que siguen a la instruccin Caso hasta la siguiente instruccin Caso o FinSeleccionar. El control pasa despus a la instruccin que sigue a FinSeleccionar. Si expresin coincide con una clusula de listaExpresiones en ms de una clusula Caso, slo se ejecutan las instrucciones que siguen a la primera coincidencia. La instruccin Caso Otro se utiliza para introducir las instrucciones otrasInstrucciones que se ejecutarn si no se encuentra ninguna coincidencia entre expresin y una clusula de listaExpresiones en cualquiera de las dems instrucciones Caso. Aunque no es necesario, es recomendable tener una instruccin Caso Otro en el bloque Seleccionar para controlar los valores de expresin imprevistos. Si ninguna clusula Caso listaExpresiones coincide con expresin y no existe ninguna instruccin Caso Otro, la ejecucin contina en la instruccin que sigue a FinSeleccionar. Las instrucciones Seleccionar pueden anidarse. Cada instruccin Seleccionar anidada debe tener una instruccin FinSeleccionar coincidente. Si no necesita ejecutar ms instrucciones de un bloque Caso o Caso Otro, puede salir del bloque mediante una instruccin Salir Seleccionar. Esto transfiere inmediatamente el control a la instruccin que sigue a FinSeleccionar.
Page 192
Volver
Page 193
Si (Instruccin)
Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresin. Si condicin [ Entonces ] [ instruccionesSi ] [ SiNo [ instruccionesSino ] ] FinSi O bien Si condicin [ Entonces ] instruccionesSi [ ; SiNo instruccionesSino ] condicin Requerido. Expresin. La expresin que proporcione en condicin debe evaluarse como Verd o Falso, o como un tipo de datos que sea implcitamente convertible a Booleano. instruccionesSi Opcional en formato de mltiples lneas; se requiere en formato de una sola lnea. Una o ms instrucciones a ejecutarse si condicin es Verd. instruccionesSino Opcional en formato de mltiples lneas; se requiere en formato de una sola lnea que tenga una clusula SiNo. Una o ms instrucciones a ejecutarse si condicin es Falso. FinSi Termina un bloque Si...FinSi.
Comentarios Puede utilizar la forma de una sola lnea para pruebas cortas y sencillas. Sin embargo, el formato de mltiples lneas proporciona ms estructura y flexibilidad que el formato de una sola lnea y, generalmente, es ms fcil de leer, mantener y depurar. Con el formato de una sola lnea, es posible ejecutar varias instrucciones como resultado de una decisin del bloque Si. Todas las instrucciones deben estar en la misma lnea y separadas por el carcter punto y coma, como en el ejemplo siguiente:
Si A > 10 Entonces A = A + 1 ; B = B + A ; C = C + B
La instruccin Si de varias lneas debe finalizar con una instruccin FinSi. Cuando se encuentra un bloque Si de mltiples lneas, se prueba condicin. Si condicin es Verd, se ejecutan las instrucciones que estn a continuacin. Si condicin es Falso se ejecutan las instrucciones que siguen a SiNo en caso de que est presente. La ejecucin contina con la instruccin que sigue a FinSi. La palabra clave Entonces es opcional en todos los casos. Sugerencia El bloque Seleccionar puede ser ms til cuando se evala una nica expresin que tiene varios valores posibles.
Page 194
Volver
Page 195
Si (Instruccin)
Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresin. Si condicin [ Entonces ] [ instruccionesSi ] [ SiNo [ instruccionesSino ] ] FinSi O bien Si condicin [ Entonces ] instruccionesSi [ ; SiNo instruccionesSino ] condicin Requerido. Expresin. La expresin que proporcione en condicin debe evaluarse como Verd o Falso, o como un tipo de datos que sea implcitamente convertible a Booleano. instruccionesSi Opcional en formato de mltiples lneas; se requiere en formato de una sola lnea. Una o ms instrucciones a ejecutarse si condicin es Verd. instruccionesSino Opcional en formato de mltiples lneas; se requiere en formato de una sola lnea que tenga una clusula SiNo. Una o ms instrucciones a ejecutarse si condicin es Falso. FinSi Termina un bloque Si...FinSi.
Comentarios Puede utilizar la forma de una sola lnea para pruebas cortas y sencillas. Sin embargo, el formato de mltiples lneas proporciona ms estructura y flexibilidad que el formato de una sola lnea y, generalmente, es ms fcil de leer, mantener y depurar. Con el formato de una sola lnea, es posible ejecutar varias instrucciones como resultado de una decisin del bloque Si. Todas las instrucciones deben estar en la misma lnea y separadas por el carcter punto y coma, como en el ejemplo siguiente:
Si A > 10 Entonces A = A + 1 ; B = B + A ; C = C + B
La instruccin Si de varias lneas debe finalizar con una instruccin FinSi. Cuando se encuentra un bloque Si de mltiples lneas, se prueba condicin. Si condicin es Verd, se ejecutan las instrucciones que estn a continuacin. Si condicin es Falso se ejecutan las instrucciones que siguen a SiNo en caso de que est presente. La ejecucin contina con la instruccin que sigue a FinSi. La palabra clave Entonces es opcional en todos los casos. Sugerencia El bloque Seleccionar puede ser ms til cuando se evala una nica expresin que tiene varios valores posibles.
Page 196
Volver
Page 197
Unin (Instruccin)
Se utiliza para declarar una unin y definir sus miembros. Unin nombre , miembros nombre Requerido. Nombre de la unin. Debe ser un identificador vlido. miembros Requerido. Miembros de la unin separados por comas.
Cada miembro de miembros tiene la siguiente sintaxis y partes: [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que el miembro es un puntero. nombre Requerido. Nombre del miembro. Debe ser un identificador vlido. [] Opcional. Indica que el miembro es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos del miembro.
Comentarios En una unin debe declararse por lo menos un miembro. No se podr inicializar el valor de los miembro de datos de una unin como parte de su declaracin. Se debe inicializar un miembro de datos despus de crear una instancia de la unin. El tipo de datos de un miembro de la unin puede ser la misma unin slo si el miembro es un puntero o una matriz dinmica. En cualquier otro caso ocurre un error al compilar. A diferencia de una estructura, los miembros de una unin comparten todos la misma porcin de memoria. Esto quiere decir que cuando un miembro de la unin cambia, todos los otros miembros cambian tambin. Es muy importante que una unin no posea miembros dinmicos, como por ejemplo una cadena o una matriz dinmica. Este tipo de miembros debe ser liberado cuando la unin no se utiliza ms, pero debido a que todos los miembros comparten la misma zona de memoria, Pauscal no puede saber a qu miembro tiene que liberar (tenga en cuenta que slo uno es vlido). Por esta razn, cuando Pauscal encuentra una unin con miembros dinmicos, se produce una advertencia.
Page 198
Volver
Page 199
Var (Instruccin)
Es utilizada para declarar y asignar espacio de almacenamiento para variables. Var [ @ ] nombre [ [ [ tamao ] ] ] : tipo @ Opcional. Indica que la variable es un puntero. nombre Requerido. Nombre de la variable. Debe ser un identificador vlido. [] Opcional. Indica que la variable es una matriz. tamao Opcional si se incluye [ ]. Especifica el tamao de la matriz esttica. Si se omite, la matriz es una matriz dinmica. tipo Requerido. Tipos de datos de la variable.
Comentarios La instruccin Var declara variables globales y locales. Para declarar campos (variables de clase), utilice la instruccin ClaseVar. No se puede declarar una variable como matriz y puntero a la vez. Es posible declarar varias variables con una sola instruccin Var, separando las variables con comas. En el siguiente ejemplo se declaran tres variables de tipo Entero:
Var A,B,C:Entero
Tambin es posible mezclar tipos de datos en una misma instruccin Var. En el siguiente ejemplo se declaran dos variables de tipo Entero y una de tipo Cadena:
Var A,B:Entero, C:Cadena
Volver
Page 200
Glosario C
Cdigo Nativo
Secuencia de instrucciones en formato binario que se ejecutan directamente por el procesador sin ningn tipo de intermediario.
E
Expresin
Combinacin de variables, constantes y operadores que puede ser evaluado como un valor.
P
Procedimiento
Secuencia de instrucciones. Un procedimiento posee un nombre que se utiliza para invocarlo (o llamarlo). Al llamar a un procedimiento, Pauscal ejecuta sus instrucciones.
Punto de Ejecucin
Lnea de cdigo que se est ejecutando actualmente, o, en el caso de que el programa est en pausa, lnea de cdigo que se ejecutar en el siguiente paso.
Punto de Interrupcin
Lnea de cdigo marcada de tal forma que produce una pausa en el programa cuando ste se ejecuta. Se emplea en el depurador.
T
Tiempo de Diseo
Referente al momento en que la aplicacin se est ejecutando, en contraste con el Tiempo de Diseo
Tipo de Datos Elementales
Conjunto de tipos de datos que ofrece el lenguaje. Los tipos de datos elementales en Pauscal son: Entero, EnteroSig, Word, WordSig, Byte, ByteSig, Booleano, Real, Decimal y Cadena. (Ver Resumen de tipos de datos).
Volver
Page 201
Accesibilidad
La accesibilidad de un elemento de programacin indica qu tan visible es ese elemento en el programa. Existen dos valores de accesibilidad: pblico y privado. Un elemento pblico puede ser accedido desde dentro y fuera del mbito donde fue declarado. En cambio un elemento privado slo puede ser accedido desde dentro del mbito donde fue declarado. Por ejemplo, un mtodo privado de una clase slo puede ser llamado desde dentro de esa clase. La instruccin Pblico indica que las instrucciones siguientes declaran elementos pblicos. Anlogamente la instruccin Privado indica que las declaraciones son privadas. Si no se especifica ninguna accesibilidad, se toma por defecto la accesibilidad pblica. Las instrucciones de accesibilidad se emplean de la siguiente manera:
accesibilidad : [ declaraciones ]
La accesibilidad afecta las siguientes declaraciones: procedimientos variables estructuras clases mtodos propiedades campos En el siguiente ejemplo, el mtodo iInit es privado, y el mtodo RealizarClculos es pblico.
Clase cPrueba Privado: Proc iInit ' Cdigo de inicializacin FinProc Constructor:iInit Pblico: Proc RealizarClculo ' Cdigo que realiza el clculo FinProc FinClase
Los elementos de programacin de Pauscal son por defecto pblicos si no se especifica su accesibilidad.
Volver
Page 202