SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
脱swift初心者する
ための2つのきっかけ
@mogmet
About me
• twitter: @mogmet
• 好物:iOS, php, MySQL, Oracle
• 仕事:インフラエンジニア→iOSエンジニア→DBA
• ブログ: http://mogmet.com/
• 作ったアプリたち↓

ワンナイト人狼 for iPhone STARBUCKSHOLIC
1. 関数型言語を使おう!
きっかけはとあるエンジニア
から聞いた一言
いやー、swiftで書き始めたらfor文
とかマジ書かなくなったわーwwww
出典:http://jigokuno.com/eid_162.html
swiftは関数型もサポートした
言語
これを使いこなせれば脱初心者できるし、
コードもよりスマートに短くかける!!
filter
filter
• 効用:配列の中から取り出したいものだけ取り
出せます。
filter
• 例:配列の中から偶数だけ取り出してみる。
Before
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var evenNumbers:[Int] = []
for number in numbers {
if number % 2 == 0 {
evenNumbers.append(number)
}
}
print(evenNumbers) // [0, 2, 4, 6, 8, 10]
After
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [0, 2, 4, 6, 8, 10]
filter
• 例:もうちょっと実践編
before
class Human {
let name: String
init (name: String) { self.name = name }
}
let humans = [
Human(name: "綾波レイ"),
Human(name: "式波・アスカ・ラングレー"),
Human(name: "綾波レイ")
]
var ayanamis:[Human] = []
for human in humans {
if human.name == "綾波レイ" {
ayanamis.append(human)
}
}
print(ayanamis.count) // 2
After
class Human {
let name: String
init (name: String) { self.name = name }
}
let humans = [
Human(name: "綾波レイ"),
Human(name: "式波・アスカ・ラングレー"),
Human(name: "綾波レイ")
]
let ayanamis = humans.filter { $0.name == "綾波レイ" }
print(ayanamis.count) // 2
indexOf
indexOf
• 効用:配列の中から指定したもののindex値を返
します
indexOf
• 例:配列の特定の文字列の時のindex値を取り出
す。
Before
let lineA = ["a", "i", "u"]
var index = 0
for (var i = 0; i < lineA.count; i++) {
if lineA[i] == "i" {
index = i
}
}
print(index) // 1
こんな風にもかけるけど
let lineA = ["a", "i", "u"]
var index = 0
for (i, v) in lineA.enumerate() {
if v == "i" {
index = i
}
}
print(index) // 1
After
let lineA = ["a", "i", "u"]
if let index = lineA.indexOf("i") {
print(index) // 1
}
map
map
• 効用:配列の要素に対して処理ができる
map
• 例:文字列の配列の値を使って初期化したクラ
スを生成する
Before
class Human {
let name: String
init (name: String) { self.name = name }
}
let children = ["綾波レイ", “式波・アスカ・ラングレー",
"真希波・マリ・イラストリアス"]
var humans:[Human] = []
for child in children {
humans.append(Human(name: child))
}
print(humans) // [Human, Human, Human]
After
class Human {
let name: String
init (name: String) { self.name = name }
}
let children = ["綾波レイ", “式波・アスカ・ラングレー",
"真希波・マリ・イラストリアス"]
let humans = children.map { Human(name: $0) }
print(humans) // [Human, Human, Human]
本当はこのまま関数ネタを

続けようと思いましたが
詳しくは下記
Swiftのmap, filter, reduce(などなど)
はこんな時に使う!
http://qiita.com/mo_to_44/items/
cf83b22cb34921580a52
2. {}を減らそう!
guard let
guard let
• unwrapする時のネストを減らせる
func useMagic() {
let maybeMagicalGirl: String? = "鹿目まどか"
if let magicalGirl = maybeMagicalGirl {
print(magicalGirl) // 鹿目まどか
// 契約する
// 変身する
// 魔法を使う
// 世界を変える
// ...
}
}
Before
{}が長すぎる!
func useMagic() {
let maybeMagicalGirl: String? = "鹿目まどか"
guard let magicalGirl = maybeMagicalGirl else {
return
}
print(magicalGirl) // 鹿目まどか
// 契約する
// 変身する
// 魔法を使う
// 世界を変える
// ...
}
After
{}内の記述量を減らせるので
見やすくなる!
where
Before
func useMagicalSwordsman() {
let maybeMagicalSwordsman: String? = "美樹さやか"
guard let magicalSwordsman = maybeMagicalSwordsman else {
return
}
if magicalSwordsman == "美樹さやか" {
print(magicalSwordsman) // 美樹さやか
// あたしってほんと...カバ
}
}
せっかく{}を減らしてもまた{}
が増えている!!
After
func useMagicalSwordsman() {
let maybeMagicalSwordsman: String? = "美樹さやか"
guard let magicalSwordsman = maybeMagicalSwordsman
where magicalSwordsman == "美樹さやか" else {
return
}
print(magicalSwordsman) // 美樹さやか
// あたしってほんと...カバ
}
{}を減らせるのでオススメ!
まとめ
まとめ
• 関数型を使って短く書こう!
• {}をどんどん減らして保守性を高めよう!
御静聴ありがとうございました

Weitere ähnliche Inhalte

Andere mochten auch

iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いniwatako
 
Can we live in a pure Swift world?
Can we live in a pure Swift world?Can we live in a pure Swift world?
Can we live in a pure Swift world?toyship
 
5分でわかるText Kit
5分でわかるText Kit5分でわかるText Kit
5分でわかるText KitRyota Hayashi
 
PUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察などPUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察などTsuyoshi Yonemoto
 
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話Reiko Gotou
 
watchOS1 to watchOS2
watchOS1 to watchOS2watchOS1 to watchOS2
watchOS1 to watchOS2Motoki Narita
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight今城 善矩
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったTomoki Hasegawa
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swiftYusuke Kita
 
チュートリアルをリッチにしよう
チュートリアルをリッチにしようチュートリアルをリッチにしよう
チュートリアルをリッチにしようshinya sakemoto
 
AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例Kenichi Kambara
 
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリングleverages_event
 
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroid【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroidHiroyuki Kusu
 
初めてのQuickで初めてのテスト
初めてのQuickで初めてのテスト初めてのQuickで初めてのテスト
初めてのQuickで初めてのテストKenji Tanaka
 
Xcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルドXcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルドnnkgw
 
今のうちに知っておきたい Swiftの高速化 + 3D Touch API
今のうちに知っておきたい Swiftの高速化 + 3D Touch API今のうちに知っておきたい Swiftの高速化 + 3D Touch API
今のうちに知っておきたい Swiftの高速化 + 3D Touch APIMasaki Oshikawa
 
教育の生産性へそれに辿りつかない物語
教育の生産性へそれに辿りつかない物語教育の生産性へそれに辿りつかない物語
教育の生産性へそれに辿りつかない物語heibei_marunouchi
 
Swiftアプリにプッシュ通知を組み込もう!
Swiftアプリにプッシュ通知を組み込もう!Swiftアプリにプッシュ通知を組み込もう!
Swiftアプリにプッシュ通知を組み込もう!natsumo
 
Swiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれからSwiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれからRyo Kasama
 

Andere mochten auch (20)

iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
 
Can we live in a pure Swift world?
Can we live in a pure Swift world?Can we live in a pure Swift world?
Can we live in a pure Swift world?
 
5分でわかるText Kit
5分でわかるText Kit5分でわかるText Kit
5分でわかるText Kit
 
PUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察などPUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察など
 
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
 
watchOS1 to watchOS2
watchOS1 to watchOS2watchOS1 to watchOS2
watchOS1 to watchOS2
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作った
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swift
 
チュートリアルをリッチにしよう
チュートリアルをリッチにしようチュートリアルをリッチにしよう
チュートリアルをリッチにしよう
 
AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例
 
動画のあれこれ
動画のあれこれ動画のあれこれ
動画のあれこれ
 
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
 
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroid【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
 
初めてのQuickで初めてのテスト
初めてのQuickで初めてのテスト初めてのQuickで初めてのテスト
初めてのQuickで初めてのテスト
 
Xcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルドXcode の一歩進んだ使い方 分散ビルド
Xcode の一歩進んだ使い方 分散ビルド
 
今のうちに知っておきたい Swiftの高速化 + 3D Touch API
今のうちに知っておきたい Swiftの高速化 + 3D Touch API今のうちに知っておきたい Swiftの高速化 + 3D Touch API
今のうちに知っておきたい Swiftの高速化 + 3D Touch API
 
教育の生産性へそれに辿りつかない物語
教育の生産性へそれに辿りつかない物語教育の生産性へそれに辿りつかない物語
教育の生産性へそれに辿りつかない物語
 
Swiftアプリにプッシュ通知を組み込もう!
Swiftアプリにプッシュ通知を組み込もう!Swiftアプリにプッシュ通知を組み込もう!
Swiftアプリにプッシュ通知を組み込もう!
 
Swiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれからSwiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれから
 

Ähnlich wie 脱swift初心者するための2つのきっかけ

1.29.user,user,user
1.29.user,user,user1.29.user,user,user
1.29.user,user,userTonny Xu
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Appsぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS AppsEnsekiTT
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について豊明 尾古
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門Hideto Masuoka
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」Shin Ise
 
Processing.jsでおうちハック
Processing.jsでおうちハックProcessing.jsでおうちハック
Processing.jsでおうちハックsonycsl
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ陽平 山口
 
オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)nomuken
 
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会Mori Tetsuya
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.124時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1聡 中川
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトTaketo Sano
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかたMasahito Zembutsu
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 

Ähnlich wie 脱swift初心者するための2つのきっかけ (20)

1.29.user,user,user
1.29.user,user,user1.29.user,user,user
1.29.user,user,user
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Appsぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Apps
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門
 
About Pointer
About PointerAbout Pointer
About Pointer
 
Tokyo r38
Tokyo r38Tokyo r38
Tokyo r38
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
 
Processing
ProcessingProcessing
Processing
 
Processing.jsでおうちハック
Processing.jsでおうちハックProcessing.jsでおうちハック
Processing.jsでおうちハック
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)
 
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.124時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかた
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 

Mehr von Daiki Mogmet Ito

まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!Daiki Mogmet Ito
 
iOS 15で通知はより見られなくなる
iOS 15で通知はより見られなくなるiOS 15で通知はより見られなくなる
iOS 15で通知はより見られなくなるDaiki Mogmet Ito
 
unity build on github actions
unity build on github actionsunity build on github actions
unity build on github actionsDaiki Mogmet Ito
 
Oracleでモテる実行計画を固定させる2つの方法
Oracleでモテる実行計画を固定させる2つの方法Oracleでモテる実行計画を固定させる2つの方法
Oracleでモテる実行計画を固定させる2つの方法Daiki Mogmet Ito
 
Oracle how-to-audit-backup
Oracle how-to-audit-backupOracle how-to-audit-backup
Oracle how-to-audit-backupDaiki Mogmet Ito
 
WWDC初参加の方に送る6つのおすすめな巡り方
WWDC初参加の方に送る6つのおすすめな巡り方WWDC初参加の方に送る6つのおすすめな巡り方
WWDC初参加の方に送る6つのおすすめな巡り方Daiki Mogmet Ito
 
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Daiki Mogmet Ito
 
【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法
【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法
【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法Daiki Mogmet Ito
 

Mehr von Daiki Mogmet Ito (9)

まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
 
iOS 15で通知はより見られなくなる
iOS 15で通知はより見られなくなるiOS 15で通知はより見られなくなる
iOS 15で通知はより見られなくなる
 
unity build on github actions
unity build on github actionsunity build on github actions
unity build on github actions
 
How to learn new language
How to learn new languageHow to learn new language
How to learn new language
 
Oracleでモテる実行計画を固定させる2つの方法
Oracleでモテる実行計画を固定させる2つの方法Oracleでモテる実行計画を固定させる2つの方法
Oracleでモテる実行計画を固定させる2つの方法
 
Oracle how-to-audit-backup
Oracle how-to-audit-backupOracle how-to-audit-backup
Oracle how-to-audit-backup
 
WWDC初参加の方に送る6つのおすすめな巡り方
WWDC初参加の方に送る6つのおすすめな巡り方WWDC初参加の方に送る6つのおすすめな巡り方
WWDC初参加の方に送る6つのおすすめな巡り方
 
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
 
【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法
【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法
【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法
 

脱swift初心者するための2つのきっかけ