Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Optional皆伝
Search
touyou
October 29, 2016
Programming
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Optional皆伝
http://qiita.com/koher/items/c6f446bad54442a28bf4
この記事を参考にSwiftのOptional型についてまとめさせていただきました。
touyou
October 29, 2016
More Decks by touyou
See All by touyou
Liquid GlassとApp Intents
touyou
0
1.6k
生成AI時代のコンポーネントライブラリの作り方
touyou
1
2.2k
生成AI活用プロダクトが目指してほしい未来
touyou
0
4.2k
メンター百物語 紡ぎ続けられる確かな情熱
touyou
0
720
これからの時代の『クリエイター』の生き方
touyou
0
120
しくじり先生〜とうようがLeaders7期生からL4S7期講師になるまでのプログラミング半生を振り返る
touyou
0
170
AWSサーバーレスが支える劇団ノーミーツのオンライン劇場ZA / AWS Dev Day Online 2021 C-5
touyou
0
5.4k
3年A組から学ぶ体験の作り方
touyou
0
2.4k
學問のすすめ
touyou
0
1.3k
Other Decks in Programming
See All in Programming
Claude Team Plan導入・ガイド
tk3fftk
0
210
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
460
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
440
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
3
1.5k
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
530
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
250
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
140
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
140
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
140
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Fireside Chat
paigeccino
42
4k
How to Talk to Developers About Accessibility
jct
2
400
Testing 201, or: Great Expectations
jmmastey
46
8.2k
エンジニアに許された特別な時間の終わり
watany
108
250k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
Transcript
0QUJPOBMܕօ ˋ➬穈ה嚊䙀ד椚鍑ׅ0QUJPOBM㘗ˋ hUPVZPV
瑱搫דָׅ㉏겗דׅկ
⟃♴ך״ֲז儗ծ֮זזוֲ剅ֹתַׅ ˖ B*OU ָ֮הֹծBך⦼✳⛦׃ְկ׃ծBָOJMך㜥さכOJM䖤ְկ ˖ BSSBZ<*OU> ָ֮הֹծBSSBZך剑ⴱך銲稆《䖤׃ְկ׃ծBSSBZָOJMַծ 剑ⴱך銲稆ָ㶷㖈׃זְ"SSBZָ瑞ך㜥さכOJM䖤ְկؼٝز<*OU>כSTU *OU הְֲفٗػذ؍䭯אկSTUכ剑ⴱך銲稆ָ㶷㖈׃זְ㜥さכOJM鵤ׅկ
˖ Y%PVCMF ָ֮הֹծYך䎂倯呎鎘皾׃ְկ׃ծYָOJMתכ頾ך侧ך㜥 さכOJM䖤ְկזֶծTRSU㸜Ⰻח׃頾ך侧床ׅהOJM鵤ׅꟼ侧 TBGF4RSU%PVCMF%PVCMF ָ֮ךה׃ג罋ִג葺ְկ ˖ B*OU הC*OU ָ֮הֹծB C鎘皾׃ְկ׃ծBַCָOJMך㜥さחכ OJM䖤ְկ
걧ך晙ꥎד 罋ִגְֶגְֻׁկ
0QUJPOBM㘗ג ˖ )PHFכOJMָⰅזְ ˖ )PHFכ剑ⴱֽOJMָⰅ ˖ )PHF כOJMד)PHF㘗ך⦼ד⟣䠐ךة؎ىؚٝדⰅ
ָֿ♧菙涸ז铡僇דׅկ
דָׅծזׁ
ֽד0QUJPOBM㘗ָ ⴓַה劤䔲ח䙼גתַׅ
ֽד0QUJPOBM㘗 ⢪ְֿזׇגְה 劤䔲ח䙼גתַׅ
չכְպה瘶ִֿך֮ז
欥ְ
欥ֺׅ
0QUJPOBM㘗ծ噰ת׃׳
0QUJPOBM㘗噰לֿזֿהװ ˟ؿ؍ؙءّٝדׅկh傈劤ذٖؽ
ֿזֿהג ˟ؿ؍ؙءّٝדׅկh8BSOFS#SPT&OUFSUBJONFOU *OD
דֹתׇָ˘
החְְַֻדֹדׅ
縧ָֹꞿֻזת׃կ כׄתׅկ 劤颵涸ח0QUJPOBM㘗ג
Ұɺ0QUJPOBMܕϞφυͰ͋Δ
ְװְװ⟃חٌشسגזװי ˖ ֮岀ח䖞ג㹋鄲ׁ խBU.BQ䭯א㘗 ˖ ⯋ղꟼ侧㘗فؚٗٓىؚٝח խ״ֻ⢪嚊䙀 ˖ זַ䬄韋涸ד խ״ַֻזְֽו⤑ⵃ
ٌشسחאְג4XJGUד铡僇׃ג ˖ הְֲ鎸✲ָ2JJUBח֮תׅկ鑫׃ֻכ撑 ˖ 'PP5ָ如ך勴⟝弫ׅ儗ٌشسהㄎע ˖ ⴱ劍⻉ꟼ侧ָ֮ ˖ BU.BQהְֲًاحسא ˖
ٌشس弫ׅ ˖ ؿ؋ؙٝة٦ד֮
ٌشس ˖ 'PP Y BU.BQ G G Y ˖
GPPBU.BQ\'PP ^GPP ˖ GPPBU.BQ\G BU.BQ H ^GPPBU.BQ G BU.BQ H
ؿ؋ؙٝة٦ ˖ NBQהְֲًاحسא ˖ ؿ؋ؙٝة٦弫ׅ ˖ 䛎瘝ꟼ侧JEחꟼ׃גGPPNBQ JE JE GPP
˖ GPPNBQ\H G ^GPPNBQ G NBQ H
זחָ鎉ְְַה鎉ֲה)BTLFMM㷕ןת׃׳ֲկ暴חչׅ׀ְ)BTLFMMך׃ֻ㷕רֲպ כ鸐獥չׅ׀ְ)劤պהㄎלגֶٌشسזוָ♨㻝ח鍑铡ׁגְהְֲֿהד剣せז 劤דׅկ薉铂晛ד֮לطحزד搀俱ד铣ֿהדֹתׅկ㹋ꥷךהֿ⬁כת铣ⴖ גְזְךדַָٌׅشسֿתד椚鍑׃גְֽדכזְךדָׅꟼ侧㘗鎉铂 㷕עהְֲֿהכ4XJGUדꟼ侧㘗鎉铂שְ㹋鄲⢪ִ״ֲחזהְֲֿהד֮גծ ח״ג➙תד撕꧟Ⳣ椚ָ知患ח剅ֽ׃תׅկזח״3Y4XJGUזוד䪔גְ ךכ'VODUJPOBM3FBDUJWF1SPHSBNNJOH鸐獥'31הㄎלגֶꟼ侧㘗鎉铂ך暴 䗙㢳ֻ《Ⰵגְתׅկת4XJGUחכ0QUJPOBM㘗⟃㢩ח׳ֻ׳ֻٌشسחזג ְ㘗ָ㶷㖈ֿׅ⹈䓼ֿׅהכ4XJGUד״ٖكٕך넝ְ㹋鄲ָדֹהְֲ 挿דהג䕵חאךדכזְד׃׳ֲַկꞿղה铂ת׃ָאתזחָ鎉ְְַהְ
ֲה4XJGU⟃㢩ך暴חַֽꨄفؚٗٓىؚٝ鎉铂㷕עהְֲֿהכ圫ղז鋔挿《Ⰵ הְֲ挿דꬊ䌢ח剣⸬ז⹈䓼倯岀הְֲֿהדׅկ➙㔐ך闌䏟הꟼ侧㘗鎉铂ך濼陎ָ֮ ל뇪חꆃ啎ծ僇傈ַ0QUJPOBM㘗⢪ֲוז撕꧟זⳢ椚ח甧ぢֲַֿהחזה׃ג ֮זזׅץג荈⸂ד螟뜧ח鍑寸דֹ״ֲחזכ׆דׅկ-FUˏT0QUJPOBM-FUˏT4XJGU ׯה椚鍑׃ְ➂כ ꟼ侧㘗鎉铂㷕רֲ
את
Ұɺ0QUJPOBMܕϞφυͰ͋Δ
Ұɺ0QUJPOBMܕNBQͱqBU.BQ ͱ͍͏ϝιουΛ͍࣋ͬͯΔ
Ұɺ0QUJPOBMܕ 0QUJPOBM5ͱఆٛ͞ΕΔܕͰ͋Δ
͑"SSBZ5ה⡂״ֲז㶷㖈
אתծ*OU ה*OUכ 㸣Ⰻח麩ֲך
*OU 0QUJPOBM*OU
*OU 0QUJPOBM0QUJPOBM*OU
0QUJPOBM5כ 銲稆ָ♧⦐׃ַⰅזְ盲ד֮
0QUJPOBM㘗ך㹋鄲♧鿇 public enum Optional<Wrapped> : ExpressibleByNilLiteral { case none case
some(Wrapped) }
Ұɺ0QUJPOBMܕ FYUFOTJPOͰ֦ுͰ͖Δ
䭁䓸ך⢽ extension Optional { public func reduce<U>(_ initial: U, combine:
(U, Wrapped) -> U) -> U { switch self { case .none: return initial case .some(let value): return combine(initial, value) } } public func filter(_ includeElement: @escaping (Wrapped) -> Bool) -> Wrapped? { return flatMap { includeElement($0) ? $0 : nil } } public func forEach(_ action: (Wrapped) -> ()) { reduce(()) { action($1) } } }
Ύ㉏겗鍑ְג״ֲ
⟃♴ך״ֲז儗ծ֮זזוֲ剅ֹתַׅ ˖ B*OU ָ֮הֹծBך⦼✳⛦׃ְկ׃ծBָOJMך㜥さכOJM䖤ְկ ˖ BSSBZ<*OU> ָ֮הֹծBSSBZך剑ⴱך銲稆《䖤׃ְկ׃ծBSSBZָOJMַծ 剑ⴱך銲稆ָ㶷㖈׃זְ"SSBZָ瑞ך㜥さכOJM䖤ְկؼٝز<*OU>כSTU *OU הְֲفٗػذ؍䭯אկSTUכ剑ⴱך銲稆ָ㶷㖈׃זְ㜥さכOJM鵤ׅկ
˖ Y%PVCMF ָ֮הֹծYך䎂倯呎鎘皾׃ְկ׃ծYָOJMתכ頾ך侧ך㜥 さכOJM䖤ְկזֶծTRSU㸜Ⰻח׃頾ך侧床ׅהOJM鵤ׅꟼ侧 TBGF4RSU%PVCMF%PVCMF ָ֮ךה׃ג罋ִג葺ְկ ˖ B*OU הC*OU ָ֮הֹծB C鎘皾׃ְկ׃ծBַCָOJMך㜥さחכ OJM䖤ְկ
B*OU ָ֮הֹծBך⦼✳⛦׃ְկ ׃ծBָOJMך㜥さכOJM䖤ְկ
♧菙涸鍑瘶 // 1൪ var result: Int? if let a0 =
a { result = a0 * a0 } else { result = nil } // or result = a == nil ? nil : a! * a!
㸜Ⰻַא知患ז鍑瘶 // simple answer result = a.map { $0 *
$0 }
BSSBZ<*OU> ָ֮הֹծBSSBZך剑ⴱך銲稆《䖤׃ְկ ׃ծBSSBZָOJMַծ剑ⴱך銲稆ָ㶷㖈׃זְ"SSBZָ瑞ך 㜥さכOJM䖤ְկؼٝز<*OU>כSTU*OU הְֲفٗػ ذ؍䭯אկSTUכ剑ⴱך銲稆ָ㶷㖈׃זְ㜥さכOJM鵤ׅկ
♧菙涸鍑瘶 // 2൪ if let array0 = array { if
let first = array0.first { result = first } else { result = nil } } else { result = nil } // Int??ʹͳΔ͚Ͳ... var result2: Int?? = array.map { $0.first }
㸜Ⰻַא知患ז鍑瘶 // simple answer result = array?.first
Y%PVCMF ָ֮הֹծYך䎂倯呎鎘皾׃ְկ׃ծ YָOJMתכ頾ך侧ך㜥さכOJM䖤ְկזֶծTRSU㸜Ⰻ ח׃頾ך侧床ׅהOJM鵤ׅꟼ侧TBGF4RSU%PVCMF %PVCMF ָ֮ךה׃ג罋ִג葺ְկ
♧菙涸鍑瘶 // 3൪ if let x0 = x { resultDouble
= safeSqrt(x0) } else { resultDouble = nil } // Double??ʹͳΔ͚Ͳ... let result3: Double?? = x.map { safeSqrt($0) } // ??Λ͏ resultDouble = x.map { safeSqrt($0) } ?? nil
㸜Ⰻַא知患ז鍑瘶 // simple answer resultDouble = x.flatMap { safeSqrt($0) }
// ͬͱ͘ʂ resultDouble = x.flatMap(safeSqrt)
B*OU הC*OU ָ֮הֹծB C鎘皾 ׃ְկ׃ծBַCָOJMך㜥さחכOJM 䖤ְկ
♧菙涸鍑瘶 // 4൪ if let a0 = a { if
let b0 = b { result = a0 + b0 } else { result = nil } } else { result = nil } // Int??ʹͳΔ͚Ͳ... result2 = a.map { a0 in b.map { b0 in a0 + b0 } }
㸜Ⰻַא知患ז鍑瘶 // simple answer result = a.flatMap { a0 in
b.map { b0 in a0 + b0 } }
⟃♳ד
0QUJPOBMܕօ ˋ➬穈ה嚊䙀ד椚鍑ׅ0QUJPOBM㘗ˋ hUPVZPV
הְֲせך
2JJUB 4XJGUך0QUJPOBM㘗噰CZ!LPIFSׁ ך銲秈穄ח׃תׅկ
5IBOLTGPSMJTUFOJOH˘ ˟铡僇׃ֹזַ鿇ⴓכ⯋ך鎸✲铣דגְֻׁկ
ְעסֻּ֭