В программировании нотация многоточия (.. или ...) используется для обозначения диапазонов , неопределенного числа аргументов или родительского каталога. Большинство языков программирования требуют, чтобы многоточие было написано как серия точек; один символ многоточия ( Unicode ) не может быть использован.
В некоторых языках программирования (включая Ada , Perl , Ruby , Apache Groovy , Kotlin , Haskell и Pascal ) для представления диапазона значений с двумя конечными точками используется укороченное многоточие; например, для перебора списка целых чисел от 1 до 100 включительно в Perl:
foreach (1..100)
В Ruby ...
оператор обозначает полуоткрытый диапазон, т.е. включающий начальное значение, но не конечное.
В Rust оператор ..=
обозначает включающий диапазон для случаев совпадений, а ..
оператор представляет диапазон, не включающий конечное значение.
Perl и Ruby перегружают оператор ".." в скалярном контексте как оператор триггера — бистабильный логический тест с сохранением состояния , примерно эквивалентный "истина, пока x, но еще не y ", аналогично оператору "," в sed и AWK . [1]
Совместимые с GNU C компиляторы имеют расширение для языков C и C++, позволяющее использовать диапазоны регистров в операторах switch :
switch ( u ) { case 0 ... 0x7F : putchar ( c ); break ; case 0x80 ... 0x7FF : putchar ( 0xC0 + c >> 6 ); putchar ( 0x80 + c & 0x3f ); break ; case 0x800 ... 0xFFFF : putchar ( 0xE0 + c >> 12 ); putchar ( 0x80 + ( c >> 6 ) & 0x3f ); putchar ( 0x80 + ( c >> 12 ) ); break ; default : error ( "не поддерживается!" ); }
Кроме того, GNU C допускает аналогичный синтаксис диапазона для назначенных инициализаторов , доступный только в языке C:
массив целых чисел [ 10 ] = { [ 0. . .5 ] = 1 };
Delphi / Turbo Pascal / Free Pascal:
var FilteredChars : набор из [ #0 .. #32 , #127 , ' a' .. ' z' ] ; var CheckedItems : набор из [ 4 , 10..38 , 241 , 58 ] ;
В языке унифицированного моделирования (UML) для указания переменной мощности ассоциации используется двухсимвольное многоточие. Например, мощность 1..* означает, что количество элементов, агрегированных в ассоциации, может варьироваться от 1 до бесконечности (использование, эквивалентное Kleene plus ).
В операционных системах Windows и Unix-подобных системах для доступа к родительскому каталогу в пути используется «..» .
В Perl [2] и Raku [3] трехсимвольный многоточие также известен как оператор «yada yada yada» и, подобно своему лингвистическому значению , служит «заменителем» кода, который будет вставлен позже.
Python3 также позволяет использовать трехсимвольное многоточие в качестве выразительного заполнителя для кода, который будет вставлен позже.
В абстрактной синтаксической нотации один (ASN.1) многоточие используется как маркер расширения для указания возможности расширения типа в будущих версиях спецификации протокола. В выражении ограничения типа многоточие A ::= INTEGER (0..127, ..., 256..511)
используется для отделения корня расширения от дополнений расширения. Определение типа A в системе версии 1 формы A ::= INTEGER (0..127, ...)
и определение типа A в системе версии 2 формы A ::= INTEGER (0..127, ..., 256..511)
составляют серию расширений одного и того же типа A в разных версиях одной и той же спецификации. Многоточие также может использоваться в определениях составных типов для отделения набора полей, принадлежащих корню расширения, от набора полей, составляющих дополнения расширения. Вот пример:B ::= SEQUENCE { a INTEGER, b INTEGER, ..., c INTEGER }
В языке программирования C многоточие используется для представления переменного числа параметров функции . Например :
int printf( const char* format, ... );
[4]Вышеуказанную функцию на языке C можно затем вызвать с различными типами и количеством параметров, например:
printf("numbers %i %i %i", 5, 10, 15);
и
printf("input string %s, %f", "another string", 0.5);
В C99 появились макросы с переменным числом аргументов . [5]
C++11 включал препроцессор C99, [6] а также ввел шаблоны с переменным числом аргументов . [7]
Начиная с версии 1.5, Java приняла эту функциональность "varargs". Например:
public int func(int num, String... strings)
PHP 5.6 поддерживает [8] использование многоточия для определения явно вариативной функции , где ...
перед аргументом в определении функции означает, что аргументы с этого момента будут собраны в массив. Например:
функция вариативная_функция ( $a , $b , ... $other ) { return $other ; }var_dump ( вариативная_функция ( 1 , 2 , 3 , 4 , 5 ));
Выводит следующий результат:
массив ( 3 ) { [ 0 ] => целое ( 3 ) [ 1 ] => целое ( 4 ) [ 2 ] => целое ( 5 ) }
Гигиеническая syntax-rules
макросистема, первоначально введенная в R4RS , использует ...
для указания того, что обрабатываемый шаблон может быть сопоставлен ноль или более раз. Например, следующий код может быть использован для реализации стандартной let*
формы, рекурсивно в терминах самой себя, и более примитивной let
:
( define-syntax let* ( syntax-rules () (( let* () body1 body2 ... ) ( let () body1 body2 ... )) (( let* (( name1 val1 ) ( name2 val2 ) ... ) body1 body2 ... ) ( let (( name1 val1 )) ( let* (( name2 val2 ) ... ) body1 body2 ... )))))
SRFI 46 [9] было предложено расширить, syntax-rules
чтобы позволить пользователю указать идентификатор многоточия. Это полезно для устранения неоднозначности, когда многоточие используется во вложенных определениях макросов. Эта функция была позже включена в R7RS.
В Python многоточие — это нулевое выражение, представляющее Ellipsis
синглтон.
Он используется, в частности, в NumPy , где многоточие используется для нарезки произвольного числа измерений для многомерного массива: [10]
>>> import numpy as np >>> t = np . random . rand ( 2 , 3 , 4 , 5 ) >>> t [ ... , 0 ] . shape # выбрать первый элемент из последнего измерения, скопировать остаток (2, 3, 4) >>> t [ 0 , ... ] . shape # выбрать первый элемент из первого измерения, скопировать остаток (3, 4, 5)
В MATLAB для обозначения продолжения строки используется трехсимвольное многоточие , [11] что делает последовательность строк
x = [ 1 2 3 ...
4 5 6 ];
семантически эквивалентно одиночной строке
x = [ 1 2 3 4 5 6 ];
В Raku используется фактический символ многоточия (…) Unicode (U+2026), который служит своего рода маркером в строке формата. [12]
Начиная с PHP 8.1, для создания замыкания из вызываемого или объектного метода можно использовать нулевое многоточие : [13]
// старый стиль: PHP 8.0 и старше $foo = [ $this , 'foo' ]; $fn = Closure :: fromCallable ( 'strlen' ); // новый стиль: PHP 8.1 и новее $foo = $this -> foo ( ... ); $fn = strlen ( ... );
В Python многоточие также может использоваться в качестве первого параметра в collections.abc.Callable
аннотации типа для обозначения любого количества аргументов: [14]
из collections.abc import Вызывается из ввода import TypeAlias , ЛюбойVarFunction : TypeAlias = Вызываемый [ ... , Любой ]