Difference between intermediate & advanced Kotlin Programming

Kotlin programming
Kotlin programming

KOTLIN, the open-source programming language introduced in the year 2011, it been considered advantageous over JAVA as it is a cross-platform programming language that can be used for designing applications for iOS as well.

With the acceptance of Kotlin as the preferred programming language for android development in the year 2017, the popularity of KOTLIN has increased tremendously. Kotlin Programming can be categorised as intermediate and advanced depending upon the features that the programmer incorporates. In intermediate programming, only basic features are used whereas, in advanced programming, superior features are used.

Let’s go through the features under the two sub-categories.

Features of Intermediate Kotlin Programming:

1. Elimination of NULL pointer exception:

The most common error that developers encountered while coding in the android studio was the “NULL pointer exception”, it has been a pain in the neck for developers for decades as it has led to the crashing of their application. The introduction of Kotlin has eliminated this error by putting NULL ability front and centre. The Kotlin compiler enforces that variables cannot be set as NULL.
On the other hand, if you explicitly declare a variable as nullable, you can hold a NULL value, without the compiler getting alarmed.

2. Extension of default classes:

We can add our own features to the already existing classes with the help of Kotlin that simplifies development. You don’t need to create an entirely new class for just one extra variable or function, this saves time and you can have classes that are customised according to the developer’s needs. Anko is an example with libraries that make efficient use of extensions and create wrappers around Android APIs, to simplify development.

Anko is a set of helper functions that assist you to develop something with the minimum boilerplate code (code that has to be included in multiple places with little or no alteration). It’s further divided into sections that facilitate you to deal with Layouts, SQLite and Coroutines. This modularisation allows you to include only what you require from the pile.

3. Use of Collections:

Kotlin provides us with two different interfaces for working with collections.
The plain Collection interface manages the data access and then the Mutable Collection interface manages data modification. The read-only interface lets you check the size and contents of the collection as well as iterate over its items, whereas the Mutable Collection interface provides us with the plugins to add, remove and delete all the contents of the collection.


For example, if we created an array list of integers and declared the variable type to be collection events, then we would receive an unresolved reference error when attempting to invoke the add method. The compiler maps the Java collection to the appropriate Kotlin interface. This gives you a few additional options while creating objects.

For example, if you want to create a list, but you want that list to be read-only, then you would use the list of function to create it, but if you want it to be able to modify your list, then you would use the mutable list of function in the structures similar for other collection types like map and set. There are other methods also that are mutable, but don’t start with the word “mutable”.

For example:
Method “sortedMapOf” enables us to return a mutable map. This allows us to append items to our map, remove items as well as clear all items.

4. Using the “Filtering” operator:

Kotlin provides the user with various data manipulation function that helps them to eliminate boilerplate code and makes programming concise. Suppose we have to design an application that provides a premium feature for the people who are above the age of 18, the naive approach is to copy the list and iterate through the list and eliminate the not required users, but Kotlin provides us with the feature of selecting the required people from a given list and keeps the original list unaltered, this saves a lot of time and helps us to reduce code redundancy also.

This feature is also very helpful when it comes to implementing a search view to sort a recycler view or list view. In fact, we can find the values that are not included by using the negotiated filter, “filterNot”, which lets the user store elements that are not included in this lamda function. We can even specify the number of items that we want to include in our filtered list.

Features of Advanced Kotlin Programming:

1. Using “Geofences”:

Geofences create a hypothetical geographical fence via an application so that when the user leaves the location or is within the location specified radially by the application his presence or absence can be acknowledged and a notification can be sent to the authorized person in case of any illegal presence or absence.

Generally, geofences are created by authorities to keep an eye on individuals like by universities to monitor its students, offices to monitor its employees, but sometimes user themselves create a geofence so that as soon as they reach a particular location specified by its latitude and longitude value they may get a reminder like as soon as you a person comes closer to his laundry shop, he will get a reminder to pick up his stuff. We can have multiple geofences around 100 on a single application.

Some common applications of geofences are:

  1. By schools or universities to ensure that the students don’t leave the campus before time.
  2. By offices to see that their employees and interns don’t escape the work zone.
  3. By defence to see that no unwanted individuals are present in the confidential sector.
  4. By user to receive reminders as soon as he gets close to a location.
  5. Using “Coroutines”:
    It is a concurrency design pattern that simplifies codes that execute asynchronously. The first instance of coroutines was in Kotlin in version 1.3. In android coroutines deal with the major issues of the user:
  6. It deals with tasks that have a considerably high running time, and interfere in the execution of the main thread and leads to the crashing of the application.
  7. Safely calls the methods that are present in the main thread.
    Each Android application has got the main thread, if your function calls are not arranged accurately, the main thread is blocked which causes the application to crash. Generally, Server -Client operations, fetching, or inserting or updating data from the database or JSON parsing, these processes are time-consuming are should not be written in the main thread, there should be specific method written for them.
    In addition to invoking (or call) and return method of general functions, coroutines add two additional features:
  8. Suspend (suspend halts the execution and saves all the local variables.)
  9. Resume (resume continues execution of a suspended coroutine from the place where it was suspended.)
    Kotlin maintains a stack frame to keep a track of its coroutines. As soon as a coroutine is suspended, its address gets saved. When resuming, the stack frame is restored from where it was saved, and the function is resumed. Though it appears to be just like function calls, coroutines make sure that the main thread is not interrupted in any manner.
  10. Using “Animations”:
    Animation helps us to create a collection of images that are moving, they give an effect as if the objects were alive. Kotlin has got various XML and Kotlin libraries that helps the user to give a magnificent effect to the application, by making the objects to slide, using transient states, fading, using geometrical effects, etc. Kotlin provides us with an API to create animation, using ObjectAnimator, which are the basic building blocks of most Android animations. Property animations are used to animate View objects.
    Applications of animation in android applications include:
  11. Drawing the attention of the user on necessary notifications like “Money has been transferred” in case of money lending applications.
  12. Using patterns to deviate the attention of the user while threads with a long-running time are being executed.
  13. To avoid misunderstandings that the screen has frozen while some process is taking place.
  14. To make attractive UI designs for the splash screen, logo, etc.
  15. Using “Advanced Graphics”:
    We can create our own customized views by extension of the original view with the help of Kotlin libraries.
    Some of the methods are:
    1.onSizeChanged() method:
    Determine the view size at the first instance and each time it is altered call the method.
    2.onDraw() method
    Override it to draw the custom view, using a Canvas object styled by a Paint object.
    3.invalidate() method
    Call this method so that the onDraw() method is called again.
    4.drawBitmap().
    Used to draw bitmaps.
  16. setStyle() method.

Change the style of the shape as filled, outlined, or both.
6.drawText() method.
Used to draw text.
7.setColor().
Used to set the text colour.
These methods are generally used when the user is designing a GAME.

To read more about Kotlin, click here.