INSTITUTO SUPERIOR TECNOLÓGICO NORBERT WIENER Manual del Alumno ASIGNATURA: Aplicativos V (Visual Basic Script y Javascript) PROGRAMA: S3C Lima-Perú 2 Manual del Alumno INDICE Introducción ................................................................................................................................................. 6 ActiveX Scripting ..................................................................................................................................... 6 VBScript en otras aplicaciones y exploradores ........................................................................................ 6 INTERPRETACIÓN ................................................................................................................................ 6 COMPILACIÓN ...................................................................................................................................... 7 Agregar código de VBScript a una página HTML ....................................................................................... 7 La etiqueta <SCRIPT> ............................................................................................................................. 7 Tipos de datos de VBScript ........................................................................................................................ 10 ¿Cuáles son los tipos de datos de VBScript? .......................................................................................... 10 Subtipos de Variant ................................................................................................................................ 10 Variables de VBScript ................................................................................................................................ 11 ¿Qué es una variable? ............................................................................................................................. 11 Declaración de variables ......................................................................................................................... 11 Restricciones de nombre ......................................................................................................................... 12 Alcance y vida de las variables............................................................................................................... 12 Asignación de valores a variables .......................................................................................................... 12 Constantes de VBScript .............................................................................................................................. 13 ¿Qué es una constante? ........................................................................................................................... 13 Creación de constantes ........................................................................................................................... 13 Variables escalares y variables de matrices ................................................................................................ 14 Instrucción Dim .......................................................................................................................................... 15 Descripción ............................................................................................................................................. 15 Sintaxis : Dim nombredevariable[([subíndices])][, nombredevariable[([subíndices])]] . . . ............... 15 Comentarios............................................................................................................................................ 15 Operadores de VBScript ............................................................................................................................. 17 Prioridad de los operadores .................................................................................................................... 17 Operadores de VBScript ............................................................................................................................. 18 Funciones ................................................................................................................................................... 18 Función Abs ........................................................................................................................................... 18 Función Array......................................................................................................................................... 18 Función Asc ............................................................................................................................................ 19 Instrucción Call ...................................................................................................................................... 19 Función CBool ....................................................................................................................................... 19 Función CByte ........................................................................................................................................ 20 Función CCur ......................................................................................................................................... 20 Función CDate ........................................................................................................................................ 21 Función CDbl ......................................................................................................................................... 21 Función Chr ............................................................................................................................................ 21 Función CInt ........................................................................................................................................... 22 Función CLng ......................................................................................................................................... 22 Función CSng ......................................................................................................................................... 23 Función CStr........................................................................................................................................... 23 Función Exp ........................................................................................................................................... 24 Funciones Int y Fix ................................................................................................................................. 24 Función GetObject.................................................................................................................................. 24 Función Hour .......................................................................................................................................... 26 Función IsDate ....................................................................................................................................... 26 Función LBound ..................................................................................................................................... 27 Función LCase ........................................................................................................................................ 27 Función Left ........................................................................................................................................... 27 Función Len ............................................................................................................................................ 27 Función LoadPicture .............................................................................................................................. 28 Funciones LTrim, RTrim y Trim ............................................................................................................ 28 Función Mid ........................................................................................................................................... 28 Función Minute ...................................................................................................................................... 29 Función Month ....................................................................................................................................... 29 Función MonthName .............................................................................................................................. 29 3 Manual del Alumno Función Now .......................................................................................................................................... 30 Función RGB .......................................................................................................................................... 30 Función Right ......................................................................................................................................... 30 Función Rnd ........................................................................................................................................... 31 Función Round ....................................................................................................................................... 32 Función Second ...................................................................................................................................... 32 Función Sgn ............................................................................................................................................ 32 Función Space ........................................................................................................................................ 33 Función Sqr ............................................................................................................................................ 33 Función String ........................................................................................................................................ 33 Función UBound .................................................................................................................................... 34 Función UCase ....................................................................................................................................... 34 Función VarType .................................................................................................................................... 35 Función Weekday ................................................................................................................................... 35 Función WeekdayName ......................................................................................................................... 36 Función Year .......................................................................................................................................... 37 Procedimientos de VBScript ...................................................................................................................... 38 Tipos de procedimientos ......................................................................................................................... 38 Procedimientos Sub .................................................................................................................................... 38 Instrucción Sub ....................................................................................................................................... 38 Procedimientos Function ............................................................................................................................ 39 Instrucción Function ............................................................................................................................... 40 Obtención de datos dentro y fuera de procedimientos ................................................................................ 42 Uso de los procedimientos Sub y Function en código ................................................................................ 42 Uso de instrucciones condicionales ............................................................................................................ 43 Control de la ejecución del programa ......................................................................................................... 43 Toma de decisiones utilizando If ... Then ... Else ....................................................................................... 43 Instrucción If...Then...Else ..................................................................................................................... 43 Ejecución de instrucciones si una condición es True ............................................................................. 44 Ejecución de ciertas instrucciones si la condición es True y ejecución de otras si es False ................... 44 Decisión entre varias alternativas ........................................................................................................... 45 Toma de decisiones utilizando Select Case ................................................................................................ 45 Instrucción Select Case............................................................................................................................... 46 Bucles mediante código .............................................................................................................................. 47 Uso de bucles para repetir código ............................................................................................................... 47 Uso de bucles Do ........................................................................................................................................ 47 Instrucción Do...Loop ............................................................................................................................. 47 Repetición de instrucciones mientras una condición es True ..................................................................... 48 Repetición de una instrucción hasta que una condición pasa a ser True .................................................... 49 Salida de una instrucción Do ... Loop desde dentro del bucle .................................................................... 49 Uso de While ... Wend................................................................................................................................ 50 Instrucción While...Wend ....................................................................................................................... 50 Uso de For ... Next ..................................................................................................................................... 50 Instrucción For...Next ............................................................................................................................. 51 Uso de For Each...Next............................................................................................................................... 52 Instrucción For Each...Next .................................................................................................................... 53 Operador de Concatenación & .................................................................................................................. 55 Operador +.................................................................................................................................................. 55 Operadores de comparación ....................................................................................................................... 56 Función InStr .......................................................................................................................................... 58 Función IsNumeric ................................................................................................................................. 58 Formateo de Números ................................................................................................................................ 59 Función FormatNumber ......................................................................................................................... 59 Función FormatCurrency ........................................................................................................................ 60 Función FormatPercent .......................................................................................................................... 62 InputBoxes y Message Box ........................................................................................................................ 63 Función InputBox ................................................................................................................................... 63 Función MsgBox .................................................................................................................................... 64 Función Date .......................................................................................................................................... 67 4 Manual del Alumno Función DateAdd ................................................................................................................................... 67 Función DateDiff .................................................................................................................................... 68 Función Day ........................................................................................................................................... 69 Función Time ......................................................................................................................................... 69 Función TimeSerial ................................................................................................................................ 70 Función TimeValue ................................................................................................................................ 70 Tipos de eventos ......................................................................................................................................... 70 Eventos de ratón ..................................................................................................................................... 70 Eventos de teclado .................................................................................................................................. 71 Eventos de enfoque................................................................................................................................. 71 Eventos de formulario ............................................................................................................................ 71 Eventos de carga de página .................................................................................................................... 71 Modelo de Objetos ..................................................................................................................................... 72 Evento onMouseOver ......................................................................................................................... 72 Objeto form ............................................................................................................................................ 74 Objeto window ....................................................................................................................................... 74 Objeto document .................................................................................................................................... 75 Objeto form ............................................................................................................................................ 76 Objeto location ....................................................................................................................................... 76 Objeto navigator ..................................................................................................................................... 76 Objeto history ......................................................................................................................................... 77 Introducción a Java Script .......................................................................................................................... 78 Escritura de Código en Java Script ............................................................................................................. 78 Instrucciones ........................................................................................................................................... 78 Comentarios............................................................................................................................................ 79 Asignaciones e igualdad ......................................................................................................................... 79 Expresiones ............................................................................................................................................ 79 Caracteristicas ............................................................................................................................................ 80 Diferencia con JAVA ................................................................................................................................. 80 Principales aplicaciones.............................................................................................................................. 80 Donde incluirlo ........................................................................................................................................... 81 En el cuerpo del documento ................................................................................................................... 81 En archivo aparte .................................................................................................................................... 81 Usando manejadores de evento .............................................................................................................. 81 Haciendo una llamada a función ............................................................................................................ 82 Variables de Java Script ............................................................................................................................. 83 Declarar variables ................................................................................................................................... 83 Nombrar variables .................................................................................................................................. 83 Conversión.............................................................................................................................................. 84 Tipos de Datos ............................................................................................................................................ 85 ¿Qué son los tipos de datos de JScript? .................................................................................................. 85 Tipo de dato Cadena ............................................................................................................................... 85 Tipo de dato numérico ............................................................................................................................ 85 Tipo Boolean .......................................................................................................................................... 86 Tipo de dato no definido ......................................................................................................................... 86 Tipo de dato Null .................................................................................................................................... 86 Operadores de Java Script .......................................................................................................................... 87 Precedencia de operadores...................................................................................................................... 87 Arreglos y Cadenas .................................................................................................................................... 89 Indexación de matrices ........................................................................................................................... 89 Referencias a matrices ............................................................................................................................ 89 Objetos Intrínsecos ..................................................................................................................................... 90 Objeto Array ........................................................................................................................................... 90 Objeto String .......................................................................................................................................... 91 Objeto Math............................................................................................................................................ 91 Objeto Date............................................................................................................................................. 91 Objeto Number ....................................................................................................................................... 93 Control del Flujo del Programa .................................................................................................................. 94 ¿Por qué controlar el flujo de la ejecución? ............................................................................................ 94 5 Manual del Alumno Usar instrucciones condicionales ............................................................................................................ 94 Operador condicional ............................................................................................................................. 95 Usar repeticiones o bucles ...................................................................................................................... 95 Usar bucles for........................................................................................................................................ 95 Usar bucles for...in.................................................................................................................................. 96 Usar bucles while ................................................................................................................................... 96 Usar instrucciones break y continue ....................................................................................................... 97 Objeto window ........................................................................................................................................... 98 open ........................................................................................................................................................ 98 close ........................................................................................................................................................ 98 alert ......................................................................................................................................................... 99 status ....................................................................................................................................................... 99 defaultStatus ........................................................................................................................................... 99 Objeto document ........................................................................................................................................ 99 write ........................................................................................................................................................ 99 lastModified............................................................................................................................................ 99 bgColor ................................................................................................................................................... 99 Objeto history ............................................................................................................................................. 99 Objeto form .............................................................................................................................................. 100 submit ................................................................................................................................................... 100 text ........................................................................................................................................................ 100 Objeto date ............................................................................................................................................... 100 Objeto math .............................................................................................................................................. 100 Objeto navigator ....................................................................................................................................... 100 Objeto screen ............................................................................................................................................ 100 Eventos ..................................................................................................................................................... 101 Lista de Eventos ................................................................................................................................... 101 Un ejemplo ........................................................................................................................................... 101 Objeto event ............................................................................................................................................. 102 DHTML .................................................................................................................................................... 103 Qué es CSS ............................................................................................................................................... 103 ANIMACIONES ...................................................................................................................................... 106 ESTILOS .............................................................................................................................................. 106 EJEMPLOS .......................................................................................................................................... 107 Cookies ..................................................................................................................................................... 110 Funciones básicas ..................................................................................................................................... 110 Un ejemplo ............................................................................................................................................... 111 6 Manual del Alumno Semana 1 : VBScript y la Web Introducción Microsoft Visual Basic Scripting Edition, el miembro más reciente de la familia de lenguajes de programación Visual Basic, suministra una automatización activa a una amplia variedad de entornos, incluidas las secuencias de comandos del cliente de Web en Microsoft Internet Explorer y las secuencias de comandos del servidor de Web en Microsoft Internet Information Server. Si ya conoce Visual Basic o Visual Basic for Applications, VBScript le será muy familiar. Incluso si no conoce Visual Basic, una vez que lo haya aprendido podrá programar con toda la familia de lenguajes Visual Basic. ActiveX Scripting VBScript se comunica con las aplicaciones de host mediante ActiveX™ Scripting. Con ActiveX Scripting, evita que los exploradores y otras aplicaciones host necesiten escribir código especial de integración para cada componente de la secuencia de comandos. ActiveX Scripting permite a un host compilar una secuencia de comandos, obtener y llamar puntos de entrada, y administrar el espacio de nombres disponible para el programador. Con ActiveX Scripting, los distribuidores de lenguajes pueden crear run times de lenguaje estándar para la secuencia de comandos. Microsoft proporcionará soporte de tiempo de ejecución para VBScript. Microsoft está trabajando con varios grupos de Internet para definir el estándar de ActiveX Scripting de modo que se puedan intercambiar los motores de automatización. ActiveX Scripting se utiliza en Microsoft® Internet Explorer y en Microsoft® Internet Information Server. VBScript en otras aplicaciones y exploradores Como programador, puede licenciar su implementación de origen de VBScript sin cargo para utilizarla en sus productos. Microsoft proporcionará implementaciones binarias de VBScript para la API de Windows® de 32 bits, la API de Windows de 16 bits y la de Macintosh®. VBScript se integra con exploradores de World Wide Web. VBScript y ActiveX Scripting también se pueden utilizar como un lenguaje de automatización general en otras aplicaciones. INTERPRETACIÓN VENTAJAS INCONVENIENTES El código es cómodo para depurar, ya que no es necesario volver a compilar tras un cambio. La ejecución se ralentiza, al ser necesaria la interpretación línea a línea cada vez. No es necesario disponer de un compilador, ya que el intérprete (que forma parte del navegador) ejecuta el script. El código es visible y puede ser objeto de plagio por parte de otras personas. El mantenimiento es fácil y rápido, por parte del autor o de otro programador. El usuario tiene acceso al código y puede modificarlo, estropeando alguna operación. 7 Manual del Alumno COMPILACIÓN VENTAJAS El código compilado se ejecuta muy rápido, al no ser necesaria una traducción cada vez. El código compilado no puede ser "abierto" por otras personas. No es necesario transmitir el código fuente. El código compilado puede estar, íntegramente, incluido en un solo fichero. INCONVENIENTES Es necesario disponer de un compilador-linkador para el proceso de la compilación. El código compilado suele ocupar bastante en disco, ya que incorpora en el propio código algunas librerías del sistema. Depurar un programa implica volver a compilar tras los cambios. El código en VBScript puede, además, estar diseñado para su ejecución en el lado del cliente o en el del servidor. La diferencia es que un código que se ejecuta en el lado del servidor no es visible en el lado del cliente. Este recibe los resultados, pero no el código. El código que se debe de ejecutar en el lado del servidor estará incluido en la página web correspondiente entre los tags <% y %> . Además habrá que renombrar la página para aplicarle la extensión .asp (Active Server Page -página activa en servidor-). El funcionamiento intrínseco de la ASP's está fuera de los objetivos de éste temario, aunque lo comentaremos por encima al final. Este texto se refiere, por tanto, al lenguaje VBScript en el lado del cliente. El lenguaje VBScript solo funciona correctamente con el navegador Internet Explorer 4.0 y superiores, por lo que será necesario disponer del mismo. Los usuarios de otros navegadores no podrán disfrutar de la potencia y versatilidad del VBScript. Agregar código de VBScript a una página HTML Puede usar el elemento SCRIPT para agregar código de VBScript a una página HTML. La etiqueta <SCRIPT> El código de VBScript se presenta en una página HTML dentro de una parejas de etiquetas <SCRIPT>. Por ejemplo, un procedimiento que comprueba una fecha de envío aparece como: 8 Manual del Alumno <SCRIPT LANGUAGE="VBScript"> <!-Function PuedeEntregar(Dt) PuedeEntregar = (CDate(Dt) - Now()) > 2 End Function --> </SCRIPT> Las etiquetas <SCRIPT> de comienzo y fin rodean el código. El atributo LANGUAGE indica el lenguaje de secuencia de comandos. Necesita especificar el lenguaje porque los exploradores pueden utilizar otros lenguajes de secuencia de comandos. Observe que la función PuedeEntregar aparece entre etiquetas de comentario (<!-y -->). Esto evita que los exploradores que no entienden la etiqueta <SCRIPT> muestra el código. Como el ejemplo es una función general —no está vinculado a ningún control de formulario en particular— puede incluirlo en la sección HEAD de la página: <HTML> <HEAD> <TITLE>Haga su pedido</TITLE> <SCRIPT LANGUAGE="VBScript"> <!-Function PuedeEntregar(Dt) PuedeEntregar = (CDate(Dt) - Now()) > 2 End Function --> </SCRIPT> </HEAD> <BODY> ... Puede utilizar procedimientos en código en cualquier lugar de una página. Puede colocar procedimientos en las secciones BODY y HEAD. Sin embargo, puede que desee colocar todos los procedimientos en la sección HEAD para mantener todo el código junto. Mantener el código en la sección HEAD asegura que todo el código se lee y decodifica antes de que se necesite debido a una llamada dentro de la sección BODY. Una excepción destacable a esta regla es que puede desear proporcionar formularios en línea con código de secuencia de comandos para responder a eventos de objetos del formulario. Por ejemplo, puede incluir código de secuencia de comandos para responder a un clic en un botón en el formulario: <HTML> <HEAD> <TITLE>Probar eventos de botón</TITLE> </HEAD> <BODY> <FORM NAME="Formulario1"> <INPUT TYPE="Button" NAME="Boton1" VALUE="Clic"> 9 Manual del Alumno <SCRIPT FOR="Boton1" EVENT="onClick" LANGUAGE="VBScript"> MsgBox "¡Botón presionado!" </SCRIPT> </FORM> </BODY> </HTML> La mayoría del código aparecerá en procedimientos Sub o Function y sólo se llamará cuando el código que ha escrito provoca su ejecución. Sin embargo, puede escribir código de VBScript fuera de procedimientos, pero dentro de un bloque SCRIPT. Este código se ejecuta sólo una vez, cuando se carga la página HTML. Esto le permite inicializar los datos o cambiar dinámicamente la apariencia de su página Web cuando se carga. 10 Manual del Alumno Semana 2 : Bases de VBScript Tipos de datos de VBScript ¿Cuáles son los tipos de datos de VBScript? VBScript sólo tiene un tipo de datos que se llama Variant. Un tipo Variant es una clase especial de tipo de datos que puede contener diferentes tipos de información, dependiendo de cómo se utilice. Como Variant es el único tipo de datos en VBScript, también es el único tipo de datos devuelto por todas las funciones en VBScript. En su forma más sencilla, un tipo Variant puede contener tanto información numérica como de cadena. Un tipo Variant se comporta como un número cuando se utiliza en un contexto numérico y como una cadena cuando se utiliza en un contexto de cadena. Esto quiere decir que si trabaja con datos que parecen números, VBScript asume que son números y realiza lo que es más adecuado para números. Igualmente, si trabaja con datos que sólo pueden ser datos de cadena, VBScript los trata como datos de cadena. Por supuesto, siempre puede hacer que los números se comporten como cadenas, escribiéndolos entre comillas (" "). Subtipos de Variant Más allá de las simples clasificaciones numéricas y de cadena, un tipo Variant puede hacer más distinciones acerca de la naturaleza específica de la información numérica. Por ejemplo, puede tener información numérica que representa una fecha o una hora. Cuando se utiliza con datos de fecha u hora, el resultado se expresa siempre como una fecha o una hora. Por supuesto, también puede tener una amplia variedad de información numérica en el intervalo de tamaños de sencillos valores Boolean a enormes números de signo flotante. Estas categorías diferentes de información que puede contener un tipo Variant se llaman subtipos. La mayoría de las veces sólo se puede establecer el tipo de datos que desea en un tipo Variant y se comporta del modo más adecuado para el tipo de datos que contiene. La tabla siguiente muestra varios subtipos de datos que puede contener un tipo Variant. Subtipo Descripción Empty Variant está sin inicializar. El valor es 0 para variables numéricas o una cadena de longitud cero ("") para variables de cadena. Null Variant contiene intencionadamente datos no válidos. Boolean Contiene True o False. 11 Manual del Alumno Byte Contiene un entero entre 0 y 255. Integer Contiene un entero -32.768 y 32.767. Currency -922.337.203.685.477,5808 a 922.337.203.685.477,5807. Long Contiene un entero -2.147.483.648 y 2.147.483.647. Single Contiene un número de precisión simple y signo flotante entre -3,402823E38 y -1,401298E-45 para valores negativos, y entre 1,401298E-45 y 3.402823E38 para valores negativos. Double Contiene un número de precisión doble y punto flotante en el intervalo de 1,79769313486232E308 y -4,94065645841247E-324 para valores negativos, y entre 4,94065645841247E-324 y 1,79769313486232E308 para valores positivos. Date (Time) Contiene un número que representa una fecha entre el 1 de enero de 100 y el 31 de diciembre de 9999. String Contiene una cadena de longitud variable que puede contener hasta 2 mil millones de caracteres de longitud. Object Contiene un objeto. Error Contiene un número de error. Puede usar las funciones de conversión para convertir datos un subtipo a otro. Además la función VarType devuelve información acerca de cómo se almacenan los datos en un tipo Variant. Variables de VBScript ¿Qué es una variable? Una variable es un marcador de posición útil que hace referencia a una ubicación de la memoria del equipo donde puede almacenar información de programa que puede cambiar durante el tiempo en que se ejecuta la secuencia de comandos. Por ejemplo, podría crear una variable llamada CuentaClics para almacenar el número de veces que el usuario hizo clic en un objeto de una determinada página Web. El lugar donde se ubica la variable en la memoria del equipo no es importante. Lo que es importante es que sólo tiene que hacer referencia a su nombre para ver o cambiar su valor. En VBScript, las variables siempre son de un tipo de datos fundamental, Variant. Declaración de variables Declare variables explícitamente en la secuencia de comandos utilizando la instrucción Dim, la instrucción Public y la instrucción Private. Por ejemplo: Dim GradosFahrenheit Declare múltiples variables separando cada nombre de variable por una coma. Por ejemplo: 12 Manual del Alumno Dim Arriba, Abajo, Izquierda, Derecha También puede declarar una variable implícitamente por el simple uso de su nombre en alguna parte de la secuencia de comandos. Esto no se considera adecuado, ya que podría escribir mal el nombre de la variable en uno o más lugares provocando resultados inesperados cuando ejecuta el código. Por este motivo, existe la instrucción Option Explicit para solicitar una declaración explícita de todas las variables. La instrucción Option Explicit debe ser la primera instrucción en la secuencia de comandos. Restricciones de nombre Los nombres de variables siguen las normas estándar de denominación en VBScript. Un nombre de variable: Debe comenzar con un carácter alfabético. No puede contener un punto. No debe superar 255 caracteres. Debe ser único en el alcance donde se declara. Alcance y vida de las variables El alcance de una variable se determina cuando se declara. Cuando declara una variable dentro de un procedimiento, sólo el código dentro de ese procedimiento puede tener acceso o cambiar el valor de esa variable. Tiene scope local y se llama variable de nivel de procedimiento. i declara una variable fuera de un procedimiento, la hace reconocible en todos los procedimientos de la secuencia de comandos. Este tipo de variable de nivel de secuencia de comandos y tiene alcance de nivel de secuencia de comandos. El tiempo que una variable existe es su vida. La vida de una variable de nivel de secuencia de comandos se extiende desde el momento en que se declaró hasta el momento en que finaliza la ejecución de la secuencia de comandos. A nivel de procedimiento, una variable existe sólo cuando se encuentra en el procedimiento. Cuando sale del procedimiento, la variable se destruye. Las variables locales son adecuadas como espacio de almacenamiento temporal cuando se ejecuta un procedimiento. Puede tener variables locales del mismo nombre en varios procedimientos diferentes porque cada una sólo se reconoce en el procedimiento en que se declaró. Asignación de valores a variables Los valores se asignan a variables creeando un expresión de la siguiente manera: la variable está en la parte izquierda de la expresión y el valor que desea asignar a la misma está a la derecha. Por ejemplo: B = 200 13 Manual del Alumno Constantes de VBScript ¿Qué es una constante? Una constante es un nombre significativo que contiene un número o una cadena que nunca cambia. VBScript define un número de constantes intrínsecas. Puede obtener información sobre estas constantes intrínsecas en Referencia del lenguaje VBScript. Creación de constantes En VBScript puede crear constantes definidas por el usuario utilizando la instrucción Const. Utilizando la instrucción Const, puede crear constantes numéricas o de cadena con nombres significativos y asignarlas a valores literales. Por ejemplo: Const MiCadena = "Esta es mi cadena." Const MiEdad = 49 Observe que el literal de cadena se escribe entre comillas (" "). Las comillas son la mejor y más clara forma de diferenciar valores de cadena y valores numéricos. Los literales de fecha y los literales de hora se representan encerrándolos entre signos de número (#). Por ejemplo: Const FechaCorte = #6-1-97# Puede que desee adoptar una combinación de nombres para diferenciar constantes de variables. Esto impedirá que intente reasignar sus valores mientras se ejecuta la secuencia de comandos. Por ejemplo, podría desear utilizar un prefijo "vb" en los nombres de constantes o puede dar nombre a las constantes en mayúsculas. Al diferenciar las constantes de las variables elimina la confusión cuando desarrolla secuencias de comando complejas. 14 Manual del Alumno Semana 3 : Arreglos Variables escalares y variables de matrices Muchas veces, sólo desea asignar un único valor a una variable que ha declarado. Una variable que contiene un único valor es una variable escalar. Otras veces, es útil asignar más de un valor relacionado a una única variable. Entonces puede crear una variable que pueda contener una serie de valores. Esto se llama una variable de matriz. Las variables matriz se declaran de la misma forma que las variables escalares. La diferencia es que una declaración de una variable de matriz utiliza paréntesis ( ) a continuación del nombre de la variable. En el siguiente ejemplo se declara una matriz de una dimensión que contiene 11 elementos: Dim A(10) Aunque el número que se muestra entre paréntesis es 10, todas las matrices en VBScript son de base cero, por lo que la matriz realmente contiene 11 elementos. En una matriz de base cero, el número de elementos de la misma siempre es el número mostrado entre paréntesis más uno. Este tipo de matriz se llama una matriz de tamaño fijo. Asigne datos a cada elemento de la matriz utilizando un índice dentro de la matriz. Comenzando en cero y terminando en 10, es posible asignar datos a los elementos de una matriz del siguiente modo: A(0) = 256 A(1) = 324 A(2) = 100 . . . A(10) = 55 Del mismo modo, se pueden recuperar los datos de cualquier elemento utilizando el índice que desee dentro del elemento de la matriz deseado. Por ejemplo: . . . AlgunaVariable = A(8) . . . Las matrices no están limitadas a una única dimensión. Puede tener hasta 60 dimensiones aunque la mayoría de las personas no pueden comprender más de tres o cuatro. Las dimensiones múltiples se declaran separando con comas los números de tamaño de la matriz dentro del paréntesis. En el siguiente ejemplo, la variable MiTabla es una matriz bidimensional que consta de 6 filas y 11 columnas: Dim MiTabla(5, 10) En una matriz bidimensional, el primer número siempre es el número de filas y el segundo el número de columnas. 15 Manual del Alumno Instrucción Dim Descripción Declara variables y asigna espacio de almacenamiento. Sintaxis : Dim nombredevariable[([subíndices])][, nombredevariable[([subíndices])]] . . . La sintaxis de la instrucción Dim tiene las siguientes partes: Parte Descripción nombredevariable Nombre de la variable que cumple con las convenciones estándar de asignación de nombres de variables. subíndices Dimensiones de una variable de matriz; se pueden declarar hasta 60 dimensiones múltiples. El argumento subíndices usa la siguiente sintaxis: límitesuperior [,límitesuperior] . . . El límite inferior de una matriz siempre es cero. Comentarios Las variables declaradas con Dim a nivel de secuencia de comandos están disponibles para todos los procedimientos dentro de la secuencia de comandos. A nivel de procedimiento, las variables sólo están disponibles dentro del procedimiento. También puede usar la instrucción Dim con paréntesis vacíos para declarar una matriz dinámica. Después de declarar una matriz dinámica, use la instrucción ReDim dentro de un procedimiento para definir el número de dimensiones y elementos de la matriz. Si intenta volver a declarar una dimensión para una variable de matriz cuyo tamaño se especificó explícitamente en una instrucción Dim, se produce un error. Cuando se inician las variables, una variable numérica se inicia a 0 y una cadena se inicia a una cadena de longitud cero (""). Sugerencia Al usar la instrucción Dim en un procedimiento, generalmente se coloca la instrucción Dim al principio del procedimiento. Los siguientes ejemplos muestran el uso de la instrucción Dim: Dim Nombres(9) ' Declara una matriz con 10 elementos. Dim Nombres() ' Declara una matriz dinámica Dim MiVar, MiNum ' Declara dos variables 16 Manual del Alumno También puede declarar una matriz cuyo tamaño cambia durante el tiempo en que se ejecuta la secuencia de comandos. Esto se llama una matriz dinámica. La matriz inicialmente se declara dentro de un procedimiento utilizando la instrucción Dim como con cualquier tipo de matriz o la instrucción ReDim. Sin embargo, en una matriz dinámica, no se establece un tamaño o un número de dimensiones dentro del paréntesis. Por ejemplo: Dim MiMatriz() ReDim OtraMatriz() Para utilizar una matriz dinámica, debe utilizar a continuación ReDim para determinar el número de dimensiones y el tamaño de cada una de ellas. En el siguiente ejemplo, ReDim establece el tamaño inicial de la matriz dinámica a 25. La siguiente instrucción ReDim cambia el tamaño de la matriz a 30, pero utiliza la palabra clave Preserve para conservar el contenido de la matriz cuando se produce el cambio de tamaño. ReDim MiMatriz(25) . . . ReDim Preserve MiMatriz(30) No hay límite en cuanto al número de veces que puede cambiar el tamaño de una matriz dinámica, pero debe saber que si hace una matriz más pequeña de lo que era, pierde los datos de los elementos eliminados. 17 Manual del Alumno Semana 4 : Operadores y Funciones en VBScript Operadores de VBScript VBScript tiene un completo conjunto de operadores, incluyendo operadores aritméticos, operadores de comparación, operadores de concatenación y operadores lógicos. Prioridad de los operadores Cuando se producen varias operaciones en una expresión, cada parte se evalúa y se resuelve en un orden predeterminado. Este orden se conoce como prioridad de los operadores. Puede utilizar paréntesis para invalidar el orden de prioridad y forzar que se evalúen algunas partes de una expresión antes que otras. Las operaciones entre paréntesis siempre se ejecutan antes que las de fuera. Sin embargo, dentro de los paréntesis se mantiene la prioridad de los operadores. Cuando las expresiones contienen operadores de más de una categoría, se evalúan primero los operadores aritméticos, a continuación los operadores de comparación y por último los lógicos. Todos los operadores de comparación tienen la misma prioridad; esto quiere decir que se evalúan en el orden en que aparecen, de izquierda a derecha. Los operadores aritméticos y lógicos se evalúan en el siguiente orden de prioridad. Aritmético Descripción De comparación Símbolo Descripción Lógico Símbolo Descripción Símbolo Exponenciación ^ Igualdad = Logical negation Not Negación unaria - Desigualdad <> Logical conjunction And Multiplicación * Menor que < Disyunción lógica Or División / Mayor que > Exclusión lógica Xor División entera \ Menor o igual que <= Equivalencia lógica Eqv Mod Mayor o igual que >= Implicación lógica Imp Equivalencia de objeto Is Módulo aritmético Suma + Resta - Concatenación de cadenas & 18 Manual del Alumno Cuando una multiplicación y una división se producen juntas en una expresión, cada operación se evalúa como ocurre de izquierda a derecha. Del mismo modo, cuando una suma y una resta se producen juntas en una expresión, cada operación se evalúa según el orden de aparición, de izquierda a derecha. El operador de concatenación de cadenas (&) no es un operador aritmético, pero en la prioridad se ejecuta después de todos los operadores aritméticos y antes de todos los operadores de comparación. El operador Is es un operador de comparación de referencia de objeto. No compara objetos o sus valores; sólo se comprueba para determinar si dos referencias a objetos se refieren al mismo objeto. Operadores de VBScript Función Abs Devuelve el valor absoluto de un número. Sintaxis : Abs(número) El argumento número puede ser cualquier expresión numérica válida. Si número contiene Null, se devuelve Null ; si es un valor no iniciado, se devuelve cero. El valor absoluto de un número es su magnitud sin signo. Por ejemplo, Abs(-1) y Abs(1) devuelven 1. El siguiente ejemplo usa la función Abs para compute the absolute value of a number: Dim MiNumero MiNumero = Abs(50.3) 'Devuelve 50.3 MiNumero = Abs(-50.3) 'Devuelve 50.3 Función Array Devuelve un objeto Variant que contiene una matriz. Sintaxis : Array(listadeargumentos) El argumento requerido listadeargumentos es una lista de valores separados por comas, que se asignan a los elementos de una matriz contenida en el objeto Variant. Si no se especifica ningún argumento, se crea una matriz de longitud cero. La notación usada para hacer referencia a un elemento de una matriz, consta del nombre de la variable seguido de paréntesis que contienen un número de índice que indica el elemento deseado. En el siguiente ejemplo, la primera instrucción crea una variable llamada A. La segunda instrucción asigna una matriz a la variable A. La última instrucción asigna el valor contenido en la segunda matriz a otra variable. Dim A A = Array(10,20,20) 19 Manual del Alumno B = A(2) Función Asc Devuelve el código de carácter ANSI que corresponde a la primera letra de una cadena. Sintaxis : Asc(cadena) El argumento cadena es cualquier expresión de cadena válida. Si cadena no contiene ningún carácter, se produce un error en tiempo de ejecución. En el ejemplo siguiente, Asc devuelve el código de carácter ANSI de la primera letra de cada cadena: Dim MiNumero MiNumero = Asc("A") 'Devuelve 65 MiNumero = Asc("a") 'Devuelve 97 MiNumero = Asc("Azúcar") 'Devuelve 65 Instrucción Call Transfiere el control a un procedimiento Sub o Function. Sintaxis : [Call] nombre [listadeargumentos] La sintaxis de la instrucción Call tiene las siguientes partes: Parte Descripción Call Palabra clave opcional. Si se especifica, debe encerrar listadeargumentosentre paréntesis. Por ejemplo: Call MiProc(0) nombre Requerido. Nombre del procedimiento al que se llama. listadeargumentos Opcional. List de variables, matrices o expresiones delimitada por comas que se pasa al procedimiento. No necesita usar la palabra clave Call al llamar a un procedimiento. Sin embargo, si usa la palabra clave Call para llamar a un procedimiento que necesita argumentos, listadeargumentos debe estar encerrado entre paréntesois. Si omite la palabra clave Call, también debe omitir los paréntesis que encierran a listadeargumentos. Con cualquier sintaxis de Call que use para llamar a cualquier función intrínseca o definida por el usuario, se descarta el valor devuelto por la función. Call MiFuncion("Hola mundo") Function MiFuncion(texto) MsgBox texto End Function Función CBool Devuelve una expresión convertida en Variant de subtipo Boolean. Sintaxis : CBool(expresión) El argumento expresión es cualquier expresión válida. 20 Manual del Alumno Si expresión es cero, se devuelve False; de lo contrario, se devuelve True. Si expresiónno se puede interpretar como valor numérico, se produce un error en tiempo de ejecución. El siguiente ejemplo usa la función CBool para convertir una expresión en Boolean. Si la expresión se evalúa como un valor distinto de cero, CBool devuelve True; de lo contrario, devuelve False. Dim A, B, Comprobacion A = 5: B = 5 ' Inicia variables Comprobacion = CBool(A = B) ' Comprobacion contiene True A = 0 ' Define la variable Comprobacion = CBool(A) ' Comprobacion contiene False Función CByte Devuelve una expresión que se convirtió en Variant de subtipo Byte. Sintaxis : CByte(expresión) El argumento expresión es cualquier expresión válida. En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debe expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CByte para forzar aritmética de tipo byte en casos en los que normalmente se usaría aritmética de moneda, precisión simple, precisión doble o entero. Si expresión está fuera del intervalo aceptable para el subtipo Byte, se produce un error. El siguiente ejemplo usa la función CByte para convertir una expresión en byte: Dim MiDoble, MiByte MiDoble = 125.5678 MiByte = CByte(MiDoble) ' MiDoble es un Double ' MiByte contiene 126 Función CCur Devuelve una expresión que se convirtió en Variant de subtipo Currency. Sintaxis : CCur(expresión) El argumento expresión es cualquier expresión válida. Debe usar la función CCur para proporcionar conversiones internacionales estándar desde cualquier tipo de datos al subtipo Currency. Por ejemplo, distintos separadores de decimales o de miles se reconocen correctamente según la configuración local de su sistema. El siguiente ejemplo usa la función CCur para convertir una expresión en tipo de datos Currency: Dim MiDoble, MiMoneda MiDoble = 543.214588 MiMoneda = CCur(MiDoble * 2) MiDoble * 2 (1086.429176) ' MiDoble es de tipo Double ' Convierte el resultado de ' en tipo de datos Currency (1086.4292) 21 Manual del Alumno Función CDate Devuelve una expresión que se convirtió en Variant del subtipo Date. Sintaxis : CDate(fecha) El argumento fecha es cualquier expresión de fecha válida. Use la función IsDate para determinar si se puede convertir fecha en una fecha u hora. CDate reconoce literales de fecha y literales de hora, así como algunos números que se encuentran dentro del rango de fechas aceptable. Al convertir un número a fecha, la parte entera del número se convierte en una fecha. Cualquier parte fraccionaria del número se convierte en una hora del día, a partir de medianoche. En el siguiente ejemplo se usa la función CDate para convertir una cadena en una fecha. En general, no se recomienda establecer fechas y horas como cadenas mediante programación (como se muestra en este ejemplo). En su lugar, use literales de fecha y hora, como #10/19/1962# o #4:45:23 PM#. MiFecha = "19 de octubre de 1962" ' Define la fecha MiHoraCorta = CDate(MiFecha) ' Convierte al tipo de datos Date MiHoraCompleta = "4:35:47 PM" ' Define la hora completa MiHoraCorta = CDate(MiHoraCompleta) ' Convierte al tipo de datos Date Función CDbl Devuelve una expresión que se convirtió en Variant de subtipo Double. Sintaxis : CDbl(expresión) El argumento expresión es cualquier expresión válida. En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debe expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CDbl o CSng para forzar aritmética de doble precisión o simple precisión en casos en los que normalmente se usaría aritmética de moneda o de entero. Este ejemplo usa la función CDbl para convertir una expresión en Double. Dim MiMoneda, MiDoble MiMoneda = CCur(234.456784) tipo Currency. MiDoble = CDbl(MiMoneda * 8.2 * 0.01) resultado en Double. ' MiMoneda es de ' Convierte el Función Chr Devuelve el carácter asociado al código de carácter ANSI especificado. Sintaxis : Chr(códigodecarácter) El argumento códigodecarácter es un número que identifica un carácter. Los números entre 0 y 31 son iguales a los códigos ASCII estándar, no imprimibles. Por ejemplo, Chr(10) devuelve un carácter de avance de línea. 22 Manual del Alumno El siguiente ejemplo usa la función Chr para devolver el carácter asociado al código de carácter especificado: Dim MiCaracter MiCaracter = Chr(65) MiCaracter = Chr(97) MiCaracter = Chr(62) MiCaracter = Chr(37) ' ' ' ' Devuelve Devuelve Devuelve Devuelve A. a. >. %. Función CInt Devuelve una expresión que se convirtió enVariant del subtipo Integer. Sintaxis : CInt(expresión) El argumento expresión es cualquier expresión válida. En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CInt o CLng para forzar aritmética de enteros en casos en los que normalmente se usaría aritmética de moneda, precisión simple o precisión doble. Si expresión está fuera del intervalo aceptable para el subtipo Integer, se produce un error. El siguiente ejemplo usa la función CInt para convert a value to an Integer: Dim MiDoble, MiEntero MiDoble = 2345.5678 ' MiDoble es de tipo Double. MiEntero = CInt(MiDoble) ' MiEntero contiene 2346. Función CLng Devuelve una expresión que se convirtió en Variant del subtipo Long. Sintaxis : CLng(expresión) El argumento expresión es cualquier expresión válida. En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CInt o CLng para forzar aritmética de enteros en casos en los que, normalmente, se usaría aritmética de precisión simple o precisión doble. Si expresión está fuera del intervalo aceptable para el subtipo Long, se produce un error. El siguiente ejemplo usa la función CLng para convertir un valor en Long: Dim MiVal1, MiVal2, MiLong1, MiLong2 MiVal1 = 25427.45: MiVal2 = 25427.55 are Doubles. MiLong1 = CLng(MiVal1) MiLong2 = CLng(MiVal2) ' MiVal1, MiVal2 ' MiLong1 contiene 25427. ' MiLong2 contiene 25428. 23 Manual del Alumno Función CSng Devuelve una expresión que se convirtió en Variant del subtipo Single. Sintaxis : CSng(expresión) El argumento expresión es cualquier expresión válida. En general, puede documentar su código con las funciones de conversión de tipos de datos para mostrar que el resultado de algunas operaciones se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CDbl o CSng para forzar aritmética de precisión doble o precisión simple en casos en los que, normalmente, se usaría aritmética de moneda o de enteros. Si expresión está fuera del intervalo aceptable para el subtipo Single, se produce un error. El siguiente ejemplo usa la función CSng para convertir un valor en Single: Dim MiDoble1, MiDoble2, MiSimple1, MiSimple2 ' MiDoble1, MiDoble2 are Doubles. MiDoble1 = 75.3421115: MiDoble2 = 75.3421555 MiSimple1 = CSng(MiDoble1) ' MiSimple1 contiene 75.34211. MiSimple2 = CSng(MiDoble2) ' MiSimple2 contiene 75.34216. Función CStr Devuelve una expresión que se convirtió en Variant del subtipo String. Sintaxis : CStr(expresión) El argumento expresión es cualquier expresión válida. En general, puede documentar su código con funciones de conversión de tipos de datos para mostrar que el resultado de alguna operación se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CStr para forzar que el resultado se exprese como String. Los datos almacenados en expresión determinan el valor devuelto de acuerdo con la siguiente tabla: Si expresión es CStr devuelve Boolean Un valor de tipo String que contiene True o False. Date Un valor de tipo String que contiene una fecha en formato de fecha corta de su sistema. Null Un error en tiempo de ejecución. Empty Un valor de tipo String de longitud cero (""). Error Un valor de tipo String que contiene la palabra Error seguido por el número de error. Otro valor numérico Un valor de tipo String contiene el número. 24 Manual del Alumno El siguiente ejemplo usa la función CStr para convertir un valor numérico en String: Dim MiDoble, MiCadena MiDoble = 437.324 MiCadena = CStr(MiDoble) ' MiDoble es de tipo Double. ' MiCadena contiene "437.324". Función Exp Devuelve e (la base de los logaritmos naturales) elevado a una potencia. Sintaxis : Exp(número) El argumento número puede ser cualquier expresión numérica válida. Si el valor de número supera 709.782712893, se produce un error. La constante e aproximadamente igual a 2.718282. El siguiente ejemplo usa la función Exp para devolver e elevado a una potencia: Dim MiAngulo, MiSenoH ' Define el ángulo en radianes. MiAngulo = 1.3 ' Calcula el seno hiperbólico. MiSenoH = (Exp(MiAngulo) - Exp(-1 * MiAngulo)) / 2 Funciones Int y Fix Devuelve la parte entera de un número. Sintaxis : Int(número) Fix(número) El argumento número puede ser cualquier expresión numérica válida. Si número contiene Null, se devuelve Null. Int y Fix quitan la parte fraccional de número y devuelven el valor entero resultante. La diferencia entre Int y Fix es que si número es negativo, Int devuelve el primer entero negativo menor o igual a número, mientras que Fix devuelve el primer entero negativo mayor o igual a número. Por ejemplo, Int convierte -8.4 a -9, y Fix convierte -8.4 a -8. Fix(número) es equivalente a: Sgn(número) * Int(Abs(número)) Los siguientes ejemplo muestran cómo devuelven partes enteras de números las funciones Int y Fix: MiNumero MiNumero MiNumero MiNumero MiNumero MiNumero = = = = = = Int(99.8) Fix(99.2) Int(-99.8) Fix(-99.8) Int(-99.2) Fix(-99.2) ' ' ' ' ' ' Devuelve Devuelve Devuelve Devuelve Devuelve Devuelve 99. 99. -100. -99. -100. -99. Función GetObject Devuelve una referencia a un objeto de automatización desde un archivo. Sintaxis : GetObject([nombrederuta] [, clase]) La sintaxis de la función GetObject tiene las siguientes partes: 25 Manual del Alumno Parte Descripción nombrederuta Opcional; String. Ruta y nombre completos del archivo que contiene el objeto que desea recuperar. Si se omite nombrederuta, se requiere clase. clase Opcional; String. Clase del objeto. El argumento claseusa la sintaxis nombredeaplicación.tipodeobjeto y tiene las siguientes partes: Parte Descripción nombredeaplicación Requerido; String. Nombre de la aplicación que proporciona el objeto. tipodeobjeto Requerido; String. Tipo o clase de objeto que desea crear. Use la función GetObject para tener acceso a un objeto de automatización desde un archivo y asignar el objeto a una variable de objeto. Use la instrucción Set para asignar el objeto devuelto por GetObject a la variable de objeto. Por ejemplo: Dim CADObject Set CADObject = GetObject("C:\CAD\SCHEMA.CAD") Cuando se ejecuta este código, se inicia la aplicación asociada con el nombre de ruta especificado y el objeto del archivo especificado se activa. Si nombrederuta es una cadena de longitud cero (""), GetObject devuelve una nueva instancia de objeto del tipo especificado. Si se omite el argumento nombrederuta, GetObject devuelve un objeto activo del tipo especificado. Si no existe ningún objeto del tipo especificado, se produce un error. Algunas aplicaciones le permiten activar parte de un archivo. Agregue un signo de admiración (!) al final del nombre del archivo y, a continuación, agregue una cadena que identifique la parte del archivo que desea activar. Para obtener información acerca de cómo crear esta cadena, consulte la documentación de la aplicación que creó el objeto. Por ejemplo, en una aplicación de dibujo podría tener varias capas de un dibujo almacenado en un archivo. Podría usar el siguiente código para activar una capa de un dibujo llamado SCHEMA.CAD: Set ObjetoCapa = GetObject("C:\CAD\SCHEMA.CAD!Layer3") Si no especifica la clase de objeto, la automatización determina la aplicación que debe iniciar el objeto para activarlo, basado en el nombre de archivo proporcionado. Sin embargo, es posible que algunos archivos admitan más de una clase de objeto. Por ejemplo, un dibujo puede admitir tres tipos de objeto distintos: un objeto Application, un objeto Drawing y un objeto Toolbar, y todos forman parte del mismo archivo. Para especificar qué objeto desea activar en un archivo, use el argumento opcional clase. Por ejemplo: Dim MiObjeto Set MiObjeto = "FIGMENT.DRAWING") GetObject("C:\DIBUJOS\EJEMPLO.DRW", 26 Manual del Alumno En el ejemplo anterior, FIGMENT es el nombre de una aplicación de dibujo y DRAWING es uno de los tipos de objeto que admite. Una vez activado un objeto, se hace referencia a él en el código mediante la variable de objeto definida. En el ejemplo anterior, se tiene acceso a las propiedades y métodos del nuevo objeto con la variable de objeto MiObjeto. Por ejemplo: MiObjeto.Line 9, 90 MiObjeto.InsertText 9, 100, "Hola mundo." MiObjeto.SaveAs "C:\DIBUJOS\EJEMPLO.DRW" Función Hour Devuelve un número entero entre 0 y 23, ambos incluidos, que representa la hora del día. Sintaxis : Hour(hora) El argumento hora es cualquier expresión que pueda representar una hora. Si hora contiene Null, se devuelve Null. El siguiente ejemplo usa la función Hour para obtener la hora a partir de la hora actual: Dim MiHoraCompleta, MiHora MiHoraCompleta = Now MiHora = Hour(MiHoraCompleta) ' MiHora contiene el número que representa la hora actual. Función IsDate Devuelve un valor de tipo Boolean que indica si una expresión se puede o no convertir en una fecha. Sintaxis : IsDate(expresión) El argumento expresión puede ser cualquier expresión de fecha o expresión de cadena reconocible como fecha u hora. IsDate devuelve True si la expresión es una fecha o si se puede convertir en una fecha válida. De lo contrario, devuelve False. En Microsoft Windows, el intervalo válido de fechas es desde el 1 de enero del año 100 hasta el 31 de diciembre del año 9999; los intervalos varían según el sistema operativo. El siguiente ejemplo usa la función IsDate para determinar si una expresión se puede o no convertir en una fecha: Dim MiFecha, SuFecha, NingunaFecha, MiComprobacion MiFecha = "October 19, 1962": SuFecha = #10/19/62#: NingunaFecha = "Hola" MiComprobacion = IsDate(MiFecha) ' Devuelve True. MiComprobacion = IsDate(SuFecha) ' Devuelve True. MiComprobacion = IsDate(NingunaFecha) ' Devuelve False. 27 Manual del Alumno Función LBound Devuelve el subíndice más pequeño disponible para la dimensión indicada de una matriz. Sintaxis : LBound(nombredematriz[, dimensión]) La sintaxis de la función LBound tiene las siguientes partes: Parte Descripción nombredematriz Nombre de la variable de matriz, que cumple con las convenciones estándar de asignación de nombres de variables. dimensión Número entero que indica de qué dimensión se devuelve el límite inferior. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si se omite dimensión, se asume 1. Función LCase Devuelve una cadena convertida a minúsculas. Sintaxis : LCase(cadena) El argumento cadena es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null. Función Left Devuelve un número de caracteres especificado a partir del lado izquierdo de una cadena. Sintaxis : Left(cadena, longitud) La sintaxis de la función Left tiene los siguientes argumentos: Parte Descripción cadena Expresión de cadena a partir de la que se devuelven los caracteres que están más a la izquierda. Si cadena contiene Null, se devuelve Null. longitud Expresión numérica que indica cuántos caracteres se van a devolver. Si es igual a 0, se devuelve una cadena de longitud cero (""). Si es mayor o igual al número de caracteres de cadena, se devuelve la cadena completa. Función Len Devuelve el número de caracteres en una cadena o el número de bytes necesarios para almacenar una variable. Sintaxis : Len(cadena | nombredevariable) La sintaxis de la función Len tiene las siguientes partes: Parte Descripción cadena Cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null. nombredevariable Cualquier nombre de variable válido. Si nombrevariable contiene Null, se devuelve Null. 28 Manual del Alumno En el siguiente ejemplo se usa la función Len para devolver el número de caracteres que contiene una cadena: Dim MiCadena MiCadena = Len("VBSCRIPT") MiCadena contiene 8. Función LoadPicture Devuelve un objeto de imagen. Sólo está disponible en plataformas de 32 bits. Sintaxis : LoadPicture(nombredeimagen) El argumento nombredeimagen es una expresión de cadena que indica el nombre del archivo de imagen que se va a cargar. Los formatos gráficos reconocidos por LoadPicture incluyen archivos de mapa de bits (.bmp), archivos de iconos (.ico), archivos cifrados de longitud continua (.rle), metaarchivos (.wmf), metaarchivos mejorados (.emf), archivos GIF (.gif) y archivos JPEG (.jpg). Funciones LTrim, RTrim y Trim Devuelve una copia de una cadena sin espacios iniciales (LTrim), espacios finales (RTrim) o ambos (Trim). Sintaxis : LTrim(cadena) RTrim(cadena) Trim(cadena) El argumento cadena es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null. Los siguientes ejemplos usan las funciones LTrim, RTrim y Trim para recortar espacios iniciales, espacios finales y ambos, respectivamente: Dim MiVar MiVar = LTrim(" vbscript ") MiVar = RTrim(" vbscript ") MiVar = Trim(" vbscript ") 'MiVar contiene "vbscript ". 'MiVar contiene " vbscript". 'MiVar contiene "vbscript". Función Mid Devuelve un números especificado de caracteres a partir de una cadena. Sintaxis : Mid(cadena, inicio[, longitud]) La sintaxis de la función Mid tiene los siguientes argumentos: Parte Descripción cadena Expresión de cadena a partir de la que se devuelven los caracteres. Si cadena contiene Null, se devuelve Null. inicio Posición de carácter en cadena en la que comienza la parte que se va a obtener. Si inicio es mayor que el número de caracteres que hay en cadena, Mid devuelve una cadena de longitud cero (""). longitud Número de caracteres que se va a devolver. Si se omite o si hay menos caracteres que longitud en el texto (incluido el carácter que está en la posición inicio), se devuelven todos los caracteres desde la posición inicio hasta el final de la cadena. Para determinar el número de caracteres que hay en cadena, use la función Len. 29 Manual del Alumno El siguiente ejemplo usa la función Mid para devolver seis caracteres, comenzando en el cuarto carácter, en una cadena: Dim MiVar MiVar = Mid("VB Script es divertido", 4, 6) 'MiVar contiene "Script". Función Minute Devuelve un número entero entre 0 y 59, ambos incluidos, que representa el minuto de la hora. Sintaxis : Minute(hora) El argumento hora es cualquier expresión que puede representar una hora. Si hora contiene Null, se devuelve Null. El siguiente ejemplo usa la función Minute para devolver el minuto de la hora: Dim MiVar MiVar = Minute(Now) Función Month Devuelve un número entero entre 1 y 12, ambos incluidos, que representa el mes del año. Sintaxis : Month(fecha) El argumento fecha es cualquier expresión que pueda representar una fecha. Si fecha contien Null, se devuelve Null. El siguiente ejemplo usa la función Mes para devolver el mes actual: Dim MiVar MiVar = Month(Now) ' MiVar contiene el número correspondiente al mes actual. Función MonthName Devuelve una cadena que indica el mes especificado. Sintaxis : MonthName(mes[, abreviar]) La sintaxis de la función MonthName tiene las siguientes partes: Parte Descripción mes Requerido. La designación numérica del mes. Por ejemplo, enero es 1, febrero es 2 y así sucesivamente. abreviar Opcional. Valor de tipo Boolean que indica si el nombre del mes se debe abreviar. Si se omite, el valor predeterminado es False, que significa que el nombre del mes no se debe abreviar. El siguiente ejemplo usa la función MonthName para devolver un nombre de mes abreviado para una expresión de fecha: Dim MiVar MiVar = MonthName(10, True) ' MiVar contiene "Oct". 30 Manual del Alumno Función Now Devuelve la fecha y hora actuales según la configuración de la fecha y hora de su sistema. Sintaxis : Now El siguiente ejemplo usa la función Now para devolver la fecha y hora actuales: Dim MiVar MiVar = Now ' MiVar contiene la fecha y hora actuales. Función RGB Devuelve un número entero que representa un valor de un color RGB. Sintaxis : RGB(rojo, verde, azul) La función RGB tiene las siguientes partes: Parte Descripción rojo Requerido. Número en el intervalo entre 0 y 255 que representa el componente rojo del color. verde Requerido. Número en el intervalo entre 0 y 255 que representa el componente verde del color. azul Requerido. Número en el intervalo entre 0 y 255 que representa el componente azul del color. Los métodos y propiedades de aplicaciones que aceptan una especificación de color esperan que la especificación sea un número que represente un valor de un color RGB. Un valor de un color RGB especifica la intensidad relativa de rojo, verde y azul para producir la visualización de un color específico. El byte menos significativo contiene el valor del rojo, el byte del medio contiene el valor del verde y el byte más significativo contiene el valor del azul. Para aplicaciones que requieren que el orden de los bytes se invierta, la siguiente función proporcion la misma información con los bytes invertidos: Function InvertirRGB(rojo, verde, azul) InvertirRGB= CLng(azul + (verde * 256) + (rojo * 65536)) End Function Se asume que el valor de cualquier argumento RGB que exceda 255, es 255. Función Right Devuelve un número de caracteres especificado a partir del lado derecho de una cadena. Sintaxis : Right(cadena, longitud) La sintaxis de la función Right tiene los siguientes argumentos: 31 Manual del Alumno Parte Descripción cadena Expresión de cadena desde la que se devuelven los caracteres que están más a la derecha. Si cadena contiene Null, se devuelve Null. longitud Expresión numérica que indica cuántos caracteres se van a devolver. Si es igual a 0, se devuelve una cadena de longitud cero. Si es mayor o igual al número de caracteres que hay en cadena, se devuelve toda la cadena. Para determinar el número de caracteres que hay en cadena, use la función Len. El siguiente ejemplo usa la función Right para devolver un número especificado de caracteres a partir del lado derecho de una cadena: Dim CualquierCadena, MiCad CualquierCadena = "Hola mundo" MiCad = Right(CualquierCadena, 1) MiCad = Right(CualquierCadena, 6) MiCad = Right(CualquierCadena, 20) 'Define la ' Devuelve ' Devuelve ' Devuelve cadena. "d". " mundo". "Hola mundo". Función Rnd Devuelve un número aleatorio. Sintaxis : Rnd[(número)] El argumento número puede ser cualquier expresión numérica válida. La función Rnd devuelve un valor menor que 1 pero mayor o igual a 0. El valor de número determina cómo Rnd genera un número aleatorio: Si número es Rnd genera Menor que cero El mismo número cada vez, con número como semilla. Mayor que cero El siguiente número aleatorio de la secuencia. Igual a cero El último número generado. No suministrado El siguiente número aleatorio de la secuencia. Para cualquier semilla inicial proporcionada, se genera la misma secuencia de números porque cada llamada sucesiva a la función Rnd usa el número anterior como semilla para el siguiente número de la secuencia. Antes de llamar a Rnd, use la instrucción Randomize sin ningún argumento para iniciar el generador de números aleatorios con una semilla basada en el reloj del sistema. Para producir enteros aleatorios dentro de un intervalo específico, use esta fórmula: Int((límitesuperior - límiteinferior + 1) * Rnd + límiteinferior) Aquí, límitesuperior es el número más alto del intervalo y límiteinferior es el número más bajo del intervalo. 32 Manual del Alumno Función Round Devuelve un número redondeado a un número especificado de posiciones decimales. Sintaxis : Round(expresión[, posicionesdecimales]) La sintaxis de la función Round tiene las siguientes partes: Parte Descripción expresión Requerido. Expresión numérica que se va a redondear. posicionesdecimales Opcional. Número que indica cuántas posiciones a la derecha del decimal se incluyen en el redondeo. Si se omite, la función Round devuelve enteros. El siguiente ejemplo usa la función Round para redondear un número a dos posiciones decimales: Dim MiVar, pi pi = 3.14159 MiVar = Round(pi, 2) 'MiVar contiene 3.14. Función Second Devuelve un número entero entre 0 y 59, ambos incluidos, que representa el segundo del minuto. Sintaxis : Second(hora) El argumento hora es cualquier expresión que pueda representar una hora. Si hora contiene Null, se devuelve Null. El siguiente ejemplo usa la función Second para devolver el segundo actual: Dim MiSeg MiSeg = Second(Now) 'MiSeg contiene el número que representa el segundo actual. Función Sgn Devuelve un entero que indica el signo de un número. Sintaxis : Sgn(número) El argumento número puede ser cualquier expresión numérica válida. Valores devueltos La función Sgn devuelve los siguientes valores: Si número es Sgn devuelve Mayor que cero 1 Igual a cero 0 Menor que cero -1 El signo del argumento número determina el valor devuelto de la función Sgn. El siguiente ejemplo usa la función Sgn para determinar el signo de un número: Dim MiVar1, MiVar2, MiVar3, MiSigno 33 Manual del Alumno MiVar1 = 12: MiVar2 = -2.4: MiVar3 = 0 MiSigno = Sgn(MiVar1) ' Devuelve 1. MiSigno = Sgn(MiVar2) ' Devuelve -1. MiSigno = Sgn(MiVar3) ' Devuelve 0. Función Space Devuelve una cadena que consta del número de espacios especificado. Sintaxis : Space(número) El argumento número es el número de espacios que desea en la cadena. El siguiente ejemplo usa la función Space para devolver una cadena que consta de un número de espacios especificado: Dim MiCadena MiCadena = Space(10) ' Devuelve una cadena con 10 espacios. MiCadena = "Hola" & Space(10) & "mundo" ' Inserta 10 espacios entre las dos cadenas. Función Sqr Devuelve la raíz cuadrada de un número. Sintaxis : Sqr(número) El argumento número puede ser cualquier expresión numérica válida mayor o igual a 0. El siguiente ejemplo usa la función Sqr para calcular la raíz cuadrada de un número: Dim MyRaiz MyRaiz = Sqr(4) MyRaiz = Sqr(23) MyRaiz = Sqr(0) MyRaiz = Sqr(-4) ' ' ' ' Devuelve 2. Devuelve 4.79583152331272. Devuelve 0. Genera un error en tiempo de ejecución. Función String Devuelve una cadena de caracteres repetidos de la longitud especificada. Sintaxis : String(número, carácter) La sintaxis de la función String tiene los siguientes argumentos: Parte Descripción número Longitud de la cadena devuelta. Si número contiene Null, se devuelve Null. carácter Código de carácter que especifica el carácter o expresión de cadena cuyo primer carácter se usa para generar la cadena devuelta. Si carácter contiene Null, se devuelve Null. Si especifica un número para carácter mayor que 255, String convierte el número en un código de carácter válido con la fórmula: carácter Mod 256 El siguiente ejemplo usa la función String para devolver cadenas de caracteres repetidos de la longitud especificada: 34 Manual del Alumno Dim MiCadena MiCadena = String(5, "*") MiCadena = String(5, 42) MiCadena = String(10, "ABC") ' Devuelve "*****". ' Devuelve "*****". ' Devuelve "AAAAAAAAAA". Función UBound Devuelve el mayor subíndice disponible para la dimensión indicada de una matriz. Sintaxis : UBound(nombredematriz[, dimensión]) La sintaxis de la función UBound tiene las siguientes partes: Parte Descripción nombredematriz Requerido. nombre de la variable de matriz que cumple con el estándar de asignación de nombres de variables. dimensión Opcional. Número entero que indica para qué dimensión se va a devolver el límite superior. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si se omite dimensión, se asume que es igual a 1. La función UBound se usa con la función LBound para determinar el tamaño de una matriz. Use la función LBound para buscar el límite inferior de una dimensión de una matriz. El límite inferior de cualquier dimensión siempre es igual a 0. Como resultado, UBound devuelve los siguientes valores para una matriz con estas dimensiones: Dim A(100,3,4) Instrucción Valor devuelto UBound(A, 1) 100 UBound(A, 2) 3 UBound(A, 3) 4 Función UCase Devuelve una cadena que se convirtió en mayúsculas. Sintaxis : UCase(cadena) El argumento cadena es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null. Sólo se convierten en mayúsculas las letras minúsculas; todas las letras mayúsculas y caracteres que no son letras no cambian. El siguiente ejemplo usa la función UCase para devolver una versión en mayúsculas de una cadena: Dim MiPalabra MiPalabra = UCase("Hola mundo") ' Devuelve "HOLA MUNDO". 35 Manual del Alumno Función VarType Devuelve un valor que indica el subtipo de una variable. Sintaxis : VarType(nombredevariable) El argumento nombredevariable puede ser cualquier variable. Valores devueltos La función VarType devuelve los siguientes valores: Constante Valor Descripción vbEmpty 0 Empty (no iniciado) vbNull 1 Null (datos no válidos) vbInteger 2 Entero vbLong 3 Entero largo vbSingle 4 Número de coma flotante de precisión simple vbDouble 5 Número de coma flotante de precisión doble vbCurrency 6 Moneda vbDate 7 Fecha vbString 8 Cadena vbObject 9 objeto de automatización vbError 10 Error vbBoolean 11 Valor de tipo Boolean vbVariant 12 Valor de tipo Variant (sólo se usa con matrices de valores de tipo Variant) vbDataObject 13 Un objeto de acceso a datos vbByte 17 Valor de tipo Byte vbArray 8192 Matriz Nota Estas constantes las especifica VBScript. Como resultado, los nombres se pueden usar en cualquier parte del código en lugar de los valores reales. Función Weekday Devuelve un número entero que representa el día de la semana. Sintaxis : Weekday(fecha, [primerdíasemana]) La sintaxis de la función Weekday tiene los siguientes argumentos: Parte Descripción fecha Cualquier expresión que pueda representar una fecha. Si fecha contiene Null, se devuelve Null. primerdíasemana Una constante que especifica el primer día de la semana. Si se omite, se asume vbSunday. 36 Manual del Alumno Valores El argumento primerdíasemana tiene los siguientes valores: Constante Valor Descripción vbUseSystem 0 Usar configuración de API NLS. vbSunday 1 Domingo vbMonday 2 Lunes vbTuesday 3 Martes vbWednesday 4 Miércoles vbThursday 5 Jueves vbFriday 6 Viernes vbSaturday 7 Sábado Valores devueltos La función Weekday puede devolver cualquiera de los siguientes valores: Constante Valor Descripción vbSunday 1 Domingo vbMonday 2 Lunes vbTuesday 3 Martes vbWednesday 4 Miércoles vbThursday 5 Jueves vbFriday 6 Viernes vbSaturday 7 Sábado El siguiente ejemplo usa la función Weekday para obtener el día de la semana de una fecha especificada: Dim MiFecha, MiDiaDeLaSemana MiFecha = #19 de octubre de 1962# ' Asigna una fecha. MiDiaDeLaSemana = Weekday(MiFecha) ' MiDiaDeLaSemana contiene 6 porque MiFecha representa un viernes. Función WeekdayName Devuelve una cadena que indica el día de la semana especificado. Sintaxis : WeekdayName(díasemana, abreviar, primerdíasemana) La sintaxis de la función WeekdayName tiene las siguientes partes: Parte Descripción díasemana Requerido. La designación numérica para el día de la semana. El valor numérico de cada día depende de la configuración del valor primerdíasemana. abreviar Opcional. Valor de tipo Boolean que indica si el nombre del día de la semana se debe abreviar. Si se omite, el valor predeterminado es False, que significa que el nombre del día de la semana no se abrevia. 37 Manual del Alumno primerdíasemana Opcional. Valor numérico que indica el primer día de la semana. Consulte la sección Valores para saber cuáles son los valores permitidos. Valores El argumento primerdíasemana puede tener los siguientes valores: Constante Valor Descripción vbUseSystem 0 Usar configuración de API NLS. vbSunday 1 Domingo (predeterminado) vbMonday 2 Lunes vbTuesday 3 Martes vbWednesday 4 Miércoles vbThursday 5 Jueves vbFriday 6 Viernes vbSaturday 7 Sábado El siguiente ejemplo usa la función WeekDayName para devolver el día especificado: Dim MiFecha MiFecha = WeekDayName(6, True) 'MiFecha contiene Vie. Función Year Devuelve un número entero que representa el año. Sintaxis : Year(fecha) El argumento fecha es cualquier expresión que pueda representar una fecha. Si fecha contiene Null, se devuelve Null. El siguiente ejemplo usa la función Year para obtener el año a partir de una fecha especificada: Dim MiFecha, MiAno MiFecha = #19 de octubre de 1962# ' Asigna una fecha. MiAno = Year(MiFecha) ' MiAno contiene 1962. 38 Manual del Alumno Semana 5 : Procedimientos en VBScript Procedimientos de VBScript Tipos de procedimientos En VBScript hay dos tipos de procedimientos; el procedimiento Sub y el procedimiento Function. Procedimientos Sub Un procedimiento Sub es una serie de instrucciones de VBScript, entre instrucciones Sub y End Sub, que ejecutan acciones pero no devuelven ningún valor. Un procedimiento Sub puede tener argumentos (constantes, variables o expresiones que se transfieren por una llamada a un procedimiento). Si un procedimiento Sub no tiene argumentos, su instrucción Sub debe incluir un par de paréntesis vacíos (). El siguiente procedimiento Sub utiliza dos funciones de VBScript intrínsecas o incorporadas, MsgBox y InputBox, para preguntar al usuario cierta información. Después muestra los resultados del cálculo en base a esa información. El cálculo se ejecuta en un procedimiento Function creado mediante VBScript. Se muestra en la explicación del procedimiento Function a continuación. Sub ConvertirTemp() temp = InputBox("Escriba la temperatura en grados Farenheit.", 1) MsgBox "La temperatura es de " & Celsius(temp) & " grados Celsius." End Sub Instrucción Sub Declara el nombre, argumentos y código de que forman el cuerpo de un procedimiento Sub. Sintaxis : [Public | Private] Sub nombre [(listadeargumentos)] [instrucciones] [Exit Sub] [instrucciones] End Sub La sintaxis de la instrucción Sub tiene las siguientes partes: Parte Descripción Public Indica que el procedimiento Sub es accesible desde todos los demás procedimientos en todas las secuencias de comandos. Private Indica que el procedimiento Sub es accesible sólo desde los procedimientos de la secuencia de comandos en la que se declara. nombre Nombre del procedimiento Sub; sigue la convención de nomenclatura estándar de variables. listadeargumentos Lista de variables que representan los argumentos pasados al procedimiento Sub al ser llamado. Las distintas variables se separan 39 Manual del Alumno con comas. instrucciones Cualquier grupo de instrucciones para ser ejecutadas dentro del cuerpo del procedimiento Sub. El argumento listadeargumentos tiene las siguiente sintaxis y las siguientes partes: [ByVal | ByRef] nombredevariable[( )] Parte Descripción ByVal Indica que el argumento se pasa por valor. ByRef Indica que el argumento se pasa por referencia. nombredevariable Nombre de la variable que representa el argumento; sigue la convención de nomenclatura estándar de variables. Si no se especifica explícitamente mediante Public o Private, los procedimientos Sub son públicos de forma predeterminada, esto es, son visibles a todos los demás procedimientos en la secuencia de comandos. El valor de las variables en un procedimiento Sub no se preserva entre llamadas al procedimiento. Todo el código ejecutable debe estar contenido en procedimientos. No se puede definir un procedimiento Sub dentro de otro procedimiento Sub o Function. La instrucción Exit Sub produce la salida inmediata del procedimiento Sub. La ejecución del programa continúa con la instrucción siguiente a la que llamó al procedimiento Sub. Puede aparecer cualquier número de instrucciones Exit Sub en cualquier parte de un procedimiento Sub. Como un procedimiento Function, un procedimiento Sub es un procedimiento independiente que puede tomar argumentos, ejecutar una serie de instrucciones y cambiar el valor de sus argumentos. Sin embargo, a diferencia de un procedimiento Function, que devuelve un valor, un procedimiento Sub no puede utilizarse en una expresión. Puede llamar un procedimiento Sub mediante el nombre del procedimiento seguido por la lista de argumentos. Vea la instrucción Call para obtener información específica acerca de como llamar procedimientos Sub. Procedimientos Function Un procedimiento Function es una serie de instrucciones VBScript entre instrucciones Function y End Function. Un procedimiento Function es similar a un procedimiento Sub, pero también puede devolver un valor. Un procedimiento Function puede tener argumentos (constantes, variables o expresiones que se transfieren por una llamada a un procedimiento). Si un procedimiento Function no tiene argumentos, su instrucción Function debe incluir un par de paréntesis vacíos. Un procedimiento Function devuelve un valor asignando un valor a su nombre en una o más instrucciones del procedimiento. El tipo de datos devuelto por un procedimiento Function siempre es un tipo Variant. En el siguiente ejemplo, la función Celsius calcula los grados Celsius a partir de grados Fahrenheit. Cuando se llama a la función desde el procedimiento Sub ConvertTemp, se transfiere a la función una variable que contiene el valor del 40 Manual del Alumno argumento. El resultado del cálculo se devuelve al procedimiento que realizó la llamada y se muestra en un cuadro de mensajes. Sub ConvertirTemp() temp = InputBox("Escriba la temperatura en grados Farenheit.", 1) MsgBox "La temperatura es de " & Celsius(temp) & " grados Celsius." End Sub Function Celsius(fGrados) Celsius = (fGrados - 32) * 5 / 9 End Function Instrucción Function Declara el nombre, argumentos y código que forma el cuerpo de un procedimiento Function. Sintaxis : [Public | Private] Function nombre [(listadeargumentos)] [instrucciones] [nombre = expresión] [Exit Function] [instrucciones] [nombre = expresión] End Function La sintaxis de la instrucción Function tiene las siguientes partes: Parte Descripción Public Indica que el procedimiento Function es accesible para todos los demás procedimientos de todas las secuencias de comandos. Private Indica que el procedimiento Function es accesible sólo para los demás procedimientos de la secuencia de comandos donde está declarado. nombre Nombre de Function que cumple con las convenciones estándar de asignación de nombres de variables. listadeargumentos Lista de variables que representa los argumentos que se pasan al procedimiento Function cuando se llama. Múltiples variables se separan con comas. instrucciones Cualquier grupo de instrucciones que se va a ejecutar dentro del cuerpo del procedimiento Function. expresión Valor devuelto por Function. El argumento listadeargumentos tiene la siguiente sintaxis y partes: [ByVal | ByRef] nombredevariable[( )] Parte Descripción ByVal Indica que el argumento se pasa por valor. ByRef Indica que el argumento se pasa por referencia. nombredevariable Nombre de la variable que representa el argumento. Cumple con las convenciones estándar de asignación de nombres de variables. 41 Manual del Alumno Si no se especifica explícitamente mediane Public o Private, los procedimientos Function son públicos de manera predeterminada, es decir, son visibles a todos los demás procedimientos de su secuencia de comandos. El valor de las variables locales de un procedimiento Function no se mantiene entre llamadas al procedimiento. Todo el código ejecutable debe estar contenido en procedimientos. No se puede definir un procedimiento Function dentro de otro procedimiento Function o Sub. La instrucción Exit Function produce una salida inmediata desde un procedimiento Function. La exjecución del programa continúa con la instrucción siguiente a la instrucción que llamó al procedimiento Function. Puede aparecer cualquier número de instrucciones Exit Function en cualquier parte de un procedimiento Function. Al igual que los procedimientos Sub, un procedimiento Function es un procedimiento separado que puede recibir argumentos, realizar una seria de instrucciones y cambiar los valores de sus argumentos. Sin embargo, a diferencia de un procedimiento Sub, puede usar un procedimiento Function en la parte derecha de una expresión de la misma forma que usa las funciones intrínsecas, como Sqr, Cos o Chr, cuando desee usar el valor devuelto por la función. Para llamar a un procedimiento Function se usa el nombre de la función, seguido de la lista de argumentos entre paréntesis, en una expresión. Vea la instrucción Call para obtener información específica acerca de cómo llamar procedimientos Function. Precaución Los procedimientos Function pueden ser recursivos; es decir, se pueden llamar a ellos mismos para realizar una tarea determinada. Sin embargo, la recursividad puede producir un desbordamiento de la pila. Para devolver un valor desde una función, asigne el valor al nombre de la función. Puede aparecer cualquier cantidad de asignaciones de ese tipo en cualquier lugar, dentro del procedimiento. Si no se asigna ningún valor a nombre, el procedimiento devuelve un valor predeterminado: una función numérica devuelve 0 y una función de cadena devuelve una cadena de longitud cero (""). Una función que devuelve una referencia a un objeto devuelve Nothing si no se asigna ninguna referencia de objeto a nombre (mediante el uso de Set) dentro de Function. El siguiente ejemplo muestra cómo asignar un valor devuelto a una función llamada BusquedaBinaria. En este caso, se aigna False al nombre para indicar que no se encontró algún valor. Function BusquedaBinaria(. . .) . . . ' Valor no encontrado. Devuelve un valor False. If inferior > superior Then BusquedaBinaria = False Exit Function End If . . . End Function Las variables usadas en procedimientos Function pueden ser de dos categorías: las que se declaran explícitamente dentro del procedimiento y las que no. Las variables que se declaran explícitamente en un procedimiento (mediante el uso de Dim o el equivalente) son siempre locales al procedimiento. Las variables que se usan pero no se declaran explícitamente en un procedimiento también son locales a 42 Manual del Alumno menos que se declaren explícitamente en un nivel superior desde fuera del procedimiento. Obtención de datos dentro y fuera de procedimientos Cada fragmento de datos se transfiere a los procedimientos utilizando un argumento. Los argumentos sirven como marcadores de posición para los datos que desea transferir al procedimiento. Cuando crea un procedimiento utilizando la instrucción Sub o la instrucción Function, se deben incluir paréntesis después del nombre del procedimiento. Los argumentos se colocan dentro de estos paréntesis, separados por comas. En el siguiente ejemplo, fGrados es un marcador de posición para el valor que se va a transferir a la función Celsius para la conversión: Function Celsius(fGrados) Celsius = (fGrados - 32) * 5 / 9 End Function Para obtener datos fuera de un procedimiento, debe utilizar un procedimiento Function. Recuerde que un procedimiento Function puede devolver un valor, mientras que un procedimiento Sub no puede hacerlo. Uso de los procedimientos Sub y Function en código Un procedimiento Function en el código, siempre se debe utilizar en la parte derecha de una asignación de variable o en una expresión. Por ejemplo: Temp = Celsius(fGrados) o MsgBox "La temperatura Celsius es de " & Celsius(fGrados) & " grados." Para llamar a un procedimiento Sub desde otro procedimiento, escriba sólo el nombre del procedimiento junto con los valores de los argumentos necesarios, separados por una coma. La instrucción Call no se necesita, pero si la utiliza, debe escrirbir los argumentos entre paréntesis. El siguiente ejemplo muestra dos llamadas al procedimiento MiProc. Uno utiliza la instrucción Call en el código y el otro no. Ambos procedimientos hacen exactamente lo mismo. Call MiProc(primerarg, segundoarg) MiProc primerarg, segundoarg Observe que los paréntesis se omiten en la llamada cuando no se utiliza la instrucción Call. 43 Manual del Alumno Semana 6 : Estructuras de control. Uso de instrucciones condicionales Control de la ejecución del programa YPuede controlar el flujo de su secuencia de comandos con instrucciones condicionales e instrucciones de bucle. Utilizando instrucciones condicionales, puede escribir código de VBScript que tome decisiones y repita acciones. Las siguientes instrucciones condicionales están disponibles en VBScript: Instrucción If...Then...Else Instrucción Select Case Toma de decisiones utilizando If ... Then ... Else La instrucción If...Then...Else sse utiliza para evaluar si una condición es True o False y después especificar qué instrucciones ejecutar, dependiendo del resultado. Normalmente, la condición es una expresión que utiliza un operador de comparación para comparar un valor o una variable con otra. Para obtener más información acerca de los operadores de comparación, consulte Operadores de comparación. Las instrucciones If...Then...Else se pueden anidar en tantos niveles como necesite. Instrucción If...Then...Else Ejecuta de manera condicional un grupo de instrucciones, según el valor de una expresión. Sintaxis : If condición Then instrucciones[Else instruccioneselse] O puede usar la sintaxis en forma de bloque: If condición Then [instrucciones] [ElseIf condición-n Then [instruccioneselseif]] . . . [Else [instruccioneselse]] End If La sintaxis de la instrucción If...Then...Else tiene las siguientes partes: Parte Descripción condición Uno o más de los siguientes dos tipos de expresiones: Una expresión numérica o expresión de cadena que se evalúa a True o False. Si condición es Null, condición se trata como False. Una expresión de la forma TypeOf nombredeobjeto Is tipodeobjeto. nombredeobjeto es cualquier referencia a un objeto y tipodeobjetoes 44 Manual del Alumno cualquier tipo de objeto válido. La expresión es igual a True si nombredeobjeto es el tipo de objeto especificado por tipodeobjeto; en caso contrario es igual a False. instrucciones Una o más instrucciones separadas por dos puntos; que se ejecuta si condición es True. condición-n Igual que condición. instruccioneselseif Una o más instrucciones que se ejecutan si la condición-n asociada es True. instruccioneselse Una o más instrucciones que se ejecutan si ninguna expresión condición o condición-n anterior es igual a True. Ejecución de instrucciones si una condición es True Si sólo necesita ejecutar una instrucción cuando una condición es True, puede utilizar la sintaxis de linea única de la instrucción If...Then...Else. El siguiente ejemplo muestra la sintaxis de línea única; observe que este ejemplo omite la palabra clave Else. Sub FechaFija() Dim miFecha miFecha = #12/05/95# If miFecha < Now Then miFecha = Now End Sub Si desea ejecutar más de una línea de código, debe utilizar la sintaxis de múltiples líneas (o de bloque). Esta sintaxis incluye la instrucción End If, como se muestra en el siguiente ejemplo: Sub AvisoUsuario(valor) If valor = 0 Then EtiquetaAviso.ForeColor = vbRojo EtiquetaAviso.Font.Bold = True EtiquetaAviso.Font.Italic = True End If End Sub Ejecución de ciertas instrucciones si la condición es True y ejecución de otras si es False Puede utilizar una instrucción If...Then...Else para definir dos bloques de instrucciones ejecutables: un bloque que se ejecuta si la condición es True y otro que se ejecuta si la condición es False. Sub AvisoUsuario(valor) If valor = 0 Then EtiquetaAviso.ForeColor = EtiquetaAviso.Font.Bold = EtiquetaAviso.Font.Italic Else EtiquetaAviso.Forecolor = EtiquetaAviso.Font.Bold = vbRojo True = True vbNegro False 45 Manual del Alumno EtiquetaAviso.Font.Italic = False End If End Sub Decisión entre varias alternativas Una variación en la instrucción If...Then...Else le permite elegir entre varias alternativas. Agregar la cláusula ElseIf amplía la funcionalidad de la instrucción If...Then...Else para que pueda controlar el flujo del programa basándose en diferentes posibilidades. Por ejemplo: Sub ValorDevuelto(valor) If valor = 0 Then MsgBox valor ElseIf value = 1 Then MsgBox valor ElseIf value = 2 then Msgbox valor Else Msgbox "¡Valor fuera de límites!" End If Puede agregar tantas cláusulas ElseIf como necesite para proporcionar opciones alternativas. El uso intensivo de cláusulas ElseIf frecuentemente llega a ser voluminosos. La mejor forma de elegir entre varias alternativas es la instrucción Select Case. Toma de decisiones utilizando Select Case La estructura Select Case proporciona una alternativa a la ejecución de If...Then...ElseIf selectivamente en un bloque de instrucciones de entre múltiples bloques de instrucciones. Una instrucción Select Case proporciona una funcionalidad similar a la instrucción If...Then...Else, pero hace el códgio más eficiente y legible. Una estructura Select Case trabaja con una expresión de comprobación sencilla que se calcula una vez, al comienzo de la estructura. Después el resultado de la expresión se compara con los valores para cada Case. Si existe una coincidencia, se ejecuta el bloque de instrucciones asociado con ese Case: Select Case Document.Formulario1.TipoTarjeta.Options(ÍndiceSeleccionado).Text Case "MasterCard" MostrarLogoMC ValidarCuentaMC Case "Visa" MostrarLogoVisa ValidarCuentaVisa Case "American Express" MostrarLogoAMEXCO ValidarCuentaAMEXCO Case Else MostrarOtraImagen VolverAPedir End Select 46 Manual del Alumno Observe que la estructura Select Case calcula una expresión una vez al comienzo de la estructura. Por el contrario, la estructura If...Then...ElseIf puede evaluar una expresión diferente en cada instrucción ElseIf. Sólo puede reemplazar una estructura If...Then...ElseIf con una estructura Select Case si cada instrucción ElseIf calcula la misma expresión. Instrucción Select Case Ejecuta uno de varios grupos de instrucciones, según el valor de una expresión. Sintaxis Select Case expresióndecomprobación [Case listadeexpresiones-n [instrucciones-n]] . . . [Case Else listadeexpresiones-n [instruccioneselse-n]] End Select La sintaxis de la instrucción Select Case tiene las siguientes partes: Parte Descripción expresióndecomprobación Cualquier expresión numérica o expresión de cadena. listadeexpresiones-n Requerido si aparece Case. Lista delimitada de una o más expresiones. instrucciones-n Una o más instrucciones que se ejecutan si expresióndecomprobación coincide con cualquier parte de listadeexpresiones-n. instruccioneselse-n Una o más instrucciones ejecutadas si expresióndecomprobación no coincide con ninguna de las cláusulas Case. Si expresióndecomprobación coincide con alguna expresión Case listadeexpresiones, las instrucciones que aparecen a continuación de la cláusula Case se ejecutan hasta la siguiente cláusula Case, o para la última cláusula, hasta End Select. Luego, el control pasa a la instrucción que sigue a End Select. Si expresióndecomprobación coincide con una expresión listadeexpresiones en más de una cláusula Case, sólo se ejecutan las instrucciones que siguen a la primera coincidencia. La cláusula Case Else se usa para indicar que se ejecute instruccioneselse si no se encuentra ninguna coincidencia entre expresióndecomprobación y una listadeexpresiones en cualquier otra selección Case. Aunque no es necesario, es una buena idea tener una instrucción Case Else en su bloque Select Case para controlar los valores de expresióndecomprobación imprevistos. Si ningún Case listadeexpresiones coincide con expresióndecomprobación y no hay una instrucción Case Else, la ejecución continúa en la instrucción siguiente a End Select. Las instrucciones Select Case se pueden anidar. cada instrucción Select Case anidada debe tener una instrucción End Select correspondiente. El siguiente ejemplo muestra el uso de la instrucción Select Case: 47 Manual del Alumno Dim Color, MiVar Sub CambiarFondo (Color) MiVar = lcase (Color) Select Case MiVar Case "rojo" document.bgColor = "red" Case "verde" document.bgColor = "green" Case "azul" document.bgColor = "blue" Case Else MsgBox "seleccione otro color" End Select End Sub Bucles mediante código Uso de bucles para repetir código Los bucles le permiten ejecutar un grupo de instrucciones de forma repetida. Algunos bucles repiten instrucciones hasta que una condición es False; otros repiten instrucciones hasta que la condición es True. También hay bucles que repiten instrucciones un número de veces específico. En VBScript están disponibles las siguientes instrucciones de bucles: Do...Loop: ejecuta el bucle mientras o hasta que una condición es True While...Wend: ejecuta el bucle mientras una condición es True For...Next: utiliza un contador para ejecutar instrucciones un número de veces específico For Each...Next: Repite un grupo de instrucciones para cada elemento de una colección o para cada elemento de una matriz. Uso de bucles Do Puede utilizar las instrucciones Do...Loop para ejecutar un bloque de instrucciones un número de veces indefinido. Las instrucciones se repiten mientras una condición es True o hasta que una condición pasa a ser True. Instrucción Do...Loop Repite un bloque de instrucciones mientras una condición es True o hasta que una condición es True. 48 Manual del Alumno Sintaxis Do [{While | Until} condición] [instrucciones] [Exit Do] [instrucciones] Loop O puede usar la sintaxis: Do [instrucciones] [Exit Do] [instrucciones] Loop [{While | Until} condición] La sintaxis de la instrucción Do...Loop tiene las siguientes partes: Parte Descripción condición Expresión numérica o expresión de cadena que es True o False. Si condición es Null, condición se trata como False. instrucciones Una o más instrucciones que se repiten mientras o hasta que condición es True. Repetición de instrucciones mientras una condición es True Utilice la palabra clave While para comprobar una condición en una instrucción Do...Loop. Puede comprobar la condición antes de entrar en el bucle (como se muestra en el ejemplo CompPrimerWhile a continuación) o puede comprobarla después de que el bucle se haya ejecutado al menos una vez (como se muestra en el ejemplo CompUltimoWhile). En el procedimiento CompPrimerWhile, si miNum se establece a 9 en lugar de 20, las instrucciones que hay dentro del bucle nunca se ejecutarían. En el procedimiento CompUltimoWhile, las instrucciones que hay dentro del bucle sólo se ejecutan una vez porque la condición ya es False. Sub CompPrimerWhile() Dim contador, miNum contador = 0 miNum = 20 Do While miNum > 10 miNum = miNum - 1 contador = contador + 1 Loop MsgBox "El bucle realizó " & contador & " repeticiones." End Sub Sub CompUltimoWhile() Dim contador, miNum contador = 0 49 Manual del Alumno miNum = 9 Do miNum = miNum - 1 contador = contador + 1 Loop While miNum > 10 MsgBox "El bucle realizó " & contador & " repeticiones." End Sub Repetición de una instrucción hasta que una condición pasa a ser True Puede utilizar la palabra clave Until de dos formas para comprobar una condición en una instrucción Do...Loop. Puede comprobar la condición antes de entrar en el bucle (como se muestra en el ejemplo CompPrimerUntil) o puede comprobarla después de que el bucle se haya ejecutado al menos una vez (como se muestra en el ejemplo CompUltimoUntil). Mientras la condición es False se ejecuta el bucle. Sub CompPrimerUntil() Dim contador, miNum contador = 0 miNum = 20 Do Until miNum = 10 miNum = miNum - 1 contador = contador + 1 Loop MsgBox "El bucle realizó " & contador & " repeticiones." End Sub Sub CompUltimoUntil() Dim contador, miNum contador = 0 miNum = 1 Do miNum = miNum + 1 contador = contador + 1 Loop Until miNum = 10 MsgBox "El bucle realizó " & contador & " repeticiones." End Sub Salida de una instrucción Do ... Loop desde dentro del bucle Puede salir de una instrucción Do ... Loop utilizando la instrucción Exit Do. Puesto que normalmente desea salir sólo en ciertas situaciones, como evitar un bucle sin fin, debe utilizar la instrucción Exit Do en el bloque de instrucciones True de una instrucción If...Then...Else. Si la condición es False, el bucle se ejecuta normalmente. En el siguiente ejemplo, miNum se asigna a un valor que crea un bucle sin fin. La instrucción If...Then...Else comprueba esta condición, impidiendo la repetición infinita. Sub EjemploSalir() Dim contador, miNum contador = 0 miNum = 9 50 Manual del Alumno Do Until miNum = 10 miNum = miNum - 1 contador = contador + 1 If miNum < 10 Then Exit Do Loop MsgBox "El bucle realizó " & contador & " repeticiones." End Sub Uso de While ... Wend La instrucción While ... Wend se proporciona en VBScript para las personas que están familiarizadas con su uso. Sin embargo, se recomienda que utilice Do ... Loop debido a la escasa flexibilidad de la instrucción While ... Wend. Instrucción While...Wend Ejecuta una serie de instrucciones mientras un condición dada se evalúe como True. Sintaxis : While condición [instrucciones] Wend La sintaxis de la instrucción While...Wend tiene las siguientes partes: Parte Descripción condición expresión numérica o expresión de cadena que se evalúa como True o False. Si condición es Null, condición se trata como False. instrucciones Una o más instrucciones ejecutadas mientras la condición se evalúe como True. Si condición se evalúa como True, todas las instrucciones en instrucciones se ejecutan hasta que se encuentre la instrucción Wend. Entonces el control vuelve a la instrucción While y condición se comprueba de nuevo. Si condición se sigue evaluando como True, el proceso se repite. Si no se evalúa como True, la ejecución continua con la instrucción que sigue a la instrucción Wend. Los bucles While...Wend se pueden anidar en cualquier nivel. Cada Wend coincide con el While más cercano. Uso de For ... Next Puede utilizar las instrucciones For...Next para ejecutar un bloque de instrucciones un número de veces específico. Para bucles, utilice una variable de tipo contador cuyo valor aumente o disminuya con cada repetición del bucle. 51 Manual del Alumno Por ejemplo, el siguiente procedimiento ejecuta 50 veces un procedimiento llamado MiProc. La instrucción For especifica la variable de tipo contador x y los valores inicial y final de la misma. La instrucción Next aumenta la variable de tipo contador de 1 en 1. Sub HazMiProc50Veces() Dim x For x = 1 To 50 MiProc Next End Sub Utilizando la palabra clave Step puede aumentar o disminuir la variable tipo contador en el valor que especifique. En el siguiente ejemplo, la variable tipo contador aumenta de 2 en 2 cada vez que se repite el bucle. Cuando el bucle finaliza, total es la suma de 2, 4, 6, 8 y 10. Sub TotalesdePares() Dim j, total For j = 2 To 10 Step 2 total = total + j Next MsgBox "El total es " & total End Sub Para disminuir la variable tipo contador, utilice un valor Step negativo. Cuando lo haga, debe especificar un valor final que sea menor que el valor inicial. En el siguiente ejemplo, la variable tipo contador miNum disminuye de 2 en 2 cada vez que se repite el bucle. Cuando el bucle termina, total es la suma de 16, 14, 12, 10, 8, 6, 4 y 2. Sub NuevoTotal() Dim miNum, total For miNum = 16 To 2 Step -2 total = total + miNum Next MsgBox "El total es " & total End Sub Puede salir de cualquier instrucción For...Next antes de que el contador alcance su valor final utilizando la instrucción Exit For. Como normalmente desea salir sólo en ciertas situaciones, como cuando se produce un error, debe utilizar la instrucción Exit For en el bloque de instrucciones True de una instrucción If...Then...Else. Si la condición es False, el bucle se ejecuta normalmente. Instrucción For...Next Repite un grupo de instrucciones un número especificado de veces. Sintaxis : For contador = inicio To fin [Step paso] [instrucciones] [Exit For] [instrucciones] Next 52 Manual del Alumno La sintaxis de la instrucción For...Next tiene las siguientes partes: Parte Descripción contador Variable numérica que se usa como contador de bucle. La variable no puede ser un elemento de una matriz o un elemento de un tipo definido por el usuario. inicio Valor inicial de contador. fin Valor final de contador. paso Cantidad que se cambia contador cada vez que se ejecuta el bucle. Si no se especifica, el valor predeterminado de paso es uno. instrucciones Una o más instrucciones entre For y Next que se ejecutan el número de veces especificado. El argumento paso puede ser positivo o negativo. El valor del argumento paso determina el procesamiento del bucle como se indica a continuación: Valor El bucle se ejecuta si Positivo o 0 contador <= fin Negativo contador >= fin Una vez iniciado el bucle y una vez se comienzan a ejecutar todas las instrucciones del bucle, se suma paso a contador. En este punto, las instrucciones del bucle se vuelven a ejecutar (basado en la misma comprobación que produjo la ejecución inicial del bucle), o se sale del bucle y continúa la ejecución con la instrucción que sigue a la instrucción Next. Uso de For Each...Next Un bucle For Each...Next es parecido a un bucle For...Next. En lugar de repetir las instrucciones un número determinado de veces , un bucle For Each...Next repite un grupo de instrucciones para cada elemento de una colección de objetos para cada elemento de una matriz. Esto es especialmente útil si no desea conocer cuántos elementos hay en una colección. En el ejemplo de código HTML completo siguiente, el contenido de un objeto Dictionary se utiliza para colocar texto en varios cuadros de texto: <HTML> <HEAD><TITLE>Formularios y elementos</TITLE></HEAD> <SCRIPT LANGUAGE="VBScript"> <!-Sub cmdCambiar_OnClick Dim d 'Crea una variable Set d = CreateObject("Scripting.Dictionary") d.Add "0", "Atenas" 'Agrega algunas claves y elementos d.Add "1", "Belgrado" d.Add "2", "El Cairo" For Each I in d 53 Manual del Alumno Document.frmForm.Elements(I).Value = D.Item(I) Next End Sub --> </SCRIPT> <BODY> <CENTER> <FORM NAME="frmForm" <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Button" NAME="cmdCambiar" VALUE="Haga clic aquí"><p> </FORM> </CENTER> </BODY> </HTML> Instrucción For Each...Next Repite un grupo de instrucciones para cada elemento de una matriz o colección. Sintaxis : For Each elemento In grupo [instrucciones] [Exit For] [instrucciones] Next [elemento] La sintaxis de la instrucción For Each...Next tiene las siguientes partes: Parte Descripción elemento Variable que se usa para iterar por los elementos de la colección o matriz. Para colecciones, elemento sólo puede ser una variable Variant, una variable Object genérica o cualquier variable de objeto de automatización específica. Para matrices, elemento sólo puede ser una variable Variant. grupo Nombre de una matriz o colección de objetos. instrucciones Una o más instrucciones que se ejecutan en cada elemento de grupo. Se entra en el bloque For Each si al menos hay un elemento en grupo. Una vez que se ha entrado en el bucle, se ejecutan todas las instrucciones del bucle para el primer elemento de grupo. Mientras haya más elementos en grupo, las instrucciones del bucle se siguen ejecutando para cada elemento. Cuando no hay más elementos en grupo, se sale del bucle y continúa la ejecución con la instrucción que sigue a la instrucción Next. Exit For sólo se puede usar dentro de una estructura de control For Each...Next o For...Next para proporcionar una forma alternativa de salir. Se puede colocar cualquier cantidad de instrucciones Exit For en cualquier parte del bucle. Exit For se suele usar con la evaluación de algunas condiciones (por ejemplo, If...Then), y transfiere el control a la instrucción siguiente a Next. 54 Manual del Alumno Puede anidar bucles For Each...Next colocando un bucle For Each...Next dentro de otro. Sin embargo, cada elemento del bucle debe ser único. Nota Si omite elemento en una instrucción Next, la ejecución continúa como si lo hubiera incluido. Si se encuentra una instrucción Next antes de su instrucción For correspondiente, se produce un error. El siguiente ejemplo muestra el uso de la instrucción For Each...Next: Function MostrarListaDeCarpetas(especificaciondecarpeta) Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificaciondecarpeta) Set fc = f.Files For Each f1 in fc s = s & f1.name s = s & "<BR>" Next MostrarListaDeCarpetas = s End Function 55 Manual del Alumno Semana 7 : Cadenas y números. Operador de Concatenación & Se utiliza para forzar la concatenación de las cadenas de dos expresiones. Sintaxis : resultado = expresión1 & expresión2 La sintaxis del operador & consta de las siguientes partes: Parte Descripción resultado Cualquier variable. expresión1 Cualquier expresión. expresión2 Cualquier expresión. Si una expresión no es una cadena de caracteres, se convierte en un tipo String. Si ambas expresiones son Null, el resultado también es Null. Sin embargo, si sólo una expresión es Null, esa expresión se considera como una cadena de longitud cero al concatenarse con la otra expresión. Cualquier expresión Empty se considera también una cadena de longitud cero. Null Un valor que indica que una variable no contiene datos válidos. Null es el resultado de: Una asignación explícita de Null a una variable. Cualquier operación entre expresiones que contienen Null. Empty Un valor que indica que una variable no tiene asignado ningún valor inicial. Las variables Empty son iguales a 0 en un contexto numérico o de longitud cero ("") en un contexto de cadena. Operador + Se utiliza para sumar dos números. Sintaxis : resultado = expresión1+expresión2 La sintaxis del operador + consta de estas partes: 56 Manual del Alumno Parte Descripción resultado Cualquier variable numérica. expresión1 Cualquier expresión. expresión2 Cualquier expresión. Cuando utilice el operador + para concatenar dos cadenas de tipo carácter, debería utilizar el operador & para que la concatenación elimine la ambigüedad y proporcione código de documentación propia. Cuando utilice el operador +, no será capaz de determinar si se producirá una suma o una concatenación de cadenas. El subtipo base de las expresiones determina el comportamiento del operador + del siguiente modo: Si Entonces Ambas expresiones son numéricas Suma. Ambas expresiones son del tipo String Concatenación. Una expresión es de un tipo de datos numérico y la otra de tipo String Suma. Si una de las expresiones o ambas son expresiones de tipo Null, resultado es Null. Si ambas expresiones son Empty, resultado es Integer. Sin embargo, sólo una de las expresiones es Empty, se devuelve la otra sin modificaciones como resultado. Operadores de comparación Utilizado para comparar expresiones. Sintaxis : resultado = expresión1 operadorcomparación expression2 resultado = objeto1 Is objeto2 Los operadores de comparación constan de las siguientes partes: Parte Descripción resultado Cualquier variable numérica. expresión Cualquier expresión. operadorcomparación Cualquier operador de comparación. objeto Cualquier nombre de objeto. 57 Manual del Alumno El operador Is tiene una funcionalidad de comparación específica que se diferencia de los operadores en la siguiente tabla. Ésta contiene una lista de operadores de comparación y las condiciones que determinan si resultado es True, False o Null: Operador Descripción True si False si Null si < Menor que expresión1 < expresión2 expresión1 >= expresión2 expresión1 o expresión2 = Null <= Menor o igual que expresión1 <= expresión2 expresión1 > expresión2 expresión1 o expresión2 = Null > Mayor que expresión1 > expresión2 expresión1 <= expresión2 expresión1 o expresión2 = Null >= Mayor o igual que expresión1 >= expresión2 expresión1 < expresión2 expresión1 o expresión2 = Null = Igual a expresión1 = expresión2 expresión1 <> expresión2 expresión1 o expresión2 = Null <> Distinto de expresión1 <> expresión2 expresión1 = expresión2 expresión1 o expresión2 = Null Cuando compara dos expresiones, puede no ser capaz de determinar fácilmente si las expresiones se están comparando como números o como cadenas. La siguiente tabla muestra cómo se comparan las expresiones o qué resulta de la comparación, dependiendo del subtipo base: Si entonces Las dos expresiones son numéricas Realiza una comparación numérica. Las dos expresiones son cadenas Realiza una comparación de cadena. Una expresión es numérica y la La expresión numérica es menor que la expresión de otra es una cadena cadena. Una expresión es Empty y la otra es numérica Ejecuta una comparación numérica, utilizando 0 para la expresión Empty. Una expresión es Empty y la otra es una cadena Ejecuta una comparación de cadena, utilizando una cadena de longitud cero para la expresión Empty. Las dos expresiones son Empty Las expresiones son iguales. 58 Manual del Alumno Función InStr Devuelve la posición de la primera coincidencia de una cadena dentro de otra. Sintaxis : InStr([inicio, ]cadena1, cadena2[, comparación]) La sintaxis de la función InStr tiene los siguientes argumentos: Parte Descripción inicio Opcional. Expresión numéricaque establece la posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la posición del primer carácter. Si inicio contiene Null, se produce un erro. El argumento inicio se requiere si se especifica comparación. cadena1 Requerido. Expresión de cadena en la que se busca. cadena2 Requerido. Expresión de cadena buscada. comparación Opcional. Valor numérico que indica el tipo de comparación que se va a usar al evaluar subcadenas. Consulte la sección Valores para saber cuáles son los valores permitidos. Si se omite, se realiza una comparación binaria. Valores El argumento comparación puede tener los siguientes valores: Constante Valor Descripción vbBinaryCompare 0 Realiza una comparación binaria. vbTextCompare 1 Realiza una comparación de texto. Valores devueltos La función InStr devuelve los siguientes valores: Si InStr devuelve cadena1 es de longitud cero 0 cadena1 es Null Null cadena2 es de longitud cero inicio cadena2 es Null Null cadena2 no se encuentra 0 cadena2 se encuentra dentro de cadena1 Posición en la que se encuentra la coincidencia inicio > Len(cadena2) 0 Función IsNumeric Devuelve un valor de tipo Boolean que indica si una expresión se puede evaluar como un número. 59 Manual del Alumno Sintaxis : IsNumeric(expresión) El argumento expresión puede ser cualquier expresión. IsNumeric devuelve True si toda la expresión se reconoce como un número. De lo contrario, devuelve False. IsNumeric devuelve False si expresión es una expresión de fecha. El siguiente ejemplo usa la función IsNumeric para determinar si una variable se puede evaluar como un número: Dim MiVar, MiComprobacion MiVar = 53 ' Asigna un valor. MiComprobacion = IsNumeric(MiVar) ' Devuelve True. MiVar = "459.95" ' Asigna un valor. MiComprobacion = IsNumeric(MiVar) ' Devuelve True. MiVar = "45 Help" ' Asigna un valor. MiComprobacion = IsNumeric(MiVar) ' Devuelve False. Formateo de Números Función FormatNumber Devuelve una expresión con formato de número. Sintaxis : FormatNumber(Expresión [,NúmDígitosDespuésDeDecimal [,IncluirDígitoInicio [,UsarParéntesisParaNúmerosNegativos [,GrupoDígitos]]]]) La sintaxis de la función FormatNumber tiene las siguientes partes: Parte Descripción Expresión Requerido. Expresión a la que se va a aplicar formato. NúmDígitosDespuésDeDecimal Opcional. Valor numérico que indica cúantos lugares se muestran a la derecha del decimal. El valor predeterminado es -1, que indica que se usa la configuración regional del equipo. IncluirDígitoInicio Opcional. Constante de tres estados que indica si se debe mostrar o no un cero inicial para valores fraccionarios. Consulte la sección Valores para saber cuáles son los valores permitidos. 60 Manual del Alumno UsarParéntesisParaNúmerosNegativos Opcional. Constante de tres estados que indica si se deben encerrar o no los valores negativos entre paréntesis. Consulte la sección Valores para saber cuáles son los valores permitidos. GrupoDígitos Opcional. Constante de tres estados que indica si se deben agrupar o no los números con el delimitador de grupos especificado en el Panel de control. Consulte la sección Valores para saber cuáles son los valores permitidos. Valores Los argumentos IncluirDígitoInicio, UsarParéntesisParaNúmerosNegativos y GrupoDígitos tienen los siguientes valores: Constante Valor Descripción TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 Usa la configuración regional del equipo. Cuando se omiten uno o más de los argumentos opcionales, los valores de los argumentos omitidos los proporciona la configuración regional del equipo. Nota Toda la información de configuración y valores se obtiene de la ficha Número de Configuración regional. El siguiente ejemplo usa la función FormatNumber para dar formato a un número para que tenga cuatro lugares decimales: Function EjemploDeFormatNumber Dim MiAngulo, MiSecante, MiNumero MiAngulo = 1.3 ' Define un ángulo en radianes. MiSecante = 1 / Cos(MiAngulo) ' Calcula la secante. EjemploDeFormatNumber = FormatNumber(MiSecante,4) ' Da formato a MiSecante para que tenga cuatro lugares decimales. End Function Función FormatCurrency Devuelve una expresión con formato como una valor de moneda, que usa el símbolo de moneda definido en el panel de control del sistema. 61 Manual del Alumno Sintaxis : FormatCurrency(Expresión[,NúmDígitosDespuésDeDecimal [,IncluirDígitoInicio [,UsarParéntesisParaNúmerosNegativos [,GrupoDígitos]]]]) La sintaxis de la función FormatCurrency tiene las siguientes partes: Parte Descripción Expresión Requerido. Expresión a la que se va a aplicar el formato. NúmDígitosDespuésDeDecimal Opcional. Valor numérico que indica cúantos lugares se muestran a la derecha del decimal. El valor predeterminado es -1, que indica que se usa la configuración regional del equipo. IncluirDígitoInicio Opcional. Constante de tres estados que indica si se debe mostrar o no un cero inicial para valores fraccionarios. Consulte la sección Valores para saber cuáles son los valores permitidos. UsarParéntesisParaNúmerosNegativos Opcional. Constante de tres estados que indica si se deben encerrar o no los valores negativos entre paréntesis. Consulte la sección Valores para saber cuáles son los valores permitidos. GrupoDígitos Opcional. Constante de tres estados que indica si se deben agrupar o no los números con el delimitador de grupos especificado en la configuración regional del equipo. Consulte la sección Valores para saber cuáles son los valores permitidos. Valores Los argumentos IncluirDígitoInicio, UsarParéntesisParaNúmerosNegativos y GrupoDígitos tienen los siguientes valores: Constante Valor Descripción TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 Usa la configuración regional del equipo. Cuando se omiten uno o más argumentos opcionales, los valores de los argumentos omitidos los proporciona la configuración regional del equipo. La posición del signo 62 Manual del Alumno de moneda relativa al valor de moneda se determina con la configuración regional del sistema. Nota Toda la información de configuración se obtiene de la ficha Moneda de Configuración regional, excepto el cero inicial que se obtiene de la ficha Número. El siguiente ejemplo usa la función FormatCurrency para dar formato de moneda a la expresión y asignarlo a MiMoneda: Dim MiMoneda MiMoneda = FormatCurrency(1000) 'MiMoneda contiene $1000.00 Función FormatPercent Devuelve una expresión con formato de porcentaje (multiplicada por 100) con una carácter % inicial. Sintaxis : FormatPercent(Expresión[,NúmDígitosDespuésDeDecimal [,IncluirDígitoInicio [,UsarParéntesisParaNúmerosNegativos [,GrupoDígitos]]]]) La sintaxis de la función FormatPercent tiene las siguientes partes: Parte Descripción Expresión Requerido. Expresión a la que se va a aplicar formato. NúmDígitosDespuésDeDecimal Opcional. Valor numérico que indica cúantos lugares se muestran a la derecha del decimal. El valor predeterminado es -1, que indica que se usa la configuración regional del equipo. IncluirDígitoInicio Opcional. Constante de tres estados que indica si se debe mostrar o no un cero inicial para valores fraccionarios. Consulte la sección Valores para saber cuáles son los valores permitidos. UsarParéntesisParaNúmerosNegativos Opcional. Constante de tres estados que indica si se deben encerrar o no los valores negativos entre paréntesis. Consulte la sección Valores para saber cuáles son los valores permitidos. GrupoDígitos Opcional. Constante de tres estados que indica si se deben agrupar o no los números con el delimitador de grupos especificado en el Panel de control. Consulte la sección Valores para saber cuáles son los valores permitidos. 63 Manual del Alumno Valores Los argumentos IncluirDígitoInicio, UsarParéntesisParaNúmerosNegativos GrupoDígitos tienen los siguientes valores: Constante y Valor Descripción TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 Usa la configuración regional del equipo. Cuando se omiten uno o más argumentos opcionales, los valores de los argumentos omitidos los proporciona la configuración regional del sistema. Nota Toda la información de configuración y valores se obtiene de la ficha Número de Configuración regional. El siguiente ejemplo usa la función FormatPercent para dar formato a una expresión como porcentaje: Dim MiPorcentaje MiPorcentaje = FormatPercent(2/32) 'MiPorcentaje contiene 6.25% InputBoxes y Message Box Función InputBox Muestra una solicitud en un cuadro de diálogo, espera a que el usuario escriba texto o haga clic en un botón y devuelve el contenido del cuadro de texto. Sintaxis : InputBox(solicitud[, título][, predeterminado][, posx][, posy][, archivodeayuda, contexto]) La sintaxis de la función InputBox tiene los siguientes argumentos: Parte Descripción solicitud Expresión de cadena mostrada como mensaje en el cuadro de diálogo. La longitud máxima de solicitud es, aproximadamente, 1024 caracteres, dependiendo del ancho de los caracteres usados. Si solicitud consta de más de una línea, puede separar las líneas con un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o la combinación de retorno de carro y avance de línea (Chr(13) & Chr(10)) entre cada línea. título Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si omite título, el nombre de la aplicación se muestra en la barra de título. predeterminado Expresión de cadena en el cuadro de texto que aparece como respuesta 64 Manual del Alumno predeterminada si no se proporciona ningún otro texto. Si omite predeterminado, el cuadro de texto se muestra vacío. posx Expresión numérica que especifica, en twips, la distancia horizontal desde el borde izquierdo del cuadro de diálogo hasta el borde izquierdo de la pantalla. Si se omite posx, el cuadro de diálogo se centra horizontalmente. posy Expresión numérica que especifica, en twips, la distancia vertical desde el borde superior del cuadro de diálogo hasta el borde superior de la pantalla. Si se omite posy, el cuadro de diálogo se centra verticalmente, aproximadamente a la altura de un tercio de la pantalla. archivodeayuda Expresión de cadena que identifica el archivo de Ayuda que se va a usar para proporcionar Ayuda contextual para el cuadro de diálogo. Si se proporciona archivodeayuda, también se debe proporcionar contexto. contexto Expresión numérica que identifica el número de contexto de Ayuda asignado por el creador de la Ayuda al tema de Ayuda adecuado. Si se proporciona contexto, también se debe proporcionar archivodeayuda. Función MsgBox Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un valor que indica en qué botón hizo clic el usuario. Sintaxis : MsgBox(solicitud[, botones][, título][, archivodeayuda, contexto]) La sintaxis de la función MsgBox tiene los siguientes argumentos: Parte Descripción solicitud Expresión de cadena que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de solicitud es aproximadamente igual a 1024 caracteres, según el ancho de los caracteres usados. Si solicitud consta de más de una línea, puede seperar las líneas con un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o la combinación de caracteres de retorno de carro y avance de línea (Chr(13) y Chr(10)) entre cada línea. botones Expresión numérica que es igual a la suma de los valores que especifican la cantidad y el tipo de botones que se van a mostrar, el estilo de icono que se va a usar, la identidad del botón predeterminado y el modo de cuadro de diálogo. Consulte la sección Valores para saber cuáles son los valores permitidos. Si se omite, el valor predeterminado de botones es 0. título Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si omite título, el nombre de la aplicación aparece en la barra de título. archivodeayuda Expresión de cadena que identifica el archivo de Ayuda que se va a usar para proporcionar Ayuda contextual para el cuadro de diálogo. Si se proporciona archivodeayuda, también se debe proporcionar contexto. No está disponible en plataformas de 16 bits. contexto Expresión numérica que identifica el número de contexto de Ayuda asignado por el creador de la Ayuda al tema de Ayuda adecuado. Si se proporciona contexto, también se debe proporcionar archivodeayuda. No está disponible en plataformas de 16 bits. 65 Manual del Alumno Valores Los valores del argumento botones son: Constante Valor Descripción vbOKOnly 0 Sólo muestra el botón Aceptar. vbOKCancel 1 Muestra los botones Aceptar y Cancelar. vbAbortRetryIgnore 2 Muestra los botones Anular, Reintentar e Ignorar. vbYesNoCancel 3 muestra los botones Sí, No y Cancelar. vbYesNo 4 Muestra los botones Sí y No. vbRetryCancel 5 Muestra los botones Reintentar y Cancelar. vbCritical 16 Muestra el icono de mensaje crítico. vbQuestion 32 Muestra el icono de consulta de advertencia. vbExclamation 48 Muestra el icono de mensaje de advertencia. vbInformation 64 Muestra el icono de mensaje de información. vbDefaultButton1 0 vbDefaultButton2 256 El segundo botón es el botón predeterminado. vbDefaultButton3 512 El tercer botón es el botón predeterminado. vbDefaultButton4 768 El cuarto botón es el botón predeterminado. 0 vbApplicationModal vbSystemModal 4096 El primer botón es el botón predeterminado. Aplicación modal; el usuario debe responder al cuadro de mensaje antes de seguir trabajando en la aplicación actual. Sistema modal; todas las aplicaciones se suspenden hasta que el usuario responde al cuadro de mensaje. El primer grupo de valores (0 a 5) describe el número y el tipo de botones mostrados en el cuadro de diálogo; el segundo grupo (16, 32, 48, 64) describe el estilo de iconos; el tercer grupo (0, 256, 512, 768) determina cuál es el botón predeterminado y el cuarto grupo (0, 4096) determina el modo del cuadro de mensaje. Al sumar números para crear un valor final para el argumento botones, use sólo un número de cada grupo. Valores devueltos La función MsgBox devuelve los siguientes valores: Constante Valor Botón vbOK 1 Aceptar vbCancel 2 Cancelar vbAbort 3 Anular vbRetry 4 Reintentar vbIgnore 5 Ignorar vbYes 6 Sí vbNo 7 No 66 Manual del Alumno Cuando se proporcionan archivodeayuda y contexto, el usuario puede presionar F1 para ver el tema de Ayuda que corresponde al contexto. Si el cuadro de diálog muestra un botón Cancelar, si presiona la tecla ESC tiene el mismo efecto que si hace clic en Cancelar. Si el cuadro de diálogo contiene un botón Ayuda, se proporcionar Ayuda contextual para el cuadro de diálogo. Sin embargo, no se devuelve ningún valor hasta que no se presiona cualquiera de los otros botones. El siguiente ejemplo usa la función MsgBox para mostrar un cuadro de mensaje y devolver un valor que describe qué botón se presionó: Dim MiVar MiVar = MsgBox ("Hola mundo", 65, "Ejemplo de MsgBox") ' MiVar contiene 1 o 2 según el botón en el que se haga clic. 67 Manual del Alumno Semana 8 : Fecha / hora y Controladores de Eventos. Función Date Devuelve la fecha actual del sistema. Sintaxis : Date El siguiente ejemplo usa la función Date para devolver la fecha actual del sistema: Dim MiFecha MiFecha = Date sistema. ' MiFecha contiene la fecha actual del Función DateAdd Devuelve una fecha a la que se agregó un intervalo de tiempo especificado. Sintaxis : DateAdd(intervalo, número, fecha) La sintaxis de la función DateAdd tiene las siguientes partes: Parte Descripción intervalo Requerido. Expresión de cadena que es el intervalo que desea agregar. Consulte la sección Valores para saber cuáles son los valores permitidos. número Requerido. Expresión numérica que es el número de intervalo que desea agregar. La expresión numérica puede ser positiva, para fechas futuras, o negativas, para fechas pasadas. fecha Requerido. Variant o literal que representa la fecha a la que se agrega intervalo. Valores : El argumento intervalo puede tener los siguientes valores: Valor Descripción w Día de la semana ww Semana del año yyyy Año q Trimestre m Mes h Hora y Día del año n Minuto d Día s Segundo Puede usar la función DateAdd para sumar o restar un intervalo de tiempo especificado a una fecha. Por ejemplo, puede usar DateAdd para calcular una fecha 30 días a partir de hoy o una hora 45 minutos desde ahora. Para agregar días a fecha, puede usar Día del año ("y"), Día ("d") o Día de la semana ("w"). Instituto Superior Tecnológico 68 Norbert Wiener Manual del Alumno La función DateAdd no devolverá una fecha no válida. El siguiente ejemplo suma un mes al 31 de enero: Nuevafecha = DateAdd("m", 1, "31-Ene-95") En este caso, DateAdd devuelve 28-Feb-95, no 31-Feb-95. Si fecha es 31-Ene-96, devuelve 29-Feb-96 porque 1996 es un año bisiesto. Si la fecha calculada es anterior al año 100, se produce un error. Si el número no es un valor de tipo Long, se redondea al número entero más cercano antes de evaluarlo. Función DateDiff Devuelve el número de intervalos entre dos fechas. Sintaxis : DateDiff(intervalo, fecha1, fecha2 [,primerdíasemana[, primerasemanaaño]]) La sintaxis de la función DateDiff tiene las siguientes partes: Parte Descripción intervalo Requerido. Expresión de cadena que es el intervalo que desea usar para calcular las diferencias entre fecha1 y fecha2. Consulte la sección Valores para saber cuáles son los valores permitidos. fecha1, fecha2 Requerido. Expresiones de fecha. Dos fechas que desea usar en el cálculo. primerdíasemana Opcional. Constante que especifica el día de la semana. Si no se especifica, se asume Domingo. Consulte la sección Valores para saber cuáles son los valores permitidos. primerasemanaaño Opcional. Constante que especifica la primera semana del año. Si no se especifica, se asume que la primera semana es la semana del 1 de enero. Consulte la sección Valores para saber cuáles son los valores permitidos. Valores El argumento intervalo puede tener los siguientes valores: Valor Descripción yyyy Año q Trimestre m Mes y Día del año d Día w Día de la semana ww Semana del año h Hora n Minuto s Segundos Instituto Superior Tecnológico Norbert Wiener Manual El argumento primerdíasemana puede tener los siguientes valores: Constante 69 del Alumno Valor Descripción vbUseSystem 0 Usar la configuración de API NLS. vbSunday 1 Domingo (predeterminado) vbMonday 2 Lunes vbTuesday 3 Martes vbWednesday 4 Miércoles vbThursday 5 Jueves vbFriday 6 Viernes vbSaturday 7 Sábado El argumento primerasemanaaño puede tener los siguientes valores: Constante Valor Descripción vbUseSystem 0 Usar configuración de API NLS. vbFirstJan1 1 Comienza con la semana del 1 de enero(predeterminado). vbFirstFourDays 2 Comienza con la semana que tiene al menos cuatro días en el nuevo año. vbFirstFullWeek 3 Comienza con la primera semana completa del nuevo año. Función Day Devuelve un número entero entre 1 y 31, ambos incluidos, que representa el día del mes. Sintaxis : Day(fecha) El argumento fecha es cualquier expresión que puede representar una fecha. Si fecha contiene Null, se devuelve Null. El siguiente ejemplo usa la función Day para obtener el día del mes a partir de una fecha especificada: Dim MiDia MiDia = Day("19 de octubre de 1962") 'MiDia contiene 19. Función Time Devuelve un valor Variant del subtipo Date que indica la hora actual del sistema. Sintaxis : Time El siguiente ejemplo usa la función Time para devolver la hora actual del sistema: Dim MiHoraCompleta MiHoraCompleta = Time sistema. ' Devuelve la hora actual del Instituto Superior Tecnológico Norbert Wiener 70 Manual del Alumno Función TimeSerial Devuelve un valor Variant del subtipo Date que contiene la hora para una hora, minuto y segundo específicos. Sintaxis : TimeSerial(hora, minuto, segundo) La sintaxis de la función TimeSerial tiene los siguientes argumentos: Parte Descripción hora Número entre 0 (12:00 a.m.) y 23 (11:00 p.m.), ambos inluidos, o una expresión numérica. minuto Cualquier expresión numérica. segundo Cualquier expresión numérica. Para especificar una hora, como 11:59:59, el intervalo de números para cada argumento TimeSerial debería estar dentro del intervalo aceptado para la unidad; es decir, entre 0 y 23 para las horas y entre 0 y 59 para los minutos y segundos. Sin embargo, también puede especificar horas ralativas para cada argumento, mediante el uso de cualquier expresión numérica que represente algún número de horas, minutos o segundos antes o después de una hora determinada. Los siguientes ejemplos usan expresiones en lugar de números de hora absolutos. La función TimeSerial devuelve una hora para 15 minutos antes (-15) de seis horas antes del mediodía (12 - 6) o 5:45:00 a.m. TimeSerial(12 - 6, -15, 0) Cuando cualquier argumento excede el intervalo aceptado para ese argumento, se incrementa hasta la siguiente unidad mayor según sea adecuado. Por ejemplo, si especifica 75 minutos, se evalúa como una hora y 15 minutos. Sin embargo, si cualquier argumento está fuera del intervalo entre -32768 y 32767 o si la hora especificada por los tres argumentos, directamente o a través de una expresión, hace que la fecha exceda el intervalo de fechas permitido, se produce un error. Función TimeValue Devuelve un valor Variant del subtipo Date containing the time. Sintaxis : TimeValue(hora) Normalmente, el argumento hora es una expresión de cadena que representa una hora desde 0:00:00 (12:00:00 a.m.) hasta 23:59:59 (11:59:59 p.m.), ambas incluidas. Sin embargo, hora también puede ser cualquier expresión que represente una hora en ese intervalo. Si hora contiene Null, se devuelve Null. Tipos de eventos Aquí se listan los principales eventos que se pueden asociar a una imagen, hipervínculo, cadena de texto, etc. A continuación aparecen agrupados según donde se originen (ratón teclado, etc). Estos eventos son los mas usados. Existen otros, pero no siempre funcionan bien con los dos navegadores, y además son bastantes exóticos, académicos y de uso poco práctico. No los veremos aquí. Eventos de ratón ONCLICK Se activa con un botón del ratón. ONDBLCLICK Se activa si se hace un doble click. Instituto Superior Tecnológico Norbert Wiener 71 Manual del Alumno ONMOUSEDOWN Se activa si se pulsa el botón izquierdo del mouse. ONMOUSEMOVE Se activa si se mueve el mouse. ONMOUSEOVER Se activa cuando el puntero se sitúa sobre el objeto que incluye al evento. ONMOUSEOUT Se activa cuando el puntero sale del objeto que incluye al evento. ONMOUSEUP Se activa si se suelta un botón pulsado en el mouse (es contrario a ONCLICK). ONDRAGSTART Se activa cuando se inicia un arrastre. ONSELECTSTART Se activa cuando se inicia una selección con el ratón. ONSELECT Se activa cuando se ha realizado una selección con el ratón. Eventos de teclado ONKEYDOWN Se activa si se pulsa una tecla cualquiera. ONKEYPRESS Se activa si se pulsa y suelta una tecla. ONKEYUP Se activa cuando se suelta una tecla pulsada. ONHELP Se activa si se pulsa la tecla de ayuda (normalmente F1). Eventos de enfoque ONFOCUS Se activa cuando se entra en el ámbito de un elemento al que está asociado el evento. ONBLUR Se activa al abandonar el ámbito del elemento al que está asociado. Eventos de formulario ONRESET Se activa al pulsar un botón de reset de un formulario. ONSUBMIT Se activa al enviar un formulario. Eventos de carga de página ONABORT Se activa cuando se aborta la carga de la página. ONERROR Se activa cuando se produce un error inesperado durante la carga de la página. ONLOAD Se activa cuando se carga la página. ONUNLOAD Se activa cuando el usuario descarga la página (es decir, carga otra o pretende salir del navegador). ONAFTERUPDATE Se activa si se actualiza o recarga la página. Semana 9 : Modelo de Objetos del Documento. Instituto Superior Tecnológico Norbert Wiener 72 Manual del Alumno Modelo de Objetos En éste apéndice vamos a listar los objetos de que disponemos en VBScript, así como sus distintas propiedades, métodos y eventos. Este apéndice está dedicado a los objetos en el lado del Cliente. En el lado del servidor, la lista se amplía bastante. Como hemos comentado, este manual está orientado a VBScript en el lado del Cliente. Sin embargo, he incluido una breve introducción a la tecnología ASP en el mismo. Bien. Empecemos asegurando posiciones. Vamos a puntualizar cuatro conceptos cuya comprensión es vital para entender el funcionamiento de la POO y la jerarquía de objetos. OBJETO: Es cada una de los elementos que se gestionan en una página web o en cualquier aplicación informática que tienen una identidad propia. Un objeto podría ser la ventana de navegación, o el documento activo, o un campo de un formulario, o una tabla, etc. La lista de los objetos que podemos manejar en VBScript de Cliente se incluyen en este Apéndice. PROPIEDAD: Es cada una de las características de un objeto. Una propiedad sería el color de fondo de una tabla, la barra de estado de la ventana de navegación, etc. También llamamos propiedad a un objeto derivado de otro. Se dice que el objeto derivado es propiedad del objeto padre. METODO: Es una operación que se puede realizar dentro de un objeto. Por ejemplo. Cerrar una ventana sería un método del objeto ventana. Poner el foco en un campo de formulario sería un método del objeto que representa a ese campo en concreto. EVENTO: Un evento es la previsión de que el usuario realice una determinada acción. En realidad el usuario puede realizar la acción o no realizarla, pero se deja prevista en la programación la posibilidad de que la realice. De esta forma, si la realiza sucederá algo (lo que hayamos programado) como respuesta a esa acción. Un evento sería pasar el ratón sobre una imagen determinada, hacer clic en una parte de la pantalla, pulsar una tecla, etc. También existe la posibilidad de prever eventos del sistema. Un evento de sistema es, por ejemplo, la carga de una página, o un error en un proceso. Resumiendo: un evento se dispara cuando ocurre la acción prevista por el mismo. Supongamos el siguiente código. Utiliza el evento ONMOUSEOVER, asociado al hiperenlace. Cuando el usuario va a pulsar el enlace y coloca el puntero del ratón sobre el mismo, se dispara el evento, que llama a la función mensaje(). Esta genera un cuadro de aviso en la pantalla y obliga al usuario a pulsar el botón Aceptar. Con lo que nunca podrá usar el enlace. Evento onMouseOver <HTML> <HEAD> <TITLE>Prueba de evento ONMOUSEOVER</TITLE> <SCRIPT LANGUAGE = "VBScript"> FUNCTION mensaje() MSGBOX ("Nunca podrás pulsarlo") END FUNCTION </SCRIPT> </HEAD> <BODY> Instituto Superior Tecnológico Norbert Wiener 73 Manual del Alumno <H1> Intenta pulsar el enlace... <BR> si puedes. </H1> <A HREF = "http://www.gratisweb.com/infomegacine" ONMOUSEOVER = "mensaje()"> Acceder a la página de Latinmail </A> </BODY> </HTML> Para referirse a una propiedad o un método de un objeto usamos una notación de puntos. Así: OBJETO.PROPIEDAD O bien: OBJETO.METODO() Observa que el método lleva unos paréntesis y la propiedad no. Esto es así porque, en definitiva, los métodos son casos particulares de funciones, asociadas a objetos. Y, como cabría esperar, algunos métodos reciben argumentos y otros no. Bien. Veamos la lista de objetos de VBScript de Cliente. Veamos otro ejemplo, para afianzar conceptos: VBScript en el navegador <HTML> <HEAD> <TITLE>Otra prueba de POO</TITLE> </HEAD> <BODY> <A HREF = "http://www.gratisweb.com/infomegacine" ONMOUSEOVER = "window.status = 'El mejor site de cine';return true"> Pulsa aquí para ver infomegacine </A> </BODY> </HTML> Aquí podemos ver varias cosas que van mas allá de todo lo estudiado hasta ahora. En primer lugar vamos a aclarar lo que hace el código. Muestra un hiperenlace y, cuando el usuario pasa el ratón por encima, muestra un mensaje en la barra de estado, que ya permanece ahí. Bien. Analicemos el código para ver como funciona. Realmente toda la gracia está en esta línea: <A HREF = "http://www.gratisweb.com/infomegacine" ONMOUSEOVER ="window.status = 'El mejor site de cine';return true"> La primera parte es un hiperenlace normal de HTML sin mas. Lo primero que nos interesa ahora es la palabra ONMOUSEOVER, que indica al navegador que detecte la presencia del cursor del ratón sobre el texto que constituye el hiperenlace. ONMOUSEOVER es el evento que queremos detectar. A la derecha el signo igual aparece la acción que queremos desencadenar si se produce el evento especificado. Esta acción aparece entre comillas dobles. En concreto se trata de establecer un valor para la propiedad status del objeto window; es decir, el contenido de la barra de estado de la ventana de navegación. En este caso hemos programado que aparezca en la barra de estado una cadena literal (el mejor site de cine). Fíjate que la cadena de texto aparece encerrada entre comillas simples. A continuación aparece un signo de punto y coma y la instrucción return true. Esta última sirve, en este caso, para que el cambio de la barra de estado se produzca de forma inmediata. De no usarla, al poner el ratón sobre el enlace veremos la dirección de la página especificada y, solo al quitar el ratón, veremos el mensaje que habíamos Instituto Superior Tecnológico 74 Norbert Wiener Manual del Alumno programado. Evidentemente ésto último no es lo que perseguíamos. Bien. Casi tenemos completo el estudio de esta línea, salvo por un pequeño detalle. Palabras reservadas del lenguaje, como son window, status, return y true aparecen en minúsculas en este ejemplo, cuando hemos dicho que en este temario las palabras reservadas las poníamos en mayúsculas. Esto es así porque en este caso las instrucciones no han sido programadas dentro de VBScript, sino directamente en HTML. Existen algunas instrucciones de los lenguajes de Script que pueden programarse de esta manera (de hecho, algunas veces DEBEN programarse de esta manera). En estos casos, el navegador no interpreta las instrucciones como de VBScript, sino como de JavaScript. Y JavaScript (ya lo veremos en el correspondiente temario) es, al contrario que VBScript, muy exigente con el tema de las mayúsculas y minúsculas. Cada palabra debe escribirse de un modo exacto, y no de otro, o no funcionará. En la lista que incluyo en éste Apéndice de objetos, propiedades, métodos y eventos he seguido este último criterio, a fin de familiarizar al lector con la sintaxis mas adecuada. La lista de los principales objetos de VBScript es: Objeto window Objeto location Objeto document Objeto navigator Objeto frame Objeto history Objeto link Objeto anchor Objeto form Como ya hemos mencionado en este temario, los objetos siguen una jerarquía. El de mas alto nivel es el objeto WINDOW, que representa a la ventana activa. Todos los demás, son objetos derivados de éste. Veamos cuales son las propiedades y métodos que acepta cada uno, así como los eventos que les afectan. Objeto window Representa la ventana activa del navegador y es el mas alto de la jerarquía. Propiedades: defaultStatus se refiere al mensaje que aparecerá por defecto en la barra de estado. document representa al documento HTML en ejecución en ese momento. frames [] es una matriz que contiene los frames de la ventana. history representa un registro histórico de las páginas visitadas en la actual sesión de uso de Internet. length contiene el número total de frames de la ventana. location representa a la dirección (URL) actual de Internet. name contiene el nombre de la ventana activa. Instituto Superior Tecnológico Norbert Wiener 75 Manual del Alumno navigator representa al navegador que estamos utilizando. self se refiere a la propia ventana. Es el mismo objeto window. status es el mensaje que aparece en la barra de estado en un momento determinado. window representa a la ventana activa o a otra ventana o sub-ventana de navegación. Métodos: close () permite cerrar la ventana activa. Su sintaxis es self.close() open () permite abrir una nueva ventana, como sub ventana de la actual. Su sintaxis es: nueva_ventana = window.open ("URL", "Target", "Opciones") En la sintaxis expresada, nueva_ventana es el nombre que queremos darle a la sub-ventana. URL es la dirección de la página que queremos que se cargue en la sub-ventana. Target es la dirección del frame donde queremos que se abra la nueva ventana (caso de existir frames) como hacemos en HTML con los hiperenlaces. Opciones son las propiedades de la nueva ventana, de acuerdo a la siguiente tabla. propiedad Tipo de dato Explicación toolbar booleano Ventana con barra de herramientas. location booleano Ventana con barra de direcciones. directories booleano Ventana con directorios. Status booleano Ventana con barra de estado menubar booleano Ventana con barra de menús. scrollbars booleano Ventana con barras de desplazamiento. resizable booleano Ventana de tamaño redefinible por el usuario. width píxeles Anchura de la ventana height píxeles Altura de la ventana. top píxeles Posición Y de la ventana left píxeles Posición x de la ventana Eventos: onLoad Se ejecuta cuando se carga la página. onUnload Se ejecuta cuando se descarga (se cierra) la página. Objeto document Representa el documento activo. Propiedades: alinkColor Representa el color de los enlaces activos. bgColor Representa el color de fondo del documento. fgColor Representa el color del texto lastModified Representa la fecha de la última modificación. linkColor Representa el color de los enlaces. Instituto Superior Tecnológico Norbert Wiener 76 Manual del Alumno location Representa la URL del documento. title Representa el título del documento. vlinkColor Representa el color de los enlaces visitados. Métodos: Write () Escribe un texto. Writeln() Escribe una línea de texto. Eventos: Ninguno Objeto form Este objeto se refiere a un formulario empleado en el documento. Se accede a cada formulario mediante un índice: document.form [índice] El número de índice se corresponde con el orden de creación de formulario en el documento. Propiedades: action Representa la URL donde está el programa encargado de procesar un formulario (al que se llama al activar el botón Submit). length Es el número de elementos del formulario. method Es el método de envío (GET o POST). Métodos: submit Se usa para forzar el envío. Eventos: onSubmit Se produce cuando se pulsa el botón Submit del formulario. Objeto location Contiene la URL de la página actual Propiedades: href Representa la propia URL. pathname Representa la ruta del disco del servidor donde se aloja la página. Métodos: Ninguno. Eventos: Ninguno. Objeto navigator Representa al navegador actual. Propiedades: appName Es el nombre del navegador. Instituto Superior Tecnológico Norbert Wiener 77 Manual del Alumno appVersion Se refiere a la versión del navegador. Métodos: Ninguno. Eventos: Ninguno. Objeto history Representa el historial de las páginas visitadas en la sesión actual de uso de Internet Propiedades: length Representa la cantidad total de páginas visitadas. Métodos: back () navega a la página anterior. forward() navega a la página siguiente. go (n) navega n páginas hacia delante (o hacia atrás, si n es negativo). Eventos: Ninguno. Semana 10 : Examen Parcial. Instituto Superior Tecnológico Norbert Wiener Semana 11 : 78 Manual del Alumno JavaScript. Introducción JScript es la implementación de Microsoft de la especificación de lenguaje ECMA 262. Es una implementación completa, además de algunas mejoras que aprovechan las capacidades de Microsoft Internet Explorer. Este tutorial pretende ayudarle a comenzar a trabajar con JScript. JScript es un lenguaje de secuencias de comandos basado en objetos e interpretado. Aunque tiene menos capacidades que los lenguajes orientados a objetos de altas prestaciones como C++ y Java, JScript es más que suficientemente eficiente para los propósitos para los que está creado. JScript no es una versión reducida de cualquier otro lenguaje (sólo está relacionado, distante e indirectamente, con Java, por ejemplo), ni es una simplificación de ningún lenguaje. Sin embargo, es un lenguaje limitado. Por ejemplo, no es posible escribir aplicaciones independientes en JScript y la capacidad de lectura y escritura de archivos es mínima. Más aún, las secuencias de comandos de JScript sólo pueden ejecutarse con un intérprete, que bien puede estar en un servidor Web o en un explorador de Web. JScript es un lenguaje en el que no necesita declarar los tipos de datos. Esto significa que no es necesario declarar explícitamente los tipos de datos de las variables. Más aún, en muchos casos JScript realiza conversiones, automáticamente, cuando son necesarias. Por ejemplo, si intenta agregar un número a un elemento que contiene texto (una cadena), el número se convierte en texto. Escritura de Código en Java Script Al igual que muchos otros lenguajes de programación, Microsoft JScript se escribe en forma de texto y se organiza en instrucciones, bloques formados por conjuntos de instrucciones relacionadas y comentarios. En una instrucción puede utilizar variables, datos inmediatos como cadenas y números, y expresiones. Instrucciones Una instrucción de código JScript está formada por uno o más elementos y símbolos en una misma línea. Cada nueva línea inicia una nueva instrucción, pero es una buena idea terminar las instrucciones de forma explícita. Puede hacerlo si agrega un punto y coma (;), que es el carácter de terminación de JScript. unPajaro = "Colibrí"; var hoy = new Date(); Un grupo de instrucciones JScript encerrado entre llaves ({}) se denomina bloque. Los bloques de instrucciones se utilizan, por ejemplo, en funciones y expresiones condicionales. En el siguiente ejemplo la primera instrucción inicia la definición de una función, que está formada por un bloque de cinco instrucciones. Las tres últimas instrucciones, que no están incluidas en las llaves, no son un bloque y no forman parte de la función. Instituto Superior Tecnológico Norbert Wiener 79 Manual del Alumno function convert(pulgadas) { pies= pulgadas / 12; // Estas cinco instrucciones están en un bloque. millas = pies / 5280; millasNauticas = pies / 6080; cm = pulgadas * 2.54; metros = pulgadas / 39.37; } km = metros / 1000; // Estas tres instrucciones no están en un bloque. kradio = km; mradio= millas; Comentarios Un comentario de una sola línea en JScript comienza con un par de barras inclinadas (//). Un comentario multilínea comienza con una barra inclinada seguida por un asterisco (/*) y termina con los mismos elementos en orden inverso (*/). unaBuenaIdea = "Incluya muchos comentarios en su código."; // Este es un comentario de una sola línea. /* Este es un comentario multilínea que explica la instrucción de código anterior. La instrucción asigna un valor a la variable unaBuenaIdea. El valor que está encerrado entre comillas, se conoce como un literal. Un literal contiene información de forma directa y explícita, no hace referencia a la información de forma indirecta. (Las comillas no forman parte del literal.) */ // Este es otro comentario multilínea, escrito como una serie de comentarios de una sola línea. // Después de ejecutar la instrucción, puede hacer referencia al contenido de la variable. // unaBuenaIdea utilizando su nombre, como en la siguiente instrucción, en la que se agrega un literal de cadena a // la variable unaBuenaIdea mediante concatenación para crear una nueva variable. var ideaAmpliada = unaBuenaIdea + " Nunca puede saber cuándo tendrá que averiguar lo que hace."; Asignaciones e igualdad El signo igual (=) se utiliza en JScript para indicar una acción en la que se asigna un valor. Es decir, una instrucción de código JScript podría decir unEntero = 3; Significa "Asigna el valor 3 a la variable unEntero" o "unEntero recibe el valor 3". Cuando desee comparar dos valores para averiguar si son iguales, deberá utilizar un par de signos de igual (==). Este aspecto se ve con más detalle en Controlar el flujo del programa. Expresiones Una expresión JScript es algo que una persona puede leer como una expresión de tipo Boolean o como una expresión numérica. Las expresiones contienen caracteres de símbolos como "+" en lugar de palabras como "sumado a". Una expresión está formada por cualquier combinación válida de valores, variables, operadores y expresiones. var var var var unaExpresion= "3 * (4 / 5)"; unaSegundaExpresion = "Math.PI * radio * 2"; unaTerceraExpresion = unaSegundaExpresion + "%" + unaExpresion; unaCuartaExpresion = "(" + unaSegundaExpresion + ") % (" + unaExpresion Instituto Superior Tecnológico Norbert Wiener 80 Manual del Alumno Caracteristicas Es simple, no hace falta tener conocimientos de programación para poder hacer un programa en JavaScript. Maneja objetos dentro de nuestra página Web y sobre ese objeto podemos definir diferentes eventos. Dichos objetos facilitan la programacion de paginas interactivas, a la vez que se evita la posibilidad de ejecutar comandos que puedan ser peligrosos para la maquina del usuario, tales como formateo de unidades, modificar archivos etc. Es dinámico, responde a eventos en tiempo real. Eventos como presionar un botón, pasar el puntero del mouse sobre un determinado texto o el simple hecho de cargar la página o caducar un tiempo. Con esto podemos cambiar totalmente el aspecto de nuestra página al gusto del usuario, evitándonos tener en el servidor un página para cada gusto, hacer calculos en base a variables cuyo valor es determinado por el usuario, etc. Diferencia con JAVA La principal diferencia es que JAVA es un lenguaje compilado, mientras que JavaScript es interpretado. JAVA al compilar crea programas independientes, llamados APPLETS que se invocan desde una pagina Web, mientras que el codigo de JavaScript va incluido en la pagina. Esta orientado a objetos de forma limitada ya que no maneja los conceptos de clase ni herencia. En JavaScript no es necesario declarar el tipo de variable, ni debe existir las referencias a bjetos antes de ejecutarlos, por lo que se hable de una ligazon dinamica a diferencia de la ligazon estatica del JAVA. Principales aplicaciones Si bien hoy en día, JavaScript, es un lenguaje muy usado, sus principales aplicaciones son: Responder a eventos locales dentro de la página, como apretar un botón, La realización de cálculos en tiempo real La validación de formularios dentro de una página. La personalización de la página por el usuario, que le permitirá tener una página web a su medida. La inclusión de datos del propio sistema, como son la hora y la fecha. Aunque según pasa el tiempo sus aplicaciones se van incrementando. Instituto Superior Tecnológico Norbert Wiener 81 Manual del Alumno Donde incluirlo Antes siquiera de que conozcamos la sintaxis o una primera orden de JavaScript, debemos saber primero cómo se incluye un script dentro de un documento HTML. El codigo JavaScript se inserta directamente en nuestra pagina HTM. Hay cuatro (4) maneras de hacerlo: En el cuerpo del documento Es decir entre los comandos <BODY> y </BODY> usando el comando SCRIPT <HTML> <HEAD> <TITLE>Titulo</TITLE> </HEAD> <BODY> <SCRIPT LANGUAGE=JavaScript> <!-- escondemos el codigo> document.write("Hola que tal"); // hasta aqui escondo --> <SCRIPT> </BODY> </HTML> Este codigo se ejecuta inmediatamente al cargar la pagina y lo que produce es un texto sobre la pagina, para ello use el metodo write del objeto document, que representa al documento actual. Nota que use un comentario <!-- --> para ocultar el codigo a los navegadores que no soportan JavaScript. En archivo aparte En este caso todo el codigo del script esta situado en otro archivo y se hace una llamada. <HTML> <HEAD> <TITLE>Titulo</TITLE> </HEAD> <BODY> <SCRIPT SRC=codigo.js> <SCRIPT> </BODY> </HTML> Nota que aqui no fue neceario esconder ningun codigo y que los navegadores que no soporte el comando SCRIPT simplemente lo ignoraran. Usando manejadores de evento Los comandos de JavaScript son evaluados inmediatamente al cargarse la pagina. Las funciones son almacenadas, pero no ejecutadas, hasta cierto evento. Instituto Superior Tecnológico Norbert Wiener 82 Manual del Alumno <HTML> <HEAD> <TITLE>Titulo</TITLE> <BODY> <A HREF="" onMouseOver="window.status='Figura';return true"> <IMG SRC=fig.gif></A> </BODY> </HTML> Nota que aqui es un evento el que dispara. Haciendo una llamada a función Dentro de la cabecera, despues del titulo. Es decir, entre los comandos </TITLE> y </HEAD> y luego la llamada a la funcion en el cuerpo. <HTML> <HEAD> <TITLE>Titulo</TITLE> <SCRIPT LANGUAGE=JavaScript> <!-- escondemos el codigo> funcion llamada(x){ alert("Le dije que NO!"+x); } // hasta aqui escondo --> <SCRIPT> </HEAD> <BODY> No haga Clic <A HREF="JavaScript:llamada('Curioso!')">AQUI</A> </BODY> </HTML> Observa que aquí se definió la función en la cabecera, pero recién se ejecuta al hacer clic en el enlace, que es el evento que llama a la función a la cual se le para un parámetro. NOTA: Excepto en texto encomillado , JavaScript es sensible a mayúsculas y minúsculas, por lo que tendrás que tener el cuidado al usar por ejemplo document.write de escribirlo así, en minúsculas o no se interpretará. Cualquier error simplemente es ignorado. Se puede usar la comilla simple para los valores de atributos. Instituto Superior Tecnológico Norbert Wiener Semana 12 : 83 Manual del Alumno Scripting Basics. Variables de Java Script Las variables se utilizan el Microsoft JScript para almacenar valores en sus secuencias de comandos. Son un método para recuperar y manipular valores mediante nombres de cadenas. Cuando se utilizan correctamente pueden ayudar a comprender el funcionamiento de una secuencia de comandos. Declarar variables Aunque no es necesario, se considera una buena práctica declarar las variables antes de utilizarlas. Se hace utilizando la instrucción var. La única ocasión en la que se debe utilizar la instrucción var es al declarar variables locales a una función. En las restantes ocasiones, utilizar la instrucción var para declarar las variables antes de utilizarlas es una práctica recomendada. Los siguientes ejemplos de código son sobre la declaración de variables: var mim = "Un hombre, un plan, un canal, !Panamá!"; // El valor almacenado en mim es del tipo cadena. // La frase entre comillas, el valor asignado a mim, es un literal de cadena. var ror = 3; // El valor almacenado en ror es de tipo numérico. var nen = true; // El valor almacenado en nen es de tipo Boolean. var fif = 2.718281828 // El valor almacenado en fif es de tipo numérico. Nombrar variables JScript es un lenguaje que distingue entre mayúsculas y minúsculas, por tanto, es diferente llamar a una variable miContador que llamarla MIContador. Además, los nombres de las variables, que pueden tener cualquier longitud, deben seguir ciertas reglas: El primer carácter debe ser una letra (mayúscula o minúscula) o un carácter de subrayado (_), o un signo de dólar ($). Los siguientes caracteres pueden ser letras, números, caracteres de subrayado o signos de dólar. El nombre de una variable no puede ser una palabra reservada. Algunos ejemplos de nombres de variables válidos: _numeropaginas Parte9 Numero_elementos Algunos nombres de variables no válidos: 99Globos // Comienza con un número. Smith&Wesson // El signo & no es un carácter válido para los nombres de las variables. En los casos en los que quiera declarar una variable e iniciarla sin proporcionar ningún valor concreto, deberá asignarle un valor especial, null. var zaz = null; var notanto = 3 * zaz; // En este punto, notanto se convierte en 0. Instituto Superior Tecnológico Norbert Wiener 84 Manual del Alumno Si declara una variable sin asignarla un valor, la variable existirá, pero será no definida. var godot; var esperarA= 1 * godot; definida. // Asigna el valor NaN a esperarA, ya que godot no está Una variable se puede definir de forma implícita (sin utilizar var) tan sólo con asignarle un valor. Sin embargo, no se puede utilizar una variable que aún no haya sido declarada de ningún modo. Si lo hace obtendrá un error en tiempo de ejecución. lel = ""; // La variable se declara de forma implícita. var unLio = vyv + zez; // Genera un error, ya que vyv y zez no existen. Conversión Dado que JScript es un lenguaje en el que no es necesario declarar los tipos de datos, las variables en JScript técnicamente no tienen un tipo fijo. En cambio, tienen un tipo equivalente al tipo del valor que contienen. Bajo determinadas circunstancias, es posible forzar la conversión automática de una variable de un tipo de dato en un tipo diferente. Se pueden incluir números en las cadenas, pero las cadenas no se pueden incluir directamente en los números, por lo que se proporcionan las funciones de conversión explícitas, parseInt() y parseFloat(). var elDesde = 1; var elHasta = 10; var queHacer= "Contar desde "; queHacer+= elDesde + " hasta " + elHasta + "."; Después de ejecutar este código la variable queHacer contiene "Contar desde 1 hasta 10." El dato numérico ha sido convertido en una cadena. var ahoraQue= 0; ahoraQue+= 1 + "10"; // En este caso, como "10" es una cadena, // el operador "+=" la concatena.. Después de ejecutar el código, la variable ahoraQue contiene "0110". Para obtener este resultado se han seguido los siguientes pasos: 1. Comprobar los tipos de 1 y "10". "10" es una cadena, 1 es un número, por tanto, el número se convertirá en una cadena. 2. Dado que los valores de ambos lados del operador + son cadenas, se realiza una concatenación de ellas. El resultado es "110" 3. Comprueba los tipos de ambos lados del operador +=. ahoraQue contiene un número y "110" es una cadena, así que se convierte el número en una cadena. 4. Como ahora hay cadenas a ambos lados del operador +=, se realiza una concatenación de cadenas. El resultado es "0110". 5. Este resultado se almacena en ahoraQue. var entonces = 0; entonces+= 1 + parseInt("10"); // En este caso, "+=" realiza una suma. Después de ejecutar este código, la variable entonces contiene el entero 11. Instituto Superior Tecnológico Norbert Wiener Semana 13 : 85 Manual del Alumno Tipos de datos y operadores. Tipos de Datos ¿Qué son los tipos de datos de JScript? Microsoft JScript tiene seis tipos de datos. Los tipos principales son: numéricos, cadenas, objetos y Boolean. Los otros dos son null y no definido . Tipo de dato Cadena Las cadenas están delimitadas por comillas simples o dobles. (Utilice comillas simples para delimitar cadenas que utilicen comillas dobles.) Una cadena también es un objeto en JScript, pero es un caso especial, con propiedades especiales. A continuación hay ejemplos de cadenas: "La vaca saltó sobre la luna." '"¡Es imposible!" gritó el hombre.' "42" Una cadena puede contener cero o más caracteres unicode. Cuando no contiene ninguno, se denomina cadena de longitud cero (""). Tipo de dato numérico JScript permite utilizar números enteros y en coma flotante. Los enteros pueden ser positivos, 0 o negativos; un número en coma flotante puede contener un punto decimal, , una "e" (mayúscula o minúscula), que se utiliza para representar "diez a la potencia de" en notación científica, o ambos. Estos números siguen el estándar IEEE 754 para la representación numérica. Por último, algunos valores numéricos son especiales: NaN, o no un número Infinito positivo Infinito negativo Positivo 0 Negativo 0 Los enteros se pueden representar en base 10 (decimal), base 8 (octal), y base 16 (hexadecimal). Los enteros octales se especifican anteponiendo un "0" y pueden contener dígitos del 0 al 7. Si un número está precedido por un "0" pero contiene los dígitos "8" o "9", es un número decimal. Si un número que de otro modo sería un octal contiene la letra "e" (o "E") se genera un error. Los enteros hexadecimales ("hex") se especifican anteponiendo "0x" (la "X" puede ser mayúscula o minúscula) y pueden contener los dígitos del 0 al 9 y las letras de la A a la F (mayúsculas o minúsculas). La letra "e" es un dígito permisible en la notación hexadecimal y no indica la existencia de un número exponencial. Las Instituto Superior Tecnológico 86 Norbert Wiener Manual del Alumno letras de la A a la F se utilizan para representar, como dígitos simples, los números que van del 10 al 15 en base 10. Es decir, 0xF equivale a 15 y 0x10 equivale a 16. Los números octales y hexadecimales pueden ser negativos, pero no fracciones. Un número que comience con un único "0" y contenga un punto decimal es un número decimal en coma flotante, si un número que comienza con "0x" o "00" contiene un punto decimal, cualquier cosa que aparezca a la derecha de dicho punto será ignorado. Algunos ejemplos de números: .0001, 0.0001, 1e-4, 1.0e-4 // Cuatro números en coma flotante, todos ellos equivalentes. 3.45e2 // Un número en coma flotante, equivalente a 345. 42 // Un número entero. 0377 // Un entero octal, equivalente a 255. 00.0001 // Como los números octales no pueden tener decimales, éste equivale a 0. 0378 // Un entero, equivalente a 378. 0Xff // Un entero hexadecimal, equivalente a 255. 0x37CF // Un entero hexadecimal, equivalente a 14287. 0x3e7 // Un entero hexadecimal, equivalente a 999. 0x3.45e2 // Como los números hexadecimales no pueden tener partes decimales, éste equivale a 3. Tipo Boolean Los posibles valores de tipo Boolean sontrue y false. Son valores especiales, y no se pueden utilizar como 1 y 0. Nota En una comparación, cualquier expresión que se evalúe como 0 se tomará como false, y cualquier expresión que se evalúe como un número distinto de cero se tomará como true. Así, la siguiente expresión se evalúa como true: (false == 0) Tipo de dato no definido Un valor no definido es simplemente un valor asignado a una variable después de crearla, pero antes de que se le haya asignado un valor. Tipo de dato Null Un valor null es uno que no tiene valor y no significa nada. Instituto Superior Tecnológico Norbert Wiener 87 Manual del Alumno \b \f feed) \n \r (Carrage Tambien pueden usar los siguientes caracteres indica un retroceso (backspace) indica un avance de pagina (Form Indica nuva linea (New Line) Indica un retorno de carro return) Indica un tabulador (Tab) se puede incluir comillas. Ej: "José \"Chemo\" del Solar" \t \" Operadores de Java Script JScript tiene un amplio conjunto de operadores, incluidos aritméticos, lógicos, de bits y de asignación. También existen algunos operadores variados. Cálculo Descripción Negación unaria Lógicos Símbolo Descripción De bits Símbolo Descripción - NOT lógico ! NOT de bits Incremento ++ Menor que < Decremento -- Mayor que Multiplicación * División / Asignación Símbolo Descripción Varios Símbolo Descripción Símbolo ~ Asignación = delete delete Desplazamiento de bits hacia la izquierda << Asignación compuesta OP= typeof typeof > Desplazamiento hacia la derecha >> Menor que o igual a <= Desplazamiento a la derecha sin signo >>> Mayor que o igual a >= AND de bits & Módulo aritmético % Igualdad == XOR de bits ^ Adición + Desigualdad != OR de bits | Sustracción - AND lógico && OR lógico || Condicional (trinario) ?: Coma void void , Identidad === No identidad !== Precedencia de operadores En JScript los operadores se evalúan en un orden particular. Este orden se conoce como la precedencia de operadores. La siguiente tabla muestra una lista de los operadores en orden de precedencia de mayor a menor. Los operadores de la misma fila se evalúan de izquierda a derecha. Instituto Superior Tecnológico Norbert Wiener 88 Manual del Alumno Operador Descripción . [] () Acceso a campos, indexación de matrices y llamadas a funciones ++ -- - ~ ! typeof new void delete Operadores unarios, tipos de datos devueltos, creación de objetos, valores no definidos */% Multiplicación, división, división módulo +-+ Adición, sustracción, concatenación de cadenas << >> >>> Desplazamiento de bits < <= > >= Menor que, menor que o igual a, mayor que, mayor que o igual a == != === !== Igualdad, desigualdad, identidad, no identidad & AND de bits ^ XOR de bits | OR de bits && AND lógico || OR lógico ?: Condicional = OP= Asignación, asignación con operación , Evaluación múltiple Los paréntesis se usan para modificar el orden de evaluación. La expresión encerrada entre paréntesis se evalúa por completo antes de usar su valor en el resto de la instrucción. Un operador con mayor precedencia se evalúa antes que uno con menor precedencia. Por ejemplo: z = 78 * (96 + 3 + 45) En esta expresión hay cinco operadores: =, *, (), + y +. Según las normas de precedencia, se evalúan en el siguiente orden: (), *, +, +, =. 1. Lo primero es la evaluación de la expresión que está encerrada entre paréntesis: Hay dos operadores de adición y tienen la misma precedencia: Se suma 96 y 3 y al total resultante se suma 45, dando como resultado un valor igual a 144. 2. Lo siguiente es la multiplicación: Se multiplican 78 y 144, dando como resultado un valor igual a 11232. 3. Por último se realiza la asignación: Se asigna 11232 a z. Instituto Superior Tecnológico Norbert Wiener 89 Manual del Alumno Arreglos y Cadenas Indexación de matrices Las matrices en JScript son sparse. Es decir, si tiene una matriz con tres elementos, numerados 0, 1 y 2, puede crear un elemento 50 sin preocuparse por los elementos que van del 3 al 49. Si la matriz tiene una variable automática de longitud (vea objetos intrínsecos para obtener una explicación sobre el control automático de la longitud de una matriz), la variable de longitud tendría el valor 51, en lugar de 4. Se pueden crear matrices en las que no existan espacios vacíos en el número de elementos, pero no es necesario. De hecho, en JScript, no es necesario que sus matrices tengan subíndices numéricos. En JScript, los objetos y las matrices son esencialmente idénticos. La diferencia real no se encuentra en los datos, si no en el método utilizado para hacer referencia a los miembros de una matriz o a las propiedades y métodos de un objeto. Referencias a matrices Existen dos métodos principales para hacer referencia a los miembros de una matriz. Normalmente se hace referencia a las matrices utilizando corchetes. Los paréntesis encierran un valor numérico o una expresión que se evalúa como un número entero no negativo. El siguiente ejemplo asume que la variable numEntr está definida y que se le ha asignado un valor en alguna parte de la secuencia de comandos. laLista = libretaDirecciones[numEntr]; laPrimeraLinea = laLista [1]; Este método de referencia equivale al método utilizado para hacer referencia a objetos, aunque en estos últimos debe aparecer después del punto el nombre de una propiedad existente. Si esa propiedad no existe, el código generará un error. El segundo método para hacer referencia en una matriz es crear un objeto o matriz que contenga las propiedades numeradas y generar los números mediante un bucle. El siguiente ejemplo genera dos matrices, una para el nombre y otra para la dirección, a partir de la lista de libroDirecciones. Cada una de ellas contiene cuatro propiedades. Por ejemplo, una instancia de elNombre creada a partir de las propiedades que van desde [Name1] a [Name4] en laLista, podría contener "G." "Edward" "Heatherington" "IV", o "George" "" "Sand" "". laLista = libretaDirecciones[numEntr]; for (i = 1; i < 4; i++) { elNombre [i] = laLista["Nombre" + i]; laDireccion[i] = laLista["Direccion" + i]; } Aunque esta instancia en concreto, es corta y se podría haber escrito fácilmente en la notación con punto (es decir, haciendo referencia a laLista, elNombre, y laDireccion como objeto en lugar de hacerlo como matrices), esto no siempre es Instituto Superior Tecnológico 90 Norbert Wiener Manual del Alumno posible. Es posible que algunas veces una determinada propiedad no exista hasta el momento de la ejecución, o que no exista forma de saber con antelación cuál será. Por ejemplo, si la matriz libretaDirecciones estuviera organizada por el apellido en lugar de estarlo por una lista numérica, el usuario probablemente podría introducir los nombres, mientras se ejecuta la secuencia de comandos, para buscar a las personas. El siguiente ejemplo asume la existencia de las definiciones de función correctas en alguna parte de la secuencia de comandos. laLista = libretaDirecciones[getName()]; laListaIndiv= laLista [obtenerPrimerNombre ()]; Se trata de una referencia asociativa a la matriz, es decir, la referencia se realiza mediante cadenas totalmente arbitrarias. Los objetos en JScript son, en realidad, matrices asociativas. Aunque se puede utilizar (y se utiliza con frecuencia) el estilo de referencias con "puntos", no es necesario hacerlo. Objetos Intrínsecos Microsoft JScript ofrece nueve objetos intrínsecos (o "incorporados"). Estos objetos son Array, Boolean, Date, Function, Global, Math, Number, Objecty String. Cada uno de los objetos intrínsecos tienen métodos y propiedades asociados, que se describen en detalle en la referencia del lenguaje. Algunos objetos también se describen aquí. Objeto Array En JScript, los objetos se controlan como matrices y las matrices se controlan como objetos. Se puede hacer referencia a las subsecuencias de comandos de una matriz, que son totalmente equivalentes a las propiedades de un objeto, por número (o por nombre, si les asigna nombres). Para crear una nueva matriz, utilice el operador new y el constructor Array(), como en el siguiente ejemplo. var losMeses = new Array(12) losMeses[0] = "Ene"; losMeses[1] = "Feb"; losMeses[2] = "Mar"; losMeses[3] = "Abr"; losMeses[4] = "May"; losMeses[5] = "Jun"; losMeses[6] = "Jul"; losMeses[7] = "Ago"; losMeses[8] = "Sep"; losMeses[9] = "Oct"; losMeses[10] = "Nov"; losMeses[11] = "Dic"; } { Al crear una matriz utilizando la palabra clave Array, JScript incluye en la matriz una propiedad length de sólo escritura, que graba el número de entradas de una matriz. Si no especifica un número, la longitud se establece a 0 y la matriz no tiene entradas. Si especifica un número, la longitud se establece a ese número. Si especifica más de un parámetro, los parámetros se utilizan como entradas de la matriz y el número de parámetros se asigna a la propiedad length, como en el siguiente ejemplo, que es equivalente al ejemplo anterior. Instituto Superior Tecnológico 91 Norbert Wiener Manual del Alumno var losMeses = new Array("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"); JScript cambia automáticamente el valor de length si agrega elementos a una matriz que creó con la palabra clave Array. Objeto String En JScript, las cadenas son objetos. Esto significa que cada vez que declare una variable de cadena o utilice un literal de cadena, lo que está haciendo realmente es crear un nuevo objeto de cadena. El objeto String tiene algunos métodos incorporados, que puede utilizar con sus cadenas. Uno de esos métodos es el método substring, que devuelve parte de la cadena. Este método recibe dos números como argumentos. unaCadena = "0123456789"; var unaPorcion = unaCadena.substring(4, 7); // Establece unaPorcion a "456". var otraPorcion = unaCadena.substring(7, 4); // Establece otraPorcion a "456". // Si se utiliza el ejemplo de creación de Array anterior: primeraLetra = losMeses[5].substring(0,1); // Establece la variable primeraLetra a "J". Otra propiedad del objeto String es la propiedad length. Esta propiedad contiene el número de caracteres que hay en la cadena, que es igual a 0 en una cadena vacía. Esto es un valor numérico y se puede utilizar directamente en cálculos. var Longitud = "Hola mundo".length a 10. // Establece la variable Longitud Objeto Math El objeto Math tiene una cantidad de propiedades y métodos, todos ellos predefinidos. Las propiedades son números específicos. Uno de estos valores es pi (aproximadamente 3,14159...). Es la propiedad Math.PI, mostrada en el siguiente ejemplo. // Se declara una variable radio y se le asigna un valor numérico. var areaCirculo = Math.PI * radio * radio; // Observe que Math y PI están en mayúsculas. Uno de los métodos incorporados del objeto Math es el método de exponenciación o pow, que eleva un número a una potencia especificada. El siguiente ejemplo usa pi y exponenciación. // Esta fórmula calcula el volumen de una esfera con un radio especificado. volumen = (4/3)*(Math.PI*Math.pow(radio,3)); Objeto Date Utilice el objeto Date para capturar la fecha de hoy y para calcular diferencias entre fechas. Este objeto tiene varios métodos y propiedades, todos ellos predefinidos. En Instituto Superior Tecnológico 92 Norbert Wiener Manual del Alumno general, el objeto Date proporciona el día de la semana; el mes, día y año; y la hora en horas, minutos y segundos. Esta información está basada en el número de milisegundos transcurridos desde el 1 de enero de 1970, 00:00:00.000 GMT. GMT son las iniciales de "Greenwich Mean Time"; el término preferido es UTC u "Horario Universal Coordinado", que hace referencia a señales emitidas por el horario estándar mundial. Nota Para JScript, la hora comienza en la medianoche del 1 de enero de 1970; no puede solicitar a JScript que cree un objeto Date que represente una hora anterior a esa. Si necesita trabajar con horas anteriores, debe escribir su propio código para hacerlo, una tarea formidable. Para crear un nuevo objeto Date se utiliza el operador new. El siguiente ejemplo calcula, para el año actual, el número de días transcurridos y el número de días que faltan. /* Este ejemplo utiliza la matriz de nombres de meses previamente definida. La primera instrucción asigna la fecha de hoy, en formato "Día Mes Fecha 00:00:00 Año" , a la variable estoEsHoy. */ var estoEsHoy = new Date(); var hoy = new Date(); // Captura la fecha de hoy. // Extrae el año, mes y día. var esteAno = hoy.getYear() + 1900; var esteMes = losMeses[hoy.getMonth()]; var esteDia = esteMes + " " + hoy.getDate() + "," + (parseInt(hoy.getYear()) + 1900); // Determina el número de días transcurrido desde el inicio. hoy = Math.round(Date.parse(esteDia)/8.64e7); // Hace lo mismo con el principio del año. var primerDia = "1 de enero de " + esteAno; primerDia = Math.floor(Date.parse(primerDia)/8.64e7); // Lo vuelve a hacer para el final del año, en caso de que sea un año bisiesto. var ultimoDia = "31 de diciembre de " + esteAno; ultimoDia = Math.floor(Date.parse(ultimoDia)/8.64e7); // Calcula el número de días del año. var diasEnAno = (ultimoDia - primerDia) + 1; // Determina cuántos días han transcurrido y cuántos faltan. var diasTranscurridos= esteDia - primerDia; var diasFaltan = diasEnAno - diasTranscurridos; // Establece comentarios para la mayor parte del año. var comentario1 = diasTranscurridos+ " días han transcurrido en el año."; var comentario2 = "Eso significa que faltan " + diasFaltan+ " dias para terminar el año " + esteAno + "."; // Cubre los casos especiales: inicio y final de año y un solo día. if (diasTranscurridos == 0) { comentario1 = "Es uno de enero, " + esteAno + "."; } if (diasTranscurridos == 1) { comentario1 = "Sólo ha transcurrido un día."; } if(diasTranscurridos == diasEnAno) { comentario1 = esteAno + " acaba de terminar."; } if (diasFaltan == 0) { comentario2 = "Los mejores deseos en el nuevo año."; } if (diasFaltan == 1) { comentario2 = "Sólo queda un día para terminar el año " + esteAno + "."; } if (diasFaltan == diasEnAno) { comentario2 = "Feliz año nuevo."; } Instituto Superior Tecnológico Norbert Wiener 93 Manual del Alumno Objeto Number Además de las propiedades numéricas especiales (por ejemplo PI) que están disponibles en el objeto Math, muchas otras propiedades están disponibles en Microsoft JScript a través del objeto Number. Propiedad Descripción MAX_VALUE El número más grande posible, alrededor de 1,79E+308; puede ser positivo o negativo. (El valor varía ligeramente entre un sistema y otro.) MIN_VALUE El número más pequeño posible, alrededor de 2.22E-308; puede ser positivo o negativo. (El valor varía ligeramente entre un sistema y otro.) NaN Valor no numérico especial, "no es un número". POSITIVE_INFINITY Cualquier valor positivo mayor que Number.MAX_VALUE se convierte automáticamente a este valor; representado como "Inf". NEGATIVE_INFINITY Cualquier valor negativo mayor que -Number.MAX_VALUE se convierte automáticamente a este valor; representado como "Inf". Number.NaN es una propiedad especial que se define como "no es un número". Por ejemplo, una división por cero devuelve NaN. Si intenta analizar una cadena que no se puede analizar como un número, también devuelve Number.NaN. Si compara NaN con cualquier otro número o consigo mismo obtiene como resultado que no son iguales. Para verificar que un resultado es igual a NaN, no compare el resultado con Number.NaN; utilice la función isNaN(). Instituto Superior Tecnológico Norbert Wiener Semana 14 : 94 Manual del Alumno Estructuras de control. Control del Flujo del Programa ¿Por qué controlar el flujo de la ejecución? Muy frecuentemente, es necesaria una secuencia de comandos para funciones diferentes bajo diferentes condiciones. Por ejemplo, podría escribir una secuencia de comandos que comprobara la hora cada hora y que cambiara algún parámetro durante el transcurso del día. Podría escribir una secuencia de comandos que acepta algún tipo de entrada y actúa de una u otra forma según la entrada proporcionada. O podría escribir una secuencia de comandos que repita una acción especificada. Es posible comprobar muchos tipos de condiciones. Todas las comprobaciones condicionales en Microsoft JScript son de tipo Boolean, por lo que el resultado de cualquier comprobación es true o false. Puede comprobar valores numéricos, de tipo Boolean o cadenas indistintamente. JScript proporciona estructuras de control para un amplio intervalo de posibilidades. Las estructuras de control más sencillas son las instrucciones condicionales. Usar instrucciones condicionales JScript admite las instrucciones condicionales if e if...else. En las instrucciones if se comprueba una condición y si la condición cumple la comprobación, se ejecuta algún código de JScript que haya escrito. (En la instrucción if...else, se ejecuta un código distinto si la condición no cumple la comprobación.) La forma más sencilla de una instrucción if se puede escribir completamente en una sola línea, pero se usan mucho más las instrucciones if e if...else de múltiples líneas. Los siguientes ejemplos demuestran distintas sintaxis que puede usar con las instrucciones if e if...else. El primer ejemplo muestra el tipo de comprobación Boolean más sencillo. Si (y sólo si) el elemento encerrado entre paréntesis da como resultado true, se ejecuta la instrucción o el bloque de instrucciones que sigue a la instrucción if. // La función smash() se define en cualquier otra parte del código. if (newShip) smash(champagneBottle,bow); // Comprobación de tipo Boolean para saber si newShip es true. // En este ejemplo, la comprobación no se cumple a menos que ambas condiciones sean verdaderas. if (rind.color == "amarillo oscuro" && rind.texture == "arrugas grandes y pequeñas") { laRespuesta = ("¿Es un melón? <br> "); } // En este ejemplo, la comprobación se cumple si cualquiera de las condiciones es verdadera. var laReaccion = ""; if ((PesoEnLibras > 15) || (PesoEnLibras > 45)) { laReaccion = ("¡Qué lindo gatito! <br>"); } Instituto Superior Tecnológico Norbert Wiener 95 Manual del Alumno else laReaccion = ("¡Es un gato enorme! <br>"); Operador condicional JScript también admite una forma condicional implícita. Utiliza un signo de interrogación después de la condición que va a comprobar (en lugar de la palabra if antes de la condición) y especifica dos alternativas, una para usarla si la condición se cumple y otra para usarla si no se cumple. Las alternativas están separadas por dos puntos. var horas = ""; // Código que especifica que la variable horas tiene el contenido de // laHora o laHora - 12. horas += (laHora >= 12) ? " p.m." : " a.m."; Sugerencia Si tiene que comprobar varias condiciones juntas y sabe que alguna tiene más posibilidades de cumplirse, o de no cumplirse, que las demás, dependiendo de si las comprobaciones están conectadas OR (||) o con AND (&&), puede sacrificar la velocidad de ejecución de su secuencia de comandos colocando esa condición primero en la instrucción condicional. Por ejemplo, si tres condiciones deben ser verdaderas (usando operadores &&) y la segunda comprobación no se cumple, no se comprueba la tercera condición. De forma similar, si de varias condiciones, sólo una debe ser verdadera (usando operadores ||), la comprobación se detiene cuando cualquier condición cumple la comprobación. Esto es particularmente efectivo si las condiciones que desea comprobar implican la ejecución de llamadas a funciones o de otro código. Un ejemplo de los efectos secundarios de cortocircuito, es que en el siguiente ejemplo no se ejecutará ejecutarsegundo si ejecutarprimero() devuelve 0 o false. if ((ejecutarprimero() == 0) || (ejecutarsegundo() == 0)) // algún código Usar repeticiones o bucles Existen varias formas de ejecutar una instrucción o un bloque de instrucciones repetidas veces. En general, la ejecución repetitiva se llama ejecución en bucle. Normalmente se controla mediante la comprobación de alguna variable cuyo valor cambia cada vez que se ejecuta el bucle. Microsoft JScript es compatible con muchos tipos de bucles: for, for...in, while, do...while y switch. Usar bucles for La instrucción for especifica una variable de contador, una condición de comprobación y una acción que actualiza el contador. Justo antes de cada ejecución del bucle (esto se llama una iteración del bucle), se comprueba la condición. Después de ejecutar el bucle, la variable de contador se actualiza antes de comenzar la siguiente iteración. Si nunca se cumple la condición del bucle, éste nunca se ejecuta. Si la condición del bucle se cumple siempre, el bucle se convierte en un proceso infinito. Aunque es posible que lo primero sea necesario en algunos casos, lo segundo, raramente lo es. Por lo que debe tener cuidado al escribir las condiciones de sus bucles. Instituto Superior Tecnológico Norbert Wiener 96 Manual del Alumno /* La expresión de actualización ("icount++" en los siguientes ejemplos) se ejecuta al final del bucle, después de que el bloque de instrucciones que forman el cuerpo del bucle se ejecuta y antes de comprobar la condición. */ var limite = 11; // Establece un límite de 11 en el bucle. var suma = new Array(limite); // Crea una matriz llamada suma con 11 miembros, desde 0 hasta 10. var laSuma = 0; suma[0] = 0; for(var icount = 1; icount < limite; icount++) { // En este caso, cuenta desde 1 hasta 10. laSuma += icount; suma[icount] = laSuma; } var nuevaSuma = 0; for(var icount = 1; icount > limite; icount++) { // Esto nunca se ejecuta. nuevaSuma += icount; } var suma = 0; for(var icount = 1; icount > 0; icount++) { // Esto es un bucle infinito. suma += icount; } Usar bucles for...in JScript proporciona un tipo de bucle especial para examinar una a una todas las propiedades de un objeto. El contador del bucle en un bucle for...in itera por todos los índices de la matriz. El contador es una cadena, no un número. for (j in pastaVerde) // pastaVerde es un objeto con varias propiedades { // Varias instrucciones de código JScript. } Usar bucles while El bucle while es muy parecido a un bucle for. La diferencia es que un bucle while no tiene incorporada una variable de contador o una expresión de actualización. Si ya tiene alguna condición que cambia y que se refleja en el valor asignado a una variable y desea usarla para controlar la ejecución repetitiva de una instrucción o un bloque de instrucciones, utilice un bucle while. var losMomentos = ""; var laCuenta = 42; // Inicia la variable de contador. while (laCuenta >= 1) { if (laCuenta > 1) { losMomentos = "Sólo quedan " + laCuenta + " momentos."; } else { losMomentos = "Sólo queda un momento."; } laCuenta--; // Actualiza la variable de contador. } losMomentos = "Terminó"; Instituto Superior Tecnológico 97 Norbert Wiener Manual del Alumno Nota Debido a que los bucles while no tienen variables de contador explícitas incorporadas, todavía son más vulnerables a crear bucles infinitos que otros tipos de bucles. Además, en parte porque no es necesariamente fácil de descubrir dónde y cuándo se actualiza la condición del bucle, sólo es muy fácil escribir un bucle while en el que la condición nunca se actualice. Debe tener mucha precaución al diseñar bucles while. Usar instrucciones break y continue Microsoft JScript proporciona una instrucción para detener la ejecución de un bucle. La instrucción break se puede usar para detener la ejecución si se cumple alguna condición (que se supone una condición especial). La instrucción continue se puede usar para pasar inmediatamente a la siguiente iteración, saltando el resto del bloque de código pero actualizando la variable de contador como sucede si el bucle es un bucle for o for...in. var var var var for { elComentario = ""; elResto = 0; laSalida = 3; comprobar = 27; (kcuenta = 1; kcuenta <= 10; kcuenta++) elResto = comprobar % kcuenta; if (elResto == laSalida) { break; // Sale del bucle al encontrar el primer resto igual a salida. } elComentario = comprobar + " dividido por " + kcuenta + " deja un resto igual a " + elResto; } for (kcuenta = 1; kcuenta <= 10; kcuenta++) { elResto = comprobar % kcuenta; if (elResto != laSalida) { continue; // Selecciona sólo los restos iguales a la salida, ignorando todos los demás. } // Código de JScript que usa los restos seleccionados. } var losMomentos = ""; var laCuenta = 42; // Se inicia el contador. while (laCuenta >= 1) { // if (laCuenta < 10) { // Advertencia // Este uso de continue crea un bucle infinito. // continue; // } if (laCuenta > 1) { losMomentos = "Sólo quedan " + laCuenta + " momentos."; } else { losMomentos = "Sólo queda un momento."; } laCuenta--; // Se actualiza el contador. } laCuenta = "Terminó"; Instituto Superior Tecnológico Norbert Wiener Semana 15 : 98 Manual del Alumno Ventanas y modelo de objetos. Objeto window Es el objeto principal. Define la ventana sobre la que estamos trabajando y tiene como descendientes los objetos referentes a la barra de tareas, el documento o la secuencia de direcciones de la última sesión. Ahora veremos su métodos y propiedades más usadas open [Variable=][window.]open("URL","Nombre","Propiedades"); El método open sirve para crear (y abrir) una nueva ventana. Si queremos tener acceso a ella desde la ventana donde la creamos deberemos asignarle una variable, si no simplemente invocamos el método: el navegador automáticamente sabrá que pertenece al objeto window. El parámetro URL contendrá la dirección de la ventana que estamos abriendo: si está en blanco, la ventana se abrirá con una página en blanco. El Nombre será el que queramos que se utilize como parámetro de un TARGET y las Propiedades son una lista separada por comas de algunos de los siguientes elementos: toolbar[=yes|no] location[=yes|no] directories[=yes|no] status[=yes|no] menubar[=yes|no] scrollbars[=yes|no] resizable[=yes|no] width=pixels height=pixels Debemos tener cuidado con las propiedades que modifiquemos, es posible que algunas combinaciones de los mismos no funcionen en todos los navegadores. El Explorer 4, por ejemplo, da error ante la combinación toolbar=no, directories=no, menubar=no. close Variable.close(); Cierra la ventana Variable. A no ser que hayamos acabado de abrirla nosotros pedirá al usuario una ventana para que decida él si quiere o no cerrarla. Instituto Superior Tecnológico Norbert Wiener 99 Manual del Alumno alert Variable.alert("Mensaje"); Muestra una ventana de diálogo en la ventana especificado. Variable con el mensaje status Define la cadena de caracteres que saldrá en la barra de estado en un momento dado. defaultStatus Define la cadena de caracteres que saldrá por defecto en la barra de estado. Cuando no la especificamos, defaultStatus será igual al último valor que tomó status. Objeto document Es un objeto derivado de window que identifica a un documento HTML. write document.write("Cadena"); Escribe en un documento HTML, en el lugar del mismo donde hayamos situado el script que contiene al mé:todo, la cadena dada. El método writeln hace lo mismo, pero incluyendo al final un retorno de carro. lastModified Contiene la fecha y hora en que se modificó el documento por última vez y se suele usar en conjunción con write para añadir al final del documento estas características. bgColor Modifica el color de fondo del documento. El color deberá estar en el formato usado en HTML. Es decir, puede ser red o FF0000. Objeto history Este objeto se deriva de document y contiene todas las direcciones que se han visitado en la sesión actual. Tiene estos tres métodos: o document.history.back(): Volver a la página anterior. o document.history.forward(): Ir a la página siguiente. o document.history.go(donde): Ir a donde se indique, siendo donde un número tal que go(1)=forward() y go(-1)=back(). Instituto Superior Tecnológico Norbert Wiener 100 Manual del Alumno Objeto form Este objeto derivado de document se refiere a un formulario. Puede ser útil para verificarlos antes de enviarlos. submit Nombre.submit() Envía el formulario llamando Nombre. text Contiene el texto contenido en un campo de edición de un formulario. Objeto date Este es un objeto de propósito general que permite trabajar con fechas y horas Objeto math Este otro objeto de propósito general incluye las diversas funciones matemáticas más comunes, como abs o sin o el valor PI. Objeto navigator A través de este objeto podremos averiguar varias características del navegador que usamos. Por ejemplo: o navigator.appName: Nombre del navegador. o navigator.appVer: Número principal de versión. o navigator.language: Idioma del mismo. o navigator.platform: Plataforma donde esta ejecutándose. No podemos sobreescribir estos atributos, pero sí leerlos. Objeto screen Con este objeto podremos averiguar la configuración de la pantalla. Al igual que en el anterior, todos sus atributos son de sólo lectura. o screen.height: Altura.. o screen.width: Anchura. o screen.pixelDepth: Número de bits por pixel. Instituto Superior Tecnológico Norbert Wiener 101 Manual del Alumno Eventos Un evento, como su mismo nombre indica, es algo que ocurre. Para que una rutina nuestra se ejecute sólo cuando suceda algo extraño deberemos llamarla desde un controlador de eventos. Estos controladores se asocian a un elemento HTML y se incluyen así: <A HREF="http://home.netscape.com" onMouseOver="MiFuncion()"> Lista de Eventos Aquí se expone una pequeña guía de eventos definidos en JavaScript : Evento Descripción onLoad Terminar de cargarse una página onUnLoad Salir de una página (descargarla) Elementos que lo admiten <BODY...> <FRAMESET...> <LAYER...> <BODY...><FRAMESET...> <LAYER...> onMouseOver Pasar el ratón por encima <A HREF..> <AREA...> <LAYER...> onMouseOut Que el ratón deje de estar encima <A HREF..> <AREA...> <LAYER...> onSubmit Enviar un formulario <FORM...> onClick Pulsar un elemento <INPUT TYPE="button, checkbox, link, radio"...> onBlur Perder el cursor <INPUT TYPE="text"...> <TEXTAREA...> <LAYER...> onChange Cambiar de contenido o perder el cursor <INPUT TYPE="text"...> <TEXTAREA...> onFocus Conseguir el cursor <INPUT TYPE="text"...> <TEXTAREA...> <LAYER...> onSelect Seleccionar texto <INPUT TYPE="text"...> <TEXTAREA...> Un ejemplo Como ejemplo, vamos a hacer que una ventana aparezca automáticamente en cuanto pasemos un cursor por encima de un elemento <A> (e impidiendo, de paso, que quien esté viendo la página pueda hacer uso del mismo). <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- Se usan los comentarios para esconder el código a navegadores sin JavaScript Instituto Superior Tecnológico Norbert Wiener 102 Manual del Alumno function Alarma() { alert("No me pises, que llevo chanclas"); return true; } // --> </SCRIPT> </HEAD> <BODY> <A HREF="eventos.html" onMouseOver="Alarma()"> Pasa por aquí encima </A> </BODY> </HTML> Objeto event Este objeto permite la identificación de un evento con el atributo type y su localizacion con x e y, entre otras cosas. Así, por ejemplo, podríamos hacer: <A HREF="http://home.netscape.com" onMouseOut='alert("Hubo un evento "+event.type+" en el enlace.")'> Pasa por aquí encima y cuando te vayas saldrá la ventanita </A> Su importancia radica en el hecho de que se puede usar para capturar toda clase de eventos por medio de la función captureEvents(e). El argumento de esta función es una propiedad del objeto event que indica el tipo de eventos que desees capturas de este modo: captureEvents(event.CLICK | event.MOUSEOVER | event.BLUR) que permitiría la captura de todos los eventos onLoad, onMouseOver y onBlur. El único uso que le he encontrado a estas posibilidades está en la creación de objetos nuevos, que de este modo tendrían un control de eventos propio. Instituto Superior Tecnológico Norbert Wiener Semana 16 : 103 Manual del Alumno HTML Dinámico. DHTML DHTML no es precisamente un lenguaje de programación. Más bien se trata de una nueva capacidad de la que disponen los navegadores modernos, por la cual se puede tener un mayor control sobre la página que antes. Cualquier página que responde a las actividades del usuario y realiza efectos y funcionalidades se puede englobar dentro del DHTML, pero en este caso nos referimos más a efectos en el navegador por los cuales se pueden mostrar y ocultar elementos de la página, se puede modificar su posición, dimensiones, color, etc. DHTML nos da más control sobre la página, gracias a que los navegadores modernos incluyen una nueva estructura para visualizar en páginas web denominada capa. Las capas se pueden ocultar, mostrar, desplazar, etc. Para realizar las acciones sobre la página, como modificar la apariencia de una capa, seguimos necesitando un lenguaje de programación del lado del cliente como Javascript o VBScript. Dentro del concepto de DHTML se engloban también las Hojas de Estilo en Cascada o CSS (Cascade Style Sheets), que veremos a continuación. Qué es CSS CSS, es una tecnología que nos permite crear páginas web de una manera más exacta. Gracias a las CSS somos mucho más dueños de los resultados finales de la página, pudiendo hacer muchas cosas que no se podía hacer utilizando solamente HTML, como incluir márgenes, tipos de letra, fondos, colores... CSS son las siglas de Cascading Style Sheets, en español Hojas de estilo en Cascada. En este reportaje vamos a ver algunos de los efectos que se pueden crear con las CSS sin necesidad de conocer la tecnología entera. Para empezar Las Hojas de Estilo en Cascada se escriben dentro del código HTML de la página web, solo en casos avanzados se pueden escribir en un archivo a parte y enlazar la página con ese archivo. En un principio vamos a utilizar la manera más directa de aplicar estilos a los elementos de la página, mas adelante veremos la declaración en archivos externos. Para ello, y esto es la primera lección de este artículo, vamos a conocer un nuevo atributo que se puede utilizar en casi todas las etiquetas HTML: style. Ejemplo: <p style="color:green;font-weight:bold">El párrafo saldrá con color verde y en negrita</p> Dentro del atributo style se deben indicar los atributos de estilos CSS separados por punto y coma (;). Durante este artículo vamos a conocer muchos atributos de CSS, los dos primeros que hemos visto aquí son: Instituto Superior Tecnológico Norbert Wiener 104 Manual del Alumno Color: indica el color del contenido la etiqueta donde estemos utilizándolo, generalmente indica el color del texto. Font-weight: indica el grosor del texto. Bold sirve para poner en negrita. Color en los enlaces Con HTML definimos el color de los enlaces en la etiqueta <body>, con lo atributos link, vlink y alink. Esto nos permite cambiar el color de los enlaces para todo el documento, pero ¿Y si queremos cambiar el color de un enlace en concreto, para que tenga otro color que el definido en la etiqueta <body>? Para hacer esto utilizaremos el atributo style dentro del enlace: <a href="mienlace.html" style="color:red"> Así saldrá el enlace en color rojo, independientemente de lo definido para todo el documento. Espaciado entre líneas Con CSS podemos definir el espacio que hay entre cada línea del documento, utilizando el atributo line-height. Por ejemplo, podemos definir que para todo un párrafo el espacio entre cada una de sus líneas sea 25 pixels: <p style="line-height: 25px;"> Un párrafo normal en el que cada una de las líneas está separada 25 pixels de la otra. Hay que poner suficiente texto como para que se vean 2 líneas, así saldrán separadas </p> Espaciado entre caracteres Se puede definir también el espacio entre cada carácter. Esto se hace con el atributo de CSS letter-spacing. Veamos un ejemplo: <p style="letter-spacing:12cm"> Este párrafo tiene las letras espaciadas por 1 centímetro. </p> Este atributo, al igual que ocurre con muchos otros de CSS, no está soportado por todos los navegadores. En concreto Netscape, en su versión 4 todavía no lo incluye. Enlaces sin subrayado Uno de los efectos más significativos y fáciles de realizar con CSS es eliminar el subrayado de los enlaces de una página web. Existe un atributo que sirve para definir la decoración de un texto, si está subrayado, tachado, o si no tiene ninguna de estas "decoraciones". Es el atributo text-decoration, en este caso indicaremos en un enlace que no queremos decoración: <a href="mipagina.html" style="text-decoration:none"> Incluir estilos para todo un sitio web Una de las características más potentes de la programación con hojas de estilo Instituto Superior Tecnológico 105 Norbert Wiener Manual del Alumno consiste en definir los estilos de todo un sitio web. Esto se consigue creando un archivo donde tan sólo colocamos las declaraciones de estilos de la página y enlazando todas las páginas del sitio con ese archivo. De este modo, todas las páginas comparten una misma declaración de estilos y, por tanto, si la cambiamos, cambiarán todas las páginas. Veamos ahora todo el proceso para incluir estilos con un fichero externo. 1- Creamos el fichero con la declaración de estilos Es un fichero de texto normal, que puede tener cualquier extensión, aunque le podemos asignar la extensión .css para aclararnos qué tipo de archivo es. El texto que debemos incluir debe ser escrito exclusivamente en sintaxis CSS, es un poco distinta que la sintaxis que utilizamos dentro del atributo style. Sería erróneo incluir código HTML en este archivo: etiquetas y demás. Podemos ver un ejemplo a continuación. P{ font-size : 12pt; font-family : arial,helvetica; font-weight : normal; } H1 { font-size : 36pt; font-family : verdana,arial; text-decoration : underline; text-align : center; background-color : Teal; } BODY { background-color : #006600; font-family : arial; color : White; } 2- Enlazamos la página web con la hoja de estilos Para ello vamos a colocar la etiqueta <LINK> con los atributos rel="STYLESHEET" indicando que el enlace es con una hoja de estilo. type="text/css" porque el archivo es de texto, en sintaxis CSS. href="estilos.css" indica el nombre del fichero fuente de los estilos. Veamos una página web entera que enlaza con la declaración de estilos anterior: <html> <head> <link rel="STYLESHEET" type="text/css" href="estilos.css"> <title>Página que lee estilos</title> </head> <body> <h1>Página que lee estilos</h1> <p> Esta página tiene en la cabecera la etiqueta necesaria para enlazar con la hoja de estilos. Es muy fácil. </p> </body> </html> Las CSS tienen mucho más jugo Las Hojas de Estilo en Cascada son un estándar muy amplio, con unas especificaciones y posibilidades muy grandes. En este artículo hemos visto unos cuantos efectos interesantes que realizar aunque no tengamos ningún conocimiento previo. Sin embargo, lo mejor para trabajar con esta tecnología es conocerla bien, gracias a ello, los resultados serán mucho más sorprendentes. Instituto Superior Tecnológico Norbert Wiener Semana 17 : 106 Manual del Alumno JavaScript : Animación. ANIMACIONES La animación en JavaScript puede ser de texto, imágenes o ambas cosas interactuando. En todos los casos para conseguirla se trabaja del mismo modo. Lo primero que tendremos que hacer es preparar las etiquetas del texto o de la imagen dandoles un nombre (con los mismos requisitos que las variables) por medio del atributo name en caso de las imágenes e id en caso de texto. De esta manera podremos hacer referencia al elemento deseado desde la función encargada de ejecutar la animación. A continuación, añadiremos el evento con la llamada a la función (si es necesario, en muchas ocasiones se llama a la función por medio del método setTimeout que veremos en un momento). El último cambio que afecta a las etiquetas del texto o de la imagen afecta a los estilos. Por tanto tendremos que añadir obligatoriamente el atributo style con todos aquellos estilos que intervengan en la animación. De entre todos los estilos que existen, podemos destacar los que hay en la siguiente tabla. ESTILOS SINTAXIS DESCRIPCIÓN Posibilita el style="Position:absolute;top:pos;left:pos" cambio de posición. style="color:nombre_color" Posibilita el cambio de color. style="visibility:hidden o visible" Posibilita mostrar y ocultar. Recordar que si trabajamos con varios estilos todos se incluyen dentro de un atributo style. Una vez construida y modificada la o las etiquetas, las variaciones que sufran sus etilos o cualquier otro de sus atributos se realizarán en la función que tengamos preparada para ello. Para todos los cambios que realicemos la sintaxis a seguir es: SINTAXIS: nombre_etiqueta.style.estilo=valor; nombre_etiqueta.atributo=valor; Si nuestra animación avanza según un intervalo de tiempo, debemos utilizar el método setTimeout() para establecer el intervalo de tiempo y la llamada a la función. Este método se puede utilizar en cualquier parte del código, pero normalmente se encuentra al principio del código y dentro de la función donde se realiza cada uno de los pasos de nuestra animación. La sintaxis del método es (recordar respetar mayúsculas y minúsculas): Instituto Superior Tecnológico Norbert Wiener 107 Manual del Alumno SINTAXIS: setTimeout("nombre_función()",intervalo milisegundos); EJEMPLOS EJEMPLO 1: Texto con movimiento en horizontal. <html> <head> <script> var horizontal=12; setTimeout("mueve()",500); function mueve() { horizontal+=10; TEXTO1.style.left=horizontal; if(horizontal>=200) horizontal=12; setTimeout("mueve()",500); } </script> </head> <body> <p id="TEXTO1" style="position:absolute; top:16; left:12"> TEXTO </p> </body> </html> EJEMPLO 2: Texto que aparece y desaparece. <html> <head> <script> var estado=true; setTimeout("ver()",500); function ver() { estado=!estado; if(estado==true) TEXTO1.style.visibility="visible"; else TEXTO1.style.visibility="hidden"; setTimeout("ver()",500); } </script> </head> <body> <p id="TEXTO1" style="visibility:visible">TEXTO</p> </body> </html> EJEMPLO 3: Imagen que cambia cuando entra y sale el ratón. <html> <head> Instituto Superior Tecnológico Norbert Wiener 108 Manual del Alumno <script> function pasa(valor) { if(valor==1) img.src="ten1.gif" else img.src="ten2.gif" } </script> </head> <body> <img name="img" src="ten2.gif" onMouseOver=pasa(1); onMouseOut=pasa(2);> </body> </html> EJEMPLO 4: Imágenes que van cambiando solas. <html> <head> <script> var estado=true; setTimeout("cambio()",500); function cambio() { estado=!estado; if(estado==true) img.src="tenista1.gif" else img.src="tenista2.gif" setTimeout("cambio()",500); } </script> </head> <body> <img name="img" src="tenista1.gif"> </body> </html> EJEMPLO 5: Cambiamos la imagen según situemos el ratón en un texto o en otro. <html> <head> <script> function imag(valor) { if(valor==1) img.src="tenista1.gif" else img.src="tenista2.gif" } </script> </head> <body> <table border="1" width="15%"> <tr> <td width="100%"><p onMouseOver=imag(1);>IMAGEN 1</td> </tr> Instituto Superior Tecnológico Norbert Wiener 109 Manual del Alumno <tr> <td width="100%"><p onMouseOver=imag(2);>IMAGEN 2</td> </tr> </table> <br> <img name="img" src="tenista1.gif"> </body> </html> EJEMPLO 6: Cambiar la imagen por medio de un control. En este caso una lista (select). Es igual que en el caso anterior. Lo único que cambia es el evento que gestiona la llamada a la función. <html> <head> <script> function cambio(valor) { if(valor=="imagen1") img.src="tenista1.gif" else img.src="tenista2.gif" } </script> </head> <body> <select size="3" name="lista" onChange=cambio(value);> <option value="imagen1">Imagen 1</option> <option value="imagen2">Imagen 2</option> </select> <br> <img name="img" src="tenista1.gif"> </body> </html> EJEMPLO 7: Una imagen moviéndose en vertical automáticamente. <html> <head> <script> var vertical=35; var ida=true; setTimeout("mover()",200); function mover() { if(vertical<=200 && ida==true) vertical+=10; else { vertical-=10; ida=false; if(vertical<=35) ida=true; } img.style.top=vertical; setTimeout("mover()",200); } </script> </head> <body> <img name="img" src="pic.gif" style="position:absolute; left:12; top:35"> </body> </html> Instituto Superior Tecnológico Norbert Wiener Semana 18 : 110 Manual del Alumno Aplicación Web. Cookies Parece más que necesario definir algo que lleva el absurdo nombre de galletita o cookie. Una galleta es un elemento de una lista que se guarda en el fichero cookies.txt en el ordenador del visitante. Cada elemento de esa lista tiene dos campos obligatorios: el nombre y su valor; y uno opcional: la fecha de caducidad. Este último campo sirve para establecer la fecha en la que se borrará la galleta. Tiene este formato: nombre=valor;[expires=caducidad;] Sólo el servidor que ha enviado al usuario una determinada cookie puede consultarla. Cada galleta tiene un tamaño máximo de 4 Kb y puede haber un máximo de 300 cookies en el disco duro. Cada servidor podrá almacenar como mucho 20 galletas en el fichero cookies.txt (en el caso de usar Netscape) o en el directorio cookies (si utilizamos Explorer) del usuario. Si no especificamos la fecha de caducidad la galleta se borrará del disco duro del usuario en cuanto éste cierre el navegador. Funciones básicas Para poder hacer algo con cookies deberemos programar dos funciones: una que se encargue de mandar una galleta al usuario y otra que consulte su contenido. function mandarGalleta(nombre, valor, caducidad) { document.cookie = nombre + "=" + escape(valor) + ((caducidad == null) ? "" : ("; expires=" + caducidad.toGMTString())) } Con esta función mandamos una galleta. Vemos que el valor es codificado por medio de la función escape y que la caducidad (en caso de decidir ponerla) debe ser convertida a formato GMT. Esto se hace mediante el metodo toGMTString() del objeto Date. function consultarGalleta(nombre) { var buscamos = nombre + "="; if (document.cookie.length > 0) { i = document.cookie.indexOf(buscamos); if (i != -1) { i += buscamos.length; j = document.cookie.indexOf(";", i); if (j == -1) j = document.cookie.length; return unescape(document.cookie.substring(i,j)); } } } Instituto Superior Tecnológico 111 Norbert Wiener Manual del Alumno Declaramos la variable buscamos que contiene el nombre de la galleta que queremos buscar más el igual que se escribe justo después de cada nombre, para que así no encontremos por error un valor o una subcadena de otro nombre que sea igual al nombre de la galleta que buscamos. Una vez encontrada extraemos la subcadena que hay entre el igual que separa el nombre y el valor y el punto y coma con que termina dicho valor. Un ejemplo Vamos a ver un ejemplo. Utilizaremos una galleta llamada VisitasAlCursoDeJavaScript para guardar el número de veces que has visitado este curso: <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- Se usan los comentarios para esconder el código a navegadores sin JavaScript function Contador() { var fecha=new Date (99, 12, 31); // La fecha de caducidad es 31 de diciembre del 1999 if (!(num=consultarGalleta("VisitasAlCursoDeJavaScript"))) num = 0; num++; mandarGalleta("VisitasAlCursoDeJavaScript", num, fecha); if (num==1) document.write("esta es la primera vez que lees este capítulo."); else { document.write("has visitado este curso "+num+" veces."); } } // --> </SCRIPT> </HEAD> <BODY> Por lo que veo, <SCRIPT LANGUAGE="JavaScript"> <!-Contador(); // --> </SCRIPT> </BODY> </HTML> La función consulta el valor de la galleta incrementandolo y, si no existe, lo pone a uno. Luego escribe en el documento el número de veces que has visitado el curso Semana 19 : Semana 20 : (Examen Final). (Examen Sustitutorio).