Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

kotlin

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.

  • modify the initial con object
  • run some more functions (connect)
  • get another object back (inputstream)

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?

like image 939
LiTTle Avatar asked Oct 16 '22 19:10

LiTTle


1 Answers

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
}
like image 117
Nikolay Kulachenko Avatar answered Oct 27 '22 09:10

Nikolay Kulachenko