Last Updated: August 18, 2017

Switch from Java to Kotlin


Description: In this post I'm gonna show some of the basic syntax and semantics difference while we use "KOTLIN" in your android application w.r.t JAVA(Java v/s KOTLIN).


So let's get started.



1. Variable Declaration
Java:
String name="coderconsole";

Kotlin:
val  name:String="coderconsole"

2. Casting

Java:
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);

Kotlin:
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager

3. Function Declaration

Java:

void methodDeclaration(){
    methodDeclaration("First Method ");
}

void methodDeclaration(String firstParam) {
    methodDeclaration(firstParam, "Second Method ");
}

void methodDeclaration(String firstParam, String secondParams) {
    System.out.println(firstParam + secondParams);
}


Kotlin:


fun methodDeclaration(){
    methodDeclaration("First Method ")
}

fun methodDeclaration(name : String){
    methodDeclaration(name, "Second Method ")
}

fun methodDeclaration(first : String, second: String){
    println(first + second)
}


4. Static Functions and Variable

Java:

class DeviceUtils{
    static final String name = "coderconsole";

    public static String getAndroidId(Context context){
        return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    }
}



Kotlin:


class DeviceUtils {

    companion object {
        val name: String = "coderconsole"
        @JvmStatic fun getAndroidId(context: Context): String = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
   }

}



5. Ternary


Java:
String ternary(String name) {
    return name.equalsIgnoreCase("coderconsole") ? " Ternary success" : " Ternary failed";
}

Kotlin:
fun ternary(name: String): String {
    return if (name.equals("coderconsole"))"Ternary success" else "Ternary failed"
}

6. Operators(this operators are only useful in kotlin)

a) Null Type(?)- variable can be made null only using null type operator

   val array: String = null /** Null cannot be the value of not null type**/ 
   val array: String? = null  /** Bingo! Will work now **/

b) Safe Type:(?.) - Helpful when we donot know when the variable be null.So instead of throwing NPE it return the value as null.

//The below code will return "customerId" if present else return null even if the "customerObject" is null.
fun safeTypeDemo(customerObject: JSONObject?): String?{
         return customerObject?.optString("customerId")     
}

c) Elvis Operator(?:) - Helpful when we want to return some not-null values, if the first result is null.
Java:
int elvisDemo(JSONObject result){
      if (result != null)
        return result.optInt("marks");
     else  return -1;
   }

Kotlin: 
fun elvisDemo(marksObject: JSONObject?): Int {
         return marksObject?.optInt("marks")?:-1      
}
                                 (or)
fun elvisDemo(marksObject: JSONObject?): Int = marksObject?.optInt("marks")?:-1


d) !! operator - throws Null Pointer when asked explicitly
//The below code will throw NullPointerException if customerObject is null.
fun npeTypeDemoDemo(customerObject: JSONObject?): String{
         return customerObject!!.optString("customerId")     
}


7. Loops
a) for loop:
Java
void forLoopDemo(List mList) {
        for (String item : mList)Log.d("Loop", item);
    }

Kotlin
fun forLoopDemo(mList: List) {
       for (item in mList) Log.d("Loop", item)
    }

b) while/do-while: - there is no syntactical difference from Java.

8. Switch Case
Java
void switchCaseDemo(int type) {
    switch (type){
        case 0:
            Log.d("switch", "value - " + type);
            break;
        case 1:
            Log.d("switch", "value - " + type);
            break;
        default:
            Log.d("switch", "value default");
            break;

    }
}

Kotlin
fun switchCaseDemo(type: Int) {
    when (type) {
        0 -> Log.d("switch", "value - " + type)
        1 -> Log.d("switch", "value - " + type)
        else -> Log.d("switch", "value default")
    }
}


9. Extends/Implements

//This sample contains abstract class and an interface to printData.
public abstract class AbstractA {
    public void printAbstractData(String data){
        System.out.println(data);
    }
}
public interface InterfaceA {
    public void printData(String data);
}


public class ExtendsImpDemo extends AbstractA implements InterfaceA {
    @Override    public void printData(String data) {
        printAbstractData(data);
    }
}


Kotlin

abstract class AbstractA{
    public fun printAbstractData(data: String){
        println(data)
    }
}

interface InterfaceA{
    fun printData(data: String)
}

class ExtendsImpDemo : AbstractA(), InterfaceA {
    override fun printData(data: String) {
        printAbstractData(data)
    }
}


10. Iterating JSONArray

Java:
void arrayTest(JSONArray jsonArray) {
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.optJSONObject(i);
        Log.d("ArrayTest", jsonObject.optString("name"));
    }
}

Kotlin:
fun arrayTest(jsonArray: JSONArray){
    jsonArray.items<JSONObject>().forEachIndexed { i, jsonObject ->
        Log.d("ArrayTest", jsonObject.optString("name"))
    }
}

Kotlin is an awesome language and very fun to write code in it.
For further reference you can try https://try.kotlinlang.org

For more updates follow us on -  Twitter

14 comments :

  1. Kotlin over-states the fact it is easy thanks to its clean syntax. Contrary to its claim, the example provided above: ( quoted below )

    fun arrayTest(jsonArray: JSONArray){
    jsonArray.items().forEachIndexed { i, jsonObject ->
    Log.d("ArrayTest", jsonObject.optString("name"))
    }
    }

    It is hard to read, very cluttered, difficulty for average human eyes with this extremely simplified code snippet. What is the practical purpose of "i" on the Lambda expression?


    ReplyDelete
  2. Well Jiohn, kotlin is very consise to write as claimed and its true. The practical purpose of the example is to differentiate how we can iterate JSONArray in Java and kotlin. 'i' is the index we can get while iterate JSONArray.

    ReplyDelete
  3. Great info! I recently came across your blog and have been reading along. I thought I would leave my first comment. I don’t know what to say except that I have. best touch switch company

    ReplyDelete
  4. I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post. cable Mesh manufacturers in Pakistan

    ReplyDelete
  5. Great read!! Thanks for a headstart.

    ReplyDelete
  6. Great read!! Thanks for a headstart.

    ReplyDelete
  7. My brother suggested I would possibly like this blog. He was once entirely right. This submit actually made my day. You can’t believe just how so much time I had spent for this information! Thank you! free udemy courses to learn kotlin

    ReplyDelete
  8. you use a fantastic blog here! want to make some invite posts on my blog? best assignment provider in Malaysia

    ReplyDelete
  9. Hdpcgames is the latest version offered by Adobe. There are 2 versions of Adobe Photoshop. One is the basic version for photo editing and the second is the latest and advanced version with all the latest tools.The latest version is called Adobe Assassin’s Creed Valhalla Free Download driver easy license key download miracle box Keygen adobe lightroom Keygen avast cleanup premium key Korean Dramas Renee PassNow Download silhouette studio business edition license key free autodesk fusion 360 crack dolby atmos activation code free There are many additional features that this version offers, whereas the basic version does not offer these features. So in my opinion, download this photo editing software from below download button with free crack.The latest version is called Adobe Photoshop 2019 Crack. There are many additional features that this version offers, whereas the basic version does not offer these features. So in my opinion, download this photo editing software from below download button with free crack.

    ReplyDelete
  10. NoteBurner Registration Code is an application that can be used to convert music files to MP3 format. Substance Painter With Crack Full Key even converts songs from the iTunes Music Store to other more compatible formats. FPS Monitor Activation Key works a little differently than other products; It is a virtual CD burner. Pianoteq Activation Key should also be used with a media player that can burn CDs. Causes the media player to “burn” the song as a file on the storage device instead of an actual CD / DVD.

    ReplyDelete
  11. I like your all post. You have done really good work. Thank you for the information you provide, it helped me a lot. I hope to have many more entries or so from you.
    Very interesting blog.
    FastStone Photo Resizer Crack
    Proxifier Crack
    Renee Passnow Crack
    System Mechanic Pro Crack
    Sketch Crack

    ReplyDelete
  12. For your electrical wellbeing, consistently go to all preparatory lengths prior to working apparatuses. lighting

    ReplyDelete

Your comments are valuable for us !!!