Skip to content

Instantly share code, notes, and snippets.

@humbertodosreis
Last active January 14, 2020 04:51
Show Gist options
  • Save humbertodosreis/525dd6589e7619190774cbdd5c9480b0 to your computer and use it in GitHub Desktop.
Save humbertodosreis/525dd6589e7619190774cbdd5c9480b0 to your computer and use it in GitHub Desktop.
Aula Demo
; Parte I
; Objetivo: simbolos locais vs globais
; mostrar o exemplo de cálculo
(def total (* (- 1 0.10) (* 10 5)))
(println "Total", total)
; movemos a expressão para um expressão
(defn valor-totalizado [qtde valor]
(* (- 1 0.10) (* qtde valor)))
(println "Total" (valor-totalizado 10 5))
; para simplificar a expressão, colocamos o desconto em um simbolo
(defn valor-totalizado [qtde valor]
(def taxa-desconto (- 1 0.10))
(* taxa-desconto (* qtde valor)))
(println "Total" (valor-totalizado 10 5))
; O que ocorre se remover o simbolo taxa-desconto da função?
; explicar o conceito de escopo, falar sobre os pontos de problema
(def taxa-desconto (- 1 0.10))
(defn valor-totalizado [qtde valor]
(* taxa-desconto (* qtde valor)))
(println "Total" (valor-totalizado 10 5))
;para resolver isso, definimos uma váriavel local
;explicar que o escopo é limitado para a expressão
(defn valor-totalizado [qtde valor]
(let [taxa-desconto (- 1 0.10)
total (* qtde valor)]
(* taxa-desconto total)))
(println "Total" (valor-totalizado 10 5))
;Outro exemplo
(let [total 1]
(let [total 2]
(println total)) ;imprime 2
(println total)) ; imprime 1
; Parte II
; Objetivo: condicional if
; Para o cálculo anterior, o desconto somente deve ser aplicado se a quantidade for > 10
; Exemplo de condicional
(> 100 50)
(< 30 80)
(if (> 100 50)
(println "Maior")) ; Se falso,nil
; Exemplo com else
(if (> 100 50)
(println "Maior")
(println "Menor"))
(if-not (= 1 2) (println "Vai imprimir"))
(defn multiplo-de-3? [dividendo] (= 0 (mod dividendo 3)))
; Função atualizada
(defn valor-totalizado [qtde valor]
(let [taxa-desconto (- 1 0.10)
total (* qtde valor)]
(if (> qtde 10)
(* taxa-desconto total))))
(println "Total" (valor-totalizado 50 1))
(println "Total" (valor-totalizado 10 1))
; No exemplo anterior, se qtde <= 10, devolve nil
; Sempre a última expressâo é retornada
(defn valor-totalizado [qtde valor]
(let [taxa-desconto (- 1 0.10)
total (* qtde valor)]
(if (> qtde 10)
(* taxa-desconto total)
total)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment