LLプログラマ向けExtensionsと	
  
テストライブラリ	
  Quickの紹介	
第2回	
  Swi2	
  勉強会	
  in	
  TechBuzz	
  
	
  
KitchHike,	
  Inc.	
  藤崎祥見	
  
2014/07/18
自己紹介	
•  藤崎祥見(フジサキ ショウケン)	
  
•  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日の開発合宿で麻雀の捨て牌候補を表示す
るアプリ作成
What is KitchHike	
現地人とコミュニケーションを取りたい旅行者が、
料理を作ってくれる現地人の家に
遊びにいけるサービスです。
hQps://kitchhike.com/
LLプログラマが幸せになれるそうな	
  
Swi2	
  Extensionsの紹介	
•  Extensionsとは	
  
•  ExSwi2	
  
•  Pythonic.swi2	
  
•  Dollar.swi2	
  と	
  __.swi2	
  
•  RubySwi2	
  
•  おまけ:	
  テストフレームワークQuick	
  
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
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	
  サンプルコード
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	
  サンプルコード
•  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
$.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	
  サンプルコード
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	
  サンプルコード
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	
  サンプルコード
まとめとTIPS	
•  プロジェクトにファイルを置くだけ手軽に導入できる	
  
•  Ruby使っている人にはQuickおすすめ	
  
o  Spec!	
  Spec!	
  
•  プロジェクトで導入するには、バージョンを固定するのが吉	
  
o  仕様変更もたびたびあるので下手にUpdateすると動かなくなる	
  
•  必要な部分だけつまんで導入するのもあり	
  
o  リポジトリのソースを参考に自分で書くのもあり	
  
•  他のExtensionsとのコンフリクトに注意!	
  
o  Arrayクラスはだいたい拡張されている
https://kitchhike.com/

More Related Content

PDF
Git超入門
PDF
ChatOps with Hubot
PDF
Espressoじゃなくてcodaを使う理由
PDF
Goodpatchに生息するbotたち
PDF
Hubotで遊ぶ
PDF
Wakayama.rbボードの使い方
PDF
Rubyボードハンズオンテキスト
ODP
@nukokusa_botを支える技術
Git超入門
ChatOps with Hubot
Espressoじゃなくてcodaを使う理由
Goodpatchに生息するbotたち
Hubotで遊ぶ
Wakayama.rbボードの使い方
Rubyボードハンズオンテキスト
@nukokusa_botを支える技術

What's hot (20)

PDF
Gitを使ったRoute53の管理
PDF
properties, yaml, and me
KEY
hubotで快適BOT生活
PDF
WordPress on PHP7 on CentOS7 on Saraku-VPS
PDF
Kotlinの紹介
ODP
Bashのヒストリ展開を活用する
PPTX
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
PDF
PHP7をDockerで動かしたという話
PDF
Swift - Result<t>型で結果を返すのは邪道か,王道か
PPT
Git紹介
PDF
Rubyistのためのkotlin紹介
PDF
PSR-3 Logger Interfaceの紹介
PDF
Cocolumberjackの使い方 Ios lt 20140327
PDF
GR-CITRUSの紹介
PDF
Herokumeetup8 growライトニングトーク
PPTX
RubyでGUIアプリケーションを書く
PPTX
Etherpad-lite導入
PPTX
Xcodeでmrubyをステップ実行してみた
PDF
gitを使って、レポジトリの一部抽出forkしてみました
PDF
Git勉強会
Gitを使ったRoute53の管理
properties, yaml, and me
hubotで快適BOT生活
WordPress on PHP7 on CentOS7 on Saraku-VPS
Kotlinの紹介
Bashのヒストリ展開を活用する
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
PHP7をDockerで動かしたという話
Swift - Result<t>型で結果を返すのは邪道か,王道か
Git紹介
Rubyistのためのkotlin紹介
PSR-3 Logger Interfaceの紹介
Cocolumberjackの使い方 Ios lt 20140327
GR-CITRUSの紹介
Herokumeetup8 growライトニングトーク
RubyでGUIアプリケーションを書く
Etherpad-lite導入
Xcodeでmrubyをステップ実行してみた
gitを使って、レポジトリの一部抽出forkしてみました
Git勉強会
Ad

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

PPT
第5回勉強会
PPT
第4回勉強会 Groovyの文法からSpockまで
PDF
Ruby 3の型推論やってます
ODP
こんにちはGroovy
PPTX
Xtend の紹介
PDF
新しくプログラミング言語・・・Rubyでやってみた
KEY
Aizu lt tokyo_luxion
PDF
iOSビヘイビア駆動開発
PDF
JavaとRubyのすてきな関係
PDF
Scala2.8への移行
PDF
Scala2.8への移行
PPT
G*workshop sendai 20100424(v2)
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
Scalaプログラミング・マニアックス
PDF
Introduction Xtend
PDF
Swift 2.0 大域関数の行方から #swift2symposium
PDF
Software Development with Symfony
PDF
Introduction to Continuous Test Runner MakeGood
PDF
Layout analyzerでのgroovyの利用について
PPTX
TDC20111031_Groovy_Geb
第5回勉強会
第4回勉強会 Groovyの文法からSpockまで
Ruby 3の型推論やってます
こんにちはGroovy
Xtend の紹介
新しくプログラミング言語・・・Rubyでやってみた
Aizu lt tokyo_luxion
iOSビヘイビア駆動開発
JavaとRubyのすてきな関係
Scala2.8への移行
Scala2.8への移行
G*workshop sendai 20100424(v2)
Java開発の強力な相棒として今すぐ使えるGroovy
Scalaプログラミング・マニアックス
Introduction Xtend
Swift 2.0 大域関数の行方から #swift2symposium
Software Development with Symfony
Introduction to Continuous Test Runner MakeGood
Layout analyzerでのgroovyの利用について
TDC20111031_Groovy_Geb
Ad

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

  • 1. LLプログラマ向けExtensionsと   テストライブラリ  Quickの紹介 第2回  Swi2  勉強会  in  TechBuzz     KitchHike,  Inc.  藤崎祥見   2014/07/18
  • 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日の開発合宿で麻雀の捨て牌候補を表示す るアプリ作成
  • 4. LLプログラマが幸せになれるそうな   Swi2  Extensionsの紹介 •  Extensionsとは   •  ExSwi2   •  Pythonic.swi2   •  Dollar.swi2  と  __.swi2   •  RubySwi2   •  おまけ:  テストフレームワークQuick  
  • 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. 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. 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. •  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. $.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. 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. 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. まとめとTIPS •  プロジェクトにファイルを置くだけ手軽に導入できる   •  Ruby使っている人にはQuickおすすめ   o  Spec!  Spec!   •  プロジェクトで導入するには、バージョンを固定するのが吉   o  仕様変更もたびたびあるので下手にUpdateすると動かなくなる   •  必要な部分だけつまんで導入するのもあり   o  リポジトリのソースを参考に自分で書くのもあり   •  他のExtensionsとのコンフリクトに注意!   o  Arrayクラスはだいたい拡張されている