Swiftの動向とアツさを追う try! Swift参加レポート

try! Swift 1日目 参加レポート

この記事を読むのに必要な時間:およそ 3 分

Daniel Steinbergさん「文化を調和させる」

Swiftでアプリケーションを書くということはObjective-Cで書かれたアプリケーションをただSwiftに書き換えるだけでなく,Swiftの特徴や哲学を受け入れる必要があります。Daniel Steinbergさん@dimsumthinkingの講演では,標準的なMVCで構成されたテーブルビューを使用したアプリケーションをSwiftに書き換えるところから始まり,よりSwiftらしいコードにするために,関数型プログラミング,オブジェクト指向プログラミング,デザインパターン,プロトコル指向プログラミングの考え方を適用していきました。

画像

まずはいつものMVCから

例として取り上げたのは,UITableViewを用いてトランプゲームを実装するというものでした。 iOSではおなじみの方法,

  • Hand(Model)
  • TableView(View)
  • HandVC(ViewController)

をUITableViewDelegateとUITableViewDataSourceを用いて,Object-Oriented Programming(以下OOP)で実装していきました。よく取り上げられるように,それぞれがFatなMVCモデルのできあがりです。

FPとPOPを取り入れる

ここからのアプローチとして重要なことは細かく役割を分けていくことで,具体的な書き換えが必要となる部分をできるだけ少なくしていくことです。

徐々にFunctional Programming(以下FP)とProtocol-Oriented Programming(以下POP)を取り入れていき,Swiftyなコードに書き換えていきます。ModelであるHandをclassからstructに書き換えて,FPの要素を取り入れます。オブジェクトはimmutableに,自身のコピーを生成して値を加工していくなどのアプローチです。 例としては以下のようなものです。

private func insertCard(card: Card, atIndex index: Int) -> Hand {
    var mutableCards = cards
    mutableCards.insert(card, atIndex: index)
    return Hand(deck: deck, cards: mutableCards)
}

また,DataTypeというProtocolを定義します。DataTypeはカードの数やSelfを戻り値としたデータ操作を定義したProtocolで,Handがこれを採用します。Selfを戻り値として定義することで自身を返す形となるため,先述したFPとはとても相性の良いものになります。Protocolとしての振る舞いを切り出す点において,POPの要素をここに取り入れます。

protocol DataType {
    var numberOfItems: Int{get}
    func addNewItemAtIndex(index: Int) -> Self
    func deleteItemAtIndex(index: Int) -> Self
    func moveItem(fromIndex: Int, toIndex: Int) -> Self
}

DataSourceに関しても共通化できる処理をSourceTypeというProtocolにまとめて,デフォルト実装としてSourceTypeのextensionを書きます。

こうして順を追って処理を切り出していくと,書き換えが必要のないものとして以下の3つのProtocolができあがります。

  • DataSource
  • SourceType
  • DataType

その結果,元々あったHandVCと,そして書き換えが必要なものとして上記のProtocolをそれぞれ採用した

  • Hand
  • HandDataSource
  • View

ができあがります。

HandやHandDataSourceで定義していったProtocolに応じてトランプゲームの実装をするだけなので,書き換えなくてはいけない部分というのを最小限に抑えることができます。役割も細かく分けられているため,従来のMVCのようなFatな構造にはならないという利点もあります。

OOP, FP, POPの融合について

最後にDanielさんは,⁠今までのアプローチとしてはFatなMVCがよくありました。今回説明してきたようにOOPとFPとPOPの文化をそれぞれ取り入れて融合していくことで,これまでとは違った書き方ができるようになります。OOPだけでやるとかではなく,適宜FPやPOPも取り入れてやってみてください」と述べていました。

このセッションでは,Selfを戻り値としたFPとPOPの融合の部分が特に有用に感じました。復習としてこのセッションの内容を意識してTableViewを実装してみたりしましたが,TableViewの設計だけでこんなにも考えられることがあるんだとプログラミングの楽しさを再認識しました。

終わりに

今回この記事では一日目の3つのセッションを取り上げましたが,他にもPackage Managerやアプリ開発に関する話など盛りだくさんで贅沢なイベントでした。参加した人が広い視野で楽しめるイベントだったのではないでしょうか。

海外から参加された方も多くいらっしゃったので,日本と海外の違いや英語の壁を体感できるという意味でも有意義でした。来年もまた開催されるようでしたら登壇枠で参加したい心持ちです。

最後にイベントを運営してくださったスタッフの方々,登壇者の方々,そして盛り上げてくださった参加者の方々に心から感謝し,1日目のレポートを終了させていただきます。楽しいイベントをありがとうございました。

(2日目のレポートに続きます。)

著者プロフィール

田中賢治(たなかけんじ)

杜王町(次春から東京)に住む太極拳プログラマ。iOSエンジニアで,使用言語は主にSwift。得意料理はミートソースとアップルタルト。

Sendai.swiftなどの勉強会を運営していて,iOSやSwiftの勉強会によくふらふらと出没することが多い。Swiftが出たての頃は逆引きSwiftの一部サンプルを書いていたことも。

Twitter:@ktanaka117
GitHub:ktanaka117

コメント

コメントの記入