En programación informática, un símbolo es un tipo de dato primitivo cuyas instancias tienen una forma legible para los humanos. Los símbolos pueden usarse como identificadores . En algunos lenguajes de programación , se les llama átomos . [ 1 ] La unicidad se garantiza almacenándolos en una tabla de símbolos . El uso más común de los símbolos por parte de los programadores es realizar reflexión del lenguaje (particularmente para las funciones de devolución de llamada ), y el uso indirecto más común es su uso para crear enlaces entre objetos .
En la implementación más sencilla , son esencialmente enteros con nombre ; por ejemplo, el tipo enumerado en el lenguaje C.
Apoyo
Los siguientes lenguajes de programación proporcionan soporte en tiempo de ejecución para símbolos:
Julia
Los símbolos en Julia son cadenas internadas que se utilizan para representar identificadores en el código Julia analizado ( AST ) y como nombres o etiquetas para identificar entidades (por ejemplo, como claves en un diccionario). [ 5 ]
Ceceo
En Lisp, un símbolo es único dentro de un espacio de nombres (o paquete en Common Lisp ). Se puede comprobar la igualdad de 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 de Lisp crea uno 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 leerlos, es necesario crear uno nuevo. Dado que no está internado , el símbolo original no se puede recuperar del paquete.
En Common Lisp, los símbolos pueden usar cualquier carácter, incluyendo espacios en blanco, como espacios y saltos de línea. Si un símbolo contiene un carácter de espacio en blanco, debe escribirse como |this is a symbol|. Los símbolos pueden usarse como identificadores para cualquier tipo de construcciones de programación con nombre: variables, funciones, macros, clases, tipos, etiquetas goto y más. Los símbolos pueden estar internos en un paquete. [ 7 ] Los símbolos de palabra clave son autoevaluables, [ 8 ] y están internos en el paquete llamado KEYWORD.
Ejemplos
La siguiente es una representación externa simple de un símbolo de Common Lisp :
esto-es-un-símboloLos símbolos pueden contener espacios en blanco (y cualquier otro carácter):
|Este es un símbolo con espacio en blanco|En Common Lisp, los símbolos que comienzan con dos puntos en su representación impresa son símbolos de palabras clave . Estos se almacenan internamente en el paquete de palabras clave.
:símbolo-palabra-claveLa representación impresa de un símbolo puede incluir el nombre del paquete. Se escriben dos puntos entre el nombre del paquete y el nombre del símbolo.
nombre-del-paquete::nombre-del-símboloLos paquetes pueden exportar símbolos. En ese caso, solo se escribe un signo de dos puntos entre el nombre del paquete y el nombre del símbolo.
paquete:símbolo-exportadoTambién se pueden crear símbolos que no estén integrados en un paquete y que tengan una notación:
#:símbolo no internoPosdata
En PostScript , las referencias a objetos de nombre pueden ser literales o ejecutables , lo que influye en el comportamiento del intérprete al encontrarlas. Los operadores cvx`and` cvlpermiten convertir entre ambas formas. Cuando los nombres se construyen a partir de cadenas mediante el cvnoperador `and`, el conjunto de caracteres permitidos es ilimitado.
Prólogo
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 variar en diferentes dialectos de Prolog. Sin embargo, siempre es bastante simple (no se requieren comillas ni caracteres especiales al inicio).
A diferencia de muchos otros lenguajes, es posible dar significado a los símbolos mediante la creación de hechos y/o reglas en Prolog.
Ejemplos
El siguiente ejemplo ilustra dos hechos (que describen qué es padre ) y una regla (que describe el significado de hermano/a ). Estas tres oraciones utilizan símbolos (padre, Zeus, Hermes, Perseo y hermano/a) 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 ).Rubí
En Ruby , los símbolos se pueden crear con una forma literal o convirtiendo una cadena. [ 1 ] Se pueden usar como identificador o como cadena internada. [ 10 ] Dos símbolos con el mismo contenido siempre se referirán al mismo objeto. [ 11 ] Se considera una buena práctica usar símbolos como claves de un array asociativo en Ruby. [ 10 ] [ 12 ]
Ejemplos
El siguiente es un ejemplo sencillo de un símbolo literal en Ruby: [ 1 ]
mi_símbolo = :a mi_símbolo = :"un identificador"Las cadenas de caracteres se pueden convertir en símbolos, y viceversa:
irb(main):001:0> my_symbol = "Hello, world!" . intern => :"Hello, world!" irb(main):002:0> my_symbol = "Hello, world!" . to_sym => :"Hello, world!" irb(main):003:0> my_string = :hello . to_s => "hello"Los símbolos son objetos de la Symbolclase en Ruby: [ 13 ]
irb(main):004:0> my_symbol = :hello_world => :hello_world irb(main):005:0> my_symbol . length => 11 irb(main):006:0> my_symbol . class => SymbolLos símbolos se utilizan habitualmente para enviar mensajes de forma dinámica a los objetos (llamar a sus métodos):
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(main):009:0> my_hash = { a : "apple" , b : "banana" } => {:a=>"apple", :b=>"banana"} irb(main):010:0> my_hash [ :a ] => "apple" irb(main):011:0> my_hash [ :b ] => "banana"Charla informal
En Smalltalk , los símbolos se pueden crear con una forma literal o convirtiendo una cadena. Se pueden usar como identificador o como cadena internada. Dos símbolos con el mismo contenido siempre se referirán al mismo objeto. [ 14 ] En la mayoría de las implementaciones de Smalltalk, los selectores (nombres de métodos) se implementan como símbolos.
Ejemplos
El siguiente es un ejemplo sencillo de un símbolo literal en Smalltalk:
my_symbol := # 'un identificador' " Literal de símbolo " my_symbol := #a " Técnicamente, esto es un literal de selector. En la mayoría de las implementaciones, " " los selectores son símbolos, por lo que esto también es un literal de símbolo "Las cadenas de caracteres se pueden convertir en símbolos, y viceversa:
mi_símbolo := '¡Hola, mundo!' comoSímbolo " => #'¡Hola, mundo!' " mi_cadena := #hola: comoCadena " => 'hola:' "Los símbolos se ajustan al symbolprotocolo y su clase se denomina Symbolen la mayoría de las implementaciones:
mi_símbolo := #hola_mundo mi_símbolo clase " => Símbolo "Los símbolos se utilizan habitualmente para enviar mensajes de forma dinámica a los objetos (llamar a sus métodos):
" igual que 'foo' en: 2 " 'foo' ejecutar: #en: con: 2 " => $o "Referencias
- 1 2 3 Thomas, Dave ; Fowler, Chad; Hunt, Andy (2001). Programación en Ruby: la guía pragmática para programadores; [ incluye Ruby 1.8 ] (2.ª ed., 10.ª impresión ). Raleigh, Carolina del Norte: The Pragmatic Bookshelf. ISBN 978-0-9745140-5-5.
- ↑ Símbolos en la página sobre Estructuras de Datos
- ↑ Palabras clave en la página sobre Estructuras de datos
- ↑ "Un recorrido por el lenguaje Dart | Símbolos" . Lenguaje de programación Dart . Consultado el 17 de enero de 2021 .
- ↑ "Julia Core.Symbol" . Documentación de Julia . Consultado el 31 de mayo de 2022 .
- ↑ "CLHS: Símbolo de clase del sistema" . www.lispworks.com .
- ↑ "CLHS: Paquete de clase de sistema" . www.lispworks.com .
- ↑ Peter Norvig : Paradigmas de la programación de inteligencia artificial: estudios de caso en Common Lisp , Morgan Kaufmann, 1991, ISBN 1-55860-191-0, Web
- ↑ Bratko, Ivan (2001). Programación en Prolog para inteligencia artificial . Harlow, Inglaterra; Nueva York: Addison Wesley. ISBN 978-0-201-40375-6.
- 1 2 Kidd, Eric (20 de enero de 2007). "13 maneras de ver un símbolo de rubí" . Random Hacks . Recuperado el 10 de julio de 2011 .
- ↑ "Programación en Ruby: La guía del programador pragmático" .
- ↑ "Usar símbolos por el motivo equivocado" . Notas gnómicas .
- ↑ "Símbolo" . Documentación de Ruby . Consultado el 10 de julio de 2011 .
- ↑ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Estándar ANSI Smalltalk.
- Estructuras de programación