Wolltest du schon immer die Vorteile und Ideen von Scala in deinen Java oder Kotlin Projekten nutzen? Dann ist Vavr (ehemals Javaslang) genau die richtige Bibliothek für dich.
Anhand echter Projektbeispiele schauen wir uns den Nutzen an, den Vavr mit seinen syntaktischen Erweiterungen und Features bei der täglichen Arbeit bietet. Wir schauen uns Value Types, echte funktionale Datentypen an und werden lernen, wie wir Exceptions sinnvoller behandeln können. Alles für besser wartbaren und sauberen Code!
Vavr bietet die Möglichkeit, die Vorteile objekt-funktionaler Programmierung zu nutzen, ohne Java den Rücken kehren zu müssen.
38. @koenighotzePainting by Gustav Courbet
java.lang.UnsupportedOperationException at
java.util.Collections$UnmodifiableCollection
.add(Collections.java:1055)
at java.util.stream.AbstractPipeline.<init>
(AbstractPipeline.java:203)
at java.util.stream.ReferencePipeline.<init>
(ReferencePipeline.java:94)
50. @koenighotzePainting by Gustav Courbet
java.lang.IllegalStateException:
stream has already been operated
upon or closed
at java.util.stream.AbstractPipeline.<init>
(AbstractPipeline.java:203)
at java.util.stream.ReferencePipeline.<init>
(ReferencePipeline.java:94)
95. @koenighotze
Strings that are
valid IBANs
public static String check(String iban){
if (validationMagic(iban)) {
return iban;
}
throw new IllegalArgumentException(“Peng”);
}
Partial
function
98. @koenighotze
Strings that are
valid IBANs
Total
function
lift()
All possible
strings
public static String check(String iban){
if (validationMagic(iban)) {
return iban;
}
throw new IllegalArgumentException(“Peng”);
}
Partial
function
116. @koenighotze
“It’s just like the Schrodinger’s cat story,
you keep working with the box and delay
opening it up until it’s completely necessary
to know what’s happening in there.”
— Maurício Linhares
121. @koenighotze
Declarative, infinite test cases
Have you tested for all characters…
…even for 💩?
Have you tested usernames like…
౧ప唆⏑쀋䯰㨼ᮁ娤즶?搃蘸阁뺬ᡧ㫈葷㖒ܪ匘ᤫ䳴㻅
댇껓痯믶㙃銐璚풔랾ᄰ 䩰삀싲闆䩟嗀嗀侀
127. @koenighotze
2017-03-21 10:45:59.913 INFO 45701 --- FrameworkServlet '': initialization started
2017-03-21 10:45:59.925 INFO 45701 --- FrameworkServlet '': initialization completed in 12 ms
Storing User@217b0952[username=rwxbeoigyesbeqqz,email=W`a@0c..-.--db-.T5-.2-g,
Storing User@4e6280de[username=vptafghfwuwwrwall,email=sByP@6jLA4.J.1c..5h269O3-1M6-c6...-.-,,,
Storing User@2fca282c[username=qmhkjdtvbtjzfciwcceqgzfznzkhhcokiyoipdefbr,email=Q96!@6.n8.
Storing User@64d53f0d[publicId=e9d7a121-9f23-483a-828a-f9e3045fc297,username=unflrpvztxtmi...
...
Storing User@1b10f60e[publicId=6f084c18-415c-42c4-b1a8-00c5c1fc9e67,username=xwhpdpjowirsmjym...
Storing User@4b916cc2[publicId=a2b9db2c-0189-4fe8-843d-e709ef3886fa,username=yxdidpexnayyjpzo...
Should not go boom: OK, passed 1000 tests in 3719 ms.
128. @koenighotze
Should not go boom: Falsified after 23 passed tests in 3005 ms.
java.lang.AssertionError: Expected satisfied check result but was Falsified(…,
sample = ( 풧 ꜏, 燤䠽뾌密ᵓ뫶খᄀ ꌎ ⬆鹮 라鄽뾮魨 붐맧놌 엍첮Ԩ䏨
➰ìឧ寅罟 溌椡ﲡ셋欙밶ῴﯯ缲ꢶꇞ⌽ꪂ惗 쎂蘄펮뎷粻뵞?푠쏽쥎,
fzqlbkljxhfrghllzcthvgqiglaabihkzgsqwgfcichamyonmayiewwsfwmw
ntzvozqqydkqillhpyi, +g4@F.8yOkj.-....C6GUP..3.4.-..h-
V74.E.-----2T.z97..3f1ZM6))