Los lenguajes de scripting son una popular familia de lenguajes de pro­gra­ma­ción que se pueden utilizar para sa­ti­s­fa­cer rá­pi­da­me­n­te las exi­ge­n­cias más comunes. Los lenguajes de scripting antiguos se uti­li­za­ban más bien para apli­ca­cio­nes muy concretas o como lenguajes pegamento, es decir, para pegar sistemas ya exi­s­te­n­tes. Con la aparición de la World Wide Web, se es­ta­ble­cie­ron una serie de lenguajes de scripting para la uti­li­za­ción en se­r­vi­do­res web. Puesto que los lenguajes de scripting si­m­pli­fi­can el pro­ce­sa­mie­n­to de texto, son perfectos para la creación dinámica de páginas HTML.

Hoy en día, los lenguajes de scripting suponen, según el índice TIOBE, apro­xi­ma­da­me­n­te un tercio de los lenguajes de pro­gra­ma­ción más uti­li­za­dos en todo el mundo. Ja­va­S­cri­pt es prá­c­ti­ca­me­n­te el único lenguaje de scripting que se ejecuta en el navegador en el lado del cliente, pero también los lenguajes del lado del servidor PHP, Python, Ruby y Perl son lenguajes de scripting.

¿En qué se di­fe­re­n­cian los lenguajes de scripting y de pro­gra­ma­ción?

Para co­m­pre­n­der qué ca­ra­c­te­ri­za a los lenguajes de scripting, resulta de gran ayuda conocer sus di­fe­re­n­cias respecto a los lenguajes de pro­gra­ma­ción co­n­ve­n­cio­na­les, como C, C++ y Java. En estos lenguajes, el pro­gra­ma­dor escribe un texto fuente que, en un paso posterior, se convierte en código binario. Se utilizan, por tanto, dos archivos: el archivo del texto fuente —en el que el pro­gra­ma­dor trabaja— y un archivo binario que se genera a partir de él y que se ejecuta di­re­c­ta­me­n­te en el ordenador. Como traductor entre los dos archivos se utiliza un programa especial, el de­no­mi­na­do co­m­pi­la­dor.

La tra­n­s­fo­r­ma­ción del texto fuente en código binario se denomina co­m­pi­la­ción. Durante la co­m­pi­la­ción, se comprueba la plau­si­bi­li­dad del texto fuente: ¿Están todas las variables uti­li­za­das realmente definidas? ¿Se adecúan los tipos de ar­gu­me­n­tos de función a las de­fi­ni­cio­nes de función? ¿Ha olvidado el pro­gra­ma­dor algún carácter? Esta co­m­pro­ba­ción se lleva a cabo con cada una de las co­m­pi­la­cio­nes para el texto al completo y puede necesitar tiempo. El código binario re­su­l­ta­n­te de la co­m­pi­la­ción está muy op­ti­mi­za­do para trabajar muy rápido y con el menor número de errores posibles durante la ejecución. Los lenguajes co­m­pi­la­dos son, por lo tanto, pa­r­ti­cu­la­r­me­n­te útiles para tareas de alta in­te­n­si­dad de pro­ce­sa­mie­n­to y sistemas de mayor magnitud.

La ejecución de un programa escrito en lenguaje de scripting, en cambio, no conlleva co­m­pi­la­ción, es decir, no se genera ningún archivo binario a partir del texto fuente escrito por el pro­gra­ma­dor. Como co­n­se­cue­n­cia, los programas escritos en lenguajes de scripting son ge­ne­ra­l­me­n­te menos efi­cie­n­tes en la ejecución. Sin embargo, esta merma en la efi­cie­n­cia no es puramente una de­s­ve­n­ta­ja, sino una elección co­n­s­cie­n­te: los lenguajes de scripting reducen la carga para el pro­gra­ma­dor y aumentan la que recae en el pro­ce­sa­dor. Los lenguajes de scripting son es­pe­cia­l­me­n­te adecuados para programas pequeños y medianos.

La idea de facilitar el trabajo del pro­gra­ma­dor es el hilo conductor de la ar­qui­te­c­tu­ra de muchos lenguajes de scripting. De esta forma, se evita la gestión de al­ma­ce­na­mie­n­to manual, un método pa­r­ti­cu­la­r­me­n­te eficiente, pero propenso a errores. Además, en la mayoría de lenguajes de scripting no es necesario indicar el tipo de la variable y, puesto que estos programas no se compilan, tampoco hay necesidad de una función main. Con los lenguajes de scripting se puede programar software de manera más directa y con menos texto fuente. Si se comparan los si­guie­n­tes ejemplos, se ve que ambos programas ofrecen el mismo resultado:

// Ejemplo "Hola mundo" en Java
class HolaMundo {
    static public void main( String args[] ) {
        System.out.println( "¡Hola, mundo!" );
    }
}
# Ejemplo "Hola, mundo" en Python
print "¡Hola, mundo!"

Ca­ra­c­te­rí­s­ti­cas de los lenguajes de scripting

Como se ha me­n­cio­na­do al principio, los programas de lenguaje de scripting no necesitan ser tra­n­s­fo­r­ma­dos a código binario por un co­m­pi­la­dor antes de ser eje­cu­ta­dos. En lugar del co­m­pi­la­dor, se utiliza un programa de­no­mi­na­do in­té­r­pre­te. Para en­te­n­de­r­lo mejor, hay que ima­gi­nar­se que un in­té­r­pre­te lee el texto fuente de arriba a abajo y, a medida que lo hace, genera y ejecuta código binario.

Si los conceptos código fuente, código binario e in­té­r­pre­te te resultan poco fa­mi­lia­res, podemos recurrir al siguiente ejemplo: imagínate el texto fuente como una partitura musical para una orquesta. En este ejemplo, el código binario se co­rre­s­po­n­de con una grabación realizada de la pieza musical, al­ma­ce­na­da en un CD. La pieza musical en el CD se puede re­pro­du­cir en cualquier re­pro­du­c­tor co­m­pa­ti­ble, pero ya no se puede modificar. El programa in­té­r­pre­te se co­rre­s­po­n­de con la orquesta, que in­te­r­pre­ta la pieza musical en vivo.

Cómo programar con lenguajes de scripting de manera in­ter­ac­ti­va por REPL

En muchos lenguajes de scripting es posible ejecutar el in­té­r­pre­te de manera in­ter­ac­ti­va. Esto se denomina modo REPL, del inglés read-eval-print-loop, que se puede entender como ciclo de lectura, ejecución y muestra. El pro­gra­ma­dor transmite el texto fuente al in­té­r­pre­te, que lo lee y ejecuta. El in­té­r­pre­te muestra a co­n­ti­nua­ción el resultado y espera a la siguiente in­tro­du­c­ción de datos para repetir el ciclo.

Si se produce algún fallo en el modo REPL, el pro­gra­ma­dor puede vi­sua­li­zar los co­n­te­ni­dos de las variables para lo­ca­li­zar­lo. Además, también es posible so­bre­s­cri­bir el valor de una variable y probar parte del texto fuente con el nuevo valor. De esta forma, se consigue componer un programa a partir de pequeñas piezas ya probadas. El de­sa­rro­llo y la re­so­lu­ción de errores se realizan de una sola vez. Esto permite escribir un programa operativo con rapidez de manera es­pe­cia­l­me­n­te sencilla.

Definir es­tru­c­tu­ras de datos complejas en lenguajes de scripting a modo de literales

El objetivo de los lenguajes de scripting es facilitar el trabajo de los pro­gra­ma­do­res. Estos lenguajes ofrecen para ello una serie de he­rra­mie­n­tas, entre las que se cuentan es­tru­c­tu­ras de datos completas como se­cue­n­cias de ca­ra­c­te­res, listas, campos y objetos. Estos se pueden escribir en lenguaje de scripting en forma de los de­no­mi­na­dos literales. Así es posible proyectar es­tru­c­tu­ras de datos complejas di­re­c­ta­me­n­te, en lugar de co­n­s­trui­r­las por medio de varios comandos. El pro­gra­ma­dor puede expresar las es­tru­c­tu­ras de datos ne­ce­sa­rias con más facilidad, lo cual le ahorra trabajo.

// Ejemplo para un literal de objeto en JavaScript
client = {
    'nombre': "Juan",
    'apellido': "Martínez",
    'edad': 40,
    'activo': true,
    'direcciones': {
        'privado': {},
        'empresa': {},
    },
}
# Ejemplo para la generación en HTML mediante literal de plantilla en JavaScript
page_title = '¿Qué son los lenguajes de scripting?'
h1 = '<h1>${page_title}</h1>'
# return "<h1>¿Qué son los lenguajes de scripting?</h1>"

Ti­pi­fi­ca­ción dinámica en lenguajes de scripting

En los ejemplos de código an­te­rio­res quizá te ha llamado la atención que no hay ningún tipo como String, int o bool. Sin embargo, el programa requiere in­fo­r­ma­cio­nes de tipo para su ejecución. Entonces, ¿de dónde se obtienen?

Los lenguajes de scripting se suelen basar en la ti­pi­fi­ca­ción dinámica: puesto que el tipo de una variable no es fijo, sino que puede variar de­pe­n­die­n­do del contexto, el in­té­r­pre­te deduce el tipo a partir del contexto. Un ejemplo:

# Ejemplo para tipificación dinámica en Python
# un nombre, representado como lista de nombre, apellido
name = ['Juan', 'Martínez']
# el tipo de la variable "name" es "list"
type(name)
# a continuación solo necesitamos los nombres
name = name[0]
# el tipo de la variable "name" ahora es "str"
type(name)

Apli­ca­ción de lenguajes de scripting

Los lenguajes de scripting se ca­te­go­ri­zan en función del uso y el lugar de uti­li­za­ción. Algunos se utilizan en la línea de comandos para agrupar su­ce­sio­nes de órdenes y conseguir así la au­to­ma­ti­za­ción. A este tipo de lenguajes pe­r­te­ne­cen Bash y Po­we­r­She­ll.

VBA y Ap­ple­S­cri­pt realizan una función similar. Con estos lenguajes es posible au­to­ma­ti­zar procesos a nivel de apli­ca­ción.

En el servidor web se utilizan PHP, Perl, Ruby, Python y Ja­va­S­cri­pt para conseguir apli­ca­cio­nes web y sitios web dinámicos. Ja­va­S­cri­pt continúa siendo el único lenguaje de scripting para na­ve­ga­do­res web. En principio solo estaba previsto para la pro­gra­ma­ción de elementos in­ter­ac­ti­vos, pero hoy en día se escriben apli­ca­cio­nes web enteras en Ja­va­S­cri­pt.

Los lenguajes de scripting también se utilizan en los ámbitos de la es­ta­dí­s­ti­ca y la ciencia, en los que se recurre sobre todo a R y a Python.

Ir al menú principal