Študijné materiály

Zvlášť v Androide sa stretnete s funkciami, ktoré majú obrovské množstvo argumentov s predvolenými hodnotami. Ukážka (skoro) naozajstnej funkcie:

fun TextField(  
    value: String,  
    onValueChange: (String) -> Unit,  
    modifier: Modifier.                          = Modifier,  
    enabled: Boolean                             = true,  
    readOnly: Boolean                            = false,  
    textStyle: TextStyle                         = TextStyle.Default,  
    keyboardOptions: KeyboardOptions             = KeyboardOptions.Default,  
    keyboardActions: KeyboardActions             = KeyboardActions.Default,  
    singleLine: Boolean                          = false,  
    maxLines: Int                                = if (singleLine) 1 else 10,  
    minLines: Int                                = 1,  
    visualTransformation: VisualTransformation   = VisualTransformation.None,  
    onTextLayout: (TextLayoutResult) -> Unit     = {},  
    interactionSource: MutableInteractionSource? = null,  
    cursorBrush: Brush                           = SolidColor(Color.Black)  
) {

V takomto prípade, ak chceme nastaviť povinné argumenty a argument singleLine na true, potom musíme vymenovať aj všetky ostatné nepovinné argumenty pred argumentom singleLine:

fun main() {
    TextField(
        "Text",                   // value
        { },                      // onValueChange
        Modifier,                 // modifier
        true,                     // enabled
        false,                    // readOnly
        TextStyle.Default,        // textStyle
        KeyboardOptions.Default,  // keyboardOptions
        KeyboardActions.Default,  // keyboardActions
        true                      // singleLine
    )
}

Namiesto vymenovania všetkých argumentov radšej používame vymenovanie argumentov, ktoré chceme nastaviť. Ostatné ostanú nedotknuté:

fun main() {
    TextField(
        value         = "Text",
        onValueChange = { },
        singleLine    = true
    )
}

Toto je ekvivalentný zápis k zápisu vyššie. Využívame ho aj vtedy, keď nie je úplne jasné, čo argument presne popisuje. Napríklad:

fun main() {
    "Hello World".substring(3, 5)                         // :(
    "Hello World".substring(startIndex = 3, endIndex = 6) // :)
}

Úlohy

Úloha 1

Zavolaj vlastnú funkciu s aspoň tromi parametrami v inom poradí pomocou named arguments.

Úloha 2

Vytvor funkciu vytvorPouzivatela s predvoleným vekom a pri volaní nastav iba meno a vek podľa názvu parametra.

Úloha 3

Prepíš nejasné volanie substring na volanie s parametrami startIndex a endIndex.