DO*
 Llama a un procedimiento
------------------------------------------------------------------------------
 Sintaxis

     DO <idProcedimiento> [WITH <lista argumentos>]

 Argumentos

     <idProcedimiento> es el nombre del procedimiento o función definida
     por el usuario que va a ejecutarse.

     WITH <lista argumentos> especifica un máximo de 128 argumentos,
     separados por comas, que se van a pasar a <idProcedimiento>. Cada
     argumento puede ser una variable sencilla, un campo, una matriz, un
     elemento de una matriz, una expresión o un objeto. Los argumentos
     pueden omitirse o dejarse al final de la lista.

 Descripción

     La sentencia DO llama a un procedimiento o función definida por el
     usuario y pasa, opcionalmente, argumentos a la rutina invocada. Realiza
     la misma acción que una función definida por el usuario o procedimiento
     especificado en una línea, con la excepción de que las variables que no
     sean de campo se pasan por referencia por defecto. Para pasar una
     variable de campo como argumento, debe encerrarla entre paréntesis, a
     menos que la declare con una sentencia FIELD o con un alias.

     En CA-Clipper, no es necesario que el número de argumentos
     especificados sea igual al de parámetros especificados en el
     procedimiento invocado. Si el número de argumentos es menor que el
     número de parámetros, las variables de parámetros sin argumentos
     correspondientes se inicializan con un valor NIL en la llamada. Si el
     número de argumentos es mayor que el de parámetros, los argumentos
     sobrantes se ignoran.

     Del mismo modo, si se omite un argumento de la <lista argumentos>,
     dejando un lugar vacío con una coma, el argumento correspondiente se
     inicializa con un valor NIL. Si desea conocer la posición del último
     argumento pasado en la <lista argumentos>, utilice PCOUNT(). Para saber
     si se ha omitido un argumento, compare el parámetro recibido con el
     valor NIL.

     Además de invocar a un procedimiento o una función definida por el
     usuario, DO tiene un efecto sobre la compilación si compila el módulo
     fuente actual sin la opción /M. Si el compilador de CA-Clipper
     encuentra una sentencia DO y el procedimiento especificado no se ha
     compilado todavía, el compilador busca el fichero .prg en el directorio
     actual con el mismo nombre y lo compila. Si no se encuentra dicho
     fichero, el procedimiento invocado se supone externo y se añade una
     referencia al fichero objeto (.OBJ). En el momento del enlace, el
     enlazador busca en otros ficheros objeto y bibliotecas esta referencia
     externa.

     En CA-Clipper, DO es una sentencia de compatibilidad y su utilización
     no es recomendable. Es preferible hacer una llamada al procedimiento o
     función en una línea independiente. Puesto que en esta convención
     preferible de llamadas los parámetros se pasan normalmente por valor,
     si desea pasar un argumento por referencia debe precederlo con el
     operador de paso por referencia (@). Si utiliza las sentencias DO para
     hacer más legible una llamada de procedimientos, los mandatos definidos
     por el usuario con una directiva #command ofrecen una mayor legibilidad
     sin sacrificar la seguridad de las variables pasadas como parámetros.

     Si desea más información sobre la forma de paso de parámetros, consulte
     el apartado Funciones y Procedimientos del capítulo "Conceptos Básicos"
     de la Guía de Programación y Utilidades.

 Ejemplos

      Este ejemplo ejecuta un procedimiento sin parámetros:

        DO InfoCuentas
        InfoCuentas()                             // Método preferible

      Este ejemplo ejecuta un procedimiento pasando dos constantes:

        DO InfoTrimestral WITH "2ª", "División Ventas"
        InfoTrimestral("2ª", "División Ventas")   // Método preferible

      Este ejemplo ejecuta un procedimiento con el primer argumento
        pasado por valor y el segundo pasado por referencia:

        nNumero := 12
        DO InfoAnual WITH nNumero + 12, nNumero
        InfoAnual(nNumero + 12, @nNumero)         // Método preferible

      Aquí, se llama a un procedimiento con omisión de argumentos
        incluidos en la lista de argumentos:

        DO MostrarPantalla WITH ,,,,"Mi Ventana"
        MostrarPantalla(,,,,"Mi Ventana")         // Método preferible

 To download this example - click here.

See Also: FUNCTION LOCAL PARAMETERS PRIVATE PROCEDURE PUBLIC