Swift 2.0 大域関数の行方から #swift2symposium

Tomohiro Kumagai
Tomohiro KumagaiI Love Swift Programming Language at EasyStyle G.K.
EZ-‐‑‒NET  熊⾕谷友宏  
http://ez-‐‑‒net.jp/
Swift 2.0
2015.06.28  
@  Swift  2  (&  LLDB)  シンポジウム
⼤大域関数の⾏行行⽅方から
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
Xcode 5 徹底解説
IP Phone 音でダイヤル 音で再配達ゴッド
いつもの電卓
with 割勘ウォッチ
MOSA
Swift 2.0 で
衝撃的だった出来事
大域関数の大胆な削減
• abs
• advance
• alignof
• alignofValue
• assert
• assertionFailure
• contains
• count
• debugPrint
• debugPrintln
• distance
• dropFirst
• dropLast
• dump
• enumerate
• equal
• extend
• fatalError
• filter
• find
• first
• flatMap
• getVaList
• indices
• insert
• isEmpty
• isUniquelyRefer
enced
• isUniquelyRefer
encedNonObjC
• join
• last
• lazy
• lexicographicalC
ompare
• map
• max
• maxElement
• min
• minElement
• numericCast
• overlaps
• partition
• precondition
• preconditionFail
ure
• prefix
• print
• println
• reduce
• reflect
• removeAll
• removeAtIndex
• removeLast
• removeRange
• reverse
• sizeof
• sizeofValue
• sort
• sorted
• splice
• split
• startsWith
• stride
• strideof
• strideofValue
• suffix
• swap
• toDebugString
• toString
• transcode
• underestimateC
ount
• unsafeAddress
Of
• unsafeBitCast
• unsafeDowncast
• unsafeUnwrap
• withExtendedLif
etime
• withUnsafeMuta
blePointer
• withUnsafeMuta
blePointers
• withUnsafePoint
er
• withUnsafePoint
ers
• withVaList
• zip
Swift 1.2
• abs
• advance
• alignof
• alignofValue
• assert
• assertionFailure
• contains
• count
• debugPrint
• debugPrintln
• distance
• dropFirst
• dropLast
• dump
• enumerate
• equal
• extend
• fatalError
• filter
• find
• first
• flatMap
• getVaList
• indices
• insert
• isEmpty
• isUniquelyRefer
enced
• isUniquelyRefer
encedNonObjC
• join
• last
• lazy
• lexicographicalC
ompare
• map
• max
• maxElement
• min
• minElement
• numericCast
• overlaps
• partition
• precondition
• preconditionFail
ure
• prefix
• print
• println
• reduce
• reflect
• removeAll
• removeAtIndex
• removeLast
• removeRange
• reverse
• sizeof
• sizeofValue
• sort
• sorted
• splice
• split
• startsWith
• stride
• strideof
• strideofValue
• suffix
• swap
• toDebugString
• toString
• transcode
• underestimateC
ount
• unsafeAddress
Of
• unsafeBitCast
• unsafeDowncast
• unsafeUnwrap
• withExtendedLif
etime
• withUnsafeMuta
blePointer
• withUnsafeMuta
blePointers
• withUnsafePoint
er
• withUnsafePoint
ers
• withVaList
• zip
• anyGenerator
• readLine
Swift 2.0
#################################################################################
思ったほどは消えてない?
++
-------------------------
なぜ大胆に削除されたと感じたか
• contains
• count
• debugPrintln
• enumerate
• equal
• filter
• find
• first
• flatMap
• indices
• isEmpty
• last
• lexicographicalCompare
• map
• maxElement
• minElement
• partition
• println
• reduce
• reverse
• sorted
• startsWith
• toDebugString
• toString
• underestimateCount
削除された大域関数
Swift 2.0
削除された大域関数のすべてが
ジェネリック関数
おさらい
プロトコル
型の振る舞いを決めるもの
ジェネリック
型に縛られないプログラミング
protocol CollectionType {
typealias Element
typealias Index : ForwardIndexType
subscript(index:Index) -> Element { get }
var startIndex:Index { get }
var endIndex:Index { get }
}
プロトコル
プロトコルを定義する
これらの機能が使えることを保証
Swift 1.2
func count<T:CollectionType>(collection:T)
-> T.Index.Distance {
let start = collection.startIndex
let end = collection.endIndex
return distance(start, end)
}
ジェネリック関数
プロトコルを想定して機能をつくる
保証された機能を使ってプログラミング
Swift 1.2
機能ができたら型をつくる
struct Month {
var days:Array<Day>
init(days:Int) {
self.days = (1...days).map(Day.init)
}
}
型をつくる
データ構造を決める
Swift 1.2
extension Month : CollectionType {
subscript(index:Int) -> Day {
return self.days[index - 1]
}
var startIndex:Int {
return 1
}
var endIndex:Int {
return self.days.count + 1
}
}
型をつくる
プロトコルに基づき振る舞いを決める
Swift 1.2
機能を使う
機能を使う
ジェネリック関数を使う
let june = Month(days: 30)
// 数えられるようになっている
count(june)
Swift 1.2
struct Year : CollectionType {
:
:
}
機能を使う
新しく型を作ったときも使える
let year = Year(2015)
// 同じ関数をすぐに使える
count(year)
Swift 1.2
ジェネリックプログラミング
振る舞いに着目して組み上げるのが
ジェネリックプログラミング
得られる恩恵
▶ 型を作るときに構造に専念できる
▶ 型に備えるべき機能がプロトコルで判る
▶ 機能を共用化できる
▶ 未知の型にも対応できる
▶ 準拠するプロトコルから出来ることが判る
大域関数の削除
大域関数の削除が気になったのか
プロトコルを活かす仕組みだったから
そもそもなぜ
protocol CollectionType {
}
プロトコルと機能の実装
プロトコルを定義して
それを使った型を作る
struct Array<T> : CollectionType {


}
struct Dictionary<Key,Value> : CollectionType {

}
Swift 1.2
大域にジェネリック関数を えると
func count<T:CollectionType>(x:T)

-> T.Index.Distance
func indices<C:CollectionType>(x:C)

-> Range<C.Index>
let array = Array<Int>()
let dictionary = Dictionary<String,Int>()
count(array)
count(dictionary)
プロトコルと機能の実装
どちらの型にでも使える
Swift 1.2
気になっていたこと
Swift 1.2 で
struct Array<T> : CollectionType {
var count: Int { get }
}
両方に同じ機能がある
型にも実装されていたり
Swift 1.2
大域関数に実装されているものが
func count<T:CollectionType>(x:T)

-> T.Index.Distance
なぜ両方にあるのか
▶ 大域関数にある機能をなぜ型にも?
▶ array.count と書く方が便利だから?
let c = count(array)
let c = array.count
どちらも同じ機能
Swift 1.2
大域関数だけで良いのでは…?
Swift 1.2
むしろ大域関数が消滅
Swift 2.0
大域関数の行方
削除だけでは済まないはず
それぞれの型に固有な実装へ
汎用的な大域関数が
Swift 2.0
SequenceType
• contains
• enumerate
• filter
• flatMap
• lexicographicalCompare
• map
• maxElement
• minElement
• reduce
• reverse
• sorted
• startsWith
• underestimateCount
MutableCollectionType
• partition
CollectionType
• count
• first
• filter
• isEmpty
• last
• indexOf (find)
• indices
String
• init: (toString)
• init:reflecting: (toDebugString)
削除
• debugPrintln
• println
大域関数の行方
Swift 2.0
移動先の多くが
Protocol Extension
Protocol Extension
▶ プロトコルを拡張する機能
▶ 既定の実装を記載できる
▶ プロトコルに規定された機能で実装する
▶ 型エイリアスの種類で実装を変えられる
Swift 2.0
特徴
protocol CollectionType {
typealias Element
typealias Index : ForwardIndexType
subscript(index:Index) -> Element { get }
var startIndex:Index { get }
var endIndex:Index { get }
}
Protocol Extension
Swift 2.0
たとえば、こんなプロトコルがあったとき
extension CollectionType {
var count:Index.Distance {
return distance(self.startIndex, self.endIndex)
}
var indices:Range<Index> {
return self.startIndex ..< self.endIndex
}
}
Protocol Extension
Swift 2.0
プロトコル拡張で振る舞いから機能を実装
struct Month : CollectionType {
subscript(index:Int) -> Day {
return self.days[index - 1]
}
var startIndex:Int {
return 1
}
var endIndex:Int {
return self.days.count + 1
}
}
Protocol Extension
Swift 2.0
型では最低限の機能だけを実装すれば
let month = Month()
month.count
month.indices
Protocol Extension
Swift 2.0
プロトコル拡張で実装した機能も使える
つまり
protocol CollectionType {
typealias Element
typealias Index : ForwardIndexType
subscript(index:Index) -> Element { get }
var startIndex:Index { get }
var endIndex:Index { get }
}
Swift 1.2
// 機能は大域関数で提供
func count<T:CollectionType>(x:T) -> T.Index.Distance {
return distance(x.startIndex, x.endIndex)
}
func indices<C:CollectionType>(x:C) -> Range<C.Index> {
return x.startIndex ..< x.endIndex
}
// 振る舞いをプロトコルで規定
protocol CollectionType {
typealias Element
typealias Index : ForwardIndexType
subscript(index:Index) -> Element { get }
var startIndex:Index { get }
var endIndex:Index { get }
}
extension CollectionType {
var count:Index.Distance {
return distance(self.startIndex, self.endIndex)
}
var indices:Range<Index> {
return self.startIndex ..< self.endIndex
}
}
// 振る舞いも機能もプロトコル内に集約
Swift 2.0
嬉しいポイント
Protocol Extension
let array = Array<String>()
array.count
1. コード補完が効く
Protocol Extension
▶ 所属する機能として候補に挙がる
▶ 思考の流れどおりに書ける
extension CollectionType

where Element : IntegerType {
var total:Element {
return self.reduce(0, combine:+)
}
}
2. 条件付きで拡張できる
Protocol Extension
▶ 型エイリアスで条件を指定できる
▶ 条件を満たす型にだけ機能が追加される
let intArray = Array<Int>()
let strArray = Array<String>()
intArray.total
strArray.total
2. 条件付きで拡張できる
Protocol Extension
▶ 条件を満たす型でだけ使える
▶ それ以外の型にはそもそも存在しない
プロトコルを活かせる理想形
Protocol Extension は
Protocol Extension に
想いを馳せる日々
役割について
ジェネリック関数を置き換える機能?
Protocol Extension
〓
Protocol Extension
おさらい
▶ ジェネリック関数と同等のことができる
▶ 機能がプロトコルでグループ化される
▶ 補完機能が働くのが嬉しい
大域関数が要らなくなる?
Protocol Extension
ジェネリック関数にしかできないこと
▶ 名前空間による完全な衝突回避
衝突の可能性
▶ プロトコル自体は名前空間で回避できる
▶ 要求する機能が衝突すると回避できない
衝突について
1. プロトコル名の衝突
複数のモジュールで同じ名前なら回避可能
// JSON Module
protocol ValueType {
}
// XML Module
protocol ValueType {
}
// モジュールを明記することで回避可能
struct JSONValue : JSON.ValueType {
}
2. 機能の衝突
異なる目的を同じ定義が求めたときは衝突
protocol PNGType {
var data:NSData{get}
}
protocol JPEGType {
var data:NSData{get}
}
struct Picture : PNGType, JPEGType {
// どちらの data を期待している?
var data:NSData {
}
}
プロトコル名での区別ができない
2. 機能の衝突
機能名を具体的なものにして衝突を回避する方法
protocol PNGType {
var pngData:NSData
{get}
}
protocol JPEGType {
var jpegData:NSData
{get}
}
struct Picture : PNGType, JPEGType {
// もし名前が衝突しても同じ目的の可能性が高い
var jpegData:NSData {
}
}
名前が長くなりすぎないようには心掛けたい
2. 機能の衝突
オーバーロードで衝突を回避する方法
protocol PNGType {
var data:PNGData
{get}
}
protocol JPEGType {
var data:JPEGData
{get}
}
struct Picture : PNGType, JPEGType {
// 戻り値が違えば別物として存在できる
var data:PNGData { return … }
var data:JPEGData { return … }
}
独自の型を使えばほぼ衝突は回避できる
struct Picture : ProtoA, ProtoB {
3. 型エイリアスの衝突
同名の型エイリアスが異なる型を期待すると衝突
protocol ProtoA {
typealias Element
:
protocol ProtoB {
typealias Element
:
でも具体例が思いつかない…!
衝突は案外、心配なさそう
積極的に活用して行くのが良さそう
Protocol Extension は
そもそもの extension について
カテゴリ拡張は避けられていた感
Objective-C の頃は
クラスに後から独自のメソッドを追加する機能
【カテゴリ拡張】
不安を感じない気がする
Swift だと extension を使うことに
▶ Objective-C はクラス継承が主体で

影響範囲が広すぎたから…?
▶ プロトコルの継承が主体で

拡張するにも動機が明確だから…?
extension の使いどころについて
Protocol Extension
使いどころの判断基準
▶ 大域関数の代わりとして積極的に活用?
▶ 演算子の実装を除くすべて?
▶ 既存のプロトコルも積極的に拡張?
普通の書き方として使っていくべき?
Any や AnyObject は拡張できない
任意の型やオブジェクトに対する
機能の実装には大域関数が必要
Protocol Extension
拡張できないプロトコルも存在する
( Non-nominal type cannot be extended )
Protocol Extension
Swift 2.0 の標準機能は大域関数も存在する
▶ なぜ大域関数として残されているのか
▶ Protocol Extension だけでは問題なのか?
func abs<T:SignedNumberType>(x:T) -> T
func advance<T:ForwardIndexType>
(start:T, _ n:T.Distance) -> T
なにか理由があるのだろうか
Protocol Extension
存在理由が分かる気がする大域関数
▶ stride は気持ちが分かる気がする
▶ Strideable を操作するのではなく

値を使って Stride 型を得ることが目的
▶ 実際 Protocol Extension されていない
func stride<T:Strideable>(from start:T,
through end:T, by stride:T.Stride) ->
StrideThrough<T>
Protocol Extension
存在理由がよくわからない大域関数
▶ Protocol Extension だけで十分そう
▶ 深い事情で残されているわけではない?
▶ それとも inout が何か を握っている?
func removeAll
<C:RangeReplaceableCollectionType>
(inout x:C, keepCapacity:Bool = default)
まとめ
Swift 2.0 大域関数の行方から
▶ 大域関数の大胆な削減
✴ 大域関数は Protocol Extension へ
▶ Protocol Extension の気になるところ
✴ 名前の衝突は心配要らなそう?
✴ 既存プロトコルも積極的に拡張できそう?
▶ Protocol Extension の使いどころ
✴ 大域関数を置き換える機能?
✴ 大域関数は標準ライブラリに残っている
✴ 使い分けのポイントがあるのだろうか
1 of 73

Recommended

GoF デザインパターン 2009 by
GoF デザインパターン 2009GoF デザインパターン 2009
GoF デザインパターン 2009miwarin
415 views42 slides
Swift 2 (& lldb) シンポジウム by
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
6.7K views28 slides
Swift 2.0 で変わったところ「後編」 #cswift by
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
18.2K views102 slides
リテラルと型の話 #__swift__ by
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__Tomohiro Kumagai
5K views89 slides
Deep dive into oss written in swift by
Deep dive into oss written in swiftDeep dive into oss written in swift
Deep dive into oss written in swiftYuki Asai
3.7K views34 slides
可変値変数 var を極力避けることを模索するための事前知識 #cswift by
可変値変数 var を極力避けることを模索するための事前知識 #cswift可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswiftTomohiro Kumagai
4.1K views42 slides

More Related Content

What's hot

ジェネリック関数の呼び出され方 #cocoa_kansai by
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiTomohiro Kumagai
1.3K views111 slides
Swift の可変値と不変値 #cocoa_kansai by
Swift の可変値と不変値 #cocoa_kansaiSwift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansaiTomohiro Kumagai
3.5K views80 slides
プロトコル指向 - 夢と現実の狭間 #cswift by
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftTomohiro Kumagai
3.5K views88 slides
Swift 2.0 の Error Handling #yhios by
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosTomohiro Kumagai
6.8K views106 slides
Swift らしい表現を目指そう #eventdots by
Swift らしい表現を目指そう #eventdotsSwift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdotsTomohiro Kumagai
9.1K views56 slides
知って得するC# by
知って得するC#知って得するC#
知って得するC#Shota Baba
9.7K views50 slides

What's hot(20)

ジェネリック関数の呼び出され方 #cocoa_kansai by Tomohiro Kumagai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai1.3K views
Swift の可変値と不変値 #cocoa_kansai by Tomohiro Kumagai
Swift の可変値と不変値 #cocoa_kansaiSwift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
Tomohiro Kumagai3.5K views
プロトコル指向 - 夢と現実の狭間 #cswift by Tomohiro Kumagai
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
Tomohiro Kumagai3.5K views
Swift 2.0 の Error Handling #yhios by Tomohiro Kumagai
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai6.8K views
Swift らしい表現を目指そう #eventdots by Tomohiro Kumagai
Swift らしい表現を目指そう #eventdotsSwift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdots
Tomohiro Kumagai9.1K views
知って得するC# by Shota Baba
知って得するC#知って得するC#
知って得するC#
Shota Baba9.7K views
競技プログラミングのためのC++入門 by natrium11321
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321 32.9K views
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する by Yoshifumi Kawai
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai74.7K views
Lombokのススメ by なべ
LombokのススメLombokのススメ
Lombokのススメ
なべ 1.3K views
Effective modern C++ 勉強会 #3 Item 12 by Keisuke Fukuda
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
Keisuke Fukuda2.4K views
lazy var の特徴を知る #cocoa_kansai #cswift by Tomohiro Kumagai
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswift
Tomohiro Kumagai7.2K views
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap by Tomohiro Kumagai
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsapSwift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Tomohiro Kumagai2.2K views
C++ ポインタ ブートキャンプ by Kohsuke Yuasa
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa11K views
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう by Unity Technologies Japan K.K.
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai by Tomohiro Kumagai
WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansaiWWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Tomohiro Kumagai1.4K views
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京 by hecomi
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi 10.9K views

Similar to Swift 2.0 大域関数の行方から #swift2symposium

Next2Dで始めるゲーム開発 - Game Development Starting with Next2D by
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2DToshiyuki Ienaga
85 views64 slides
Let's build a simple app with .net 6 asp.net core web api, react, and elasti... by
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...Shotaro Suzuki
368 views64 slides
Replace Output Iterator and Extend Range JP by
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
1.6K views26 slides
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例 by
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
125.1K views42 slides
実践 NestJS by
実践 NestJS実践 NestJS
実践 NestJSAyumi Goto
1.2K views189 slides
scala+liftで遊ぼう by
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼうyouku
2K views31 slides

Similar to Swift 2.0 大域関数の行方から #swift2symposium(20)

Next2Dで始めるゲーム開発 - Game Development Starting with Next2D by Toshiyuki Ienaga
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga85 views
Let's build a simple app with .net 6 asp.net core web api, react, and elasti... by Shotaro Suzuki
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Shotaro Suzuki368 views
Replace Output Iterator and Extend Range JP by Akira Takahashi
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi1.6K views
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例 by Yoshifumi Kawai
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai125.1K views
実践 NestJS by Ayumi Goto
実践 NestJS実践 NestJS
実践 NestJS
Ayumi Goto1.2K views
scala+liftで遊ぼう by youku
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
youku2K views
Azure で Serverless 初心者向けタッチ&トライ by Masanobu Sato
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
Masanobu Sato2.4K views
Node.jsでつくるNode.js ミニインタープリター&コンパイラー by mganeko
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
mganeko1.3K views
怠惰なRubyistへの道 fukuoka rubykaigi01 by nagachika t
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
nagachika t865 views
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」 by fukuoka.ex
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
fukuoka.ex4.9K views
C#勉強会 ~ C#9の新機能 ~ by Fujio Kojima
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~
Fujio Kojima516 views
20171212 titech lecture_ishizaki_public by Kazuaki Ishizaki
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki959 views
クラウド時代の並列分散処理技術 by Koichi Fujikawa
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
Koichi Fujikawa3.1K views
ゼロから始めたE2Eテスト by ushiboy
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
ushiboy3.6K views
Functional JavaScript with Lo-Dash.js by Shogo Sensui
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui2.1K views
C++0x in programming competition by yak1ex
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
yak1ex1.8K views
Xcode 6の新機能 by Shingo Sato
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
Shingo Sato29.7K views

More from Tomohiro Kumagai

Swift 所有権 要諦 #ゆるちとせ by
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせTomohiro Kumagai
45 views32 slides
_Function Builders in Swift #love_swift by
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swiftTomohiro Kumagai
709 views68 slides
Property Wrappers の特徴を眺める #swiftzoomin by
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominTomohiro Kumagai
782 views28 slides
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料 by
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料Tomohiro Kumagai
451 views39 slides
みんなで Swift 復習会
GO! in 札幌 – 10th′′ by
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′Tomohiro Kumagai
338 views37 slides
イニシャライザー Part 2.5 #hakataswift by
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftTomohiro Kumagai
560 views43 slides

More from Tomohiro Kumagai(20)

Swift 所有権 要諦 #ゆるちとせ by Tomohiro Kumagai
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせ
Tomohiro Kumagai45 views
_Function Builders in Swift #love_swift by Tomohiro Kumagai
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift
Tomohiro Kumagai709 views
Property Wrappers の特徴を眺める #swiftzoomin by Tomohiro Kumagai
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoomin
Tomohiro Kumagai782 views
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料 by Tomohiro Kumagai
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
Tomohiro Kumagai451 views
みんなで Swift 復習会
GO! in 札幌 – 10th′′ by Tomohiro Kumagai
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′
Tomohiro Kumagai338 views
イニシャライザー Part 2.5 #hakataswift by Tomohiro Kumagai
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswift
Tomohiro Kumagai560 views
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ by Tomohiro Kumagai
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
Tomohiro Kumagai611 views
Swift クラスのイニシャライザー #devsap by Tomohiro Kumagai
Swift クラスのイニシャライザー #devsapSwift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsap
Tomohiro Kumagai406 views
iOSCon 2019 in London #ioscon #love_swift by Tomohiro Kumagai
iOSCon 2019 in London #ioscon #love_swiftiOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swift
Tomohiro Kumagai406 views
もくもく執筆会 #技術同人誌再販Night by Tomohiro Kumagai
もくもく執筆会 #技術同人誌再販Nightもくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Night
Tomohiro Kumagai383 views
みんなで Swift 復習会 GO! in 岩手 – 9th′ by Tomohiro Kumagai
みんなで Swift 復習会 GO! in 岩手 – 9th′みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′
Tomohiro Kumagai493 views
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift by Tomohiro Kumagai
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftmacOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
Tomohiro Kumagai677 views
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift by Tomohiro Kumagai
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftみんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
Tomohiro Kumagai411 views
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon by Tomohiro Kumagai
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #iosconGetting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Tomohiro Kumagai784 views
みんなで Swift 復習会
GO! in 京都 – 6th′ by Tomohiro Kumagai
みんなで Swift 復習会
GO! in 京都 – 6th′みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′
Tomohiro Kumagai423 views
みんなで Swift 復習会 GO! in 福岡 – 5th′ by Tomohiro Kumagai
みんなで Swift 復習会 GO! in 福岡 – 5th′みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′
Tomohiro Kumagai416 views
勉強会の東京外開催の気持ち #yuru_bounen2017 by Tomohiro Kumagai
勉強会の東京外開催の気持ち #yuru_bounen2017勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017
Tomohiro Kumagai645 views
みんなで Swift 復習会 GO! in 福岡・発表資料 by Tomohiro Kumagai
みんなで Swift 復習会 GO! in 福岡・発表資料みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料
Tomohiro Kumagai617 views
Protocol-Oriented Integers に想うジェネリックプログラミングの未来 by Tomohiro Kumagai
Protocol-Oriented Integers に想うジェネリックプログラミングの未来Protocol-Oriented Integers に想うジェネリックプログラミングの未来
Protocol-Oriented Integers に想うジェネリックプログラミングの未来
Tomohiro Kumagai3.3K views

Recently uploaded

Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
88 views41 slides
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
18 views38 slides
さくらのひやおろし2023 by
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023法林浩之
96 views58 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
60 views26 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
58 views29 slides

Recently uploaded(11)

Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka88 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之96 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.58 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4335 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda355 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...

Swift 2.0 大域関数の行方から #swift2symposium