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
0
1.2k
Optional皆伝
http://qiita.com/koher/items/c6f446bad54442a28bf4
この記事を参考にSwiftのOptional型についてまとめさせていただきました。
touyou
October 29, 2016
Tweet
Share
More Decks by touyou
See All by touyou
Liquid GlassとApp Intents
touyou
0
850
生成AI時代のコンポーネントライブラリの作り方
touyou
1
1.3k
生成AI活用プロダクトが目指してほしい未来
touyou
0
3k
メンター百物語 紡ぎ続けられる確かな情熱
touyou
0
410
これからの時代の『クリエイター』の生き方
touyou
0
94
しくじり先生〜とうようがLeaders7期生からL4S7期講師になるまでのプログラミング半生を振り返る
touyou
0
150
AWSサーバーレスが支える劇団ノーミーツのオンライン劇場ZA / AWS Dev Day Online 2021 C-5
touyou
0
5.3k
3年A組から学ぶ体験の作り方
touyou
0
2.3k
學問のすすめ
touyou
0
1.2k
Other Decks in Programming
See All in Programming
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
22
7.8k
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.5k
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.6k
並行開発のためのコードレビュー
miyukiw
2
1.9k
SourceGeneratorのススメ
htkym
0
610
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
1
160
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.9k
CSC307 Lecture 11
javiergs
PRO
0
580
文字コードの話
qnighy
30
11k
AIコーディングの理想と現実 2026 | AI Coding: Expectations vs. Reality 2026
tomohisa
0
270
2026/02/04 AIキャラクター人格の実装論 口 調の模倣から、コンテキスト制御による 『思想』と『行動』の創発へ
sr2mg4
0
530
AI巻き込み型コードレビューのススメ
nealle
2
2.2k
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
110
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
320
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
170
Agile that works and the tools we love
rasmusluckow
331
21k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
130
Abbi's Birthday
coloredviolet
2
4.9k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
Between Models and Reality
mayunak
1
210
30 Presentation Tips
portentint
PRO
1
240
The agentic SEO stack - context over prompts
schlessera
0
660
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
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˘ ˟铡僇׃ֹזַ鿇ⴓכ⯋ך鎸✲铣דגְֻׁկ
ְעסֻּ֭