アカウント名:
パスワード:
シームレスに.NET Frameworkも (やりたくないが) COMも叩けるから今までのスクリプティング環境から世界が変わる。調子こいて長大なバッチ処理書いたりするとめちゃくちゃ遅くて悶絶するが…
PowerShellだととにかくスクリプトが長くなる。
ぱっと書くにはめんどくさいしかっちり長々と書くと他の言語で書くより圧倒的に遅くなる
既存の言語から乗り換える人いるのかなーというのが正直な感想。PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?
マルチプラットフォームってことなら他の言語のほうが実績も資産もあるし、何より早い。例えば、下記のようなキメラな処理でもPowerShellより圧倒的に早い上に書くのも簡単。grep "hoge*" hoge.txt | gawk 'BEGIN{FS=";"}{print $3}' |
これなあ…lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。知ってて問題に気付けばすぐ直せるんだけど、初心者は必ず嵌るし、スクリプト適当に書いてると後で問題が発覚する。何気なく対策入れてるコードは何やら呪文めいてる(リンク先では不思議なカンマが入っている)し、この自動変換いらんかったんじゃないかなあ…
lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。
それって例えば、
$list = @(ls)
で解決しない?
確かにハマりやすい点ではあって、PowerShellの最初の方で教えとくべき。
うん、ls自体がコレクションを返すイメージがあるのに、1次元のコレクションを$listに入れるのにこう書いてると、よく知らない人は@()余計じゃねって思うでしょう。思わないかな、PowerShell覚えたての人にとってどうなんだろ。単純な配列リテラルと認識してると思うんだけど。
その辺常識化されてる気がしないから 「#@()で常に配列を返す」 とかコメント入れようとか思うけどでも毎回コメント書くのか?みたいな。
後でパイプライン通すだけのものを一時的に$listに入れる時は@()とかは要らないわけで、類似の複数のコードの中@()してるのしてないのが出てくるし、じゃあ逆に全部@()で括るの統一するかっつうと変数挟まないものでも @(ls)|%{$_.FullName} とかしないとバランス悪い気がするし、なんかなー。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
PowerShellはいいゾ (スコア:0)
シームレスに.NET Frameworkも (やりたくないが) COMも叩けるから今までのスクリプティング環境から世界が変わる。
調子こいて長大なバッチ処理書いたりするとめちゃくちゃ遅くて悶絶するが…
Re: (スコア:0)
PowerShellだととにかくスクリプトが長くなる。
ぱっと書くにはめんどくさいし
かっちり長々と書くと他の言語で書くより圧倒的に遅くなる
既存の言語から乗り換える人いるのかなーというのが正直な感想。
PythonやBashやPHPやJavaScriptで事足りてる人に何かアピールできるところって有りますか?
マルチプラットフォームってことなら他の言語のほうが実績も資産もあるし、何より早い。
例えば、下記のようなキメラな処理でもPowerShellより圧倒的に早い上に書くのも簡単。
grep "hoge*" hoge.txt | gawk 'BEGIN{FS=";"}{print $3}' |
Re: (スコア:3)
http://www.pine4.net/Memo/Article/Archives/203/ [pine4.net]
大抵はObject[]だろうがArrayListだろうがどちらでも良いのだが、要素数が1つの場合に解かれて、ListのListみたいなものを扱うとわかりづらいバグになった。
Re: (スコア:0)
これなあ…
lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。
知ってて問題に気付けばすぐ直せるんだけど、初心者は必ず嵌るし、スクリプト適当に書いてると後で問題が発覚する。
何気なく対策入れてるコードは何やら呪文めいてる(リンク先では不思議なカンマが入っている)し、
この自動変換いらんかったんじゃないかなあ…
Re:PowerShellはいいゾ (スコア:1)
lsの結果とか、空の時とファイル1個の時と2個以上の時とで型が変わっちゃうんだよね。
それって例えば、
で解決しない?
確かにハマりやすい点ではあって、PowerShellの最初の方で教えとくべき。
Re: (スコア:0)
うん、ls自体がコレクションを返すイメージがあるのに、
1次元のコレクションを$listに入れるのにこう書いてると、よく知らない人は@()余計じゃねって思うでしょう。
思わないかな、PowerShell覚えたての人にとってどうなんだろ。単純な配列リテラルと認識してると思うんだけど。
その辺常識化されてる気がしないから 「#@()で常に配列を返す」 とかコメント入れようとか思うけど
でも毎回コメント書くのか?みたいな。
後でパイプライン通すだけのものを一時的に$listに入れる時は@()とかは要らないわけで、
類似の複数のコードの中@()してるのしてないのが出てくるし、
じゃあ逆に全部@()で括るの統一するかっつうと変数挟まないものでも @(ls)|%{$_.FullName} とかしないとバランス悪い気がするし、なんかなー。