Jump to content

Многоточие (компьютерное программирование)

В компьютерном программировании многоточие ( .. или ...) используется для обозначения диапазонов , неопределенного количества аргументов или родительского каталога. Большинство языков программирования требуют, чтобы многоточие было записано как серия точек; один символ многоточия ( Unicode нельзя использовать ).

Диапазоны

[ редактировать ]

В некоторых языках программирования (включая Ada , Perl , Ruby , Apache Groovy , Kotlin , Haskell и Pascal ) сокращенное многоточие из двух точек используется для представления диапазона значений с учетом двух конечных точек; например, для перебора списка целых чисел от 1 до 100 включительно в Perl:

foreach (1..100)

В Руби ... Оператор обозначает полуоткрытый диапазон, т. е. включает начальное значение, но не конечное значение.

В Русте ..= оператор обозначает включающий диапазон для случаев совпадений и .. оператор представляет диапазон, не включающий конечное значение.

Perl и Ruby перегружают оператор «..» в скалярном контексте как оператор-триггер тест с сохранением состояния бистабильный логический , примерно эквивалентный «истина, пока x, но еще не y », аналогично оператору «,» в sed и AWK. . [1]

Компиляторы, совместимые с GNU C, имеют расширение языков C и C++, позволяющее использовать диапазоны регистров в операторах переключения :

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("not supported!");
}

Кроме того, GNU C допускает аналогичный синтаксис диапазона для назначенных инициализаторов , доступный только в языке C:

int array[10] = { [0...5] = 1 };

Делфи/Турбо-Паскаль/Фри Паскаль:

var FilteredChars: set of [#0..#32,#127,'a'..'z'];
var CheckedItems: set of [4,10..38,241,58];

В унифицированном языке моделирования (UML) двухсимвольное многоточие используется для обозначения переменной мощности ассоциации. Например, мощность 1..* означает, что количество элементов, объединенных в ассоциацию, может варьироваться от 1 до бесконечности (эквивалент использования Клини плюс ).

Родительский каталог

[ редактировать ]

В Windows и Unix-подобных операционных системах «..» используется для доступа к родительскому каталогу по пути .

Неполный код

[ редактировать ]

В Перле [2] и Раку [3] Трехсимвольное многоточие также известно как оператор «яда-яда-яда» и, как и его лингвистическое значение , служит «заменой» для кода, который будет вставлен позже.

Python3 также позволяет использовать трехзначное многоточие в качестве выразительного заполнителя для кода, который будет вставлен позже.

В первой абстрактной синтаксической нотации (ASN.1) многоточие используется в качестве маркера расширения, указывающего на возможность расширения типов в будущих версиях спецификации протокола. В выражении ограничения типа, например A ::= INTEGER (0..127, ..., 256..511) многоточие используется для отделения корня расширения от дополнений расширения. Определение типа А в системе версии 1 вида A ::= INTEGER (0..127, ...) и определение типа А в системе версии 2 вида A ::= INTEGER (0..127, ..., 256..511) представляют собой серию расширений одного и того же типа А в разных версиях одной и той же спецификации. Многоточие также можно использовать в определениях составных типов, чтобы отделить набор полей, принадлежащих корню расширения, от набора полей, составляющих дополнения расширения. Вот пример: 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] использование многоточия для определения явно вариативной функции , где ... перед аргументом в определении функции означает, что аргументы с этого момента будут собраны в массив. Например:

function variadic_function($a, $b, ...$other)
{
    return $other;
}

var_dump(variadic_function(1, 2, 3, 4, 5));

Производит этот вывод:

  array(3) {
    [0]=>
    int(3)
    [1]=>
    int(4)
    [2]=>
    int(5)
  }

Несколько измерений

[ редактировать ]

В Python многоточие — это нулевое выражение, представляющее Ellipsis синглтон.

В частности, он используется в NumPy , где многоточие используется для нарезки произвольного количества измерений многомерного массива: [9]

>>> import numpy as np
>>> t = np.random.rand(2, 3, 4, 5)
>>> t[..., 0].shape # select 1st element from last dimension, copy rest
(2, 3, 4)
>>> t[0, ...].shape # select 1st element from first dimension, copy rest
(3, 4, 5)

Другая семантика

[ редактировать ]

В MATLAB трехсимвольное многоточие используется для обозначения продолжения строки . [10] создание последовательности строк

x = [ 1 2 3 ...
4 5 6 ];

семантически эквивалентен одной строке

x = [ 1 2 3 4 5 6 ];

В Raku реальный символ многоточия (…) Юникода (U+2026) используется в качестве маркера в строке формата. [11]

Начиная с PHP 8.1, нулевое многоточие можно использовать для создания замыкания из вызываемого или объектного метода: [12]

// old style: PHP 8.0 and older
$foo = [$this, 'foo'];
$fn = Closure::fromCallable('strlen'); 

// new style: PHP 8.1 and newer
$foo = $this->foo(...);
$fn = strlen(...);

В Python многоточие также можно использовать в качестве первого параметра внутри collections.abc.Callable введите аннотацию для обозначения любого количества аргументов: [13]

from collections.abc import Callable
from typing import TypeAlias, Any

VarFunction: TypeAlias = Callable[..., Any]
  1. ^ Перлоп - perldoc.perl.org
  2. ^ «Perlsyn — синтаксис Perl — браузер Perldoc» .
  3. ^ «Операторы» .
  4. ^ «Printf — Справочник по C++» .
  5. ^ Variadic Macros - Использование коллекции компиляторов 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. ^ «Процедуры индексирования — Руководство NumPy v1.22» .
  10. ^ «Mathworks.com» . Архивировано из оригинала 29 июня 2011 г. Проверено 14 апреля 2011 г.
  11. ^ Конвей, Дамиан (29 мая 2006 г.) [26 февраля 2004 г.]. Уолл, Ларри (ред.). «Эксегеза 7: Форматы» . dev.perl.org . 2. Архивировано из оригинала 15 июня 2011 г.
  12. ^ «Объявление о выпуске PHP 8.1.0» . php.net . Проверено 29 марта 2023 г.
  13. ^ «typing — Поддержка подсказок типа § typing.Callable» . Документация Python 3.11.2 . Проверено 29 марта 2023 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ac52cc6200c20dbb640af9ff31e99093__1721778480
URL1:https://arc.ask3.ru/arc/aa/ac/93/ac52cc6200c20dbb640af9ff31e99093.html
Заголовок, (Title) документа по адресу, URL1:
Ellipsis (computer programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)