Skip to main content

KotlinBytes: The Spread(*) Operator



I have posted a similar article on a different style on linked-in which is a 2 min read, and it tries to cut to the point without any jibber jabbers ;) feel free to check it out (here is the link).

Since you have taken the long path with interest to the full story lets dive in, The current item of the sprint at work was offline-implementation for the feature i am already working on, so i had an implementation already for bulk get call for the list screen, and i wanted is same exact implementation but this time for the detail screen so a single get call, Like most people i started to duplicate the function and modify the param and tweek the implementation to match the new requirement but then i kinda realised that i will have to modify this later as i  move further, so i kinda looked around the internet and couldn't find any right solution except passing it as a list with only one item, this felt really wrong.

 I tried asking ChatGPT and she gave me complicated solutions which i did not like or understand, i thought why not use varargs with the type T and just convert the list to an array, since thats exactly what varargs are internally so i decided to try it out and for the SINGLE GET it worked gracefully but for BULK GET i tried to convert it to a typed array but the lint slapped a TypeMismatch error as shown in the image below: 


Now that's a dead end is what i thought, but before let me check with ChatGPT for a solution, and voila i discovered the Spread Operator in Kotlin, and definitely like me many may have no clue about this operator and if enlightened they could effectively  refractor their code base better as this avoids the need of duplicate code let that be less 5 lines of code or 50 then hell yeah we do it!

Here is something i did not discuss on the other small article that is useful (later added it), reserved to the special reader ;) though it does the magic, there is minor setback for this approach.

As you might already know vararg is a special type and it takes in single item, multiple items or arrays as we discussed above but the thing is it can also be empty. Can you go thorough the following code and find the caveat iam trying inferring?



Im sure you did, yeah since the lint and compiler will be quite if i don't pass any argument then it could silently carry a bug, but it can be easily debugged but you wont't be able to enforce it, but mostly all of us are conscious coders 😆 so lets hope no one messes this up..

Hope this article was helpful and you found it insightful, if there are issues or suggestions you are most welcome to share it below or via DM (eknath.dev) :)

Thanks for reading the raw content this far ✨

Comments

Popular posts from this blog

Introduction to Primitives - Java

2. Overview: There are eight primitive data types byte, short, int, long, float, double boolean, char. These eight data types store values as raw instead of Objects these primitives help to save memory to a great extent and simplify other processes as they are directly stored in the stack. Data Type Size(in bits) Minimum Range Maximum Range byte 8 -128 127 short 16 -32768 32767 int 32 -2147483648 2147483647 long 64 -9223372036854775808 9223372036854775807 float 32 -3.4e38 to -1.4e-45 1.4e-45 to 3.4e38 double 64 -1.8e308 to -4.9e-324 4.9e-324 to 1.8e308 boolean 1 - - char 16 space 65535 byte A byte has the capacity of 8 bits or 1 byte and it can store numbers between -2 7 and 2 7 -1 or simply -128 to 127. This is very useful while deali...

Chocolate Feast - Problem Solving - Hacker Rank Solution.

The expectation is to find the total number of choclate one can consume by taking full advantage of the offer, Here there are 3 inputs n which holds the value of initial amount of money for buying choclate, c is the cost price of each candy if paid by cash and m is the exchange rate for the candy. Inputs n Initial cash to buy candy. c Coast of each candy if paid by cas.h m Exchange rate for a new candy in offer. The initial count of choclate will be the cash / coast and the wrappers in hand will be the same value of choclate, and from there we loop through until the wrap count is less than the exchange rate, inside the loop the choclate count will still hold the same fourmula as before but divided with exchange rate. The wrap count is the tricky part... the wrap will be wrap/ exchange rate(the no. choclate) + the remainder of this division(THIS IS VERY IMPORTANT) because for example if the count of wrapper is 3 and the exchange rate is 2 you can only buy 1 c...

Collection Interface - Java Collections Framework - DSA

Most people consider the collection as the root interface of Collections Framework and it is true to a great extent but another part of Collections Framework is Map Interface, we will see that later, Most Common methods which are applicable to all collections are defined in this interface for example add() to add an element, size() to get the size and much more, below is a table of most common methods. Hierarchey of the Collection Interface. The Parent of Collection Interface is Iterator Interface and the Collection is base class for List Interface, Set Interface and Queue Interface, the respective classes which impliments either of the sub classes will also implement the defined methods from the Collection Interface, below are some of the commonly used methods. Defined Methods: Method Description add() This method returns a Boolean value true if it inserts the specified element in this collection....