2014/04/13

昨日4/12開催の第一回 PowerShell勉強会@大阪には約40名もの方にお越しいただき、盛況のうちに無事終了しました。中には遠方からお越しの方も数名いらっしゃいました。皆様どうもありがとうございました。PowerShell勉強会は大阪でも今後も継続的に実施していければ良いな、と思っております。

さて私のセッションは「PowerShell『再』入門2014」というタイトルで行いましたがいかがでしたでしょうか。以下にセッションスライドを公開します。

PowerShellのこれまで、今、これから、を時系列に紹介してみました。これからPowerShellに触れる方をメインに想定した、ごく基本の話だったので、知っている方には少々退屈だったかもしれないですが、PowerShellの現在の立ち位置を再確認する機会にしていただけたなら幸いに思います。

そしてPowerShellの学習方法として、何から手をつけるべきか、どこで情報を得るといいのか、等の話をしてみました。最近よく、PowerShellってどこからやればいいの?ということを聞かれていたというのが、この項目を入れた動機です。たしかにPowerShellはv4になり機能も色々と増え、全体像を把握するのが大変になってきています。その一方で情報(特に日本語)が不足しているのも事実です。そんな状況のなか、初心者の方はどうやってPowerShellを入門していけばいいのか、という道しるべを示せれば良いな、と思いました。いかがでしたでしょうか。

2013/01/20

PowerShellでFizzBuzz問題をいかに短く書くかというのは、人類にとっての太古からの命題であり、色々な方がチャレンジしています。

以下は国内でのチャレンジを、 日時、チャレンジャー名、コード文字数(半角スペース消去後)、初出アドレス で時系列にまとめたものです。

2007/11/06 牟田口 89文字 リンク
2007/11/07 囚人さん 86文字 リンク
2007/11/07 よこけんさん 75文字 リンク
2007/11/13 よこけんさん 57文字 リンク
2013/01/19 guitarrapcさん 57文字 リンク

私の現在の最短コードはこれです。PowerShell 3.0でしか動きませんが、51文字です。

1..100|%{($t="fizz"*!($_%3)+"buzz"*!($_%5))+$_[$t]}

PowerShell 2.0でも動くバージョンは以下。54文字です。

1..100|%{($t="fizz"*!($_%3)+"buzz"*!($_%5))+@($_)[$t]}

きっと解説は不要だと思いますが蛇足を承知で少しばかり。

$_%3 は、剰余を求める演算子%を使っているので、$_が3の倍数のとき0を返します。

!(0)とすると、0はboolに型変換され$falseとなり、その論理否定なので!(0)は$trueになります。

”fizz”*$true とすると右辺はintに型変換されるので”fizz”*1が評価され、”fizz”を返します。PowerShellでは「文字列*整数値」で文字列を整数値回繰り返した文字列を返すことを利用しています。

同じことを”buzz”に対しても行い、結果を+で連結します。このとき、”fizz”か”buzz”か”fizzbuzz”か””(空の文字列)のいずれかを返します。得られた値を@とします。

($t=@) とすると$tに@の値を入れつつ、@の値を返します。

@($_)[$t] とすると、$tが””(空の文字列)の場合は型変換され@($_)[0]が評価されます。よって、$tが””のときは@($_)の0番目の要素、$_、すなわち元の数値が取り出されます。最後に””と元の数値を+で連結したものが出力されるので、結果として数値のみが出力されます。

$tが”fizz”か”buzz”か”fizzbuzz”の場合は@($_)[$t]は配列の範囲外なので$nullを返します。よって$t+$null、すなわち$tの文字列がそのまま出力されます。

PowerShell 3.0だと非配列変数でも[]演算子を使用することができます。よって$_[0]は$_と等しく、$_[文字列]は$nullです。これによって@($_)のように配列化する必要がなく、3文字短縮できたわけです。



Copyright © 2005-2018 Daisuke Mutaguchi All rights reserved
mailto: mutaguchi at roy.hi-ho.ne.jp
プライバシーポリシー

Twitter

Books