//vararg: just like ...args in js class Stack<T>(vararg val items: T) { val elements = items.toMutableList() fun push(element: T) { elements.add(element) } fun pop(): T? { if (!isEmpty()) { return elements.removeAt(elements.size - 1) } return null } fun isEmpty(): Boolean { return elements.isEmpty() } } fun <T> stackOf(vararg elements: T): Stack<T> { return Stack(*elements) // spread opeator * } fun main() { val stack = Stack(3,4,2,6) println(stack.pop()) println(stack.pop()) println(stack.pop()) println(stack.pop()) println(stack.pop()) // null val stack2 = stackOf("HI", "Hello", "Bye") for(i in 1..3) { println(stack2.pop()) } }