stringtranslate.com

Sigilo (programación informática)

En programación informática , un sigilo ( / ˈsɪdʒəl / ) es un símbolo añadido a un nombre de variable , que muestra el tipo de datos o el alcance de la variable , generalmente un prefijo, como en $foo, donde $es el sigilo.

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

Contexto histórico

El uso de sigilos se popularizó con 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 [ vagamente ] a pronunciar $como "string" en lugar de "dollar". [ cita requerida ] Muchos dialectos de BASIC utilizan 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 en scripts de shell para su lenguaje de programación Perl . [ cita requerida ] En Perl, los sigilos no especifican tipos de datos de grano fino 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 usa 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 objeto (es decir, variables de instancia).

Uso de sigilos en algunos idiomas

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

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

En CycL , las variables tienen como prefijo un ?símbolo " ". [3] De manera similar, los nombres de las constantes tienen como prefijo " #$" (pronunciado "hash-dollar"). [4]

En Elixir , los sigilos se proporcionan a través del ~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 ~scadenas y ~Dfechas. Los programadores también pueden crear sus propios sigilos. [5]

En el esotérico INTERCAL , las variables son un identificador entero de 16 bits prefijado con " ." (llamado "spot") para valores de 16 bits, " :" (llamado "twospot") para valores de 32 bits, " ," ("tail") para matrices de valores de 16 bits y " ;" ("hybrid") para matrices de valores de 32 bits. [6] El posterior CLC-Intercal agregó " @" ("whirlpool") para una variable que no puede contener ningún valor (usado para clases ) y " _" usado 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 los valores de caracteres no requieren comillas.

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

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 (usadas para procedimientos, subrutinas, funciones) y las variables globales (almacenamiento en bases de datos) tienen como prefijo un signo de intercalación (^). El último subárbol de variable global puede ser referenciado indirectamente por un signo de intercalación y el último subíndice; esto se conoce como una "referencia simple". Las rutinas y variables globales de todo el sistema (almacenadas en ciertas bases de datos compartidas) tienen como prefijo ^%; estas se conocen como "rutinas de porcentaje" y "variables globales de porcentaje".

En Objective-C , las cadenas literales precedidas por " @" son instancias del tipo de objeto NSStringor, desde clang v3.1 / LLVM v4.0, NSNumber, NSArrayo NSDictionary. El prefijo @también se utiliza en las palabras clave interface, implementation, y endpara expresar la estructura de las definiciones de clase. También en las declaraciones y definiciones de clase, -se utiliza un prefijo of para indicar métodos y variables miembro, mientras que prefix +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 este prefijo se consideran constantes , funciones o nombres de clase (o nombres de interfaz o de característica, 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 utiliza un __prefijo " ", llamado dunder , para los atributos "privados" .

En Ruby , las variables ordinarias carecen de sigilos, pero " $" se antepone a las variables globales , " @" se antepone a las variables de instancia y " @@" se antepone a las variables de clase . Ruby también permite sufijos de sigilos (estrictamente convencionales): " ?" indica un método de predicado que devuelve un valor booleano o un valor 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 " ?". De la misma manera, 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 sigilo " '" en una variable que hace referencia a un tipo. Si el sigilo se duplica, hace referencia a un tipo para el que se define la igualdad. El 'carácter " " también puede aparecer dentro o al final de una variable, en cuyo caso no tiene un significado especial.

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

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

En XSLT , las variables y los parámetros tienen un $símbolo " " inicial al usarse, aunque cuando se definen en <xsl:param>o <xsl:variable>con el nameatributo " ", el símbolo no se incluye. En relación con XSLT, XQuery usa la $forma de símbolo " " tanto en la definición como en el uso.

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

Fenómenos similares

Variables de scripts de shell

En los scripts de shell de Unix y en utilidades como Makefiles , el " $" es un operador unario que traduce el nombre de una variable a su contenido. Si bien esto puede parecer similar a un sigilo, es propiamente un operador unario para indirección léxica , similar al * operador de desreferencia para punteros en C , como se puede apreciar en el hecho de que se omite el signo de dólar 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 tipificación 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.

Afilado

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. Esto a veces se hace mediante prefijos. En C# , cualquier nombre de variable puede tener como prefijo " ". Esto se utiliza principalmente para permitir el uso de nombres de variables que de otro modo entrarían en conflicto con 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 literales de cadena; consulte los afijos literales a continuación.

Notación húngara

Relacionada con los sigilos está la notación húngara , una convención de nombres 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 manera redundante para las variables (a menos que se use un lenguaje con inferencia de tipos ). Como la mayoría de los compiladores estándar no imponen el uso de los prefijos, esto permite la omisión y también hace que el código sea propenso a la confusión debido al uso erróneo accidental. [11]

Afijos literales

Si bien 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 unsigned long long en C++: el 0xprefijo indica hexadecimal, mientras que el sufijo ULLindica unsigned long long. 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 una cadena escapada, esto se escribiría como "C:\\Windows".

Como esto afecta la semántica (valor) de un literal, en lugar de la sintaxis o semántica de un identificador (nombre), esto no es ni un stropping (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, la misma sintaxis se puede utilizar para distintos fines, lo que puede causar confusión. Por ejemplo, en C# , el @prefijo " " se puede utilizar para hacer un stropping (para permitir que las palabras reservadas se utilicen 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 a la sintaxis de los identificadores o a la semántica de los literales, no a la semántica de los identificadores.

Véase 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. ^ "Introducción: Sigilos". Elixir . 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. ^ Black, David A. (15 de agosto de 2007). "Métodos de Bang; 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. ^ "string (C# Reference)" (cadena (referencia de C#)). MSDN . Consultado el 23 de marzo de 2011 .
  11. ^ Estilo de codificación del kernel de Linux, por Linus Torvalds