stringtranslate.com

Sigilo (programación informática)

En programación de computadoras , un sigilo ( / ˈ s ɪ əl / ) es un símbolo adjunto al nombre de una variable , que muestra el tipo de datos o alcance de la variable , generalmente un prefijo, como en $foo, donde $está el sigilo.

Sigil , del latín sigillum , que significa "pequeño signo", significa un signo o imagen que supuestamente tiene poder mágico . [1] Los sigilos se pueden utilizar para separar y demarcar espacios de nombres que poseen diferentes propiedades o comportamientos.

Contexto histórico

El uso de sigilos fue popularizado por el lenguaje de programación BASIC . El ejemplo más conocido de un sigilo en BASIC es el signo de dólar (" $") añadido a los nombres de todas las cadenas . En consecuencia, los programadores fuera de Estados Unidos tienden a pronunciar $"cadena" en lugar de "dólar". Muchos dialectos BÁSICOS usan otros sigilos (como " %") para denotar números enteros y de punto flotante y su precisión, y a veces también otros tipos.

Larry Wall adoptó el uso de sigilos de scripts de shell para su lenguaje de programación Perl . [ cita necesaria ] En Perl, los sigilos no especifican tipos de datos detallados como cadenas y números enteros, sino las categorías más generales de escalares (usando un prefijo " $"), matrices (usando " @"), hashes (usando " %") y subrutinas (usando " &"). Raku también utiliza sigilos secundarios, o twigils , [2] para indicar el alcance de las variables. Ejemplos destacados de twigils en Raku incluyen " ^" ( caret ), usado con parámetros formales autodeclarados ("variables de marcador de posición"), y " .", usado con accesores de atributos de objetos (es decir, variables de instancia).

Uso de sigilos en algunos idiomas

En CLIPS , las variables escalares tienen el prefijo " ?", mientras que las variables multicampo (por ejemplo, una lista de 1 nivel) tienen el prefijo " $?".

En Common Lisp , las variables especiales (con alcance dinámico) normalmente están rodeadas por *lo que se llama la " convención de orejeras ". Si bien esto es sólo una convención y no se aplica, el lenguaje mismo adopta la práctica (por ejemplo, *salida estándar*). De manera similar, algunos programadores rodean las constantes con +.

En CycL , las variables tienen el ?prefijo " ". [3] De manera similar, los nombres de constantes tienen el prefijo " #$" (se pronuncia "hash-dollar"). [4]

En Elixir , los sigilos se proporcionan mediante el ~símbolo " ", seguido de una letra para indicar el tipo de sigilo y luego delimitadores. Por ejemplo, ~r(foo)es una expresión regular de "foo". Otros sigilos incluyen ~scuerdas y ~Dfechas. Los programadores también pueden crear sus propios sellos. [5]

En el esotérico INTERCAL , las variables son un identificador entero de 16 bits con el prefijo " " .(llamado "punto") para valores de 16 bits, " :" (llamado "dos puntos") para valores de 32 bits, " " ,("cola" ) para matrices de valores de 16 bits y " ;" ("híbrido") para matrices de valores de 32 bits. [6] El CLC-Intercal posterior agregó " @" ("whirlpool") para una variable que no puede contener ningún valor (usada para clases ) y " " usada para almacenar un compilador_ modificado . [7]

En MAPPER (también conocido como BIS), las variables nombradas tienen el prefijo "<" y el sufijo ">" porque las cadenas o valores de caracteres no requieren comillas.

En el script mIRC , los identificadores tienen un " $" sigilo, mientras que todas las variables tienen un " %" prefijo (independientemente de las variables locales o globales o el tipo de datos). Las variables binarias tienen el prefijo " &".

En el lenguaje de programación MUMPS , " $" precede a los nombres de funciones intrínsecas y a los "nombres de variables especiales" (variables integradas para acceder al estado de ejecución). " $Z" precede a los nombres de funciones intrínsecas no estándar. " $$" precede a los nombres de funciones extrínsecas. Las rutinas (utilizadas para procedimientos, subrutinas, funciones) y las variables globales (almacenamiento de base de datos) tienen el prefijo de un signo de intercalación (^). Se puede hacer referencia indirectamente al último subárbol de variable global mediante un signo de intercalación y el último subíndice; esto se conoce como una "referencia desnuda". Las rutinas de todo el sistema y las variables globales (almacenadas en determinadas bases de datos compartidas) tienen el prefijo ^%; estos se conocen como "rutinas porcentuales" y "porcentajes globales".

En Objective-C , los literales de cadena precedidos por " @" son instancias del tipo de objeto NSStringo, desde clang v3.1/ LLVM v4.0 NSNumber, NSArrayo NSDictionary. El prefijo @también se utiliza en las palabras clave interface, implementationy endpara expresar la estructura de las definiciones de clases. También dentro de las declaraciones y definiciones de clases, -se usa un prefijo de para indicar métodos y variables de miembros, mientras que el prefijo +indica elementos de clase.

En el lenguaje PHP , que se inspiró en gran medida en Perl, " $" precede a cualquier nombre de variable . Los nombres que no tienen el prefijo this se consideran constantes , funciones o nombres de clases (o nombres de interfaces o rasgos, que comparten el mismo espacio de nombres que las clases).

PILOT utiliza " $" para buffers (variables de cadena), " #" para variables enteras y " *" para etiquetas de programa.

Python usa un __prefijo " ", llamado dunder , para atributos "privados" .

En Ruby , las variables ordinarias carecen de sigilos, pero " $" tiene el prefijo de las variables globales , " @" tiene el prefijo de las variables de instancia y " @@" tiene el prefijo de las variables de clase . Ruby también permite sigilos de sufijo (estrictamente convencionales): " ?" indica un método de predicado que devuelve un valor booleano o verdadero o falso , y " !" indica que el método puede tener un efecto potencialmente inesperado y debe manejarse con cuidado. [8]

En Scheme , por convención, los nombres de los procedimientos que siempre devuelven un valor booleano suelen terminar en " ?". Del mismo modo, los nombres de los procedimientos que almacenan valores en partes de objetos Scheme previamente asignados (como pares, vectores o cadenas) suelen terminar en " !".

El ML estándar utiliza el prefijo " '" en una variable que se refiere a un tipo. Si el sigilo se duplica, se refiere a un tipo para el cual se define la igualdad. El 'carácter " " también puede aparecer dentro o al final de una variable, en cuyo caso no tiene ningún significado especial.

En Transact-SQL , " @" precede a una variable local o al nombre de un parámetro. Las funciones del sistema (anteriormente conocidas como variables globales) se distinguen por el @@prefijo " ". El alcance de las tablas temporales se indica con el prefijo " #" que designa local y " ##" que designa global.

En Windows PowerShell , que se inspiró en parte en shells de Unix y Perl, los nombres de las variables tienen el prefijo " $".

En XSLT , las variables y parámetros tienen un $sello " " inicial en uso, aunque cuando se definen en <xsl:param>o <xsl:variable>con el nameatributo " ", el sello no se incluye. En relación con XSLT, XQuery utiliza la $forma de sigilo " " tanto en su definición como en su uso.

En MEL , los nombres de las variables tienen el prefijo " $" para distinguirlos de funciones, comandos y otros identificadores.

Fenómenos similares

Variables de secuencias de comandos de Shell

En los scripts de shell de Unix y en utilidades como Makefiles , " $" es un operador unario que traduce el nombre de una variable en su contenido. Si bien esto puede parecer similar a un sigilo, es propiamente un operador unario para direccionamiento léxico indirecto , similar al * operador de desreferencia para punteros en C , como se desprende del hecho de que el signo de dólar se omite al asignar a una variable.

Convenciones de identificadores

En Fortran , no se utilizan sigilos, pero todas las variables que comienzan con las letras I, J, K, L, M y N son números enteros por defecto. La documentación de Fortran se refiere a esto como "tipificación implícita". La escritura explícita también está disponible para permitir que cualquier variable se declare con cualquier tipo.

Varios lenguajes de programación, incluidos Prolog , Haskell , Ruby y Go , tratan los identificadores que comienzan con una letra mayúscula de manera diferente a los identificadores que comienzan con una letra minúscula, una práctica relacionada con el uso de sigilos.

Atropellando

En realidad, una forma de stropping , el uso de muchos lenguajes en la infraestructura de lenguaje común (CLI) .NET de Microsoft requiere una forma de usar variables en un lenguaje diferente que pueden ser palabras clave en un lenguaje de llamada. A veces esto se hace mediante prefijos. En C# , cualquier nombre de variable puede tener el prefijo " ". Esto se utiliza principalmente para permitir el uso de nombres de variables que de otro modo entrarían en conflicto con las palabras clave. [9] Lo mismo se logra en VB.Net encerrando el nombre entre corchetes, como en . [10]@[end]

El @prefijo " " también se puede aplicar a cadenas literales; vea los afijos literales a continuación.

Notación húngara

Relacionada con los sigilos está la notación húngara , una convención de nomenclatura para variables que especifica el tipo de variable adjuntando ciertos prefijos alfabéticos al nombre de la variable. Sin embargo, a diferencia de los sigilos, la notación húngara no proporciona información al compilador; como tal, los tipos explícitos deben especificarse de forma redundante para las variables (a menos que se utilice un lenguaje con inferencia de tipos ). Como la mayoría de los compiladores estándar no imponen el uso de prefijos, esto permite la omisión y también hace que el código sea propenso a confusión debido a un uso erróneo accidental. [11]

Afijos literales

Mientras que los sigilos se aplican a los nombres (identificadores), se pueden aplicar prefijos y sufijos similares a los literales , en particular a los literales enteros y a los literales de cadena , especificando cómo se debe evaluar el literal o qué tipo de datos es. Por ejemplo, 0x10ULLse evalúa como el valor 16 como un entero largo sin signo en C++: el 0xprefijo indica hexadecimal, mientras que el sufijo ULLindica largo sin signo. De manera similar, los prefijos se usan a menudo para indicar una cadena sin formato , como r"C:\Windows"en Python, que representa la cadena con valor C:\Windows; como cadena de escape, esto se escribiría como "C:\\Windows".

Como esto afecta la semántica (valor) de un literal, en lugar de la sintaxis o la semántica de un identificador (nombre), esto no es un atropello (sintaxis de identificador) ni un sigilo (semántica de identificador), pero es sintácticamente similar.

Anotaciones de Java

Compare anotaciones de Java como @Override y @Deprecated.

Confusión

En algunos casos, se puede utilizar la misma sintaxis para distintos fines, lo que puede provocar confusión. Por ejemplo, en C# , el @prefijo " " se puede utilizar para el ajuste (para permitir que se utilicen palabras reservadas como identificadores) o como prefijo de un literal (para indicar una cadena sin formato ); en este caso ninguno de los usos es un sigilo, ya que afecta la sintaxis de los identificadores o la semántica de los literales, no la semántica de los identificadores.

Ver también

Referencias

  1. ^ "Definición de sigilo". Diccionario inglés Collins . Consultado el 22 de mayo de 2012 .
  2. ^ "Variables de Perl 6: Twigils", Documentación de Perl 6.
  3. ^ "Variables - Cycorp". www.Cyc.com . Consultado el 31 de diciembre de 2017 .
  4. ^ "Constantes - Cycorp". www.Cyc.com . Consultado el 31 de diciembre de 2017 .
  5. ^ "Primeros pasos: sellos". Elíxir . Consultado el 18 de enero de 2022 .
  6. ^ "Manual de instrucciones renovado de C-INTERCAL 0.29". catb.org . Consultado el 30 de junio de 2022 .
  7. ^ "Referencia CLC-INTERCAL". oshaboy.github.io . Consultado el 30 de junio de 2022 .
  8. ^ Negro, David A. (15 de agosto de 2007). "Métodos explosivos; o ¡peligro, Will Rubyist!". Archivado desde el original el 22 de mayo de 2016.
  9. ^ "Palabras clave de C#". MSDN . Consultado el 23 de marzo de 2011 .
  10. ^ "cadena (referencia de C#)". MSDN . Consultado el 23 de marzo de 2011 .
  11. ^ Estilo de codificación del kernel de Linux, por Linus Torvalds