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

1,705 views
1,615 views

Published on

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

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,705
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
2
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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/

×