RunSwiftでSwift入門

スポンサーリンク

iOS 開発用の新しいプログラミング言語 Swift を、ブラウザで実行して試せる RunSwift – Try Swift in the Browser というウェブサービスを発見しました。それで Swift の触りだけでも勉強しようと思ったら、RunSwift のサンプルで書いてある Swift コードがいきなり難しかったので、とりあえずそれを解読した。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

RunSwift デフォルトのサンプルコード

コンパイル後の実行結果。

print デバッグ

ぱっと見よく分かんないので、以下のように print デバッグを差し込んで計算の流れを確認。filter に渡す配列も1から9までに限定しました。

コンパイル後の実行結果。

これで、どういう流れでプログラムが実行されるか分かりました。filter に渡されるブロックが真を返す要素に対してのみ、reduce 以降が実行される。上の例では…

3 + 5 + 6 + 9 = 23

となるわけだ。

Swift のクロージャ

RunSwift のデフォルトのコードはクロージャがばりばり使ってあるので、クロージャを理解してないと難しいです。

Swiftでは中括弧{}で囲まれたコードブロックは事実上全てクロージャとなる。 このとき、引数・戻り値と、本体の処理の間に「in」を書くことで、この2つの部分を区別する。

なるほどなー。Ruby での { |b1, b2| some_code } が、Swift の場合 { b1, b2 in some_code } になるのですね。

インラインのclosureは引数名すら省略可能。
その場合は$0、$1、$2・・・と先頭の引数から順にアクセスできる。

おおお、さらにクロージャは引数名も省略できて、$0, $1, $2 でアクセスできると…。なるほど…。これで、謎は半分以上解けました。

Swift の filter, reduce

filter, reduce については、以下あたりが参考になります。

Swift: filter、map、reduce を使う – Sarabande.jp
いい豆作ろう -GOOD BEANS-: [Swift, iOS]Swiftのmapとreduceについて書いてみた

filter は Ruby でいうところの select, reduce は inject みたいなものでしょう。filter は渡されたブロックが真を返す要素のみ抽出する。reduce は初期値をブロックの評価値で上書きしていく。

let sum の右辺部分は、Ruby で書くと以下のような感じかと思います。

型情報の指定以外は、Swift と Ruby は結構似たような感じで書けるみたい。以上簡単ですが、Swift に少しだけ入門してみた。以前ちょっとだけ勉強して挫折してしまった Objective-C に比べると、Swift の文法は読みやすいシンタックスだと感じます。この言語ならモチベーションを保って学習できそう。

スポンサーリンク
 
スポンサーリンク

Leave Your Message!