前回の説明で PowerShell のクラスがどんなモノか大体わかったと思います。
今回は class の使い勝手を良くする「オーバーロード」について解説します。
(文中で、「内部データ/データ」と「プロパティ」の2つの言葉が出てきますが、文脈によって使い分けているだけで同じ意味です)
オブジェクト指向プログラミングに馴染みが無いと、「オーバーロード」と聞いても「は? 何の事??」 ですよね w
「オーバーロード」をざっくりと表現すると、引数の種類に合わせたメソッドを実行する機能です。
PowrShell の変数は、型を意識しなくても良しなに処理してくれるので、[int] とか [string] とか明示的に型を指定する事は少ないのですが、前回の説明で、[int] とか [string] とか明示的に型を指定しているを見て「何で? 面倒だなぁ... 」と疑問に思った方も多いと思います。
実は、ここにオーバーロードの秘密が隠されているのです。
class に実装するメソッドは、引数の型によって実行されるメソッドが選択されます。
どういう動きをするのか見るのが早いですね。
[D:\temp\test11.ps1]
|
これを実行するとこのようになります。
PS D:\> D:\temp\test11.ps1
10
25
This is
This is string.
PS D:\>
|
このように、多重定義された Add メソッドなのですが、受け取った変数の型によって実行されるメソッドが違うのがわかりますね。
このオーバーロードを実現するために class では型を明示的に書く必要があるのです。
「だから何? 便利なの?」ですよね ww
PowerShell では、皆さん既にオーバーロードを使っているのです。
|
こんな感じで、扱うのが数値なのか文字列なのかといった型を意識せず同じように使えるので、class の使い勝手が良くなるのがオーバーロードの良さです。
オーバーロードの一番の出番はコントラクタかもしれません。
コントラクタでオーバーロードを使うと、class をインスタンス化する際に、初期値をセットする場合と初期値をセットしない場合の両方をサポートすることができます。
[D:\temp\test12.ps1]
|
PS D:\> D:\temp\test12.ps1
25
20
PS D:\>
|
このように、インスタンス化する際に必ず初期値をセットしなくてはいけないといった制限がなくなるので、class の使い勝手が良くなります。
超簡単な PowerShell Class の使い方(その1)
http://www.vwnet.jp/Windows/PowerShell/2017082001/PSv5Class01.htm
超簡単な PowerShell Class の使い方(その3/static)
http://www.vwnet.jp/Windows/PowerShell/2017082201/PSv5Class03.htm
超簡単な PowerShell Class の使い方(その4/継承)
http://www.vwnet.jp/Windows/PowerShell/2017082301/PSv5Class04.htm
超簡単な PowerShell Class の使い方(その5/スコープ)
http://www.vwnet.jp/Windows/PowerShell/2017082302/PSv5Class05.htm
超簡単な PowerShell Class の使い方(その6/まとめ)
http://www.vwnet.jp/Windows/PowerShell/2017082401/PSv5Class06.htm
PowerShell Class
http://www.vwnet.jp/Windows/etc.asp#PowerShell_Class
PowerShell クラスを使用したカスタム型の作成Creating Custom Types using
PowerShell Classes | Microsoft Docs
https://docs.microsoft.com/ja-jp/powershell/scripting/windows-powershell/wmf/whats-new/class-overview?WT.mc_id=WD-MVP-36880
Copyright © MURA All rights reserved.