O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

69 visualizações

Publicada em

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

Publicada em: Tecnologia

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

×