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
visionOS 開発向けの MCP / Skills をつくり続けることで XR の探究と学習を最大化
karad
1
1.2k
GitHub Copilot CLI で Azure Portal to Bicep
tsubakimoto_s
0
130
20年以上続く PHP 大規模プロダクトを Kubernetes へ ── クラウド基盤刷新プロジェクトの4年間
oogfranz
PRO
0
140
Phase08_クイックウィン実装
overflowinc
0
470
A4)シラバスを超えて語る、テストマネジメント
moritamasami
0
110
事例から紐解くSHIFT流QA支援 ~大規模プロジェクトの品質管理支援、QA組織立ち上げ~ / 20260320 Nozomu Koketsu
shift_evolve
PRO
0
110
Tebiki Engineering Team Deck
tebiki
0
27k
Kiroで見直す開発プロセスとAI-DLC
k_adachi_01
0
110
AIエージェント×GitHubで実現するQAナレッジの資産化と業務活用 / QA Knowledge as Assets with AI Agents & GitHub
tknw_hitsuji
0
120
OpenClaw を Amazon Lightsail で動かす理由
uechishingo
0
250
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
300
Laravelで学ぶOAuthとOpenID Connectの基礎と実装
kyoshidaxx
4
1.5k
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
840
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
190
What does AI have to do with Human Rights?
axbom
PRO
1
2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
240
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
How to train your dragon (web standard)
notwaldorf
97
6.6k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
75
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
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!"); }; } } ຊʹॻ͖͍ͨॲཧ͚ͩʹϑΥʔΧεͰ͖Δʂ
·ͱΊ
ςΩετ ·ͱΊ ▸ ΫϩʔδϟΛ͢͜ͱͰίʔυͷྔ͕ݮΔ ▸ ίʔυͷྔ͕ݮΔͷͰಡΈ͘͢ͳΔ ▸ ༨ܭͳίʔυΛॻ͔ͳͯ͘ࡁΉͷͰॻ͖͍ͨॲཧʹϑΥʔΧ ε͢Δ͜ͱ͕Ͱ͖Δ ▸
ͬͨͶʂͨ͑ͪΌΜʂ
ςΩετ શ෦Ϋϩʔδϟ͞Μͷ͓͔͛