Перейти к содержимому

Alias что это в программировании

  • автор:

ALIAS

Директива ALIAS создает альтернативное имя функции. Это позволяет создавать несколько имен для функции или создавать библиотеки, позволяющие компоновщику (LINK.exe) сопоставить старую функцию с новой функцией.

Синтаксис

Псевдоним> ALIAS = фактическое имя>

Параметры

фактическое имя
Фактическое имя функции или процедуры. Необходимы угловые скобки.

alias
Альтернативное или псевдоним. Необходимы угловые скобки.

Псевдонимы типов — Основы Typescript

Представим программу, в которой есть объект пользователя. Этот объект используется повсеместно. В такой ситуации описание типа этого объекта будет повторяться в каждом определении функции — это неудобно. Во-первых, здесь много дублирования. Во-вторых, значительно усложняется изменение структуры, потому что придется руками править все места, где встречается это определение. В этом уроке разберем, как избежать таких проблем.

Задаем псевдоним типа

Чтобы не делать одну и ту же работу, да еще и руками, TypeScript позволяет задавать псевдоним (alias) для составных типов. Так мы не будем повторяться:

type User =  firstName: string; pointsCount: number; > 

Теперь можно провести замену во всех функциях:

function doSomething(user: User)  // . > 

Псевдоним — это не создание нового типа данных. Это способ сокращенно записать определение типа. Поэтому следующие примеры будут работать без проблем:

const user =  firstName: 'Mike', pointsCount: 1000, >; // Оба вызова работают doSomething(user); doSomething( firstName: 'Bob', pointsCount: 1800 >); 

При этом разработчики на TypeScript говорят «создаем тип», а не «создаем псевдоним типа». Поэтому в этом курсе мы будем придерживаться общепринятого формата.

Типы можно задавать для любых типов данных. Например, для простых:

type SomeType = string; 

А также для составных:

// union тип из трех возможных значений type SomeType = string | number | null; // Функция type Countable = (coll: number[]) => number 

Объекты и функции

Описание типа функции вне объекта и внутри отличается. Когда функция записывается самостоятельно, используется формат стрелочной функции:

type Countable = (coll: number[]) => number 

Внутри типа, который описывает объект, формат меняется на используемый для обычных свойств:

type User =  firstName: string; pointsCount: number; count(coll: number[]): number; > 

Но это не касается колбеков, которые могут быть использованы внутри:

type User =  firstName: string; pointsCount: number; // Типы взяты для примера count(coll: (v: string) => string): number; > 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Алиасы в MySQL

MySQL ALIASES можно использовать для создания временного имени для столбцов или таблиц.

COLUMN ALIASES используются для упрощения чтения столбцов в вашем результирующем наборе.
TABLE ALIASES используются для сокращения вашего SQL-кода, чтобы упростить его чтение или когда вы выполняете самосоединение (то есть: перечисление одной и той же таблицы более одного раза в операторе FROM).

Синтаксис

Синтаксис для ALIAS COLUMN в MySQL:

column_name [ AS ] alias_name

ИЛИ
Синтаксис для ALIAS A TABLE в MySQL:

table_name [ AS ] alias_name

Параметры или аргументы

column_name — оригинальное имя столбца, который вы хотите присвоить псевдониму.
table_name — оригинальное имя таблицы, которое вы хотите присвоить псевдониму.
AS — необязательный. Большинство программистов указывают спецификатор AS для назначения псевдонима столбцу, но не при назначении имени таблицы. Если вы укажете ключевое слово AS или нет, это не повлияет на псевдоним в MySQL. Это персональный выбор в MySQL, в отличие от других баз данных. (Наши примеры будут использовать AS для назначения имени столбца, но не указывать AS для назначения имени таблицы.)
alias_name — имя псевдонима для назначения столбцу или таблице.

Примечание

  • Если alias_name содержит пробелы, вы должны заключить alias_name в кавычки.
  • При использовании псевдонимов имени столбца допустимо использовать пробелы. Однако обычно не рекомендуется использовать пробелы, когда вы «алиасите» имя таблицы.
  • alias_name допустимо только в пределах объема инструкции SQL.

Пример ALIAS столбца

Как правило, псевдонимы используются для упрощения чтения заголовков столбцов в вашем результирующем наборе. Например, при использовании функции MAX вы можете назначить псевдоним результату функции MAX в MySQL.
Например:

Псевдонимы и определения типов (C++)

Объявление псевдонима можно использовать для объявления имени, используемого в качестве синонима для ранее объявленного типа. (Этот механизм также называется неформальным псевдонимом типа. Этот механизм также можно использовать для создания шаблона псевдонима, который может быть полезен для пользовательских распределителей.

Синтаксис

using identifier = type; 

Замечания

идентификатор
Имя псевдонима.

type
Идентификатор типа, для который вы создаете псевдоним.

Псевдоним не вводит новый тип и не может изменить значение существующего имени типа.

Простейшая форма псевдонима эквивалентна механизму typedef C++03:

// C++11 using counter = long; // C++03 equivalent: // typedef long counter; 

Обе эти формы позволяют создавать переменные типа counter . Псевдоним типа для std::ios_base::fmtflags , приведенный в следующем примере, может быть более полезен.

// C++11 using fmtfl = std::ios_base::fmtflags; // C++03 equivalent: // typedef std::ios_base::fmtflags fmtfl; fmtfl fl_orig = std::cout.flags(); fmtfl fl_hex = (fl_orig & ~std::cout.basefield) | std::cout.showbase | std::cout.hex; // . std::cout.flags(fl_hex); 

Псевдонимы также работают с указателями функций, но гораздо более удобочитаемыми, чем эквивалентный типдф:

// C++11 using func = void(*)(int); // C++03 equivalent: // typedef void (*func)(int); // func can be assigned to a function pointer value void actual_function(int arg) < /* some code */ >func fptr = &actual_function; 

Ограничение typedef механизма заключается в том, что он не работает с шаблонами. Напротив, синтаксис псевдонима типа в C ++11 позволяет создавать шаблоны псевдонимов:

template using ptr = T*; // the name 'ptr' is now an alias for pointer to T ptr ptr_int; 

Пример

В следующем примере показано, как использовать шаблон псевдонима с пользовательским механизмом выделения памяти — в данном случае целочисленным векторным типом. Можно заменить любой тип int , чтобы создать удобный псевдоним, чтобы скрыть сложные списки параметров в основном функциональном коде. Используя пользовательский распределитель во всем коде, вы можете улучшить удобочитаемость и снизить риск возникновения ошибок, вызванных опечатками.

#include #include template struct MyAlloc < typedef T value_type; MyAlloc() < >template MyAlloc(const MyAlloc&) < >bool operator==(const MyAlloc&) const < return true; >bool operator!=(const MyAlloc&) const < return false; >T * allocate(const size_t n) const < if (n == 0) < return nullptr; >if (n > static_cast(-1) / sizeof(T)) < throw std::bad_array_new_length(); >void * const pv = malloc(n * sizeof(T)); if (!pv) < throw std::bad_alloc(); >return static_cast(pv); > void deallocate(T * const p, size_t) const < free(p); >>; #include using MyIntVector = std::vector>; #include int main () < MyIntVector foov = < 1701, 1764, 1664 >; for (auto a: foov) std::cout
1701 1764 1664 

Определения типов

Объявление typedef вводит имя, которое в область становится синонимом типа, заданного частью объявления типа.

Объявления typedef можно использовать для создания более коротких или более значимых имен для типов, уже определенных языком или типами, объявленными вами. Имена typedef позволяют инкапсулировать детали реализации, которые могут измениться.

В отличие от объявлений class struct и union enum объявлений, объявления typedef не вводят новые типы; они вводят новые имена для существующих типов.

Имена, объявленные с использованием typedef того же пространства имен, что и другие идентификаторы (кроме меток инструкций). Поэтому они не могут использовать тот же идентификатор, что и ранее объявленное имя, за исключением объявления типа класса. Рассмотрим следующий пример:

// typedef_names1.cpp // C2377 expected typedef unsigned long UL; // Declare a typedef name, UL. int UL; // C2377: redefined. 

Правила скрытия имен, относящиеся к другим идентификаторам, также управляют видимостью имен, объявленных с помощью typedef . Поэтому следующий код допустим в C++:

// typedef_names2.cpp typedef unsigned long UL; // Declare a typedef name, UL int main() < unsigned int UL; // Redeclaration hides typedef name >// typedef UL back in scope 

Другой экземпляр имени скрыт:

// typedef_specifier1.cpp typedef char FlagType; int main() < >void myproc( int )

При объявлении идентификатора локального область с таким же именем, как и typedef при объявлении члена структуры или объединения в том же область или во внутреннем область, необходимо указать описатель типа. Например:

typedef char FlagType; const FlagType x; 

Чтобы повторно использовать имя FlagType для идентификатора, члена структуры или члена объединения, необходимо указать тип:

const int FlagType; // Type specifier required 
const FlagType; // Incomplete specification 

так как принимается FlagType как часть типа, а не идентификатор, который выполняется повторно. Это объявление принимается как незаконное объявление, аналогичное следующему:

int; // Illegal declaration 

Можно объявить любой тип с typedef помощью указателя, функции и типов массивов. Имя typedef для типа указателя на структуру или объединение можно объявить до определения типа структуры или объединения, если только определение находится в той же области видимости, что и объявление.

Примеры

Одним из способов использования объявлений является создание объявлений typedef более единообразным и компактным. Например:

typedef char CHAR; // Character type. typedef CHAR * PSTR; // Pointer to a string (char *). PSTR strchr( PSTR source, CHAR target ); typedef unsigned long ulong; ulong ul; // Equivalent to "unsigned long ul;" 

typedef Чтобы указать основные и производные типы в одном объявлении, можно разделить деклараторы с запятыми. Например:

typedef char CHAR, *PSTR; 

В следующем примере задан тип DRAWF для функции, не возвращающей никакого значения и принимающей два аргумента int.

typedef void DRAWF( int, int ); 

После приведенной выше typedef инструкции объявление

DRAWF box; 

будет эквивалентно следующему:

void box( int, int ); 

typedef часто объединяется с struct объявлением и именем определяемых пользователем типов:

// typedef_specifier2.cpp #include typedef struct mystructtag < int i; double f; >mystruct; int main()
10 0.990000 

Повторная отмена типов

Объявление typedef можно использовать для повторного объявления того же имени, чтобы ссылаться на тот же тип. Например:

Исходный файл file1.h :

// file1.h typedef char CHAR; 

Исходный файл file2.h :

// file2.h typedef char CHAR; 

Исходный файл prog.cpp :

// prog.cpp #include "file1.h" #include "file2.h" // OK 

prog.cpp Файл содержит два файла заголовка, оба из которых содержат typedef объявления для имени CHAR . Если в обеих объявлениях указывается один и тот же тип, такое повторное объявление допустимо.

Не typedef удается переопределить имя, которое ранее было объявлено в качестве другого типа. Рассмотрим эту альтернативу file2.h :

// file2.h typedef int CHAR; // Error 

Компилятор выдает ошибку из-за prog.cpp попытки повторного объявления имени CHAR для ссылки на другой тип. Эта политика распространяется на такие конструкции, как:

typedef char CHAR; typedef CHAR CHAR; // OK: redeclared as same type typedef union REGS // OK: name REGS redeclared < // by typedef name with the struct wordregs x; // same meaning. struct byteregs h; >REGS; 

typedefs в C++ и C

typedef Использование описателя с типами классов поддерживается в основном из-за практики ANSI C объявления неименованных структур в typedef объявлениях. Например, многие программисты C используют следующую идиому:

// typedef_with_class_types1.cpp // compile with: /c typedef struct < // Declare an unnamed structure and give it the // typedef name POINT. unsigned x; unsigned y; >POINT; 

Преимущество такого объявления заключает в том, что можно выполнять объявления

POINT ptOrigin; 
struct point_t ptOrigin; 

В C++разница между typedef именами и реальными типами (объявленными с class помощью , struct union и enum ключевое слово) более различается. Хотя практика объявления безымяной структуры в typedef инструкции по-прежнему работает, она не предоставляет нотационных преимуществ, как это делает в C.

// typedef_with_class_types2.cpp // compile with: /c /W1 typedef struct < int POINT(); unsigned x; unsigned y; >POINT; 

В предыдущем примере объявляется класс с именем с использованием синтаксиса неназванного POINT класса typedef . POINT считается именем класса, однако к именам, предоставленным таким образом, применяются следующие ограничения.

  • Имя (синоним) не может отображаться после classstruct префикса или union префикса.
  • Имя нельзя использовать в качестве конструктора или деструктора в объявлении класса.

В итоге этот синтаксис не предоставляет никакого механизма для наследования, построения или уничтожения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *