Portuguese, Brazilian subtitles

← Groovy Closures and Objects

Get Embed Code
4 Languages

Showing Revision 8 created 06/20/2016 by Udacity Robot.

  1. Agora que dominamos
    o básico, vamos dar uma olhada
  2. em recursos avançados
    do Groovy.
  3. O primeiro é chamado closure.
  4. O closure basicamente é um
    modo diferente de declarar uma função.
  5. Mas uma função que pode ser empacotada,
    passada adiante e atribuída a variáveis.
  6. Você declara uma apenas
    usando chaves como essas.
  7. Os closures são assim chamados
    porque também capturam as variáveis
  8. do ambiente de fechamento.
  9. Assim, esse valor de foo
    será sempre um milhão de dólares.
  10. Vamos tentar fazer a chamada.
    Como myClosure é uma função,
  11. podemos chamá-la colocando parênteses
    depois dela, vamos tentar.
  12. Excelente, aqui está.
  13. Temos instruções print
    de dentro do closure e o
  14. valor de foo é respeitado
    dentro do closure.
  15. Diferente das funções normais, os closures
    podem ser transmitidos para diferentes variáveis.
  16. Se declararmos bar, definindo-a igual
    a myClosure, e declararmos ainda
  17. outra variável baz, definindo-a
  18. igual a bar t0, podemos chamar
    baz pois baz é agora uma função.
  19. E pronto.
  20. O resultado de chamar baz é o
    mesmo de chamar myClosure.
  21. Certo, faremos algo bem
    complicado aqui, prepare-se.
  22. Closures têm uma sintaxe diferente
    para argumentos.
  23. Você coloca uma lista separada por vírgulas
    de seus argumentos do lado esquerdo de uma seta
  24. e faz o que quiser
    com os argumentos.
  25. Espero que esteja claro que isso
    na realidade é uma função que duplica
  26. suas entradas.
  27. O complicado é que o Gradle permite
    funções de ordens superiores.
  28. Ou seja, funções que usam como
    entrada outra função.
  29. Por exemplo, temos aqui applyTwice.
  30. Seu primeiro argumento é uma função e
    seu segundo argumento é apenas
  31. algum argumento a ser passado
    por essa função.
  32. E o retorno é uma função
    aplicada duas vezes ao argumento.
  33. Vamos conferir um exemplo.
  34. Se definirmos foo igual a 5 e
    aplicarmos doubleIt twice em foo.
  35. Vamos ver o que temos.
  36. Antes da execução, tente descobrir
    o que está acontecerá.
  37. Bem, o dobro de cinco é dez e o dobro
    de dez é 20.
  38. Demais.
  39. Vamos falar sobre listas em Groovy.
  40. Groovy permite uma sintaxe literal
    de lista muito simples e também permite
  41. alguns processamentos muito sofisticados.
  42. Por exemplo, podemos executar
    um closure para cada item em uma lista.
  43. Simplesmente definimos nosso closure.
  44. Nesse caso,
    é apenas imprimir cada item.
  45. E então chamamos myList.each e
    depois nosso closure.
  46. Vamos ver o que acontece.
  47. Aqui está.
  48. Cada item em nossa lista é impresso.
  49. Tem algumas coisas que podemos
    fazer para a sintaxe ser um pouco
  50. mais compacta.
  51. A primeira coisa é que
    podemos definir nosso closure em linha.
  52. Veja, não temos nenhum
    parênteses por aqui porque
  53. a sintaxe do Groovy é o máximo.
  54. Além disso, se um closure
    está usando apenas um argumento,
  55. por padrão esse argumento
    é chamado de it.
  56. Vamos tentar executar isso.
  57. E aqui está,
    acontece exatamente o esperado.
  58. Vamos falar sobre classes em Groovy.
  59. Groovy tem uma sintaxe simplificada
    para criar classes, mas as próprias
  60. classes são essencialmente
    Java.
  61. Então, aqui temos uma classe.
  62. Ela tem um membro variável,
    tem um método.
  63. Podemos criar uma nova,
    do mesmo modo que para Java,
  64. e podemos pedir que
    imprima uma saudação.
  65. Podemos mudar a saudação e pedir
    que imprima a saudação novamente.
  66. Groovy cria automaticamente getters e
    setters para todos os
  67. membros das variáveis.
  68. Vamos testar.
  69. E as saídas são as esperadas.
  70. Primeiro imprimir a saudação padrão,
    depois a personalizamos,
  71. e ele imprime a saudação personalizada.
  72. Os closures podem ter um objeto delegado.
  73. Vamos verificar esse
    closure que criamos aqui.
  74. Está tentando atribuir a
    uma variável chamada greeting.
  75. Mas greetingClosure não tem
    uma variável chamada greeting.
  76. O único lugar que greeting está definido
    é como membro da variável dessa
  77. classe.
  78. Podemos definir o delegado de
    greetingClosure para ser uma instância
  79. de GroovyGreeter.
  80. E agora, o closure greeting
    pode acessar as variáveis e métodos membros
  81. dessa instância do
    GroovyGreeter.
  82. Se tudo der certo,
    ao chamarmos greetingClosure,
  83. depois de definir seu delegado
    como myGroovyGreeter,
  84. ele deve conseguir definir a saudação
    e imprimir a saudação.
  85. Vamos tentar.
  86. Aqui está.
  87. Mudamos a saudação dentro
    da instância do
  88. GroovyGreeter de um closure.
  89. Parabéns por concluir
    nosso rápido tour pelo Groovy.
  90. Sei que é muito a abordar.
  91. Felizmente existem inúmeros
    recursos para ajudá-lo.
  92. Nas notas do instrutor você encontra
    vários links e recomendo
  93. conferir essa demonstração novamente
    no código de exemplo fornecido na aula.