LiTTle
LiTTle

Reputation: 1881

Kotlin standard functions: run, with, let, also and apply

I am trying to understand the correct use of the functions (run, with, let, also, apply). Let's say we have the following initial code (I am using it for testing purposes):

con = urlGet.openConnection() as HttpURLConnection
con.readTimeout = 10000
con.connectTimeout = 2000 
con.requestMethod = "GET"
con.doInput = true
con.connect()
inst = con.inputStream

According to this image I modified it to:

con = urlGet.openConnection() as HttpURLConnection
inputStream = con.run {
   readTimeout = 10000
   connectTimeout = 2000
   requestMethod = "GET"
   doInput = true
   // Start the query
   connect()
   inputStream
}

But according to some guides I found, I think that I am doing multiple "jobs" there.

So, I am feeling that this is more correct:

    con = urlGet.openConnection() as HttpURLConnection
    con.apply {
           readTimeout = 10000
           connectTimeout = 2000
           requestMethod = "GET"
           doInput = true
        }
    inputStream = con.run {
           // Start the query
           connect()
           inputStream
        }

Are those functions so strictly separated?
Are there any guides (official or not) on how to use these functions?

Upvotes: 4

Views: 618

Answers (1)

Nikolay Kulachenko
Nikolay Kulachenko

Reputation: 4884

According to the official guildelines you should be using run because you return a different value from the block. So your first code is correct:

con = urlGet.openConnection() as HttpURLConnection
inputStream = con.run {
   readTimeout = 10000
   connectTimeout = 2000
   requestMethod = "GET"
   doInput = true
   // Start the query
   connect()
   inputStream
}

Upvotes: 2

Related Questions