SlideShare a Scribd company logo
1 of 111
Download to read offline
EZ-NET 熊⾕友宏
http://ez-net.jp/
2015.09.12 @ 第 63 回 Cocoa 勉強会関⻄
呼び出され⽅を調べてみる
ジェネリック関数の
『難しい』ことだけは分かった! !
競合書、作ってます。
Xcode 5 徹底解説
VS
2014/04/28 -
Xcode 5 完全攻略
2014/02/27 -
競合書、作ってました。
Xcode 5 徹底解説
KO
2014/04/28 - 2015/08/21
Xcode 5 完全攻略
2014/02/27 -
絶
版
!
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
Xcode 5 徹底解説
IP Phone 音でダイヤル 音で再配達ゴッド
いつもの電卓
with 割勘ウォッチ
MOSA
̶ 勉強会開催 ̶
#yidev 横浜 iPhone 開発者勉強会
カジュアル Swift 勉強会 @ 青葉台
Swift 2.0 GM
Swift 2.0
▶ Protocol Extension
▶ Error Handling
▶ guard
▶ defer
▶ repeat-while
▶ pattern matching
新機能
▶ if-where
▶ for-where
▶ enum : String
▶ Type.init
▶ #available
http://www.slideshare.net/
tomohirokumagai54/swift-20-cswift
Swift 2.0
新機能
ジェネリックの活用の幅が広がった
Protocol Extension
http://www.slideshare.net/
tomohirokumagai54/wwdc21cafe
Swift 2.0
Protocol Extension
extension CollectionType
where Generator.Element : IntegerType {
var sum:Generator.Element {
return self.reduce(0, combine: +)
}
}
Protocol Extension
プロトコルに既定の実装を追加
ジェネリックで条件を指定
extension CollectionType
where Generator.Element : IntegerType {
extension CollectionType
where Generator.Element : IntegerType {
func action() -> String { return "A" }
}
extension CollectionType
where Generator.Element : BooleanType {
func action() -> String { return "B" }
}
Array<Int>
どちらの実装が採用される?
extension CollectionType
where Generator.Element : Equatable {
func action() -> String { return "A" }
}
extension CollectionType
where Generator.Element : Comparable {
func action() -> String { return "B" }
}
Array<Int>
どちらの実装が採用される?
extension CollectionType
where Generator.Element : Equatable {
func action() -> String { return "A" }
}
extension CollectionType
where Generator.Element : Hashable {
func action() -> String { return "B" }
}
Array<Int>
どちらの実装が採用される?
extension CollectionType
where Generator.Element : Comparable {
func action() -> String { return "A" }
}
extension CollectionType
where Generator.Element : ForwardIndexType {
func action() -> String { return "B" }
}
Array<Int>
どちらの実装が採用される?
Am
biguous
ジェネリックの呼び出され方
構造体と型指定
シンプルな構造体 S1
struct S1 {
}
型の直指定
func f(v:S1) {
}
func f(v:S2) {
}
// 該当なし?
どの実装が採用される?
シンプルな構造体 S1
func f(v:S1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルな構造体 S1
func f(v:S2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルな構造体 S1
オプショナル
func f(v:S1) {
}
func f(v:S1?) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
func f(v:S1) {
}
func f(v:Any?) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
func f(v:S1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
func f(v:Any) {
}
func f(v:Any?) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
※
状
況
に
よ
る
func f(v:Any) {
}
func f(v:Any?) {
}
どの実装が採用される?
構造体とオプショナル S1?
• f(Optional(s1))
• let opt = Optional(s1)
• f(opt)
• or
• f(Optional<S1>(s1))
クラス
シンプルなクラス A1
class A1 {
}
func f(v:A1) {
}
func f(v:A2) {
}
// 該当なし?
どの実装が採用される?
シンプルなクラス A1
func f(v:A1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルなクラス A1
func f(v:A2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルなクラス A1
func f(v:A1) {
}
func f(v:A1?) {
}
// 該当なし?
どの実装が採用される?
クラスとオプショナル A1?
クラス継承
クラス継承
class A1 {
}
class B1 : A1 {
}
B1
A1
func f(v:B1) {
}
func f(v:B2) {
}
// 該当なし?
どの実装が採用される?
クラス継承
B1
A1
func f(v:A1) {
}
func f(v:A2) {
}
// 該当なし?
どの実装が採用される?
クラス継承
B1
A1
func f(v:A1) {
}
func f(v:B1) {
}
// 該当なし?
どの実装が採用される?
クラス継承
B1
A1
クラスを親で扱うとき
let v:A1 = B1()
クラスを親で扱うとき
B1
A1
func f(v:A1) {
}
func f(v:A2) {
}
// 該当なし?
どの実装が採用される?
クラスを親で扱うとき
B1
A1
func f(v:B1) {
}
func f(v:B2) {
}
// 該当なし?
どの実装が採用される?
クラスを親で扱うとき
B1
A1
func f(v:A1) {
}
func f(v:B1) {
}
// 該当なし?
どの実装が採用される?
クラスを親で扱うとき
B1
A1
型指定とジェネリック指定
基本的なジェネリック
func f(v:Any) {
}
型直指定で Any
おさらい S1
func f(v:Any) {
}
型直指定で Any
型指定とジェネリック S1
func f<T>(v:T) {
}
func f<T:Any>(v:T) {
}
func f(v:Any) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
型指定とジェネリック S1
func f<T==S1>(v:T) {
}
// 該当なし?
どの実装が採用される?
型指定とジェネリック S1
そ
も
そ
も
NG
プロトコル
構造体とプロトコル
protocol P1 {
}
struct S1 : P1 {
}
S1
P1
プロトコルを型で扱う
func f(v:P1) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f(v:P1) {
}
func f(v:S1) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f(v:P1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f(v:P2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
プロトコルをジェネリックで扱う
func f<T:P1>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
func f(v:S1) {
}
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
func f(v:P1) {
}
どの実装が採用される?
プロトコルを型で指定
S1
P1
複数のプロトコル
複数のプロトコル
protocol P1 {
}
protocol P2 {
}
struct S1 : P1, P2 {
}
S1
P1
P2
func f(v:P1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f(v:P2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f(v:P1) {
}
func f(v:P2) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
Am
biguous
func f(v:P1) {
}
func f(v:P2) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
• f(s1 as P1)
• f(s1 as P2)
ジェネリックで複数プロトコル
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
Am
biguous
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
どの実装が採用される?
複数のプロトコル
• f(s1 as P1)
• f(s1 as P2)
?
S1
P1
P2
こ
う
な
ら
な
い
!
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
どの実装が採用される?
複数のプロトコル
• f(s1 as P2)
• f(s1 as P1)
S1
P1
P2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
プロトコル継承
プロトコル継承
protocol P1 {
}
protocol Q2 {
}
protocol P2 : Q2 {
}
struct S1 : P1, P2 {
}
S1
P1
P2
Q2
ジェネリックで継承を扱う
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
Am
biguous
func f<T:Q2>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:Q2>(v:T) {
}
func f<T:P2>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:P1>(v:T) {
}
func f<T:Q2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
Am
biguous
じゃあ
クラスではどうなるのか …!
プロトコル継承
protocol P1
protocol P2 : Q2
protocol Q2
protocol R1 : Q2
class C1 : C2, P1, P2
class C2 : P1, R1
C1
P1
P2
Q2C2
P1
R1
Q2
クラス継承かつプロトコル継承
間に合いませんでした !
じゃあ
複数引数ではどうなるのか …!
複数引数の場合
間に合いませんでした ! !
ひとつだけ
func f<A>(v1:A, v2:A) {
}
func f<A, B>(v1:A, v2:B) {
}
// 該当なし?
どの実装が採用される?
複数条件での制約
P1
P1
v1
v2
じゃあ
プロトコル制約はどうなるのか …!
func f<T:CollectionType
where Generator.Element:IntegerType>(v:T) {
}
func f<T:CollectionType
where Generator.Element:BooleanType>(v:T) {
}
プロトコル制約
想定する型の条件をプロトコルで指定
where によるプロトコル制約
間に合いませんでした !!!
じゃあ
複数の制約はどうなるのか …!
func f<T:CollectionType, U:Any
where Generator.Element:ForwardIndexType,
Generator:Element:Comparable>
Generator:Element == U>(v:T, w:U) {
}
プロトコル制約
想定する型の条件を複数指定
複数条件でのプロトコル制約
間に合いませんでした !!!!
ひとつだけ
プロトコルが子を内包
protocol P1
protocol P {
typealias PA
typealias PB
var v1:PA {get}
var v2:PB {get}
}
P
PB
PA
class C1 : P1
class Base : P {
var v1:C1
var v2:C1
}
func f<T:P1, U:P1>(v1:T, v2:U) {
}
func f<T:Any, U:Any>(v1:T, v2:U) {
}
// 該当なし?
どの実装が採用される?
複数条件での制約
P1
P1
v1
v2
func f<T:P1, U:P1>(v1:T, v2:U) {
}
func f<T:Any, U:Any>(v1:T, v2:U) {
}
// 該当なし?
どの実装が採用される?
複数条件での制約
Q1
P1
P1
v1
v2
func f<T:P
where T.PA:P1, T.PB:P1>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での制約 Base
P1
P1 PA
PB
P
func f<T:P
where T.PA:P1, T.PB:P1>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での制約 Base
Q1
P1
P1
PA
PB
P
func f<T:P
where T.PA == T.PB>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での制約 Base
P1
P1 PA
PB
P
func f<T:P where T.PA:P1, T.PB:P1,
T.PA == T.PB>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での制約 Base
Q1
P1
P1
PA
PB
P
じゃあ
プロトコル拡張はどうなるのか …!
extension CollectionType
where Generator.Element : IntegerType {
var sum:Generator.Element {
return self.reduce(0, combine: +)
}
}
プロトコル拡張
プロトコルに既定の実装を追加
プロトコル拡張
間に合いませんでした !!!!!
とにかく
混沌としている世界
構造体
クラス
クラス継承 プロトコル
プロトコ
ル継承
型の直指定
複数プロ
トコル
クラス継承
とプロトコル
ジェネリッ
クでの指定
型で縛る
プロトコ
ル拡張
型の拡張
統べるのは
至難の業かもしれない
to be continued

More Related Content

What's hot

可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswiftTomohiro Kumagai
 
final int をFINAL しやがれ!
final int をFINAL しやがれ!final int をFINAL しやがれ!
final int をFINAL しやがれ!Keiichi Nagaoka
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGParsfumokmm
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Mitsuru Kariya
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftTomohiro Kumagai
 
Lombokのススメ
LombokのススメLombokのススメ
Lombokのススメなべ
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36Tatsuki SHIMIZU
 
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」Mr. Vengineer
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Uehara Junji
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
Swift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめSwift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめKen Toriumi
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいShigeru UCHIYAMA
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 

What's hot (20)

可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
 
final int をFINAL しやがれ!
final int をFINAL しやがれ!final int をFINAL しやがれ!
final int をFINAL しやがれ!
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGPars
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswift
 
Lombokのススメ
LombokのススメLombokのススメ
Lombokのススメ
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Em synchrony について
Em synchrony についてEm synchrony について
Em synchrony について
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Swift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめSwift 2.0 変更点(だいたい)まとめ
Swift 2.0 変更点(だいたい)まとめ
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 

Similar to ジェネリック関数の呼び出され方 #cocoa_kansai

Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェアEmacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェアMasaharu IWAI
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」直久 住川
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208atmiya
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話bleis tift
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6Kentaro Ebisawa
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Yuichi Sakuraba
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10Kenta Hattori
 
2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウ
2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウ2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウ
2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウShuichi Ohkubo
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAPolyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAryos36
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプトbsdhack
 
The Why and How of Java8 at LINE Fukuoka
The Why and How of Java8 at LINE FukuokaThe Why and How of Java8 at LINE Fukuoka
The Why and How of Java8 at LINE FukuokaYouhei Nitta
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
iOSアプリケーションの Unit Test
iOSアプリケーションの Unit TestiOSアプリケーションの Unit Test
iOSアプリケーションの Unit TestKatsumi Kishikawa
 
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafeプロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafeTomohiro Kumagai
 
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々Peinan ZHANG
 

Similar to ジェネリック関数の呼び出され方 #cocoa_kansai (20)

Coqでsprintf
CoqでsprintfCoqでsprintf
Coqでsprintf
 
Coqでsprintf
CoqでsprintfCoqでsprintf
Coqでsprintf
 
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェアEmacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
Emacsでの翻訳 - Emacsで訳す、gettextで国際化されたソフトウェア
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208a
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10
 
2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウ
2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウ2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウ
2016.11.29 InternetWeek マルチベンダ環境におけるEVPN構築のノウハウ
 
Yaminabe fortran
Yaminabe fortranYaminabe fortran
Yaminabe fortran
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAPolyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
The Why and How of Java8 at LINE Fukuoka
The Why and How of Java8 at LINE FukuokaThe Why and How of Java8 at LINE Fukuoka
The Why and How of Java8 at LINE Fukuoka
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
iOSアプリケーションの Unit Test
iOSアプリケーションの Unit TestiOSアプリケーションの Unit Test
iOSアプリケーションの Unit Test
 
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafeプロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafe
 
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
 

More from Tomohiro Kumagai

最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_growTomohiro Kumagai
 
Swift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせTomohiro Kumagai
 
_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swiftTomohiro Kumagai
 
Property Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominTomohiro Kumagai
 
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料Tomohiro Kumagai
 
みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′Tomohiro Kumagai
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftTomohiro Kumagai
 
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラTomohiro Kumagai
 
Swift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapSwift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapTomohiro Kumagai
 
iOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swiftiOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swiftTomohiro Kumagai
 
Around the 変数 let #love_swift
Around the 変数 let #love_swiftAround the 変数 let #love_swift
Around the 変数 let #love_swiftTomohiro Kumagai
 
もくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Nightもくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販NightTomohiro Kumagai
 
みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′Tomohiro Kumagai
 
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftmacOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftTomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftみんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftTomohiro Kumagai
 
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
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 #iosconTomohiro Kumagai
 
みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′Tomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′Tomohiro Kumagai
 
勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017Tomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料Tomohiro Kumagai
 

More from Tomohiro Kumagai (20)

最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
 
Swift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせ
 
_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift
 
Property Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoomin
 
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
 
みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswift
 
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
 
Swift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapSwift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsap
 
iOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swiftiOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swift
 
Around the 変数 let #love_swift
Around the 変数 let #love_swiftAround the 変数 let #love_swift
Around the 変数 let #love_swift
 
もくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Nightもくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Night
 
みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′
 
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftmacOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
 
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftみんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
 
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
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
 
みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′
 
みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′
 
勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017
 
みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料
 

ジェネリック関数の呼び出され方 #cocoa_kansai