En programación informática , la notación de puntos suspensivos (.. o ...) se utiliza para indicar rangos , un número no especificado de argumentos o un directorio principal. La mayoría de los lenguajes de programación requieren que los puntos suspensivos se escriban como una serie de puntos; no se puede utilizar un único carácter de puntos suspensivos ( Unicode ).
Rangos
En algunos lenguajes de programación (incluidos Ada , Perl , Ruby , Apache Groovy , Kotlin , Haskell y Pascal ), se utilizan puntos suspensivos acortados de dos puntos para representar un rango de valores dados dos puntos finales; por ejemplo, para iterar a través de una lista de números enteros entre 1 y 100 inclusive en Perl:
foreach (1..100)
En Ruby, el ...operador denota un rango semiabierto, es decir, que incluye el valor inicial pero no el valor final.
En Rust, el ..=operador denota un rango inclusivo para los casos en las coincidencias y el ..operador representa un rango que no incluye el valor final.
Perl y Ruby sobrecargan el operador ".." en un contexto escalar como un operador flip-flop - una prueba booleana biestable con estado , aproximadamente equivalente a "verdadero mientras x pero aún no y ", de manera similar al operador "," en sed y AWK . [1]
Los compiladores compatibles con GNU C tienen una extensión del lenguaje C y C++ para permitir rangos de mayúsculas y minúsculas en las declaraciones switch :
switch ( u ) { caso 0 ... 0x7F : putchar ( c ); break ; caso 0x80 ... 0x7FF : putchar ( 0xC0 + c >> 6 ); putchar ( 0x80 + c & 0x3f ); break ; caso 0x800 ... 0xFFFF : putchar ( 0xE0 + c >> 12 ); putchar ( 0x80 + ( c >> 6 ) & 0x3f ); putchar ( 0x80 + ( c >> 12 ) ); break ; predeterminado : error ( "¡no compatible!" ); }
Además, GNU C permite una sintaxis de rango similar para inicializadores designados , disponible sólo en el lenguaje C:
int matriz [ 10 ] = { [ 0. . .5 ] = 1 };
Delphi / Turbo Pascal / Free Pascal:
var FilteredChars : conjunto de [ #0 .. #32 , #127 , 'a' .. 'z' ] ; var CheckedItems : conjunto de [ 4 , 10 .. 38 , 241 , 58 ] ;
En el lenguaje de modelado unificado (UML), se utilizan puntos suspensivos de dos caracteres para indicar la cardinalidad variable de una asociación. Por ejemplo, una cardinalidad de 1..* significa que la cantidad de elementos agregados en una asociación puede variar de 1 a infinito (un uso equivalente a Kleene plus ).
Directorio principal
En sistemas operativos Windows y similares a Unix, ".." se utiliza para acceder al directorio principal en una ruta .
Código incompleto
En Perl [2] y Raku [3], la elipsis de 3 caracteres también se conoce como el operador "yada yada yada" y, de manera similar a su significado lingüístico , sirve como un "reemplazo" para el código que se insertará más tarde.
Python3 también permite utilizar puntos suspensivos de 3 caracteres como un marcador expresivo para insertar código más adelante.
En la Notación de Sintaxis Abstracta Uno (ASN.1), la elipsis se utiliza como un marcador de extensión para indicar la posibilidad de extensiones de tipo en futuras revisiones de una especificación de protocolo. En una expresión de restricción de tipo como, A ::= INTEGER (0..127, ..., 256..511)se utiliza una elipsis para separar la raíz de extensión de las adiciones de extensión. La definición del tipo A en el sistema de la versión 1 de la forma A ::= INTEGER (0..127, ...)y la definición del tipo A en el sistema de la versión 2 de la forma A ::= INTEGER (0..127, ..., 256..511)constituyen una serie de extensión del mismo tipo A en diferentes versiones de la misma especificación. La elipsis también se puede utilizar en definiciones de tipo compuesto para separar el conjunto de campos que pertenecen a la raíz de extensión del conjunto de campos que constituyen adiciones de extensión. A continuación se muestra un ejemplo:B ::= SEQUENCE { a INTEGER, b INTEGER, ..., c INTEGER }
Número variable de parámetros
C y C++
En el lenguaje de programación C , se utilizan puntos suspensivos para representar una cantidad variable de parámetros de una función . Por ejemplo:
int printf( const char* format, ... );[4]
La función anterior en C podría entonces ser llamada con diferentes tipos y números de parámetros tales como:
printf("numbers %i %i %i", 5, 10, 15);
y
printf("input string %s, %f", "another string", 0.5);
C99 introdujo macros con un número variable de argumentos . [5]
C++11 incluyó el preprocesador C99, [6] y también introdujo plantillas con un número variable de argumentos . [7]
Java
A partir de la versión 1.5, Java ha adoptado esta funcionalidad de "varargs". Por ejemplo:
public int func(int num, String... strings)
PHP
PHP 5.6 admite [8] el uso de puntos suspensivos para definir una función explícitamente variádica , donde ...antes de un argumento en una definición de función significa que los argumentos a partir de ese punto se recopilarán en una matriz. Por ejemplo:
función variadic_function ( $a , $b , ... $otro )
{
devolver $otro ;
}
var_dump ( función_variádica ( 1 , 2 , 3 , 4 , 5 ));
Produce este resultado:
matriz ( 3 ) {
[ 0 ] =>
int ( 3 )
[ 1 ] =>
int ( 4 )
[ 2 ] =>
int ( 5 )
}
Múltiples dimensiones
En Python , la elipsis es una expresión nula que representa el Ellipsissingleton.
Se utiliza particularmente en NumPy , donde se utilizan puntos suspensivos para dividir un número arbitrario de dimensiones para una matriz de alta dimensión: [9]
>>> import numpy como np
>>> t = np . random . rand ( 2 , 3 , 4 , 5 )
>>> t [ ... , 0 ] . shape # selecciona el 1.er elemento de la última dimensión, copia el resto
(2, 3, 4)
>>> t [ 0 , ... ] . shape # selecciona el 1.er elemento de la primera dimensión, copia el resto
(3, 4, 5)
Otra semántica
MATLAB
En MATLAB , se utilizan puntos suspensivos de tres caracteres para indicar la continuación de una línea , [10] lo que hace que la secuencia de líneas sea
x = [ 1 2 3 ...
4 5 6 ];
semánticamente equivalente a la línea única
x = [ 1 2 3 4 5 6 ];
En Raku se utiliza un carácter de puntos suspensivos (…) Unicode (U+2026) real para que sirva como un tipo de marcador en una cadena de formato. [11]
PHP
Desde PHP 8.1, se puede utilizar una elipsis nula para crear un cierre a partir de un método invocable o de un objeto: [12]
// estilo antiguo: PHP 8.0 y anteriores
$foo = [ $this , 'foo' ];
$fn = Closure :: fromCallable ( 'strlen' );
// nuevo estilo: PHP 8.1 y posteriores
$foo = $this -> foo ( ... );
$fn = strlen ( ... );
Pitón
En Python, los puntos suspensivos también se pueden utilizar como primer parámetro dentro de la collections.abc.Callableanotación de tipo para indicar cualquier número de argumentos: [13]
de colecciones.abc importar Callable
de escribir importar TypeAlias , Cualquiera
VarFunction : TypeAlias = Callable [ ... , Cualquiera ]
Referencias
- ^ perlop - perldoc.perl.org
- ^ "Perlsyn - Sintaxis Perl - Navegador Perldoc".
- ^ "Operadores".
- ^ "Printf - Referencia de C++".
- ^ Macros variádicos: uso de la colección de compiladores GNU (GCC)
- ^ Cambios en el borrador de trabajo para la sincronización del preprocesador C99: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
- ^ "Borrador de trabajo, estándar para el lenguaje de programación C++" (PDF) .:14.5.3 Plantillas variádicas
- ^ "PHP: RFC:variádica".
- ^ "Rutinas de indexación — Manual de NumPy v1.22".
- ^ "Mathworks.com". Archivado desde el original el 29 de junio de 2011. Consultado el 14 de abril de 2011 .
- ^ Conway, Damian (2006-05-29) [2004-02-26]. Wall, Larry (ed.). "Exegesis 7: Formatos". dev.perl.org . 2. Archivado desde el original el 15 de junio de 2011.
- ^ "Anuncio de lanzamiento de PHP 8.1.0" . php.net . Consultado el 29 de marzo de 2023 .
- ^ "Tipo de escritura: compatibilidad con sugerencias de tipo § Typing.Callable". Documentación de Python 3.11.2 . Consultado el 29 de marzo de 2023 .