6
respostas

Função fora do padrão.

Fui inventar de criar uma função na conta (não estava no cronograma programático) e desde então valores não têm batido (private fun, sugestão do programa). Agora estou num balaio de gato e não disponho de muitos recursos para sair dessa armadilha, se é que esse é o ponto que tem me crucificado. Segue parte do esquema, posto que o inteiro não é necessário, logo não afeta o sistema.

Tenho uma foto que pode ajudar com o conteúdo, caso tenha peso. Infelizmente não vejo recursos a disposição que viabilizem o envio do material.

fun main() { println("Bem vindo ao Bytebanking") val contaAlex = Conta() contaAlex.titular = "Alex" contaAlex.numero = 1000 contaAlex.saldo = 200.0 println(contaAlex.titular) println(contaAlex.numero) println(contaAlex.saldo) println("depositando na conta do Alex") // contaAlex.saldo += 50.0 contaAlex.deposita(50.0) println(contaAlex.saldo) println("sacando na conta do Alex") contaAlex.saca(250.0) println(contaAlex.saldo) println("saque em excesso na conta do Alex") contaAlex.saca(100.0) println(contaAlex.saldo) println()

var contaFran = Conta()
contaFran.titular = "Fran"
contaFran.numero = 1001
contaFran.saldo = 300.0
println(contaFran.titular)
println(contaFran.numero)
println(contaFran.saldo)
println("depositando na conta do Fran")

// contaFran.saldo += 100.0 // contaFran.deposita(contaFran, 100.0) contaFran.deposita(150.0) println("sacando na conta da Fran") contaFran.saca(100.0) println(contaFran.saldo) println("saque em excesso na conta da Fran") contaFran.saca(500.0) println(contaFran.saldo) println()

}

private fun Conta.saca(valor: Double) {

}

class Conta { var titular = "Alex" var numero = 0 var saldo = 0.0

//    fun deposita(conta: Conta, valor: Double) {

// conta.saldo += valor // // } fun deposita(valor: Double) { saldo += valor

fun saca(valor: Double){
        if(this.saldo >= valor) {
            saldo -= valor
        }
    }
}

}

6 respostas

Oi Victor, tudo bem com você?

Realmente, eu só removeria essa parte do private fun Conta.saca(valor: Double) que ficou um pouco estranha, já que dentro da classe Conta nós já temos o método fun saca(valor: Double). Caso queira criar uma nova função para a classe Conta, é só fazer da mesma forma que fizemos com deposita() e saca(), e declarar a função dentro das chaves da classe Conta.

Em relação às imagens, temos um artigo aqui na Alura que fala sobre como inserir imagens nas perguntas, aqui o instrutor até recomenda usar o site Imgur. Ou você também pode ver o vídeo do Paulo Silveira no Alura+, mais ou menos na metade do vídeo ele mostra como fazer o upload de imagens no Imgur para postar aqui no fórum.

Espero ter ajudado, se ficou qualquer dúvida é só avisar!

Bons estudos!!

Obrigado! Analiso assim que possivel. Tenho que aprender a usar isso fluidamente mesmo.

https://imgur.com/ZBRvGvD

Esta é a imagem - apesar de estarem invertidas a ordem das fotos -. Tenho feito isso e a função saca não é reconhecida. Gostaria de uma representação da fórmula correta para eu fazer um comparativo e saber onde tenho errado.

Ah, tenho julgado que não representa problema o layout diferente. Tenho organizado o que toca o Alex tudo junto. O mesmo se aplica a Fran. Tenho imaginado não ocasionar problemas com isso ao tomar cuidado com armadilhas que possa criar - meu irmão e orientador tem trabalhado com TI.

Opa, tudo bem Victor?

Olha, ainda bem que você citou isso. O link para o código da aula foi trocado, aqui está o código feito nessa aula!

Veja que implementando a função saca() dentro da classe Conta, podemos chamá-la sem problemas através da contaFran ou contaAlex:

class Conta {
    var titular = ""
    var numero = 0
    var saldo = 0.0

    fun deposita(valor: Double){
        this.saldo += valor
    }

    fun saca(valor: Double){
        if(saldo >= valor){
            saldo -= valor
        }
    }
}

Testa aí e depois me avisa se deu certo, acredito que implementando dessa forma o seu programa vai reconhecer o método saca()! :D

Fico no aguardo!

Perdão. Não tem apresentado erros. Me precipitei. Valores originais.

Opa, é isso aí, Victor. Estamos aqui para ajudar!

Vendo a imagem, agora entendi o que está causando os erros. rs

Como você tem vários arquivos com códigos repetidos, como o método testaCopiasEReferencias() ou até mesmo a classe Conta. O Kotlin não sabe qual deles ele deve executar e dá um erro de conflito.

Veja o primeiro erro por exemplo: Kotlin: Redeclaration: Conta. No Kotlin só podemos ter uma classe com o nome Conta num mesmo "espaço", para resolver isso você só poderia ter uma declaração de Conta no seu código. Claro, existem soluções para isso, mas que só serão vistas mais para frente no terceiro curso de Kotlin que vai apresentar os pacotes para você.

Em relação aos outros erros, eles são relacionados aos métodos que também estão se repetindo em vários arquivos e o Kotlin não sabe qual escolher na hora de chamar e acaba mostrando esses erros.

No momento, eu recomendaria escrever o código em apenas um único arquivo para evitar esses conflitos. Mas continue experimentando e aprendendo, se tiver qualquer dúvida volte para o fórum que estamos aqui à sua disposição! :D