Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?

125 views

Published on

Palestra apresentada no 2º ElixirDay Floripa onde apresentei a primeira parte de uma palestra sobre Pattern Matching no Elixir.

Published in: Technology

Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?

  1. 1. Pattern matching O que é? Onde vive? Do que se alimenta? Como se reproduz? por Dickson S. Guedes v1.0
  2. 2. esta palestra foi prática e simulou um jogo interagindo com os participantes… faltou muito para ser uma palestra completa sobre pattern matching… uma segunda parte desta palestra pode ser apresentada, aprofundando-se mais sobre diversas estruturas de dados... só depende de vocês :)
  3. 3. loading game...
  4. 4. LEVEL 1 solitário
  5. 5. preparem-se...
  6. 6. a b
  7. 7. a b
  8. 8. a b
  9. 9. a b
  10. 10. LEVEL 1 completed!
  11. 11. LEVEL 2 acompanhado
  12. 12. preparem-se...
  13. 13. a b c
  14. 14. a b c
  15. 15. a b c
  16. 16. LEVEL 2 completed!
  17. 17. LEVEL 3 abraçado
  18. 18. preparem-se...
  19. 19. a b c
  20. 20. a b c “ “
  21. 21. b g c “ “
  22. 22. LEVEL 3 completed!
  23. 23. nutella mode disabled!
  24. 24. LEVEL 4 Binary
  25. 25. String é um Binary codificado em UTF-8 “...” = <<“...”>>
  26. 26. x = “a” # x é o binário a x = “b” # x virou o binário b ^x = “c” # x é b que não casa com c o que acontece?
  27. 27. preparem-se...
  28. 28. b a c “ola” ‘ola’ “olá” <<“olá”>>
  29. 29. b a c <<“ola”>> ‘olá’ “olá” <<“ol”, 225 :: utf8>> referência ...
  30. 30. Em UTF-8: “á” => LATIN SMALL LETTER A WITH ACUTE Em HTML “á” => á Em Elixir “á” => <<225 :: utf8>>
  31. 31. LEVEL 4 completed!
  32. 32. LEVEL 5 recursivo
  33. 33. Para entender recursividade você precisa entender recursividade
  34. 34. respirem...
  35. 35. lista são escritas assim: lista = [1, 2, 3, 4, 5] lista tem uma cabeça e uma calda, então na lista acima cabeça (ou head) é o número 1 calda (ou tail) é a lista [2, 3, 4, 5] vendo de outro jeito head e tail: [1, 2, 3, 4, 5]
  36. 36. na prática se eu faço: lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] [ head | tail ] = lista então: head é 1 # apenas um número tail é [2, 3, 4, 5, 6, 7, 8, 9, 0] # uma lista vendo de outro jeito head e tail: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
  37. 37. lista = [1, 2, 3, 4, 5] [ head | tail ] = lista head é 1 e tail é [2, 3, 4, 5] [ head | tail ] = tail head é 2 e tail é [3, 4, 5] [ head | tail ] = tail head é 3 e tail é [4, 5] [ head | tail ] = tail head é 4 e tail é [5] Para não ter dúvida!
  38. 38. Se tail é [5], ao executar: [ head | tail ] = tail o que acontece?
  39. 39. Nada de erro, head é 5 e tail é [] Depois disto, ao executar: [ head | tail ] = tail o que acontece?
  40. 40. lista = [1, 2, 3, 4, 5] [ head, second | tail ] = lista head é ? second é ? tail é ? Para não ter dúvida mesmo!
  41. 41. lista = [1, 2, 3, 4, 5] [ head, second | tail ] = lista head é 1 second é 2 tail é [3, 4, 5] Para não ter dúvida mesmo!
  42. 42. Parabéns! Você desbloqueou o modo hands-on! Foi neste ponto que eu cansei de fazer slides...
  43. 43. Usando o iex para testar a leitura da ID TAG de uma música MP3 iex(1)> musica = File.read!('musica.mp3') <<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3, 76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>> iex(2)> tamanho = byte_size(musica) - 128 3543914
  44. 44. iex(3)> << audio :: bytes-size(tamanho), id3tag :: binary>> = musica <<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3, 76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>> iex(4)> audio <<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3, 76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>> iex(5)> id3tag <<84, 65, 71, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 32, 45, 32, 84, 104, 117, 110, 100, 101, 114, 0, 0, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 0, 0, ...>>
  45. 45. iex(6)> << header :: bytes-size(3), titulo :: bytes-size(30), rest :: binary >> = id3tag <<84, 65, 71, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 32, 45, 32, 84, 104, 117, 110, 100, 101, 114, 0, 0, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 0, 0, ...>> iex(7)> header "TAG" iex(8)> titulo "Imagine Dragons - Thunder"
  46. 46. LEVEL 5 completed!
  47. 47. Quer saber mais? Deixe-me saber! twitter.com/guediz

×