import kotlin.math.PI
/**
* Data class to hold the calculated geometric metrics of a circle.
*/
data class CircleMetrics(
val diameter: Double,
val circumference: Double,
val area: Double
)
/**
* Calculates the diameter, circumference, and area of a circle.
*
* @param radius The radius of the circle (must be non-negative).
* @return A [CircleMetrics] instance containing the calculated results.
* @throws IllegalArgumentException if the radius is negative.
*/
fun calculateCircleMetrics(radius: Double): CircleMetrics {
// Guard clause: radius cannot be negative using Kotlin's built-in require() function
require(radius >= 0.0) { "Radius cannot be negative." }
val diameter = 2.0 * radius
val circumference = 2.0 * PI * radius
// Standard multiplication (radius * radius) is more efficient than Math.pow(radius, 2.0)
val area = PI * (radius * radius)
return CircleMetrics(diameter, circumference, area)
}
fun main() {
try {
val radius = 3.0
// Retrieve calculated metrics
val metrics = calculateCircleMetrics(radius)
// Output results formatted to 2 decimal places
println("Radius: $radius")
println("Diameter: ${metrics.diameter}")
println("Circumference: ${"%.2f".format(metrics.circumference)}")
println("Area: ${"%.2f".format(metrics.area)}")
}
catch (e: IllegalArgumentException) {
println("Error: ${e.message}")
}
}
/*
run:
Radius: 3.0
Diameter: 6.0
Circumference: 18.85
Area: 28.27
*/