Главная > Powershell > Перечисления в Powershell

Перечисления в Powershell

Сегодня речь пойдёт о такой классной штуке, как перечисления, и на фига они нужны.

Для начала о том, что такое перечисление вообще…

Темного теории

Перечисления это новая фишка, появившаяся в Powershell 5.0, которая предоставляет короткий (быстрый) способ проверить/задать параметры чего-либо, и сделать код более удобным для чтения (и написания). Впрочем, лучше один раз увидеть.

Вообще, как по мне, перечисления не самая необходимая штука – можно, обходится и без них, но с ними интереснее Smile.

Говоря по простому, перечисление – это список возможных/допустимых вариантов.

Перечисления отлично подходят для параметров, которые могут иметь несколько заранее определённых значений. Например, при форматировании ячеек в Excel, для вертикального выравнивания текста в ячейке используются следующие параметры:

Name

Value__

xlVAlignTop -4160
xlVAlignJustify -4130
xlVAlignDistributed -4117
xlVAlignCenter -4108
xlVAlignBottom -4107

Для того или иного варианта выравнивания, нужно подставить соответствующее значение. Т.е. если-бы мы писали скрипт, позволяющий пользователю выбирать различные варианты выравнивания, нам нужно было-бы создать хеш-таблицу, содержащую все значения. И в нужный момент подставлять  значение ключа хеш-таблицы.

При использовании перечислений всё становится намного проще: мы создаём перечисление, которое хранит все возможные значения.

По сути мы определяем свой тип данных, который содержит только допустимые значения (как тип [int] например: содержит такие значения как 2, 5, 328 и т.д., но не 2.5, ‘string’ и т.д.)

Переходим к практике

Описание перечисления в Powershell, как и многое другое, начинается со своего ключевого слова – Enum, за которым следует его имя, а в фигурных скобках – тело перечисления:

Enum My_Enum
{
    ...
}

Возвращаясь к примеру с выравниванием в Excel. Без использования перечислений самым простым способом задать параметры выравнивания, пожалуй, было бы использование хеш-таблицы:

$Align = @{
    'xlVAlignTop' = -4160
    'xlVAlignJustify' = -4130
    'xlVAlignDistributed' = -4117
    'xlVAlignCenter' = -4108
    'xlVAlignBottom' = -4107
}

И в нужном месте скрипта нужно было-бы обратиться к элементу хеш-таблицы:

PS C:\> $Align.xlVAlignTop
-4160

При использовании перечислений это будет выглядеть так:

Enum Align
{
    xlVAlignTop = -4160
    xlVAlignJustify = -4130
    xlVAlignDistributed = -4117
    xlVAlignCenter = -4108
    xlVAlignBottom = -4107
}

Чтобы обратиться к элементу перечисления нужно обратиться к нему как к статическому свойству:

PS C:\> [Align]::xlVAlignCenter
xlVAlignCenter    

Т.е. мы создаём не рядовую хеш-таблицу, а полноценный тип данных.

Для получения значения элемента перечисления обращаться нужно не к самому элементу, а к значению его свойства:

PS C:\> [Align]::xlVAlignCenter.value__
-4108
                                

Значения элементов перечисления могут принимать только целые числа. Кстати, задавать значения вовсе необязательно, так как по умолчанию всем элементам присваиваются значения начиная с нуля, но если задать значение одному элементу, следующие нумеруются уже не с 0, а начиная с этого значения (подробнее см. ниже).

Для класса, описывающего робота, который рассматривался в нескольких предыдущих статьях, с помощью перечисления можно задать, например, цвет робота:

Enum Color
{
    Blue
    Green
    Red
}

Кстати, после объявления перечисления, для него работает IntelliSense и автодополнение:

Enum in Powershell

Соответственно, если нужны значения…

PS C:\> [Color]::Blue.value__
0
PS C:\> [Color]::Green.value__
1
PS C:\> [Color]::Red.value__
2

Если же задать значение какому-либо элементу…

Enum Color2
{
    Blue
    Green = 10
    Red
}

то значения, следующих за ним элементов, будут нумероваться в порядке возрастания, начиная с указанного значения:

PS C:\> [color2]::Blue.value__
0
PS C:\> [color2]::Green.value__
10
PS C:\> [color2]::Red.value__
11

На сегодня всё. В следующей статье поговорим о том, как добавить перечисление к нашему классу. Там же будет обещанный ранее лайфхак, как сделать свойство класса доступным только для чтения. Кто уже догадался о чём речь может попробовать самостоятельно Smile.

Реклама
Рубрики:Powershell Метки:
  1. Комментариев нет.
  1. No trackbacks yet.

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: