Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kotlin: Pass ranges in function as arguments

Tags:

kotlin

Hello is it possible to pass range in Kotlin function just like in python? I've just started learning Kotlin but I am a little bit stuck

I wish i could pass somethind like

my_gauge = Gauge('test_name',1..200, 201..300, and etc.)

for example I have a Gauge object which rotates on the base

class Gauge(val gauge_name: String,
            val red_value: Float, 
            val orange_value: Float,
            val yellow_value: Float,
            val green_value: Float,
            var current_value: Float,
            val min_value: Float,
            val max_value: Float) {

    val gauge_green = 0xFF66C2A5.toInt()
    val gauge_yellow = 0xFFFDD448.toInt()
    val gauge_orange = 0xFFF5A947.toInt()
    val gauge_red = 0xFFD53E4F.toInt()

    val min_rotation: Int = 0;
    val max_rotation: Int = 300;
    val ratio = max_rotation / max_value;

    fun calculate_rotation(): Int {
        return (current_value * ratio).toInt()
    }

    fun get_color(): Int {
        if (current_value >= red_value) {
            return gauge_red
        }
        if (current_value > orange_value) {
            return gauge_orange
        }

        if (current_value > yellow_value) {
            return gauge_yellow
        }

        return gauge_green
    }


}

I've just realized that it wont work with this data instead it will be better to build my logic around ranges

So my question is How to pass ranges as a param in class/function (instead of floats)

PS: The function get_colors is not correct I will fix it once I can pass ranges with when(current_value) statement

like image 603
ThunderHorn Avatar asked Oct 25 '25 03:10

ThunderHorn


1 Answers

Yes, the type of a range produced by .. is ClosedRange<T>:

fun foo(floatRange: ClosedRange<Float>) {
    println(floatRange.random())
}

// Usage:
foo(1f..10f)

For integer ranges, you may prefer IntRange over ClosedRange<Int> because it allows you to use it without the performance cost of boxing by using first and last instead of start and endInclusive. There is no unboxed version for other number types.

like image 59
Tenfour04 Avatar answered Oct 28 '25 04:10

Tenfour04