Giter Club home page Giter Club logo

lazy-cached's Introduction

LazyCached

Simple library, that adds possibility of caching to Kotlin's lazy.

Example

For example, imagine we have some resource-intensive operation:

import lazyCached

/**
 * Represents some operation, that requires a lot of time to execute with caching and lazy invocation.
 * On calling [result] it just forces thread to sleep for [sleepTime] milliseconds.
 * On changing [sleepTime] next [result] call should recalculate again.
 * @param startingSleepTime time in milliseconds for thread sleep.
 */
class SimpleCachedResourceIntensiveOperation(startingSleepTime: Long) {

    /**
     * Flag for caching
     */
    private var cached = false
    
    /**
     * Time in milliseconds for thread to sleep
     * Not final!
     */
    public var sleepTime = startingSleepTime
        set(value) {
            field = value
            cached = false
        }

    /**
     * Forces thread to sleep if [cached] is False.
     * Then sets [cached] flag to true and returns [sleepTime].
     * Else, just returns cached [sleepTime].
     */
    public val result: Number by lazyCached(
            {
                Thread.sleep(sleepTime)
                cached = true
                sleepTime
            },
            { !cached }
    )

}

In this case, on changing sleepTime it is required to recalculate result, but it is better to do it in a lazy way.

This problem is solved with lazyCached.

  • First argument of lazyCached delegate is same as for lazy.
  • Second argument is some condition, that returns True or False, where True forces first argument to be revoked again.
  • Third argument is same lock as for lazy.

More examples
Tests

Imports

Get into Gradle

Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Add the dependency

dependencies {
    implementation 'com.github.sikrinick:lazy-cached:v1.0.0'
}

Get into Maven

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

Add the dependency

<dependency>
    <groupId>com.github.sikrinick</groupId>
    <artifactId>lazy-cached</artifactId>
    <version>v1.0.0</version>
</dependency>

lazy-cached's People

Contributors

sikrinick avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.