
Exercise: Person details display
Your task is to implement formatPersonDisplay function: It should have String result type and the following parameters:
nameof typeString?and default valuenull.surnameof typeString?and default valuenull.ageof typeInt?and default valuenull.
Beware! Parameter types should include
?, so those should beString?andInt?instead ofStringandInt. This is because we want to allow passingnullas a parameter value. This will be explained in the chapter Nullability.
Function should return a string in the following format: "{name} {surname} ({age})". If any of the parameters is null, it should be omitted from the result. If all parameters are null, it should return an empty string.
Here are some examples of how the function should work:
println(formatPersonDisplay("John", "Smith", 42)) // John Smith (42) println(formatPersonDisplay("Alex", "Simonson")) // Alex Simonson println(formatPersonDisplay("Peter", age = 25)) // Peter (25) println(formatPersonDisplay(surname="Johnson", age=18)) // Johnson (18)
This problem can either be solved in the below playground or you can clone kotlin-exercises project and solve it locally. In the project, you can find code template for this exercise in essentials/functions/PersonDisplay.kt. You can find there example usage and unit tests.
In this project, example usage and unit tests are commented not to prevent other files from compilation. To uncomment them, select commented lines and use command + / on Mac (Ctrl + / on Windows)
Hint: You can use trim function on a string to remove leading and trailing whitespace characters.
Once you are done with the exercise, you can check your solution here.
Playground
import org.junit.Test import kotlin.test.assertEquals // TODO fun main() { println(formatPersonDisplay("John", "Smith", 42)) // John Smith (42) println(formatPersonDisplay("Alex", "Simonson")) // Alex Simonson println(formatPersonDisplay("Peter", age = 25)) // Peter (25) println(formatPersonDisplay(surname="Johnson", age=18)) // Johnson (18) } class PersonDisplayTest { @Test fun testFormatPersonDisplay() { val name = "John" val surname = "Smith" val age = 42 val expected = "John Smith (42)" assertEquals(expected, formatPersonDisplay(name, surname, age)) } @Test fun testFormatPersonDisplayWithoutAge() { val name = "Alex" val surname = "Simonson" val expected = "Alex Simonson" assertEquals(expected, formatPersonDisplay(name, surname)) } @Test fun testFormatPersonDisplayWithoutSurname() { val name = "Peter" val age = 25 val expected = "Peter (25)" assertEquals(expected, formatPersonDisplay(name = name, age = age)) } @Test fun testFormatPersonDisplayWithoutName() { val surname = "Johnson" val age = 18 val expected = "Johnson (18)" assertEquals(expected, formatPersonDisplay(surname = surname, age = age)) } @Test fun testFormatPersonDisplayWithoutNameAndSurname() { val age = 18 val expected = "(18)" assertEquals(expected, formatPersonDisplay(age = age)) } @Test fun testFormatPersonDisplayWithoutParameters() { val expected = "" assertEquals(expected, formatPersonDisplay()) } @Test fun testFormatPersonDisplayWithNullName() { val name: String? = null val surname = "Smith" val age = 42 val expected = "Smith (42)" assertEquals(expected, formatPersonDisplay(name, surname, age)) } @Test fun testFormatPersonDisplayWithNullSurname() { val name = "John" val surname: String? = null val age = 42 val expected = "John (42)" assertEquals(expected, formatPersonDisplay(name, surname, age)) } }