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
96
Mobile Programming Closure 2
MobileProgrammingの授業のスライドです
yuichiro_takahashi
October 24, 2018
Tweet
Share
More Decks by yuichiro_takahashi
See All by yuichiro_takahashi
App Clip - in a nutshell
yuichirokato
0
350
巨大な機能を VIPER + MicroViewController でいい感じに実装した話
yuichirokato
1
810
Mobile Programming Protocol Extension
yuichirokato
0
82
Mobile Programming Protocol
yuichirokato
0
86
Mobile Programming enum
yuichirokato
0
170
Mobile Programming Optional
yuichirokato
0
130
Mobile Programming Struct
yuichirokato
0
130
Mobile Programming Initializer Beta
yuichirokato
0
120
Mobile Programming Inheritance
yuichirokato
0
150
Other Decks in Technology
See All in Technology
AWS テクニカルサポートとエンドカスタマーの中間地点から見えるより良いサポートの活用方法
kazzpapa3
2
520
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
4
680
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全 / 20250625-aws-summit-aws-policy
opelab
9
1.1k
製造業からパッケージ製品まで、あらゆる領域をカバー!生成AIを利用したテストシナリオ生成 / 20250627 Suguru Ishii
shift_evolve
PRO
1
130
Github Copilot エージェントモードで試してみた
ochtum
0
100
【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術
cygames
0
1k
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
100
Navigation3でViewModelにデータを渡す方法
mikanichinose
0
220
AWS CDK 実践的アプローチ N選 / aws-cdk-practical-approaches
gotok365
6
720
生成AIでwebアプリケーションを作ってみた
tajimon
2
140
地図も、未来も、オープンに。 〜OSGeo.JPとFOSS4Gのご紹介〜
wata909
0
110
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
2
200
Featured
See All Featured
Facilitating Awesome Meetings
lara
54
6.4k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
We Have a Design System, Now What?
morganepeng
53
7.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
How GitHub (no longer) Works
holman
314
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
700
Faster Mobile Websites
deanohume
307
31k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
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!"); }; } } ຊʹॻ͖͍ͨॲཧ͚ͩʹϑΥʔΧεͰ͖Δʂ
·ͱΊ
ςΩετ ·ͱΊ ▸ ΫϩʔδϟΛ͢͜ͱͰίʔυͷྔ͕ݮΔ ▸ ίʔυͷྔ͕ݮΔͷͰಡΈ͘͢ͳΔ ▸ ༨ܭͳίʔυΛॻ͔ͳͯ͘ࡁΉͷͰॻ͖͍ͨॲཧʹϑΥʔΧ ε͢Δ͜ͱ͕Ͱ͖Δ ▸
ͬͨͶʂͨ͑ͪΌΜʂ
ςΩετ શ෦Ϋϩʔδϟ͞Μͷ͓͔͛