見出し画像

PowerShell100本ノック 61~70

PowerShellを学ぶためのコンテンツとして「PowerShell100本ノック」を作成したので公開します。PowerShellは学習コンテンツが非常に少なく、自分自身も習得に苦労した経験から作成するに至りました。今回は61から70問目まで。

前提条件
- Windows PowerShell 5.1
- なにがしかのプログラミング経験がある

含まれる内容
問題 1-10 標準出力
問題 11-20 標準入力、条件分岐、繰り返し
問題 21-30 配列、多次元配列
問題 31-40 連想配列
問題 41-50 ファイル、フォルダ操作
問題 51-60 ファイル検索、パイプ処理
問題 61-70 関数
問題 71-80 再帰関数、ZIP圧縮解凍、スクレイピング
問題 81-90 環境変数
問題 91-100 実行ポリシーとレジストリ操作

記事構成
 記事の上側に問題が10問、下側に答えが10問
(上や下に行ったり来たりが面倒な様子なら構成を変えます)



問題 61‐70

61.関数の定義

「これはテストです」と表示する関数を作成して、関数を実行せよ


62.関数の引数

文字列$strを引数として取り込んで実行すると「これは $str です」と表示する関数を作成して、関数を実行せよ


63.関数の複数引数

文字列$strと数字$loopの2つの引数を取り込んで、実行すると$strを$loop回表示する関数を作成して、関数を実行せよ


64.関数のデフォルト引数

文字列$strと数字$loopの2つの引数を取り込んで、実行すると$strを$loop回表示する関数を作成して、関数を実行せよ。引数$strが指定されなかった場合 $str="りんご"とする


65.関数の戻り値

2つの引数を足して返す関数を作成して、関数を実行せよ


66.引数の参照渡し

引数で数字の入った変数を渡すと変数の中身が+10される関数を作成して、関数を実行せよ


67.引数の参照渡し

変数を2つ渡すと中身を入れ替える関数を作成して、関数を実行せよ


68.関数の自動引数

関数宣言に引数を宣言しないで、1番目の引数と2番目の引数を足し合わせて表示する関数を作成して、関数を実行せよ


69.無名関数

引数を2倍する無名関数を作成せよ


70.パイプライン入力の処理をする関数

要素全てが数字の配列をパイプラインで受け取り、すべて合計して表示する関数を作成せよ



答え 61‐70

61.関数の定義

「これはテストです」と表示する関数を作成して、関数を実行せよ

# 61.
function test(){
  Write-Host "これはテストです。"
}

test


62.関数の引数

文字列$strを引数として取り込んで実行すると「これは $str です」と表示する関数を作成して、関数を実行せよ

# 62.
function test($str){
  Write-Host "これは $str です。"
}
test -str "りんご"
test "りんご"


63.関数の複数引数

文字列$strと数字$loopの2つの引数を取り込んで、実行すると$strを$loop回表示する関数を作成して、関数を実行せよ

# 63.
function test($str,$loop){
  for($i = 0;$i -lt $loop;$i++){
    Write-Host $str
  }
}
test -str "りんご" -loop 3
test -loop 3 -str "りんご"
test "りんご" 3


64.関数のデフォルト引数

文字列$strと数字$loopの2つの引数を取り込んで、実行すると$strを$loop回表示する関数を作成して、関数を実行せよ。引数$strが指定されなかった場合 $str="りんご"とする

# 64.
function test($str="りんご",$loop){
  for($i = 0;$i -lt $loop;$i++){
    Write-Host ("これは" + $str + "です。")
  }
}
test -loop 3


65.関数の戻り値

2つの引数を足して返す関数を作成して、関数を実行せよ

# 65.
function test($a,$b){
  return ($a + $b)
}

test 5 9

PowerShellの関数では値を返す全ての文がそのまま返り値になります。
Returnは必須ではありません。


66.引数の参照渡し

引数で数字の入った変数を渡すと変数の中身が+10される関数を作成して、関数を実行せよ

# 66.
function add10([ref]$num) {
  $num.Value+=10
}
$a = 5
add10 ([ref]$a)
$a 
add10 ([ref]$a)
$a 


67.引数の参照渡し

変数を2つ渡すと中身を入れ替える関数を作成して、関数を実行せよ

# 67.
function swap([ref]$a, [ref]$b) {
  $tmp = $a.Value
  $a.Value = $b.Value
  $b.Value = $tmp
}
$apple="りんご"
$banana="バナナ"
swap ([ref]$apple) ([ref]$banana)
write-host $apple $banana


68.関数の自動引数

関数宣言に引数を宣言しないで、1番目の引数と2番目の引数を足し合わせて表示する関数を作成して、関数を実行せよ

# 68.
function test(){
  return $args[0] + $args[1] 
}

test 100 400

※$argsはシステムで自動的に設定される変数で引数の値が格納されています。


69.無名関数

引数を2倍する無名関数を作成せよ

# 69.
$test = { $args[0] * 2 }
& $test 10

& を先頭に付けると変数の中身を関数のように呼び出せます。
スクリプトブロックと言います。引数も利用できます。


70.パイプライン入力の処理をする関数

要素全てが数字の配列をパイプラインで受け取り、すべて合計して表示する関数を作成せよ

# 70.
function calcsum {
 begin {
  $sum = 0
 }
 process {
  $sum+=$_
 }
 end {
  $sum
 }
}
(1..10) | calcsum
(10,20,50) | calcsum


パイプライン処理する関数を作ることができます。
関数の中でbegin, process, end のキーワードを使うことで
関数の開始時に begin のブロックを実行
各入力を process ブロックで処理、関数の最後に end ブロックを実行します。




#PowerShell #100本ノック #プログラミング問題 #プログラミング学習 #Windows #教材 #つくってみた #プログラミング初心者

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?