SlideShare a Scribd company logo

TDC2018SP | Trilha Go - Pratica de conjuntos: usos e tecnicas para um tipo "Set" em Go

O documento discute implementações de conjuntos na linguagem Go, comparando bibliotecas existentes e propondo abordagens alternativas. É demonstrado como conjuntos podem simplificar lógica de programação e são apresentados casos de uso com soluções utilizando conjuntos. A geração automática de código para tipos paramétricos é proposta como forma de ter conjuntos especializados para diferentes tipos.

1 of 75
Download to read offline
c o n s t r u ç ã o e u s o
PRÁTICA DE CONJUNTOS
Porquê e como implementar um tipo Set na linguagem Go.
Luciano Ramalho
@ramalhoorg
OBJETIVOS
1

Demonstrar como e
porque o uso de conjuntos
pode simplificar a lógica.
2

Discutir alternativas para
implementar coleções de
tipo Set em Go.
2
MOTIVAÇÃO
Quando senti saudade de conjuntos
3
CASO DE USO #1
4
Exibir produto se
todas as palavras
da consulta apare-
cerem na descrição
SOLUÇÃO SEM CONJUNTOS #1
Já escrevi código assim…
5
SOLUÇÃO SEM CONJUNTOS #2
Assim fica menos mal…
6

Recommended

Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02Padroes de Projetos e aplicações- parte 02
Padroes de Projetos e aplicações- parte 02Walney Negreiros
 
03 - Introdução a lógica de programação parte 3 - v1.1
03 - Introdução a lógica de programação parte 3 - v1.103 - Introdução a lógica de programação parte 3 - v1.1
03 - Introdução a lógica de programação parte 3 - v1.1César Augusto Pessôa
 
Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokWellington Pinheiro
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
Apostila De Visualg
Apostila De VisualgApostila De Visualg
Apostila De Visualgecompo
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 

More Related Content

Similar to TDC2018SP | Trilha Go - Pratica de conjuntos: usos e tecnicas para um tipo "Set" em Go

Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDEAnderson Silveira
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.xNorton Guimarães
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Apostilaautocad2002avancado 150119035733-conversion-gate01
Apostilaautocad2002avancado 150119035733-conversion-gate01Apostilaautocad2002avancado 150119035733-conversion-gate01
Apostilaautocad2002avancado 150119035733-conversion-gate01Cleber Francisco Pinto
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig LatinElen Arantza
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Giovanni Bassi
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosCloves da Rocha
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Oficina: construção de modelos descritivos e preditivos utilizando R
Oficina: construção de modelos descritivos e preditivos utilizando ROficina: construção de modelos descritivos e preditivos utilizando R
Oficina: construção de modelos descritivos e preditivos utilizando RFabrício Barth
 
C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9Luciano Pereira
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoAnderson Ledo
 

Similar to TDC2018SP | Trilha Go - Pratica de conjuntos: usos e tecnicas para um tipo "Set" em Go (20)

Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDE
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.x
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Apostilaautocad2002avancado 150119035733-conversion-gate01
Apostilaautocad2002avancado 150119035733-conversion-gate01Apostilaautocad2002avancado 150119035733-conversion-gate01
Apostilaautocad2002avancado 150119035733-conversion-gate01
 
Apostila autocad 2002 avancado
Apostila autocad 2002 avancadoApostila autocad 2002 avancado
Apostila autocad 2002 avancado
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Oficina: construção de modelos descritivos e preditivos utilizando R
Oficina: construção de modelos descritivos e preditivos utilizando ROficina: construção de modelos descritivos e preditivos utilizando R
Oficina: construção de modelos descritivos e preditivos utilizando R
 
C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
Hands on guiado .Net Core
Hands on guiado .Net CoreHands on guiado .Net Core
Hands on guiado .Net Core
 

More from tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

More from tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Recently uploaded

Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...excellenceeducaciona
 
Planejamento Anual Matemática para o ENEM - 1º ano 1, 2 e 3 anos-.pdf
Planejamento Anual Matemática para o ENEM -  1º ano 1, 2 e 3  anos-.pdfPlanejamento Anual Matemática para o ENEM -  1º ano 1, 2 e 3  anos-.pdf
Planejamento Anual Matemática para o ENEM - 1º ano 1, 2 e 3 anos-.pdfCludiaFrancklim
 
Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...
Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...
Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...azulassessoriaacadem3
 
08 de março - Dia Internacional da Mulher
08 de março - Dia Internacional da Mulher08 de março - Dia Internacional da Mulher
08 de março - Dia Internacional da MulherMary Alvarenga
 
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...azulassessoriaacadem3
 
A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.
A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.
A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.Prime Assessoria
 
1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...
1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...
1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...azulassessoriaacadem3
 
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...azulassessoriaacadem3
 
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...azulassessoriaacadem3
 
a. Cite e explique os três princípios básicos da progressão do treinamento de...
a. Cite e explique os três princípios básicos da progressão do treinamento de...a. Cite e explique os três princípios básicos da progressão do treinamento de...
a. Cite e explique os três princípios básicos da progressão do treinamento de...excellenceeducaciona
 
SOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIM
SOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIMSOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIM
SOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIMHisrelBlog
 
A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...
A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...
A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...excellenceeducaciona
 
Letra da música Maria, Maria de Milton Nascimento
Letra da música Maria, Maria de Milton Nascimento Letra da música Maria, Maria de Milton Nascimento
Letra da música Maria, Maria de Milton Nascimento Mary Alvarenga
 
2 – A data de implantação de cada tendência pedagógica no Brasil;
2 – A data de implantação de cada tendência pedagógica no Brasil;2 – A data de implantação de cada tendência pedagógica no Brasil;
2 – A data de implantação de cada tendência pedagógica no Brasil;azulassessoriaacadem3
 
Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...
Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...
Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...excellenceeducaciona
 
Um círculo de Leitura Fada Oriana. Colmeias.pptx
Um círculo de Leitura Fada Oriana. Colmeias.pptxUm círculo de Leitura Fada Oriana. Colmeias.pptx
Um círculo de Leitura Fada Oriana. Colmeias.pptxColmeias
 
Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...
Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...
Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...azulassessoriaacadem3
 
Vários modelos foram propostos para estudar os determinantes sociais e a tram...
Vários modelos foram propostos para estudar os determinantes sociais e a tram...Vários modelos foram propostos para estudar os determinantes sociais e a tram...
Vários modelos foram propostos para estudar os determinantes sociais e a tram...Prime Assessoria
 
4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...
4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...
4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...apoioacademicoead
 
Reprodução nos Animais - 2.º ciclo 5.º ano
Reprodução nos Animais - 2.º ciclo 5.º anoReprodução nos Animais - 2.º ciclo 5.º ano
Reprodução nos Animais - 2.º ciclo 5.º anoMariaJoão Agualuza
 

Recently uploaded (20)

Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
 
Planejamento Anual Matemática para o ENEM - 1º ano 1, 2 e 3 anos-.pdf
Planejamento Anual Matemática para o ENEM -  1º ano 1, 2 e 3  anos-.pdfPlanejamento Anual Matemática para o ENEM -  1º ano 1, 2 e 3  anos-.pdf
Planejamento Anual Matemática para o ENEM - 1º ano 1, 2 e 3 anos-.pdf
 
Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...
Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...
Elabore uma apresentação em PowerPoint em que você possa definir como a teolo...
 
08 de março - Dia Internacional da Mulher
08 de março - Dia Internacional da Mulher08 de março - Dia Internacional da Mulher
08 de março - Dia Internacional da Mulher
 
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
 
A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.
A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.
A) DESCREVA no mínimo três pontos-base do princípio da cromatografia gasosa.
 
1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...
1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...
1. Encontre um Livro Didático de Língua Portuguesa, que seja para o 1º, 2º ou...
 
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
Com base no exposto, sua ação nessa atividade consiste em elaborar um texto d...
 
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
2. É possível a denúncia do Estado agressor junto ao Tribunal Penal Internaci...
 
a. Cite e explique os três princípios básicos da progressão do treinamento de...
a. Cite e explique os três princípios básicos da progressão do treinamento de...a. Cite e explique os três princípios básicos da progressão do treinamento de...
a. Cite e explique os três princípios básicos da progressão do treinamento de...
 
SOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIM
SOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIMSOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIM
SOCIOLOGIA: O PENSAMENTO DE ÉMILE DURKHEIM
 
A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...
A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...
A) Cite inicialmente as três dimensões do desenvolvimento sustentável e estab...
 
Letra da música Maria, Maria de Milton Nascimento
Letra da música Maria, Maria de Milton Nascimento Letra da música Maria, Maria de Milton Nascimento
Letra da música Maria, Maria de Milton Nascimento
 
2 – A data de implantação de cada tendência pedagógica no Brasil;
2 – A data de implantação de cada tendência pedagógica no Brasil;2 – A data de implantação de cada tendência pedagógica no Brasil;
2 – A data de implantação de cada tendência pedagógica no Brasil;
 
Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...
Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...
Explique o modelo de determinação social da saúde proposto por Dahlgren e Whi...
 
Um círculo de Leitura Fada Oriana. Colmeias.pptx
Um círculo de Leitura Fada Oriana. Colmeias.pptxUm círculo de Leitura Fada Oriana. Colmeias.pptx
Um círculo de Leitura Fada Oriana. Colmeias.pptx
 
Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...
Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...
Tendo em vista estes aspectos, a proposta dessa atividade é a elaboração de u...
 
Vários modelos foram propostos para estudar os determinantes sociais e a tram...
Vários modelos foram propostos para estudar os determinantes sociais e a tram...Vários modelos foram propostos para estudar os determinantes sociais e a tram...
Vários modelos foram propostos para estudar os determinantes sociais e a tram...
 
4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...
4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...
4. Descreva como a empresa funciona e de que maneira a teoria da ORT é observ...
 
Reprodução nos Animais - 2.º ciclo 5.º ano
Reprodução nos Animais - 2.º ciclo 5.º anoReprodução nos Animais - 2.º ciclo 5.º ano
Reprodução nos Animais - 2.º ciclo 5.º ano
 

TDC2018SP | Trilha Go - Pratica de conjuntos: usos e tecnicas para um tipo "Set" em Go

  • 1. c o n s t r u ç ã o e u s o PRÁTICA DE CONJUNTOS Porquê e como implementar um tipo Set na linguagem Go. Luciano Ramalho @ramalhoorg
  • 2. OBJETIVOS 1
 Demonstrar como e porque o uso de conjuntos pode simplificar a lógica. 2
 Discutir alternativas para implementar coleções de tipo Set em Go. 2
  • 4. CASO DE USO #1 4 Exibir produto se todas as palavras da consulta apare- cerem na descrição
  • 5. SOLUÇÃO SEM CONJUNTOS #1 Já escrevi código assim… 5
  • 6. SOLUÇÃO SEM CONJUNTOS #2 Assim fica menos mal… 6
  • 7. 7 Que tal se… Depois! Agora estou muito ocupado! www.workcompass.com/
  • 8. CASO DE USO #1 8 Exibir produto se todas as palavras da consulta apare- cerem na descrição www.workcompass.com/
  • 9. CASO DE USO #1 9 Exibir produto se todas as palavras da consulta apare- cerem na descrição Q ⊂ D www.workcompass.com/
  • 10. CASO DE USO #2 10 Marcar todos os produtos favoritados, exceto os que já estiverem no carrinho de compras.
  • 11. CASO DE USO #2 11 Marcar todos os produtos favoritados, exceto os que já estiverem no carrinho de compras. F ∖ C
  • 12. CASO DE USO #3: RUNEFINDER 12 https://tgo.li/runes2018
  • 13. CASO DE USO #3: RUNEFINDER 13 https://tgo.li/runes2018
  • 14. CASO DE USO #3: RUNEFINDER 14 https://tgo.li/runes2018
  • 15. CASO DE USO #3: ÍNDICE INVERTIDO
  • 16. CASO DE USO #3: ÍNDICE INVERTIDO “REGISTERED SIGN” é o nome oficial de ® em UnicodeData.txt
  • 17. CASO DE USO #3: ÍNDICE INVERTIDO 17www.workcompass.com/ index é o índice invertido: as chaves são palavras, e os valores são conjuntos de runas cujo nome contém a palavra. Ex. a runa ‘®’ aparece nas chaves “REGISTERED” e “SIGN”
  • 18. CASO DE USO #3: ÍNDICE INVERTIDO 18 A ∩ B www.workcompass.com/
  • 19. LÓGICA E CONJUNTOS Uma relação íntima 19
  • 20. Nobody has yet discovered a branch of mathematics that has successfully resisted formalization into set theory. Thomas Forster
 Logic Induction and Sets, p. 167 20
  • 21. Ainda não descobriram um ramo da
 matemática que não possa ser formalizado
 pela teoria dos conjuntos. Thomas Forster
 (tradução livre de Logic Induction and Sets, p. 167) 21
  • 22. CONJUNÇÃO LÓGICA: INTERSECÇÃO x pertence à intersecção de A e B. é o mesmo que: x pertence ao conjunto A e
 x também pertence ao conjunto B. Em notação matemática: x ∈ (A ∩ B) ⟺ (x ∈ A) ∧ (x ∈ B) Em computação: AND 22
  • 23. DISJUNÇÃO LÓGICA: UNIÃO x pertence à união de A e B. é o mesmo que: x pertence ao conjunto A e/ou
 x pertence ao conjunto B. Em notação matemática: x ∈ (A ∪ B) ⟺ (x ∈ A) ∨ (x ∈ B) Em computação: OR 23
  • 24. DIFERENÇA SIMÉTRICA x pertence ao conjunto A ou
 x pertence ao conjunto B
 mas não pertence aos dois é o mesmo que: x pertence à união de A e B menos a intersecção de A e B. Em notação matemática:
 Em computação: XOR 24 x ∈ (A ∆ B) ⟺ (x ∈ A) ⊻ (x ∈ B)
  • 25. DIFERENÇA x pertence ao conjunto A mas
 não pertence ao conjunto B. é o mesmo que: elementos de A menos os de B Em notação matemática: x ∈ (A ∖ B) ⟺ (x ∈ A) ∧ (x ∉ B) 25
  • 27. CONJUNTOS EM VÁRIAS BIBLIOTECAS-PADRÃO Algumas linguagens/plataformas que implementam conjuntos em sua biblioteca-padrão. 27 Java Interface Set com < 10 métodos; 8 implementações Python set e frozenset com > 10 métodos e operadores .Net (C# etc.) Interface ISet com > 10 métodos; 2 implementações JavaScript (ES6) Set com < 10 métodos Ruby Set com > 10 métodos e operadores
  • 29. GOLANG-SET By Ralph Caraveo (@deckarep) 29
  • 30. 30
  • 41. GODS: PACKAGE SETS 41 interface:
 7 métodos 2 implementações: HashSest, TreeSet
  • 43. GEN: GERADOR DE CÓDIGO COM TIPOS PARAMETRIZADOS 43
  • 44. GEN: MODO DE USAR 1. Marque o seu código com comentários especiais: 
 
 
 
 
 2. Execute o comando gen 
 3. Adicione ao seu projeto o arquivo .go gerado 44 Exemplo em: https://tgo.li/2vtcMjw
  • 45. GEN: MEU CÓDIGO FONTE (CODEPOINTS.GO) 45 Exemplo em: https://tgo.li/2vtcMjw
  • 46. GEN: O ARQUIVO GERADO (CODEPOINT_SET.GO) 46 Exemplo em: https://tgo.li/2vtcMjw código derivado
 de golang-set
  • 49. USO DE MAP COMO CONJUNTO Chaves de um map formam um conjunto
 com duas características essenciais: •Garantia de unicidade: 
 uma chave só pode ocorrer uma vez. •Verificação de pertencimento em O(1): 
 tempo praticamente constante independente do número de elementos.
 
 
 
 Demais métodos? Fique à vontade para implementar! 49 if _, existe := conjunto[elem]; existe { // o elemento está no conjunto }
  • 50. USO DE MAP COMO CONJUNTO Chaves de um map formam um conjunto
 com duas características essenciais: •Garantia de unicidade: 
 uma chave só pode ocorrer uma vez. •Verificação de pertencimento em O(1): 
 tempo praticamente constante independente do número de elementos.
 
 
 
 Demais métodos? Fique à vontade para implementar! 50 Curiosidade:
 era assim que a gente se virava em Python até 2003 — usando chaves de um dict como um conjunto! if _, existe := conjunto[elem]; existe { // o elemento está no conjunto }
  • 51. RELEMBRANDO: CASO DE USO #1 51 Exibir produto se todas as palavras da consulta apare- cerem na descrição Q ⊂ D www.workcompass.com/
  • 52. SOLUÇÃO COM MAP FAZENDO PAPEL DE CONJUNTO Solução mais eficiente que as anteriores, para slices grandes: 52 map de <tipo-elemento> para struct{}
  • 53. SOLUÇÃO COM MAP FAZENDO PAPEL DE CONJUNTO Solução mais eficiente que as anteriores, para slices grandes: 53 preencher o
 “conjunto”
  • 54. SOLUÇÃO COM MAP FAZENDO PAPEL DE CONJUNTO Solução mais eficiente que as anteriores, para slices grandes: 54 busca em O(1)
  • 56. RUNESET: TIPO MAP COM NOME E MÉTODOS 56 10 métodos, incluindo: Intersection, IntersectionUpdate
  • 57. RUNESET: CARACERÍSTICAS Não encapsula o map: pode acessado e modificado direto.
 Sintaxe melhor para criar e testar elementos: 
 Exemplo: 57 s.Add(e)
 s.Contains(e) https://github.com/standupdev/runeset
  • 58. RUNESET: DEFINIÇÃO DO TIPO E MÉTODOS ESSENCIAIS 58 https://github.com/standupdev/runeset elementos do tipo rune
  • 59. RUNESET: CONSTRUTORES Convenção: Usar Make para criar objetos manipulados por referências. 59 https://github.com/standupdev/runeset cria um
 Set vazio
  • 60. MakeFromString: set de runas a partir de string RUNESET: CONSTRUTORES 60 custo zero para passar uma slice: runas…
  • 62. RUNESET: USO EM ÍNDICE INVERTIDO (CASO DE USO #3)
  • 63. RUNESET: MÉTODOS ÚTEIS Além de operações da teoria dos conjuntos…
 MakeFromString: construtor que aceita string.
 Sorted: devolve slice de runas em ordem ascendente String: elementos ordenados para facilitar exemplos.
 Equal: facilita muito os testes.
 Copy: importante especialmente em coleções mutáveis. 63
  • 65. STRSET: TIPO MAP ENCAPSULADO EM STRUCT 65 26 métodos
  • 66. STRSET: CARACTERÍSTICAS Protege o map: campo privado só pode acessado via métodos e funções do mesmo pacote.
 Não é prático construir com a sintaxe Set{}: 
 melhor usar Make(). 
 Exemplo: 66 https://github.com/standupdev/strset
  • 67. DEFINIÇÃO DO TIPO E CONSTRUTORES 67 https://github.com/standupdev/strset
  • 68. ORGANIZAÇÃO DO PACOTE STRSET Nota: todos os métodos que modificam um Set depois de criado estão no arquivo updaters.go. 68 core.go Make, Len, Contains, String, Equal, Copy, ToSlice, Channel operators.go Intersection, Union,
 Difference, SymmetricDifference relations.go SubsetOf, SupersetOf updaters.go Add, AddAll, Remove, RemoveAll, Pop, Clear, IntersectionUpdate, UnionUpdate, DifferenceUpdate, SymmetricDifferenceUpdate https://github.com/standupdev/strset
  • 69. COMPARAR APIS PARA ESCOLHER NOMES DE MÉTODOS 69
  • 70. RUNESCAN: EXEMPLO DE USO DE STRSET 70
  • 71. 71
  • 73. CONJUNTOS NA PRÁTICA Operações de conjunto podem simplificar sua lógica golang-set (@deckarep): a implementação rica mais popular gen pode produzir um golang-set específico para seu tipo Codar um tipo set é um ótimo exercício de programação Se precisar de Set para elementos string, pode usar strset 73 https://github.com/standupdev/strset
  • 74. FICÇÃO CIENTÍFICA Bom mesmo seria isso… 74 var s1 set[string] s2 := make(set[uint64])
  • 75. Luciano Ramalho
 @ramalhoorg | @standupdev
 luciano.ramalho@thoughtworks.com MUITO GRATO!