What is a Coroutine?
What is actually a Coroutine?
The first question we should ask when learning Kotlin Coroutine is: what is a Coroutine after all? Let’s go back to the Thread world and ask the same question, what is a Thread? Here is code that will create a simple Thread and start it: val thread = thread { } So the answer seems obvious, a Thread is just the Thread object returned. Easy. Can we say the same in the Coroutine world?
The title of this episode is called “Side effects”, but in my opinion, it’s all about how to move side-effects out of the function and make the function composable. Side effects in the body of the function If there is some side-effects in the body of the function, we can move the side-effect into the return of the function, and let the caller deal with it. func computeWithEffect(_ x: Int) -> Int { let computation = x * x + 1 print("Computed (computation)") return computation } We can move the stuff to print into the return type.
Monthly Favourite Songs
Jul 2024
When I was very young, like in primary school, I got a cassette of anime songs, I was so shocked and immediately fallen in love with. It’s a collection of songs from Macross 7. To this day, I have never watched that anime, but the songs are so touching I have to post it here. I found this amazing live concert that contains all the familiar melodies:
I’m starting a new series, mostly just me taking notes while I go through the PointFree videos. The pipe operator The |> operator is defined as: precedencegroup ForwardApplication { associativity: left } infix operator |>: ForwardApplication func |> <A, B>(x: A, f: (A) -> B) -> B { return f(x) } It can be used as:: func incr(_ x: Int) -> Int { return x + 1 } func square(_ x: Int) -> Int { return x * x } 2 |> incr |> square Function composition operator This operator is defined as: precedencegroup ForwardComposition { higherThan: ForwardApplication associativity: left } infix operator >>>: ForwardComposition func >>> <A, B, C>(_ f: @escaping (A) -> B, _ g: @escaping (B) -> C) -> ((A) -> C) { return { a in g(f(a)) } }