What is a Coroutine?

What is actually a Coroutine?

Guowei Lv

2 minute read

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?

Guowei Lv

2 minute read

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.

Guowei

1 minute read

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:

Guowei Lv

1 minute read

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)) } }