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
J2K failure story : UNIT
Search
Paraya
August 24, 2018
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
J2K failure story : UNIT
Paraya
August 24, 2018
More Decks by Paraya
See All by Paraya
J2Kコンバータをカスタマイズする ver: 5min
paraya3636
0
1.9k
J2Kコンバータをカスタマイズする
paraya3636
1
2.3k
命名おじさん
paraya3636
1
190
Step up Kotlin
paraya3636
0
100
DDD失敗談
paraya3636
0
150
Other Decks in Programming
See All in Programming
3Dシーンの圧縮
fadis
1
680
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
200
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
850
OSもどきOS
arkw
0
470
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
17
6.3k
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.5k
AIエージェントの隔離技術の徹底比較
kawayu
0
470
Inside Stream API
skrb
1
660
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
3.3k
RTSPクライアントを自作してみた話
simotin13
0
520
Oxlintのカスタムルールの現況
syumai
6
1k
Featured
See All Featured
Navigating Team Friction
lara
192
16k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Done Done
chrislema
186
16k
Raft: Consensus for Rubyists
vanstee
141
7.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
400
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
300
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Transcript
+BWB͔Β,PUMJOมͰ ͷࣦഊஊɿ7PJE➔6OJUฤ ,PUMJO'FTU !QBSBZB
ࣗݾհ ɾ ࡾӜՂ༞QBSBZB ɾ גࣜձࣾΠάχεॴଐ ɾ XJUI"OESPJE୲ ɾ ,PUMJOͷࠒ͔Β ఔ
,PUMJOԽίϯόʔτπʔϧ͕͋Δ͔Β؆୯ʂ ͱࢥ࣮ͬͯࡍͬͯΈΔͱࢁͷ͕ ͋Γ·͢
7PJEܕҾΛ࣋ͭϝιουͷ,PUMJO ԽͰɺΫϥογϡͤͯ͞͠·ࣦͬͨ ഊஊΛ͓͠·͢ɻ
Ҿ7PJEΛ࣋ͭϝιου public interface UseCase<Input, OutPut> { OutPut execute(Input input); }
public interface SaveActionUseCase extends UseCase<Void, Void> { } class SaveActionUseCaseImpl implements SaveActionUseCase { @Override public Void execute(Void input) { // save boolean value return null; } } δΣωϦΫεΛͬͨॲཧͰҾ7PJEʹOVMMΛ ड͚͢ͱ͍͏έʔε͕ଘࡏ͠·͢ ྫ͑$MFBO"SDIJUFDUVSFͰͷ6TF$BTF࣮
Ҿ7PJEϝιουΛ,PUMJOԽͯ͠ΈΔ interface SaveActionUseCase : UseCase<Unit, Unit> class SaveActionUseCaseImpl : SaveActionUseCase
{ override fun execute(input: Unit) { // save boolean value } } 6TF$BTFΛ,PUMJOԽͯ͠Έ·͢ ߋʹҾ7PJEΛ6OJUʹͯ͠Έ·ͨ͠ +BWBͷ7PJE,PUMJOͰ6OJUͰ͢͠Ͷ
Ҿ7PJEϝιουΛ,PUMJOԽͯ͠ΈΔ Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null:
method kotlin.jvm.internal.Intrinsics.checkParameter IsNotNull, parameter input ͔͠͠+BWB͔Β࣮ߦ͢Δͱ࣮ߦ࣌Τϥʔ *MMFHBM"SHVNFOU&YDFQUJPO͕ൃੜͯ͠͠·͏ʜ
6OJUʹ/VMMͷ֓೦͋Δ private void saveByJava() { saveActionUseCase.execute(null); } ,PUMJOͰݺͼग़ͯ͠ΈΔͱϏϧυΤϥʔʹͳͬ ͍ͯΔɻ6OJUԿͳ͍ঢ়ଶΛදݱ͍ͯ͠Δ͕ /PO/VMMͩͬͨɻ6OJUʹ/VMMͷ֓೦͕ଘࡏ͠
ͨʜʂ
6OJU*/45"/$&ΛͬͯΈΔ private void saveByJava() { saveActionUseCase.execute(Unit.INSTANCE); } private fun saveByKotlin()
{ saveActionUseCase.execute(Unit) } ݺͼग़͠ଆΛ6OJUΛ͢ܗʹॻ͖͑·͢ɻ 6OJUPCKFDUDMBTTͱͯ͠ఆٛ͞Ε͍ͯΔͷͰ ΠϯελϯεΛͤ·͢ ͜ΕΤϥʔى͖ͣҰݟͳͦ͞͏ʜ
,PUMJOԽͷӨڹൣғ private void saveByJava1() { saveActionUseCase.execute(Unit.INSTANCE); } private void saveByJava2()
{ saveActionUseCase.execute(null); // Ϋϥογϡ!! } ݺͼग़͠Օॴ͕ͭͳΒ͍͍͚Ͳɺෳ͋Δͱͦ ΕΒΛશ෦ॻ͖͑Δ࡞ۀ͕ඞཁͰ͢ɻ Ͱ͖Ε,PUMJOԽͰͷมߋɺ,PUMJOԽͨ͠Ϋ ϥεʹཹΊ͍ͨ
7PJE ·ͨ6OJU Λ͓͏ interface SaveActionUseCase : UseCase<Unit?, Unit> class SaveActionUseCaseImpl
: SaveActionUseCase { override fun execute(input: Unit?) { } } interface SaveActionUseCase : UseCase<Void?, Void?> class SaveActionUseCaseImpl : SaveActionUseCase { override fun execute(input: Void?): Void? { return null } } 6OJU ͷ΄͏͕ΑΓ,PUMJOΆ͍͕+,ίϯόʔτ ޙͷίʔυ7PJE ͷ΄͏͕͍ۙɻ͓ΈͰɻ
ࠓճͷࣦഊஊ͔ΒಘΒΕͨݟ ɾ 6OJUʹ/VMMͷ֓೦͕ଘࡏ͢Δɻ ɾ δΣωϦΫεͰ7PJE6OJUҾΛѻ͏ͳΒɺ +BWB͔Βͷݺͼग़͠Λߟྀͯ͠/VMMBCMFͷ 7PJE 6OJU ͷͲͪΒ͔ʹ͢Δඞཁ͕͋Δɻ ɾ
,PUMJOԽ͢Δࡍ,PUMJOԽͨ͠Ϋϥεʹมߋ ΛཹΊ͓͍ͯͨ΄͏͕Өڹൣғ͕গͳͯ͘˕
༨ஊ ,PUMJOԽ࣌ʹྑ͘ൃੜ͢Δ/VMMೖΫϥογϡ͍ͭͯ+,ίϯόʔ λΛΧεϚΠζ͢Δํ๏Ͱճආ͢Δ༰ΛҎલൃද͍ͯ͠·ͨ͠ɻ Α͚Εͪ͜ΒͷεϥΠυͥͻ IUUQTTQFBLFSEFDLDPNQBSBZB KLLPOCBUBXPLBTVUBNBJ[VTVSV
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ʂ ྑ͍,PUMJOϥΠϑΛʂ
XJUI"OESPJEJ04ΤϯδχΞΛେઈࢍืूதʂ ϕςϥϯ,PUMJO4XJGUΤϯδχΞ͕αϙʔτ͢ΔͷͰ ॳ৺ऀͰ,PUMJO4XJGUʹڵຯ͕͋ΔͳΒ ؾܰʹԠืͯ͠ΈͯͶʂ IUUQTXXXXBOUFEMZDPNQSPKFDUT ͠Ύͬͪΐ͏Μ