2
respostas

[Sugestão] Não seria when?

Na aula 5-6 sobre argumentos opções há esse pedaço de código:

val promoCode = backStackEntry.arguments?.getString("promoCode")
sampleProducts.find {
    it.id == id
    }?.let { product ->

    where(promoCode) {
        "ALURA" -> BigDecimal("0.1")
        else -> BigDecimal.ZERO
    }

val currentPrice = product.price

esse "where", não era para ser when?

2 respostas

Olá Rafael!

Obrigado por compartilhar sua dúvida sobre o uso do where no código apresentado na aula 5-6 do curso Jetpack Compose: navegando entre telas com o Navigation. Na verdade, o uso do where está correto nesse contexto.

O where é uma expressão do Kotlin que permite fazer uma verificação condicional em relação a um valor específico. No código apresentado, ele está sendo utilizado para verificar se o valor da variável promoCode é igual a "ALURA". Se for, é aplicado um desconto de 10% no preço do produto. Caso contrário, é aplicado um desconto de zero.

O when, por outro lado, é utilizado para fazer uma verificação condicional mais ampla, com várias possibilidades de valores. No caso desse código, o where é mais adequado, pois estamos verificando apenas uma única condição.

Espero ter esclarecido sua dúvida! Se tiver mais alguma pergunta, é só me dizer.

Espero ter ajudado e bons estudos!

Quando tentei replicar usando o where, recebi "Unresolved reference: where".

Sem contar que a variável "discount" não é inicializada em parte alguma antes do uso no código. Não encontrei o código com o when no github também.

Tem algum exemplo completo com o where?

O que usei que funcionou foi usando o when, esse daqui:

composable(
                                "${AppDestinations.ProductDetails.route}/{productId}?promoCode={promoCode}",
                                arguments = listOf(navArgument("promoCode"){nullable=true})
                            ) {backStackEntry ->
                                val id = backStackEntry.arguments?.getString("productId")
                                println(id)

                                val promoCode = backStackEntry.arguments?.getString("promoCode")



                                sampleProducts.find { id == it.id }?.let {product->

                                    val discount = when(promoCode){
                                        "ALURA" ->BigDecimal("0.1")
                                        else->BigDecimal.ZERO
                                    }
                                    val currentPrice = product.price

                                    ProductDetailsScreen(
                                        product = product.copy(price = currentPrice-(currentPrice*discount)),
                                        onNavigateToCheckout = {
                                            navController.navigate(AppDestinations.Checkout.route)
                                        }
                                    )
                                }?: LaunchedEffect(Unit){navController.popBackStack()}

                            }