技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

powershellでクラスを定義する。

powershellの勉強の一環で、クラスを自分で定義して使ってみた。
例として、Personクラスを定義して、そのクラスから生成したオブジェクトに、Name、Age、Addressをセットして、Age でソートして表示させてみた。

今回、Personオブジェクトにセットする値は、以下のファイルから読み込むものとする。

入力ファイル

Taro	30	東京
Jiro	29	大阪
Saburo	28	京都


powershellスクリプト

# 入力ファイル
$inputFile = $Args[0]

$persons = @();
foreach ($line in Get-Content -Encoding UTF8 $inputFile) { # 入力ファイルが UTF-8 でエンコードされていたとする。
    $items = $line.split("`t") # タブで分割
    $person = New-Object Person($items[0], $items[1], $items[2]); # person オブジェクトを生成
    $persons += $person
}
$persons = $persons | Sort-Object -Property Age # person オブジェクトを年齢でソート(昇順)
foreach ($person in $persons) {
    Write-Output $person.Name
}

# Personクラスの定義
class Person {
    [string] $Name
    [int] $Age
    [string] $Address
    
    # コンストラクタ
    Person ([string] $name, [int] $age, [string] $address) {
        $this.Name = $name
        $this.Age = $age
        $this.Address = $address
    }
}


上記を実行すると、

Saburo
Jiro
Taro

と出力される。(意図通り、Ageで昇順にソートされている。)

powershell では、上記のようにクラスを簡単に定義して使えるので、言語がデフォルトで持っているデータ構造で合う用途のものがなければ、積極的に独自クラスを使っていきたい。