Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介

2,108 views

Published on

第2回Swift勉強会 in TechBuzz http://atnd.org/events/51944 で発表した資料です。
ExSwift, Pythonic.Swift, Dollar.swift, __.swiftとSpecライクにテストが書けるQuickの紹介です。

Published in: Technology
  • Be the first to comment

LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介

  1. 1. LLプログラマ向けExtensionsと   テストライブラリ  Quickの紹介 第2回  Swi2  勉強会  in  TechBuzz     KitchHike,  Inc.  藤崎祥見   2014/07/18
  2. 2. 自己紹介 •  藤崎祥見(フジサキ ショウケン)   •  KitchHike,  Inc.  代表取締役  Co-­‐CEO     •  普段はRuby  on  Railsで開発しています。   •  MongoDB  JP  副代表     gihyo.jpで「MongoDBでゆるふわDB体験」を連載     •  TwiQer:  @syokenz,  Qiita:  syokenz   •  www.facebook.com/fujisaki.shoken   •  Swi2経験:  2泊3日の開発合宿で麻雀の捨て牌候補を表示す るアプリ作成
  3. 3. What is KitchHike 現地人とコミュニケーションを取りたい旅行者が、 料理を作ってくれる現地人の家に 遊びにいけるサービスです。 hQps://kitchhike.com/
  4. 4. LLプログラマが幸せになれるそうな   Swi2  Extensionsの紹介 •  Extensionsとは   •  ExSwi2   •  Pythonic.swi2   •  Dollar.swi2  と  __.swi2   •  RubySwi2   •  おまけ:  テストフレームワークQuick  
  5. 5. Extensionsとは •  Swi2の標準クラスを拡張できる仕組み   •  ObjecYve-­‐Cでは拡張カテゴリと呼ばれていたもの   extension Array {! func each(f: (Element) -> ()) {! for e in self {! f(e)! }! }! }! ! Extensions  サンプルコード:  Arrayにeachを実装する > [1,2,3].each { println($0) }! => 1! => 2! => 3
  6. 6. ExSwi2 •  hQps://github.com/pNre/ExSwi2   •  JavaScript  (Lo-­‐Dash,  Underscore)  &  Rubyにインスパイア   •  Swi2クラス拡張タイプ   •  ファーストコミット  2014/06/04(WWDCの次の日)   •  仕事早すぎぃ!   356 let array = [5, 1, 0, 10]! array.each { item in println(item) }! ! var items = Int[]()! (0..2).each { items.append($0) }! ! let dic = ["A": 1, "B": 2, "C": 3]! dic.each { key, value in println(key, value) }! dic.has(“A”)! ! let dic = [ "A": 1, "B": 2, "C": 3 ]! let mapped = dic.map(mapFunction: { return ($0 + "!", $1 + 1) })! println(mapped) ExSwi2  サンプルコード
  7. 7. Pythonic.Swi2 •  hQps://github.com/pracYcalswi2/Pythonic.swi2   •  Python   •  Swi2クラス拡張タイプ   •  タブとは何だったのか?   227 if re.search("^foo", "foobar") {! println(["foo", "bar", "zonk"].index("foo")) // 0! println(["foo", "bar", "zonk"].count("bar")) // 1! println(["foo", "bar", "zonk"].count("zoo")) // 0! }! ! if any(["foo", "bar", "zonk"]) {! println(chr(ord("a"))) // a! }! ! var greeting = " hello pythonista "! if greeting.strip().startswith("hello") {! println(greeting.strip().title()) // Hello Pythonista! } Pyhonic.Swi2  サンプルコード
  8. 8. •  hQps://github.com/ankurp/Dollar.swi2   •  Lo-­‐Dash  or  Underscoreにインスパイア   •  独自クラス(なので厳密にはExtensionsでは無い)   •  同じプロジェクト内にCentというSwi2拡張タイプもある   •  みんなの$が大好き     •  hQps://github.com/lotz84/__.swi2   •  Underscore.jsのクローン   •  独自クラス(なので厳密にはExtensionsでは無い)   •  _(アンダースコア)は2つ   __.swi2 55 1,022 Dollar.swi2
  9. 9. $.at(["ant", "bat", "cat", "dog", "egg"], indexes: 0, 2, 4)! => ["ant", "cat", "egg”]! ! $.contains([1, 2, 3, 1, 2, 3], value: 2) ! => True! $.range(0, endVal: 20, incrementBy: 5) ! => [0, 5, 10, 15]! ! let fun = $.bind({ (names: String...) -> String in! let people = $.join(names, separator: " from ")! return "Hello (people)"! }, "Ankur", "Swift")! $.times(2, function: fun) as String[] ! => ["Hello Ankur from Swift", "Hello Ankur from Swift"]! Dollar.Swi2  サンプルコード
  10. 10. RubySwi2 •  hQps://github.com/Appletone/RubySwi2   •  Ruby   •  ファーストコミット  2014/07/16  メソッド少なすぎぃ!   •  とりあえずStarした   1 5.times {! println("Hey! You look really like Ruby")! }! ! 5.upto(10) {! println($0)! }! ! "HELLO".capitalized() ! => Hello RubySwi2  サンプルコード
  11. 11. Quick •  hQps://github.com/Quick/Quick   •  Specライクなテストフレームワーク   •  実際に使った。幸せになれた。ドキュメントも充実している。   705 import Quick! import Nimble! ! class DolphinSpec: QuickSpec {! override func spec() {! it("is friendly") {! expect(Dolphin().isFriendly).to.beTrue()! }! ! it("is smart") {! expect(Dolphin().isSmart).to.beTrue()! }! }! } Quick  サンプルコード
  12. 12. まとめとTIPS •  プロジェクトにファイルを置くだけ手軽に導入できる   •  Ruby使っている人にはQuickおすすめ   o  Spec!  Spec!   •  プロジェクトで導入するには、バージョンを固定するのが吉   o  仕様変更もたびたびあるので下手にUpdateすると動かなくなる   •  必要な部分だけつまんで導入するのもあり   o  リポジトリのソースを参考に自分で書くのもあり   •  他のExtensionsとのコンフリクトに注意!   o  Arrayクラスはだいたい拡張されている
  13. 13. https://kitchhike.com/

×