Skip to content

Instantly share code, notes, and snippets.

@marconvcm
Last active November 16, 2018 21:54
Show Gist options
  • Save marconvcm/6408269b8713ff63b64ec3ddeb5f8aec to your computer and use it in GitHub Desktop.
Save marconvcm/6408269b8713ff63b64ec3ddeb5f8aec to your computer and use it in GitHub Desktop.
package curso.android.trinopolo
fun Desconto.mostrar(
operacaoValor: Float,
saldo: Float) {
println("** Desconto ** $posicao: $operacaoValor | SALDO: $saldo ")
}
package curso.android.trinopolo
fun main(args: Array<String>) {
val TOTAL = 159.00f
val regras = arrayOf(
DescontoFixo(posicao = 1, fixo = 10f),
DescontoPercentual(posicao = 2, percentual = 0.9f),
DescontoFracinal(posicao = 3, fracao = 2f)
)
val carrinho = CarrinhoImpl(TOTAL, regras)
println("Entrada: $TOTAL")
val saldo = carrinho.calcular()
println("Total: $saldo")
}
fun Float.nomePromocao(): String {
return when(this) {
2f -> "Metade do preco!"
else -> "$this"
}
}
fun Desconto.mostrarPosicao() {
println("Minha posicao: $posicao")
}
interface Desconto {
val posicao: Int
fun aplicarDesconto(v: Float): Float
}
interface Carrinho {
val regrasDesconto: Array<Desconto>
}
class DescontoFixo (override val posicao: Int,
val fixo: Float): Desconto {
override fun aplicarDesconto(v: Float): Float {
val r = v - fixo
this.mostrar(v, r)
return r
}
}
class DescontoPercentual (override val posicao: Int,
val percentual: Float): Desconto {
override fun aplicarDesconto(v: Float): Float {
val r = v * percentual
this.mostrar(v, r)
return r
}
}
class DescontoFracinal (override val posicao: Int,
val fracao: Float): Desconto {
override fun aplicarDesconto(v: Float): Float {
val r = v / fracao
this.mostrar(v, r)
return r
}
}
class CarrinhoImpl(
val total: Float,
override val regrasDesconto: Array<Desconto>) : Carrinho {
fun calcular(): Float {
var v = total
for(d in regrasDesconto) {
v = d.aplicarDesconto(v)
}
return v
}
}
package curso.android.trinopolo
fun Float.dobro(): Float {
return this * 2f
}
fun Float.metade(): Float {
return this / 2f
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment