Многоточие (компьютерное программирование)
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2014 г. ) |
В компьютерном программировании многоточие ( .. или ...) используется для обозначения диапазонов , неопределенного количества аргументов или родительского каталога. Большинство языков программирования требуют, чтобы многоточие было записано как серия точек; один символ многоточия ( 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
[ редактировать ]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
[ редактировать ]Начиная с 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]
Ссылки
[ редактировать ]- ^ Перлоп - perldoc.perl.org
- ^ «Perlsyn — синтаксис Perl — браузер Perldoc» .
- ^ «Операторы» .
- ^ «Printf — Справочник по C++» .
- ^ Variadic Macros - Использование коллекции компиляторов GNU (GCC)
- ^ Рабочий проект изменений для синхронизации препроцессора C99 — http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
- ^ «Рабочий проект стандарта языка программирования C++» (PDF) . : 14.5.3 Вариативные шаблоны
- ^ «PHP: RFC:вариатики» .
- ^ «Процедуры индексирования — Руководство NumPy v1.22» .
- ^ «Mathworks.com» . Архивировано из оригинала 29 июня 2011 г. Проверено 14 апреля 2011 г.
- ^ Конвей, Дамиан (29 мая 2006 г.) [26 февраля 2004 г.]. Уолл, Ларри (ред.). «Эксегеза 7: Форматы» . dev.perl.org . 2. Архивировано из оригинала 15 июня 2011 г.
- ^ «Объявление о выпуске PHP 8.1.0» . php.net . Проверено 29 марта 2023 г.
- ^ «typing — Поддержка подсказок типа § typing.Callable» . Документация Python 3.11.2 . Проверено 29 марта 2023 г.