Un símbolo en programación informática es un tipo de datos primitivo cuyas instancias tienen una forma legible para humanos. Los símbolos se pueden utilizar como identificadores . En algunos lenguajes de programación , se denominan átomos . [1] La unicidad se refuerza manteniéndolos en una tabla de símbolos . El uso más común de los símbolos por parte de los programadores es realizar la reflexión del lenguaje (en particular para las devoluciones de llamadas ), y el uso indirecto más común es su uso para crear vínculos entre objetos .
En la implementación más trivial , son esencialmente números enteros nombrados ; por ejemplo, el tipo enumerado en lenguaje C.
Los siguientes lenguajes de programación proporcionan soporte en tiempo de ejecución para símbolos:
Los símbolos en Julia son cadenas internas que se utilizan para representar identificadores en el código de Julia analizado ( AST ) y como nombres o etiquetas para identificar entidades (por ejemplo, como claves en un diccionario). [5]
En Lisp, un símbolo es único en un espacio de nombres (o paquete en Common Lisp ). Se puede comprobar la igualdad de los símbolos con la función EQ. Los programas Lisp pueden generar nuevos símbolos en tiempo de ejecución. Cuando Lisp lee datos que contienen símbolos representados textualmente, se hace referencia a los símbolos existentes. Si un símbolo es desconocido, el lector Lisp crea un símbolo nuevo.
En Common Lisp, los símbolos tienen los siguientes atributos: un nombre, un valor, una función, una lista de propiedades y un paquete. [6]
En Common Lisp también es posible que un símbolo no esté internado en un paquete. Dichos símbolos se pueden imprimir, pero al volver a leerlos, se debe crear un nuevo símbolo. Como no está internado , el símbolo original no se puede recuperar de un paquete.
En Common Lisp, los símbolos pueden utilizar cualquier carácter, incluidos los espacios en blanco, como espacios en blanco y saltos de línea. Si un símbolo contiene un carácter de espacio en blanco, debe escribirse como |este es un símbolo|. Los símbolos se pueden utilizar como identificadores para cualquier tipo de construcción de programación con nombre: variables, funciones, macros, clases, tipos, etiquetas goto y más. Los símbolos se pueden incluir en un paquete. [7] Los símbolos de palabras clave se autoevaluan [8] y se incluyen en el paquete llamado KEYWORD.
La siguiente es una representación externa simple de un símbolo Common Lisp :
esto es un simbolo
Los símbolos pueden contener espacios en blanco (y todos los demás caracteres):
|Este es un símbolo con espacios en blanco|
En Common Lisp, los símbolos con dos puntos al principio de su representación impresa son símbolos de palabras clave . Estos se encuentran en el paquete de palabras clave.
:símbolo de palabra clave
Una representación impresa de un símbolo puede incluir el nombre de un paquete. Se escriben dos puntos entre el nombre del paquete y el nombre del símbolo.
nombre-del-paquete::nombre-del-símbolo
Los paquetes pueden exportar símbolos. En ese caso, solo se escriben dos puntos entre el nombre del paquete y el nombre del símbolo.
paquete:símbolo-exportado
También se pueden crear símbolos que no están incluidos en un paquete y tener una notación:
#:símbolo no interno
En PostScript , las referencias a objetos de nombre pueden ser literales o ejecutables , lo que influye en el comportamiento del intérprete cuando las encuentra. Los operadores cvx
y cvl
se pueden utilizar para realizar conversiones entre las dos formas. Cuando los nombres se construyen a partir de cadenas mediante el cvn
operador , el conjunto de caracteres permitidos no tiene restricciones.
En Prolog , los símbolos (o átomos) son los principales tipos de datos primitivos, similares a los números. [9] La notación exacta puede diferir en los distintos dialectos de Prolog. Sin embargo, siempre es bastante simple (no se necesitan comillas ni caracteres especiales iniciales).
A diferencia de muchos otros lenguajes, es posible dar un significado a los símbolos creando algunos hechos y/o reglas en Prolog.
El siguiente ejemplo demuestra dos hechos (que describen qué es padre ) y una regla (que describe el significado de hermano ). Estas tres oraciones utilizan símbolos (padre, Zeus, Hermes, Perseo y hermano) y algunas variables abstractas (X, Y y Z). La relación con la madre se omite para mayor claridad.
padre ( zeus , hermes ).padre ( zeus , perseo ) .hermano ( X , Y ) :- padre ( Z , X ), padre ( Z , Y ).
En Ruby , los símbolos se pueden crear con una forma literal o convirtiendo una cadena. [1] Se pueden usar como un identificador o una cadena interna. [10] Dos símbolos con el mismo contenido siempre harán referencia al mismo objeto. [11] Se considera una buena práctica usar símbolos como claves para una matriz asociativa en Ruby. [10] [12]
El siguiente es un ejemplo simple de un símbolo literal en Ruby: [1]
my_symbol = :a my_symbol = :"un identificador"
Las cadenas se pueden convertir en símbolos, y viceversa:
irb(main):001:0> mi_símbolo = "¡Hola, mundo!" . intern => : "¡Hola, mundo!" irb(main):002:0> mi_símbolo = "¡Hola, mundo!" . to_sym => : "¡Hola, mundo!" irb(main):003:0> mi_cadena = :hola . to_s => "hola"
Los símbolos son objetos de la Symbol
clase en Ruby: [13]
irb(principal):004:0> mi_símbolo = :hola_mundo => :hola_mundo irb(principal):005:0> mi_símbolo . longitud => 11 irb(principal):006:0> mi_símbolo . clase => Símbolo
Los símbolos se utilizan comúnmente para enviar mensajes dinámicamente a objetos (métodos de llamada en ellos):
irb(main):007:0> "aoboc" .split ( " o" ) = > ["a", "b", "c"] irb(main):008:0> "aoboc" .send ( :split , "o" ) # mismo resultado => ["a", "b", "c"]
Símbolos como claves de una matriz asociativa:
irb(principal):009:0> mi_hash = { a : "manzana" , b : "plátano" } => {:a=>"manzana", :b=>"plátano"} irb(principal):010:0> mi_hash [ :a ] => "manzana" irb(principal):011:0> mi_hash [ :b ] => "plátano"
En Smalltalk , los símbolos se pueden crear con una forma literal o mediante la conversión de una cadena. Se pueden utilizar como un identificador o una cadena interna. Dos símbolos con el mismo contenido siempre harán referencia al mismo objeto. [14] En la mayoría de las implementaciones de Smalltalk, los selectores (nombres de métodos) se implementan como símbolos.
El siguiente es un ejemplo simple de un símbolo literal en Smalltalk:
my_symbol := # 'un identificador' " Literal de símbolo " my_symbol := #a " Técnicamente, este es un literal de selector. En la mayoría de las implementaciones, " " los selectores son símbolos, por lo que este también es un literal de símbolo "
Las cadenas se pueden convertir en símbolos, y viceversa:
my_symbol := '¡Hola, mundo!' asSymbol " => #'¡Hola, mundo!' " my_string := #hello: asString " => 'hello:' "
Los símbolos se ajustan al symbol
protocolo y su clase se llama Symbol
en la mayoría de las implementaciones:
mi_simbolo := #hola_mundo mi_simbolo clase " => Símbolo "
Los símbolos se utilizan comúnmente para enviar mensajes dinámicamente a objetos (métodos de llamada en ellos):
" lo mismo que 'foo' en: 2 " 'foo' realiza: #en: con: 2 " => $o "