Эллипсис (компьютерное программирование)

Обозначение диапазонов или родительского каталога

В программировании нотация многоточия (.. или ...) используется для обозначения диапазонов , неопределенного числа аргументов или родительского каталога. Большинство языков программирования требуют, чтобы многоточие было написано как серия точек; один символ многоточия ( 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

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

Начиная с 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  ​​=  Вызываемый [ ... ,  Любой ]

Ссылки

  1. ^ perlop - perldoc.perl.org
  2. ^ «Perlsyn - Синтаксис Perl - Браузер Perldoc».
  3. ^ «Операторы».
  4. ^ «Printf — Справочник по C++».
  5. ^ Макросы с переменным числом аргументов — использование коллекции компиляторов GNU (GCC)
  6. ^ Изменения рабочего проекта для синхронизации препроцессора C99 - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
  7. ^ «Рабочий проект, Стандарт языка программирования C++» (PDF) .: 14.5.3 Вариативные шаблоны
  8. ^ "PHP: RFC:вариативные параметры".
  9. ^ "СРФИ 46".
  10. ^ «Процедуры индексирования — Руководство NumPy v1.22».
  11. ^ "Mathworks.com". Архивировано из оригинала 2011-06-29 . Получено 2011-04-14 .
  12. ^ Конвей, Дамиан (2006-05-29) [2004-02-26]. Уолл, Ларри (ред.). "Exegesis 7: Formats". dev.perl.org . 2. Архивировано из оригинала 2011-06-15.
  13. ^ "Объявление о выпуске PHP 8.1.0". php.net . Получено 29.03.2023 .
  14. ^ "typing — Поддержка подсказок типов § typing.Callable". Документация Python 3.11.2 . Получено 29.03.2023 .
Взято с "https://en.wikipedia.org/w/index.php?title=Ellipsis_(компьютерное_программирование)&oldid=1264927216"