概要
powershellで関数作成時にハマったのでメモ。関数の戻り値は、その関数内の処理において標準出力に出力されたものすべてという点が重要なので、その点を意識して作らないといけない。
背景と目的
先日、powershellで関数を作成していたところ、意図しない出力に悩まされてハマってしまった。なので、同じ間違いを繰り返さないようにメモしておく。
詳細
powershellで関数を作るときに意識しなければいけないのは、
その関数内の処理において標準出力に出力されたものすべてが戻り値になる
ということだ。他の言語のように
return xxx
と書いた部分になるのではない。
Linuxのshellと同じ感覚で使うものと考えれば当たり前なのだが、私は最近以下のような関数を作ったところ、戻り値が期待した$xにならずに悩んだ。
function hoge () { # 処理結果を引数$bufferで受け取り、かつ戻り値のある関数を呼び出し hogehoge $buffer : 何らかの処理 # これを関数hogeの戻り値にしたつもり return $x }
hogehogeの処理結果は$bufferで受けるが、hogehogeの戻り値は必要ないので変数で引き受けなかった。しかし、こうすることでhogehogeの戻り値はhogeの標準出力に吐き出される。すると、hogeの戻り値として$xの前に付加されてしまう。
なので、本来期待したとおりの戻り値$xとするには、以下のように変数で引き受けるという手があると思う。
$y = hogehoge $buffer
とはいえ、使いもしない変数で引き受けるのもなんだかいまいちな気がするので、Linuxのようにdev/nullをやる手もあるだろう。
というわけで、普段よく使うPythonやjavascriptと同じ感覚で作るとこういうところにハマってしまうので、注意して作らないといけない。
まとめと今後の課題
powershellの関数作成時に気を付けることをまとめた。今後作成時に同じミスをしないようにしたい。