2007/08/05

今日まっちゃ139勉強会でインスパイアされてPowerShellでは再帰呼び出しが何回できるのか?ということを調べたら100回でした。どっかに説明があった気もする…。以下、2分で書いた検証コード。(2分もかけるなって?w)

$b=1;function a(){$b++;$b;a};a

実行結果

2
3
4
5
6
7
8
9
略
94
95
96
97
98
99
呼び出しの深さのオーバーフローのため、スクリプトが失敗しました。呼び出しの深さ
が 101 に達しましたが、最大値は 100 です。

ちなみにVBScriptやJScriptは環境依存しますがメモリ容量が足りないというエラーで最後は終了しますがだいたい1000〜2000階層くらいまでいけるっぽいです。あれ、再帰呼び出ししてるときにスタック領域が不足しましたってエラーを見ることがあるんだけどどうやったら出るんだっけ?

b=1
a
Sub a()
	b=1+b
	wscript.stdout.writeline b
	call a()
End Sub
var b=1;
a();
function a(){
	b++;
	WScript.StdOut.WriteLine(b);
	c=a();
}

おまけ。やはりインスパイアされてfizz buzz問題をPowerShellで書いてみた。これ5分くらいかかったので私はだめかもしれません。変数1個でいいですね、よく考えると。てんぱってるとだめみたいです。

1..100|%{$a="";$b=$false;if($_ % 3 -eq 0){$a+="fizz";$b=$true};if($_ % 5 -eq 0){$a+="buzz";$b=$true};if(!$b){$_}else{$a}}
元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/08/05/88870.aspx

2007/06/17

ダッチさんのメソッド名ランキングにインスパイアされてPowerShellのコマンドレットではどうなのかというのをやってみました。

get-command |group-object verb|sort count -descending

結果

Count Name                      Group
----- ----                      -----
   29 Get                       {Get-Acl, Get-Alias, Get-AuthenticodeSignatu...
   13 Set                       {Set-Acl, Set-Alias, Set-AuthenticodeSignatu...
    8 New                       {New-Alias, New-Item, New-ItemProperty, New-...
    7 Write                     {Write-Debug, Write-Error, Write-Host, Write...
    6 Out                       {Out-Default, Out-File, Out-Host, Out-Null...}
    5 Remove                    {Remove-Item, Remove-ItemProperty, Remove-PS...
    4 Add                       {Add-Content, Add-History, Add-Member, Add-P...
    4 Format                    {Format-Custom, Format-List, Format-Table, F...
    4 Clear                     {Clear-Content, Clear-Item, Clear-ItemProper...
    4 Export                    {Export-Alias, Export-Clixml, Export-Console...
    3 Invoke                    {Invoke-Expression, Invoke-History, Invoke-I...
    3 Start                     {Start-Service, Start-Sleep, Start-Transcript}
    3 Stop                      {Stop-Process, Stop-Service, Stop-Transcript}
    3 Import                    {Import-Alias, Import-Clixml, Import-Csv}
    2 ConvertTo                 {ConvertTo-Html, ConvertTo-SecureString}
    2 Copy                      {Copy-Item, Copy-ItemProperty}
    2 Update                    {Update-FormatData, Update-TypeData}
    2 Select                    {Select-Object, Select-String}
    2 Rename                    {Rename-Item, Rename-ItemProperty}
    2 Move                      {Move-Item, Move-ItemProperty}
    2 Measure                   {Measure-Command, Measure-Object}
    1 Sort                      {Sort-Object}
    1 Where                     {Where-Object}
    1 Tee                       {Tee-Object}
    1 Split                     {Split-Path}
    1 Test                      {Test-Path}
    1 Trace                     {Trace-Command}
    1 Suspend                   {Suspend-Service}
    1 ForEach                   {ForEach-Object}
    1 Group                     {Group-Object}
    1 Join                      {Join-Path}
    1 Compare                   {Compare-Object}
    1 ConvertFrom               {ConvertFrom-SecureString}
    1 Convert                   {Convert-Path}
    1 Resolve                   {Resolve-Path}
    1 Restart                   {Restart-Service}
    1 Resume                    {Resume-Service}
    1 Pop                       {Pop-Location}
    1 Push                      {Push-Location}
    1 Read                      {Read-Host}

やはりGetが多いですね。対応してSetも多いです。結果は普通ですが一行のコマンドでこんなことが分かるのが面白いでしょ?

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/06/17/81041.aspx

Copyright © 2005-2016 Daisuke Mutaguchi All rights reserved

mailto: mutaguchi at roy.hi-ho.ne.jp

Awards

Books

Twitter