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
Mobile Programming Closure 2
Search
yuichiro_takahashi
October 24, 2018
Technology
110
0
Share
Mobile Programming Closure 2
MobileProgrammingの授業のスライドです
yuichiro_takahashi
October 24, 2018
More Decks by yuichiro_takahashi
See All by yuichiro_takahashi
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
530
App Clip - in a nutshell
yuichirokato
0
380
巨大な機能を VIPER + MicroViewController でいい感じに実装した話
yuichirokato
1
840
Mobile Programming Protocol Extension
yuichirokato
0
96
Mobile Programming Protocol
yuichirokato
0
100
Mobile Programming enum
yuichirokato
0
190
Mobile Programming Optional
yuichirokato
0
150
Mobile Programming Struct
yuichirokato
0
140
Mobile Programming Initializer Beta
yuichirokato
0
140
Other Decks in Technology
See All in Technology
20260513_生成AIを専属DSに_AI分析結果の検品テクニック_ハンズオン_交通事故データ
doradora09
PRO
0
180
Scovilleモバイルエンジニア募集中.pdf
julienrudin
0
150
ServiceNow Knowledge 26 の歩き方
manarobot
0
340
Shipping AI Agents — Lessons from Production
vvatanabe
0
320
小さいVue.jsを30分で作る
hal_spidernight
0
140
Angular Architecture Revisited Modernizing Angular Architectural Patterns
rainerhahnekamp
0
130
『生成AI時代のクレデンシャルとパーミッション設計 — Claude Code を起点に』の執筆企画
takuros
2
2.1k
[Oracle TechNight#99] 生成AI時代のAI/ML入門 ~ AIとオラクルデータベースの関係 (後半)
oracle4engineer
PRO
3
220
色を視る
yuzneri
0
320
多角的な視点から見たAGI
terisuke
0
120
毎日の作業を Claude Code 経由にしたら、 ノウハウがコードになった
kossykinto
0
220
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
830
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
The untapped power of vector embeddings
frankvandijk
2
1.7k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
190
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
200
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
[SF Ruby Conf 2025] Rails X
palkan
2
1k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
210
How to Ace a Technical Interview
jacobian
281
24k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Believing is Seeing
oripsolob
1
120
First, design no harm
axbom
PRO
2
1.2k
Transcript
CLOSUREิ MOBILE PROGRAMMING OCT, 24TH
CLOSUREͱʁ
ςΩετ CLOSUREͱʁ(͓͞Β͍) ▸ ͱͯ͠ѻ͑Δؔ ▸ ແ໊ؔϥϜμࣜɺؔΦϒδΣΫτͱݴΘΕΔ͜ͱ͋ Γ·͢ ▸ ͱͯ͠ѻ͑ΔͷͰؔͷҾʹ͢͜ͱͰ͖Δ͠ ▸
Γͱͯ͠ฦ͢͜ͱͰ͖Δ
ΫϩʔδϟΛѻ͑Δ ͜ͱͰԿ͕خ͍͔͠ʁ
ςΩετ ΫϩʔδϟΛѻ͑Δ͜ͱͰԿ͕خ͍͠ͷ͔ʁ ▸ ॲཧΛநԽͤ͞Δ͜ͱ͕Ͱ͖Δ ▸ ॲཧΛநԽͤ͞Δ͜ͱͰਓؒʹಡΈ͍͢ίʔυʹͳΔ ▸ ࣮͍ͨ͠ॲཧʹϑΥʔΧε͢Δ͜ͱ͕Ͱ͖Δ
Ͳ͏͍͏͜ͱʁ
࢛ଇԋࢉͷྫ
ςΩετ ࢛ଇԋࢉͷྫ ▸ ྫ࢛͑ଇԋࢉͷؔΛ࡞Γ͍ͨͱ͠·͢ ▸ ͠ΫϩʔδϟΛΘͳ͍߹ ▸ ܭࢉͷͨΊͷܕͷҾ͕ೋͭ ▸ ͦΕͱͲͷܭࢉॲཧ(+,
*, -, /)Λ࣮ߦ͢Δ͔Λܾఆ͢ΔͨΊͷ จࣈྻͷҾ͕ҰͭඞཁʹͳΔͱࢥ͍·͢ ▸ ࣮࣍ͷΑ͏ʹͳΓ·͢
ςΩετ ࢛ଇԋࢉͷؔͷྫ func calculate(num1: Int, num2: Int, operator: String) ->
Int { switch operator { case "+": return num1 + num2 case "-": return num1 - num2 case "*": return num1 + num2 case "/": return num1 / num2 default: return num1 + num2 } } calculate(num1: 10, num2: 20, operator: "ˎ")
͜ΕͰ࣮ Ͱ͖͕ͨɾɾɾ
ςΩετ ࣮৭ʑ͕ɾɾɾ func calculate(num1: Int, num2: Int, operator: String) ->
Int { switch operator { case "+": return num1 + num2 case "-": return num1 - num2 case "*": return num1 + num2 case "/": return num1 / num2 default: return num1 + num2 } } calculate(num1: 10, num2: 20, operator: "ˎ") ͍switchΛॻ͔ͳ͍ͱ͍͚ͳ͍(ॲཧͷຊ࣭͡Όͳ͍)
ςΩετ ࣮৭ʑ͕ɾɾɾ func calculate(num1: Int, num2: Int, operator: String) ->
Int { switch operator { case "+": return num1 + num2 case "-": return num1 - num2 case "*": return num1 + num2 case "/": return num1 / num2 default: return num1 + num2 } } calculate(num1: 10, num2: 20, operator: "ˎ") ͍switchΛॻ͔ͳ͍ͱ͍͚ͳ͍(ॲཧͷຊ࣭͡Όͳ͍) ਖ਼͍͠จࣈ͕དྷͳ͔ͬͨ࣌ఆ͠ͳ͍ͱ͍͚ͳ͍(ॲ ཧͷຊ࣭͡Όry)
ςΩετ ࣮৭ʑ͕ɾɾɾ func calculate(num1: Int, num2: Int, operator: String) ->
Int { switch operator { case "+": return num1 + num2 case "-": return num1 - num2 case "*": return num1 + num2 case "/": return num1 / num2 default: return num1 + num2 } } calculate(num1: 10, num2: 20, operator: "ˎ") ͍switchΛॻ͔ͳ͍ͱ͍͚ͳ͍(ॲཧͷຊ࣭͡Όͳ͍) ਖ਼͍͠จࣈ͕དྷͳ͔ͬͨ࣌ఆ͠ͳ͍ͱ͍͚ͳ͍(ॲ ཧͷຊ࣭͡Όry) ͋ΕΕʙ?͓͔͍ͧ͠ʙ?
ςΩετ ࣮৭ʑ͕ɾɾɾ func calculate(num1: Int, num2: Int, operator: String) ->
Int { switch operator { case "+": return num1 + num2 case "-": return num1 - num2 case "*": return num1 + num2 case "/": return num1 / num2 default: return num1 + num2 } } calculate(num1: 10, num2: 20, operator: “ˎ”) ͍switchΛॻ͔ͳ͍ͱ͍͚ͳ͍(ॲཧͷຊ࣭͡Όͳ͍) ਖ਼͍͠จࣈ͕དྷͳ͔ͬͨ࣌ఆ͠ͳ͍ͱ͍͚ͳ͍(ॲ ཧͷຊ࣭͡Όry) ͋ΕΕʙ?͓͔͍ͧ͠ʙ? શ֯จࣈͯ͠ͳ͍ʁ
ςΩετ ࣮৭ʑ͕ɾɾɾ func calculate(num1: Int, num2: Int, operator: String) ->
Int { switch operator { case "+": return num1 + num2 case "-": return num1 - num2 case "*": return num1 + num2 case "/": return num1 / num2 default: return num1 + num2 } } calculate(num1: 10, num2: 20, operator: “ˎ”) ͍switchΛॻ͔ͳ͍ͱ͍͚ͳ͍(ॲཧͷຊ࣭͡Όͳ͍) ਖ਼͍͠จࣈ͕དྷͳ͔ͬͨ࣌ఆ͠ͳ͍ͱ͍͚ͳ͍(ॲ ཧͷຊ࣭͡Όry) ͋ΕΕʙ?͓͔͍ͧ͠ʙ? શ֯͡Όͳ͍ʁ
ςΩετ ৭ʑͳ͕ɾɾɾ ▸ ॲཧΛذͤ͞ΔͨΊʹswitchΛॻ͔ͳ͍ͱ͍͚ͳ͍ ▸ OperatorʹจࣈྻΛ͍ͬͯΔͷͰظ͠ͳ͍จࣈ(=ͱ͔)͕͖ͨ߹ఆ͠ͳ͍ ͱ͍͚ͳ͍(default) ▸ operatorͷจࣈྻͱ࣮ࡍͷܭࢉΛ߹Θͤͳ͍ͱ͍͚ͳ͍ ▸
ԋࢉͷछྨ͕૿͑ͨΒcaseΛ૿͞ͳ͍ͱ͍͚ͳ͍ ▸ ؔΛݺͼग़͢ͱ͖ʹoperatorͷจࣈΛλΠϙ͠ͳ͍Α͏ʹؾΛ͚ͭͳ͍ͱ͍͚ ͳ͍ ▸ ࢛ଇԋࢉͷؔͳͷͰܭࢉͤ͞ΔॲཧʹϑΥʔΧε͍͕ͨͦ͠ΕҎ֎ʹॻ͔ͳ͍ͱ ͍͚ͳ͍͜ͱɺߟ͑ͳ͍ͱ͍͚ͳ͍͜ͱ͕ଟ͍
Ͱ͠ܭࢉͷॲཧ ΛҾͱͯͤͨ͠ Βɾɾɾʁ
ςΩετ ܭࢉͷॲཧΛҾͱͯͤͨ͠Βɾɾɾʁ func calculate(num1: Int, num2: Int, calc: (Int, Int)
-> Int) -> Int { return calc(number1, number2) } // ͠ࢉ calculate(num1: 10, num2: 20) { $0 + $1 } // Ҿ͖ࢉ calculate(num1: 10, num2: 20) { $0 - $1 } // ֻ͚ࢉ calculate(num1: 10, num2: 20) { $0 * $1 } // ׂΓࢉ calculate(num1: 10, num2: 20) { $0 / $1 }
ςΩετ ܭࢉͷॲཧΛҾͱͯͤͨ͠Βɾɾɾʁ func calculate(num1: Int, num2: Int, calc: (Int, Int)
-> Int) -> Int { return calc(number1, number2) } // ͠ࢉ calculate(num1: 10, num2: 20) { $0 + $1 } // Ҿ͖ࢉ calculate(num1: 10, num2: 20) { $0 - $1 } // ֻ͚ࢉ calculate(num1: 10, num2: 20) { $0 * $1 } // ׂΓࢉ calculate(num1: 10, num2: 20) { $0 / $1 } จࣈͷΘΓʹܭࢉॲཧͦͷͷΛ͢Α͏ʹมߋ(typoͷ ৺͕ͳ͘ͳͬͨ)
ςΩετ ܭࢉͷॲཧΛҾͱͯͤͨ͠Βɾɾɾʁ func calculate(num1: Int, num2: Int, calc: (Int, Int)
-> Int) -> Int { return calc(number1, number2) } // ͠ࢉ calculate(num1: 10, num2: 20) { $0 + $1 } // Ҿ͖ࢉ calculate(num1: 10, num2: 20) { $0 - $1 } // ֻ͚ࢉ calculate(num1: 10, num2: 20) { $0 * $1 } // ׂΓࢉ calculate(num1: 10, num2: 20) { $0 / $1 } switchͷྶѹ͕ɾɾɾফ͑ͨɾɾɾʁ(ॲཧ͕γϯϓ ϧʹ) จࣈͷΘΓʹܭࢉॲཧͦͷͷΛ͢Α͏ʹมߋ(typoͷ ৺͕ͳ͘ͳͬͨ)
ςΩετ ܭࢉͷॲཧΛҾͱͯͤͨ͠Βɾɾɾʁ func calculate(num1: Int, num2: Int, calc: (Int, Int)
-> Int) -> Int { return calc(number1, number2) } // ͠ࢉ calculate(num1: 10, num2: 20) { $0 + $1 } // Ҿ͖ࢉ calculate(num1: 10, num2: 20) { $0 - $1 } // ֻ͚ࢉ calculate(num1: 10, num2: 20) { $0 * $1 } // ׂΓࢉ calculate(num1: 10, num2: 20) { $0 / $1 } switchͷྶѹ͕ɾɾɾফ͑ͨɾɾɾʁ(ॲཧ͕γϯϓ ϧʹ) จࣈͷΘΓʹܭࢉॲཧͦͷͷΛ͢Α͏ʹมߋ(typoͷ ৺͕ͳ͘ͳͬͨ) ॲཧΛ͍ͯ͠ΔͷͰߟ ͑Δ͜ͱ͕ݮΔ
ςΩετ ܭࢉͷॲཧΛҾͱͯͤͨ͠Βɾɾɾʁ func calculate(num1: Int, num2: Int, calc: (Int, Int)
-> Int) -> Int { return calc(number1, number2) } // ͠ࢉ calculate(num1: 10, num2: 20) { $0 + $1 } // Ҿ͖ࢉ calculate(num1: 10, num2: 20) { $0 - $1 } // ֻ͚ࢉ calculate(num1: 10, num2: 20) { $0 * $1 } // ׂΓࢉ calculate(num1: 10, num2: 20) { $0 / $1 } // ༨Γ calculate(num1: 10, num2: 20) { $0 % $1 } switchͷྶѹ͕ɾɾɾফ͑ͨɾɾɾʁ(ॲཧ͕γϯϓ ϧʹ) จࣈͷΘΓʹܭࢉॲཧͦͷͷΛ͢Α͏ʹมߋ(typoͷ ৺͕ͳ͘ͳͬͨ) ॲཧΛ͍ͯ͠ΔͷͰߟ ͑Δ͜ͱ͕ݮΔ ॲཧΛ͍ͯ͠ΔͷػೳՃʹΑ ΓॊೈͳରԠ͕Մೳʹ
͏গ͠ݟͯ Έ·͠ΐ͏
BUTTONͷΠϕϯ τϋϯυϥͷྫ
ςΩετ ANDROIDͷϘλϯΛ࣮͢Δ߹ɾɾɾ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button) } } ·ͣLayoutϑΝΠϧ͔ΒButtonΛऔಘ
ςΩετ ANDROIDͷϘλϯΛ࣮͢Δ߹ɾɾɾ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new OnClickListener() { }); } } OnClickListenerΫϥεΛ࡞ͯ͠ɾɾɾ
ςΩετ ANDROIDͷϘλϯΛ࣮͢Δ߹ɾɾɾ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } } onClickϝιουΛॻ͍ͯɾɾɾ
ςΩετ ANDROIDͷϘλϯΛ࣮͢Δ߹ɾɾɾ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("Sample", "button is tapped!"); } }); } } λοϓ͞Εͨ࣌ͷίʔυΛॻ͘
͜ΕͰ࣮ Ͱ͖͕ͨɾɾɾ
ςΩετ Γ͕ɾɾɾ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("Sample", "button is tapped!"); } }); } } λοϓ͞Εͨ࣌ͷॲཧΛॻ͖͍͚ͨͩͳͷʹ࣮·Ͱ͕ԕ͍
ΫϩʔδϟΛ ͤΕɾɾɾ
ςΩετ ΫϩʔδϟΛͤΕɾɾɾ public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener { Log.d("Sample", "button is tapped!"); }; } } ຊʹॻ͖͍ͨॲཧ͚ͩʹϑΥʔΧεͰ͖Δʂ
·ͱΊ
ςΩετ ·ͱΊ ▸ ΫϩʔδϟΛ͢͜ͱͰίʔυͷྔ͕ݮΔ ▸ ίʔυͷྔ͕ݮΔͷͰಡΈ͘͢ͳΔ ▸ ༨ܭͳίʔυΛॻ͔ͳͯ͘ࡁΉͷͰॻ͖͍ͨॲཧʹϑΥʔΧ ε͢Δ͜ͱ͕Ͱ͖Δ ▸
ͬͨͶʂͨ͑ͪΌΜʂ
ςΩετ શ෦Ϋϩʔδϟ͞Μͷ͓͔͛