Skip to content

Commit f0ebce3

Browse files
Add or functions
1 parent 2e7eee8 commit f0ebce3

File tree

5 files changed

+52
-0
lines changed

5 files changed

+52
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
### Added
66

7+
- `T?.or(other: T): T`
8+
- `T?.or(block: () -> T): T`
79
- `Iterable<T>.sixth(): T`
810
- `Iterable<T>.sixthOrNull(): T?`
911
- `Iterable<T>.seventh(): T`

kotlin-stdlib/api/android/kotlin-stdlib.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ public final class com/javiersc/kotlin/stdlib/StringsTransformKt {
209209
public final class com/javiersc/kotlin/stdlib/TKt {
210210
public static final fun ifNotNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
211211
public static final fun ifNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
212+
public static final fun or (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
213+
public static final fun or (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
212214
}
213215

214216
public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/util/Map, kotlin/jvm/internal/markers/KMappedMarker {

kotlin-stdlib/api/jvm/kotlin-stdlib.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ public final class com/javiersc/kotlin/stdlib/StringsTransformKt {
215215
public final class com/javiersc/kotlin/stdlib/TKt {
216216
public static final fun ifNotNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
217217
public static final fun ifNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
218+
public static final fun or (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
219+
public static final fun or (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
218220
}
219221

220222
public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/util/Map, kotlin/jvm/internal/markers/KMappedMarker {

kotlin-stdlib/common/main/kotlin/com/javiersc/kotlin/stdlib/T.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@ public inline fun <T> T?.ifNull(block: () -> Unit): T? {
99
if (this == null) block()
1010
return this
1111
}
12+
13+
public inline infix fun <T> T?.or(other: T): T = this ?: other
14+
15+
public inline infix fun <T> T?.or(block: () -> T): T = this ?: block()

kotlin-stdlib/common/test/kotlin/com/javiersc/kotlin/stdlib/TTest.kt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,46 @@ class TTest {
4747
assertFalse { isOne }
4848
assertTrue { isTwo }
4949
}
50+
51+
@Test
52+
fun or() {
53+
val aa = a.or { "aa" }
54+
val aaa = a.or("aaa")
55+
val bb = b.or { "bb" }
56+
val bbb = b.or("bbb")
57+
val eleven = one.or { 11 }
58+
val oneHundredEleven = one.or(111)
59+
val twentyTwo = two.or { 22 }
60+
val twoHundredTwentyTwo = two.or(222)
61+
62+
assertTrue { aa == "a" }
63+
assertTrue { aaa == "a" }
64+
assertTrue { bb == "bb" }
65+
assertTrue { bbb == "bbb" }
66+
assertTrue { eleven == 1 }
67+
assertTrue { oneHundredEleven == 1 }
68+
assertTrue { twentyTwo == 22 }
69+
assertTrue { twoHundredTwentyTwo == 222 }
70+
}
71+
72+
@Test
73+
fun infixOr() {
74+
val aa = a or { "aa" }
75+
val aaa = a or "aaa"
76+
val bb = b or { "bb" }
77+
val bbb = b or "bbb"
78+
val eleven = one or { 11 }
79+
val oneHundredEleven = one or 111
80+
val twentyTwo = two or { 22 }
81+
val twoHundredTwentyTwo = two or 222
82+
83+
assertTrue { aa == "a" }
84+
assertTrue { aaa == "a" }
85+
assertTrue { bb == "bb" }
86+
assertTrue { bbb == "bbb" }
87+
assertTrue { eleven == 1 }
88+
assertTrue { oneHundredEleven == 1 }
89+
assertTrue { twentyTwo == 22 }
90+
assertTrue { twoHundredTwentyTwo == 222 }
91+
}
5092
}

0 commit comments

Comments
 (0)