214 Views
December 15, 18
スライド概要
2018/12/15 に「第5回 HAKATA.swift」で発表した資料をアップしました。2018/10/22 に放送した Podcast『イニシャライザー Part 2』 (https://kepc.mookmookradio.com/podcast/53/) でお話しした中から生まれた疑問を、改めてまとめて発表しました。
※ Docswell での公開に移行する直前の Slideshare での閲覧数は 561 でした。
正統派趣味人プログラマー。プログラミングとは幼馴染です。
NPPLNPPLSBEJP ΠχγϟϥΠβʔ1BSU ۽୩༑ !FT@LVNBHBJ ୈճ)","5"TXJGUʙԬͰ4XJGUͷษڧձʙ
۽୩༑ 5PNPIJSP,VNBHBJ ⾣ 4XJGU͢Ͱ͖͕ޠݴʂ ⾣ ΈΜͳͰָ͠Ήษڧձ͕େ͖Ͱ͢ʂ ⾣ ϓϩάϥϛϯάͷָ͠͞Λ͍͖͍͑ͯͨɻ w ωοτϥδΦ w ษڧձͷํ։࠵ w ಉਓࢽଈചձ
)","5"TXJGUͷࢀՃ ॳճҎདྷɺ̔ϲ݄ͿΓ
લճ͔Βͷۙگ
ٕज़ॻయ̐நબམͪˠ͓ख͍ࢀՃ ΞΩόɾεΫΤΞ ࣥ͘͘චձͷ࠵ڞͷ ື͞ΜʹरͬͯΒͬͯ ͓ख͍ࢀՃܾఆ ㊗
ࣥ͘͘චձ̍पه೦ϐΫχοΫ ԣɾࢁԼެԂ ϐΫχοΫͰɺࣥච
88%$!4BO+PTF ʙ ͪΐͬͱܜٳ
4XJGU%BZ!ؠख ୌࢢ*16Πϊϕʔγϣϯηϯλʔ ֶੜͷʹؾ׆৮Εͨ̍ɺՆ
ίϛοΫϚʔέοτ ౦ژϏοάαΠτ ٕज़ऀɺٕज़ॻయʹྲྀΕ͔ͨʜʁ
ٕज़ॻయ̑ ାαϯγϟΠϯγςΟ ৽ఱɺାͰେگ
ٕज़ܥಉਓࢽ ࣗඅग़൛ͱಉਓࢽଈചձ
͘͞ΒγϯσϨϥ ҎདྷɺԠԉத χίχίձٞ ՎͬͯΈͨ̇Ͱ८Γ⁊Θͤͨ ΞΠυϧάϧʔϓ ৽॓ͱळ༿Ͱݪ ϥΠϒ׆ಈதͬͯʜ͍͢͝ɻ
͘͞ΒγϯσϨϥೖ ⾣ ΞΠυϧάϧʔϓʢ໊ʣ ⾣ શۂΦϦδφϧ ⾣ ౦Ͱڌ̎ژ׆ಈத w ৽॓ΞΠυϧεςʔδ w ळ༿ݪΞΠυϧεςʔδ ⾣ ΞΠυϧεςʔδͰண੮Ͱ؍ཡ ⾣ Ӧؒ࣌ۀɺҰൠʹ༦ํ͔Β·Ͱ ⾣ Իָੑॏࢹͷ׆ಈελΠϧʢʴΞΠυϧੑʣ ⾣ w ϥΠϒεςʔδ͕த৺ w ͔Θ͍Β͔͠͞Βͬ͠ͱΓͨ͠Ͱ·͡ײ w ΧϑΣλΠϜ͋ΓɺѲखձجຊͳ͠ ϑΝϯͷ͍ͷਂ͞ɺ͍ڧࣄऀҙ͕ࣝҹత ൴ঁͨͪͷඳ͘ੈքʹɺࣗͷ͍ඳ͘ϓϩάϥϛϯάษڧձͷlཧz͕ॏͳͬͯ͡ײΔ
ࠓޙͷ༧ఆ
ࣥ͘͘චձ ʙٕज़ܥಉਓࢽʗࢽۀɾൃදࢿྉɾϒϩάʙ ग़ு൛3&7ʙ3&7։࠵ IUUQTUFDICPPLNFFUVQDPOOQBTTDPN Ҏ߱ͷ։࠵༧ఆ ⾣ ˑग़ு൛3&7!ਆాਆอொ ⾣ ˑग़ு൛3&7!ਆాਆอொ ⾣ ˑग़ு൛3&7!౦ژࠇ
IUUQLFQDNPPLNPPLSBEJPDPN
NPPLNPPLSBEJP NPPL ۽୩ͱ៸໘͕ϓϩάϥϛϯάίʔυͷ͔Β ௌ͑ͯ͘͜ΔʹࣖΛָ͚ͯ͠ΉϥδΦ ຖ݄ୈ̎ɾୈ̐ ݄༵ ʹ৴ IUUQLFQDNPPLNPPLSBEJPDPN ⾣ ୈ ීஈɺϓϩάϥϜͬͯ࡞Γ·͔͢ʁ ⾣ ୈ 4XJGU%JBHOPTUJDTελΠϧ ⾣ ୈ ࠶ߟ4XJGU-JOU ⾣ ୈ ΠχγϟϥΠβʔ1BSU ⾣ ୈ ٕज़ॻయ̑ɾग़లه೦εϖγϟϧճ ⾣ ୈ ΠχγϟϥΠβʔ ⾣ ୈ ٕज़ಉਓࢽͷ࡞Γํ ⾣ ୈ ίʔσΟϯάنΛ࡞ͬͯΈ͍ͨͳ
NPPLNPPLSBEJP ΠχγϟϥΠβʔ 4XJGUͷΠχγϟϥΠβʔʹ͍ͭͯ ୈճͱୈճΛ߹Θͤͯ΄Ͳ ΠχγϟϥΠβʔͷجຊΛ෮श w ͦͦΠχγϟϥΠβʔͱ w ΠχγϟϥΠβʔʹ՝ͤΒΕׂͨ w ܧঝઌͰΠχγϟϥΠβʔΛ࣮ͨ͠ͱ͖ͷڍಈ
NPPLNPPLSBEJP ΠχγϟϥΠβʔ ์ૹͰɺ͔͚͛ΒΕͨ̎ͭͷٙ 0CKFDUJWF$͕བྷΜͩͱ͖ɺ มMFUͷ͕ॻ͖ΘΔ͜ͱ͕͋Δ ೋͭͷ͕ؔಉ͡"1*ʹͳΔͱ͖ ͲͪΒͷ͕ؔݺΕΔͷ͔
NPPLNPPLSBEJP ΠχγϟϥΠβʔ1BSU
ΠχγϟϥΠβʔ1BSU 0CKFDUJWF$͕བྷΜͩͱ͖ɺ มMFUͷ͕ॻ͖ΘΔ͜ͱ͕͋Δ
มMFUͷ͓͞Β͍ ⾣ มʹΛೖͰ͖Δͷ͚̍ͩ ⾣ ࠶ೖ͢ΔͱΤϥʔʹͳΔ // 値を書き込んだら let value = 10 // 変更はできない value = 20
มMFUͷ͕ มԽ͢ΔྫΛͯݟΈ·͠ΐ͏
ॻ͖ΘΔཧ༝ ⾣ ݪҼDPOWFOJFODFJOJUͷΦʔόʔϩʔυ ⾣ ܧঝઌͷJOJU͕࠶ͼݺΕΔՄೳੑΛੜΉ ܧঝઌͷEFTJHOBUFEJOJU TVQFSJOJU ੜݩͷDPOWFOJFODFJOJU TFMGJOJU ܧঝઌͷEFTJHOBUFEJOJU TVQFSJOJU ੜݩͷEFTJHOBUFEJOJU
%FTJHOBUFEJOJU͚̍ͩ ⾣ 0CKFDUJWF$JOJUͷछྨΛఆٛͰ͖ͳ͍ ⾣ 4XJGUJOJUͷछྨΛ໌֬ʹͯ͠ɺॳظԽͷྲྀΕΛ੍͢ޚΔ ܧঝઌͷEFTJHOBUFEJOJU TVQFSJOJU ੜݩͷDPOWFOJFODFJOJU TFMGJOJU JOJUJBMJ[FSEPFTOPUPWFSSJEFBEFTJHOBUFEJOJUJBMJ[FS GSPNJUTTVQFSDMBTT ܧঝઌͷEFTJHOBUFEJOJU TVQFSJOJU ੜݩͷEFTJHOBUFEJOJU
ΠχγϟϥΠβʔ1BSU ೋͭͷ͕ؔಉ͡"1*ʹͳΔͱ͖ ͲͪΒͷ͕ؔݺΕΔͷ͔
ಉ͡"1*ͰҟͳΔؔͱ ⾣ ยํɺطఆ͖ͭͷҾ͋Γ ⾣ ยํɺҾͳ͠ struct Value { init(v: Int = 7) init() } ͲͪΒͱinit()Ͱͼݺग़ͤΔ
ͳΜ͔ɺ͋Ϳͳͦ͏ʁ
લఏ طఆ͖ͭͷͷ͚ͩͳΒɺͦΕ͕ݺΕΔ ⾣ ยํɺطఆ͖ͭͷҾ͋Γ ⾣ ยํɺҾͳ͠ struct Value { init(v: Int = 7) } Value() // init(v:) が呼ばれる
Q1.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ ยํɺطఆ͖ͭͷҾ͋Γ ⾣ ยํɺҾͳ͠ struct Value { init(v: Int = 7) init() }
A1.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ ยํɺطఆ͖ͭͷҾ͋Γ ⾣ ยํɺҾͳ͠ struct Value { init(v: Int = 7) init() }
Q2.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ ܕͷఆٛͰɺطఆ͖ͭͷҾ͋Γ ⾣ ܕͷ֦ுͰɺҾͳ͠ struct Value { init(v: Int = 7) } extension Value { init() }
A2.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ ܕͷఆٛͰɺطఆ͖ͭͷҾ͋Γ ⾣ ܕͷ֦ுͰɺҾͳ͠ struct Value { init(v: Int = 7) } extension Value { init() }
Q3.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ ͦΕͧΕΛผϑΝΠϧʹࡌه ⾣ "QQ%FMFHBUFͰinit()Λ࣮ߦ struct Value { init(v: Int = 7) } extension Value { init() }
A3.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ ͦΕͧΕΛผϑΝΠϧʹࡌه ⾣ "QQ%FMFHBUFͰinit()Λ࣮ߦ struct Value { init(v: Int = 7) } extension Value { init() }
ʙ্ڃฤʙ
લఏ ϞδϡʔϧΛ͑ͨΦʔόʔϩʔυ ⾣ Ϟδϡʔϧ%FpOFʹܕͷఆٛɺطఆ͖ͭͷҾ͋Γ ⾣ Ϟδϡʔϧ&YUFOEʹܕͷ֦ுɺҾͳ͠ Define.framework Extend.framework public struct Value { import Define public init(v: Int = 7) public extension Value { } public init() }
Q4.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ "QQ%FMFHBUFͰ%FpOFͱ&YUFOEΛΠϯϙʔτ ⾣ "QQ%FMFHBUFͰinit()Λ࣮ߦ AppDelegate import Define import Extend class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(_ n: Notification) { Value()
Q5.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ 4ͷίʔυͦͷ·· ⾣ 7JFX$POUSPMMFSͰ%FpOF͚ͩΛΠϯϙʔτͯ͠init()Λ࣮ߦ ViewController import Define class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() Value()
Q6.JOJU ͲͪΒ͕ͼݺग़͞ΕΔʁ ⾣ ͷίʔυͦͷ·· ⾣ "QQ%FMFHBUFͷ&YUFOEͷΠϯϙʔτΛআͯ͠init()Λ࣮ߦ ViewController import Define import Extend class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(_ n: Notification) { Value()
IUUQLFQDNPPLNPPLSBEJPDPN
&OKPZ4XJGU 5IBOLZPV ۽୩༑ !FT@LVNBHBJ