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

Designer PDF Viewer - HackerRank Problems

Difficulty: EASY Problem : The objective here is to find the size of the highlighted area, and we are given the size's of all the alphabets, we have to find the largest alphabet in the highlighted word and then calculate the size of the rectangle so if the tallest character is 3 then the size of the box will be 3 * number of characters given. Visual representation of the selection : abc def ghij Inputs An array with the sizes of all alphabets a-z in order. A String of highlighted words. Important points to note The array which holds the height of each character in ascending order which means the arrays 0th index will have the height of a 1st index will have the height of b and so on and so forth in the end the hight of z will be there so it's easy to locate each character. A String with the highlighted word. This means we have got the characters inside the rectangle, all we have to find is ...

Literals of Base numbers in Java ( Octal , Hexadecimal, Decimal)

1. Overview: A literal key indicates the compiler how to interpret the value of the given data type, for numbers we can calculate the value by using Octal representation or hexadecimal representation but just typing out a hexadecimal value to an int will throw us an error because the compiler has no idea how to handle it but if we assign the java specified prefix for the required bases with some literals then the compiler will not throw us any error as it understands how to interpret the value.  Base Litrals Values Example Eg. Value Decimal none 0-9 int x = 10; x is 10 Octal 0 (zero) as the prefix 0-7 int x = 12; x is 10 Hexadecimal 0x or (zero) along with an x 0-9 and a-f or A-F int x = 0XA; x is 10 Binary or Base(2) Allowed Digits 0 and 1 int i = 10; and now the variable i has value 10. i...

Array List - Collections Framework in Java - DSA

Gist: An array list can store individual objects by following insertion order, here the initial capacity is 10 by default but can be modified as per the requirement, once the array list reaches its load factor then internal all the elements of the current array is copied to a new array with the new capacity and the reference variable will now be referring to this new array list and the old array will be dealt by the garbage collector. Hierarchical order Type of constructors Empty argument constructor or the default constructor is the same as invoking any other object here a new ArrayList is created with a default size of 10. Below is the most commonly used constructor by beginners and others alike. ArrayList array = new ArrayList(); //array has a capacity of 10 The default constructor above will allot only 10 slots but if you want the initial size to be 20 or 1000 you can do so with the following constructor this is ideal w...