Características de los lenguajes de programación

Escrito por el , actualizado el .
planeta-codigo programacion
Enlace permanente Comentarios

Hay numerosos y diferentes lenguajes de programación pero solo una docena tienen una cuota de uso significativa. Muchos comparten características y algunos lenguajes las van incorporando a medida que se demuestra que sus beneficios son mayores que la complejidad que pueden añadir. Veamos algunas de sus propiedades.

Hay cantidad de lenguajes de programación, algunas diferencias entre ellos se encuentran en su propósito (general o específico para cierto tipo de tareas), en la sintaxis, el sistema de tipos, por los paradigmas de programación que soporta (POO, imperativo, declarativo, orientado a objetos, funcional, …), otras diferencias están en la librerías disponibles, frameworks o comunidad, sin embargo, la mayoría comparten algunas características por las que se pueden catalogar los lenguajes. En este artículo comentaré algunas de estas características por las que podemos catalogar y agrupar los lenguajes de programación.

Describiré brevemente cada una de las características ya que están muy bien explicadas en cada una de sus páginas de la wikipedia.

Principales características de un lenguaje de programación

Compilado

En un lenguaje compilado el código fuente fuente antes de ser ejecutado es convertido a lenguaje máquina (C, C++) aunque también puede ser convertido a representación intermedia que posteriormente es interpretada y convertida a lenguaje máquina JIT (Java, C#). El compilador puede detectar una gran cantidad de errores que en un lenguaje interpretado o de tipado dinámico se descubrirían en tiempo de ejecución. Wikipedia.

Interpretado

En un lenguaje interpretado el código fuente es compilado a código máquina en el momento de su ejecución. Ejemplos de lenguajes interpretados son Python, Ruby, PHP, JavaScript. Wikipedia.

Paradigma

El paradigma de programación es como se estructuran los programas para realizar las tareas de computación. Los principales paragidmas de programación son:

  • Imperativos: los programas se codifican como una secuencia de operaciones que definen explícitamente las operaciones que se realizan. Un ejemplo de lenguaje imperativo es C.
  • Declarativos: estos lenguajes simplemente definen el resultado deseado y es el intérprete de ese lenguaje que que calcúla las operaciones necesarias para obtenerlo. Ejemplos de lenguajes declarativos son SQL o HTML.
  • Orientación a objetos: en estos lenguajes los datos y operaciones sobre esos datos se encapsulan en objetos. Ejemplos de lenguajes orientados a objetos son Java y C#.
  • Funcionales: son una forma de lenguaje declarativo que se basa en el uso en el uso de funciones que reciben datos, realizan cálculos sobre estos datos y devuelven resultados sin modificar los datos originales.

La mayoría de los lenguajes no se basan solo en un paradigma de programación sino que permiten usar varios al mismo tiempo. Por ejemplo, un lenguaje orientado a objetos como Java emplea el paradigma imperativo en el código dentro de los métodos y con el añadido de las lambdas en las novedades de Java 8 permite la programación funcional.

Parte del éxito de los lenguajes orientado a objetos se debe a conceptos como la herencia que es una forma de reutilizar el código de la clase de la que se hereda, el polimorfismo con la que un mismo método puede estar implementado de diferente forma en función de la clase que lo implementa en la jerarquía de clases construida con la herencia, la sobrecarga usar un mismo método con diferentes parámetros y también igual o más importante la encapsulación con la que se ocultan los detalles internos del funcionamiento de la clase siendo únicamente posible manejar la clase a través de la interfaz (métodos) que ofrece.

Tipado estático y tipado dinámico

En un lenguaje de tipado estático las comprobaciones de tipos se realizan en tiempo de compilación (C, C++, Java). Los tipos pueden ser declarados de forma explícita o de forma inferida según el análisis del código fuente que realiza el compilador. Wikipedia.

Por el contrario el tipado dinámico comprueba los tipos en el momento de ejecución del programa (PHP, Python, Groovy, JavaScript). A esos lenguajes se les conoce como lenguajes dinámicos. Wikipedia.

Fuertemente y débilmente tipado

En un lenguaje fuertemente tipado un dato con un tipo no puede ser usado como si fuese de otro. Aunque algunos lenguajes como Java se dicen que son fuertemente tipado tienen algunas laxitudes. Por ejemplo, en Java un float puede usarse como si fuese un double y en otros lenguajes con menor grado de tipificación como PHP un string puede ser usado como un dato numérico. Wikipedia

Otras características

Otras características que se suelen mencionar al hablar de lenguajes de programación es si soportan algunas facilidades como las siguientes y sintáxis específica.

Inferencia de tipos

En base al análisis del código fuente se puede inferir el tipo de las variables evitando que el programador los declare explícitamente continuamente. Wikipedia.

Closures y lambdas

Un closure es una referencia a una función que puede referenciar las variables del contexto en el que está definida. Una lambda es simplemente una referencia a una función anónima. En Java las lambdas puede referenciar variables declaradas como final, esto es, sean constantes. Wikipedia.

Defaults methods y traits

Un trait define una colección de métodos posiblemente incluyendo también su implementación, además, pueden definir propiedades. Los defaults methods de Java pueden definir implementaciones en algunos métodos de interfaces. Wikipedia.

High order functions

Las funciones de orden superior son funciones que toman como argumentos una o más funciones o devuelven como resultado otra función. Wikipedia.

Currying

La currificación consiste en transformar una función con al menos dos argumentos en una función con al menos un argumento menos. Wikipedia.

Duck typing

Este concepto es usado en los lenguajes de tipado dinámico tratando a las variables no por su tipo o herencia sino en base a las propiedades y métodos que soporta (Python, PHP, Groovy, JavaScript). Wikipedia.

Intersection types y Union types

Ceylon tiene un sistema de tipos más avanzado (y complejo) que Java, una expresión es asignable a un intersection types X & Y si esa expresión es asignable a X e Y individualmente. Una expresión es asignable a un union type X | Y si es asignable a X o Y.

Union, intersection, and enumerated types

Named arguments

Cuando invocamos un método con argumentos, los argumentos se asignan a los parámetros de la función según el orden en que son declarados. Los named arguments permiten asignar los argumentos a los parámetros de la función por sus nombres. Wikipedia.

Destructuring assignment

La asignación desestructurada permite extraer datos de arrays y objetos usando una sintaxis réplica de la construcción de arrays y literales de objetos. MDN.

Tuples

Las tuplas son una estructura de datos formada por varios tipos, en Java 8 puede usarse la librería vavr que añade esto y otras funcionalidades interesantes. En algunos lenguajes puede combinarse con la asignación desestructurada. Ceylon Tuples.


Comparte el artículo: