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
0
110
Mobile Programming Closure 2
MobileProgrammingの授業のスライドです
yuichiro_takahashi
October 24, 2018
Tweet
Share
More Decks by yuichiro_takahashi
See All by yuichiro_takahashi
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
420
App Clip - in a nutshell
yuichirokato
0
370
巨大な機能を VIPER + MicroViewController でいい感じに実装した話
yuichirokato
1
830
Mobile Programming Protocol Extension
yuichirokato
0
92
Mobile Programming Protocol
yuichirokato
0
99
Mobile Programming enum
yuichirokato
0
180
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
20260311 ビジネスSWG活動報告(デジタルアイデンティティ人材育成推進WG Ph2 活動報告会)
oidfj
0
350
visionOS 開発向けの MCP / Skills をつくり続けることで XR の探究と学習を最大化
karad
1
1.1k
イベントで大活躍する電子ペーパー名札を作る(その2) 〜 M5PaperとM5PaperS3 〜 / IoTLT @ JLCPCB オープンハードカンファレンス
you
PRO
0
130
Claude Code 2026年 最新アップデート
oikon48
14
11k
システム標準化PMOから ガバメントクラウドCoEへ
techniczna
1
150
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
250
TypeScript 7.0の現在地と備え方
uhyo
7
1.9k
進化するBits AI SREと私と組織
nulabinc
PRO
1
270
GCASアップデート(202601-202603)
techniczna
0
240
ソフトバンク流!プラットフォームエンジニアリング実現へのアプローチ
sbtechnight
1
230
生成AIで速度と品質を両立する、QAエンジニア・開発者連携のAI協調型テストプロセス
shota_kusaba
0
280
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
3
2.3k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
150
Become a Pro
speakerdeck
PRO
31
5.9k
Optimizing for Happiness
mojombo
378
71k
Automating Front-end Workflow
addyosmani
1370
200k
sira's awesome portfolio website redesign presentation
elsirapls
0
190
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Are puppies a ranking factor?
jonoalderson
1
3.1k
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!"); }; } } ຊʹॻ͖͍ͨॲཧ͚ͩʹϑΥʔΧεͰ͖Δʂ
·ͱΊ
ςΩετ ·ͱΊ ▸ ΫϩʔδϟΛ͢͜ͱͰίʔυͷྔ͕ݮΔ ▸ ίʔυͷྔ͕ݮΔͷͰಡΈ͘͢ͳΔ ▸ ༨ܭͳίʔυΛॻ͔ͳͯ͘ࡁΉͷͰॻ͖͍ͨॲཧʹϑΥʔΧ ε͢Δ͜ͱ͕Ͱ͖Δ ▸
ͬͨͶʂͨ͑ͪΌΜʂ
ςΩετ શ෦Ϋϩʔδϟ͞Μͷ͓͔͛