Skip to content

Latest commit

 

History

History
122 lines (85 loc) · 2.65 KB

README.md

File metadata and controls

122 lines (85 loc) · 2.65 KB

Maven License: MIT CI Status

Kotlin Extensions

Useful Kotlin extensions

Installation

Gradle (Kotlin)

repositories {
    mavenCentral()
}

dependencies {
    implementation("dev.botta:kotlin-extensions:1.0.2")
}

Gradle (Groovy)

repositories {
    mavenCentral()
}

dependencies {
    implementation 'dev.botta:kotlin-extensions:1.0.2'
}

Maven

<dependency>
    <groupId>dev.botta</groupId>
    <artifactId>kotlin-extensions</artifactId>
    <version>1.0.2</version>
</dependency>

Any Extensions

  • fun Any?.ifNull(block: () -> Unit)
  • fun <T: Any> T?.ifNotNull(block: (T) -> Unit)
  • fun Any?.throwIfNull(block: (T) -> Throwable)
user.ifNull { println("User is null") }

user.ifNotNull { println("User is not null") }

user.throwIfNull { UserRequiredError() }

Boolean Extensions

  • fun Boolean.ifTrue(block: () -> Unit)
  • fun Boolean.ifFalse(block: () -> Unit)
  • fun Boolean.throwIfTrue(block: () -> Throwable)
  • fun Boolean.throwIfFalse(block: () -> Throwable)
condition.ifTrue { println("Condition is true") }

condition.ifFalse { println("Condition is false") }

(fromDate > toDate).throwIfTrue { InvalidDateRange() }

(fromDate < toDate).throwIfFalse { InvalidDateRange() }

Generic Extensions

  • fun T.alsoIf(condition: Boolean, block: (T) -> Unit)
User().alsoIf(addUser) { userRepository.add(it) }

Iterable Extensions

  • fun <T> Iterable<T>.each(action: (T) -> Unit)
users.each { println(it.name)}

List Extensions

  • fun List<Any>.stringArray(): Array<String>

String Extensions

  • fun String.toSnakeCase(): String
  • fun String?.throwIfNullOrBlank(block: () -> Throwable)
  • fun String.lastWord()
"myName".toSnakeCase() // returns "my_name"
email.throwIfNullOrBlan { EmailRequiredError() }
"Some sentence".lastWord() // returns "sentence"

MutableLazy

var user by mutableLazy { fetchUser() }
user = fetchOtherUser()

DetailsExt

fun address(addDetails: DetailsExt<AddressBuilder>): Address {
    return AddressBuilder().also(addDetails).build()
}

val myAddress = address { street("Western Avenue"); city("New York") }