連載第1回目(もちろん0から数えています)の今回は,前回予告どおり関数型言語としてのSwiftを見ていきます。ところで「関数型言語」とはいったいなんでしょう。実のところあいまいな用語ではあるのですが,「最低限文化的な関数型」の関数は第一級オブジェクトであることに異議のある読者はあまりいらっしゃらないと思います。「第一級オブジェクトってなんぞや」おさらいしてみるとこういう感じでしょうか。変数に代入できる関数の引数にできる関数を返す関数が書けるJavaScript,Lua,Perl,Python,PHP,Rubyといった今日日のスクリプト言語はその意味において「最低限文化的な関数型言語」の定義を満たしています。一例としてJavaScriptを見てみましょうか。前回のFizzBuzzを普通に書くとこんな感じでしょうか(リスト1)。console.log(fizzbuzz(i))&#125;見てのとおり,fizzbuzzは変数名で,そこに関数を代入しています。String(n)&#125;いいえ,ちょっと違います。String(n)&#125;あるいはこうです。String(n)&#125;まとめるとこう。}変数指定を{}の外ではなく中でやるあたり,JavaScriptよりむしろRubyっぽいですね。実はもっとRubyっぽいことをこれから見ていきます。FizzBuzzをちょっと変えて,「1から100に対応した結果を出力」するのではなく,「1から100まで入った配列をFizzBuzz変換」することを考えてみましょう。JavaScriptではこうかな(リスト2)。100).map(fizzbuzz)console.log(a)ここで,fizzbuzz()を無名化するとこうなります。n;&#125;))動くことは動きますが,()の中に入ったfunctionはなんとも不格好です。a「メソッドの最後の引数がブロックの場合,()の外に書いてよい」というルールのおかげでずいぶんとエレガントです。String(n)&#125;println(a)見てのとおり,mapの後の無名関数を()でくくらなくても動きました。無名関数の引数と戻り値のほうも指定していません。Lattnerもホームページで「アイデアを拝借した」と率直に答えているとおりです。Lattnerが言っていない,拝借されたアイデアがもう1つあります。コードで見てみましょう(リスト3)。String($0)&#125;println(a)なんと,inが消えてしまいました。その代わりnがあった位置に$0という未宣言の変数が存在します。この変数のことをプレイスホルダー(placeholder)変数というのですが,$0が最初の引数,$1が次の引数といった具合です。6のアイデアなんですが......。著者プロフィール小飼弾(こがいだん)1969年生まれ,東京都出身。GOのガチトレーナーのほうが有名になりつつある......かもしれない永遠のエンジニアオヤジ。https://twitter.com/dankogai,ニコニコチャンネルは,http://ch.nicovideo.jp/dankogai,blogはhttp://blog.livedoor.jp/dankogai/当社刊行書籍は『小飼弾のアルファギークに逢ってきた』『小飼弾のコードなエッセイ』など。