分Objective-Cを知らない子供たちSwiftがWWDC2014で登場したのは2014年6月2日。6でSwiftが1.0になったのは同年10月19日。本稿執筆時点で実はまだ1年も経っていません(注1)。Xプログラミングにおいて当たり前の存在となっています。Tech!というスクールに彼女たちを通わせているのですが,そこで教えているのがObjective-Cを飛ばしていきなりSwift。彼女たちは文字どおり「Objective-Cを知らない子供たち」であるわけです。1とはかなり非互換で,前回で触れたとおりprint()の仕様すら変わっています。執筆者泣かせもいいところなのですが,わずか1年でObjective-CからのエクソダスをやりとげたAppleにしてみれば,この程度はちょろいのかもしれません。いえ,言語仕様が定まらないことには記事も書けないわけで,現時点におけるSwiftは1,正確には1.2で行くしかありません。2でも同等に扱えそうな話題を取り上げます。前述の理由でprint()すら避けたいので,すべてplaygroundで実行します。2015年10月号に掲載されたものです。実行しないを実行する―遅延評価で,何を実行するかというと,実行しないことを実行します。なんだか禅問答のようですが,これのないプログラミングはあり得ません。次のコードを見てみましょう。"偽"&#125;なんの変哲もないif文ですが,これをplaygroundで実行してみましょう(図1)。executed”と出てきます。条件分岐はプログラミングにおいて必須の機能ですが,「成立した場合に実行するコードを実行する」というのは「成立しない場合に実行するコードを実行しない」と同値なのです。それでは,「実行しないを実行する」を,そのために用意されたifなどの構文を使わずに実現できるでしょうか?次のコードを見てみましょう。1))tf見てのとおり,noopは「何もしない」関数です。何もしないのであれば,tもfも0のままのはずですが,tは1に,fは-1になってしまっています。1)が実行されてしまっているのです。これを防ぐためにはどうしたらよいでしょう?()を{}に変えてみましょう。1})にしてみるのです。tもfも元のままです。実行「する」,つまり,まだ実行されていないのです。このことを利用すれば,「実行しないを実行する」を実現できそうです。試しにif文を構文ではなく関数として実装してみましょうか。関数として実装するので,rubyのfのように値を返すようにします。:と同じ機能を持つ関数を実装するのです。if文も三項演算子も使わずに(リスト1,図2)。実は同様のコードは連載第1回でも紹介したのですが,連載第1回の時とは異なり,総称関数としてIFを実装しています。カスタム演算子の機能を使って任意の三項演算子を定義でき......ればいいのですが,Swiftにカスタム三項演算子を定義する機能はありません。:しか存在しないのでわざわざカスタム演算子を定義する需要もなさそうなので,さほど残念ではありませんが。実際Swiftには@autoclosureという属性(attribute)も用意されていて,これで宣言した引数は自動的に{}でくくられていることになります。assert()などはそのように実現されているのです。λはつらいよというわけで,「実行しないを実行する」は,「実装しといて実行しない」という形で実現できるわけです。これを突き詰めるとどうなるでしょうか?それが関数しかない世界,ラムダ演算です。結論から言うとこうなります。f(f(x))&#125;&#125;つまりzeroはfをゼロ回xに適用する関数,oneは1回適用する関数,twoは2回適用する関数というわけです。動的型の関数であればそこで話は終わるのですが,Swiftの型は静的。((T->T)->(T)->T,日本語で書くと「Tを受け取ってTを返す」関数を受け取り,Tを受けすべての「数値」が同じ型になっていて,整合性が確保されていることがわかります。それではこれを普通の数値にするにはどうすればよいのでしょうか?こんな感じにすればよいのです。2中身を変えれ,たとえば数値ではなく文字の長さで表現することもできます。その結果がリスト2と図3です。betaでも動きました。2に触れていきたいと思います。そのときまでに仕様が固まっているといいのですが......。Objective-C著者プロフィール小飼弾(こがいだん)1969年生まれ,東京都出身。GOのガチトレーナーのほうが有名になりつつある......かもしれない永遠のエンジニアオヤジ。https://twitter.com/dankogai,ニコニコチャンネルは,http://ch.nicovideo.jp/dankogai,blogはhttp://blog.livedoor.jp/dankogai/当社刊行書籍は『小飼弾のアルファギークに逢ってきた』『小飼弾のコードなエッセイ』など。