PowerShell を実装していて Java のインターフェース的なことをやりたいなと思い実装してみる。
型安全ではないけれど処理の重複は防ぐことができそう。。。
もっと良い方法ありそうだけど簡易的にはできた。。。
例えで処理を try / catch してエラー時の処理を統一してみる。
他にも仕組みを変えればいろいろできる。
# 処理実行クラス
# 処理を try /catch して実行、エラー処理を catch に書く
class Main {
[int] $exitErrorCode;
ExitCode([int]$_exitErrorCode) {
$this.exitErrorCode = $_exitErrorCode;
}
[int] main([Object]$run) {
try {
$run.run();
return 0;
} catch {
Write-Host "Error";
Write-Host "共通的なエラー処理を描くかんじ";
return $this.exitErrorCode;
}
}
}
# 処理クラス エラー
class RunError {
[void] run() {
Write-Host "Error 発生 ないパスで Move-Item";
Move-Item aaaa\bbbb\cccc\dddd eeeee;
}
}
# 処理クラス 通常
class RunNormal {
[void] run() {
Write-Host "Error 発生なし";
Write-Host "実際にやりたい処理を描くかんじ"
}
}
############# 上で作ったクラスを使って以下の感じで実行
$ErrorActionPreference = "Stop"
$MainClass = New-Object Main(99);
$RunErrorClass = New-Object RunError;
$RunNormalClass = New-Object RunNormal;
$MainClass.main($RunErrorClass);
$MainClass.main($RunNormalClass);