SlideShare a Scribd company logo
1 of 22
Download to read offline
Getting started functional programming?
Swift
Yuichi Yoshida
Chief engineer, DENSO IT Laboratory, Inc.
#yidev
@sonson_twit
© 2014YuichiYoshida, All rights reserved. Redistribution or public display not permitted without written permission from YuichiYoshida.
Swiftで多層型で戻り値を返すことの是非と雑談
自己紹介
2tchの中の人
• iOS好きです
• 2tch(2ちゃんねるビューア)
• iOS SDK Hacksなど
• 研究・開発
• コンピュータビジョン
• 機械学習
• 画像検索サービスとか
• 車向けサービスやハードウェアとか
今日のお話
• 2ちゃんねるアプリに対するAppleとGoogleの反応か
ら見る審査の傾向
• Swiftでfunctional programmingっぽいことを始めた
1ヶ月以上の審査はなんだったのか
• 基本Hなのはいけないと思います
• 下品なのはいけないと思います
• 口汚いのはいけないと思います
• 個人(公人)への悪口はいけないと思います
• リンクもいけないと思います
• 下品なAAもいけないと思います
2ch, むしろインターネット全否定
弱り目にたたり目
• AdMob(Google)からもリジェクト
• 2tch,下ネタとか多いから排除するわ
• むしろ,Appleより厳しい状況だった
もうだめぽ
• アメリカの人は2chが生理的に受け付けないっぽい
• もしかすると広告方面からの圧力?
• Androidでも2ちゃん関係のアプリが落ちたとか?
• 類推できるけど,もう不毛なので・・・
ææææææ æ æ æ æ æ æ øÇÇ * * ]
ææ æ *, +┬gÕgÇ,]ææ æ Ü^*Ç*Ç*Ç*Ç*,ø%ø
,ææ -æ æ z z ,z;”;Çæ]]l-›æt|‹ z
ææ j,æææ l l jæ››ydflミ”* *Ü≪8jdÕgææææææもういい·«
æ‹–,ææ ßÄ*¢ÇÄ,j´¤g—zpé|p〉〉¡こjレ%
-æ æ À–--z ¢Ç–lêz z-zy王王王王{¢Ç
zæææ æ レ§z j§“冫 j J]* * *é* * * *]Åö‰øææææもう·
–æææ ]]zŸJz┴Õé–>%Õ—二三シ´››
æ*“*‹æ ,{二二二二二二二二二l–,æ – ›æææ休めっ·«
j-æz¢Ç,‹´›ææææææææ æ æ zz,æレ%´ŒÀ–
ææzzæ æ æ Ç›æææææ æ æ æ zz, -æææ æ 8z
ææzzæz,j jº ,zi z–'æææææææææ zj-ææ æ æ -ææ休めっ·«
ææzzæ^´'S%Hæææææææææææ-+─æææ*ê,z
ææzzææ æ œææææææææ æ -+─æææ- –zæææqmlqmlっ·«
ææzzæ p¤+º;っÀ–*,++p+─ %% ´ŒÀ–ææ -ææ {
ææzz,æy三二æ æ zæ│æææææææææ -ææ -
ææzz,æ —˛++一%^Ÿ“æææææ æ ]*, く æ ノz
ってみんなに言われた
reddift
Swift Reddit API Wrapper
reddift
Swift Reddit API Wrapper
• 1億人以上のアメリカのSNS
• APIあり
• Objective-CのAPI Wrapperはあり
• OAuth2に対応してない
• Swiftじゃない
• よし,いっちょ,勉強がてら作るか!
• MIT License
https://github.com/sonsongithub/reddift
OAuth2ベース
Don’t pass your password to anyone.
• OAuth周りのコードも同梱
• 岸川さんのKeychainAccessで管理
• 複数アカウントも対応
Swift impression
Optional sucks?
• Optionalに耐えられない
• Storyboardと相性が悪過ぎる
• というかUIベースのコードと相性悪すぎ
• コードがif let hoge = hoge{}であふれる
• エラー処理と戻り値
• 処理がネストして汚い
Slackにて
Getting started functional programming
• 岸川大先生より
• Efficient JSON in Swift with Functional Concepts and Generics
を読め
• Functional programmingベースのコードを書け
• くっそきたないコード書いてんじゃねーよ!!!

• と言われなかったけど,勉強のポインタを教えてもらった
• 早速,勉強を始めてみた
よくあるコード?
func linkList(
paginator:Paginator?,
sortingType:ListingSortType,
subreddit:Subreddit?,
completion:(
links:[Link],
paginator:Paginator?,
error:NSError?
)->Void) -> NSURLSessionDataTask
ダウンロード後のコールバックをブロックで渡す
書き方もありますが
func linkList(paginator:Paginator?, sortingType:ListingSortType, subreddit:Subreddit?, completion:(links:[Link], paginator:Paginator?, error:NSError?)->Void)
-> NSURLSessionDataTask {
var parameter:[String:String] = [:]
if let paginator = paginator {
if paginator.sortingType == sortingType {
parameter = paginator.parameters()
}
}
var path = sortingType.path()
if let subreddit = subreddit {
path = "/r/(subreddit.display_name)(path)"
}
var URLRequest = NSMutableURLRequest.mutableOAuthRequestWithBaseURL(baseURL, path:path, parameter:parameter, method:"GET", token:token)
let task = URLSession.dataTaskWithRequest(URLRequest, completionHandler: { (data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in
self.updateRateLimitWithURLResponse(response)
if error != nil {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(links:[], paginator: nil, error: error)
})
}
else {
if let json:[String:AnyObject] = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.allZeros, error: nil) as?
[String:AnyObject] {
let (links, paginator) = self.parseLinkListJSON(json)
if links.count > 0 && paginator != nil {
paginator?.sortingType = sortingType;
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(links:links, paginator:paginator, error:nil)
})
}
else {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(links:links, paginator:paginator, error:NSError.errorWithCode(0, userinfo: ["error":"Can not get any contents
expectedly."]))
})
}
}
else {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(links:[], paginator: nil, error:NSError.errorWithCode(0, userinfo: ["error":"Can not parse response object."]))
})
}
}
})
task.resume()
return task
}
エラーと戻り値がぐちゃぐちゃに
戻り値をResult<T>にする
public enum Result<A> {
case Success(Box<A>)
case Failure(NSError)
public init(value:A) {
self = .Success(Box(value))
}
public init(error: NSError) {
self = .Failure(error)
}
........
}
public final class Box<A> {
public let value: A
public init(_ value: A) {
self.value = value
}
}
正しい戻り値か,

Errorオブジェクトのどちらかになる
enum
swiftがenumに自由なオブジェクトを
放り込めないのでGenericsで逃げる
戻り値へのアクセスのイメージ
(a : Result<Hoge>) -> Void {
switch(a) {
case let .Success(x):
println(x.value)
case let .Failuare(x):
println(x.error)
}
}
戻り値がenumのSuccessに当たれば,

xが宣言されて,x.valueを使う
戻り値がenumのFailurareに当たれば,

xが宣言されて,x.valueを使う
これでswitchで中身がどんな結果でも統一して,エラーと戻り値の
ハンドリングをResult<T>できるようになる
さらにコードを綺麗にすると
infix operator >>> { associativity left precedence 150 }
public func >>><A, B>(a: Result<A>, f: A -> Result<B>) -> Result<B>
{
switch a {
case let .Success(x):
return f(x.value)
case let .Failure(error):
return .Failure(error)
}
}
Resultから値を取る演算子を定義すると,メソッドチェーンぽくもかける
コードはさらにすっきり
var request =
NSMutableURLRequest.mutableOAuthRequestWithBaseURL(Session.baseURL, path:"/api/
v1/me", method:"GET", token:token)
let task = URLSession.dataTaskWithRequest(request, completionHandler:
{ (data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in
let responseResult = resultFromOptionalError(Response(data: data,
urlResponse: response), error)
let result = responseResult >>> parseResponse >>> decodeJSON >>>
parseThing_t2_JSON
completion(result)
})
task.resume()
return task
これが果たしていいコードなのか
Result<T>は是か非か
functional programming?
• コードは短い
• いいのか
• 読めない
• 他にも書き方はある
• flatMap
• Optional
• メソッドチェーンやりはじめると,Reactとか?
• 車輪の再発明が多すぎる
• フレームワーク毎に同じようなコードが
• Haskellほど綺麗に書けないのが嫌な感じ
まとめ
• 審査について
• エロへの締めつけ
• GoogleもAppleも
• Swift
• 多相型
• Result<T>
• 演算子定義はいいのか? >>>
デンソーアイティーラボラトリでは、
         研究者,エンジニアを絶賛募集中です。
興味のある方はこちら。https://www.d-itlab.co.jp/recruit/
画像処理・機械学習・信号処理・自然言語処理など

More Related Content

What's hot

cocos2d-x で PlugAir を 使えるようにしてみた
cocos2d-x で PlugAir を 使えるようにしてみたcocos2d-x で PlugAir を 使えるようにしてみた
cocos2d-x で PlugAir を 使えるようにしてみたHideyuki TAKEI
 
よりよい UI/UX を創るためのアクセス解析
よりよい UI/UX を創るためのアクセス解析よりよい UI/UX を創るためのアクセス解析
よりよい UI/UX を創るためのアクセス解析Kentaro Ohkouchi
 
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話Shinichiro Yoshida
 
ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)
ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)
ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)Osamu Takiya
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #goconHideyuki TAKEI
 
「はじめてのNode-RED」出版記念イベント ハンズオン資料
「はじめてのNode-RED」出版記念イベント ハンズオン資料「はじめてのNode-RED」出版記念イベント ハンズオン資料
「はじめてのNode-RED」出版記念イベント ハンズオン資料Kazumi IWANAGA
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている今城 善矩
 
How to make a cutting wiring board by desktop CNC
How to make a cutting wiring board by desktop CNCHow to make a cutting wiring board by desktop CNC
How to make a cutting wiring board by desktop CNCImaoka Micihihiro
 
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidevXcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidevTomohiro Kumagai
 
カスタムNodeのススメ
カスタムNodeのススメカスタムNodeのススメ
カスタムNodeのススメKoichi Ota
 

What's hot (12)

cocos2d-x で PlugAir を 使えるようにしてみた
cocos2d-x で PlugAir を 使えるようにしてみたcocos2d-x で PlugAir を 使えるようにしてみた
cocos2d-x で PlugAir を 使えるようにしてみた
 
よりよい UI/UX を創るためのアクセス解析
よりよい UI/UX を創るためのアクセス解析よりよい UI/UX を創るためのアクセス解析
よりよい UI/UX を創るためのアクセス解析
 
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
 
ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)
ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)
ポケ森のフレンド登録が面倒だったので gem を作った話(アキバエンジニア懇親会 2018/03/01)
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #gocon
 
「はじめてのNode-RED」出版記念イベント ハンズオン資料
「はじめてのNode-RED」出版記念イベント ハンズオン資料「はじめてのNode-RED」出版記念イベント ハンズオン資料
「はじめてのNode-RED」出版記念イベント ハンズオン資料
 
Handoff from Safari
Handoff from SafariHandoff from Safari
Handoff from Safari
 
Introduction of FPGA
Introduction of FPGAIntroduction of FPGA
Introduction of FPGA
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
 
How to make a cutting wiring board by desktop CNC
How to make a cutting wiring board by desktop CNCHow to make a cutting wiring board by desktop CNC
How to make a cutting wiring board by desktop CNC
 
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidevXcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
 
カスタムNodeのススメ
カスタムNodeのススメカスタムNodeのススメ
カスタムNodeのススメ
 

Viewers also liked

CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜
CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜
CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜niwatako
 
Advanced realm in swift
Advanced realm in swiftAdvanced realm in swift
Advanced realm in swiftYusuke Kita
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するtoyship
 
iOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトiOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトShuichi Tsutsumi
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門Hiramatsu Ryosuke
 
Swift本ができるまで
Swift本ができるまでSwift本ができるまで
Swift本ができるまでyuki0211s
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったらRailsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったらYuta Okazaki
 
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方今城 善矩
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いniwatako
 
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015Rikitake Oohashi
 
AWS Lambda ハンズオン 2-Tier アーキテクチャで未来へ
AWS Lambda ハンズオン 2-Tier アーキテクチャで未来へAWS Lambda ハンズオン 2-Tier アーキテクチャで未来へ
AWS Lambda ハンズオン 2-Tier アーキテクチャで未来へAmazon Web Services Japan
 
モバイルアプリ向けAWSネイティブアーキテクチャ
モバイルアプリ向けAWSネイティブアーキテクチャモバイルアプリ向けAWSネイティブアーキテクチャ
モバイルアプリ向けAWSネイティブアーキテクチャRikitake Oohashi
 
あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?Minoru Yokomichi
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方dena_study
 

Viewers also liked (16)

CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜
CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜
CocoaPoderと賢者の宝石 〜 まだ bundle exec で消耗してるの? 〜
 
Advanced realm in swift
Advanced realm in swiftAdvanced realm in swift
Advanced realm in swift
 
OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
 
iOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトiOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクト
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門
 
Swift本ができるまで
Swift本ができるまでSwift本ができるまで
Swift本ができるまで
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったらRailsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
 
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
 
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
 
AWS Lambda ハンズオン 2-Tier アーキテクチャで未来へ
AWS Lambda ハンズオン 2-Tier アーキテクチャで未来へAWS Lambda ハンズオン 2-Tier アーキテクチャで未来へ
AWS Lambda ハンズオン 2-Tier アーキテクチャで未来へ
 
モバイルアプリ向けAWSネイティブアーキテクチャ
モバイルアプリ向けAWSネイティブアーキテクチャモバイルアプリ向けAWSネイティブアーキテクチャ
モバイルアプリ向けAWSネイティブアーキテクチャ
 
あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方
 

Similar to Swiftで多層型で戻り値を返すことの是非と雑談

OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック庸介 高橋
 
初めての Data api
初めての Data api初めての Data api
初めての Data apiYuji Takayama
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
Favtile ~never write JS again~
Favtile ~never write JS again~Favtile ~never write JS again~
Favtile ~never write JS again~hanachin
 
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourceMashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourcecmutoh
 
Movable Type 6の新機能 Data APIの活用法
Movable Type 6の新機能 Data APIの活用法Movable Type 6の新機能 Data APIの活用法
Movable Type 6の新機能 Data APIの活用法Hajime Fujimoto
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイルToru Kawamura
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Takashi EGAWA
 
Movable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech TalkMovable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech TalkYuji Takayama
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術Koichi Fujikawa
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
ハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイドハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイドLocalyticsJP
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -Yuji Takayama
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう Shuhei Iitsuka
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようShigeo Ueda
 
Data APIの背景と活用方法
Data APIの背景と活用方法Data APIの背景と活用方法
Data APIの背景と活用方法Hajime Fujimoto
 
全脳型アーキテクチュアHandout
全脳型アーキテクチュアHandout全脳型アーキテクチュアHandout
全脳型アーキテクチュアHandoutSeiji Koide
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application FrameworkLearningTech
 

Similar to Swiftで多層型で戻り値を返すことの是非と雑談 (20)

OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
Favtile ~never write JS again~
Favtile ~never write JS again~Favtile ~never write JS again~
Favtile ~never write JS again~
 
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourceMashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
 
Movable Type 6の新機能 Data APIの活用法
Movable Type 6の新機能 Data APIの活用法Movable Type 6の新機能 Data APIの活用法
Movable Type 6の新機能 Data APIの活用法
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイル
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
 
Movable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech TalkMovable Type 6 Overview - New York Perl Mongers Tech Talk
Movable Type 6 Overview - New York Perl Mongers Tech Talk
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
ハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイドハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイド
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
 
Data APIの背景と活用方法
Data APIの背景と活用方法Data APIの背景と活用方法
Data APIの背景と活用方法
 
全脳型アーキテクチュアHandout
全脳型アーキテクチュアHandout全脳型アーキテクチュアHandout
全脳型アーキテクチュアHandout
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application Framework
 

More from Yuichi Yoshida

Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Yuichi Yoshida
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Yuichi Yoshida
 
キーボードアプリとSketchのススメ
キーボードアプリとSketchのススメキーボードアプリとSketchのススメ
キーボードアプリとSketchのススメYuichi Yoshida
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with HandoffYuichi Yoshida
 
Getting started with CloudKit
Getting started with CloudKitGetting started with CloudKit
Getting started with CloudKitYuichi Yoshida
 
Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集Yuichi Yoshida
 
UIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐUIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐYuichi Yoshida
 
UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説Yuichi Yoshida
 
64bit化してみた話
64bit化してみた話64bit化してみた話
64bit化してみた話Yuichi Yoshida
 

More from Yuichi Yoshida (12)

Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt
 
キーボードアプリとSketchのススメ
キーボードアプリとSketchのススメキーボードアプリとSketchのススメ
キーボードアプリとSketchのススメ
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with Handoff
 
Getting started with CloudKit
Getting started with CloudKitGetting started with CloudKit
Getting started with CloudKit
 
Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集
 
UIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐUIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐ
 
UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説
 
64bit化してみた話
64bit化してみた話64bit化してみた話
64bit化してみた話
 
Gitのすすめ
GitのすすめGitのすすめ
Gitのすすめ
 

Swiftで多層型で戻り値を返すことの是非と雑談