SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Swiftのメソッドに関す
る引数の仕様について
株式会社キュリオシティソフトウェア
今城善矩(@yimajo)
potatotips #12
Xcode6.1
まず最初に
好きですSwift
*こう書いておくとSwiftをdisってると思われるはずがない
Swiftのメソッドには
キーワード引数のようなもの
がある
*引数の順序は必要なため、厳密には キーワード引数 とは呼べないが便宜上
しかし引数のルールは
複雑
かっこいいメソッド名
を定義したい
*ここでのかっこ良さとは、役割を明確にし理路整然とした定義をしたいということです
Swiftのコードは
Objective-Cで呼び出すことがで
きるので比較分類しつつ整理する
用語
class Hoge {
func instanceMethod(string str: String) {
}
}
外部引数名
内部引数名
• 外部引数(External Parameter)
• 内部引数(Local Parameter)
アジェンダ
• 外部引数名を指定しない例
• 外部引数名を指定する例
• 外部引数名と内部引数名を同じにする例。記号 #
• 外部引数名を省略したい場合の例。記号 _
• おまけ
• イニシャライザ
• 関数の場合
外部引数名を指定しない
例
class Hoge {
// 外部引数名を指定していない
func instanceMethod1(str1: String, str2: String)->String {
}
}
let word = hoge.instanceMethod1(“hello”, str2:“world”)
String *word = [hoge instanceMethod1:@“hello”
str2:@“world”];
Swiftでこのメソッドを呼び出す場合
Objective-Cでこのメソッドを呼び出す場合
第2引数以降の内部引数名が外部引数名に
なぜこんなルールがあるか考察
• Objective-Cでもインスタンスメソッドでは外部
引数名を指定しないことはほとんどない
• なるべく文として読ませるようにしている
• ただSwiftでは第1引数のみの場合など特に外部
引数名を加えるのは不自然な場合が多い
• 折衷案として第2引数以降は何も指定しなけれ
ば外部引数名とした方が良いと思えなくもない
外部引数名を指定する
例
class Hoge {
// 外部引数名”string”と”andString”を指定する
func instanceMethod2(string str1: String,
andString str2: String) -> String {
}
}
let word = hoge.instanceMethod2(string:“hello”,
andString:“world”)
String *word = [hoge instanceMethod2WithString:@“hello”
andString:@“world”];
Swiftでこのメソッドを呼び出す場合
Objective-Cでこのメソッドを呼び出す場合
外部引数名を指定されている
自動でWith+外部引数名の頭文字が大文字に!
なぜこんなルールがあるか考察
• Objective-Cでは第1外部引数名がWith+大文字
で始まる場合が多い
• Swiftで書いたコードもObjective-Cから自然
に使える
外部引数名にbyやforとか前置詞を明示したら
WithByHogeとかになるのか実験してみた件
class Hoge {
// 明示的にby付けたらWithByって自動で付加されるか実験
func instanceMethod(byString str1: String,
andString str2: String) -> String {}
// 同じく明示的にfor
func instanceMethod(forString str1: String,
andString str2: String) -> String {}
}
String *word = [hoge instanceMethodByString:@“hello”
andString:@“world”];
なんと、Objective-Cで外部引数名に前置詞を指定すると
Withなくなって定義される!!
String *word = [hoge instanceMethodForString:@“hello”
andString:@“world”];
Objective-Cでこのメソッドを呼び出す場合
Withがなくなる前置詞を調査
• Withがなくなった前置詞
• for, by, in, on, of, to, at, from, below
• Withがなくならなかった前置詞
• over, under, about, round, around
ここらへんのObjective-Cとのブリッジは
Swiftのバージョンアップによってブレそうな気
がする…
好きですSwift
*こう書いておくとSwiftをdisってると思われるはずがない
外部引数名と内部引数名同じ
にする場合は#を付ける
例
class Hoge {
// 外部引数名と内部引数名を同じにする場合は引数名に#を付ける
func instanceMethod3(#str1: String,
str2: String) -> String {
}
}
let word = hoge.instanceMethod3(str1:“hello”,
str2:“world”)
String *word = [hoge instanceMethodWithStr1:@“hello”
str2:@“world”];
Swiftでこのメソッドを呼び出す場合
Objective-Cでこのメソッドを呼び出す場合
str1 str1: Stringという形にはしない
str1が外部引数名となっている
感想
インスタンスメソッドの第1外部引数に # を付
けるのは、Objective-Cで前置詞Withを使うな
ら自然な感じになる
外部引数名を省略したい場合
_ を付ける
例
class Hoge {
// 第一でない外部引数名が自動なのをやめる場合は_を付ける
func instanceMethod4(str1: String,
_ str2: String) -> String {
}
}
let word = hoge.instanceMethod4(“hello”, “world”)
String *word = [hoge instanceMethod4:@“hello”
:@“world”];
Swiftでこのメソッドを呼び出す場合
Objective-Cでこのメソッドを呼び出す場合
Objective-Cでは珍しい形になった
Swiftでは省略するときに _ がよく使われる
省略して、外部引数名が 無い から
下にバーが有るだけの存在感の薄い記号
_ だと思うと
覚えられる
イニシャライザの場合
class Age {
// イニシャライザ
init (str: String) { } // 1. 外部引数名は指定しない
init (_ str: String) { } // 2. イニシャライザの引数名に_
}
let age1 = Age(str: “18”) // 1. 内部引数名が外部引数名に!
let age2 = Age(“18”) // 2. 省略されてシンプル
Hoge *hoge1 = [Age alloc] initWithStr:@“18”]; // 1. With+Str
Hoge *hoge2 = [Age alloc] init:@“18”]; // 2. 省略された
Swiftでこのイニシャライザを呼び出す場合
Objective-Cでこのメソッドを呼び出す場合
省略はObjective-Cでは少し違和感のある珍しい形に
イニシャライザの場合は第1引数でも内部引数名が外部引数名になる
なぜこんなルールがあるか考察
Objective-Cのイニシャライザでは
外部引数名を省略しないユースケースは多い
この部分に関しては特に
SwiftはObjective-Cに引っ張られている
関数の場合
メソッドとイニシャライザで
ルールが微妙に違うように
関数もまた微妙に違っている
関数の場合はシンプル
引数が第1であろうがなかろうが
外部引数名を指定しない場合に
内部引数名は外部引数名にならない
まとめ
メソッド イニシャライザ 関数
第1の外部引数名を
明示しない
外部引数名なし
内部引数名が外部引数
名になり場合により前
置詞が付く
外部引数名なし
第2以降の外部引数名を
明示しない
内部引数名が外部引数
名になる
内部引数名が外部引数
名になる
外部引数名なし
第1の外部引数名を
明示する
内部引数名が外部引数
名になり場合により前
置詞が付く
内部引数名が外部引数
名になり場合により前
置詞が付く
明示される
第2以降の外部引数名を
明示する
明示される 明示される 明示される
まだSwiftで
消耗してるの?
以上です
残り時間で何か質問ありますか?

Weitere ähnliche Inhalte

Ähnlich wie まだSwiftで消耗してるの?

Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesShintarou Okada
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみるYuichi Adachi
 
キレイなコードの書き方
キレイなコードの書き方キレイなコードの書き方
キレイなコードの書き方Takuya Kitamura
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 

Ähnlich wie まだSwiftで消耗してるの? (14)

Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 
Tokyo r38
Tokyo r38Tokyo r38
Tokyo r38
 
IDEALIZE YOU
IDEALIZE YOUIDEALIZE YOU
IDEALIZE YOU
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみる
 
キレイなコードの書き方
キレイなコードの書き方キレイなコードの書き方
キレイなコードの書き方
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
C++の復習
C++の復習C++の復習
C++の復習
 

Mehr von 今城 善矩

HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得するHealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する今城 善矩
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight今城 善矩
 
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件今城 善矩
 
BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない今城 善矩
 
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class今城 善矩
 
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtipsiOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips今城 善矩
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5今城 善矩
 
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方今城 善矩
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている今城 善矩
 
OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発今城 善矩
 
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwwwジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww今城 善矩
 
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っているやはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている今城 善矩
 

Mehr von 今城 善矩 (13)

HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得するHealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
 
Stargazer Meetup1
Stargazer Meetup1Stargazer Meetup1
Stargazer Meetup1
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight
 
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
 
BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない
 
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
 
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtipsiOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
 
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
 
OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発
 
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwwwジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
 
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っているやはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
 

Kürzlich hochgeladen

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Kürzlich hochgeladen (9)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

まだSwiftで消耗してるの?