<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>{ Dicas de Programação }</title><link href="https://dicasdeprogramacao.com.br/" rel="alternate"></link><link href="https://dicasdeprogramacao.com.br/feeds/all.atom.xml" rel="self"></link><id>https://dicasdeprogramacao.com.br/</id><updated>2025-10-11T00:00:00-03:00</updated><entry><title>SQL vs NoSQL: Guia Completo para Escolher o Banco de Dados Certo para Seu Projeto</title><link href="https://dicasdeprogramacao.com.br/sql-vs-nosql-guia-completo-para-escolher-o-banco-de-dados-certo-para-seu-projeto/" rel="alternate"></link><published>2025-10-11T00:00:00-03:00</published><updated>2025-10-11T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2025-10-11:/sql-vs-nosql-guia-completo-para-escolher-o-banco-de-dados-certo-para-seu-projeto/</id><summary type="html">&lt;p&gt;No mundo do desenvolvimento de software, a escolha do banco de dados certo é uma das decisões mais críticas que um arquiteto ou desenvolvedor precisa tomar. Essa escolha não apenas impacta a performance e a escalabilidade da sua aplicação, mas …&lt;/p&gt;</summary><content type="html">&lt;p&gt;No mundo do desenvolvimento de software, a escolha do banco de dados certo é uma das decisões mais críticas que um arquiteto ou desenvolvedor precisa tomar. Essa escolha não apenas impacta a performance e a escalabilidade da sua aplicação, mas também a sua manutenção, custo e a velocidade de desenvolvimento. Por décadas, os bancos de dados relacionais, com sua estrutura SQL, reinaram supremos. No entanto, com o advento da web 2.0, Big Data e a necessidade de aplicações com alta disponibilidade e escalabilidade massiva, surgiu uma nova categoria: os bancos de dados NoSQL.&lt;/p&gt;
&lt;p&gt;Este guia completo tem como objetivo desmistificar as diferenças entre SQL e NoSQL, ajudando você a entender suas características, prós, contras e, o mais importante, a desenvolver uma metodologia para escolher o banco de dados ideal para o seu projeto. Prepare-se para mergulhar fundo no universo dos dados!&lt;/p&gt;
&lt;h2&gt;Entendendo os Bancos de Dados Relacionais (SQL)&lt;/h2&gt;
&lt;p&gt;Os bancos de dados relacionais são a espinha dorsal de inúmeras aplicações corporativas e sistemas transacionais em todo o mundo. Baseados no modelo relacional, proposto por Edgar F. Codd na década de 1970, eles organizam os dados em tabelas, que são compostas por linhas (registros) e colunas (atributos).&lt;/p&gt;
&lt;h3&gt;O que são e como funcionam?&lt;/h3&gt;
&lt;p&gt;Em um banco de dados relacional, os dados são armazenados em tabelas predefinidas com esquemas fixos. As relações entre as tabelas são estabelecidas por chaves primárias e estrangeiras, permitindo que os dados sejam conectados e consultados de forma eficiente. A linguagem padrão para interagir com esses bancos de dados é o SQL (Structured Query Language), uma linguagem declarativa poderosa para manipulação e consulta de dados.&lt;/p&gt;
&lt;p&gt;Um pilar fundamental dos bancos de dados relacionais é a garantia das propriedades &lt;strong&gt;ACID&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Atomicidade&lt;/strong&gt;: Uma transação é tratada como uma única unidade de trabalho que ou é concluída integralmente ou não é realizada. Não há estados intermediários.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistência&lt;/strong&gt;: Uma transação leva o banco de dados de um estado válido para outro estado válido, mantendo as regras e restrições.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Isolamento&lt;/strong&gt;: Transações concorrentes são executadas de forma isolada uma da outra, como se fossem sequenciais, evitando interferências.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Durabilidade&lt;/strong&gt;: Uma vez que uma transação é confirmada (commit), seus efeitos são permanentes e resistem a falhas do sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Principais Características&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estrutura de Dados Rígida&lt;/strong&gt;: Exigem um esquema pré-definido antes da inserção de dados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistência Forte (ACID)&lt;/strong&gt;: Garantem a integridade e a confiabilidade dos dados, cruciais para aplicações transacionais.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Junções (JOINs)&lt;/strong&gt;: Permitem combinar dados de múltiplas tabelas de forma poderosa, facilitando consultas complexas e relacionamentos entre entidades.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosistema Maduro&lt;/strong&gt;: Ferramentas robustas, vasta documentação e uma grande comunidade de suporte.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Vantagens&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Integridade de Dados&lt;/strong&gt;: As propriedades ACID e a imposição de esquemas garantem a alta integridade e consistência dos dados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consultas Complexas&lt;/strong&gt;: O SQL é extremamente eficaz para realizar consultas complexas e analíticas que envolvem múltiplas relações.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segurança&lt;/strong&gt;: Oferecem mecanismos avançados de segurança e controle de acesso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transações Confiáveis&lt;/strong&gt;: Ideais para sistemas que exigem alta confiabilidade em operações financeiras e de negócios críticas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desvantagens&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escalabilidade Vertical&lt;/strong&gt;: Tradicionalmente, escalam verticalmente (aumentando os recursos de um único servidor), o que se torna caro e limitado em um determinado ponto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rigidez do Esquema&lt;/strong&gt;: Alterar o esquema em um banco de dados em produção pode ser complexo e demandar tempo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance em Larga Escala&lt;/strong&gt;: Podem enfrentar desafios de performance em cargas de trabalho de leitura/escrita extremamente altas ou com volumes massivos de dados não estruturados.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Quando Usar Bancos de Dados Relacionais?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sistemas Financeiros e Bancários&lt;/strong&gt;: Onde a consistência e a integridade dos dados são absolutamente não negociáveis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sistemas de Gerenciamento de Conteúdo (CMS) Tradicionais&lt;/strong&gt;: Onde os dados têm uma estrutura bem definida e os relacionamentos são importantes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aplicações de CRM e ERP&lt;/strong&gt;: Necessitam de transações complexas e fortes garantias de consistência.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Projetos com Requisitos de Dados Bem Definidos&lt;/strong&gt;: Quando o modelo de dados é estável e não muda com frequência.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Exemplos Populares&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Oracle Database&lt;/li&gt;
&lt;li&gt;Microsoft SQL Server&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Entendendo os Bancos de Dados NoSQL&lt;/h2&gt;
&lt;p&gt;O termo NoSQL (Not Only SQL) surgiu para descrever uma classe de bancos de dados que não aderem ao modelo relacional tradicional. Eles foram desenvolvidos para resolver problemas de escalabilidade e flexibilidade que se tornaram proeminentes com o crescimento exponencial da internet e a necessidade de lidar com volumes massivos de dados não estruturados ou semi-estruturados.&lt;/p&gt;
&lt;h3&gt;O que são e como funcionam?&lt;/h3&gt;
&lt;p&gt;Diferentemente dos bancos de dados relacionais, os bancos NoSQL não possuem um esquema fixo e podem armazenar dados em uma variedade de formatos, como documentos, grafos, chave-valor ou colunas. Eles priorizam a disponibilidade e a tolerância a particionamento (segundo o teorema CAP), muitas vezes sacrificando a consistência forte em favor da consistência eventual.&lt;/p&gt;
&lt;p&gt;A filosofia por trás do NoSQL é a da arquitetura &lt;strong&gt;BASE&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basic Availability&lt;/strong&gt;: O sistema está sempre disponível (sem garantia de consistência em caso de falha).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soft State&lt;/strong&gt;: O estado do sistema pode mudar ao longo do tempo, mesmo sem entrada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eventual Consistency&lt;/strong&gt;: Se o sistema parar de receber entradas, ele eventualmente se tornará consistente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Principais Características&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Esquema Flexível&lt;/strong&gt;: Não exigem um esquema pré-definido, permitindo que os dados sejam armazenados de forma mais dinâmica.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escalabilidade Horizontal&lt;/strong&gt;: Projetados para escalar adicionando mais servidores baratos (commodity hardware) em um cluster, distribuindo a carga de trabalho.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modelos de Dados Diversificados&lt;/strong&gt;: Oferecem diferentes modelos de armazenamento de dados, cada um otimizado para casos de uso específicos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alta Disponibilidade e Tolerância a Falhas&lt;/strong&gt;: Muitos são construídos para serem distribuídos e tolerantes a falhas por natureza.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Vantagens&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escalabilidade&lt;/strong&gt;: Excelentes para lidar com grandes volumes de dados e altas cargas de tráfego, escalando horizontalmente de forma eficiente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexibilidade&lt;/strong&gt;: A ausência de um esquema rígido facilita a evolução do modelo de dados e a adição de novos tipos de dados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Podem oferecer performance superior para tipos específicos de acesso a dados (e.g., leituras rápidas de chave-valor, ou consultas de grafos).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agilidade no Desenvolvimento&lt;/strong&gt;: A flexibilidade do esquema permite iterações mais rápidas no ciclo de desenvolvimento.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desvantagens&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consistência Eventual&lt;/strong&gt;: Podem não garantir a consistência imediata dos dados em todas as réplicas, o que pode ser um problema para aplicações financeiras.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consultas Complexas&lt;/strong&gt;: Linguagens de consulta podem ser menos padronizadas e, em alguns casos, menos expressivas que o SQL para certas operações.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maturidade&lt;/strong&gt;: Embora muitos tenham evoluído, o ecossistema NoSQL pode ser menos maduro em termos de ferramentas e suporte em comparação com o SQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Curva de Aprendizagem&lt;/strong&gt;: Cada tipo de banco de dados NoSQL tem suas particularidades, exigindo mais tempo para aprender e dominar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Quando Usar Bancos de Dados NoSQL?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Big Data&lt;/strong&gt;: Para armazenar e processar grandes volumes de dados não estruturados ou semi-estruturados, como logs, dados de sensores, posts de redes sociais.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aplicações em Tempo Real&lt;/strong&gt;: Chatbots, jogos online, feeds de notícias, onde baixa latência e alta taxa de transferência são cruciais.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gerenciamento de Conteúdo e Catálogos de Produtos&lt;/strong&gt;: Flexibilidade para lidar com diferentes atributos e estruturas de dados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IoT (Internet das Coisas)&lt;/strong&gt;: Armazenamento e processamento de grandes quantidades de dados de dispositivos conectados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recomendações e Redes Sociais&lt;/strong&gt;: Bancos de dados de grafo são ideais para mapear relacionamentos complexos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tipos Populares de Bancos de Dados NoSQL&lt;/h3&gt;
&lt;p&gt;Os bancos de dados NoSQL se dividem em várias categorias, cada uma com um modelo de dados otimizado para diferentes casos de uso:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bancos de Dados Orientados a Documentos&lt;/strong&gt;: Armazenam dados em documentos semi-estruturados (JSON, BSON, XML), que podem conter tipos de dados aninhados e arrays.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exemplos&lt;/strong&gt;: MongoDB, Couchbase, DocumentDB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideal para&lt;/strong&gt;: Catálogos de produtos, perfis de usuários, sistemas de gerenciamento de conteúdo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bancos de Dados Chave-Valor&lt;/strong&gt;: O mais simples, armazena dados como uma coleção de pares chave-valor. A chave é exclusiva e o valor pode ser qualquer tipo de dado.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exemplos&lt;/strong&gt;: Redis, DynamoDB, Memcached.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideal para&lt;/strong&gt;: Cache de dados, gerenciamento de sessão, placares de jogos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bancos de Dados Orientados a Colunas (Column-Family)&lt;/strong&gt;: Armazenam dados em famílias de colunas, otimizando para consultas que acessam apenas um subconjunto de colunas.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exemplos&lt;/strong&gt;: Apache Cassandra, HBase, Google Bigtable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideal para&lt;/strong&gt;: Armazenamento de grandes volumes de dados com muitas colunas (Big Data), séries temporais, logs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bancos de Dados de Grafo&lt;/strong&gt;: Utilizam estruturas de grafo (nós, arestas e propriedades) para armazenar dados e suas relações, otimizados para consultas de relacionamentos complexos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exemplos&lt;/strong&gt;: Neo4j, Amazon Neptune, ArangoDB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideal para&lt;/strong&gt;: Redes sociais, sistemas de recomendação, detecção de fraudes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Fatores Chave para Comparar SQL e NoSQL&lt;/h2&gt;
&lt;p&gt;A escolha entre SQL e NoSQL não é uma questão de qual é "melhor", mas sim de qual é "mais adequado" para o seu contexto específico. Para tomar uma decisão informada, considere os seguintes fatores:&lt;/p&gt;
&lt;h3&gt;1. Modelo de Dados e Esquema&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: Modelo relacional com esquema fixo. Ótimo para dados bem estruturados onde as relações são cruciais. A normalização é fundamental.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;: Modelos diversos (documento, chave-valor, coluna, grafo) com esquema flexível ou sem esquema. Ideal para dados não estruturados, semi-estruturados ou em constante evolução.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Escalabilidade&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: Principalmente escalabilidade vertical (aumentar a capacidade de um único servidor). A escalabilidade horizontal é possível (sharding, replicação), mas pode ser mais complexa de implementar e gerenciar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;: Projetados para escalabilidade horizontal nativamente, distribuindo os dados e a carga de trabalho por múltiplos servidores.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Consistência (ACID vs. BASE)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: Foca na consistência forte (ACID), garantindo que as transações sejam processadas de forma confiável e que os dados estejam sempre em um estado consistente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;: Muitos bancos de dados NoSQL implementam a consistência eventual (BASE), priorizando a disponibilidade e a tolerância a particionamento. Os dados podem não estar imediatamente consistentes em todas as réplicas, mas eventualmente se tornarão.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Complexidade de Consultas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: O SQL é uma linguagem declarativa padronizada e poderosa para consultas complexas, junções, agregações e filtragens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;: A abordagem de consulta varia amplamente. Alguns (como MongoDB) têm linguagens de consulta ricas e flexíveis, enquanto outros (chave-valor) são mais simples, focando em acesso direto por chave. Junções entre "tabelas" são menos comuns ou tratadas de forma diferente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Relações entre Dados&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: Excelente para modelar e consultar dados com relacionamentos complexos e bem definidos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;: Pode lidar com relacionamentos, mas a forma de modelagem é diferente. Em bancos de documentos, pode-se aninhar documentos; em grafos, os relacionamentos são a parte central. Em alguns casos, pode-se desnormalizar para evitar junções complexas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6. Custos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: Pode ser mais caro devido à necessidade de hardware de alta performance para escalabilidade vertical e licenças de software para alguns SGBDs proprietários.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;: Geralmente mais econômico para escalar, pois utiliza hardware commodity distribuído e muitos são de código aberto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Ecossistema e Comunidade&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: Ecosistema maduro com vasta documentação, ferramentas de BI, ORMs, e uma grande comunidade de desenvolvedores experientes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;: Crescendo rapidamente, mas o ecossistema pode ser menos padronizado e a comunidade pode ser menor para algumas tecnologias específicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Como Escolher: Um Framework de Decisão&lt;/h2&gt;
&lt;p&gt;A escolha do banco de dados não deve ser feita por popularidade ou preferência pessoal, mas sim com base nas necessidades reais do seu projeto. Siga este framework para uma decisão mais assertiva:&lt;/p&gt;
&lt;h3&gt;Passo 1: Analise Seus Dados&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estrutura dos Dados&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Se seus dados são bem estruturados, relacionais e têm um esquema que não muda muito (ex: informações de clientes, pedidos em e-commerce), SQL é uma forte candidato.&lt;/li&gt;
&lt;li&gt;Se seus dados são não estruturados, semi-estruturados ou têm um esquema que evolui rapidamente (ex: logs, posts de blog, dados de IoT), NoSQL oferece mais flexibilidade.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volume de Dados&lt;/strong&gt;: Você espera um volume massivo de dados (terabytes, petabytes)? NoSQL geralmente lida melhor com Big Data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Velocidade de Geração de Dados&lt;/strong&gt;: Se os dados são gerados em alta velocidade e precisam ser processados rapidamente (ex: streaming de dados), bancos NoSQL como os de chave-valor ou colunas são mais adequados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variedade de Dados&lt;/strong&gt;: Você tem uma grande variedade de tipos de dados que precisam ser armazenados? A flexibilidade do esquema NoSQL é vantajosa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Passo 2: Entenda os Requisitos da Sua Aplicação&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Requisitos de Consistência&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Se a consistência forte (ACID) é crucial (ex: transações financeiras, sistemas de inventário), SQL é indispensável.&lt;/li&gt;
&lt;li&gt;Se você pode tolerar a consistência eventual em favor de maior disponibilidade e escalabilidade (ex: feeds de notícias, contadores de likes), NoSQL é uma boa escolha.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Requisitos de Escalabilidade&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Você precisa escalar para lidar com milhões de usuários ou milhares de transações por segundo em um ambiente distribuído? NoSQL é projetado para isso.&lt;/li&gt;
&lt;li&gt;Se a escalabilidade vertical for suficiente para suas necessidades de crescimento por um bom tempo, SQL pode ser mais simples de gerenciar inicialmente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complexidade das Consultas&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Se suas consultas envolvem muitas junções, agregações complexas e precisam de relatórios detalhados, o SQL é geralmente mais produtivo.&lt;/li&gt;
&lt;li&gt;Se o acesso aos dados é principalmente por chave ou por um modelo de documento/grafo, e as junções são menos frequentes ou podem ser desnormalizadas, o NoSQL pode ser mais eficiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Velocidade de Desenvolvimento e Flexibilidade&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Se você precisa iterar rapidamente no modelo de dados e o esquema está em constante mudança, o NoSQL oferece maior agilidade.&lt;/li&gt;
&lt;li&gt;Para projetos com requisitos bem definidos desde o início, o SQL pode fornecer uma base sólida.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custos e Operação&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Qual é o seu orçamento para hardware, software e equipe de operação? Bancos de dados NoSQL podem ser mais baratos para escalar horizontalmente, mas podem exigir mais expertise para gerenciar clusters distribuídos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Passo 3: Considere o Crescimento Futuro&lt;/h3&gt;
&lt;p&gt;Pense em como sua aplicação e seus dados podem evoluir. É mais fácil migrar de um banco de dados NoSQL para outro NoSQL, ou de SQL para SQL. A migração entre SQL e NoSQL pode ser um desafio significativo se o modelo de dados precisar ser reestruturado fundamentalmente.&lt;/p&gt;
&lt;h3&gt;Passo 4: Abordagens Híbridas (Polyglot Persistence)&lt;/h3&gt;
&lt;p&gt;Não é preciso escolher apenas um. Muitos sistemas modernos utilizam uma abordagem de &lt;strong&gt;persistência poliglota&lt;/strong&gt;, onde diferentes bancos de dados são usados para diferentes partes da aplicação, de acordo com suas necessidades específicas. Por exemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Um banco de dados SQL para dados transacionais críticos (pedidos, informações de pagamento).&lt;/li&gt;
&lt;li&gt;Um banco de dados de documentos (NoSQL) para perfis de usuário ou catálogos de produtos.&lt;/li&gt;
&lt;li&gt;Um banco de dados chave-valor (NoSQL) para caching ou gerenciamento de sessão.&lt;/li&gt;
&lt;li&gt;Um banco de dados de grafo (NoSQL) para redes sociais ou sistemas de recomendação.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa abordagem permite aproveitar os pontos fortes de cada tipo de banco de dados, otimizando performance, escalabilidade e custo para diferentes domínios de dados.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;A decisão entre SQL e NoSQL é um equilíbrio entre consistência, disponibilidade, tolerância a particionamento, flexibilidade de esquema, escalabilidade e complexidade de consultas. Não existe uma solução única que sirva para todos os casos. Ao entender profundamente as características de cada tipo de banco de dados e aplicar um framework de decisão baseado nas necessidades do seu projeto e na natureza dos seus dados, você estará bem equipado para fazer a escolha mais estratégica. Lembre-se que, para muitas aplicações complexas, a combinação de ambos – a persistência poliglota – pode ser a solução mais poderosa e eficaz. Mantenha-se atualizado com as tendências e tecnologias emergentes, pois o ecossistema de bancos de dados está em constante evolução.&lt;/p&gt;</content><category term="Banco de Dados"></category><category term="sql"></category><category term="nosql"></category><category term="bancos de dados"></category><category term="escolha de banco de dados"></category><category term="banco de dados relacional"></category><category term="banco de dados nao relacional"></category><category term="modelagem de dados"></category><category term="desempenho"></category><category term="escalabilidade"></category></entry><entry><title>Java Streams: O Guia Definitivo para um Código Mais Limpo e Funcional</title><link href="https://dicasdeprogramacao.com.br/java-streams-guia-definitivo-codigo-limpo-funcional/" rel="alternate"></link><published>2025-10-01T00:00:00-03:00</published><updated>2025-10-01T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2025-10-01:/java-streams-guia-definitivo-codigo-limpo-funcional/</id><summary type="html">&lt;p&gt;Se você já se pegou escrevendo blocos e mais blocos de código com laços &lt;code&gt;for&lt;/code&gt; para filtrar, transformar ou processar uma simples lista de objetos em Java, você não está sozinho. Por anos, essa foi a forma padrão de trabalhar …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Se você já se pegou escrevendo blocos e mais blocos de código com laços &lt;code&gt;for&lt;/code&gt; para filtrar, transformar ou processar uma simples lista de objetos em Java, você não está sozinho. Por anos, essa foi a forma padrão de trabalhar. Mas e se eu te dissesse que existe uma maneira muito mais elegante, concisa e poderosa de fazer tudo isso?&lt;/p&gt;
&lt;p&gt;Bem-vindo ao mundo da &lt;strong&gt;API de Streams do Java&lt;/strong&gt;, introduzida no Java 8. Essa funcionalidade não foi apenas uma adição à linguagem; ela representou uma mudança de paradigma, trazendo o poder da programação funcional diretamente para o seu código Java do dia a dia.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Java Streams" src="/images/java-streams-guia-definitivo-codigo-limpo-funcional/destaque.png"&gt;&lt;/p&gt;
&lt;p&gt;Neste &lt;strong&gt;guia definitivo&lt;/strong&gt;, vamos mergulhar fundo no universo dos Java Streams. Você vai aprender não apenas &lt;em&gt;como&lt;/em&gt; usá-los, mas &lt;em&gt;por que&lt;/em&gt; eles tornam seu código mais limpo, legível e eficiente. Prepare-se para aposentar seus velhos laços &lt;code&gt;for&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;O Problema: O Código Imperativo&lt;/h2&gt;
&lt;p&gt;Antes de vermos a solução, vamos entender o problema. Imagine que temos uma lista de &lt;code&gt;Produto&lt;/code&gt; e queremos obter o nome de todos os produtos da categoria "Eletrônicos" com preço abaixo de R$ 1000, em ordem alfabética.&lt;/p&gt;
&lt;p&gt;O jeito "clássico" de fazer isso seria:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// nossa lista de produtos&lt;/span&gt;

&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomesFiltrados&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Eletrônicos&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getCategoria&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPreco&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;nomesFiltrados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomesFiltrados&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomesFiltrados&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Funciona? Sim. Mas é verboso. Nós tivemos que:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Criar uma lista temporária.&lt;/li&gt;
&lt;li&gt;Iterar sobre todos os elementos.&lt;/li&gt;
&lt;li&gt;Implementar a lógica de filtro com &lt;code&gt;if&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Adicionar os resultados à lista temporária.&lt;/li&gt;
&lt;li&gt;Ordenar a lista separadamente.&lt;/li&gt;
&lt;li&gt;Iterar novamente para exibir os resultados.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estamos dizendo ao Java &lt;em&gt;como&lt;/em&gt; fazer cada pequeno passo. Isso é programação &lt;strong&gt;imperativa&lt;/strong&gt;. Com Streams, vamos apenas declarar &lt;em&gt;o que&lt;/em&gt; queremos.&lt;/p&gt;
&lt;h2&gt;O que são Streams, Afinal?&lt;/h2&gt;
&lt;p&gt;Pense em uma Stream como uma &lt;strong&gt;linha de produção&lt;/strong&gt;. Em uma ponta, você tem a fonte de matéria-prima (sua coleção, como uma &lt;code&gt;List&lt;/code&gt; ou &lt;code&gt;Set&lt;/code&gt;). Os elementos dessa coleção entram na linha de produção, um por um, e passam por uma série de estações (operações), onde são filtrados, transformados, ordenados, etc. No final da linha, você obtém o produto acabado (um resultado, que pode ser outra lista, um valor único, ou simplesmente uma ação executada).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pontos-chave sobre Streams:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Não são uma estrutura de dados:&lt;/strong&gt; Uma Stream não armazena dados. Ela transporta dados da fonte através de um pipeline de operações.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;São "preguiçosas" (Lazy):&lt;/strong&gt; As operações intermediárias (como filtrar e mapear) não são executadas até que uma operação terminal (que produz o resultado final) seja invocada. Isso permite otimizações de performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consomem a si mesmas:&lt;/strong&gt; Uma Stream só pode ser usada uma vez. Depois que a operação terminal é chamada, a Stream é "consumida" e não pode ser reutilizada.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;O Ciclo de Vida de uma Stream: Fonte, Operações e Resultado&lt;/h2&gt;
&lt;p&gt;Toda operação com Stream segue um padrão de três etapas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fonte de Dados (Source):&lt;/strong&gt; Criar a Stream a partir de uma coleção, array ou outro recurso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operações Intermediárias (Intermediate Operations):&lt;/strong&gt; Uma ou mais operações que transformam a Stream em outra Stream. Exemplos: &lt;code&gt;filter()&lt;/code&gt;, &lt;code&gt;map()&lt;/code&gt;, &lt;code&gt;sorted()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operação Terminal (Terminal Operation):&lt;/strong&gt; Uma operação que produz um resultado final ou um "efeito colateral" (como imprimir na tela). É essa operação que "liga" a linha de produção. Exemplos: &lt;code&gt;collect()&lt;/code&gt;, &lt;code&gt;forEach()&lt;/code&gt;, &lt;code&gt;reduce()&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Agora, vamos ver o código anterior reescrito com Streams:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomesFiltrados&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 1. Fonte&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Eletrônicos&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getCategoria&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 2. Operação Intermediária&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPreco&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// 2. Operação Intermediária&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// 2. Operação Intermediária&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// 2. Operação Intermediária&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// 3. Operação Terminal&lt;/span&gt;

&lt;span class="n"&gt;nomesFiltrados&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Incrível, não? O código se tornou &lt;strong&gt;declarativo&lt;/strong&gt;. Ele descreve &lt;em&gt;o que&lt;/em&gt; queremos, não &lt;em&gt;como&lt;/em&gt; fazer. "Pegue os produtos, filtre por categoria e preço, mapeie para o nome, ordene e colete em uma lista".&lt;/p&gt;
&lt;h2&gt;As Operações Intermediárias Essenciais&lt;/h2&gt;
&lt;p&gt;Estas são as suas ferramentas para construir o pipeline.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;filter(Predicate&amp;lt;T&amp;gt;)&lt;/code&gt; - Filtrando Elementos&lt;/h3&gt;
&lt;p&gt;A operação &lt;code&gt;filter&lt;/code&gt; é como um porteiro. Ela recebe uma condição (um &lt;code&gt;Predicate&lt;/code&gt;, que é uma função que retorna &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;) e só permite que os elementos que satisfazem essa condição passem para a próxima etapa.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Encontrar todos os usuários ativos&lt;/span&gt;
&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Usuario&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ativos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;usuarios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Usuario&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;isAtivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Usa um method reference&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;map(Function&amp;lt;T, R&amp;gt;)&lt;/code&gt; - Transformando Elementos&lt;/h3&gt;
&lt;p&gt;A operação &lt;code&gt;map&lt;/code&gt; é como uma máquina de transformação. Ela pega cada elemento que entra e o transforma em outra coisa, aplicando uma função.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Obter uma lista apenas com os e-mails dos usuários&lt;/span&gt;
&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;usuarios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Usuario&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getEmail&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;sorted()&lt;/code&gt; e &lt;code&gt;sorted(Comparator&amp;lt;T&amp;gt;)&lt;/code&gt; - Ordenando&lt;/h3&gt;
&lt;p&gt;Como o nome diz, &lt;code&gt;sorted&lt;/code&gt; ordena os elementos. Sem argumentos, ele usa a ordem natural (para Strings, números, etc.). Você também pode passar um &lt;code&gt;Comparator&lt;/code&gt; para definir uma lógica de ordenação customizada.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Obter os nomes dos produtos, ordenados pelo preço (do menor para o maior)&lt;/span&gt;
&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomesOrdenadosPorPreco&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Comparator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;comparing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getPreco&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;distinct()&lt;/code&gt; - Removendo Duplicatas&lt;/h3&gt;
&lt;p&gt;Esta operação remove elementos duplicados da Stream, baseando-se no método &lt;code&gt;equals()&lt;/code&gt; dos objetos.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;categoriasUnicas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getCategoria&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;distinct&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Juntando Tudo: Operações Terminais&lt;/h2&gt;
&lt;p&gt;Nenhuma operação intermediária faz nada até que uma operação terminal seja chamada.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;collect(Collector&amp;lt;T, A, R&amp;gt;)&lt;/code&gt; - O Coletor Universal&lt;/h3&gt;
&lt;p&gt;Esta é, de longe, a operação terminal mais comum. Ela pega os elementos da Stream e os "coleciona" em uma estrutura de dados, geralmente uma &lt;code&gt;List&lt;/code&gt;, &lt;code&gt;Set&lt;/code&gt; ou &lt;code&gt;Map&lt;/code&gt;. A classe &lt;code&gt;Collectors&lt;/code&gt; nos fornece os coletores mais comuns.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Collectors.toList()&lt;/code&gt;: Agrupa os elementos em uma &lt;code&gt;List&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Collectors.toSet()&lt;/code&gt;: Agrupa em um &lt;code&gt;Set&lt;/code&gt; (removendo duplicatas).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Collectors.joining(", ")&lt;/code&gt;: Junta os elementos de uma Stream de Strings em uma única String.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Collectors.groupingBy(...)&lt;/code&gt;: Agrupa os elementos em um &lt;code&gt;Map&lt;/code&gt; baseado em uma propriedade. É extremamente poderoso.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Agrupar produtos por categoria&lt;/span&gt;
&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtosPorCategoria&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;groupingBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Produto&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getCategoria&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;forEach(Consumer&amp;lt;T&amp;gt;)&lt;/code&gt; - Executando uma Ação&lt;/h3&gt;
&lt;p&gt;Use &lt;code&gt;forEach&lt;/code&gt; quando quiser executar uma ação para cada elemento da Stream, sem retornar um resultado. Geralmente usado para imprimir na tela ou interagir com outros sistemas.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEstoque&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Produto sem estoque: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;reduce()&lt;/code&gt; - Agregando Valores a um Único Resultado&lt;/h3&gt;
&lt;p&gt;A operação &lt;code&gt;reduce&lt;/code&gt; é usada para combinar todos os elementos de uma Stream em um único resultado. O exemplo clássico é somar uma lista de números.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Calcular o valor total do estoque&lt;/span&gt;
&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valorTotal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPreco&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEstoque&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Double&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ou (subtotal, valor) -&amp;gt; subtotal + valor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Operações de Busca (&lt;code&gt;findFirst()&lt;/code&gt;, &lt;code&gt;findAny()&lt;/code&gt;, &lt;code&gt;anyMatch()&lt;/code&gt;, etc.)&lt;/h3&gt;
&lt;p&gt;Muitas vezes, você não quer a coleção inteira, mas apenas verificar algo sobre ela.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;anyMatch(Predicate&amp;lt;T&amp;gt;)&lt;/code&gt;: Retorna &lt;code&gt;true&lt;/code&gt; se &lt;em&gt;qualquer&lt;/em&gt; elemento satisfizer a condição.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allMatch(Predicate&amp;lt;T&amp;gt;)&lt;/code&gt;: Retorna &lt;code&gt;true&lt;/code&gt; se &lt;em&gt;todos&lt;/em&gt; os elementos satisfizerem a condição.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;findFirst()&lt;/code&gt;: Retorna o primeiro elemento da Stream (em um &lt;code&gt;Optional&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;findAny()&lt;/code&gt;: Retorna qualquer elemento da Stream (útil em processamento paralelo).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Verificar se existe algum produto com preço acima de R$ 10.000&lt;/span&gt;
&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;temProdutoCaro&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;anyMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPreco&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Conclusão: Por que Adotar Streams Hoje?&lt;/h2&gt;
&lt;p&gt;A API de Streams do Java é muito mais do que apenas uma forma "bonita" de escrever código. Ela representa uma evolução na forma como pensamos sobre o processamento de dados em Java.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Código Declarativo e Legível:&lt;/strong&gt; Seu código passa a descrever "o que" você quer, e não "como" fazer, tornando-o mais fácil de entender à primeira vista.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Menos Código, Menos Bugs:&lt;/strong&gt; Menos linhas de código e a ausência de gerenciamento manual de laços e variáveis de estado significam uma superfície menor para a ocorrência de bugs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pronto para o Paralelismo:&lt;/strong&gt; Mudar de &lt;code&gt;.stream()&lt;/code&gt; para &lt;code&gt;.parallelStream()&lt;/code&gt; pode, em muitos casos, fazer seu código rodar em múltiplos núcleos da CPU, melhorando drasticamente a performance em grandes volumes de dados, com quase nenhum esforço.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Abra sua IDE, encontre um laço &lt;code&gt;for&lt;/code&gt; complexo em seu projeto e tente refatorá-lo usando Streams. No começo pode parecer desafiador, mas a clareza e o poder que você ganhará em seu código farão com que você nunca mais queira voltar atrás.&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="java"></category><category term="streams"></category><category term="java 8"></category><category term="lambda"></category><category term="programação funcional"></category><category term="filter"></category><category term="map"></category><category term="reduce"></category><category term="coleções"></category></entry><entry><title>O que é uma API REST? Um Guia Completo Para Iniciantes</title><link href="https://dicasdeprogramacao.com.br/o-que-e-uma-api-rest-um-guia-para-iniciantes/" rel="alternate"></link><published>2025-09-30T00:00:00-03:00</published><updated>2025-09-30T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2025-09-30:/o-que-e-uma-api-rest-um-guia-para-iniciantes/</id><summary type="html">&lt;p&gt;Se você está no universo do desenvolvimento de software, é impossível não ter esbarrado nos termos "API REST" ou "API RESTful". Eles estão por toda parte: em documentações, vagas de emprego e discussões sobre arquitetura de sistemas. Para um iniciante …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Se você está no universo do desenvolvimento de software, é impossível não ter esbarrado nos termos "API REST" ou "API RESTful". Eles estão por toda parte: em documentações, vagas de emprego e discussões sobre arquitetura de sistemas. Para um iniciante, podem parecer conceitos complexos e intimidadores.&lt;/p&gt;
&lt;p&gt;A boa notícia? A ideia por trás do REST é muito mais intuitiva do que parece.&lt;/p&gt;
&lt;p&gt;Neste guia completo, vamos desmistificar de uma vez por todas o que é uma API REST. Vamos usar analogias, explorar cada um dos seus princípios e ver exemplos práticos que vão solidificar seu entendimento.&lt;/p&gt;
&lt;h2&gt;Primeiro, o que é uma API?&lt;/h2&gt;
&lt;p&gt;Antes de falarmos de REST, vamos dar um passo atrás. O que é uma &lt;strong&gt;API&lt;/strong&gt; (Application Programming Interface - Interface de Programação de Aplicativos)?&lt;/p&gt;
&lt;p&gt;Pense em uma API como um &lt;strong&gt;contrato de serviço&lt;/strong&gt; entre duas aplicações. Ela define um conjunto de regras, padrões e ferramentas que permitem que um software "converse" com outro, sem que um precise saber os detalhes de implementação do outro.&lt;/p&gt;
&lt;p&gt;Você usa APIs todos os dias, mesmo sem perceber:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ao usar o Google Maps em um app de delivery, o app está usando a API do Google Maps.&lt;/li&gt;
&lt;li&gt;Ao fazer login em um site usando sua conta do Facebook, o site está usando a API do Facebook.&lt;/li&gt;
&lt;li&gt;Ao ver a previsão do tempo no seu celular, o aplicativo está buscando dados de uma API de meteorologia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A API é a ponte que permite essa comunicação de forma segura e padronizada.&lt;/p&gt;
&lt;h2&gt;A Analogia do Restaurante&lt;/h2&gt;
&lt;p&gt;A analogia mais famosa para explicar uma API é a do restaurante, e por um bom motivo.&lt;/p&gt;
&lt;p&gt;Imagine que você está em um restaurante. Você é o &lt;strong&gt;Cliente&lt;/strong&gt; (uma aplicação, como um app de celular ou um site). A cozinha, onde a comida é preparada, é o &lt;strong&gt;Servidor&lt;/strong&gt; (o sistema back-end com a lógica de negócio e o banco de dados).&lt;/p&gt;
&lt;p&gt;Você, como cliente, não pode simplesmente entrar na cozinha e preparar seu prato. Seria uma bagunça, inseguro e você nem saberia as receitas.&lt;/p&gt;
&lt;p&gt;É aqui que entra o garçom. O garçom é a sua &lt;strong&gt;API&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;O Cardápio (A Documentação da API):&lt;/strong&gt; O garçom te entrega um cardápio. Ele diz exatamente o que você pode pedir e como pedir (ex: "Bife à parmegiana com fritas"). O cardápio é a documentação da API, que define os &lt;strong&gt;endpoints&lt;/strong&gt; (as "opções" que você pode solicitar).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;O Pedido (A Requisição):&lt;/strong&gt; Você escolhe um item e faz o pedido ao garçom. Você especifica o que quer ("Bife à parmegiana"), talvez com alguma observação ("sem cebola"). Isso é a sua &lt;strong&gt;requisição&lt;/strong&gt; (request) para a API. Você está usando um formato que o garçom entende perfeitamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;O Garçom na Cozinha (A Lógica da API):&lt;/strong&gt; O garçom anota seu pedido e o leva para a cozinha. Ele traduz sua solicitação para a linguagem da cozinha. Ele é o único que tem permissão para interagir diretamente com os cozinheiros. Você não precisa saber se a cozinha usa um forno a lenha ou um fogão de indução; o garçom abstrai toda essa complexidade.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Comida Pronta (A Resposta):&lt;/strong&gt; A cozinha prepara seu prato e o entrega ao garçom. O garçom, por sua vez, verifica se o pedido está correto e o traz até sua mesa. Esse prato é a &lt;strong&gt;resposta&lt;/strong&gt; (response) da API.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Essa interação é padronizada, segura e eficiente. E é exatamente assim que uma API funciona.&lt;/p&gt;
&lt;h2&gt;Finalmente, o que é REST?&lt;/h2&gt;
&lt;p&gt;Agora que entendemos o papel da API, podemos falar sobre o &lt;strong&gt;REST&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;REST&lt;/strong&gt; (REpresentational State Transfer - Transferência de Estado Representacional) não é uma linguagem, uma biblioteca ou uma tecnologia. É um &lt;strong&gt;estilo de arquitetura&lt;/strong&gt; para projetar APIs.&lt;/p&gt;
&lt;p&gt;Pense no REST como um conjunto de "boas maneiras" ou um guia de estilo para o nosso "garçom". Uma API que segue essas regras é chamada de &lt;strong&gt;API RESTful&lt;/strong&gt;. Essas regras, ou "constraints" (restrições), foram definidas por Roy Fielding em sua tese de doutorado em 2000, e elas ajudam a criar APIs que são escaláveis, flexíveis e fáceis de manter.&lt;/p&gt;
&lt;p&gt;Vamos conhecer os 6 princípios fundamentais de uma arquitetura RESTful.&lt;/p&gt;
&lt;h3&gt;1. Arquitetura Cliente-Servidor&lt;/h3&gt;
&lt;p&gt;Este é o princípio mais básico. A API deve separar claramente o &lt;strong&gt;cliente&lt;/strong&gt; (quem consome os dados) do &lt;strong&gt;servidor&lt;/strong&gt; (quem armazena e fornece os dados).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O cliente não se preocupa com o armazenamento de dados, o que o torna mais simples e focado na interface do usuário.&lt;/li&gt;
&lt;li&gt;O servidor não se preocupa com a interface do usuário, o que o torna focado na lógica de negócio e no fornecimento de dados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa separação permite que eles evoluam de forma independente. Uma equipe pode desenvolver um novo visual para o site (cliente) sem tocar no servidor. Da mesma forma, a equipe de back-end pode otimizar o banco de dados (servidor) sem que o cliente precise ser alterado.&lt;/p&gt;
&lt;h3&gt;2. Stateless (Sem Estado)&lt;/h3&gt;
&lt;p&gt;Este é um dos princípios mais importantes. &lt;strong&gt;Stateless&lt;/strong&gt; significa que cada requisição feita do cliente para o servidor deve conter &lt;strong&gt;toda a informação&lt;/strong&gt; que o servidor precisa para entender e processar a requisição.&lt;/p&gt;
&lt;p&gt;O servidor não armazena nenhum "contexto" ou "sessão" do cliente entre as requisições.&lt;/p&gt;
&lt;p&gt;Voltando à nossa analogia: toda vez que você chama o garçom, você faz um pedido completo. Você não diz "traga o mesmo que pedi da última vez". O garçom não precisa se lembrar de nada sobre você.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Por que isso é tão importante?&lt;/strong&gt; Porque torna a API muito mais &lt;strong&gt;escalável&lt;/strong&gt;. Se o servidor não precisa guardar estado, qualquer servidor pode atender a qualquer requisição. Isso permite distribuir as requisições entre dezenas ou milhares de servidores (usando um Load Balancer), garantindo que a aplicação continue funcionando mesmo com um aumento massivo de usuários.&lt;/p&gt;
&lt;p&gt;"Mas e o login? O servidor não precisa saber quem eu sou?" Sim, mas essa informação é enviada pelo cliente &lt;strong&gt;a cada requisição&lt;/strong&gt;, geralmente na forma de um token de autenticação (como um JWT) no cabeçalho.&lt;/p&gt;
&lt;h3&gt;3. Cacheable (Cacheável)&lt;/h3&gt;
&lt;p&gt;Para melhorar a performance e reduzir a carga no servidor, as respostas de uma API REST devem poder ser cacheadas. A própria resposta deve indicar se ela pode ou não ser armazenada em cache pelo cliente (ou por um servidor de cache intermediário).&lt;/p&gt;
&lt;p&gt;Se os dados de um post de blog não mudam a cada segundo, por que o cliente deveria pedi-los ao servidor toda vez? Ele pode guardar uma cópia local (em cache) por alguns minutos ou horas.&lt;/p&gt;
&lt;p&gt;Isso é feito através de cabeçalhos HTTP na resposta, como &lt;code&gt;Cache-Control&lt;/code&gt; e &lt;code&gt;Expires&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;4. Interface Uniforme&lt;/h3&gt;
&lt;p&gt;Este princípio é o coração do REST e o que garante a simplicidade e o desacoplamento. Ele se divide em quatro sub-princípios:&lt;/p&gt;
&lt;h4&gt;a) Identificação de Recursos (URIs)&lt;/h4&gt;
&lt;p&gt;Em REST, tudo é um &lt;strong&gt;recurso&lt;/strong&gt;: um usuário, um produto, um post, um comentário. Cada recurso deve ser unicamente identificável através de uma &lt;strong&gt;URI&lt;/strong&gt; (Uniform Resource Identifier).&lt;/p&gt;
&lt;p&gt;Boas práticas para URIs:
- Use substantivos, não verbos: &lt;code&gt;/posts&lt;/code&gt;, e não &lt;code&gt;/getPosts&lt;/code&gt;.
- Use plurais para coleções: &lt;code&gt;/users&lt;/code&gt;, &lt;code&gt;/products&lt;/code&gt;.
- Use uma hierarquia lógica: &lt;code&gt;/posts/123/comments&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Exemplos:
- &lt;code&gt;https://meublog.com/api/posts&lt;/code&gt; (A coleção de todos os posts)
- &lt;code&gt;https://meublog.com/api/posts/42&lt;/code&gt; (O post específico de ID 42)
- &lt;code&gt;https://meublog.com/api/users/10/posts&lt;/code&gt; (Todos os posts do usuário de ID 10)&lt;/p&gt;
&lt;h4&gt;b) Manipulação de Recursos Através de Representações&lt;/h4&gt;
&lt;p&gt;O cliente não interage diretamente com o recurso no banco de dados. Ele interage com uma &lt;strong&gt;representação&lt;/strong&gt; desse recurso. O formato mais comum para essa representação hoje é o &lt;strong&gt;JSON&lt;/strong&gt; (JavaScript Object Notation).&lt;/p&gt;
&lt;p&gt;Quando você pede &lt;code&gt;GET /api/users/1&lt;/code&gt;, você não recebe o objeto "User" da linguagem do back-end. Você recebe um documento JSON que representa o estado atual daquele usuário.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;João Silva&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;email&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;joao.silva@example.com&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;links&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;rel&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;self&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;href&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/api/users/1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;rel&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;posts&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;href&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/api/users/1/posts&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;c) Mensagens Autodescritivas&lt;/h4&gt;
&lt;p&gt;Cada mensagem (requisição ou resposta) deve ser autossuficiente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;requisição&lt;/strong&gt; especifica o que quer fazer (com o verbo HTTP) e sobre qual recurso (com a URI).&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;resposta&lt;/strong&gt; usa &lt;strong&gt;Códigos de Status HTTP&lt;/strong&gt; para informar o resultado da operação (ex: &lt;code&gt;200 OK&lt;/code&gt;, &lt;code&gt;201 Created&lt;/code&gt;, &lt;code&gt;404 Not Found&lt;/code&gt;, &lt;code&gt;500 Internal Server Error&lt;/code&gt;) e o corpo da resposta contém a representação do recurso (em JSON, por exemplo).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;d) HATEOAS (Hypermedia as the Engine of Application State)&lt;/h4&gt;
&lt;p&gt;Este é o princípio mais avançado e muitas vezes o menos implementado. A ideia é que a resposta da API deve guiar o cliente sobre quais são os próximos passos possíveis, incluindo links (hipermídia) para outras ações.&lt;/p&gt;
&lt;p&gt;Veja o exemplo de JSON acima. Além dos dados do usuário, a API retornou uma lista de &lt;code&gt;links&lt;/code&gt;. Um deles é o link para o próprio recurso (&lt;code&gt;self&lt;/code&gt;), e o outro é um link para os posts daquele usuário. Isso permite que o cliente "descubra" como navegar na API sem precisar ter todas as URIs pré-programadas ("hardcoded"). É como navegar em um site: você clica nos links que a página te oferece.&lt;/p&gt;
&lt;h3&gt;5. Sistema em Camadas (Layered System)&lt;/h3&gt;
&lt;p&gt;O cliente que faz a requisição não precisa saber se está se comunicando diretamente com o servidor final, ou com um intermediário no caminho (como um Load Balancer, um Gateway de API ou um servidor de Cache).&lt;/p&gt;
&lt;p&gt;Essa arquitetura em camadas permite adicionar componentes que melhoram a segurança e a escalabilidade sem que o cliente ou o servidor final precisem ser modificados.&lt;/p&gt;
&lt;h3&gt;6. Código sob Demanda (Opcional)&lt;/h3&gt;
&lt;p&gt;Este é o único princípio opcional. Ele permite que o servidor, em certas situações, envie código executável (como um script JavaScript) para o cliente, estendendo suas funcionalidades temporariamente. É raramente usado na prática em APIs RESTful puras.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;APIs REST são muito mais do que um modismo. Elas são a base da web moderna, permitindo que sistemas complexos e distribuídos se comuniquem de forma padronizada, flexível e escalável.&lt;/p&gt;
&lt;p&gt;Ao seguir os princípios de Cliente-Servidor, Stateless, Cacheable, Interface Uniforme e Sistema em Camadas, os desenvolvedores podem criar "garçons" (APIs) que são eficientes, confiáveis e fáceis de usar.&lt;/p&gt;
&lt;p&gt;Para quem está começando, entender esses conceitos não é apenas um diferencial, mas um passo fundamental para se tornar um desenvolvedor proficiente no ecossistema tecnológico atual. Da próxima vez que você ouvir falar em "API RESTful", saberá que não se trata de uma tecnologia específica, mas de um elegante conjunto de princípios que fazem a internet funcionar.&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="API"></category><category term="REST"></category><category term="RESTFUL"></category><category term="iniciante"></category><category term="conceitos"></category><category term="desenvolvimento web"></category><category term="arquitetura"></category></entry><entry><title>Qual linguagem de programação aprender em 2024</title><link href="https://dicasdeprogramacao.com.br/qual-linguagem-de-programacao-aprender-em-2024/" rel="alternate"></link><published>2023-12-18T00:00:00-03:00</published><updated>2023-12-18T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2023-12-18:/qual-linguagem-de-programacao-aprender-em-2024/</id><summary type="html">&lt;p&gt;Esse período de segunda quinzena de dezembro é sempre um momento de reflexão para muita gente.
E realmente é um bom momento para isso, pois para muita gente o trabalho e os estudos dão uma desacelerada.
E muita gente aproveita …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Esse período de segunda quinzena de dezembro é sempre um momento de reflexão para muita gente.
E realmente é um bom momento para isso, pois para muita gente o trabalho e os estudos dão uma desacelerada.
E muita gente aproveita para planejar o que pretende conquistar no ano seguinte.&lt;/p&gt;
&lt;p&gt;Quem pretende entrar de cabeça na área de programação, pode estar se perguntando:
&lt;strong&gt;Qual linguagem de programação devo escolhe para estudar em 2024&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;A escolha da linguagem de programação depende muito dos seus interesses,
objetivos e do tipo de desenvolvimento que você deseja realizar.
Em 2024, algumas linguagens continuarão a ser relevantes, enquanto outras podem ganhar destaque.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Linguagem de Programação 2024" class="aligncenter" src="/images/qual-linguagem-de-programacao-aprender-em-2024/destaque.png"&gt;&lt;/p&gt;
&lt;p&gt;Vou deixar aqui algumas sugestões e o porquê estudar cada uma dessas linguagens,
baseado na minha experiência e nas minhas observações dos movimentos do mercado neste último ano.&lt;/p&gt;
&lt;h2&gt;1. Python&lt;/h2&gt;
&lt;p&gt;Python tem crescido constantemente em popularidade devido à sua sintaxe clara e versatilidade.
É usado em uma variedade de campos, mas principalmente nas áreas de ciência de dados,
automação, inteligência artificial e aprendizado de máquina.&lt;/p&gt;
&lt;p&gt;Se você pretende trabalhar com alguma dessas áreas, sugiro fortemente que você entre de cabeça
no estudo de python. Especialmente as bibliotecas voltadas para dados e aprendizado de máquina, como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://scikit-learn.org/" target="_blank"&gt;Scikit-learn&lt;/a&gt;: Biblioteca para aprendizado de máquina com ferramentas simples e eficazes para análise preditiva de dados.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pandas.pydata.org/" target="_blank"&gt;Pandas&lt;/a&gt;: Para manipulação e análise de dados, oferecendo estruturas de dados utilizadíssimas como o DataFrame.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://numpy.org/" target="_blank"&gt;NumPy&lt;/a&gt;: Para computação numérica eficiente e manipulação de arrays.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tensorflow.org/" target="_blank"&gt;TensorFlow&lt;/a&gt; e &lt;a href="https://pytorch.org/" target="_blank"&gt;PyTorch&lt;/a&gt;: Frameworks populares para desenvolvimento em aprendizado de máquina e deep learning.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://matplotlib.org/" target="_blank"&gt;Matplotlib&lt;/a&gt; e &lt;a href="https://seaborn.pydata.org/" target="_blank"&gt;Seaborn&lt;/a&gt;: Bibliotecas de visualização de dados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Além de ser muito utilizado com dados, o Python é bastante utilizado para desenvolvimento web,
com frameworks como &lt;a href="https://www.djangoproject.com/" target="_blank"&gt;Django&lt;/a&gt;, &lt;a href="https://flask.palletsprojects.com/" target="_blank"&gt;Flask&lt;/a&gt; e &lt;a href="https://fastapi.tiangolo.com/" target="_blank"&gt;FastAPI&lt;/a&gt;.
Além de também ser muito utilizado para WebScrapping com bibliotecas como &lt;a href="https://beautiful-soup-4.readthedocs.io/en/latest/" target="_blank"&gt;Beautiful Soup&lt;/a&gt; e &lt;a href="https://scrapy.org/" target="_blank"&gt;Scrapy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enfim, seja qual for o motivo que você escolher estudar python, te garanto que foi uma excelente escolha!&lt;/p&gt;
&lt;h2&gt;2. Javascript&lt;/h2&gt;
&lt;p&gt;Se você estiver interessado em desenvolvimento web, JavaScript continua sendo fundamental.
Com o aumento do desenvolvimento de aplicações web e móveis,
aprender um framework como React, Angular ou Vue.js pode ser benéfico.&lt;/p&gt;
&lt;p&gt;Especialmente se você está começando na área de desenvolvimento de software,
Javascript é uma excelente porta de entrada, principalmente por ter uma barreira de entrada muito baixa.
Basicamente para começar a escrever script javascript, basta pressionar a tecla F12 do seu teclado no seu navegador,
para abrir o Console das ferramentas do seu navegador, alí vc pode escrever scripts Javascript e executá-lo&lt;/p&gt;
&lt;p&gt;Javascript é a linguagem padrão para desenvolvimento de aplicações web,
sendo utilizada tanto no frontend quanto no backend com Node.js.
E pra completar, com React Native, é possível usar Javascript para desenvolver aplicativos móveis para iOS e Android.&lt;/p&gt;
&lt;h2&gt;3. TypeScript&lt;/h2&gt;
&lt;p&gt;O TypeScript é um superset de JavaScript que adiciona tipagem estática à linguagem,
tornando o código mais robusto para grandes projetos. É frequentemente usado com frameworks modernos como Angular.&lt;/p&gt;
&lt;p&gt;Se você já trabalha com JavaScript, aprender TypeScript em 2024 é uma excelente evolução na sua forma de programar.&lt;/p&gt;
&lt;p&gt;Após aprender TypeScript dificilmente você deixará de utilizar a linguagem e com certeza você escreverá códigos melhores,
com menos bugs e com mais agilidade, já que um dos grandes benefícios da linguagem
é justamente antecipar problemas do seu código que você encontraria somente em tempo de execução.&lt;/p&gt;
&lt;h2&gt;4. Java&lt;/h2&gt;
&lt;p&gt;Java é uma das linguagens mais robustas do mundo e é amplamente utilizada
em desenvolvimento corporativo, especialmente em grandes empresas.&lt;/p&gt;
&lt;p&gt;A muitos anos Java é uma linguagem de destaque no mercado.
E aprender Java continua sendo uma escolha sólida por diversas razões,
especialmente para quem busca uma base sólida em programação, orientação a objetos, microserviços,
desenvolvimento de software corporativo, aplicativos móveis para Android, etc.&lt;/p&gt;
&lt;p&gt;Ter habilidades em Java pode abrir oportunidades de carreira em várias indústrias.
A demanda por desenvolvedores Java permanece alta em muitas regiões do mundo.
E muitas vezes você nem precisa se mudar pra lá.&lt;/p&gt;
&lt;p&gt;Se esta for a linguagem que você escolheu estudar em 2024. Sugiro também estudar o ecossistema
de framerowks &lt;a href="https://spring.io/projects/spring-boot" target="_blank"&gt;Spring-Boot&lt;/a&gt;.
Hoje em dia, não dá pra falar de Java sem falar de Spring-boot, especialmente em se tratando de microserviços.&lt;/p&gt;
&lt;h2&gt;5. Kotlin&lt;/h2&gt;
&lt;p&gt;Assim como falei anteriormente do TypeScript ser uma linguagem de evolução do JavaScript.
Kotlin é uma linguagem que nasce a partir do Java, trazendo uma forma mais ágil de desenvolvimento.&lt;/p&gt;
&lt;p&gt;Kotlin é uma linguagem moderna que é totalmente interoperável com Java.
É uma ótima opção para o desenvolvimento de aplicativos Android, mas não se prende a isso.
O Kotlin é uma excelente opção para desenvolvimento backend, também com ecossistema de frameworks Spring.&lt;/p&gt;
&lt;p&gt;Se você já sabe Java, mas ainda não mergulhou no Kotlin, sugiro fortemente que o faça!
No final de 2024 você com certeza será um programador melhor.&lt;/p&gt;
&lt;h2&gt;6. Swift&lt;/h2&gt;
&lt;p&gt;Se você é fã dos produtos da Apple e deseja se desenvolver aplicativos para iOS, macOS, watchOS e tvOS,
então definitivamente você deveria aprender Swift em 2024.&lt;/p&gt;
&lt;p&gt;O Swift foi projetado para funcionar perfeitamente com as tecnologias e frameworks da Apple
como Cocoa Touch para iOS e macOS, SwiftUI para interfaces de usuário declarativas, e outros.
Isso proporciona uma experiência de desenvolvimento coesa e integrada.&lt;/p&gt;
&lt;p&gt;E apesar de ser uma linguagem relativamente jovem, Swift possui uma comunidade muito ativa.
Há uma variedade de recursos, tutoriais, fóruns e bibliotecas disponíveis
para ajudar os desenvolvedores Swift.&lt;/p&gt;
&lt;p&gt;E em se tratando de mercado de trabalho.
Basta observar o contínuo crescimento do uso de dispositivos Apple, 
para concluir que há uma demanda crescente por desenvolvedores que possuam habilidades em Swift.
Portanto, se você decidiu aprender Swift em 2024, pode ficar tranquilo que fez uma excelente escolha!&lt;/p&gt;
&lt;h2&gt;7. Dart&lt;/h2&gt;
&lt;p&gt;Dart é uma linguagem de programação desenvolvida pela Google,
e é especialmente conhecida por ser a linguagem principal para
o desenvolvimento de aplicativos usando o framework Flutter.&lt;/p&gt;
&lt;p&gt;Embora você possa trabalhar com Swift para desenvolver aplicativos especificamente para iOS
e Java/Kotlin para desenvolver aplicativos especificamente para Android.
Você pode decidir trabalhar com desenvolvimento aplicativos tanto para Android quanto para iOS.
Aqui vem o grande dilema entre escolher utilizar React Native ou Flutter.&lt;/p&gt;
&lt;p&gt;Os dois frameworks são bem parecidos, a grande diferença é que o React Native utiliza Javascript
e o Flutter utiliza Dart. Outra diferença é que o React foi criado pelo time do Facebook
e o Flutter pelo Google.&lt;/p&gt;
&lt;p&gt;Dart tem uma linguagem relativamente simples, o que pode facilitar a aprendizagem,
especialmente para aqueles que estão começando na programação.&lt;/p&gt;
&lt;p&gt;Embora o principal foco do Dart seja o desenvolvimento mobile com o Flutter,
também é possível usar Dart para o desenvolvimento web.
O framework AngularDart é um exemplo de como Dart pode ser utilizado
para a criação de aplicações web.&lt;/p&gt;
&lt;p&gt;A comunidade Flutter vem crescendo muito nos últimos anos e
isso significa que há muitos recursos, tutoriais e suporte disponíveis.&lt;/p&gt;
&lt;p&gt;Por fim, é importante dizer que o Google leva o Flutter (e consequentimente o Dart) muito a sério.
Sendo a maioria de seus aplicativos (Gmail, Google Maps, etc.) desenvolvidos utilizando Dart e Flutter.&lt;/p&gt;
&lt;h2&gt;8. Go (Golang)&lt;/h2&gt;
&lt;p&gt;Go tem sido cada vez mais adotado em projetos de infraestrutura e sistemas distribuídos.
Sua simplicidade e eficiência o tornam uma escolha sólida para certos tipos de desenvolvimento.&lt;/p&gt;
&lt;p&gt;Go é uma linguagem de programação desenvolvida pelo Google, e ela ganhou popularidade
devido a várias características que a tornam atraente para determinados cenários.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Foi projetada com suporte nativo à concorrência.&lt;/li&gt;
&lt;li&gt;É compilada para código nativo, resultando em um desempenho rápido.&lt;/li&gt;
&lt;li&gt;A sintaxe é simples e a linguagem foi projetada para ser fácil de aprender e entender.&lt;/li&gt;
&lt;li&gt;Possui um ecossistema forte, com uma biblioteca padrão abrangente e bibliotecas de terceiros para uma variedade de finalidades.&lt;/li&gt;
&lt;li&gt;É particularmente eficaz para programação de rede.&lt;/li&gt;
&lt;li&gt;É utilizado em várias empresas de renome, como Google, Uber, Dropbox, e outras.&lt;/li&gt;
&lt;li&gt;Excelente para Microsserviços, devido à sua eficiência em desenvolver serviços independentes, escaláveis e concorrentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dito tudo isso, se você está interessado em sistemas distribuídos,
concorrência, eficiência e simplicidade, aprender Go pode ser uma excelente decisão.&lt;/p&gt;
&lt;h2&gt;9. Rust&lt;/h2&gt;
&lt;p&gt;Rust tem ganhado popularidade devido à sua ênfase em segurança e desempenho.
É usado para desenvolvimento de sistemas de baixo nível,
como sistemas operacionais e software de infraestrutura.&lt;/p&gt;
&lt;p&gt;Para se ter idéia, Linus Torvalds escolheu Rust para ser a linguagem para a evolução do Linux.
Ele destacou que o Rust tem atraído desenvolvedores mais jovens para a manutenção do Linux.&lt;/p&gt;
&lt;p&gt;Pelas palavras dele:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;People are hard, code is easy, and Rust’s role in Linux’s future.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Neste post, quis trazer algumas características das linguagens de programação
que, ao meu ver, valem a pena aprender em 2024.
Claro que tudo vai depender do seu objetivo e cada linguagem tem seus prós e contras.&lt;/p&gt;
&lt;p&gt;Fique atento às tendências da indústria
e avalie as oportunidades que se alinham aos seus objetivos profissionais.&lt;/p&gt;
&lt;p&gt;Mas o mais importante de tudo. Independente do seu nível de conhecimento e sua experiência.
Com certeza vale a pena aprender uma linguagem nova, um framework novo, uma técnica nova.
No final, você sempre estará melhor!&lt;/p&gt;
&lt;p&gt;E você? O que vai aprender em 2024? Deixe aí abaixo nos comentários.&lt;/p&gt;</content><category term="Iniciante em programação"></category><category term="Iniciante"></category></entry><entry><title>Como transformar uma string separada por vírgula em listas</title><link href="https://dicasdeprogramacao.com.br/como-transformar-uma-string-separada-por-virgula-em-listas/" rel="alternate"></link><published>2022-04-04T00:00:00-03:00</published><updated>2022-04-04T00:00:00-03:00</updated><author><name>Marcelo Santos de Oliveira</name></author><id>tag:dicasdeprogramacao.com.br,2022-04-04:/como-transformar-uma-string-separada-por-virgula-em-listas/</id><summary type="html">&lt;p&gt;Conversão de tipos dados é algo comum de se precisar na programação. Uma vez que em empresas onde temos vários programadores que desenvolvem e dão manutenção em varias partes diferentes de um sistema, algo normal de se acontecer é ter …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Conversão de tipos dados é algo comum de se precisar na programação. Uma vez que em empresas onde temos vários programadores que desenvolvem e dão manutenção em varias partes diferentes de um sistema, algo normal de se acontecer é ter que se manipular os dados para que possamos usar da melhor forma possível.&lt;/p&gt;
&lt;p&gt;Em um outro cenário onde sistemas são projetados para consumir dados de APIs externas onde o desenvolvedor não tem nenhum controle sobre os tipos de dados retornados para a requisição feita pelo sistema, fazer a conversão dos dados pode ser um passo fundamental para o bom funcionamento do sistema.&lt;/p&gt;
&lt;p&gt;Supondo que seja feita uma requisição em uma API externa e seu retorno com os dados seja uma string com os dados separados por vírgulas, porem precisamos desses dados em um Array como faríamos? É o que vamos ver!!&lt;/p&gt;
&lt;p&gt;Um ponto importante a se dizer a partir de agora é que por padrão o python trata os arrays sendo uma classe do tipo &lt;em&gt;Lista&lt;/em&gt;, outro ponto é que strings e listas são classes em python, isso está relacionado com o fato do python ser orientado a objetos, mas esse assunto não será abordado aqui, vamos apenas ter em mente que arrays são listas em python, ok?&lt;/p&gt;
&lt;p&gt;Sendo assim vamos criar uma string com alguns dados:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Criando string de dados" src="/images/como-transformar-uma-string-separada-por-virgula-em-listas/string-de-dados.png" title="Dados no arquivo que criamos" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;O fato de uma string ser uma classe nos ajuda, pois podemos executar os métodos que estão implementados nessa classe, por padrão uma string tem alguns métodos que o python disponibiliza, um deles é o &lt;code&gt;split()&lt;/code&gt; que serve para separar uma string de acordo com os parâmetros passado para esse método, se nada for passado como parâmetro então o a separação será feita por um espaço.&lt;/p&gt;
&lt;p&gt;O mais interessante desse método é o seu retorno que é exatamente uma lista, tornando a nossa conversão extremamente simples. Vamos ver abaixo como fazer.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Conversão dos dados" src="/images/como-transformar-uma-string-separada-por-virgula-em-listas/consvesao-dos-dados.png" title="Dados no arquivo que criamos" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Como vemos em uma linha tudo é feito, porem se o separador dos dados for diferente apenas mudamos o parâmetro passado para o método &lt;code&gt;split()&lt;/code&gt;, supondo que os dados fossem separados por &lt;code&gt;;&lt;/code&gt; ficaria dessa forma:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Conversão com ponto e vírgula" src="/images/como-transformar-uma-string-separada-por-virgula-em-listas/conversao-com-ponto-virgula.png" title="Dados no arquivo que criamos" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Python realmente tem algumas coisas que facilitam a programação!&lt;/p&gt;
&lt;p&gt;O  que acho dessa dica? Se gostou deixe seu comentário!&lt;/p&gt;</content><category term=": Dicas de Python :"></category><category term="string"></category><category term="lista"></category><category term="conversão de dados"></category><category term="dados"></category></entry><entry><title>Como criar um arquivo CSV no Python</title><link href="https://dicasdeprogramacao.com.br/como-criar-um-arquivo-csv-no-python/" rel="alternate"></link><published>2021-11-28T00:00:00-03:00</published><updated>2021-11-28T00:00:00-03:00</updated><author><name>Marcelo Santos de Oliveira</name></author><id>tag:dicasdeprogramacao.com.br,2021-11-28:/como-criar-um-arquivo-csv-no-python/</id><summary type="html">&lt;p&gt;CSV é um tipo que arquivos onde os dados são separados por vígula, daí vem a sigla da extenção CSV(comma-separated values, valores separados por virgula na tradução).&lt;/p&gt;
&lt;p&gt;Apesar de na programação existir outros tipos de arquivos que também são …&lt;/p&gt;</summary><content type="html">&lt;p&gt;CSV é um tipo que arquivos onde os dados são separados por vígula, daí vem a sigla da extenção CSV(comma-separated values, valores separados por virgula na tradução).&lt;/p&gt;
&lt;p&gt;Apesar de na programação existir outros tipos de arquivos que também são úteis para se trabalhar, como arquivos JSON ou XML, que já possuem funções em quase todas as linguagens para manipular esses tipos de dados, para um usuário que precisa baixar dados de um sistema esses tipos de arquivos podem acabar não sendo a melhor escolha quando é necessario colocar esses dados em suas planilhas feitas em excel, que é muito utilizado nas empresas.&lt;/p&gt;
&lt;p&gt;Dessa forma o arquivo CSV se torna a melhor escolha para essa situação onde é necessário disponibilizar uma quantidade de dados para que o usuário baixe e coloque em planilhas.&lt;/p&gt;
&lt;p&gt;Então vamos mostrar como podemos criar, ler e adicionar itens em um arquivo CSV com python.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;python&lt;/strong&gt; já possui o módulo csv em suas bibliotecas &lt;em&gt;build-in&lt;/em&gt;, dessa forma tudo que precisamos é importar o módulo no início do código.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora já temos o módulo csv para usarmos mais a frente.&lt;/p&gt;
&lt;p&gt;Vamos iniciar com o código onde criaremos o arquivo CSV, para isso iremos usar a função &lt;code&gt;open()&lt;/code&gt; que é utilizada para abrir arquivos. Essa função pode receber alguns parâmetros, daremos atenção apenas nos necessários para atingirmos nosso objetivo.&lt;/p&gt;
&lt;p&gt;Os parâmetros que vamos utilizar da função &lt;code&gt;open()&lt;/code&gt; são: &lt;code&gt;file, mode&lt;/code&gt;. File é o path do arquivo, ou seja, o caminho onde ele está ou será criado.O &lt;code&gt;mode&lt;/code&gt; é o modo como o arquivo será aberto, os dois principais modos são 'r' para read(leitura) e 'w' para writer(escrita).&lt;/p&gt;
&lt;p&gt;Antes de utilizarmos a função &lt;code&gt;open()&lt;/code&gt; vamos colocar a palavra &lt;code&gt;with&lt;/code&gt; que irá nos auxiliar fechando o arquivo depois da execução desta tarefa.&lt;/p&gt;
&lt;p&gt;Dessa forma nosso código está dessa maneira:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./teste.csv, &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;) as csvfile:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Assim estamos abrindo o arquivo &lt;code&gt;teste.csv&lt;/code&gt;, na raiz do script e atribuindo a ele uma variável &lt;code&gt;csvfile&lt;/code&gt;, que vamos usar para manipular o arquivo.&lt;/p&gt;
&lt;p&gt;Um detalhe a se observar é que se o arquivo não existir, ele será criado, pois o parâmetro de escrita ('w'), tanto abre um arquivo exitente, como cria o arquivo se ele não existir.&lt;/p&gt;
&lt;p&gt;Agora vamos utilizar algumas funções que o modulo CSV nos disponibiliza, a função &lt;code&gt;writer()&lt;/code&gt; e a função &lt;code&gt;writerow()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A primera está relacionada a configuração da forma como vamos compor o arquivo CSV, estamos configurando o nosso &lt;code&gt;writer&lt;/code&gt;, ou seja, o nosso objeto &lt;strong&gt;escritor&lt;/strong&gt;, que vai nos permitir escrever no arquivo que acabamos de criar e irá receber dois paramêtros a variável que aponta para o arquivo, no nosso caso &lt;strong&gt;&lt;em&gt;csvfile&lt;/em&gt;&lt;/strong&gt; e o &lt;strong&gt;delimiter&lt;/strong&gt; que é o delimitador do arquivo, ou seja, que define o caracter que irá separar os dados no arquivo, nesse caso usaremos a vírgula. Nosso código está assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./teste.csv, &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;) as csvfile:&lt;/span&gt;
  &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Então vamos a outra função que precisamos para conseguir escrever no arquivo CSV a &lt;code&gt;writerow()&lt;/code&gt;, que é a função que escreve uma linha, essa função deve ser escrita na frente da &lt;code&gt;writer()&lt;/code&gt; e é dentro dela que vamos escrever os dados, em forma de listas, ficando dessa forma:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./teste.csv, &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;) as csvfile:&lt;/span&gt;
    &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;João&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;30&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;José&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;27&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Pedro&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;20&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pronto em nosso código já criamos o arquivo e escrevemos dados nesse arquivo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Dados no arquivo criado" src="/images/como-criar-um-arquivo-csv-no-python/dados-salvos-no-arquivo.png" title="Dados no arquivo que criamos" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Como ler um arquivo CSV em python&lt;/h2&gt;
&lt;p&gt;Então vamos ver agora como ler um arquivo CSV. É muito parecido com o processo que fizemos anteriormente para criar o arquivo,  porem com uma pequena mudança, o parâmetro que usamos anteriormente era 'w', porem agora vamos usar o 'r' de read, ou se preferir não precisa nem colocar o parâmetro pois a função open() por padrão já abre o arquivo em modo de leitura, então temos o seguinte:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./teste.csv) as csvfile:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;E vamos utilizar a função &lt;code&gt;reader()&lt;/code&gt; para ler o arquivo que criamos, porem com um detalhe, para termos uma saída estruturada em nosso terminal vamos usar um loop pra iteramos todas as linhas do arquivo, ficando dessa forma:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./teste.csv) as csvfile:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Assim teremos esta saída no terminal:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Saida do terminal" src="/images/como-criar-um-arquivo-csv-no-python/saida-do-terminal.png" title="Saida do terminal" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Pronto já criamos o arquivo e salvamos dados, agora o arquivo pode ser aberto em um editor de planilhas que estará separado de forma correta.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Arquivo aberto editor de planilhas" src="/images/como-criar-um-arquivo-csv-no-python/arquivo-aberto-editor-planilhas.png" title="Arquivo aberto no editor de planilhas" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Melhorando nosso código&lt;/h2&gt;
&lt;p&gt;Até o momento com os passos anteriores já atingimos nosso objetivo, mas sempre podemos melhorar o nosso código. Certo?.&lt;/p&gt;
&lt;p&gt;Vamos analizar alguns detalhes do código escrito. Quando escrevemos os dados no arquivo CSV, nós criamos o objeto "escritor", passamos para ele a variável
que aponta para o arquivo, configuramos o delimitador e depois escrevemos os dados. Tudo junto dessa forma:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;João&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;30&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;José&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;27&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Pedro&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;20&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notamos que em cada linha repetimos &lt;code&gt;csv.writer(csvfile, delimiter=',')&lt;/code&gt;, isso faz com que em cada linha estamos criando este objeto, para 3 linhas de dados pode não fazer diferença,
mas quando estamos pensando em arquivos CVS, são arquivos que podem conter algumas centenas de dados, ou talvez milhares.&lt;/p&gt;
&lt;p&gt;Dessa forma um arquivo irá criar centenas ou milhares de objetos. Isso irá consumir recursos de processamento, que se traduz em gastos, se criarmos algumas dezenas de arquivos por dia, porque não por hora, começamos a notar que isso pode crescer de forma a gerar gastos consideraveis.&lt;/p&gt;
&lt;p&gt;Pensando nisso, ao invés de executar a função que cria o objeto escritor milhares de vezes, vamos executar esta função apenas uma vez e armazenar em uma variável (chamada writer, por exemplo) o objeto que ela retorna.&lt;/p&gt;
&lt;p&gt;Refatorando nosso código fica assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./teste.csv, &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;) as csvfile:&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;João&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;30&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;José&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;27&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Pedro&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;20&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Seguindo essa linha de pensamento, também podemos melhorar nosso cógigo de escrita, passando o objeto de escrita que está sendo criado a cada iteração do loop &lt;code&gt;for&lt;/code&gt; para uma variável e apenas usar no loop.&lt;/p&gt;
&lt;p&gt;Ficando dessa forma:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./teste.csv) as csvfile:&lt;/span&gt;
    &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pronto! Agora temos nosso código otimimizado para criar arquivos CSVs e consumir menos de memória e processamento!&lt;/p&gt;
&lt;p&gt;E aí, o que achou deste post? Gostou de aprender a trabalhar com arquivos CSVs no python?
Deixe aí nos comentários se este post foi útil pra você!&lt;/p&gt;</content><category term=": Dicas de Python :"></category><category term="csv"></category><category term="criar arquivo csv"></category></entry><entry><title>Como criar uma Virtual Env e um arquivo de requirements.txt no Python</title><link href="https://dicasdeprogramacao.com.br/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/" rel="alternate"></link><published>2021-11-08T00:00:00-03:00</published><updated>2021-11-08T00:00:00-03:00</updated><author><name>Marcelo Santos de Oliveira</name></author><id>tag:dicasdeprogramacao.com.br,2021-11-08:/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/</id><summary type="html">&lt;p&gt;Quando começamos a programar em Python, logo percebemos a grande quantidade de bibliotecas que a linguagem possui para resolver os mais variados problemas.&lt;/p&gt;
&lt;p&gt;A instalação desses pacotes geralmente é muito fácil, e pode ser feita utilizando um gerenciador de pacotes …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quando começamos a programar em Python, logo percebemos a grande quantidade de bibliotecas que a linguagem possui para resolver os mais variados problemas.&lt;/p&gt;
&lt;p&gt;A instalação desses pacotes geralmente é muito fácil, e pode ser feita utilizando um gerenciador de pacotes do Python como pip, &lt;code&gt;pip install nomedopacote&lt;/code&gt;, porem com uma grande quantidade de pacotes e estes podem ter ainda varias versões diferentes visualizamos um problema, para cada projeto que fizermos teremos que instalar todos os pacotes que serão utilizados nesse projeto de forma global.&lt;/p&gt;
&lt;p&gt;Mas esse ainda nem pode ser o maior problema que teríamos, supondo uma aplicação feita em Python 3.7, porem temos instalado a versão do Python 3.8 e assim que tentamos rodar a aplicação localmente ela quebra por incompatibilidade de versões, esse problema também pode acontecer com os pacotes usados nessa aplicação.&lt;/p&gt;
&lt;p&gt;Nesse cenário notamos que teríamos que gerenciar varias versões de pacotes e do próprio Python na maquina, o que poderia rapidamente se transformar em uma grande confusão de versões entre projetos, um verdadeiro caos.&lt;/p&gt;
&lt;h2&gt;Separando os ambientes com Virtual Env&lt;/h2&gt;
&lt;p&gt;Para resolver esse problema a solução seria a criação de uma ambiente virtual onde teríamos as versões corretas, dos pacotes instalados e até mesmo a versão correta do Python instalada nesse ambiente e criar um arquivo com todos os pacotes necessários.&lt;/p&gt;
&lt;p&gt;Para isso vamos mostrar como criar e ativar uma &lt;strong&gt;&lt;em&gt;Virtual Env&lt;/em&gt;&lt;/strong&gt; que irá rodar tudo que é necessário para o projeto dentro de um ambiente separado do resto do sistema e criar arquivo &lt;strong&gt;&lt;em&gt;requirements.txt&lt;/em&gt;&lt;/strong&gt; para termos todos os pacotes nas versões corretas para rodar o programa.&lt;/p&gt;
&lt;p&gt;Tendo o Python instalado no seu sistema operacional, digite o comando &lt;code&gt;python3 -m venv nome_da_virtual_venv&lt;/code&gt;, no exemplo abaixo eu utilizei o nome venv que é muito utilizado, meu terminal quando coloquei o nome venv, ele indica o nome da pasta como ambiente virtual como veremos mais a frente.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Comando para criar uma venv" src="/images/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/img1.png" title="comando para criar uma venv" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Agora se listarmos o conteúdo da pasta com o comando ls no linux e dir para o windows, podemos notar que foi criado uma pasta com o nome que definimos na criação da venv.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Listando conteudo da pasta" src="../imagnes//images/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/img2.png" title="Listando o conteudo da pasta" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Porem ainda não estamos utilizando o ambiente virtual que acabamos de criar, para isso teremos que executar o arquivo &lt;strong&gt;&lt;em&gt;activate&lt;/em&gt;&lt;/strong&gt; que esta no caminho &lt;strong&gt;venv/bin/activate&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Ativando o ambiente virtual" src="/images/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/img3.png" title="Ativando o ambiente virtual" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;No windows, o comando é uma pouco diferente, sendo preciso executar o arquivo &lt;strong&gt;activate.bat&lt;/strong&gt;, dessa forma o comando para se ativar a venv no windows seria &lt;code&gt;venv\Scripts\activate.bat&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Depois de ativado irá indicar que a venv está ativada.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Indicação da venv ativada" src="/images/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/img4.png" title="Indicacao da venv ativada" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;O meu terminal coloca os termos &lt;strong&gt;via nomeDaPasta&lt;/strong&gt; indicando que a venv está ativada, isso pode variar um pouco, sendo indicado por (nome_da_venv).&lt;/p&gt;
&lt;p&gt;Pronto agora estamos com o ambiente virtual em Python criado e ativado, já podemos instalar os pacotes necessários sem precisar fazer uma instalação global. Para a instalação pode utilizar o gerenciador de pacotes de sua preferência, nas imagens a seguir eu criei um segundo ambiente virtual e realizei a instalação do pacote Pillow que é utilizado para manipulação de imagens, notem que fiz a instalação de versões diferentes uma em cada venv sem que houvesse problema.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Versões diferentes para ambientes diferentes" src="/images/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/img6.png" title="Versoes diferentes para ambientes diferentes" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Salvando as dependencias com requirements.txt&lt;/h2&gt;
&lt;p&gt;Pois bem mas ainda temos um problema, depois de instalado todos os pacotes necessários para a sua aplicação, assim que fizer um push para o github gostaríamos que quem fizer um clone do projeto não tenha que instalar todas as dependências manualmente, ou pior, ter que saber qual é exatamente a versão utilizada do pacote a ser instalado. O gerenciador de pacotes &lt;em&gt;pip&lt;/em&gt; nos traz uma solução pra isso, onde criaremos um arquivo &lt;em&gt;requirements.txt&lt;/em&gt; para deixar disponível as dependências necessárias para que o seu projeto rode.&lt;/p&gt;
&lt;p&gt;Para criarmos o arquivo &lt;em&gt;requirements.txt&lt;/em&gt; já com todas as dependências do ambiente é bem simples, precisamos apenas do comando  &lt;code&gt;pip freeze &amp;gt; requirements.txt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Criando o arquivo requirements.txt" src="/images/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/img7.png" title="Criando o arquivo requirement.txt" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Pronto, agora já temos o arquivo como os pacotes que são utilizados no projeto, informando também as versões que foram utilizadas.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Arquivo de controle de pacotes" src="/images/como-criar-uma-virtual-env-e-um-arquivo-de-requirementstxt-no-python/img8.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Agora se outro desenvolvedor for rodar o projeto, ele pode utilizar o comando &lt;code&gt;pip install -r requirements.txt&lt;/code&gt; que o gerenciador de pacotes cuidará de baixar e instalar as versões corretas de todos os pacotes que foram utilizados no sistema.&lt;/p&gt;</content><category term=": Dicas de Python :"></category><category term="pip"></category><category term="linha de comando"></category><category term="virtualenv"></category><category term="requirements.txt"></category></entry><entry><title>Qual a diferença entre File.pathSeparator e File.separator</title><link href="https://dicasdeprogramacao.com.br/qual-a-diferenca-entre-filepathseparator-e-fileseparator/" rel="alternate"></link><published>2020-09-03T00:00:00-03:00</published><updated>2020-09-03T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2020-09-03:/qual-a-diferenca-entre-filepathseparator-e-fileseparator/</id><summary type="html">&lt;p&gt;Em Java, quando você precisa criar o caminho de um arquivo ou pasta,
pode ser que, dependendo do sistema operacional, o caracter que separa as pastas seja uma / (barra inclinada à direita) ou uma \ (barra inclinada a esquerda).&lt;/p&gt;
&lt;p&gt;Este é …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Em Java, quando você precisa criar o caminho de um arquivo ou pasta,
pode ser que, dependendo do sistema operacional, o caracter que separa as pastas seja uma / (barra inclinada à direita) ou uma \ (barra inclinada a esquerda).&lt;/p&gt;
&lt;p&gt;Este é um exemplo de problema comum para sistemas que funcionam em qualquer sistema operacional.&lt;/p&gt;
&lt;p&gt;Pensa comigo, se você vai construir o caminho de uma pasta no Windows, pode paracer com algo assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;C:\Users\Gustavo\arquivo.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Já no Linux ou no MacOS, o a "contra-barra" não existe para formar caminhos de arquivos.
Neste caso seria algo assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/home/Gustavo/arquivo.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Você percebeu que a barra que separa as pastas no Windows é diferente da barra do Linux?
No Windows a barra é assim \ e no Linux é assim /.&lt;/p&gt;
&lt;p&gt;Para você deixar isto transparente no seu programa java, você pode fazer uso da constante &lt;code&gt;separator&lt;/code&gt;
que existe na class &lt;code&gt;File&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Desta forma, se você construir um caminho para um arquivo ou pasta utilizando a constante &lt;code&gt;File.separator&lt;/code&gt;, você fica independente ao sistema operacional.&lt;/p&gt;
&lt;p&gt;Por exemplo...&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.File&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FileSeparator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caminhoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Usuario&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;gustavo&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;arquivo.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminhoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Se executarmos este programa Java no Linux, a resposta seria esta:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Usuario/gustavo/arquivo.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Se executarmos este programa Java no Windows, a resposta seria esta:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Usuario\gustavo\arquivo.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora sabemos como deixar o nosso software independente de sistema operacional.
Basta usar o &lt;code&gt;File.separator&lt;/code&gt; para separar as pastas do caminho do seu arquivo.&lt;/p&gt;
&lt;p&gt;Mas &lt;strong&gt;qual é a diferença entre o &lt;code&gt;File.separator&lt;/code&gt; e o &lt;code&gt;File.pathSeparator&lt;/code&gt;&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;Já aprendemos que o &lt;code&gt;File.separator&lt;/code&gt; separa as pastas de um caminho (&lt;em&gt;path&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Já o &lt;code&gt;File.pathSeparator&lt;/code&gt;, faz sentido no contexto de separar "caminhos completos".&lt;/p&gt;
&lt;p&gt;Pra entender direito onde ele se aplica é importante entender sobre variáveis de ambiente do seu sistema operacional.&lt;/p&gt;
&lt;p&gt;No post sobre &lt;a href="https://dicasdeprogramacao.com.br/como-instalar-o-maven-no-windows/"&gt;Como instalar o Maven no Windows&lt;/a&gt;, eu explico detalhadamente como configurar variáveis de ambiente no Windows.&lt;/p&gt;
&lt;p&gt;Mas se você for um pouco mais atento, vai perceber que podemos configurar mais de um caminho (&lt;em&gt;path&lt;/em&gt;) para um determinada variável de ambiente. E como estes caminhos são separados na variável?&lt;/p&gt;
&lt;p&gt;A resposta é: Depende do Sistema Operacional. (De novo!)&lt;/p&gt;
&lt;p&gt;No Windows, o caracter que separa os "Paths" em uma variável de ambiente é o &lt;code&gt;;&lt;/code&gt;, já no Linux e no MacOS é o &lt;code&gt;:&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Por exemplo, se você abrir o prompt de comando do Windows e digitar &lt;code&gt;echo %PATH%&lt;/code&gt;, você verá vários caminhos sendo aprensentados na linha de comando, este é o conteúdo da variável de ambiente chamada &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No meu caso, apareceu este conteúdo aqui:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Conteúdo da variável de ambiente PATH no Windows, mostrando a separação dos caminhos usando o ponto-e-virgula" src="/images/qual-a-diferenca-entre-filepathseparator-e-fileseparator/conteudo-da-variavel-de-ambiente-path.png" style="max-width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Mas se você executar um comando para verificar o conteúdo da variável de ambiente &lt;code&gt;PATH&lt;/code&gt; no linux, verá que o caracter que separa os caminhos é o &lt;code&gt;:&lt;/code&gt; (dois-pontos).&lt;/p&gt;
&lt;p&gt;Veja abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Conteúdo da variável de ambiente PATH no Linux, mostrando a separação dos caminhos usando o dois-pontos" src="/images/qual-a-diferenca-entre-filepathseparator-e-fileseparator/conteudo-da-variavel-de-ambiente-path-no-linux.png" style="max-width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Acho que deu pra você perceber que a separação de "Paths" (Caminhos) utiliza caracateres diferentes dependendo do sistema operacional.&lt;/p&gt;
&lt;p&gt;E é exatamente isso que o &lt;code&gt;File.pathSeparator&lt;/code&gt; resolve!&lt;/p&gt;
&lt;p&gt;Dependendo do SO em que você está executando o seu programa java, ele vai ter um valor diferente para esta constante.&lt;/p&gt;
&lt;p&gt;Vamos ver no exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.File&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FilePathSeparator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caminhoDoArquivo1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Usuario&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;gustavo&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;arquivo1.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caminhoDoArquivo2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Usuario&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;gustavo&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;arquivo2.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminhoDoArquivo1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pathSeparator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caminhoDoArquivo2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Se executarmos este programa Java no Linux, a resposta seria esta:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Usuario/gustavo/arquivo1.txt:Usuario/gustavo/arquivo2.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Se executarmos este programa Java no Windows, a resposta seria esta:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Usuario\gustavo\arquivo1.txt;Usuario\gustavo\arquivo2.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora você já sabe qual a diferença entre o &lt;code&gt;File.separator&lt;/code&gt; e o &lt;code&gt;File.pathSeparator&lt;/code&gt;,
bem como a importância de usá-los no momento correto, pois isso pode determinar se o
código que você está desenvolvendo será Multi-plataforma ou não.&lt;/p&gt;
&lt;p&gt;Qualquer dúvida, deixe nos comentários aqui abaixo.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/io/File.html#separator" target="_blank"&gt;Javadoc: File.separator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/io/File.html#pathSeparator" target="_blank"&gt;Javadoc: File.pathSeparator&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="File"></category><category term="Java"></category></entry><entry><title>Javascript: Como remover valores repetidos de um array</title><link href="https://dicasdeprogramacao.com.br/javascript-como-remover-valores-repetidos-de-um-array/" rel="alternate"></link><published>2020-03-11T00:00:00-03:00</published><updated>2020-03-11T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2020-03-11:/javascript-como-remover-valores-repetidos-de-um-array/</id><summary type="html">&lt;p&gt;Imagina que você tem um array em javascript que possui alguns valores duplicados. Como no exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que alguns valores se repetem no array.&lt;/p&gt;
&lt;p&gt;Se …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Imagina que você tem um array em javascript que possui alguns valores duplicados. Como no exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que alguns valores se repetem no array.&lt;/p&gt;
&lt;p&gt;Se você quiser remover os valores repetidos do array, a linha abaixo faz este trabalho pra você.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;numerosSemRepeticao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dá uma olhada na execução deste código no console do meu navegador.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Limpando valores repertidos de um array em javascript" src="/images/javascript-como-remover-valores-repetidos-de-um-array/limpando-array-com-valores-repetidos.gif" style="width:100%;padding:10px"&gt;&lt;/p&gt;
&lt;p&gt;O &lt;code&gt;Set&lt;/code&gt; é uma estrutura de dados muito utilizada em várias linguagens de programação que, por padrão, não aceita valores repetidos. Ao contrário do array ou do &lt;code&gt;List&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Portanto, o &lt;code&gt;Set&lt;/code&gt; é muito apropriado para este caso em que queremos limpar um array removendo os valores repetidos.&lt;/p&gt;
&lt;p&gt;Além disso nós utilizamos o &lt;em&gt;Spread Operator&lt;/em&gt; para criar um novo array com os valores do nosso Set (que não aceita valores repetidos).&lt;/p&gt;
&lt;p&gt;Espero que tenha gostado da dica. Em caso de dúvida, fique à vontade para postar nos comentários.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Set" target="_blank"&gt;Mozilla: Set&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Spread_operator" target="_blank"&gt;Mozilla: Spread Operator&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="iniciante"></category></entry><entry><title>Spring-boot: Como executar SQL nativo no banco de dados</title><link href="https://dicasdeprogramacao.com.br/spring-boot-como-executar-sql-nativo-no-banco-de-dados/" rel="alternate"></link><published>2020-03-05T00:00:00-03:00</published><updated>2020-03-05T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2020-03-05:/spring-boot-como-executar-sql-nativo-no-banco-de-dados/</id><summary type="html">&lt;p&gt;Embora, com o Spring-boot é sempre indicado trabalhar com o banco de dados via os mapeamentos Objeto-Relacional e os &lt;em&gt;Repositorys&lt;/em&gt;. Pode ser que você precise, por algum motivo, &lt;strong&gt;executar um comando SQL nativo no banco de dados com Spring-boot&lt;/strong&gt;. Vamos …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Embora, com o Spring-boot é sempre indicado trabalhar com o banco de dados via os mapeamentos Objeto-Relacional e os &lt;em&gt;Repositorys&lt;/em&gt;. Pode ser que você precise, por algum motivo, &lt;strong&gt;executar um comando SQL nativo no banco de dados com Spring-boot&lt;/strong&gt;. Vamos ver neste post uma forma bem simples de fazer isso.&lt;/p&gt;
&lt;p&gt;A primeira coisa, por questão de organização, eu sugiro que você crie um service para encapsular as execuções de SQL nativos. E neste service nós vamos incluir o código para executar um SQL nativo no banco de dados.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.springframework.stereotype.Service&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.springframework.transaction.annotation.Transactional&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;javax.persistence.EntityManager&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;javax.persistence.PersistenceContext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@Service&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NativeScriptService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@PersistenceContext&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EntityManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entityManager&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Transactional&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;entityManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createNativeQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;executeUpdate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Bem simples né ...&lt;/p&gt;
&lt;p&gt;Veja que estamos recebendo o comando sql como parâmetro e a forma como executamos este comando com o Spring-boot está encapsulada. Se futuramente nós quisermos mudar a forma de executar o comando SQL nativo, basta mudar nesta classe. ;)&lt;/p&gt;
&lt;p&gt;Agora você pode usar este service para executar um script SQL nativo no seu banco de dados. Veja um exemplo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.springframework.beans.factory.annotation.Autowired&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SequenceManagerService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Autowired&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NativeScriptService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nativeScriptService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;resetClienteSequence&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;nativeScriptService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;alter sequence CLIENTE_SEQUENCE restart&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No exemplo acima, nós estamos executando um comando SQL em um banco Postgres para reiniciar a contagem de uma sequence para o valor inicial.&lt;/p&gt;
&lt;p&gt;Mas poderia ser qualquer comando SQL nativo do seu banco de dados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; Use este recurso com cautela, pois os comandos nativos de um SGBD podem não funcionar em um outro SGBD. Isto cria um forte acoplamento do seu sistema ao SGBD que você está utilizando.&lt;/p&gt;
&lt;p&gt;Gostou? Comente aí nos comentários o que você achou.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityManager.html#createNativeQuery-java.lang.String-" target="_blank"&gt;Javadoc: EntityManager.createNativeQuery(String)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Query.html#executeUpdate--" target="_blank"&gt;Javadoc: Query.executeUpdate()&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Spring-Boot"></category><category term="JPA"></category><category term="Spring Data"></category><category term="SQL"></category></entry><entry><title>Como criar uma classe em Javascript</title><link href="https://dicasdeprogramacao.com.br/como-criar-uma-classe-em-javascript/" rel="alternate"></link><published>2019-09-06T00:00:00-03:00</published><updated>2019-09-06T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-09-06:/como-criar-uma-classe-em-javascript/</id><summary type="html">&lt;p&gt;A partir da especificação ES2015, nós podemos criar uma classe em javascript de forma muito simples,
mais parecido com outras linguagens do paradigma de Orientação a Objetos,
utilizando a palavra-chave reservada &lt;code&gt;class&lt;/code&gt;. Veja o exemplo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para instanciar …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A partir da especificação ES2015, nós podemos criar uma classe em javascript de forma muito simples,
mais parecido com outras linguagens do paradigma de Orientação a Objetos,
utilizando a palavra-chave reservada &lt;code&gt;class&lt;/code&gt;. Veja o exemplo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para instanciar a classe usamos a palavra-chave &lt;code&gt;new&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Atributos&lt;/h2&gt;
&lt;p&gt;Diferentemente de Java, C# e outras linguagens do paradigma OO,
em javascript precisamos especificar os atributos de uma classe dentro do seu construtor.
Veja o exemplo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No exemplo acima a nossa classe &lt;code&gt;Pessoa&lt;/code&gt; define o atributo &lt;code&gt;nome&lt;/code&gt; que é inicializado com um texto vazio.&lt;/p&gt;
&lt;h2&gt;Métodos&lt;/h2&gt;
&lt;p&gt;Métodos são "funções" que pertencem a uma classe.
E para declarar um método em javascript basta escrever o seu nome, sem a necessidade da palafra-chave &lt;code&gt;functions&lt;/code&gt;. Veja o exemplo do método &lt;code&gt;calculaArea&lt;/code&gt; da classe &lt;code&gt;Retangulo&lt;/code&gt; abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Retangulo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;altura&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;largura&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;altura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;altura&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;largura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;largura&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;calculaArea&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;altura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;largura&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba também que estamos recebendo no construtor da classe, os valores iniciais dos atributos &lt;code&gt;altura&lt;/code&gt; e &lt;code&gt;largura&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dá uma olhada na utilização desta classe no console do meu navegador.&lt;/p&gt;
&lt;p&gt;&lt;img alt="utilização de uma classe em javascript" src="/images/como-criar-uma-classe-em-javascript/classe-em-javascript.gif" style="width:100%;padding:10px"&gt;&lt;/p&gt;
&lt;p&gt;Viu como é simples?&lt;/p&gt;
&lt;p&gt;Qualquer dúvida fique à vontade para escrever aqui em baixo nos comentários!&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes" target="_blank"&gt;Mozilla: Classes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions" target="_blank"&gt;Especificação EcmaScript 6.0: Class Definitions&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="iniciante"></category></entry><entry><title>[Resolvido] 'pip' não é reconhecido como um comando interno</title><link href="https://dicasdeprogramacao.com.br/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/" rel="alternate"></link><published>2019-07-10T00:00:00-03:00</published><updated>2019-07-10T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-07-10:/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/</id><summary type="html">&lt;p&gt;Quando estamos começando a aprender python, depois que
&lt;a href="https://dicasdeprogramacao.com.br/como-instalar-o-python-no-windows-10/" target="_blank"&gt;instalamos o python&lt;/a&gt;
e estamos aptos a criar os nossos promeiros scripts,
o próximo passo é utilizar bibliotecas externas.&lt;/p&gt;
&lt;p&gt;Neste momento nós conhecemos o &lt;strong&gt;pip&lt;/strong&gt;, que é um gerenciador de pacotes muito …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quando estamos começando a aprender python, depois que
&lt;a href="https://dicasdeprogramacao.com.br/como-instalar-o-python-no-windows-10/" target="_blank"&gt;instalamos o python&lt;/a&gt;
e estamos aptos a criar os nossos promeiros scripts,
o próximo passo é utilizar bibliotecas externas.&lt;/p&gt;
&lt;p&gt;Neste momento nós conhecemos o &lt;strong&gt;pip&lt;/strong&gt;, que é um gerenciador de pacotes muito útil
que por padrão já vem instalado com o python, mas se não estiver instalado veremos neste post como instalá-lo.&lt;/p&gt;
&lt;p&gt;Usar o &lt;strong&gt;pip&lt;/strong&gt; para instalar pacotes é muito simples. Basta digitar &lt;code&gt;pip install &amp;lt;nome-do-pacote&amp;gt;&lt;/code&gt;
no prompt de comandos, que ele baixa e instala o pacote que você pediu.&lt;/p&gt;
&lt;p&gt;Entretanto, pode acontecer que mesmo com o python instalado no seu computador,
o pip não esteja configurado corretamente. 
E quando você tenta executar o comando &lt;code&gt;pip&lt;/code&gt; no prompt de comando apareça o seguinte erro:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;'pip' não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="'pip' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes." src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/pip-nao-e-reconhecido.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Não se apavore, tem solução!&lt;/p&gt;
&lt;h2&gt;Primeiro: Diagnóstico&lt;/h2&gt;
&lt;p&gt;Este problema pode ter várias causas, mas primeiro precisamos verificar se o pip está instalado.
Pois, mesmo o pip sendo instalado por padrão junto com o python,
pode ser que no momento da instalação, tenha-se optado pela NÃO INSTALAÇÃO DO PIP.&lt;/p&gt;
&lt;p&gt;Então a primeira coisa que você precisa fazer é verificar se o pip está instalado.&lt;/p&gt;
&lt;p&gt;Para isso você precisa navegar até a pasta de instalação do seu python e dentro dela acessar a pasta &lt;code&gt;Scripts&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No meu caso este é o caminho: &lt;code&gt;C:\Users\gustavo\AppData\Local\Programs\Python\Python37-32\Scripts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;No seu caso o caminho pode ser diferente, dependerá o caminho que você escolheu no momento da &lt;a href="https://dicasdeprogramacao.com.br/como-instalar-o-python-no-windows-10/" target="_blank"&gt;instalação do python&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Na pasta de &lt;code&gt;Scripts&lt;/code&gt; você precisa confirmar que existe o arquivo executável do pip, o &lt;code&gt;pip.exe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Arquivo 'pip.exe' na pasta Scripts" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/pip-na-pasta-scripts.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Se o arquivo estiver nesta pasta, ótimo! Isso significa que você já tem o pip, só precisa adicionar esta pasta na variável de ambiente &lt;strong&gt;PATH&lt;/strong&gt; para que o prompt de comandos reconheça este comando em qualquer pasta que você o esteja executando.&lt;/p&gt;
&lt;p&gt;Já expliquei como fazer isso &lt;a href="/resolvido-python-nao-e-reconhecido-como-um-comando-interno/" target="_blank"&gt;neste outro post aqui&lt;/a&gt;, mas vamos ver denovo pra reforçar o aprendizado...&lt;/p&gt;
&lt;p&gt;Veja passo a passo como adicionar o caminho de uma pasta no &lt;strong&gt;PATH&lt;/strong&gt;:&lt;/p&gt;
&lt;h3&gt;1. Clique com o botão direito do mouse no ícone do seu computador e clique em &lt;strong&gt;Propriedades&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="menu: propriedades do computador" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/meu-computador-propriedades.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;2. Clique em &lt;strong&gt;Configurações avançadas do sistema&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Configurações avançadas do sistema" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/configuracoes-avancadas-do-sistema.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;3. Clique no botão &lt;strong&gt;Variáveis de ambiente&lt;/strong&gt; dentro da aba &lt;strong&gt;Avançado&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Configurações avançadas do sistema" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/botao-variaveis-de-ambiente.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;4. Selecione a variável de ambiente &lt;strong&gt;PATH&lt;/strong&gt; na lista e clique em &lt;strong&gt;Editar&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Editar variável de ambiente PATH" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/edicao-variavel-de-ambiente-PATH.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;5. Clique no botão &lt;strong&gt;Novo&lt;/strong&gt; e adicione o caminho da pasta desejada. No nosso caso, é a pasta Scripts que está dentro da pasta de instalação do Python.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Adicionando a pasta Scripts do python na variável de ambiente PATH" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/adicionar-pasta-scripts-do-python-no-path.png" width="100%"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante&lt;/strong&gt;: Pode ser que na sua versão do Windows esta janela seja diferente, apresentando apenas um campo de texto com vários caminhos de pastas separadas por &lt;strong&gt;ponto-e-vírgula (;)&lt;/strong&gt;. Neste caso, o que você precisa fazer é justamente &lt;strong&gt;adicionar outro ponto-e-vírgula (;) e o caminho da nova pasta&lt;/strong&gt; que você deseja incluir no PATH.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;6. REINICIE o prompt de comando!&lt;/h3&gt;
&lt;p&gt;Um passo muito importante que muitos esquecem.
Você precisa reiniciar o prompt de comandos para que as alterações de variáveis de ambiente sejam aplicadas.&lt;/p&gt;
&lt;h3&gt;7. Comando 'pip' funcionando normalmente&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Comando 'pip' funcionando normalmente no prompt de comandos" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/comando-pip-funcionando.png" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Instalação do pip no Windows&lt;/h2&gt;
&lt;p&gt;Uma situação que pode acontecer é o pip não estar instalado no seu windows.
Ou seja, você não encontrou o executável do pip naquela pasta de Scripts que fica dentro da pasta de instalação do python.&lt;/p&gt;
&lt;p&gt;Neste caso você precisa instalar o pip alí. E pra isso a gente usa o próprio python.
Vejamos então o &lt;strong&gt;passo-a-passo para instalar o pip&lt;/strong&gt; no seu Windows.&lt;/p&gt;
&lt;h3&gt;1. Baixe o script get-pip.py para o seu computador&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://bootstrap.pypa.io/get-pip.py" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Clique aqui para baixar o script get-pip.py&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Se o script só abrir no seu browser, pressione &lt;strong&gt;Ctrl+S&lt;/strong&gt; para salvá-lo no seu computador.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2. Abra o prompt de comandos e navegue até a pasta onde você salvou o get-pip.py&lt;/h3&gt;
&lt;h3&gt;3. Execute o seguinte comando.&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python get-pip.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O script executará parecido com a tela abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Comando 'python get-pip.py'" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/python-get-pip.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/resolvido-python-nao-e-reconhecido-como-um-comando-interno/" target="_blank"&gt;&amp;gt; Se tiver problemas com o python confira este post&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pronto, após esse comando o pip já foi instalado e adicionado na sua variável de ambiente &lt;strong&gt;PATH&lt;/strong&gt; e já deve estar funcionando.&lt;/p&gt;
&lt;p&gt;Para testar basta tentar instalar uma biblioteca, no exemplo abaixo eu executei o pip para instalar a biblioteca &lt;strong&gt;jupyter&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Comando 'pip' funcionando normalmente no prompt de comandos" src="/images/resolvido-pip-nao-e-reconhecido-como-um-comando-interno/comando-pip-funcionando.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Espero que este post tenha ajudado.&lt;/p&gt;
&lt;p&gt;Se você tiver alguma dúvida, poste aí nos comentários.&lt;/p&gt;</content><category term=": Dicas de Python :"></category><category term="pip"></category><category term="linha de comando"></category><category term="variável de ambiente"></category><category term="erro"></category></entry><entry><title>Javascript: Porque usar === ao invés de ==</title><link href="https://dicasdeprogramacao.com.br/javascript-porque-usar-ao-inves-de/" rel="alternate"></link><published>2019-05-28T00:00:00-03:00</published><updated>2019-05-28T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-05-28:/javascript-porque-usar-ao-inves-de/</id><summary type="html">&lt;p&gt;Você já deve ter se deparado com um &lt;code&gt;if&lt;/code&gt; em javascript que tinha três sinais de igual (&lt;code&gt;===&lt;/code&gt;) ao invés de dois (&lt;code&gt;==&lt;/code&gt;), que é mais 'normal' principalmente se você já trabalhou com linguagens fortemente tipadas, como Java, C#, C, etc.&lt;/p&gt;
&lt;p&gt;Mas …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Você já deve ter se deparado com um &lt;code&gt;if&lt;/code&gt; em javascript que tinha três sinais de igual (&lt;code&gt;===&lt;/code&gt;) ao invés de dois (&lt;code&gt;==&lt;/code&gt;), que é mais 'normal' principalmente se você já trabalhou com linguagens fortemente tipadas, como Java, C#, C, etc.&lt;/p&gt;
&lt;p&gt;Mas como esses dois operadores funcionam quase do mesmo jeito, você só ignorou e deixou pra lá.&lt;/p&gt;
&lt;p&gt;Bom ... Chegou a hora de entender a diferença entre esses dois operadores e entender porque é melhor usar === ao invés de ==.&lt;/p&gt;
&lt;h2&gt;Qual a diferença entre &lt;code&gt;===&lt;/code&gt; e &lt;code&gt;==&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Javascript&lt;/strong&gt; é originalmente uma linguagem de tipagem dinâmica.
Isso significa que você não precisa especificar o tipo da sua variável quando cria ela.
Você não precisa dizer se é uma variável do tipo inteiro (int), texto (string), lógico (boolean), ou qualquer outro tipo.
O interpretador da linguagem "descobre" o tipo ao longo da execução.
Isso tem vantagens e desvantagens.&lt;/p&gt;
&lt;p&gt;Essa tipagem dinâmica é a responsável pelo resultado do operador (dois iguais) &lt;code&gt;==&lt;/code&gt; apresentar uns resutados não tão "iguais" assim.&lt;/p&gt;
&lt;p&gt;Por exemplo, essas duas comparações abaixo resultam &lt;code&gt;verdadeiro&lt;/code&gt;. Você concorda completamente com isso?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;São valores de tipos diferentes, mas com uma interpretação que podem ser iguais.&lt;/p&gt;
&lt;p&gt;Afinal, na lógica &lt;em&gt;booleana&lt;/em&gt; por exemplo, 0 é falso e 1 é verdadeiro.
E 5 é cinco independente se a variável é inteiro ou texto, né...?&lt;/p&gt;
&lt;p&gt;Enfim, o fato é que nós devemos estudar e entender a linguagem em que estamos programando para sabermos exatamente o que estamos fazendo com a linguagem.&lt;/p&gt;
&lt;p&gt;Não precisar nem falar que não precisar dizer o tipo da variável gera uma comodidade para o programador, é menos coisa pra escrever no código não é mesmo? Mas isso faz a linguagem criar alguns artifícios que podem gerar confusão (e alguns bugs), principalmente nos iniciantes, infelizmente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A diferença entre &lt;code&gt;===&lt;/code&gt; e &lt;code&gt;==&lt;/code&gt; em Javascript&lt;/strong&gt; é que com apenas dois iguais a verificação não leva em consideração o tipo da variável, já com três iguais você faz uma verificação mais forte, considerando também o tipo da variável.&lt;/p&gt;
&lt;p&gt;Para confirmar isso vamos fazer alguns testes no console do browser.
Confira no GIF abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Diferença entre === e == em Javascript" src="/images/javascript-porque-usar-ao-inves-de/teste-===-vs-==.gif" style="width:100%;padding:10px"&gt;&lt;/p&gt;
&lt;h2&gt;Por que usar &lt;code&gt;===&lt;/code&gt; ao invés de &lt;code&gt;==&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;A minha dica é que você sempre utilize &lt;code&gt;===&lt;/code&gt; para fazer suas verificações de igualdade ao invés de &lt;code&gt;==&lt;/code&gt;,
pois desta forma você estará fazendo um teste "mais forte", verificando o valor e também o tipo da variável.&lt;/p&gt;
&lt;p&gt;Se o seu &lt;code&gt;if&lt;/code&gt; falhar é um grande indício que a sua estrutura de dados não está muito boa, por exemplo armazenando valores booleanos em variáveis do tipo &lt;code&gt;string&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;É importante observar que existe uma variante deste operador: o &lt;code&gt;diferente&lt;/code&gt;, que pode ser &lt;code&gt;!==&lt;/code&gt; ou &lt;code&gt;!=&lt;/code&gt;. O funcionamento é o mesmo explicado neste post.
Ou seja, enquanto o operador &lt;code&gt;!==&lt;/code&gt; verifica se os valores e os tipos são &lt;em&gt;diferentes&lt;/em&gt;, o operador &lt;code&gt;!=&lt;/code&gt; verifica apenas os valores.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators" target="_blank"&gt;Mozilla: Operadores de Comparação&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="iniciante"></category></entry><entry><title>Como remover pacotes corretamente com NPM</title><link href="https://dicasdeprogramacao.com.br/como-remover-pacotes-corretamente-com-npm/" rel="alternate"></link><published>2019-05-21T00:00:00-03:00</published><updated>2019-05-21T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-05-21:/como-remover-pacotes-corretamente-com-npm/</id><summary type="html">&lt;p&gt;Você instalou um pacote no seu projeto nodejs, mas agora não vai mais usá-lo?
Para remover um pacote do seu projeto você pode simplesmente apagar a linha dessa dependência do seu &lt;code&gt;package.json&lt;/code&gt;,
mas isso não desinstala o pacote do …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Você instalou um pacote no seu projeto nodejs, mas agora não vai mais usá-lo?
Para remover um pacote do seu projeto você pode simplesmente apagar a linha dessa dependência do seu &lt;code&gt;package.json&lt;/code&gt;,
mas isso não desinstala o pacote do projeto que está no seu computador.&lt;/p&gt;
&lt;p&gt;Para remover um pacote de forma correta com o NPM você deve executar o comando abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;uninstall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;nome&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;pacote&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este comando remove o pacote do seu projeto, da pasta &lt;code&gt;node_modules&lt;/code&gt; e também remove a dependência do seu &lt;code&gt;package.json&lt;/code&gt;.
Confira o gif abaixo em que removemos o pacote &lt;code&gt;restify-clients&lt;/code&gt; do nosso projeto de exemplo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de execução do npm uninstall" src="/images/como-remover-pacotes-corretamente-com-npm/exemplo-npm-uninstall.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Perceba que na pasta &lt;code&gt;node_modules&lt;/code&gt; foi removido a pasta do pacote &lt;code&gt;restify-clients&lt;/code&gt;
e também todos os outros módulos que foram instalados junto com ele.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;npm&lt;/strong&gt; gerencia todas as dependências necessárias para o seu projeto funcionar, instalando e removendo os pacotes que são ou não necessários.
Por isso é importante sempre instalar e desinstalar pacotes utilizando o &lt;strong&gt;npm&lt;/strong&gt; ao invés de tentar fazer isso manualmente.&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="nodejs"></category><category term="npm"></category></entry><entry><title>Como instalar um pacote com NPM</title><link href="https://dicasdeprogramacao.com.br/como-instalar-um-pacote-com-npm/" rel="alternate"></link><published>2019-05-20T00:00:00-03:00</published><updated>2019-05-20T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-05-20:/como-instalar-um-pacote-com-npm/</id><summary type="html">&lt;p&gt;Quem está começando a jornada com NodeJS, após
&lt;a href="/como-criar-um-projeto-nodejs-com-npm" target="_blank"&gt;criar um projeto com o NPM&lt;/a&gt;,
precisa saber instalar pacotes para dar mais poder à aplicação.&lt;/p&gt;
&lt;p&gt;O comando para instalar pacotes com o NPM é simples:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;pacote&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Como …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quem está começando a jornada com NodeJS, após
&lt;a href="/como-criar-um-projeto-nodejs-com-npm" target="_blank"&gt;criar um projeto com o NPM&lt;/a&gt;,
precisa saber instalar pacotes para dar mais poder à aplicação.&lt;/p&gt;
&lt;p&gt;O comando para instalar pacotes com o NPM é simples:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;pacote&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Como exemplo vamos instalar o pacote &lt;code&gt;restify-clients&lt;/code&gt;, que nos ajuda a criar requisições HTTP em uma API REST.
Para instalar esse pacote, basta executar o comando abaixo na pasta do seu projeto.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;npm install restify-clients
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja abaixo o resultado da execução deste comando em um projeto node de exemplo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de execução do npm install" src="/images/como-instalar-um-pacote-com-npm/exemplo-npm-install.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Perceba que após a execução do comando, o arquivo &lt;code&gt;package.json&lt;/code&gt; deste projeto de exemplo foi alterado.
O &lt;code&gt;npm install&lt;/code&gt; adicionou o pacote &lt;code&gt;restify-clients&lt;/code&gt; como dependência do projeto no arquivo &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nota: Nas versões anteriores à &lt;strong&gt;5&lt;/strong&gt; do &lt;code&gt;npm&lt;/code&gt; era necessário incluir o parâmetro &lt;code&gt;--save&lt;/code&gt; ao comando para que
o pacote fosse incluído como dependência no &lt;code&gt;package.json&lt;/code&gt;.
&lt;strong&gt;Mas a partir da versão 5 do npm o --save é executado por padrão, não sendo mais necessário incluí-lo no comando.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Outra coisa a se notar é que o npm baixa o pacote que estamos instalando e todas as suas dependências e os adiciona na pasta &lt;code&gt;node_modules&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Com o pacote instalado, nós podemos agora usar esse pacote em nosso código node através da função &lt;code&gt;require&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Por exemplo, o código de exemplo abaixo, faz uma requisição GET usando o &lt;em&gt;restify-clients&lt;/em&gt; que acabamos de instalar.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;restifyClients&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;restify-clients&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cliente&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;restifyClients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createJsonClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://dicasdeprogramacao.com.br&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;cliente&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/exemplo.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;consumindo serviço de cartões&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O &lt;em&gt;gif&lt;/em&gt; abaixo mostra a execução deste código de exemplo como o node.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de execução do npm install" src="/images/como-instalar-um-pacote-com-npm/exemplo-request-com-restify.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.npmjs.com/downloading-and-installing-packages-locally" target="_blank"&gt;NPMJS: Downloading and installing packages locally&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="nodejs"></category><category term="npm"></category></entry><entry><title>Como criar um projeto NodeJS com NPM</title><link href="https://dicasdeprogramacao.com.br/como-criar-um-projeto-nodejs-com-npm/" rel="alternate"></link><published>2019-05-17T00:00:00-03:00</published><updated>2019-05-17T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-05-17:/como-criar-um-projeto-nodejs-com-npm/</id><summary type="html">&lt;p&gt;Se você quer saber como começar com nodejs e criar o seu primeiro projeto,
após a &lt;a href="/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo" target="_blank"&gt;instalação do Node com o NPM&lt;/a&gt;
o passo seguinte é justamente &lt;strong&gt;criar o seu projeto utilizando o npm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para isso basta abrir o seu …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Se você quer saber como começar com nodejs e criar o seu primeiro projeto,
após a &lt;a href="/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo" target="_blank"&gt;instalação do Node com o NPM&lt;/a&gt;
o passo seguinte é justamente &lt;strong&gt;criar o seu projeto utilizando o npm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para isso basta abrir o seu prompt de comandos ou terminal,
criar a pasta onde ficará o seu projeto e digitar o comando:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este comando vai criar o arquivo &lt;code&gt;package.json&lt;/code&gt;, que é onde está toda a configuração do seu projeto,
includindo, nome, versão, descrição, scripts a serem executados, licença, etc.&lt;/p&gt;
&lt;p&gt;Após executar o &lt;code&gt;npm init&lt;/code&gt;, o npm vai perguntar algumas informações básicas para montar o &lt;code&gt;package.json&lt;/code&gt;.
São elas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;package name&lt;/strong&gt;: Nome do projeto. (Padrão: nome da pasta onde o comando foi executado)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;version&lt;/strong&gt;: Versão do projeto. (Padrão: 1.0.0)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;description&lt;/strong&gt;: Uma descrição para o projeto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;entry point&lt;/strong&gt;: Arquivo padrão que será utilizado para executar a aplicação. (Padrão: index.js)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;test command&lt;/strong&gt;: Comando para executar os testes da aplicação.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;git repository&lt;/strong&gt;: URL do repositório git onde o código-fonte da aplicação será armazenado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;keyword&lt;/strong&gt;: Palavras-chave relevantes para ajudar as pessoas a encontrarem o seu projeto. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;author&lt;/strong&gt;: Autor do projeto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;license&lt;/strong&gt; Tipo de licença do projeto. (Padrão: ISC)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Após informar todos esses dados o programa apresenta no console o conteúdo do arquivo &lt;code&gt;package.json&lt;/code&gt;
que será criado com as informações que passamos.
Para confirmar a criação do arquivo para reponder &lt;code&gt;yes&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Feito isso o arquivo &lt;code&gt;package.json&lt;/code&gt; será criado na pasta raís do seu projeto.&lt;/p&gt;
&lt;p&gt;Veja o gif abaixo que mostra um exemplo de execução do &lt;code&gt;npm init&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de execução do npm init" src="/images/como-criar-um-projeto-nodejs-com-npm/exemplo-npm-init.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Agora nós precisamos criar o primeiro arquivo Javascript da nossa aplicação,
que é justamente o arquivo que você configurou no seu package.json.
Se você escolheu o padrão, o arquivo é o &lt;code&gt;index.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Após criar o seu arquivo &lt;code&gt;index.js&lt;/code&gt;,
você está pronto para escrever comandos javascript para executar com o Node,
por exemplo, vamos exibir na tela do console o clássico &lt;code&gt;Alô mundo!&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Para isso basta escrever &lt;code&gt;console.log('Alô mundo!');&lt;/code&gt; no seu arquivo &lt;code&gt;index.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Confira no gif abaixo a criação do arquivo &lt;code&gt;index.js&lt;/code&gt; e a execução com o node.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de criação e execução do index.js com Node" src="/images/como-criar-um-projeto-nodejs-com-npm/criacao-execucao-index-js-com-node.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Com isso o nosso projeto NodeJS está criado!
Lembrando que um projeto NodeJS não significa um projeto WEB, que é o mais comum.
No próximo post nós vamos ver como transformar um projeto básico NodeJS, como este,
em uma aplicação Web que responda requisições HTTP utilizando a famosa biblioteca &lt;strong&gt;Express&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;E aí, conseguiu criar o seu primeiro projeto NodeJS?
Comente aqui em baixo...&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="nodejs"></category><category term="npm"></category></entry><entry><title>Como redirecionar a página com javascript</title><link href="https://dicasdeprogramacao.com.br/como-redirecionar-a-pagina-com-javascript/" rel="alternate"></link><published>2019-05-16T00:00:00-03:00</published><updated>2019-05-16T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-05-16:/como-redirecionar-a-pagina-com-javascript/</id><summary type="html">&lt;p&gt;Quando temos um link em HTML com a tag &lt;code&gt;&amp;lt;a href='/outra-pagina'&amp;gt;&lt;/code&gt; e um usuário clica neste link,
o navegador redireciona a navegação para o endereço informado no atributo &lt;code&gt;href&lt;/code&gt; da tag.
Mas como fazer isso com Javascript? Como redirecionar …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quando temos um link em HTML com a tag &lt;code&gt;&amp;lt;a href='/outra-pagina'&amp;gt;&lt;/code&gt; e um usuário clica neste link,
o navegador redireciona a navegação para o endereço informado no atributo &lt;code&gt;href&lt;/code&gt; da tag.
Mas como fazer isso com Javascript? Como redirecionar a navegação do navegador para uma nova página usando Javascript?&lt;/p&gt;
&lt;p&gt;Existem várias formas de fazer isso com o Javascript, vou mostrar aqui duas delas através da propriedade &lt;code&gt;window.location&lt;/code&gt;,
uma que simula o clique do mouse em um link HTML e outra que simula um redirecionamento HTTP, ou seja,
quando uma requisição HTTP retorna os códigos &lt;code&gt;301&lt;/code&gt; ou &lt;code&gt;302&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Simulando o clique em um link&lt;/h2&gt;
&lt;p&gt;A forma mais comum de mudar a página de um navegador é clicando em um link, certo?
Para simular o clique em um link com javascript basta alterar o valor do atributo &lt;code&gt;window.location.href&lt;/code&gt;, com o endereço a ser redirecionado.
Confira no gif abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Simulando redirecionamento href com Javascript" src="/images/como-redirecionar-a-pagina-com-javascript/redirect-href.gif" style="width:100%;padding:10px"&gt;&lt;/p&gt;
&lt;h2&gt;Simulando o redirecionamento HTTP&lt;/h2&gt;
&lt;p&gt;Outra maneira de mudar a página de um navegador é quando a resposta de uma requisição HTTP indica um redirecionamento,
através dos códigos de resposta HTTP 301 e 302.
Para simular este tipo de redirecionamento com javascript basta fazer uma chamada na função &lt;code&gt;window.location.replace()&lt;/code&gt;,
passando o novo endereço como parâmetro.
Confira no gif abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Simulando redirecionamento HTTP com Javascript" src="/images/como-redirecionar-a-pagina-com-javascript/redirect-http.gif" style="width:100%;padding:10px"&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/API/Window/location" target="_blank"&gt;Mozila: Window.location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/API/Location" target="_blank"&gt;Mozila: Location&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="iniciante"></category></entry><entry><title>Neuron: Executando jupyter notebook dentro do VS Code</title><link href="https://dicasdeprogramacao.com.br/neuron-executando-jupyter-notebook-dentro-do-vs-code/" rel="alternate"></link><published>2019-05-01T00:00:00-03:00</published><updated>2019-05-01T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-05-01:/neuron-executando-jupyter-notebook-dentro-do-vs-code/</id><summary type="html">&lt;p&gt;Se você já trabalhou com &lt;em&gt;Machine Learning&lt;/em&gt;, muito provavelmente já utilizou
o &lt;em&gt;Jupyter Notebook&lt;/em&gt; para executar seu código python.&lt;/p&gt;
&lt;p&gt;Entretanto nem todo mundo gosta de escrever código python no browser,
principalmente quem vem do mundo da programação.&lt;/p&gt;
&lt;p&gt;Felizmente existe um …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Se você já trabalhou com &lt;em&gt;Machine Learning&lt;/em&gt;, muito provavelmente já utilizou
o &lt;em&gt;Jupyter Notebook&lt;/em&gt; para executar seu código python.&lt;/p&gt;
&lt;p&gt;Entretanto nem todo mundo gosta de escrever código python no browser,
principalmente quem vem do mundo da programação.&lt;/p&gt;
&lt;p&gt;Felizmente existe um plugin que combina o poder de uma IDE, como o &lt;strong&gt;Visual Studio Code&lt;/strong&gt;, com a interatividade do &lt;em&gt;Jupyter Notebook&lt;/em&gt;. Este plugin é o &lt;strong&gt;Neuron&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Plugin Neuron no VS Code" src="/images/neuron-executando-jupyter-notebook-dentro-do-vs-code/neuron.png" style="width:100%; padding: 10px;"&gt;&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;Neuron&lt;/strong&gt; foi desenvolvido por um time de estudantes do &lt;em&gt;Imperial College London&lt;/em&gt;, em colaboração com a Microsoft no &lt;a href="https://blogs.msdn.microsoft.com/uk_faculty_connection/2018/10/29/data-science-in-visual-studio-code-using-neuron-a-new-vs-code-extension/" target="_blank"&gt;final do ano passado&lt;/a&gt; (2018) e, basicamente, possibilita executar o seu código &lt;em&gt;python&lt;/em&gt; dentro do VS Code como se estivesse em um &lt;em&gt;Jupyter Notebook&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Como instalar o NEURON no VS Code&lt;/h2&gt;
&lt;p&gt;Primeiro, talvez nem fosse necessário dizer, mas você precisa ter o &lt;em&gt;jupyter&lt;/em&gt; instalado no seu ambiente para usar o &lt;em&gt;neuron&lt;/em&gt;, além de todas as outras bibliotecas que você vai utilizar no seu código, como pandas, matplotlib, numpy, etc.&lt;/p&gt;
&lt;p&gt;Se você ainda não tem o &lt;em&gt;jupyter&lt;/em&gt; instalado, basta executar o comando abaixo no seu prompt de comandos para instalá-lo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install jupyter
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Com o &lt;em&gt;jupyter&lt;/em&gt; instalado, a forma mais fácil de instalar o Neuron é através do &lt;em&gt;Marketplace&lt;/em&gt; do próprio VS Code. Veja abaixo como procurar, instalar a extensão Neuron no seu VS Code e usá-la de forma bem simples (para executar você deve abrir a janela do neuron, selecionar o código que você quer executar e pressionar &lt;strong&gt;Alt+Enter&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img alt="Como instalar o NEURON no VS Code" src="/images/neuron-executando-jupyter-notebook-dentro-do-vs-code/instalacao.gif" style="width:100%; padding: 10px;"&gt;&lt;/p&gt;
&lt;p&gt;Depois que o Neuron estiver instalado, aparecerá um ícone de uma "janelinha" no canto superior direito do seu arquivo python aberto, conforme apresentado no &lt;em&gt;gif&lt;/em&gt; acima.
Clicando neste ícone, o VS Code abre uma aba à direita do seu código que é onde aparecerá a saída da execução do seu código python.&lt;/p&gt;
&lt;p&gt;Caso você não tenha instalada alguma dependência que o neuron necessita como o próprio &lt;em&gt;jupyter&lt;/em&gt; ou alguma outra dependência do seu código como o &lt;em&gt;matplotlib&lt;/em&gt;, o VS Code vai oferecer para instalar a dependência faltante.&lt;/p&gt;
&lt;h2&gt;Como usar o Neuron&lt;/h2&gt;
&lt;p&gt;O básico da utilização do Neuron é:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instale o Neuron&lt;/li&gt;
&lt;li&gt;Abra (ou crie) um arquivo python (ou R)&lt;/li&gt;
&lt;li&gt;Clique no ícone do Neuron (janelinha no canto superior direito) para abrir a aba do Neuron&lt;/li&gt;
&lt;li&gt;Selecione código python que você quer executar.&lt;/li&gt;
&lt;li&gt;Pressione: &lt;strong&gt;Alt+Enter&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Veja abaixo um exemplo de execução de um código que gera um gráfico no Neuron.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de execução de código no Neuron" src="/images/neuron-executando-jupyter-notebook-dentro-do-vs-code/exemplo-execucao.gif" style="width:100%; padding: 10px;"&gt;&lt;/p&gt;
&lt;p&gt;O neuron possui várias ferramentas para interação com os resultados do seu código.
Mostrei no gif acima uma movimentação no gráfico 3D que o código gerou.&lt;/p&gt;
&lt;p&gt;Além de gráficos o neuron possúi várias outras ferramentas, ele imprime gráficos 2D e 3D, mapas, visualização de código latex, etc.
Vale a pena começar a usar.&lt;/p&gt;
&lt;p&gt;O que você achou do Neuron? Deixe aí nos comentários.&lt;/p&gt;
&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html" target="_blank"&gt;Documentação: DataFrame&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://blogs.msdn.microsoft.com/uk_faculty_connection/2018/10/29/data-science-in-visual-studio-code-using-neuron-a-new-vs-code-extension/" target="_blank"&gt;Data Science in Visual Studio Code using Neuron, a new VS Code extension&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="Pandas"></category><category term="jupyter"></category><category term="vscode"></category><category term="plugin"></category></entry><entry><title>Javascript: qual a diferença entre VAR e LET?</title><link href="https://dicasdeprogramacao.com.br/javascript-qual-a-diferenca-entre-var-e-let/" rel="alternate"></link><published>2019-04-29T00:00:00-03:00</published><updated>2019-04-29T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-04-29:/javascript-qual-a-diferenca-entre-var-e-let/</id><summary type="html">&lt;p&gt;Após o lançamento do Javascript 6 (ECMAScript 6 ou ES2015) uma das grandes dúvidas que surgiram foi:
&lt;strong&gt;Qual é a diferença entre &lt;em&gt;var&lt;/em&gt; e &lt;em&gt;let&lt;/em&gt;?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Isso porque o &lt;em&gt;let&lt;/em&gt; não existia no javascript e foi incorporado nesta versão da linguagem …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Após o lançamento do Javascript 6 (ECMAScript 6 ou ES2015) uma das grandes dúvidas que surgiram foi:
&lt;strong&gt;Qual é a diferença entre &lt;em&gt;var&lt;/em&gt; e &lt;em&gt;let&lt;/em&gt;?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Isso porque o &lt;em&gt;let&lt;/em&gt; não existia no javascript e foi incorporado nesta versão da linguagem.
As duas palavras-chave (&lt;em&gt;var&lt;/em&gt; e &lt;em&gt;let&lt;/em&gt;) são utilizadas para declarar variáveis e funcionam quase do mesmo jeito.
A única diferença entre as duas é o escopo em que essas variáveis existem.&lt;/p&gt;
&lt;p&gt;Enquanto as variáveis declaradas com &lt;em&gt;let&lt;/em&gt; têm &lt;em&gt;escopo de bloco, instrução ou expressão&lt;/em&gt;,
as variáveis declaradas com &lt;em&gt;var&lt;/em&gt; têm &lt;em&gt;escopo global&lt;/em&gt; ou &lt;em&gt;escopo de função&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Antes de tudo é necessário entender o que é &lt;strong&gt;escopo&lt;/strong&gt; de variáveis:
Escopo de variáveis nada mais é do que &lt;strong&gt;onde uma variável existe&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Faça-se a seguinte pergunta: se eu declarar uma variável dentro de um bloco de &lt;strong&gt;if&lt;/strong&gt; por exemplo,
esta variável deve existir &lt;strong&gt;fora&lt;/strong&gt; deste bloco de if?&lt;/p&gt;
&lt;p&gt;Se a sua resposta foi &lt;em&gt;sim&lt;/em&gt;, você deve usar &lt;em&gt;var&lt;/em&gt; para declará-la.
Mas se a sua resposta foi &lt;em&gt;não&lt;/em&gt;, ou seja, esta variável deve existir &lt;strong&gt;apenas dentro do if&lt;/strong&gt;,
você deve usar &lt;em&gt;let&lt;/em&gt; para declará-la neste caso.&lt;/p&gt;
&lt;p&gt;A ideia funciona para qualquer tipo de &lt;strong&gt;bloco&lt;/strong&gt;: &lt;em&gt;if, for, while, função, etc.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Veja essa diferença na prática, criando uma variável dentro de um bloco if e tentando acessá-la fora do bloco.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;variavel1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;teste&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;variavel1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- Funciona com &amp;quot;var&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sendo bem direto essa é a diferença básica entre o &lt;strong&gt;var&lt;/strong&gt; e o &lt;strong&gt;let&lt;/strong&gt;.
Se você declarar a variável com &lt;strong&gt;var&lt;/strong&gt; dentro de um bloco &lt;strong&gt;if&lt;/strong&gt; por exemplo,
esta variável pode ser acessível fora desse bloco, como no exemplo acima.&lt;/p&gt;
&lt;p&gt;Entretanto se você declarar a variável com &lt;strong&gt;let&lt;/strong&gt; ela só existirá dentro daquele bloco.
Ou seja, o código abaixo dá erro na última linha.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;variavel2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;teste&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;variavel2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- Funciona dentro do bloco do IF&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;variavel2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- NÃO funciona com &amp;quot;let&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja esses exemplos funcionando no console do meu browser.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Teste var e let" src="/images/javascript-qual-a-diferenca-entre-var-e-let/teste-var-let.gif" style="width:100%;padding:10px"&gt;&lt;/p&gt;
&lt;p&gt;Claro que tem outros conceitos sobre escopos em Javascript que merecem outro post mais detalhado.&lt;/p&gt;
&lt;p&gt;A minha dica é que você use o &lt;em&gt;let&lt;/em&gt; sempre que possível,
pois desta forma você estará liberando espaço de memória sempre que o escopo de bloco da variável terminar.
O que não acontece com o &lt;em&gt;var&lt;/em&gt; que mantém o espaço da variável ocupado na memória,
mesmo depois que que a execução do bloco termina.&lt;/p&gt;
&lt;p&gt;Também é importante notar que declarar variáveis com &lt;em&gt;let&lt;/em&gt;, faz o javascript mais parecido
com outras linguagens de programação, como o java por exemplo,
onde as variáveis respeitam as regras de escopos de bloco.&lt;/p&gt;
&lt;p&gt;Lembre-se: &lt;strong&gt;as variáveis declaradas com &lt;em&gt;let&lt;/em&gt; têm &lt;em&gt;escopo de bloco, instrução ou expressão&lt;/em&gt;
e as variáveis declaradas com &lt;em&gt;var&lt;/em&gt; têm &lt;em&gt;escopo global de função&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/let" target="_blank"&gt;Mozila: LET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/var" target="_blank"&gt;Mozila: VAR&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="iniciante"></category><category term="var"></category><category term="let"></category><category term="variáveis"></category></entry><entry><title>Como criar uma aplicação com Angular</title><link href="https://dicasdeprogramacao.com.br/como-criar-uma-aplicacao-com-angular/" rel="alternate"></link><published>2019-04-09T00:00:00-03:00</published><updated>2019-04-09T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-04-09:/como-criar-uma-aplicacao-com-angular/</id><summary type="html">&lt;p&gt;Dar os primeiros passos com o Angular não é algo muito complicado.
Primeiro você precisa instalar o NodeJS e o NPM e depois o Angular-Cli.
Essas instalações já foram explicadas aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Instalação do NodeJS e npm …&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dar os primeiros passos com o Angular não é algo muito complicado.
Primeiro você precisa instalar o NodeJS e o NPM e depois o Angular-Cli.
Essas instalações já foram explicadas aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Instalação do NodeJS e npm no Windows (Passo a passo!)&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/como-instalar-o-angular-no-windows/" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Como instalar o Angular no Windows&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Com esses pré-requisitos instalados, o próximo passo é criar o seu primeiro projeto com o Angular.
Você pode fazer isso com apenas um comando do Angular-Cli.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ng new nome-da-sua-aplicacao
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este comando cria o seu projeto Angular já com um esqueleto, seguindo as boas práticas.&lt;/p&gt;
&lt;p&gt;Além de podermos dar qualquer nome para a aplicação, o &lt;code&gt;ng new&lt;/code&gt; dá a opção de duas customizações.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Se queremos que ele já configure uma rota para a aplicação. Eu recomendo que responda sim (y), pois as rotas permitem que naveguemos de uma view para outra, então provavelmente você vai precisar na sua nova aplicação.&lt;/li&gt;
&lt;li&gt;Qual formato de folha de estilo queremos usar (CSS, Sass, Less, Stylus). Esta é uma escolha pessoal, eu gosto do Sass, mas vai da sua preferência.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;E claro, o Angular-Cli é em &lt;a href="https://dicasdeprogramacao.com.br/quer-ser-programador-aprenda-ingles/" target="_blank"&gt;&lt;strong&gt;inglês&lt;/strong&gt;&lt;/a&gt;. Veja abaixo, como o angular-cli oferece essas opções.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Execução do 'ng new'" src="/images/como-criar-uma-aplicacao-com-angular/ng-new-options.gif" style="width:100%;"&gt;&lt;/p&gt;
&lt;p&gt;Por fim, o Angular CLI criará o esqueleto do seu projeto e instalará os pacotes &lt;em&gt;npm&lt;/em&gt; necessários para a sua aplicação. Isso pode demorar alguns minutos.&lt;/p&gt;
&lt;p&gt;Ao final do processo você terá uma pasta com o nome que você escolheu pra sua aplicação, esta pasta contém:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O esqueleto inicial do seu projeto (na pasta &lt;code&gt;src&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Um projeto de teste end-to-end (na pasta &lt;code&gt;e2e&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Arquivos de configuração do seu projeto (&lt;code&gt;angular.json&lt;/code&gt;, &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;tsconfig.json&lt;/code&gt;, &lt;code&gt;tslint.json&lt;/code&gt; e &lt;code&gt;.gitignore&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Um &lt;code&gt;README.md&lt;/code&gt; para você descrever a sua aplicação seguindo as prática da comunidade open source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Não vou entrar em detalhes sobre a estrutura do projeto neste post, mas se você quiser executar a sua nova aplicação Angular, basta entrar na pasta do projeto e executar o comando &lt;code&gt;ng serve --open&lt;/code&gt;.
O Angular CLI vai criar um servidor local para executar a sua aplicação e o parâmetro &lt;code&gt;--open&lt;/code&gt; abrirá o browser com a sua aplicação automaticamente.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Executando a sua aplicação Angular com 'ng serve --open'" src="/images/como-criar-uma-aplicacao-com-angular/ng-serve--open.gif" style="width:100%;"&gt;&lt;/p&gt;
&lt;p&gt;Pronto, a primeira aplicação Angular está criada e rodando, agora é mão na massa para customizá-la.&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://angular.io/guide/quickstart" target="_blank"&gt;1. Angular.IO Guide&lt;/a&gt;&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="angular"></category></entry><entry><title>Como instalar o Angular no Windows</title><link href="https://dicasdeprogramacao.com.br/como-instalar-o-angular-no-windows/" rel="alternate"></link><published>2019-02-18T00:00:00-03:00</published><updated>2019-02-18T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-02-18:/como-instalar-o-angular-no-windows/</id><summary type="html">&lt;p&gt;Para quem se interessou em aprender &lt;strong&gt;Angular&lt;/strong&gt;, a primeira coisa que tem que fazer é
justamente instalar o &lt;strong&gt;Angular Cli&lt;/strong&gt; para ter um ambiente de desenvolvimento para estudo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Angular" src="/images/como-instalar-o-angular-no-windows/logo-angular.png" style="float:right;"&gt;&lt;/p&gt;
&lt;p&gt;O requisito para instalar o Angular no seu computador é ter instalado …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para quem se interessou em aprender &lt;strong&gt;Angular&lt;/strong&gt;, a primeira coisa que tem que fazer é
justamente instalar o &lt;strong&gt;Angular Cli&lt;/strong&gt; para ter um ambiente de desenvolvimento para estudo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Angular" src="/images/como-instalar-o-angular-no-windows/logo-angular.png" style="float:right;"&gt;&lt;/p&gt;
&lt;p&gt;O requisito para instalar o Angular no seu computador é ter instalado o NodeJS e o &lt;strong&gt;npm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Você não vai precisar usar o NodeJS, esse requisito é necessário porque o angular é instalado através do &lt;strong&gt;npm&lt;/strong&gt;,
que é o gerenciador de pacotes que é instalado junto como NodeJS.&lt;/p&gt;
&lt;p&gt;Aqui no &lt;strong&gt;{ Dicas de Javascript }&lt;/strong&gt; tem um passo-a-passo de como instalar o NodeJS e o &lt;strong&gt;npm&lt;/strong&gt; no seu computador.
Basta clicar no link abaixo e seguir tutorial.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Instalação do NodeJS e npm no Windows (Passo a passo!)&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Com o &lt;strong&gt;npm&lt;/strong&gt; instalado, agora podemos instalar o &lt;strong&gt;Angular CLI&lt;/strong&gt; para podermos criar aplicações,
executar o servidor local com a nossa aplicação, criar componentes, módulos, serviços, etc.&lt;/p&gt;
&lt;p&gt;Para instalar o Angular CLI usando o npm, abra o prompt de comandos (cmd no windows) e execute o seguinte comando.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;@angular&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cli&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O parâmetro &lt;code&gt;-g&lt;/code&gt; significa que o Angular Cli será instalado globalmente no seu sistema operacional.&lt;/p&gt;
&lt;p&gt;O processo de instalação pode demorar alguns minutos,
devido a várias verificações e o download de todas as dependências.&lt;/p&gt;
&lt;p&gt;Abaixo você pode ver como executar o comando de instalação do &lt;strong&gt;Angular Cli&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalação do angular cli pelo npm" src="/images/como-instalar-o-angular-no-windows/instalacao-angular-cli-com-npm.gif" style="width:100%;"&gt;&lt;/p&gt;
&lt;p&gt;Após o npm baixar todas as dependências e instalar o &lt;strong&gt;Angular Cli&lt;/strong&gt;, você já está pronto para usá-lo através do comando &lt;code&gt;ng&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A imagem abaixo mostra um exemplo da utilização do comando &lt;code&gt;ng&lt;/code&gt; para mostrar a versão do &lt;strong&gt;Angular Cli&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalação do angular cli pelo npm" src="/images/como-instalar-o-angular-no-windows/verificacao-do-comando-ng.gif" style="width:100%;"&gt;&lt;/p&gt;
&lt;p&gt;Isso mostra que o &lt;strong&gt;Angular Cli&lt;/strong&gt; está instalado. Divirta-se!&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://angular.io/guide/quickstart" target="_blank"&gt;1. Angular.IO Guide&lt;/a&gt;&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="instalação"></category><category term="windows"></category><category term="angular"></category><category term="nodejs"></category><category term="npm"></category></entry><entry><title>Java: Como criar uma Thread com Lambda</title><link href="https://dicasdeprogramacao.com.br/java-como-criar-uma-thread-com-lambda/" rel="alternate"></link><published>2019-01-29T00:00:00-02:00</published><updated>2019-01-29T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-01-29:/java-como-criar-uma-thread-com-lambda/</id><summary type="html">&lt;p&gt;As funções &lt;strong&gt;lambda&lt;/strong&gt; introduzidas na versão 8 do java trouxeram muitos benefícios para a linguagem.&lt;/p&gt;
&lt;p&gt;Um exemplo é a criação de Threads que agora ficou bem mais simples com lambda. Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;seu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;código&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aqui&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O exemplo acima …&lt;/p&gt;</summary><content type="html">&lt;p&gt;As funções &lt;strong&gt;lambda&lt;/strong&gt; introduzidas na versão 8 do java trouxeram muitos benefícios para a linguagem.&lt;/p&gt;
&lt;p&gt;Um exemplo é a criação de Threads que agora ficou bem mais simples com lambda. Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;seu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;código&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aqui&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O exemplo acima, cria uma Thread com o seu código e já inicia essa nova thread.&lt;/p&gt;
&lt;p&gt;Vamos ver um exemplo prático.&lt;/p&gt;
&lt;p&gt;O código abaixo cria uma Thread em que imprime um texto após 3 segundos.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TesteThreadLambda&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Executando a Thread. Espere 1 segundo.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Finalizando a Thread.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Finalizou a thread main.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para verificar o funcionamento da Thread, podemos ver que o texto &lt;code&gt;Finalizou a thread main.&lt;/code&gt; foi impresso antes da Thread criada iniciar.
Veja a execução deste código na imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Criação de Thread com Lambda no Java" src="/images/java-como-criar-uma-thread-com-lambda/thread-com-lambda.gif" style="width: 100%;padding: 10px;"&gt;&lt;/p&gt;
&lt;p&gt;Se ficou com alguma dúvida, poste aí nos comentários!&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="Lambda"></category><category term="Thread"></category></entry><entry><title>Como instalar o MySQL no Windows (Passo a passo!)</title><link href="https://dicasdeprogramacao.com.br/como-instalar-o-mysql-no-windows/" rel="alternate"></link><published>2019-01-25T00:00:00-02:00</published><updated>2019-01-25T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-01-25:/como-instalar-o-mysql-no-windows/</id><summary type="html">&lt;p&gt;O MySQL é um dos &lt;a href="https://dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank"&gt;&lt;strong&gt;SGBDs&lt;/strong&gt;&lt;/a&gt; mais conhecidos do mundo.
Muito famoso por ser leve, opensource e principalmente por ser um dos softwares do conjunto LAMP
(Linux + Apache + &lt;strong&gt;MySQL&lt;/strong&gt; + PHP).&lt;/p&gt;
&lt;p&gt;Por ser um dos mais utilizados em produção, principalmente para …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O MySQL é um dos &lt;a href="https://dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank"&gt;&lt;strong&gt;SGBDs&lt;/strong&gt;&lt;/a&gt; mais conhecidos do mundo.
Muito famoso por ser leve, opensource e principalmente por ser um dos softwares do conjunto LAMP
(Linux + Apache + &lt;strong&gt;MySQL&lt;/strong&gt; + PHP).&lt;/p&gt;
&lt;p&gt;Por ser um dos mais utilizados em produção, principalmente para sites, e pequenos sistemas,
o MySQL também é um dos principais SGBDs para se aprender sobre banco de dados.
Por isso, neste post eu vou mostrar um passo-a-passo de como &lt;strong&gt;instalar o MySQL no Windows&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank"&gt;&amp;gt;&amp;gt; O que é um SGBD?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vamos lá?&lt;/p&gt;
&lt;p&gt;Primeiramente, acesse a &lt;a href="https://dev.mysql.com/downloads/windows/" target="_blank"&gt;página de download&lt;/a&gt; do instalador do MySQL.&lt;/p&gt;
&lt;p&gt;Nesta página você tem várias opções do MySQL para instalação,
deste somente o servidor de banco de dados do Mysql, até conectores e ferramentas de trabalho.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; Observe que tem a versão &lt;em&gt;Enterprise&lt;/em&gt; e &lt;em&gt;Community&lt;/em&gt; na página de download.
Nós escolhemos a &lt;strong&gt;Community&lt;/strong&gt;, pois é a versão gratuita. =P&lt;/p&gt;
&lt;p&gt;Como vamos instalar o SGBD do MySQL e também algumas ferramentas opcionalmente.
Vamos baixar o instalador global do Mysql, ou seja, o &lt;a href="https://dev.mysql.com/downloads/installer/" target="_blank"&gt;MySQL Installer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Você pode escolher entre o baixar só o instalador e ele se encarregará de baixar o resto na hora da instalação,
ou você pode baixar o instalador que já traz todas as dependência.&lt;/p&gt;
&lt;p&gt;Evidentemente o primeiro você pode usar em um lugar que tenha acesso à internet, pois ele vai baixar só o que você precisa.
E o segundo você baixa se quiser instalar o MySQL em algum lugar que não tenha acesso à internet.&lt;/p&gt;
&lt;p&gt;A diferença de tamanho é bem grante. Eu baixei o só o instalador.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Página de download do MySQL" src="/images/como-instalar-o-mysql-no-windows/pagina-download-instalador-mysql.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A página seguinte pede login no site para fazer download. Mas tem um link para baixar sem fazer login. Você escolhe.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Login no site MySQL para baixar instalador" src="/images/como-instalar-o-mysql-no-windows/pagina-download-instalador-mysql-login.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Após baixar o instalador do MySQL, execute-o. Ele te pedirá acesso de administrador.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Executar o instalador do MySQL." src="/images/como-instalar-o-mysql-no-windows/executar-instalador-mysql.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Pode ser que o instalador identifique uma atualização e peça para ser atualizado, você pode escolher...&lt;/p&gt;
&lt;p&gt;Eu preferi atualizar o instalador do MySQL. Neste caso ele vai baixar a atualização e em seguida iniciar o processo de instalação.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Atualização do instalador do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-00-atualizar-instalador.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A primeira tela do instalador do MySQL pede para aceitar os termos de licença.
Se concordar aceite (marcando o checkbox &lt;code&gt;I accept the license terms&lt;/code&gt;) e clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de aceite de termos de licença do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-01-termos.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Em seguida o instalador nos oferece 5 opções de instalação:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Padrão de desenvolvedor: inclui o servidor Mysql, ferramentas como &lt;em&gt;Shell&lt;/em&gt;, &lt;em&gt;Router&lt;/em&gt; e &lt;em&gt;Workbench&lt;/em&gt;, conectores, etc.&lt;/li&gt;
&lt;li&gt;Somente o servidor&lt;/li&gt;
&lt;li&gt;Somente cliente: não instala o servidor MySQL&lt;/li&gt;
&lt;li&gt;Completo: Tudo!&lt;/li&gt;
&lt;li&gt;Personalizado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eu sempre escolho personalizado pois nunca preciso de todos os conectores nem todas as ferramentas.
E se precisar também, basta executar o instalador denovo e instalar o compoenente que eu precisar.&lt;/p&gt;
&lt;p&gt;Escolha o que preferir e clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Seleção de tipo de instalação do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-02-tipo-de-instalacao.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Se você, assim como eu, escolhou a opção de personalizar a instalação, você poderá escolher o que quer instalar.&lt;/p&gt;
&lt;p&gt;Selecione o que quer instalar e clique na &lt;strong&gt;setinha para direita&lt;/strong&gt;.
Se quiser remover algum componete da instalação, selecione-o e clique na &lt;strong&gt;setinha para esquerda&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Escolha o que quer que seja instalado (o que ficará na lista da direita) e clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de seleção de componentes do MySQL a serem instalado." src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-03-selecao-de-componentes.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Na sequência o instalador deve verificar se falta alguma dependência para algum dos componentes selecionados para instalação.&lt;/p&gt;
&lt;p&gt;No meu caso, o instalador identificou que eu não tinha o Visual C++ 2013 instalado.&lt;/p&gt;
&lt;p&gt;Basta clicar em &lt;strong&gt;Execute&lt;/strong&gt; que o instalador do Mysql baixa o instalador desta dependência e instala.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador de dependência do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-04-instalar-dependencias.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;No meu caso o instalador do Visual C++ 2013 foi baixado e executado automaticamente.
Bastou aceitar os termos e clicar em &lt;strong&gt;Install&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Após finalizar a instalação do Visual C++ 2013, o instalador do MySQL identifica que as dependências já estão resolvidas.&lt;/p&gt;
&lt;p&gt;Se tiver mais de uma dependência para ser instalada no seu computador o instalador do MySQL não vai continuar
enquando não atender os requisitos.&lt;/p&gt;
&lt;p&gt;Quando as dependências estiverem devidamente instaladas, clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Dependências resolvidas para instalar o MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-05-dependencias-resolvidas.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Por fim, o instalador apresenta o que será baixado
(se você escolheu o instalador mais leve que baixa o que precisa na hora da instalação)
e instalado no seu computador. Se estiver tudo certo, clique em &lt;strong&gt;Execute&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Executar a instalação do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-06-executar-instalacao.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Agora o instalador vai baixar tudo que precisa (se precisar)...&lt;/p&gt;
&lt;p&gt;&lt;img alt="Processo de download do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-07-download-componentes-mysql.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;E instalar os componentes que você escolheu, um por um...&lt;/p&gt;
&lt;p&gt;&lt;img alt="Processo de instalação do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-08-instalacao-componentes-mysql.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Após todos os componentes estiverem instalados, clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Componentes do MySQL instalados." src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-09-componentes-mysql-instalados.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Se você escolheu instalar algum componente que precisa de configuração como servidor SGBD MySQL,
o instalador solicita que as configurações básicas sejam configuradas.&lt;/p&gt;
&lt;p&gt;No meu caso era só o servidor MySQL que precisava de configuração. Clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Configuração dos componentes do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-10-configuracao-componentes-mysql-instalados.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Para configurar o servidor do MySQL, o instalador oferece duas opções: &lt;strong&gt;Standalone&lt;/strong&gt; ou &lt;strong&gt;Cluster&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Se você está configurando um servidor para desenvolvimento e não precisa trabalhar com "Cluster", escolha a primeira opção.&lt;/p&gt;
&lt;p&gt;Após escolher a forma de replicação (Standalone ou Cluster) clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Forma de replicação do servidor MySQL - Standalone ou Cluster" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-10-configuracao-mysql-server-replication.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Agora o instalador oferece algumas opções de configuração de rede e outras configurações.
Se estiver instalando um servidor no seu computador para desenvolvimento, simplesmente aceite
(ou troque a porta padrão do MySQL se for necessário, por causa de conflito) clicando em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Configuração de rede do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-11-configuracao-rede-mysql.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Na sequência, chega o momento de configurar a forma de acesso do usuário principal do SGBD MySQL.&lt;/p&gt;
&lt;p&gt;Você pode escolher se quer um método de autenticação com senha encriptada (recomendado) ou o método antigo de autenticação.&lt;/p&gt;
&lt;p&gt;Eu prefiro o mais seguro! =P&lt;/p&gt;
&lt;p&gt;E se você for usar MySQL com versão 8.0 ou superior você precisará escolher esta opção.&lt;/p&gt;
&lt;p&gt;Clique em Next após se decidir entre as duas opções.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Método de autenticação no MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-12-modo-de-autenticacao.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A tela seguinte pede para definirmos uma senha para o usuário &lt;strong&gt;root&lt;/strong&gt;, ou seja, o usuário administrador.&lt;/p&gt;
&lt;p&gt;A sua senha pode ser considerada fraca, média ou forte ...
É bom usar uma senha complicada, mas você precisa lembrar dela! rs&lt;/p&gt;
&lt;p&gt;Independente se você criar uma senha forte ou fraca, você poderá continuar com a instalação do MySQL.
Mas é necessário que você digite a mesma senha, exatamente igual, nos dois campos apresentados.
Clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt; para continuar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Definição de senha para o MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-13-definicao-de-senha-root.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Seguindo o processo de instalação, nós podemos configurar se queremos que o servidor do MySQL
seja gerenciado como um processo do Windows, se deve ser iniciado quando o sistema iniciar
e sob qual usuário o processo do servidor do MySQL deve ser executado.&lt;/p&gt;
&lt;p&gt;Eu prefiro que o servidor do MySQL seja executado como um serviço do Windows mesmo,
iniciado junto com o Windows e sob o usuário padrão.&lt;/p&gt;
&lt;p&gt;Após escolher, clique em &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Modo de execução do MySQL no Windows" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-14-gerenciamento-do-servico-mysql.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Para finalizar a configuração do MySQL, o instalador nos mostra um resumo do que será feito.
Só precisamos clicar em &lt;strong&gt;Execute&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Aplicar configurações do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-15-aplicar-configuracoes.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Após o processo de configuração terminar, basta clicar em &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Finalizar configuração do servidor do MySQL" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-16-finish.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Por fim, você poderá copiar o log da instalação para a memória do seu computador e/ou iniciar algumas ferramentas
de utilização do MySQL como o &lt;strong&gt;MySQL Workbench&lt;/strong&gt; e o &lt;strong&gt;MysQL Shell&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalação do MySQL completa" src="/images/como-instalar-o-mysql-no-windows/instalador-mysql-17-instalacao-completa.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Pronto! Tudo certo pra você começar a usar o MySQL no seu computador.&lt;/p&gt;
&lt;p&gt;Espero que este post tenha te ajudado.&lt;/p&gt;
&lt;p&gt;Se ficou com alguma dúvida sobre essa instalação,
fique à vontade para comentar aqui abaixo.&lt;/p&gt;</content><category term="Banco de Dados"></category><category term="MySQL"></category><category term="Instalação"></category></entry><entry><title>Como instalar o GIT no Windows (Passo a passo!)</title><link href="https://dicasdeprogramacao.com.br/como-instalar-o-git-no-windows/" rel="alternate"></link><published>2019-01-23T00:00:00-02:00</published><updated>2019-01-23T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-01-23:/como-instalar-o-git-no-windows/</id><summary type="html">&lt;p&gt;O GIT é um dos sistemas de controle de versão mais utilizado por desenvolvedores de softwares.
Principalmente por causa do &lt;a href="https://github.com" target="_blank"&gt;Github&lt;/a&gt;, recentemente comprado pela Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/migracao-do-blog-para-site-estatico/" target="\blank"&gt;&amp;gt;&amp;gt; Inclusive, o código deste blog está todo armazenado no github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Como a maioria dos iniciantes …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O GIT é um dos sistemas de controle de versão mais utilizado por desenvolvedores de softwares.
Principalmente por causa do &lt;a href="https://github.com" target="_blank"&gt;Github&lt;/a&gt;, recentemente comprado pela Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/migracao-do-blog-para-site-estatico/" target="\blank"&gt;&amp;gt;&amp;gt; Inclusive, o código deste blog está todo armazenado no github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Como a maioria dos iniciantes em programação utilizam o Windows e uma hora ou outra vão precisar instalar o GIT no Windows.
Resolvir escrever este post para mostrar o passo-a-passo da instalação do GIT no Windows,
visto que a instalação do GIT pode gerar algumas dúvidas em quem não está acostumado com algumas ferramentas do Linux.&lt;/p&gt;
&lt;p&gt;Enfim, explico abaixo todo o processo de instalação do GIT no Windows,
mas caso você ainda fique com alguma dúvida não hesite em perguntar nos comentários!&lt;/p&gt;
&lt;p&gt;Vamos lá?&lt;/p&gt;
&lt;h2&gt;Instalação do GIT no Windows&lt;/h2&gt;
&lt;p&gt;&lt;img alt="GIT e Windows" src="/images/como-instalar-o-git-no-windows/destaque.png" style="padding:10px;width:100%;"&gt;&lt;/p&gt;
&lt;p&gt;Primeiro, acesse o &lt;a href="https://git-scm.com/downloads" target="_blank"&gt;site oficial&lt;/a&gt; para baixar o instalador do git.
Escolha o sistema operacional que você pretende instalar (no meu caso é o Windows) e baixe o instalador apropriado.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Página de download do instalador do GIT" src="/images/como-instalar-o-git-no-windows/site-download-git.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Após o instalador ser baixado, execute-o.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Executando o instalador do GIT" src="/images/como-instalar-o-git-no-windows/executando-o-instalador-do-git.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A primeira tela do instalador do GIT apresenta os termos da licença de utilização do GIT.
Basta clicar em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Primeira tela do instalador do GIT." src="/images/como-instalar-o-git-no-windows/instalador-git-01-termos.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A segunda tela é para a seleção do local da instalação, eu mantenho o padrão &lt;code&gt;C:\Program Files\Git&lt;/code&gt;, mas sinta-se livre para alterar.
Após definir o local da instalação do GIT, clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de seleção do local de instalação do GIT." src="/images/como-instalar-o-git-no-windows/instalador-git-02-local.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Agora o instalador oferece a possibilidade de selecionar os componentes do GIT que queremos que seja instalado.&lt;/p&gt;
&lt;p&gt;Eu não gosto de adicionar ícones no Desktop, por isso eu desmarco. Os demais componentes eu marquei todos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integração com Windows Explorer&lt;/li&gt;
&lt;li&gt;Suporte a arquivos grandes&lt;/li&gt;
&lt;li&gt;Associação de arquivos, e editor de texto padrão&lt;/li&gt;
&lt;li&gt;Permitir que o prompt de comandos seja colorido para as opções do git&lt;/li&gt;
&lt;li&gt;Verificação diária de atualização.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Escolha os componentes de sua preferência e clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de seleção de componentes do GIT." src="/images/como-instalar-o-git-no-windows/instalador-git-03-componentes.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Em seguida o instalador do GIT nos indica que criará uma pasta com atalhos no menu iniciar,
se quiser, você pode marcar o &lt;em&gt;checkbox&lt;/em&gt; &lt;code&gt;Don't create a Start Menu folder&lt;/code&gt; para o instalador não criar esta pasta.&lt;/p&gt;
&lt;p&gt;No meu caso eu deixei o instalador criar os atalhos no menu Iniciar.&lt;/p&gt;
&lt;p&gt;Clique em &lt;strong&gt;Next&lt;/strong&gt; para continuar a instalação.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de criação de atalho do GIT no menu Iniciar" src="/images/como-instalar-o-git-no-windows/instalador-git-04-atalho-iniciar.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Na sequência o instalador pede para selecionarmos o editor de texto que deve ser utilizado para editar os conflitos que por ventura acontecerem.&lt;/p&gt;
&lt;p&gt;Eu gosto do Vim mesmo, mas você pode não tem muita afinidade com o Vim
você pode alterar para Notepad++, Sublime, Atom, VS Code, ou outro editor de sua preferência.&lt;/p&gt;
&lt;p&gt;Após a escolha, clique em &lt;strong&gt;Next&lt;/strong&gt; para continuar com a instalação.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de seleção do editor de conflitos padrão do GIT" src="/images/como-instalar-o-git-no-windows/instalador-git-05-editor-de-conflitos.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Neste momento começa algumas partes confusas para quem não conhece muito o GIT.&lt;/p&gt;
&lt;p&gt;Na próxima tela o instalador do GIT nos pergunta se queremos usar os comandos do git:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;somente no prompt de comandos do próprio git (chamado de Git Bash), neste caso ele não vai alterar a variável de ambiente PATH.&lt;/li&gt;
&lt;li&gt;no prompt do Windows (Windows Command Prompt), neste caso a variável de ambiente PATH será alterada para incluir o caminho de onde está o executável git.exe.&lt;/li&gt;
&lt;li&gt;no prompt do Windows + comandos utilitários do línux.
Eu sempre marco esta opção, porque o instalador traz para o Windows alguns comando que eu uso muito no Linux,
como &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;find&lt;/code&gt;, etc.
Neste caso a variável de ambiente PATH será alterada para incluir o caminho do executável git.exe e dos executáveis de cada comando utilitário do linux.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Escolha a opção que acha mais adequada para você e clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de ajuste da variável de ambiente PATH." src="/images/como-instalar-o-git-no-windows/instalador-git-05-comandos-linux.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A tela seguinte do instalador oferece a opção de escolhar a biblioteca de validação de chaves de segurança SSL.&lt;/p&gt;
&lt;p&gt;Eu costumo utilizar a OpenSSL, que é compatível com outras plataformas.&lt;/p&gt;
&lt;p&gt;Escolha a que achar apropriada e clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de seleção de biblioteca de validação de certificados SSL" src="/images/como-instalar-o-git-no-windows/instalador-git-06-biblioteca-ssl.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Neste ponto da instalação, nos é perguntado como o git deve tratar o final dos arquivos de texto.&lt;/p&gt;
&lt;p&gt;Este é um assunto complicado de explicar em poucas palavras, mas vamos lá ...&lt;/p&gt;
&lt;p&gt;Vamos dar uma pequena pausa na instalação do GIT aqui para entender esse assunto.&lt;/p&gt;
&lt;h2&gt;Como é tratado o final de linha dos arquivos de textos&lt;/h2&gt;
&lt;p&gt;O Windows e o Unix, tratam o final de linha dos arquivos texto de formas diferentes.&lt;/p&gt;
&lt;p&gt;Pra resumir a história ...
o Windows segue um padrão antigo de comandos de impressora,
chamado de CRLF, que indica para o cabeçote da impressora ir para o início horizontal (Carriage Return)
e para iniciar uma próxima linha (Line Feed).&lt;/p&gt;
&lt;p&gt;Como se fosse aquela alavanca da máquina de escrever que funciona dessa forma, &lt;em&gt;vai pro início e para a próxima linha&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Já no linux, ficou comum somente o comando LF que teria o mesmo funcionamento do CRLF, ou seja, &lt;em&gt;próxima linha...início.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Isso significa que o Linux usa um caracter ASCII para a quebra de linha e o Windows usa dois.
Esta é a mesma origem da confusão entre &lt;code&gt;\n&lt;/code&gt; e &lt;code&gt;\r&lt;/code&gt;, mas isso é assunto pra outro post.&lt;/p&gt;
&lt;p&gt;Por agora entenda as opções que o instalador do GIT oferece:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;converter &lt;code&gt;LF&lt;/code&gt; para &lt;code&gt;CRLF&lt;/code&gt; ao baixar arquivos e &lt;code&gt;CRLF&lt;/code&gt; para &lt;code&gt;LF&lt;/code&gt; ao comitar.&lt;/li&gt;
&lt;li&gt;baixar como é (não converte nada), mas comitar convertendo &lt;code&gt;CRLF&lt;/code&gt; para &lt;code&gt;LF&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;não converter nada, baixar como é e comitar como estiver.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eu marco a primeira opção, para evitar problemas de compatibilidade entre as plataformas.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de configuração de final de linha do instalador do GIT." src="/images/como-instalar-o-git-no-windows/instalador-git-07-caracter-de-final-de-linha.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Continuando a instalação ...&lt;/h2&gt;
&lt;p&gt;Na sequência, o instalador oferece a opção de escolher o emulador de terminal (prompt) que queremos usar para o GIT.
Podemos usar o console padrão do Windows (cmd.exe) ou o MinTTY que é um emulador que oferece algumas características melhores na minha opinião.&lt;/p&gt;
&lt;p&gt;Em suma, o cmd é usado para compatibilidade com plataformas de 32 bits, ou seja, se o seu windows for 32 bits, é melhor escolher o cmd mesmo,
mas se o seu windows for de 64 bits, é melhor escolher o MinTTY, pq ele oferece alguns recursos melhores para terminal, como por exemplo &lt;strong&gt;maximizar&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de escolha de emulador de terminal do GIT." src="/images/como-instalar-o-git-no-windows/instalador-git-08-emulador-de-terminal.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A penúltima tela nos oferece algumas opções extras, são elas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;habilitar cache de arquivos na memória. Isso melhora o desempenho do git em alguns casos.&lt;/li&gt;
&lt;li&gt;habilitar o gerenciador de credenciais do GIT.
Isso permite autenticação em duas etapas no VSTS e no GitHub, e precisa do framework .NET 4.5 para funcionar.&lt;/li&gt;
&lt;li&gt;habilitar links simbólicos: Sinceramente, não sei o que é isso no Windows e não me fez falta ainda,
se você souber do que se trata, apreciarei muito uma explicação aí nos comentários. ;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Selecione os itens opcionais que você deseja e clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de escolha de ítens opcionais do GIT no Windows" src="/images/como-instalar-o-git-no-windows/instalador-git-09-opcoes-extras.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Por fim, última tela do instalador do GIT no Windows (UFA!!!),
o instalador nos oferece alguns componentes que estão em fase de experimentação.&lt;/p&gt;
&lt;p&gt;São componentes que não foram muito testados, mas que parecem melhorar bastante a performance.&lt;/p&gt;
&lt;p&gt;Você escolhe se que instala ou não ...&lt;/p&gt;
&lt;p&gt;Eu não marquei.&lt;/p&gt;
&lt;p&gt;Após decidir se instala os componentes experimentais ou não, clique em &lt;strong&gt;Install&lt;/strong&gt; para começar a instalação.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela de seleção de componentes experimentais do GIT." src="/images/como-instalar-o-git-no-windows/instalador-git-10-componentes-experimentais.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Depois da instalação, o instalador oferece a opção de já rodar o prompt do GIT (Git Bash)
e ver o arquivo de texto com as notas da versão lançada.&lt;/p&gt;
&lt;p&gt;Se quiser uma dessas duas opções, marque-a, eu desmarquei as duas.&lt;/p&gt;
&lt;p&gt;Para finalizar, clique em &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tela final do instalador do GIT" src="/images/como-instalar-o-git-no-windows/instalador-git-11-finalizar-instalacao.png" style="padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Pronto, agora você tem o GIT instalado no seu Windows!&lt;/p&gt;
&lt;p&gt;Espero que este post tenha te ajudado na instalação do GIT,
se você ficou com dúvida em alguma parte, comente logo aqui abaixo.&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="GIT"></category><category term="Instalação"></category></entry><entry><title>Qual a diferença entre JDK, JRE e JVM</title><link href="https://dicasdeprogramacao.com.br/qual-a-diferenca-entre-jdk-jre-e-jvm/" rel="alternate"></link><published>2019-01-14T00:00:00-02:00</published><updated>2019-01-14T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-01-14:/qual-a-diferenca-entre-jdk-jre-e-jvm/</id><summary type="html">&lt;p&gt;Uma grande confusão que paira sobre quem está começando a aprender sobre o mundo Java é
&lt;strong&gt;a diferença entre JDK, JRE e JVM&lt;/strong&gt;.
Neste post você vai entender, de uma vez por todas, a diferença entre essas três siglas
e …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Uma grande confusão que paira sobre quem está começando a aprender sobre o mundo Java é
&lt;strong&gt;a diferença entre JDK, JRE e JVM&lt;/strong&gt;.
Neste post você vai entender, de uma vez por todas, a diferença entre essas três siglas
e porque é importante saber para que serve cada um.&lt;/p&gt;
&lt;p&gt;A primeira coisa que você precisa saber é que o Java é muito conhecido por trazer o conceito de multi-plataforma.
Na verdade esse é o motivo do grande sucesso do Java à mais de vinte anos!
O famoso &lt;a href="https://pt.wikipedia.org/wiki/WORA" target="_blank"&gt;&lt;strong&gt;WORA&lt;/strong&gt;&lt;/a&gt; (&lt;em&gt;Write once, run anywhere.&lt;/em&gt;),
ou em bom português: "&lt;em&gt;Escreva uma vez, execute em qualquer lugar&lt;/em&gt;".&lt;/p&gt;
&lt;p&gt;Na prática, só de entender esse conceito e como o Java faz para tornar possível
escrever um único código e executá-lo em qualquer sistema operacional,
você já vai perceber, por alto, a diferença entre JDK, JRE e JVM e onde cada um se encaixa.&lt;/p&gt;
&lt;p&gt;O fluxo é basicamente o seguinte:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Você escreve o seu código-fonte (arquivo com a extensão .java).&lt;/li&gt;
&lt;li&gt;Você utiliza o JDK para compilar o seu código-fonte e gerar o arquivo &lt;em&gt;bytecode&lt;/em&gt; (arquivo com a extensão .class).&lt;/li&gt;
&lt;li&gt;Para executar o seu programa, a JVM lê o seu arquivo compilado (.class) e as bibliotecas padrões do Java que estão no JRE.&lt;/li&gt;
&lt;li&gt;Pronto, seu programa está rodando e todo mundo está feliz! :)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Então, a grosso modo, já deu pra perceber pra quê serve cada um:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JDK (Java Development Kit) - é o Kit de Desenvolvimento Java responsável por compilar código-fonte (.java) em &lt;em&gt;bytecode&lt;/em&gt; (.class)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JVM (Java Virtual Machine) - é a Máquina Virtual do Java reponsável por executar o &lt;em&gt;bytecode&lt;/em&gt; (.class)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JRE (Java Runtime Environment) - Ambiente de Execução do Java que fornece as bibliotecas padrões do Java para o JDK compilar o seu código e para a JVM executar o seu programa.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este é o básico que você precisa saber sobre essas três siglas e como o Java funciona.&lt;/p&gt;
&lt;p&gt;Mas estes 3 componentes têm um certo relacionamento entre eles.
Vamos nos aprofundar um pouco mais o entendimento de cada um e como eles se relacionam entre sí para possibilitar a "mágica" do mundo Java.&lt;/p&gt;
&lt;h2&gt;JVM - Máquina Virtual do Java&lt;/h2&gt;
&lt;p&gt;Já vimos que a JVM é a responsavel por executar os programas no formato &lt;em&gt;bytecode&lt;/em&gt;, certo?
Mas a JVM não é só isso, ela é na verdade o coração do Java,
reponsável por fornecer a tal capacidade de multi-plataforma.&lt;/p&gt;
&lt;p&gt;Isso porque depois que você instala a JVM no sistema operacional (Windows, Linux, Mac, etc.),
Ela é capaz de interpretar e executar o programa compilado em formato &lt;em&gt;bytecode&lt;/em&gt;
em qualquer um desses SOs.&lt;/p&gt;
&lt;p&gt;Um coisa legal de perceber aqui é que a JVM executa um programa &lt;em&gt;bytecode&lt;/em&gt;,
mesmo que este programa &lt;em&gt;bytecode&lt;/em&gt; não tenha sido escrito em Java necessariamente.&lt;/p&gt;
&lt;p&gt;Isso mesmo! Você não precisa programar na linguagem java, para executar um programa na JVM.
Você pode criar seus programas em outras linguagens que também geram arquivos &lt;em&gt;bytecode&lt;/em&gt;.
Existem várias delas, alguns exemplos são: Scala, JRuby, Jython, Clojure, Groovy, etc..&lt;/p&gt;
&lt;p&gt;Outro ponto importante é que a &lt;strong&gt;JVM&lt;/strong&gt; é, na verdade, uma especificação.
Isso significa que uma JVM pode ser desenvolvida por qualquer organização,
desde que sigam as especificações para a Java Virtual Machine.&lt;/p&gt;
&lt;h2&gt;JRE - Ambiente de Execução Java&lt;/h2&gt;
&lt;p&gt;O JRE provê os requisitos mínimos para executar um programa java.
Ele contém uma JVM, os pacotes básicos do Java (API core),
por exemplo o pacote lang que tem a classe &lt;code&gt;String&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Por fim o JRE também provê ferramentas para executar os programas java.
Uma delas é o executável &lt;code&gt;java.exe&lt;/code&gt;, que é utilizado para executar uma classe java
que contém um método &lt;code&gt;main(String args[])&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Agora você já sabe que quando você executa o comando &lt;code&gt;java SuaClasse&lt;/code&gt;,
é o JRE que provê esse programa &lt;code&gt;java.exe&lt;/code&gt; que você está usando.&lt;/p&gt;
&lt;h2&gt;JDK - Kit de Desenvolvimento Java&lt;/h2&gt;
&lt;p&gt;O JDK é Kit que provê ferramentas para o desenvolvimento de programas Java.
Ou seja, ele contém um compilador, um depurador e o próprio JRE para você executar os seus programas.&lt;/p&gt;
&lt;p&gt;É o JDK que nos provê o programa &lt;code&gt;javac.exe&lt;/code&gt;, que compila códigos &lt;code&gt;.java&lt;/code&gt; em &lt;em&gt;bytecodes&lt;/em&gt; &lt;code&gt;.class&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Agora você já sabe q eu quando você executa o comando &lt;code&gt;javac SuaClasse.java&lt;/code&gt;,
é o JDK que provê esse programa &lt;code&gt;javac.exe&lt;/code&gt; que você está usando.&lt;/p&gt;
&lt;h2&gt;Uma visão geral&lt;/h2&gt;
&lt;p&gt;Agora que você já sabe um pouco mais sobre JDK, JRE e JVM,
você já deve ter percebido que a JDK traz também um JRE,
e o JRE, por sua vez, traz também uma implementação da JVM.&lt;/p&gt;
&lt;p&gt;A imagem abaixo ilustra a relação entre esses componentes.&lt;/p&gt;
&lt;p&gt;&lt;img alt="JDK, JRE e JVM" src="/images/qual-a-diferenca-entre-jdk-jre-e-jvm/jdk_jre_jvm.png" style="width: 100%; padding: 10px;"&gt;&lt;/p&gt;
&lt;p&gt;Espero que este post tenha sido esclarecedor para você
e que tenha contribuído um pouco com o seu aprendizado.&lt;/p&gt;
&lt;p&gt;Se tiver alguma dúvida, fique à vontade para postar aí nos comentários!&lt;/p&gt;
&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.java.com/pt_BR/download/faq/techinfo.xml" target="_blank"&gt;Java.com: TechInfo&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category></entry><entry><title>[Java] Como ler os bytes de um arquivo</title><link href="https://dicasdeprogramacao.com.br/java-como-ler-os-bytes-de-um-arquivo/" rel="alternate"></link><published>2019-01-11T00:00:00-02:00</published><updated>2019-01-11T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-01-11:/java-como-ler-os-bytes-de-um-arquivo/</id><summary type="html">&lt;p&gt;Quando você precisa ler os bytes de um arquivo em Java,
talvez venha à sua cabeça a criação de um &lt;code&gt;FileInputStream&lt;/code&gt; e um objeto &lt;code&gt;byte[]&lt;/code&gt;
para ler byte por byte do arquivo e adicioná-lo no array.&lt;/p&gt;
&lt;p&gt;Funciona, mas a partir …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quando você precisa ler os bytes de um arquivo em Java,
talvez venha à sua cabeça a criação de um &lt;code&gt;FileInputStream&lt;/code&gt; e um objeto &lt;code&gt;byte[]&lt;/code&gt;
para ler byte por byte do arquivo e adicioná-lo no array.&lt;/p&gt;
&lt;p&gt;Funciona, mas a partir do &lt;strong&gt;Java 7&lt;/strong&gt; é possível fazer isso de forma muito mais simples
através do método estático &lt;code&gt;readAllBytes&lt;/code&gt; da classe &lt;code&gt;java.nio.file.Files&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Para isso só precisamos do objeto &lt;code&gt;Path&lt;/code&gt; do arquivo.
Se você já tiver o objeto &lt;code&gt;File&lt;/code&gt; que representa o seu arquivo,
basta obter o objeto &lt;code&gt;Path&lt;/code&gt; pelo método &lt;code&gt;toPath()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Confuso? Não tem segredo, veja o exemplo abaixo pra você entender melhor.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.File&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.UnsupportedEncodingException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Files&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UnsupportedEncodingException&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;arquivo.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readAllBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toPath&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/java-como-converter-um-array-de-bytes-em-string/" target="_blank"&gt;&lt;strong&gt;VEJA TAMBÉM ~&amp;gt; [Java] Como converter um array de bytes em String&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Perceba que em uma apenas linha nós conseguimos ler os bytes do arquivo, sem precisar criar Streaming nenhum.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readAllBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toPath&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para testar, eu criei um arquivo &lt;code&gt;arquivo.txt&lt;/code&gt; com o conteúdo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;arquivo de teste para leitura no java.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ao executar o nosso código java de exemplo, obtemos o seguinte resultado.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de leitura de bytes de um arquivo em java" src="/images/java-como-ler-os-bytes-de-um-arquivo/exemplo-ler-bytes-de-arquivo-java.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Gostou? Alguma dúvida? Utilize a área de comentários aqui em baixo.&lt;/p&gt;
&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html" target="_blank"&gt;Javadoc: java.nio.file.Files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/io/File.html" target="_blank"&gt;Javadoc: java.io.File&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java 7"></category><category term="Arquivo"></category><category term="bytes"></category></entry><entry><title>[Java] Como converter um array de bytes em String</title><link href="https://dicasdeprogramacao.com.br/java-como-converter-um-array-de-bytes-em-string/" rel="alternate"></link><published>2019-01-10T00:00:00-02:00</published><updated>2019-01-10T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-01-10:/java-como-converter-um-array-de-bytes-em-string/</id><summary type="html">&lt;p&gt;Você tem um array de bytes (&lt;code&gt;byte[]&lt;/code&gt;) com você e precisa transformá-lo em texto?&lt;/p&gt;
&lt;p&gt;Primeiro você precisa saber em qual &lt;em&gt;encoding&lt;/em&gt; esse array de bytes se encontra.
O mais comum é que seja &lt;strong&gt;UTF-8&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Neste caso a única coisa que …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Você tem um array de bytes (&lt;code&gt;byte[]&lt;/code&gt;) com você e precisa transformá-lo em texto?&lt;/p&gt;
&lt;p&gt;Primeiro você precisa saber em qual &lt;em&gt;encoding&lt;/em&gt; esse array de bytes se encontra.
O mais comum é que seja &lt;strong&gt;UTF-8&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Neste caso a única coisa que você precisa fazer é criar um objeto
String passando o array de bytes e o encoding utilizado (UTF-8).
Veja o exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.UnsupportedEncodingException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BytesParaString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UnsupportedEncodingException&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;111&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;115&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que é necessário capturar a exception &lt;code&gt;UnsupportedEncodingException&lt;/code&gt; quando chamamos este construtor da classe String.&lt;/p&gt;
&lt;p&gt;O array de bytes &lt;code&gt;116, 101, 120, 116, 111, 32, 116, 101, 115, 116, 101&lt;/code&gt; representa o texto &lt;code&gt;texto teste&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Logo, ao executarmos este código obtemos a sequinte saída:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de conversão de bytes para string em java" src="/images/java-como-converter-um-array-de-bytes-em-string/exemplo-bytes-para-string.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Gostou? Alguma dúvida? Utilize a área de comentários aqui em baixo.&lt;/p&gt;
&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_blank"&gt;Javadoc: java.lang.String&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="String"></category><category term="bytes"></category></entry><entry><title>Como validar um CPF em JavaScript</title><link href="https://dicasdeprogramacao.com.br/como-validar-um-cpf-em-javascript/" rel="alternate"></link><published>2019-01-07T00:00:00-02:00</published><updated>2019-01-07T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2019-01-07:/como-validar-um-cpf-em-javascript/</id><summary type="html">&lt;p&gt;Nos últimos anos a forma de &lt;strong&gt;validar CPF&lt;/strong&gt; vem mudando, portanto, com
todas as mudanças notadas, podemos perceber que os códigos usados
até então, estão meio que obsoletos.&lt;/p&gt;
&lt;p&gt;E para que isso seja possível é preciso encontrar uma forma mais …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Nos últimos anos a forma de &lt;strong&gt;validar CPF&lt;/strong&gt; vem mudando, portanto, com
todas as mudanças notadas, podemos perceber que os códigos usados
até então, estão meio que obsoletos.&lt;/p&gt;
&lt;p&gt;E para que isso seja possível é preciso encontrar uma forma mais
simples e fácil. Com um gerador de CPF todo o processo vai ser
garantido e fácil, já que isso vem se tornando uma necessidade.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Validação de CPF" class="aligncenter" src="/images/como-validar-um-cpf-em-javascript/destaque.png"&gt;&lt;/p&gt;
&lt;h2&gt;Validar CPF&lt;/h2&gt;
&lt;p&gt;A validação do CPF através de um gerador de CPF é uma forma que
está se tornando um hábito bastante usado nos dias atuais. Isso se dá
muito devido os sistemas estarem cada vez mais complexos visando a
fazer com que as pessoas coloquem suas informações pessoais.&lt;/p&gt;
&lt;p&gt;Hoje no país, o CPF é talvez o principal documento de uma pessoa
física, já que o mesmo significa o Cadastro de Pessoa Física. É através
dele que a Receita Federal pode localizar todos os contribuintes do
país.&lt;/p&gt;
&lt;p&gt;E para que você tenha seu CPF validado, o mesmo é feito através de
uma ferramenta que faz uso de algoritmo em javascript. Geralmente
este tipo de ferramenta é utilizada para que se faça testes de softwares
através do site &lt;a href="https://ogeradordecpf.com.br/" target="_blank"&gt;O Gerador de CPF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A criação de software para a internet se depara muitas vezes com
alguns campos aos quais exigem que coloque um CPF válido, isso é
certo.&lt;/p&gt;
&lt;p&gt;E é justamente aí que surgem as dúvidas mais frequentes em relação a
validar um número de CPF, ou seja, como todo esse processo é feito.&lt;/p&gt;
&lt;p&gt;De uma forma geral você poderá até mascarar o CPF para que o
mesmo possa participar de testes que são fundamentais para que os
softwares possam ser bem desenvolvidos.&lt;/p&gt;
&lt;p&gt;E partir da ferramenta que estamos colocando à disposição de todos
aqui que é validar CPF, podemos ajudar a quem precisa desenvolver
softwares de qualidade para testes.&lt;/p&gt;
&lt;p&gt;Através da criação de um conjunto de códigos de JavaScript, foi
possível criar um algoritmo que propõe uma ferramenta de fácil uso para
todo e qualquer programador.&lt;/p&gt;
&lt;p&gt;Veja este &lt;a href="https://codepen.io/ogeradordecpf/pen/OaMvwq" target="_blank"&gt;Codepen com o código em JS&lt;/a&gt; empregado no site
anteriormente indicado.&lt;/p&gt;
&lt;h2&gt;E qual o principal o objetivo da ferramenta?&lt;/h2&gt;
&lt;p&gt;Tendo como principal objetivo, a ferramenta para validar CPF faz com
que CPFs não reais possam ser usados nos testes. Criando números de
pessoas que não são reais, sendo assim, cada número criado não
precisa necessariamente estar cadastrado no Cadastro de Pessoa
Física na Receita Federal.&lt;/p&gt;
&lt;p&gt;Mas, é preciso que todos os programadores estejam sempre atentos
para qual tipo de linguagem de programação serão usadas. É dito isso,
devido o CPF usado para os testes, dependendo da plataforma em
desenvolvimento poderá variar dependendo da linguagem usada.&lt;/p&gt;
&lt;p&gt;Validar o CPF é uma forma encontrada e utilizada para que
programadores possam ter mais facilidade na hora de testar seus
softwares para que os mesmos possam ser desenvolvidos da melhor
forma possível.&lt;/p&gt;
&lt;p&gt;Não podemos esquecer de lembrar sempre que a ferramenta colocada
à disposição acima, é uma ferramenta com limitações, ou seja, a
mesma foi criada apenas para os testes de softwares.&lt;/p&gt;
&lt;p&gt;Caso algum usuário da mesma fizer mau uso da mesma, a
responsabilidade é inteira do usuário.&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="Blogs"></category></entry><entry><title>Python: Como copiar um array/list de forma segura (Explicação completa)</title><link href="https://dicasdeprogramacao.com.br/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/" rel="alternate"></link><published>2018-11-15T00:00:00-02:00</published><updated>2018-11-15T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-11-15:/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/</id><summary type="html">&lt;p&gt;Muito cuidado quando for copiar um array/list em python, pois você pode provocar um grande problema no seu código.&lt;/p&gt;
&lt;p&gt;Se você simplesmente copiar atribuir a variável de um array para outra variável,
as alterações que você fizer na segunda …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Muito cuidado quando for copiar um array/list em python, pois você pode provocar um grande problema no seu código.&lt;/p&gt;
&lt;p&gt;Se você simplesmente copiar atribuir a variável de um array para outra variável,
as alterações que você fizer na segunda variável serão realizadas também na primeira.
Veja um exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Você, pode até achar que alterou só o array da variável &lt;code&gt;b&lt;/code&gt;,
mas na verdade o array da variável &lt;code&gt;a&lt;/code&gt; também foi alterado.
Veja a execução desse código imprimindo o valor das variáveis &lt;code&gt;a&lt;/code&gt; e &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Copiando array de forma insegura" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copiando-mesmo-array.gif" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Perceba que a alteração no array da variável &lt;code&gt;b&lt;/code&gt; (&lt;code&gt;b[0] = 4&lt;/code&gt;)
teve impacto também no array da variável &lt;code&gt;a&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Existe várias formas de copiar um array de forma segura em python, onde a alteração em um não impacta no outro
e eu vou mostrar 5 delas mais a frente.&lt;/p&gt;
&lt;p&gt;Mas se quiser uma resposta rápida sobre como fazer essa cópia basta usar a função &lt;code&gt;copy()&lt;/code&gt; do array, assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entretanto acho que você merece uma explicação mais aprofundada sobre o que acontece por baixo dos panos.&lt;/p&gt;
&lt;h2&gt;O que acontece por baixo dos panos&lt;/h2&gt;
&lt;p&gt;Vamos pegar o nosso exemplo acima para entender o que acontece quando criamos um array.&lt;/p&gt;
&lt;p&gt;Quando criamos um array e atribuimos à uma variável, por exemplo &lt;code&gt;a = [1,2,3]&lt;/code&gt;,
o python cria um objeto na memória e atribui o endereço desse objeto à variável.
Pensa em algo assim:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Criação de objeto array e atribuição de endereço à variável a" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/objeto-array-endereco-variavel.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Quando copiamos uma variável para outra, o que estamos copiando é o valor da variável, nesse caso o endereço.&lt;/p&gt;
&lt;p&gt;Então, quando fazemo a atribuição &lt;code&gt;b = a&lt;/code&gt;, estamos copiando o valor da variável &lt;code&gt;a&lt;/code&gt; para a variável &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mais ou menos assim.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Copiando o endereço de um array para outra variável" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copia-endereco-para-outra-variavel.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Ou seja, &lt;strong&gt;copiamos endereço para o mesmo objeto array&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Isso significa que se fizermos uma alteração no objeto array em qualquer uma das variáveis,
estaremos alterando o mesmo objeto. Por isso acontece o exemplo que mostrei no inicio.&lt;/p&gt;
&lt;p&gt;Então, o que precisamos fazer é uma cópia do objeto array e atribuir o endereço desse novo objeto para a outra variável.
Mais ou menos assim:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Copiando o objeto array e atribuindo o novo endereço a outra variável" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copiando-objeto-array.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Dessa forma as alterações feitas no objeto de uma das variáveis não impacta o outro objeto.&lt;/p&gt;
&lt;p&gt;Existem várias formas de fazer isso, como o método &lt;code&gt;copy()&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;4 formas de copiar um objeto array&lt;/h2&gt;
&lt;p&gt;Como já disse a forma mais simples de copiar um objeto array é através do método &lt;code&gt;copy&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;1 - Método &lt;em&gt;copy()&lt;/em&gt; da classe Array&lt;/h3&gt;
&lt;p&gt;Perceba no exemplo abaixo que fizemos a cópia do objeto array da variável &lt;code&gt;a&lt;/code&gt; e atribuimos esse novo objeto à variável &lt;code&gt;b&lt;/code&gt; (&lt;code&gt;b = a.copy()&lt;/code&gt;) e alteração &lt;code&gt;b[0] = 4&lt;/code&gt; não alterou o array de &lt;code&gt;a&lt;/code&gt;, somente o array de &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Copiando o objeto array e atribuindo o novo endereço a outra variável" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copiando-array-metodo-copy.gif" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;2 - Fazendo um filtro trazendo todos os itens de um array com [:]&lt;/h3&gt;
&lt;p&gt;Uma outra ideia é fazer um filtro no array original trazendo todos os registros assim: &lt;code&gt;b = a[:]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Isso cria um outro objeto array com o resultado do filtro, que nesse caso é &lt;em&gt;todos os registros&lt;/em&gt;.
Veja:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Copiando o objeto array através do filtro [:]" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copiando-array-atraves-de-filtro.gif" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;3 - Utilizando o construtor _list(&lt;list&gt;)&lt;/h3&gt;
&lt;p&gt;Neste post estou chamando &lt;em&gt;list&lt;/em&gt; do python de array para manter a linguagem comum com outras linguagens de programação,
visto que o modo literal com colchetes (exemplo [1,2,3]) cria um objeto do tipo &lt;em&gt;list&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Mas em python um objeto &lt;em&gt;array&lt;/em&gt; é um pouco diferente de um objeto &lt;em&gt;list&lt;/em&gt;.
Vou aprofundar na diferença entre eles em outro post.&lt;/p&gt;
&lt;p&gt;Agora que você descobriu que o que vc achava que era um &lt;em&gt;array&lt;/em&gt; na verdade é um objeto &lt;em&gt;list&lt;/em&gt; (=P),
você pode criar um novo objeto utilizando o construtor da classe &lt;em&gt;list&lt;/em&gt; passando o objeto atual como parâmetro.
Ou seja &lt;code&gt;b = list(a)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja o resultado, vou aproveitar o gif pra mostrar o resultado de &lt;code&gt;type([1,2,3])&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Copiando o objeto array com o construtor list(&amp;lt;list&amp;gt;)" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copiando-array-com-construtor-list.gif" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;4 - Utilizando a biblioteca &lt;em&gt;copy&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Por fim, também podemos importar o pacote &lt;code&gt;copy&lt;/code&gt; e utilizar a função também de nome &lt;code&gt;copy&lt;/code&gt;. Assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;copy&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O resultado é o mesmo, ou seja, copiamos o objeto &lt;em&gt;list&lt;/em&gt; e não só o valor da variável &lt;code&gt;a&lt;/code&gt;. Veja:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Copiando o objeto array com o método copy.copy()" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copiando-array-com-metodo-copy.gif" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Copia profunda em array de objetos&lt;/h2&gt;
&lt;p&gt;Até agora nós falamos de arrays simples de tipos primitivos criando arrays de números inteiros.&lt;/p&gt;
&lt;p&gt;Entretanto também podemos criar arrays de objetos, na verdade de endereços de outros objetos ;).&lt;/p&gt;
&lt;p&gt;Talvez você já tenha captado o problema em fazer uma cópia simples de um array desse tipo,
mas se não pegou o problema eu explico. Dê uma olhada na imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Mapeamento de memória de um array de objetos" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copiando-objeto-array-de-objetos.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Quando copiamos um array das 4 formas como falamos acima, nós estamos copiando o objeto array,
mas se tivermos um array de objetos (endereços para outros objetos), os objetos apontados de dentro do array não são copiados.&lt;/p&gt;
&lt;p&gt;Aí a gente cai no mesmo problema do início, mas em um nível mais baixo.&lt;/p&gt;
&lt;p&gt;Veja por exemplo o código abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;X&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Neste ponto, nós criamos três objetos da classe X e um objeto &lt;em&gt;list&lt;/em&gt; e apontamos a variável &lt;code&gt;a&lt;/code&gt; para o objeto &lt;em&gt;list&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;O que acontece se executarmos o código abaixo?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Exatamente! Alteramos o valor da variável &lt;code&gt;y&lt;/code&gt; do mesmo objeto que é apontado por &lt;code&gt;a[0]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Mapeamento de memória de um array de objetos" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copia-objeto-array-com-mesmos-objetos.gif" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Perceba no final do gif que ao imprimir os objetos &lt;code&gt;a&lt;/code&gt; e &lt;code&gt;b&lt;/code&gt; os valores dos arrays (endereços de memória) são os mesmos.
Ou seja, os mesmos objetos, igual a imagem acima.&lt;/p&gt;
&lt;p&gt;Se quisermos que os objetos dos arrays também sejam copiados e assim por diante (se for array de arrays de arrays, ...),
ou seja uma &lt;strong&gt;cópia profunda&lt;/strong&gt;, temos que usar a função &lt;code&gt;copy.deepcopy(&amp;lt;list&amp;gt;)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Claro que esse método custa mais processamento, mas ao final teremos um array completamente copiado de forma segura.
Assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;copy&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deepcopy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja o exemplo:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de cópia profunda de array com python" src="/images/python-como-copiar-um-arraylist-de-forma-segura-explicacao-completa/copy-deepcopy.gif" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Viu, perceba que o endereço dos objetos internos mudam! Por isso a alteração na variável do objeto &lt;code&gt;b[0].y&lt;/code&gt;
não afetou a variável do objeto &lt;code&gt;a[0].y&lt;/code&gt;, pois &lt;code&gt;a[0]&lt;/code&gt; e &lt;code&gt;b[0]&lt;/code&gt; agora apontam para objetos diferentes!&lt;/p&gt;
&lt;p&gt;Espero que essa explicação tenha expandido um pouco o seu entendimento sobre orientação a objetos.&lt;/p&gt;
&lt;p&gt;Esse comportamento é mais ou menos o mesmo em outras linguagens ditas &lt;em&gt;orientadas a objetos&lt;/em&gt; como java, javascript, php, etc.&lt;/p&gt;
&lt;p&gt;Comente aí em baixo se tiver alguma dúvida, dica, elogio ou sugestões!&lt;/p&gt;
&lt;p&gt;Até a próxima!&lt;/p&gt;
&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/copy.html" target="_blank"&gt;Doc: copy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/array.html" target="_blank"&gt;Doc: array&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/tutorial/datastructures.html#more-on-lists" target="_blank"&gt;Doc: list&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python"></category><category term="array"></category></entry><entry><title>Python: Como acessar os atributos de objeto da mesma forma como em um dicionário.</title><link href="https://dicasdeprogramacao.com.br/python-como-acessar-os-atributos-de-objeto-da-mesma-forma-como-em-um-dicionario/" rel="alternate"></link><published>2018-11-14T00:00:00-02:00</published><updated>2018-11-14T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-11-14:/python-como-acessar-os-atributos-de-objeto-da-mesma-forma-como-em-um-dicionario/</id><summary type="html">&lt;p&gt;Se você já trabalhou com dicionários em python, provavelmente já acessou seus atributos através de strings entre colchetes. Por exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Isso resulta na saída abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Acessando o atributo de um dicionário com colchetes em python" src="/images/python-como-acessar-os-atributos-de-objeto-da-mesma-forma-como-em-um-dicionario/acessando-atributo-dict.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Ou seja, sem problemas, com &lt;em&gt;dict&lt;/em&gt; nós conseguimos acessar um …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Se você já trabalhou com dicionários em python, provavelmente já acessou seus atributos através de strings entre colchetes. Por exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Isso resulta na saída abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Acessando o atributo de um dicionário com colchetes em python" src="/images/python-como-acessar-os-atributos-de-objeto-da-mesma-forma-como-em-um-dicionario/acessando-atributo-dict.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Ou seja, sem problemas, com &lt;em&gt;dict&lt;/em&gt; nós conseguimos acessar um atributo através dos colchetes, passando o nome do atributo como string, assim: &lt;code&gt;t['a']&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Mas esta forma de acesso não funciona para objetos ou seja, instancias de classes. Veja o exemplo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Teste&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nós conseguimos acessar o atributo &lt;code&gt;a&lt;/code&gt; através do ponto &lt;code&gt;t.a&lt;/code&gt;, mas não conseguimos através dos colchetes &lt;code&gt;t['a']&lt;/code&gt;.
Acontece o erro &lt;code&gt;object is not subscriptable&lt;/code&gt;, como podemos ver na imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Erro ao acessar atributo de uma classe com colchetes em python" src="/images/python-como-acessar-os-atributos-de-objeto-da-mesma-forma-como-em-um-dicionario/erro-ao-acessar-atributo-de-objecto-colchetes.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Isso implica que não conseguimos acessar um atributo de um object dinamicamente utilizando colchetes. 
Mas tem solução!&lt;/p&gt;
&lt;h2&gt;Como acessar atributos de um objeto através de strings&lt;/h2&gt;
&lt;p&gt;Se tivermos uma string com o nome do atributo do objeto, conseguimos acessar esse atributo através da função &lt;code&gt;getattr&lt;/code&gt; nativa do python.&lt;/p&gt;
&lt;p&gt;Essa função tem o mesmo efeito que os colchetes nos dicionários.&lt;/p&gt;
&lt;p&gt;O exemplo abaixo mostra como utilizar a &lt;code&gt;getattr&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Teste&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="nb"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja este exemplo funcionando na prática.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de utilização da função getattr para obter o atributo de um objeto através de uma string" src="/images/python-como-acessar-os-atributos-de-objeto-da-mesma-forma-como-em-um-dicionario/exemplo-getattr.gif" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Como alterar atributos de um objeto através de strings&lt;/h2&gt;
&lt;p&gt;Também conseguimos alterar o valor do atributo, mas aí precisamos usar a função &lt;code&gt;setattr&lt;/code&gt;,
passando o novo valor do atributo como terceiro parâmetro. Assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Teste&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="nb"&gt;setattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja este exemplo funcionando na prática.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de utilização da função setattr para alterar o atributo de um objeto através de uma string" src="/images/python-como-acessar-os-atributos-de-objeto-da-mesma-forma-como-em-um-dicionario/exemplo-setattr.gif" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;E aí, gostou da dica? Se tiver alguma dúvida poste aí nos comentários!&lt;/p&gt;
&lt;h1&gt;Referências&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/functions.html#getattr" target="_blank"&gt;Doc: getattr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/functions.html#setattr" target="_blank"&gt;Doc: setattr&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="dict"></category><category term="object"></category></entry><entry><title>Instalação do NodeJS e npm no Windows (Passo a passo!)</title><link href="https://dicasdeprogramacao.com.br/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/" rel="alternate"></link><published>2018-11-01T00:00:00-03:00</published><updated>2018-11-01T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-11-01:/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/</id><summary type="html">&lt;p&gt;Para instalar o nodejs e o npm no Windows, primeiro você precisa acessar a página de downloads do
&lt;a href="https://nodejs.org/en/download/current/" target="_blank"&gt;&lt;strong&gt;site oficial&lt;/strong&gt;&lt;/a&gt;
para baixar o instalador.&lt;/p&gt;
&lt;p&gt;Geralmente tem duas versões a LTS que tem suporte de longo prazo e a Current que …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para instalar o nodejs e o npm no Windows, primeiro você precisa acessar a página de downloads do
&lt;a href="https://nodejs.org/en/download/current/" target="_blank"&gt;&lt;strong&gt;site oficial&lt;/strong&gt;&lt;/a&gt;
para baixar o instalador.&lt;/p&gt;
&lt;p&gt;Geralmente tem duas versões a LTS que tem suporte de longo prazo e a Current que é a última versão.
Neste momento a versão LTS é a &lt;strong&gt;10.13.0&lt;/strong&gt; (com npm 6.4.1) e a última versão é a &lt;strong&gt;11.0.0&lt;/strong&gt; (com npm 6.4.1).&lt;/p&gt;
&lt;p&gt;&lt;img alt="Página de download do NodeJS e npm" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/pagina-de-download-nodejs.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Escolha a versão de sua preferência e baixe o instalador para o seu sistema operacional,
no meu caso é o Windows 64 bits.&lt;/p&gt;
&lt;p&gt;Após baixar, exercute o instalador.&lt;/p&gt;
&lt;p&gt;A primeira tela do instalador do NodeJs apresenta uma mensagem de boas vindas do instalador
informando que será instalado o Node.js no seu computador, basta clicar em &lt;strong&gt;Next&lt;/strong&gt; para continuar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador NodeJS - Tela de boas vindas" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/instalador-nodejs-01-tela-boas-vindas.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A segunda tela do instalador do NodeJs pede para ler a licença de uso e aceitar os termos.
Se você concordar com os termos, marque a caixinha &lt;strong&gt;I accept ...&lt;/strong&gt; e clique em &lt;strong&gt;Next&lt;/strong&gt; para continuar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador NodeJS - Termos de uso" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/instalador-nodejs-02-termos-de-uso.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A tela seguinte oferece a opção de alterar a pasta onde o NodeJS será instalado, escolha o local da instalação e clique em &lt;strong&gt;Next&lt;/strong&gt; para continuar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador NodeJS - local da instalação" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/instalador-nodejs-03-local-da-instalacao.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Em seguida o instalador permite personalizar algumas opções da instalação como adicionar ou não o caminho do node e npm na variável PATH, etc.
Eu deixo todas as opções marcadas. Clique em &lt;strong&gt;Next&lt;/strong&gt; para continuar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador NodeJS - Personalização" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/instalador-nodejs-04-personalizar-instalacao.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Na sequência o instalador pergunta se queremos instalar as ferramentas necessárias para compilar módulos nativos.
Se você marcar a caixinha para instalar essas ferramentas, o instalador vai iniciar outra janela para instalar essas ferramentas.
Eu marquei, escolha se você deseja essa opção e Clique em &lt;strong&gt;Next&lt;/strong&gt; para continuar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador NodeJS - Módulos Nativos" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/instalador-nodejs-05-ferramenta-compilacao-modulos-nativos.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Pronto! Agora basta clicar em &lt;strong&gt;Install&lt;/strong&gt; para iniciar a instalação.
O Windows vai pedir permissão de administrador para instalar o NodeJS.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador NodeJS - Finalização" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/instalador-nodejs-06-Install.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Terminada a instalação clique em &lt;strong&gt;Finish&lt;/strong&gt; e pronto.&lt;/p&gt;
&lt;p&gt;Se você marcou a opção de instalar as ferramentas de compilação, neste momento será executado como a imagem abaixo,
um script para instalar o python 2.7, o Visual Studio Build Tools, o Chocolatey e atualizações do Windows que forem necessárias.&lt;/p&gt;
&lt;p&gt;Se quiser desistir de instalar estas ferramentas basta fechar a janela, caso contrário basta pressionar ENTER.&lt;/p&gt;
&lt;p&gt;Se você optar pela instalação dessas ferramentas, tudo será baixado e instalado automaticamente.
Você só precisará dar permissão de administrador para o instalador.&lt;/p&gt;
&lt;p&gt;Para verificar se o node e o npm foi instalado corretamente,
basta executar &lt;code&gt;node --version&lt;/code&gt; e &lt;code&gt;npm --version&lt;/code&gt; na linha de comando conforme a imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Verificação da instalaçãõ do NodeJS e NPM" src="/images/instalacao-do-nodejs-e-npm-no-windows-passo-a-passo/verificacao-instalacao-node-npm-windows.png" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Se tiver alguma dúvida sobre a instalação do NodeJS e do NPM,
fique avontade para postar aí nos comentários.&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="instalação"></category><category term="windows"></category><category term="nodejs"></category><category term="npm"></category></entry><entry><title>Como instalar o python no Windows 10</title><link href="https://dicasdeprogramacao.com.br/como-instalar-o-python-no-windows-10/" rel="alternate"></link><published>2018-10-23T00:00:00-03:00</published><updated>2018-10-23T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-10-23:/como-instalar-o-python-no-windows-10/</id><summary type="html">&lt;p&gt;A instalação do python no Windows 10 é uma das mais simples que já vi.&lt;/p&gt;
&lt;p&gt;Para instalar o python 3.7 no Windows,
primeiro você precisa acessar a &lt;a href="https://www.python.org/downloads/" target="_blank"&gt;página de download do python&lt;/a&gt;,
clicar no botão &lt;strong&gt;Download Python 3.7 …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;A instalação do python no Windows 10 é uma das mais simples que já vi.&lt;/p&gt;
&lt;p&gt;Para instalar o python 3.7 no Windows,
primeiro você precisa acessar a &lt;a href="https://www.python.org/downloads/" target="_blank"&gt;página de download do python&lt;/a&gt;,
clicar no botão &lt;strong&gt;Download Python 3.7.1&lt;/strong&gt; para baixar o instalador.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Página de download do instalador do Python" src="/images/como-instalar-o-python-no-windows-10/pagina-de-download-do-python.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Em seguida, você precisa executar o instalador baixado.&lt;/p&gt;
&lt;p&gt;A primeira tela do instalador, nos oferece a opção de adicionar o python 3.7 na variável de ambiente &lt;strong&gt;PATH&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Marcar essa opção significa que o comando &lt;code&gt;python&lt;/code&gt; poderá ser
executado pela linha de comandos.
Eu já marco essa caixa de seleção para eu não precisar configurar
a variável de ambiente manualmente depois.&lt;/p&gt;
&lt;p&gt;Após marcar (ou não) essa opção você pode escolher entre
a instalação personalizada, onde você poderá escolher
quais ferramentas você deseja instalar, ou a opção &lt;strong&gt;Install Now&lt;/strong&gt;,
que instala todas as ferramentas, incluindo a IDE &lt;strong&gt;IDLE&lt;/strong&gt; e o &lt;strong&gt;pip&lt;/strong&gt;, uma ferramenta de instalação de dependências do python.&lt;/p&gt;
&lt;p&gt;Indico a opção &lt;strong&gt;Install Now&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador do Python - seleção do tipo de instalação" src="/images/como-instalar-o-python-no-windows-10/instalador-python-01-selecao-do-tipo-de-instalacao.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Pronto! Após clicar em &lt;strong&gt;Install Now&lt;/strong&gt; o python será instalado no seu computador.
O instalador pedirá privilégios de administrador para realizar a instalação..&lt;/p&gt;
&lt;p&gt;Após a instalação concluir, basta clicar no botão &lt;strong&gt;Close&lt;/strong&gt; e acabou!
O python 3.7 já estará instalado no seu Windows.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Instalador do Python - tela de conclusão da instalação" src="/images/como-instalar-o-python-no-windows-10/instalador-python-02-conclusao-da-instalacao.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Mais fácil impossível!&lt;/p&gt;
&lt;p&gt;Agora vamos verificar se tudo correu bem e o seu python foi instalado corretamente.&lt;/p&gt;
&lt;p&gt;Abra o &lt;strong&gt;menu iniciar&lt;/strong&gt; e digite &lt;code&gt;cmd&lt;/code&gt; e execute o &lt;strong&gt;Prompt de comando&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Menu iniciar - cmd" src="/images/como-instalar-o-python-no-windows-10/menu-iniciar-cmd.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;No prompt de comando digite &lt;code&gt;python&lt;/code&gt; e tecle &lt;strong&gt;ENTER&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Se a sua instalação do python deu certo e você marcou a opção de adicionar o python no &lt;strong&gt;PATH&lt;/strong&gt; como eu sugeri,
o prompt do python será aberto apresentando tres caracteres &lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt; indicando que você já pode executar comandos python.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Prompt do python" src="/images/como-instalar-o-python-no-windows-10/prompt-python.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Obs: para sair do prompt do python, basta digitar o comando &lt;code&gt;exit()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Qualquer dúvida, poste aí nos comentários!&lt;/p&gt;</content><category term=": Dicas de Python :"></category><category term="python"></category><category term="instalação"></category><category term="windows"></category></entry><entry><title>Como configurar o lombok no Eclipse</title><link href="https://dicasdeprogramacao.com.br/como-configurar-o-lombok-no-eclipse/" rel="alternate"></link><published>2018-09-27T00:00:00-03:00</published><updated>2018-09-27T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-09-27:/como-configurar-o-lombok-no-eclipse/</id><summary type="html">&lt;p&gt;Como já comentamos &lt;a href="https://dicasdeprogramacao.com.br/como-configurar-o-lombok-no-intellij-idea/"&gt;aqui&lt;/a&gt;,
o Lombok facilita muito o desenvolvimento de códigos java, minimizando a quantidade de código necessário no seu projeto.&lt;/p&gt;
&lt;p&gt;O Lombok atua no processo de compilação do seu código adicionando códigos automaticamente. Tirando de você a necessidade …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Como já comentamos &lt;a href="https://dicasdeprogramacao.com.br/como-configurar-o-lombok-no-intellij-idea/"&gt;aqui&lt;/a&gt;,
o Lombok facilita muito o desenvolvimento de códigos java, minimizando a quantidade de código necessário no seu projeto.&lt;/p&gt;
&lt;p&gt;O Lombok atua no processo de compilação do seu código adicionando códigos automaticamente. Tirando de você a necessidade de escrever alguns códigos como por exemplo os métodos GET, SET, hashcode, equals etc.&lt;/p&gt;
&lt;p&gt;Se você usa o Eclipse como ambiente de desenvolvimento e quer usar o Lombok no seu projeto, o que você precisa fazer é ...&lt;/p&gt;
&lt;h2&gt;1. Baixar o jar do Lombok&lt;/h2&gt;
&lt;p&gt;Você pode baixar o jar do Lombok diretamente do site do Projeto Lombok,
mas esse aqui é um link direto para baixar o arquivo jar do Lombok.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://projectlombok.org/downloads/lombok.jar" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Clique AQUI para baixar o lombok.jar&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;2. Executar o jar do Lombok&lt;/h2&gt;
&lt;p&gt;Para executar o Lombok basta dar "dois cliques" no arquivo ou, se você preferir, você pode usar o seguinte comando no prompt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;java -jar lombok.jar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="executar lombok.jar" src="/images/como-configurar-o-lombok-no-eclipse/executar-lombok.jar.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;3. Selecionar o local onde está o eclipse&lt;/h2&gt;
&lt;p&gt;Como você pode ver no gif acima, após executar o &lt;code&gt;lombok.jar&lt;/code&gt;, aparece uma tela do instalador do Lombok e a primeira coisa que ele faz é scanear o seu sistema operacional para tentar encontrar "eclipses". No meu caso ele encontrou uma pasta onde tem um eclipse.&lt;/p&gt;
&lt;p&gt;Mas se o seu eclipse não for encontrado pelo instalador do Lombok, você pode clicar em &lt;code&gt;Specify location...&lt;/code&gt; e selecionar a pasta onde está o seu eclipse.&lt;/p&gt;
&lt;h2&gt;4. Instalar o Lombok no eclipse&lt;/h2&gt;
&lt;p&gt;Com a pasta do seu eclipse selecionada (você pode selecionar mais de uma), basta clicar no botão &lt;code&gt;Install / Update&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="instalar o lombok no eclipse" src="/images/como-configurar-o-lombok-no-eclipse/instalar-lombok-no-eclipse.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;5. Reiniciar o eclipse&lt;/h2&gt;
&lt;p&gt;Agora você precisa fechar (se estiver aberto) e abrir o eclipse novamente.&lt;/p&gt;
&lt;h2&gt;6. Adicionar o Lombok como dependência do seu projeto.&lt;/h2&gt;
&lt;p&gt;Por fim, você deve adicionar o jar do lombok no seu projeto.
Se você estiver utilizando o maven, basta adicionar o código abaixo no bloco &lt;code&gt;&amp;lt;dependencies&amp;gt;&lt;/code&gt; do seu &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.projectlombok&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;lombok&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.18.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;7. Rebuild do seu projeto.&lt;/h2&gt;
&lt;p&gt;Se o build não estiver automático no seu eclipse, você precisa fazer o rebuild. Atalho: &lt;code&gt;Ctrl+B&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pronto, seu eclipse está apto a funcionar com o Lombok.&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://projectlombok.org/setup/eclipse" target="_blank"&gt;ProjectLombok: Eclipse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://projectlombok.org/downloads/lombok.jar" target="_blank"&gt;Download do Lombok&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="instalar"></category><category term="lombok"></category><category term="Eclipse"></category></entry><entry><title>Como ordenar um map pelos valores com Java 8+</title><link href="https://dicasdeprogramacao.com.br/como-ordenar-um-map-pelos-valores-com-java-8/" rel="alternate"></link><published>2018-09-26T00:00:00-03:00</published><updated>2018-09-26T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-09-26:/como-ordenar-um-map-pelos-valores-com-java-8/</id><summary type="html">&lt;p&gt;O &lt;strong&gt;Java 8&lt;/strong&gt; trouxe muitas coisas úteis para o desenvolvento Java.
Neste post vamos ver uma forma elegante de ordenar um Map pelos valores usando o &lt;code&gt;stream&lt;/code&gt;,
uma das funcionalidades introduzidas com o Java 8.&lt;/p&gt;
&lt;p&gt;Primeiro, vamos criar um &lt;code&gt;Map …&lt;/code&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;O &lt;strong&gt;Java 8&lt;/strong&gt; trouxe muitas coisas úteis para o desenvolvento Java.
Neste post vamos ver uma forma elegante de ordenar um Map pelos valores usando o &lt;code&gt;stream&lt;/code&gt;,
uma das funcionalidades introduzidas com o Java 8.&lt;/p&gt;
&lt;p&gt;Primeiro, vamos criar um &lt;code&gt;Map&lt;/code&gt; de exemplo com a população do Brasil por estado, em uma ordem aleatória.&lt;/p&gt;
&lt;p&gt;No código abaixo nós criamos um método que retorna o Map com a população do Brasil por estado.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getPopulacaoPorEstado&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Santa Catarina&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7075494&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Rio Grande do Sul&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11329605&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Mato Grosso do Sul&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2748023&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tocantins&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1555229&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Roraima&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;576568&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Minas Gerais&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21040662&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;São Paulo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;45538936&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maranhão&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7035055&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Rio de Janeiro&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17159960&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ceará&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9075649&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Acre&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;869265&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Paraíba&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3996496&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Alagoas&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3322820&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Piauí&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3264531&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Pernambuco&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9496294&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Rio Grande do Norte&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3479010&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Amapá&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;829494&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Pará&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8513497&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Mato Grosso&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3441998&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Rondônia&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1757589&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Goiás&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6921161&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Espírito Santo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3972388&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Paraná&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11348937&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Sergipe&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2278308&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Amazonas&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4080611&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Distrito Federal&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2974703&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Bahia&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14812617&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Ordenação ascendente do Map com Java&lt;/h2&gt;
&lt;p&gt;Para ordenar o &lt;code&gt;Map&lt;/code&gt; acima em ordem crescente com Java 8 nós fazemos assim.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getPopulacaoPorEstado&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoOrdenada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entrySet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;comparingByValue&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LinkedHashMap&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="n"&gt;populacaoOrdenada&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;E a saída deste código é essa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;576568&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Roraima&lt;/span&gt;
&lt;span class="mf"&gt;829494&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amapá&lt;/span&gt;
&lt;span class="mf"&gt;869265&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Acre&lt;/span&gt;
&lt;span class="mf"&gt;1555229&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;To&lt;/span&gt;&lt;span class="n"&gt;cantins&lt;/span&gt;
&lt;span class="mf"&gt;1757589&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rondônia&lt;/span&gt;
&lt;span class="mf"&gt;2278308&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sergipe&lt;/span&gt;
&lt;span class="mf"&gt;2748023&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mato&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grosso&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sul&lt;/span&gt;
&lt;span class="mf"&gt;2974703&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Distrito&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Federal&lt;/span&gt;
&lt;span class="mf"&gt;3264531&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Piauí&lt;/span&gt;
&lt;span class="mf"&gt;3322820&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Alagoas&lt;/span&gt;
&lt;span class="mf"&gt;3441998&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mato&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grosso&lt;/span&gt;
&lt;span class="mf"&gt;3479010&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grande&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Norte&lt;/span&gt;
&lt;span class="mf"&gt;3972388&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Espírito&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Santo&lt;/span&gt;
&lt;span class="mf"&gt;3996496&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Paraíba&lt;/span&gt;
&lt;span class="mf"&gt;4080611&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amazonas&lt;/span&gt;
&lt;span class="mf"&gt;6921161&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Go&lt;/span&gt;&lt;span class="n"&gt;iás&lt;/span&gt;
&lt;span class="mf"&gt;7035055&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Maranhão&lt;/span&gt;
&lt;span class="mf"&gt;7075494&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Santa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Catarina&lt;/span&gt;
&lt;span class="mf"&gt;8513497&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pará&lt;/span&gt;
&lt;span class="mf"&gt;9075649&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ceará&lt;/span&gt;
&lt;span class="mf"&gt;9496294&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pernambuco&lt;/span&gt;
&lt;span class="mf"&gt;11329605&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grande&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sul&lt;/span&gt;
&lt;span class="mf"&gt;11348937&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Paraná&lt;/span&gt;
&lt;span class="mf"&gt;14812617&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bahia&lt;/span&gt;
&lt;span class="mf"&gt;17159960&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Janeiro&lt;/span&gt;
&lt;span class="mf"&gt;21040662&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Minas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gerais&lt;/span&gt;
&lt;span class="mf"&gt;45538936&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;São&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Paulo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Ordenação descendente do Map com Java&lt;/h2&gt;
&lt;p&gt;E para ordenar o &lt;code&gt;Map&lt;/code&gt; acima em ordem decrescente com Java 8 nós fazemos assim.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getPopulacaoPorEstado&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoOrdenada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populacaoBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entrySet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;comparingByValue&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;reversed&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LinkedHashMap&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="n"&gt;populacaoOrdenada&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;E a saída deste código é essa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;45538936&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;São&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Paulo&lt;/span&gt;
&lt;span class="mf"&gt;21040662&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Minas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gerais&lt;/span&gt;
&lt;span class="mf"&gt;17159960&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Janeiro&lt;/span&gt;
&lt;span class="mf"&gt;14812617&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bahia&lt;/span&gt;
&lt;span class="mf"&gt;11348937&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Paraná&lt;/span&gt;
&lt;span class="mf"&gt;11329605&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grande&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sul&lt;/span&gt;
&lt;span class="mf"&gt;9496294&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pernambuco&lt;/span&gt;
&lt;span class="mf"&gt;9075649&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ceará&lt;/span&gt;
&lt;span class="mf"&gt;8513497&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pará&lt;/span&gt;
&lt;span class="mf"&gt;7075494&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Santa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Catarina&lt;/span&gt;
&lt;span class="mf"&gt;7035055&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Maranhão&lt;/span&gt;
&lt;span class="mf"&gt;6921161&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Go&lt;/span&gt;&lt;span class="n"&gt;iás&lt;/span&gt;
&lt;span class="mf"&gt;4080611&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amazonas&lt;/span&gt;
&lt;span class="mf"&gt;3996496&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Paraíba&lt;/span&gt;
&lt;span class="mf"&gt;3972388&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Espírito&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Santo&lt;/span&gt;
&lt;span class="mf"&gt;3479010&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grande&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Norte&lt;/span&gt;
&lt;span class="mf"&gt;3441998&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mato&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grosso&lt;/span&gt;
&lt;span class="mf"&gt;3322820&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Alagoas&lt;/span&gt;
&lt;span class="mf"&gt;3264531&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Piauí&lt;/span&gt;
&lt;span class="mf"&gt;2974703&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Distrito&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Federal&lt;/span&gt;
&lt;span class="mf"&gt;2748023&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mato&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Grosso&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sul&lt;/span&gt;
&lt;span class="mf"&gt;2278308&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sergipe&lt;/span&gt;
&lt;span class="mf"&gt;1757589&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rondônia&lt;/span&gt;
&lt;span class="mf"&gt;1555229&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;To&lt;/span&gt;&lt;span class="n"&gt;cantins&lt;/span&gt;
&lt;span class="mf"&gt;869265&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Acre&lt;/span&gt;
&lt;span class="mf"&gt;829494&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amapá&lt;/span&gt;
&lt;span class="mf"&gt;576568&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Roraima&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Explicação&lt;/h2&gt;
&lt;p&gt;Se você veio até este post querendo mais do que o código que faz a ordenação continue lendo,
agora vamos tentar entender o que está acontecendo com o código de ordenação com Java 8 apresentado.&lt;/p&gt;
&lt;p&gt;A primeira coisa que temos que perceber é que nós usamos &lt;code&gt;stream&lt;/code&gt; para fazer a ordenação.
Precisamos do Stream para fazer operações de agregação e comparação. E a interface &lt;code&gt;Collection&lt;/code&gt; recebeu um método para retornar um Stream a partir do no Java 8.&lt;/p&gt;
&lt;p&gt;Mas, infelizmente a interface &lt;code&gt;Map&lt;/code&gt; não é uma filha de &lt;code&gt;Collection&lt;/code&gt;, por isso
nós precisamos obter o &lt;code&gt;Set&lt;/code&gt; de &lt;code&gt;Map.Entry&lt;/code&gt; do map.
Ou seja, a coleção (set) de objetos que representam a combinação de chave/valor do Map. Fazemos isso através do método &lt;code&gt;.entrySet()&lt;/code&gt; da interface &lt;code&gt;Map&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;De posse de um &lt;code&gt;Set&lt;/code&gt; nós podemos obter o Stream para fazer a ordenação, basta utilizar o método &lt;code&gt;.stream()&lt;/code&gt; do &lt;code&gt;Set&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O &lt;code&gt;Stream&lt;/code&gt; nos oferece um método para ordenação que recebe um &lt;code&gt;Comparator&lt;/code&gt;: &lt;code&gt;.sorted(Comparator&amp;lt;? super T&amp;gt; comparator)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Coincidentemente a classe &lt;code&gt;Map.Entry&lt;/code&gt; tem um método &lt;code&gt;comparingByValue()&lt;/code&gt; que retorna um Comparator já implementado
que compara o os valores do Map em ordem natural, ou seja ascendente.&lt;/p&gt;
&lt;p&gt;Por fim, nós podemos coletar (&lt;code&gt;.collect&lt;/code&gt;) o resultado do Stream em um outro &lt;code&gt;Map&lt;/code&gt;, mas dessa vez utilizando a implementação &lt;code&gt;LinkedHashMap&lt;/code&gt; para manter a ordenação que o Stream nos entrega.&lt;/p&gt;
&lt;p&gt;E para utilizar um Comparator que traz a ordem inverida, podemos obter um Comparator invertido através do método &lt;code&gt;.reverse()&lt;/code&gt; da interface &lt;code&gt;Collection&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Gostou? Alguma dúvida? Utilize a área de comentários aqui em baixo.&lt;/p&gt;
&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://pt.wikipedia.org/wiki/Lista_de_unidades_federativas_do_Brasil_por_popula%C3%A7%C3%A3o" target="_blank"&gt;Wikipedia: Lista de unidades federativas do Brasil por população&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html" target="_blank"&gt;Javadoc: Map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html" target="_blank"&gt;Javadoc: Map.Entry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html#comparingByValue--" target="_blank"&gt;Javadoc: Map.Entry.comparingByValue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html" target="_blank"&gt;Javadoc: Set&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#stream--" target="_blank"&gt;Javadoc: Collection.stream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/examples.dicasdejava.com.br/blob/master/src/main/java/br/com/dicasdejava/util/OrdenarMapPorValores.java" target="_blank"&gt;Código-fonte do exemplo&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java 8"></category><category term="Map"></category><category term="ordenação"></category></entry><entry><title>Intellij IDEA: Como descobrir o jar que uma classe pertence</title><link href="https://dicasdeprogramacao.com.br/intellij-idea-como-descobrir-o-jar-que-uma-classe-pertence/" rel="alternate"></link><published>2018-09-25T00:00:00-03:00</published><updated>2018-09-25T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-09-25:/intellij-idea-como-descobrir-o-jar-que-uma-classe-pertence/</id><summary type="html">&lt;p&gt;Se você quiser descobrir em qual arquivo &lt;strong&gt;.jar&lt;/strong&gt; uma classe pertence com o IntelliJ IDEA,
basta usar o atalho &lt;code&gt;Ctrl+N&lt;/code&gt; e digitar o nome da classe,
mas você precisa marcar a opção &lt;code&gt;Include non-project items&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Como descobrir o jar a que uma classe pertence" src="/images/intellij-idea-como-descobrir-o-jar-que-uma-classe-pertence/intellij-descobrir-jar-de-uma-classe.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;O GIF abaixo …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Se você quiser descobrir em qual arquivo &lt;strong&gt;.jar&lt;/strong&gt; uma classe pertence com o IntelliJ IDEA,
basta usar o atalho &lt;code&gt;Ctrl+N&lt;/code&gt; e digitar o nome da classe,
mas você precisa marcar a opção &lt;code&gt;Include non-project items&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Como descobrir o jar a que uma classe pertence" src="/images/intellij-idea-como-descobrir-o-jar-que-uma-classe-pertence/intellij-descobrir-jar-de-uma-classe.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;O GIF abaixo mostra o atalho funcionando.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Ctrl+N no Intellij para descobrir o arquivo jar de uma classe" src="/images/intellij-idea-como-descobrir-o-jar-que-uma-classe-pertence/intellij-descobrir-jar-de-uma-classe.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/help/idea/navigating-to-class-file-or-symbol-by-name.html#d1422563e20" target="_blank"&gt;Intellij IDEA Help: Navigating by name&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="atalhos"></category><category term="Intellij IDEA"></category><category term="jar"></category></entry><entry><title>Como configurar o lombok no IntelliJ IDEA</title><link href="https://dicasdeprogramacao.com.br/como-configurar-o-lombok-no-intellij-idea/" rel="alternate"></link><published>2018-09-18T00:00:00-03:00</published><updated>2018-09-18T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-09-18:/como-configurar-o-lombok-no-intellij-idea/</id><summary type="html">&lt;p&gt;O projeto Lombok é uma biblioteca java que você pode adicionar na sua IDE e ferramenta de &lt;em&gt;build&lt;/em&gt; para minimizar a quantidade de código necessário no seu projeto.&lt;/p&gt;
&lt;p&gt;O Lombok atua no processo de compilação do seu código adicionando códigos …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O projeto Lombok é uma biblioteca java que você pode adicionar na sua IDE e ferramenta de &lt;em&gt;build&lt;/em&gt; para minimizar a quantidade de código necessário no seu projeto.&lt;/p&gt;
&lt;p&gt;O Lombok atua no processo de compilação do seu código adicionando códigos automaticamente. Tirando de você a necessidade de escrever alguns códigos como por exemplo os métodos GET, SET, hashcode, equals, etc.&lt;/p&gt;
&lt;p&gt;Se você usa o IntelliJ IDEA como ambiente de desenvolvimento e quer usar o Lombok no seu projeto, o que você precisa fazer é ...&lt;/p&gt;
&lt;h2&gt;1. Adicionar o Lombok como dependência do seu projeto.&lt;/h2&gt;
&lt;p&gt;Se você estiver utilizando o maven, basta adicionar o código abaixo no bloco &lt;code&gt;&amp;lt;dependencies&amp;gt;&lt;/code&gt; do seu &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.projectlombok&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;lombok&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.18.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;2. Instalar o plugin do Lombok no IntelliJ IDEA&lt;/h2&gt;
&lt;p&gt;Instalar o plugin do Lombok do Intellij IDEA é muito simples. Basta seguir os passos abaixo:&lt;/p&gt;
&lt;h3&gt;1. Acesse o menu &lt;code&gt;File &amp;gt; Settings&lt;/code&gt; (ou o atalho &lt;code&gt;Ctrl+Alt+S&lt;/code&gt;).&lt;/h3&gt;
&lt;p&gt;&lt;img alt="IntelliJ: File &amp;gt; Settings" src="/images/como-configurar-o-lombok-no-intellij-idea/intellij-file-settings.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;2. Acesse a opção &lt;code&gt;Plugins&lt;/code&gt;.&lt;/h3&gt;
&lt;h3&gt;3. Clique em  &lt;code&gt;Browse repositories&lt;/code&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="IntelliJ: Browse repositories..." src="/images/como-configurar-o-lombok-no-intellij-idea/intellij-plugins-browse-repositories.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;4. Pesquise por &lt;code&gt;Lombok Plugin&lt;/code&gt;&lt;/h3&gt;
&lt;h3&gt;5. Selecione o plugin na lista de opções.&lt;/h3&gt;
&lt;h3&gt;6. Clique em &lt;code&gt;Install&lt;/code&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="IntelliJ: Install Lombok Plugin..." src="/images/como-configurar-o-lombok-no-intellij-idea/install-lombok-plugin.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;7. Após o download e a instalação do plugin, reinicie o Intellij IDEA.&lt;/h3&gt;
&lt;p&gt;Com esses passos você poderá utilizar todo o poder do Lombok no seu projeto Java.&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://projectlombok.org/setup/intellij" target="_blank"&gt;ProjectLombok: IntelliJ IDEA&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="instalar"></category><category term="lombok"></category><category term="Intellij IDEA"></category></entry><entry><title>Javascript: Como alterar os dados dos atributos de um objeto JSON</title><link href="https://dicasdeprogramacao.com.br/javascript-como-alterar-os-dados-dos-atributos-de-um-objeto-json/" rel="alternate"></link><published>2018-09-05T00:00:00-03:00</published><updated>2018-09-05T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-09-05:/javascript-como-alterar-os-dados-dos-atributos-de-um-objeto-json/</id><summary type="html">&lt;p&gt;Assim como para &lt;a href="https://dicasdeprogramacao.com.br/javascript-como-ler-os-dados-dos-atributos-de-um-objeto-json/" target="_blank"&gt;ler os atributos de um json&lt;/a&gt;,
existem duas formas de alterar o valor de um atributo de um objeto json.&lt;/p&gt;
&lt;p&gt;A primeira é através do ponto (&lt;code&gt;.&lt;/code&gt;), você escreve o nome do objeto, ponto (&lt;code&gt;.&lt;/code&gt;) e o nome do …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Assim como para &lt;a href="https://dicasdeprogramacao.com.br/javascript-como-ler-os-dados-dos-atributos-de-um-objeto-json/" target="_blank"&gt;ler os atributos de um json&lt;/a&gt;,
existem duas formas de alterar o valor de um atributo de um objeto json.&lt;/p&gt;
&lt;p&gt;A primeira é através do ponto (&lt;code&gt;.&lt;/code&gt;), você escreve o nome do objeto, ponto (&lt;code&gt;.&lt;/code&gt;) e o nome do atributo, em seguida o sinal igual (&lt;code&gt;=&lt;/code&gt;) e, por fim, o novo valor do atributo.&lt;/p&gt;
&lt;p&gt;A segunda maneira é com colchetes e uma string com o nome do atributo, também seguido do sinal de igual
(&lt;code&gt;=&lt;/code&gt;) e o novo valor do atributo.&lt;/p&gt;
&lt;p&gt;Exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;valor&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;valor&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Até aqui, tudo simples. Mas tem um detalhe muito importante que você deve saber sobre a linguagem javascript.&lt;/p&gt;
&lt;p&gt;Da mesma forma que você pode alterar o valor de um atributo, em Javascript você pode adicionar um novo atributo ao objeto JSON.&lt;/p&gt;
&lt;p&gt;Vamos ver um exemplo...&lt;/p&gt;
&lt;p&gt;Suponhamos que temos um objeto como o do exemplo abaixo.
Vamos alterar o valor do &lt;code&gt;atributo1&lt;/code&gt; e incluir um novo atributo que não existia, chamado &lt;code&gt;atributo3&lt;/code&gt;,
podemos fazer isso desses dois jeitos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;valor 1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo2&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;outro valor&amp;#39;&lt;/span&gt;
&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo que não existia&amp;#39;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Abaixo um exemplo de execução de alteração de atributos no console do Chrome.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de alteração e adição de atributos em um objeto json em Javascript" src="/images/javascript-como-alterar-os-dados-dos-atributos-de-um-objeto-json/alteracao-de-atributos-de-um-json.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="json"></category></entry><entry><title>O mínimo que você precisa saber sobre JSON para ser um bom programador!</title><link href="https://dicasdeprogramacao.com.br/o-que-e-json/" rel="alternate"></link><published>2018-09-05T00:00:00-03:00</published><updated>2018-09-05T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-09-05:/o-que-e-json/</id><summary type="html">&lt;p&gt;Por ser um dos formatos mais utilizados para comunicação entre serviços web (webservices),
principalmente quando estamos falando de &lt;strong&gt;APIs REST&lt;/strong&gt;, entender o que é e como funciona um JSON é primordial para qualquer pessoa que deseja trabalhar com desenvolvimento de …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Por ser um dos formatos mais utilizados para comunicação entre serviços web (webservices),
principalmente quando estamos falando de &lt;strong&gt;APIs REST&lt;/strong&gt;, entender o que é e como funciona um JSON é primordial para qualquer pessoa que deseja trabalhar com desenvolvimento de softwares.
E neste post você vai aprender tudo que precisa saber para trabalhar com o famoso JSON.&lt;/p&gt;
&lt;p&gt;Neste post você vai ver:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O que é JSON&lt;/li&gt;
&lt;li&gt;Porque saber usar JSON é essencial para sua carreira&lt;/li&gt;
&lt;li&gt;A Sintaxe básica do JSON&lt;/li&gt;
&lt;li&gt;Os tipos de dados do JSON&lt;/li&gt;
&lt;li&gt;Como manipular objetos JSON&lt;/li&gt;
&lt;li&gt;Como trabalhar com JSON no Javascript&lt;/li&gt;
&lt;/ul&gt;
&lt;!---   Como trabalhar com JSON no Python--&gt;
&lt;ul&gt;
&lt;li&gt;O que estudar depois de saber JSON&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;O que é JSON&lt;/h2&gt;
&lt;p&gt;&lt;img alt="O que é JSON" src="/images/o-que-e-json/destaque.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;JSON é um formado de representação de dados baseado na linguagem de programação &lt;a href="https://dicasdeprogramacao.com.br/categoria/dicas-de-javascript/"&gt;Javascript&lt;/a&gt;, daí o nome &lt;em&gt;JavaScript Object Notation&lt;/em&gt;.
Ou seja, &lt;em&gt;Notação de Objeto em Javascript&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Vamos pensar no exemplo de um objeto &lt;em&gt;pessoa&lt;/em&gt; com nome &lt;strong&gt;Pedro&lt;/strong&gt; e altura &lt;strong&gt;1,90&lt;/strong&gt;.
A representação deste objeto em JSON ficaria assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;nome&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Pedro&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;altura&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.90&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este é um exemplo bem simples, mas neste post você vai ver que o JSON não vai muito além disso.&lt;/p&gt;
&lt;p&gt;O mais importante que você precisa saber sobre o JSON é que ele é composto por &lt;strong&gt;chave/valor&lt;/strong&gt; (ou no inglês &lt;em&gt;key/value&lt;/em&gt;), as chaves representam os nomes dos atributos da classe e os valores, bem, são os valores do objeto.&lt;/p&gt;
&lt;p&gt;No exemplo acima, temos as chaves &lt;em&gt;nome&lt;/em&gt; e &lt;em&gt;altura&lt;/em&gt; e os valores &lt;em&gt;Pedro&lt;/em&gt; e &lt;em&gt;1.90&lt;/em&gt;, respectivamente.&lt;/p&gt;
&lt;h2&gt;Porque saber usar JSON é essencial para sua carreira&lt;/h2&gt;
&lt;p&gt;Dificilmente se cria softwares que sejam isolados do mundo, sem comunicação com outros sistemas.
Seja em uma aplicação Web, Mobile, ou até mesmo Sistemas Embarcados,
quase sempre é necessário fazer um software se comunicar com outro.&lt;/p&gt;
&lt;p&gt;Quem quer criar aplicações para usuários finais (aplicativos mobile, web, desktop, etc.) deve se preocupar com os formatos de dados e os protocolos de comunicação mais comuns para este fim. E neste contexto dois formatos de dados são os mais usados para comunicação na WEB. São eles: &lt;strong&gt;XML&lt;/strong&gt; e &lt;strong&gt;JSON&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para sistemas mais modernos o &lt;strong&gt;JSON&lt;/strong&gt; é muito mais utilizado para comunicação do que o XML.
Por isso, se você pretende trabalhar com aplicações mobile e web, entender JSON é de extrema importância.&lt;/p&gt;
&lt;p&gt;Mas pode ficar tranquilo que JSON é muito fácil de entender. Vamos começar pelo básico!&lt;/p&gt;
&lt;h2&gt;A Sintaxe básica do JSON&lt;/h2&gt;
&lt;p&gt;A sintaxe de um JSON é bem simples como já adiantei anteriormente, mas agora vamos aprofundar um pouco mais.&lt;/p&gt;
&lt;p&gt;Vejamos os elementos básicos do JSON.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;{&lt;/code&gt; e &lt;code&gt;}&lt;/code&gt;&lt;/strong&gt; - delimita um &lt;em&gt;objeto&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;[&lt;/code&gt; e &lt;code&gt;]&lt;/code&gt;&lt;/strong&gt; - delimita um &lt;em&gt;array&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;:&lt;/code&gt;&lt;/strong&gt; - separa chaves (atributos) de valores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;,&lt;/code&gt;&lt;/strong&gt; - separa os atributos chave/valor.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Entendendo estes quatro elementos básicos você já será capaz de ler um JSON com mais facilidade.&lt;/p&gt;
&lt;p&gt;A leitura simples de um JSON é que ele representa um objeto que tem atributos e cada atributo tem valores.&lt;/p&gt;
&lt;p&gt;Os JSONs são estruturados em &lt;em&gt;objetos&lt;/em&gt; e/ou &lt;em&gt;arrays&lt;/em&gt; (ou listas).
Os objetos são representados por chaves &lt;code&gt;{ }&lt;/code&gt; e os arrays são representados por colchetes &lt;code&gt;[ ]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Essa é a primeira coisa que você deve olhar no JSON: Onde estão as chaves e os colchetes?&lt;/p&gt;
&lt;p&gt;Identificando estes dois tipos de estruturas voce já sabe se os dados serão acessados por chaves (quando for um objeto), ou por índices/números (quando for um array).&lt;/p&gt;
&lt;p&gt;Além disso, tem algumas outras regras, nos &lt;strong&gt;objetos&lt;/strong&gt; os atributos devem seguir de um caracter &lt;code&gt;:&lt;/code&gt; (dois-pontos) e o valor do atributo. E os atributos devem ser separados por &lt;code&gt;,&lt;/code&gt; vírgulas.&lt;/p&gt;
&lt;p&gt;Já os &lt;strong&gt;arrays&lt;/strong&gt; só podem ser de um determinado tipo de dados (veja a próxima sessão), não pode misturar texto com número, por exemplo.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/o-que-sao-vetores-e-matrizes-arrays/" target="_blank"&gt;&amp;gt;&amp;gt; O que são Vetores e Matrizes (arrays)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Veja abaixo um exemplo de objeto e um exemplo de array.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;valor1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo2&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo3&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Outro ponto interessante é que um &lt;em&gt;objeto&lt;/em&gt; JSON pode ter atributos do tipo &lt;em&gt;array&lt;/em&gt;
e um &lt;em&gt;array&lt;/em&gt; pode ser do tipo &lt;em&gt;objeto&lt;/em&gt; ou &lt;em&gt;array&lt;/em&gt;. Confuso? Veja o exemplo abaixo pra entender melhor.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atritutoDoTipoArray&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;54&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;[{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;},{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;b&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ah! Tanto array quando objeto podem ser vazios em JSON. Assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Os Tipos de dados do JSON&lt;/h2&gt;
&lt;p&gt;Além de &lt;em&gt;objeto&lt;/em&gt; e &lt;em&gt;array&lt;/em&gt; serem considerados os tipos de dados principais.
O JSON também tem os tipos de dados primitivos que nós &lt;a href="https://dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" target="_blank"&gt;já falamos aqui no { Dicas de Programação }&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Os tipos de dados básicos do JSON são:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;string&lt;/strong&gt; - separados por aspas (duplas ou simples). Ex. "Brasil" ou 'Brasil'&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;número&lt;/strong&gt; - sem aspas e pode ser inteiro ou real, quando for do tipo real deve-se usar o caractere &lt;code&gt;.&lt;/code&gt; (ponto) para separar a parte inteira das casas decimais . Ex. &lt;code&gt;1&lt;/code&gt; (inteiro) ou &lt;code&gt;23.454&lt;/code&gt; (real)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;booleano&lt;/strong&gt; - tipo lógico normal, pode assumir valores &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nulo&lt;/strong&gt; - este é o valor nulo mesmo. Ex. &lt;code&gt;{ "nome" : null }&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Veja abaixo um exemplo de objeto JSON com todos estes tipos de dados.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;texto&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Brasil&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;numero&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;numeroReal&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;54.87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;booleano&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;nulo&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Como manipular objetos JSON&lt;/h2&gt;
&lt;p&gt;Ao longo da sua vida como desenvolvedor você vai precisar trabalhar com JSON
executando algumas tarefas básicas, como:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Converter uma String (texto) para um objeto JSON;&lt;/li&gt;
&lt;li&gt;Converter um objeto JSON para String;&lt;/li&gt;
&lt;li&gt;Ler os dados dos atributos de um JSON;&lt;/li&gt;
&lt;li&gt;Inserir e alterar os dados dos atributos de um JSON;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Em algumas linguagens de programação é muito fácil manipular objetos JSON,
em outras já é mais complicado um pouco, mas também, nada de outro mundo.&lt;/p&gt;
&lt;!--Vamos ver como manipular JSON em três das linguagens mais utilizadas no mercado de trabalho hoje em dia: **Javascript**, **Python** e **Java**--&gt;

&lt;p&gt;Vamos ver alguns exemplos de como manipular JSON em uma das linguagens mais utilizadas no mercado de trabalho hoje em dia: &lt;strong&gt;Javascript&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Como trabalhar com JSON no Javascript&lt;/h2&gt;
&lt;p&gt;Obviamente a linguagem mais simples de se trabalhar com JSON é o próprio &lt;strong&gt;Javascript&lt;/strong&gt;.
Aliás, &lt;strong&gt;JSON&lt;/strong&gt; tem Javascript até no nome, lembra? &lt;em&gt;&lt;strong&gt;J&lt;/strong&gt;ava&lt;strong&gt;S&lt;/strong&gt;cript &lt;strong&gt;O&lt;/strong&gt;bject &lt;strong&gt;N&lt;/strong&gt;otation&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Vejamos então como executar as ações básicas sobre JSON com Javascript.&lt;/p&gt;
&lt;h3&gt;1. Converter uma String (texto) para um objeto JSON;&lt;/h3&gt;
&lt;p&gt;É muito comum você receber um JSON no formato de String e precisar transformar essa String em um JSON.&lt;/p&gt;
&lt;p&gt;Para isso basta usar a função &lt;code&gt;JSON.parse()&lt;/code&gt; passando a string como parâmetro.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{&amp;quot;atributo1&amp;quot;: &amp;quot;valor 1&amp;quot;, &amp;quot;atributo2&amp;quot;: 23}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Você pode encontrar mais detalhes neste outro post aqui:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://dicasdeprogramacao.com.br/javascript-como-converter-string-em-objeto-json/" target="_blank"&gt;&amp;gt;&amp;gt; Javascript: Como converter string em objeto JSON&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2. Converter um objeto JSON para String;&lt;/h3&gt;
&lt;p&gt;Outras vezes precisamos fazer o caminho contrário, transformar um objeto JSON em String.&lt;/p&gt;
&lt;p&gt;Para isso basta usar a função &lt;code&gt;JSON.stringify()&lt;/code&gt; passando o objeto como parâmetro.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;valor 1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo2&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dicasdeprogramacao.com.br/javascript-como-converter-objeto-json-em-string/" target="_blank"&gt;&amp;gt;&amp;gt; Javascript: Como converter um objeto JSON em string&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3. Ler os dados dos atributos de um JSON;&lt;/h3&gt;
&lt;p&gt;Existem duas formas de ler o valor de um atributo de um objeto json.&lt;/p&gt;
&lt;p&gt;A primeira é através do ponto (&lt;code&gt;.&lt;/code&gt;), você escreve o nome do objeto ponto (&lt;code&gt;.&lt;/code&gt;) e o nome do atributo.&lt;/p&gt;
&lt;p&gt;A segunda maneira é com colchetes e uma string com o nome do atributo.&lt;/p&gt;
&lt;p&gt;Vamos ver um exemplo...&lt;/p&gt;
&lt;p&gt;Suponhamos que temos um objeto como o do exemplo anterior e queremos acessar o &lt;code&gt;atributo1&lt;/code&gt;,
podemos fazer isso desses dois jeitos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;valor 1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo2&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A saída deste script é essa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;valor 1
23
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dicasdeprogramacao.com.br/javascript-como-ler-os-dados-dos-atributos-de-um-objeto-json/" target="_blank"&gt;&amp;gt;&amp;gt; Javascript: Como ler os dados dos atributos de um objeto JSON&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;4. Inserir e alterar os dados dos atributos de um JSON;&lt;/h3&gt;
&lt;p&gt;Os objetos JSON do Javascript são dinâmicos. Isso significa que eles podem ter a sua estrutura modificada.&lt;/p&gt;
&lt;p&gt;Logo, você consegue adicionar novos atributos a um objeto dinamicamente, bem como alterar o valor dos atributos já existentes.&lt;/p&gt;
&lt;p&gt;Veja o exemplo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;valor 1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo2&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;outro valor&amp;#39;&lt;/span&gt;
&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo que não existia&amp;#39;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A saída deste script é essa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;outro valor
atributo que não existia
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que você pode alterar os valores dos atributos do objeto
da mesma forma que você acessa um atributo, ou seja, com o ponto (.) ou com os colchetes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://dicasdeprogramacao.com.br/javascript-como-alterar-os-dados-dos-atributos-de-um-objeto-json/" target="_blank"&gt;&amp;gt;&amp;gt; Javascript: Como alterar os dados dos atributos de um objeto JSON&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;!--
## Como trabalhar com JSON no Python

Python tem se destacado bastante, por ser uma linguagem simples de se aprender.

Esta linguagem tem sido a escolha de muitas pessoas que não trabalham diretamente com desenvolvimento de softwares, mas precisam aprender programação para suas profissões, tais como estatísticos, jornalistas, advogados, biólogos, geógrafos, etc.

E não é por menos, um exemplo de facilidade do python é que, assim como em Javascript, a manipulação de JSON com Python é muito simples e nativo da linguagem, através de uma estrutura de dados conhecida como dicionário (_dict_).

Vejamos então como executar as ações básicas sobre JSON com Python.

### 1. Converter uma String (texto) para um objeto JSON;


### 2. Converter um objeto JSON para String;


### 3. Ler dados dos atributos de um JSON;


### 4. Inserir/Alterar dados nos atributos de um JSON;

--&gt;

&lt;h2&gt;O que estudar depois de saber JSON&lt;/h2&gt;
&lt;p&gt;JSON é um formato de representação de Objetos muito utilizado na atualidade,
principalmente para comunicação entre sistemas através de APIs REST.&lt;/p&gt;
&lt;p&gt;Se você se interessou em entender o que é JSON, muito provavelmente você também
tem interesse em desenvolvimento de aplicações Web e Mobile e comunicação entre Front-end e Back-end.&lt;/p&gt;
&lt;p&gt;Por isso, eu tenho algumas sugestões de coisas que devem ser estudadas
se você pretende ser um bom desenvolvedor web/mobile.&lt;/p&gt;
&lt;p&gt;Aqui está a minha lista de sugestões:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Funcionamento básico de um servidor Web&lt;/li&gt;
&lt;li&gt;Funcionamento do Protocolo HTTP&lt;ul&gt;
&lt;li&gt;Estrutura de uma requisição HTTP&lt;/li&gt;
&lt;li&gt;Estrutura de uma resposta HTTP&lt;/li&gt;
&lt;li&gt;Cabeçalhos HTTP&lt;/li&gt;
&lt;li&gt;Métodos HTTP (também conhecidos como verbos HTTP)&lt;/li&gt;
&lt;li&gt;Códigos de resposta e seus significados&lt;/li&gt;
&lt;li&gt;GET vs POST&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;APIs REST e RESTFul&lt;/li&gt;
&lt;li&gt;Segurança na Web com protocolo HTTPS&lt;/li&gt;
&lt;li&gt;Controle de acesso (CORS)&lt;/li&gt;
&lt;li&gt;Implementar uma API REST (escolha uma linguagem utilizada no backend)&lt;/li&gt;
&lt;li&gt;Autenticações OAuth, OAuth2, SAML, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enfim, essa é uma listinha básica que percebo que falta de conhecimento
para muitas pessoas que estão ingressando nessa área de desenvolvimento de softwares.&lt;/p&gt;
&lt;p&gt;Se você estudar essas coisas já estará na frente de no mínimo 50% dos atuais programadores web.
&lt;strong&gt;#FICADICA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Curtiu? Compatilhe este post com seus amigos.&lt;/p&gt;
&lt;p&gt;Se tiver alguma dúvida, sugestão ou crítica, fique a vontade para postar nos comentários.&lt;/p&gt;</content><category term="Dicionário de programador"></category></entry><entry><title>[Resolvido] 'python' não é reconhecido como um comando interno</title><link href="https://dicasdeprogramacao.com.br/resolvido-python-nao-e-reconhecido-como-um-comando-interno/" rel="alternate"></link><published>2018-09-03T00:00:00-03:00</published><updated>2018-09-03T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-09-03:/resolvido-python-nao-e-reconhecido-como-um-comando-interno/</id><summary type="html">&lt;p&gt;Pode acontecer de depois que você instalar o python no seu computador,
você tente executar o comando &lt;code&gt;python&lt;/code&gt; na linha de comando e apareça o seguinte erro no Windows:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;'python' não é reconhecido como um comando interno
ou externo, um …&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;Pode acontecer de depois que você instalar o python no seu computador,
você tente executar o comando &lt;code&gt;python&lt;/code&gt; na linha de comando e apareça o seguinte erro no Windows:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;'python' não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="'python' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes." src="/images/resolvido-python-nao-e-reconhecido-como-um-comando-interno/python-nao-e-reconhecido.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Não se apavore, a solução para isso é fácil!&lt;/p&gt;
&lt;h2&gt;A solução&lt;/h2&gt;
&lt;p&gt;Basta você colocar o caminho da instalação do python na variável de ambiente &lt;code&gt;PATH&lt;/code&gt; e &lt;strong&gt;reiniciar o prompt de comando&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Veja passo a passo como fazer essa configuração:&lt;/p&gt;
&lt;h3&gt;1. Clique com o botão direito do mouse no ícone do seu computador e clique em &lt;strong&gt;Propriedades&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="menu: propriedades do computador" src="/images/resolvido-python-nao-e-reconhecido-como-um-comando-interno/meu-computador-propriedades.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;2. Clique em &lt;strong&gt;Configurações avançadas do sistema&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Configurações avançadas do sistema" src="/images/resolvido-python-nao-e-reconhecido-como-um-comando-interno/configuracoes-avancadas-do-sistema.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;3. Clique no botão &lt;strong&gt;Variáveis de ambiente&lt;/strong&gt; dentro da aba &lt;strong&gt;Avançado&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Configurações avançadas do sistema" src="/images/resolvido-python-nao-e-reconhecido-como-um-comando-interno/botao-variaveis-de-ambiente.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;4. Selecione a variável de ambiente &lt;strong&gt;PATH&lt;/strong&gt; na lista e clique em &lt;strong&gt;Editar&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Editar variável de ambiente PATH" src="/images/resolvido-python-nao-e-reconhecido-como-um-comando-interno/edicao-variavel-de-ambiente-PATH.png" width="100%"&gt;&lt;/p&gt;
&lt;h3&gt;5. Clique no botão &lt;strong&gt;Novo&lt;/strong&gt; e adicione o caminho da pasta de instalação do python.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Adicionando a pasta do python na variável de ambiente PATH" src="/images/resolvido-python-nao-e-reconhecido-como-um-comando-interno/adiciona-python-no-PATH.png" width="100%"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante&lt;/strong&gt;: Pode ser que na sua versão do Windows esta janela seja diferente, apresentando apenas um campo de texto com vários caminhos de pastas separadas por &lt;strong&gt;ponto-e-vírgula (;)&lt;/strong&gt;. Neste caso, o que você precisa fazer é justamente &lt;strong&gt;adicionar outro ponto-e-vírgula (;) e o caminho da nova pasta&lt;/strong&gt; que você deseja incluir no PATH.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;6. REINICIE o prompt de comando!&lt;/h3&gt;
&lt;p&gt;Um passo muito importante que muitos esquecem.
Você precisa reiniciar o prompt de comandos para que as alterações de variáveis de ambiente sejam aplicadas.&lt;/p&gt;
&lt;h3&gt;7. Comando 'python' funcionando normalmente&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Comando 'python' funcionando normalmente no prompt de comandos" src="/images/resolvido-python-nao-e-reconhecido-como-um-comando-interno/python-funcionando.png" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Se você tiver alguma dúvida, poste aí nos comentários.&lt;/p&gt;</content><category term=": Dicas de Python :"></category><category term="python"></category><category term="linha de comando"></category><category term="variável de ambiente"></category><category term="erro"></category></entry><entry><title>Javascript: Como ler os dados dos atributos de um objeto JSON</title><link href="https://dicasdeprogramacao.com.br/javascript-como-ler-os-dados-dos-atributos-de-um-objeto-json/" rel="alternate"></link><published>2018-08-29T00:00:00-03:00</published><updated>2018-08-29T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-29:/javascript-como-ler-os-dados-dos-atributos-de-um-objeto-json/</id><summary type="html">&lt;p&gt;Existem duas formas de ler o valor de um atributo de um objeto json.&lt;/p&gt;
&lt;p&gt;A primeira é através do ponto (&lt;code&gt;.&lt;/code&gt;), você escreve o nome do objeto ponto (&lt;code&gt;.&lt;/code&gt;) e o nome do atributo.&lt;/p&gt;
&lt;p&gt;A segunda maneira é com colchetes e uma …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Existem duas formas de ler o valor de um atributo de um objeto json.&lt;/p&gt;
&lt;p&gt;A primeira é através do ponto (&lt;code&gt;.&lt;/code&gt;), você escreve o nome do objeto ponto (&lt;code&gt;.&lt;/code&gt;) e o nome do atributo.&lt;/p&gt;
&lt;p&gt;A segunda maneira é com colchetes e uma string com o nome do atributo.&lt;/p&gt;
&lt;p&gt;Vamos ver um exemplo...&lt;/p&gt;
&lt;p&gt;Suponhamos que temos um objeto como o do exemplo abaixo e queremos acessar o &lt;code&gt;atributo1&lt;/code&gt;,
podemos fazer isso desses dois jeitos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;valor 1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo2&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;atributo1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Abaixo um exemplo de execução de leitura de atributos no console do Chrome.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de leitura de atributos de um objeto json em Javascript" src="/images/javascript-como-ler-os-dados-dos-atributos-de-um-objeto-json/leitura-de-atributos-de-um-json.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="json"></category></entry><entry><title>Python: Como executar um servidor HTTP nativo para servir arquivos de uma pasta local</title><link href="https://dicasdeprogramacao.com.br/python-como-executar-um-servidor-http-nativo-para-servir-arquivos-de-uma-pasta-local/" rel="alternate"></link><published>2018-08-29T00:00:00-03:00</published><updated>2018-08-29T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-29:/python-como-executar-um-servidor-http-nativo-para-servir-arquivos-de-uma-pasta-local/</id><summary type="html">&lt;p&gt;Se você tem vários arquivos de um site em uma pasta e quer servir estes arquivos em um browser com o protocolo &lt;code&gt;http://&lt;/code&gt; ao invés do protocolo &lt;code&gt;file:///&lt;/code&gt;, neste post você vai descobrir &lt;strong&gt;como executar um servidor http básico nativo …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Se você tem vários arquivos de um site em uma pasta e quer servir estes arquivos em um browser com o protocolo &lt;code&gt;http://&lt;/code&gt; ao invés do protocolo &lt;code&gt;file:///&lt;/code&gt;, neste post você vai descobrir &lt;strong&gt;como executar um servidor http básico nativo do python&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O python tem um servidor http nativo que pode ser executado em qualquer pasta do seu sistema operacional.&lt;/p&gt;
&lt;p&gt;Mas os comandos são diferente para as duas principais versões do Python, a versão 2.* e a versão 3.*.&lt;/p&gt;
&lt;h2&gt;Servidor HTTP no Python 3.*&lt;/h2&gt;
&lt;p&gt;Para executar um servidor HTTP no python 3.*, você deve executar o módulo nativo &lt;code&gt;http.server&lt;/code&gt; passando a porta que você quer usar como argumento.&lt;/p&gt;
&lt;p&gt;Veja abaixo o comando para executar o servidor http com o python 3.*.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python -m http.server 8080
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No exemplo, estamos criando um servidor HTTP na porta 8080.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;O argumento &lt;code&gt;-m&lt;/code&gt; do python é usado para executar pela linha de comando um módulo que não está localizado na pasta atual.. No nosso caso o módulo &lt;code&gt;http.server&lt;/code&gt; não está na pasta onde estamos executando o comando.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No gif abaixo você pode ver na prática a execução de um servidor HTTP em uma pasta com o Python 3.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de execução de um servidor HTTP nativo em Python 3" src="/images/python-como-executar-um-servidor-http-nativo-para-servir-arquivos-de-uma-pasta-local/python-http-server.gif" width="100%"&gt;&lt;/p&gt;
&lt;p&gt;Também podemos ver no gif que o servidor serve o arquivo &lt;code&gt;index.html&lt;/code&gt; por padrão, se ele existir na pasta.&lt;/p&gt;
&lt;h2&gt;Servidor HTTP no Python 2.*&lt;/h2&gt;
&lt;p&gt;Na versão 2 você consegue o mesmo servidor executando o módulo nativo &lt;code&gt;SimpleHTTPServer&lt;/code&gt; passando a porta que você quer usar como argumento.&lt;/p&gt;
&lt;p&gt;Veja abaixo o comando para executar o servidor http com o python 2.*.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SimpleHTTPServer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No exemplo, estamos criando um servidor HTTP na porta 8000.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/http.server.html#module-http.server" target="_blank"&gt;Doc: http.server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/2/library/simplehttpserver.html" target="_blank"&gt;Doc: SimpleHTTPServer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/2/using/cmdline.html#cmdoption-m" target="_blank"&gt;Doc: Arg -m&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="servidor"></category><category term="http"></category></entry><entry><title>Como instalar o MAVEN no Windows</title><link href="https://dicasdeprogramacao.com.br/como-instalar-o-maven-no-windows/" rel="alternate"></link><published>2018-08-28T00:00:00-03:00</published><updated>2018-08-28T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-28:/como-instalar-o-maven-no-windows/</id><summary type="html">&lt;p&gt;O &lt;strong&gt;maven&lt;/strong&gt; é um dos principais gerenciadores de dependências conhecidos para Java.
Mas este nome pode assustar um pouco os iniciantes no desenvolvimento Java
e a primeira dúvida que surge para começar a usá-lo é &lt;strong&gt;como eu instalo o maven …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;O &lt;strong&gt;maven&lt;/strong&gt; é um dos principais gerenciadores de dependências conhecidos para Java.
Mas este nome pode assustar um pouco os iniciantes no desenvolvimento Java
e a primeira dúvida que surge para começar a usá-lo é &lt;strong&gt;como eu instalo o maven&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Como não tem um "instalador" normal pra você executar e ir clicando em "Próximo",
a instalação do maven pode gerar um pouco de confusão, mas é bem simples.&lt;/p&gt;
&lt;h2&gt;Primeiro passo - Pré-requisito (JDK 1.7)&lt;/h2&gt;
&lt;p&gt;O principal requisito para instalar e usar o &lt;strong&gt;maven&lt;/strong&gt; na sua máquina é ter previamente instalado
o JDK (Java Development Kit) 1.7 ou superior.&lt;/p&gt;
&lt;p&gt;Também é necessário configurar a variável de ambiente &lt;code&gt;JAVA_HOME&lt;/code&gt; no seu computador.
Mas isso eu vou mostrar como fazer ao longo do post.&lt;/p&gt;
&lt;p&gt;Por agora tenha certeza que você tenha instalado o JDK 1.7 ou superior.&lt;/p&gt;
&lt;h2&gt;Segundo passo - Download do maven&lt;/h2&gt;
&lt;p&gt;O próximo passo é baixar o maven compactado em sua versão mais atual.
Você precisa baixar o arquivo com os binários do maven, não é necessário baixar o arquivos-fonte.
Ou seja, você vai baixar o arquivo que termina com &lt;code&gt;-bin&lt;/code&gt; e não o arquivo que termina com &lt;code&gt;-src&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Para baixar o maven, basta &lt;a href="https://maven.apache.org/download.cgi"&gt;clicar aqui&lt;/a&gt; e fazer o download.&lt;/p&gt;
&lt;p&gt;Você pode escolher qualquer formato de compactação para download, mas eu sugiro o arquivo &lt;code&gt;-bin.zip&lt;/code&gt;,
por ser o formato de compactação mais comum.&lt;/p&gt;
&lt;p&gt;Veja um exemplo da página de download do maven.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Página de download do maven" src="/images/como-instalar-o-maven-no-windows/download-maven.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Terceiro passo - Descompactação&lt;/h2&gt;
&lt;p&gt;Após fazer o download do arquivo compactado, você deve descompactá-lo em uma pasta de sua preferência.&lt;/p&gt;
&lt;p&gt;Mas é importante você saber que esta pasta será a pasta onde o maven estará "instalado".&lt;/p&gt;
&lt;p&gt;Eu vou descompactar o maven em &lt;code&gt;C:\maven&lt;/code&gt;. Ao final da descompactação a pasta do maven estará assim:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Pasta do maven localmente" src="/images/como-instalar-o-maven-no-windows/pasta-do-maven.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Pode ser que quando você descompactou o arquivo zip a pasta &lt;code&gt;C:\maven&lt;/code&gt; tenha ficado só com uma pasta com os arquivo do maven dentro, algo como &lt;code&gt;C:\maven\apache-maven-3.5.4&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Não tem problema, basta se lembrar disso quando for configurar a variável de ambiente. Ou você pode mover os arquivos de dentro desta pasta e subir um nível, colocando-os em &lt;code&gt;C:\maven&lt;/code&gt;. Você escolhe ...&lt;/p&gt;
&lt;h2&gt;Quarto passo - Configurando as variáveis de ambiente&lt;/h2&gt;
&lt;p&gt;Agora vem a parte que faz o maven funcionar :)&lt;/p&gt;
&lt;p&gt;Para fazer o maven funcionar você só precisa adicionar a pasta &lt;code&gt;bin&lt;/code&gt; do maven na variável de ambiente &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Se você nunca configurou uma variável de ambiente no Windows basta seguir esses passos.&lt;/p&gt;
&lt;h3&gt;1. Clique com o botão direito do mouse no ícone do seu computador e clique em &lt;strong&gt;Propriedades&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="menu: propriedades do computador" src="/images/como-instalar-o-maven-no-windows/meu-computador-propriedades.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;2. Clique em &lt;strong&gt;Configurações avançadas do sistema&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Configurações avançadas do sistema" src="/images/como-instalar-o-maven-no-windows/configuracoes-avancadas-do-sistema.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;3. Clique no botão &lt;strong&gt;Variáveis de ambiente&lt;/strong&gt; dentro da aba &lt;strong&gt;Avançado&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Configurações avançadas do sistema" src="/images/como-instalar-o-maven-no-windows/botao-variaveis-de-ambiente.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;4. Selecione a variável de ambiente &lt;strong&gt;PATH&lt;/strong&gt; na lista e clique em &lt;strong&gt;Editar&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Editar variável de ambiente PATH" src="/images/como-instalar-o-maven-no-windows/edicao-variavel-de-ambiente-PATH.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;5. Clique no botão &lt;strong&gt;Novo&lt;/strong&gt; e adicione o caminho da pasta bin do maven: &lt;code&gt;C:\maven\bin&lt;/code&gt;.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Adicionando a pasta bin do maven na variável de ambiente PATH" src="/images/como-instalar-o-maven-no-windows/adiciona-maven-bin-no-PATH.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;6. Verifique se existe a variável de ambiente &lt;strong&gt;JAVA_HOME&lt;/strong&gt;.&lt;/h3&gt;
&lt;p&gt;Lembra que falei da variável de ambiente &lt;strong&gt;JAVA_HOME&lt;/strong&gt;?
Precisamos saber se ela já existe no seu sistema ou se precisamos criar.&lt;/p&gt;
&lt;p&gt;Entre as variáveis de ambiente do seu sistema, verifique se já existe uma variável de ambiente chamada &lt;strong&gt;JAVA_HOME&lt;/strong&gt; que contenha o caminho para o JDK instalado no seu computador.&lt;/p&gt;
&lt;p&gt;Se não existir, você precisa criar essa nova variável de ambiente, clicando em &lt;strong&gt;Novo...&lt;/strong&gt;
e informando o nome &lt;code&gt;JAVA_HOME&lt;/code&gt; e o valor com o caminho para a pasta onde o seu JDK está instalado.
Por exemplo:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de configuração do JAVA_HOME" src="/images/como-instalar-o-maven-no-windows/exemplo-java-home.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Testando a instalação do maven&lt;/h2&gt;
&lt;p&gt;Para testar se a configuração do maven funcionou, abra o prompt de comando do seu computador e digite &lt;code&gt;mvn&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A saída deve ser algo assim:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado do comando mvn" src="/images/como-instalar-o-maven-no-windows/saida-do-comando-mvn.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Se o resultado do seu comando foi como a imagem abaixo, significa que você não configurou a variável de ambiente &lt;code&gt;PATH&lt;/code&gt; com o caminho válido para a pasta &lt;code&gt;bin&lt;/code&gt; do maven.&lt;/p&gt;
&lt;p&gt;&lt;img alt="mvn comando não encontrado" src="/images/como-instalar-o-maven-no-windows/mvn-comando-nao-encontrado.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Neste caso, volte para o início deste &lt;strong&gt;Quarto passo - Configurando as variáveis de ambiente&lt;/strong&gt;
e certifique-se que o caminho da pasta &lt;code&gt;bin&lt;/code&gt; do maven esteja na variável de ambiente &lt;code&gt;PATH&lt;/code&gt;.
Após essa correção, &lt;strong&gt;feche e abra novamente o prompt de comando&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://maven.apache.org/" target="_blank"&gt;Maven: Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maven.apache.org/install.html" target="_blank"&gt;Maven: Instalação&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maven.apache.org/download.cgi" target="_blank"&gt;Maven: Download&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="instalar"></category><category term="maven"></category><category term="windows"></category></entry><entry><title>Javascript: Como converter objeto JSON em String</title><link href="https://dicasdeprogramacao.com.br/javascript-como-converter-objeto-json-em-string/" rel="alternate"></link><published>2018-08-28T00:00:00-03:00</published><updated>2018-08-28T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-28:/javascript-como-converter-objeto-json-em-string/</id><summary type="html">&lt;p&gt;Suponha que você tenha um objeto JSON e deseja transformar este objeto JSON em uma String no javascript.&lt;/p&gt;
&lt;p&gt;Para fazer isso, basta utilizar o método &lt;code&gt;JSON.stringify(texto)&lt;/code&gt;, passando a string como parâmetro.&lt;/p&gt;
&lt;p&gt;Veja um exemplo no código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Suponha que você tenha um objeto JSON e deseja transformar este objeto JSON em uma String no javascript.&lt;/p&gt;
&lt;p&gt;Para fazer isso, basta utilizar o método &lt;code&gt;JSON.stringify(texto)&lt;/code&gt;, passando a string como parâmetro.&lt;/p&gt;
&lt;p&gt;Veja um exemplo no código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;valor 1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;atributo2&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Abaixo um exemplo de execução deste código no console do Chrome.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de conversão de uma string em um objeto json em Javascript" src="/images/javascript-como-converter-objeto-json-em-string/converte-json-para-string-em-javascript.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify" target="_blank"&gt;Mozila: JSON.stringify&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="string"></category><category term="json"></category><category term="converter"></category></entry><entry><title>Python: Como converter uma string JSON em um dicionário</title><link href="https://dicasdeprogramacao.com.br/python-como-converter-uma-string-json-em-um-dicionario/" rel="alternate"></link><published>2018-08-28T00:00:00-03:00</published><updated>2018-08-28T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-28:/python-como-converter-uma-string-json-em-um-dicionario/</id><summary type="html">&lt;p&gt;Suponha que você tenha uma String que representa um JSON válido e queira transformar esta String em um objeto (dicionário) no Python.&lt;/p&gt;
&lt;p&gt;Para fazer isso, basta utilizar o método &lt;code&gt;json.loads(texto)&lt;/code&gt; da biblioteca &lt;code&gt;json&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja um exemplo no código …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Suponha que você tenha uma String que representa um JSON válido e queira transformar esta String em um objeto (dicionário) no Python.&lt;/p&gt;
&lt;p&gt;Para fazer isso, basta utilizar o método &lt;code&gt;json.loads(texto)&lt;/code&gt; da biblioteca &lt;code&gt;json&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja um exemplo no código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;

&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{&amp;quot;atributo1&amp;quot;: &amp;quot;valor 1&amp;quot;, &amp;quot;atributo2&amp;quot;: 23}&amp;#39;&lt;/span&gt;

&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;atributo1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Abaixo um exemplo de execução deste código no prompt do python.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de conversão de uma string em um objeto json em Python" src="/images/python-como-converter-uma-string-json-em-um-dicionario/converte-string-para-json-em-python.gif" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/json.html#json.loads" target="_blank"&gt;Doc: json.loads&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python"></category><category term="string"></category><category term="json"></category><category term="converter"></category></entry><entry><title>Java: Como instanciar uma classe abstrata ou interface</title><link href="https://dicasdeprogramacao.com.br/java-como-instanciar-uma-classe-abstrata-ou-interface/" rel="alternate"></link><published>2018-08-27T00:00:00-03:00</published><updated>2018-08-27T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-27:/java-como-instanciar-uma-classe-abstrata-ou-interface/</id><summary type="html">&lt;p&gt;Logo de cara você já deve estar pensando: para de falar besteira cara! Não dá pra instanciar nem classe abstrata nem interface em java!&lt;/p&gt;
&lt;p&gt;Pois bem, se você sempre achou que era impossível instanciar uma classe abstrata, ou até mesmo …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Logo de cara você já deve estar pensando: para de falar besteira cara! Não dá pra instanciar nem classe abstrata nem interface em java!&lt;/p&gt;
&lt;p&gt;Pois bem, se você sempre achou que era impossível instanciar uma classe abstrata, ou até mesmo uma interface, você está enganado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;É possível sim, instanciar uma classe abstrata ou uma interface!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O único requisito pra isso é, adivinha ... implementar todos os métodos abstratos. E você pode fazer isso sem declarar uma nova classe explicitamente.
O que você precisa é de uma &lt;strong&gt;classe anônima&lt;/strong&gt;!&lt;/p&gt;
&lt;h2&gt;Classe anônima&lt;/h2&gt;
&lt;p&gt;Casse anônima é uma classe que não é declarada explicitamente no código.&lt;/p&gt;
&lt;p&gt;Elas possibilitam a você declarar e instanciar uma classe ao mesmo tempo.
Você não precisa nem mesmo dar um nome para a classe que você está criando.&lt;/p&gt;
&lt;p&gt;Veja no código abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;abstract&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClasseAbstrata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;abstract&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodoAbstrato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Principal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ClasseAbstrata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClasseAbstrata&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodoAbstrato&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Olá mundo!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;metodoAbstrato&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja abaixo um exemplo de excução deste código:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Como instanciar uma classe abstrata como classe anônima" src="/images/java-como-instanciar-uma-classe-abstrata-ou-interface/instanciar-classe-abstrata.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html" target="_blank"&gt;Doc: Anonymous classes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java"></category><category term="classe abstrata"></category><category term="interface"></category></entry><entry><title>Javascript: Como converter string em objeto JSON</title><link href="https://dicasdeprogramacao.com.br/javascript-como-converter-string-em-objeto-json/" rel="alternate"></link><published>2018-08-27T00:00:00-03:00</published><updated>2018-08-27T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-27:/javascript-como-converter-string-em-objeto-json/</id><summary type="html">&lt;p&gt;Suponha que você tenha uma String que representa um JSON válido e queira transformar esta String em um objeto JSON no javascript.&lt;/p&gt;
&lt;p&gt;Para fazer isso, basta utilizar o método &lt;code&gt;JSON.parse(texto)&lt;/code&gt;, passando a string como parâmetro.&lt;/p&gt;
&lt;p&gt;Veja um exemplo …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Suponha que você tenha uma String que representa um JSON válido e queira transformar esta String em um objeto JSON no javascript.&lt;/p&gt;
&lt;p&gt;Para fazer isso, basta utilizar o método &lt;code&gt;JSON.parse(texto)&lt;/code&gt;, passando a string como parâmetro.&lt;/p&gt;
&lt;p&gt;Veja um exemplo no código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{&amp;quot;atributo1&amp;quot;: &amp;quot;valor 1&amp;quot;, &amp;quot;atributo2&amp;quot;: 23}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Abaixo um exemplo de execução deste código no console do Chrome.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de conversão de uma string em um objeto json em Javascript" src="/images/javascript-como-converter-string-em-objeto-json/converte-string-para-json-em-javascript.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse" target="_blank"&gt;Mozila: JSON.parse&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="string"></category><category term="json"></category><category term="converter"></category></entry><entry><title>Python: Como converter date em string com formatacao</title><link href="https://dicasdeprogramacao.com.br/python-como-converter-date-em-string-com-formatacao/" rel="alternate"></link><published>2018-08-26T00:00:00-03:00</published><updated>2018-08-26T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-26:/python-como-converter-date-em-string-com-formatacao/</id><summary type="html">&lt;p&gt;Para converter um objeto date em em python, basta usar a função &lt;code&gt;strftime&lt;/code&gt; da classe &lt;code&gt;datetime.date&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O código abaixo exemplifica a conversão de uma data para string no formato mais utilizado no Brasil, ou seja &lt;code&gt;99/99/9999&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante …&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;Para converter um objeto date em em python, basta usar a função &lt;code&gt;strftime&lt;/code&gt; da classe &lt;code&gt;datetime.date&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O código abaixo exemplifica a conversão de uma data para string no formato mais utilizado no Brasil, ou seja &lt;code&gt;99/99/9999&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante&lt;/strong&gt;: Vamos usar uma data qualquer baseado
&lt;a href="https://dicasdeprogramacao.com.br/python-como-converter-string-em-date/" target="_blank"&gt;neste outro post aqui&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strptime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;26/08/2018&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s1"&gt;/%m/%Y&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;dataFormatada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s1"&gt;/%m/%Y&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataFormatada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;2018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;08&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;26&lt;/span&gt;
&lt;span class="mf"&gt;26&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;08&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;2018&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que quando mandamos imprimir o objeto &lt;code&gt;data&lt;/code&gt; na tela, o resultado foi uma formatação padrão do python &lt;code&gt;9999-99-99&lt;/code&gt;,
isso porque o objeto &lt;code&gt;data&lt;/code&gt; é do tipo &lt;code&gt;datetime.data&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mas quando mandamos imprimir o objeto &lt;code&gt;dataFormatada&lt;/code&gt; na tela, o resultado foi uma data com o formato que pedimos,
isso porque o objeto &lt;code&gt;dataFormatada&lt;/code&gt; é uma &lt;code&gt;string&lt;/code&gt; e recebeu o resultado do método &lt;code&gt;strftime(%d/%m/%Y)&lt;/code&gt; do objeto &lt;code&gt;data&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja um exemplo de execução deste código:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Como converter date em string em Python" src="/images/python-como-converter-date-em-string-com-formatacao/python-format-date-em-string.gif" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Outros formatos&lt;/h2&gt;
&lt;p&gt;Você também pode converter um objeto &lt;code&gt;date&lt;/code&gt; em &lt;code&gt;string&lt;/code&gt; usando outros formatos de data.
Para isso você precisa conhecer os formatos de data disponíveis no python.
Para ver todas as possibilidades de formatação de datas no python
&lt;a href="https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior" target="_blank"&gt;clique aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/datetime.html" target="_blank"&gt;Documentação: datetime&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python"></category><category term="String"></category><category term="date"></category><category term="formatação"></category></entry><entry><title>Intellij IDEA: Configuração para organizar imports de classe automaticamente</title><link href="https://dicasdeprogramacao.com.br/intellij-idea-configuracao-para-organizar-imports-de-classe-automaticamente/" rel="alternate"></link><published>2018-08-25T00:00:00-03:00</published><updated>2018-08-25T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-25:/intellij-idea-configuracao-para-organizar-imports-de-classe-automaticamente/</id><summary type="html">&lt;p&gt;Uma das primeiras dúvidas de quem migra do eclipse para o IntelliJ IDEA é:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual o atalho para organizar os imports do java, equivalente ao &lt;code&gt;CTRL + SHIFT + O&lt;/code&gt; do eclipse?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No intelliJ o atalho muda para &lt;strong&gt;&lt;code&gt;CTRL + ALT + O&lt;/code&gt;&lt;/strong&gt;. Mas …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Uma das primeiras dúvidas de quem migra do eclipse para o IntelliJ IDEA é:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual o atalho para organizar os imports do java, equivalente ao &lt;code&gt;CTRL + SHIFT + O&lt;/code&gt; do eclipse?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No intelliJ o atalho muda para &lt;strong&gt;&lt;code&gt;CTRL + ALT + O&lt;/code&gt;&lt;/strong&gt;. Mas este atalho apenas limpa os imports não utilizados.
Ou seja, não importa automaticamente classes sem ambiguidade, como no eclipse.&lt;/p&gt;
&lt;h2&gt;Configurando import automático no IntelliJ IDEA&lt;/h2&gt;
&lt;p&gt;Mas você pode configurar o IntelliJ para importar classes automaticamente, inclusive sem precisar pressionar o atalho &lt;strong&gt;&lt;code&gt;CTRL + ALT + O&lt;/code&gt;&lt;/strong&gt;. Para fazer essa configuração siga estes passos no menu.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;File –&amp;gt;&amp;gt; Settings –&amp;gt;&amp;gt; Editor –&amp;gt;&amp;gt; General –&amp;gt;&amp;gt; Auto Import&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;E marque estas opções:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;[X] &lt;strong&gt;Add unambiguous imports on the fly&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;[X] &lt;strong&gt;Optimize imports on the fly&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Assim:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Configuração para auto-import de classes no IntelliJ" src="/images/intellij-idea-configuracao-para-organizar-imports-de-classe-automaticamente/intellij-configuracao-atalho-auto-import.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Pronto, agora quando o IntelliJ identificar uma classe que não tenha ambiguidade de import, ele vai importar a classe e organizar os imports automaticamente seu código.
Isso é muito útil!&lt;/p&gt;
&lt;p&gt;Veja um exemplo de utilização...&lt;/p&gt;
&lt;p&gt;O IntelliJ não importa o &lt;code&gt;Map&lt;/code&gt; inicialmente por ser possível mais de um import possível (ou seja, ele ainda é ambíguo neste momento), mas quando eu especifico que a implementação da interface &lt;code&gt;Map&lt;/code&gt; é o &lt;code&gt;HashMap&lt;/code&gt;, o IntelliJ já importa a classe e a interface automaticamente, isso porque acaba a ambiguidade.&lt;/p&gt;
&lt;p&gt;E quando eu apago a linha que tem o &lt;code&gt;Map&lt;/code&gt; o &lt;code&gt;HashMap&lt;/code&gt;, o IntelliJ já remove os imports sem eu precisar pressionar nenhuma tecla!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de import automático no IntelliJ" src="/images/intellij-idea-configuracao-para-organizar-imports-de-classe-automaticamente/intellij-exemplo-auto-import.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Import de classes ambíguas&lt;/h2&gt;
&lt;p&gt;Classes ambíguas são as classes que podem ser encontradas em pacotes diferentes, com o mesmo nome.
Neste caso o IntelliJ não saberia escolher qual classe importar.&lt;/p&gt;
&lt;p&gt;Mas ainda assim, você pode informar o IntelliJ, qual classe você quer importar, para isso basta utilizar o atalho &lt;code&gt;Alt + Enter&lt;/code&gt; e selecionar a classe desejada.&lt;/p&gt;
&lt;p&gt;For ambiguous imports (same class name in a different package), you still need click on the class name and press ALT + ENTER keys to import the package manually.&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/help/idea/settings-auto-import.html#d2587995e32" target="_blank"&gt;Intellij IDEA Help: auto import&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="atalhos"></category><category term="Intellij IDEA"></category></entry><entry><title>Javascript: Como obter um array com os atributos/chaves de um objeto JSON</title><link href="https://dicasdeprogramacao.com.br/javascript-como-obter-um-array-com-os-atributoschaves-de-um-objeto-json/" rel="alternate"></link><published>2018-08-24T00:00:00-03:00</published><updated>2018-08-24T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-24:/javascript-como-obter-um-array-com-os-atributoschaves-de-um-objeto-json/</id><summary type="html">&lt;p&gt;Em algum momento da sua vida como desenvolvedor javascript,
você precisará saber quais são os atributos de um objeto JSON dinamicamente.
Ou seja, sem conhecer a estrutura do objeto previamente.&lt;/p&gt;
&lt;p&gt;Com javascript nós podemos obter um array com todos os …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Em algum momento da sua vida como desenvolvedor javascript,
você precisará saber quais são os atributos de um objeto JSON dinamicamente.
Ou seja, sem conhecer a estrutura do objeto previamente.&lt;/p&gt;
&lt;p&gt;Com javascript nós podemos obter um array com todos os atributos de um objeto JSON utilizando o método
&lt;code&gt;Object.keys()&lt;/code&gt; passando o objeto JSON como parâmetro.&lt;/p&gt;
&lt;p&gt;Confira o código abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;atributo1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;valor 1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;atributo2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;atributo3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;atributo4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;50.65&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[&amp;quot;atributo1&amp;quot;, &amp;quot;atributo2&amp;quot;, &amp;quot;atributo3&amp;quot;, &amp;quot;atributo4&amp;quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja um exemplo executado no console do Google Chrome.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo de captura de array com as chaves de um objeto json em Javascript" src="/images/javascript-como-obter-um-array-com-os-atributoschaves-de-um-objeto-json/array-com-chaves-de-um-objeto-json.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys" target="_blank"&gt;Mozila: Object.keys&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="array"></category><category term="json"></category></entry><entry><title>Java: Como ler variável de ambiente</title><link href="https://dicasdeprogramacao.com.br/java-como-ler-variavel-de-ambiente/" rel="alternate"></link><published>2018-08-23T00:00:00-03:00</published><updated>2018-08-23T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-23:/java-como-ler-variavel-de-ambiente/</id><summary type="html">&lt;p&gt;Ler uma variável de ambiente é muito simples com Java.
Basta chamar o método &lt;code&gt;System.getenv(String)&lt;/code&gt; informando o nome da variável de ambiente como parâmetro.&lt;/p&gt;
&lt;p&gt;Veja o código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerVariavelDeAmbiente&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Ler uma variável de ambiente é muito simples com Java.
Basta chamar o método &lt;code&gt;System.getenv(String)&lt;/code&gt; informando o nome da variável de ambiente como parâmetro.&lt;/p&gt;
&lt;p&gt;Veja o código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerVariavelDeAmbiente&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;variavelDeAmbiente&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;JAVA_HOME&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;variavelDeAmbiente&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;C:\Program Files\Java\jdk1.8.0_161
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; A variável de ambiente &lt;code&gt;JAVA_HOME&lt;/code&gt; já estava configurada na minha máquina no momento da execução.&lt;/p&gt;
&lt;p&gt;Você pode consultar o valor de qualquer variável de ambiente do seu sistema operacional.&lt;/p&gt;
&lt;h2&gt;Exemplo de execução&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Como ler variável de ambiente com Java" src="/images/java-como-ler-variavel-de-ambiente/ler-variavel-de-ambiente.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referência&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html" target="_blank"&gt;API: java.lang.System&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="System"></category></entry><entry><title>NodeJs: Como ler variável de ambiente</title><link href="https://dicasdeprogramacao.com.br/nodejs-como-ler-variavel-de-ambiente/" rel="alternate"></link><published>2018-08-23T00:00:00-03:00</published><updated>2018-08-23T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-23:/nodejs-como-ler-variavel-de-ambiente/</id><summary type="html">&lt;p&gt;Ler uma variável de ambiente é muito simples com Javascript.
As variáveis de ambiente dos seu SO são carregadas como atributos do objeto &lt;code&gt;process.env&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ou seja, você só precisa adicionar ponto (.) e o nome da variável de ambiente.&lt;/p&gt;
&lt;p&gt;Por …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ler uma variável de ambiente é muito simples com Javascript.
As variáveis de ambiente dos seu SO são carregadas como atributos do objeto &lt;code&gt;process.env&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ou seja, você só precisa adicionar ponto (.) e o nome da variável de ambiente.&lt;/p&gt;
&lt;p&gt;Por exemplo, pra acessar o valor da variável de ambiente &lt;code&gt;OS&lt;/code&gt; faça assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Uma outra forma é informando o nome da variável entre colchetes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;OS&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Exemplo de execução&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Como ler variável de ambiente com Javascript" src="/images/nodejs-como-ler-variavel-de-ambiente/ler-variavel-de-ambiente.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Assim você pode consultar o valor de qualquer variável de ambiente do seu sistema operacional.&lt;/p&gt;
&lt;h2&gt;Referência&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/dist/latest-v10.x/docs/api/process.html#process_process_env" target="_blank"&gt;Doc: process.env&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="process"></category><category term="nodejs"></category></entry><entry><title>Python: Como ler variavel de ambiente</title><link href="https://dicasdeprogramacao.com.br/python-como-ler-variavel-de-ambiente/" rel="alternate"></link><published>2018-08-23T00:00:00-03:00</published><updated>2018-08-23T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-23:/python-como-ler-variavel-de-ambiente/</id><summary type="html">&lt;p&gt;As variáveis de ambiente do sistema operacional são acessíveis através do dicionário &lt;code&gt;os.environ&lt;/code&gt; do pacote &lt;code&gt;os&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Portanto, para acessar o valor de uma variável de ambiente em Python,
basta passar o nome da variável de ambiente entre colchetes no …&lt;/p&gt;</summary><content type="html">&lt;p&gt;As variáveis de ambiente do sistema operacional são acessíveis através do dicionário &lt;code&gt;os.environ&lt;/code&gt; do pacote &lt;code&gt;os&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Portanto, para acessar o valor de uma variável de ambiente em Python,
basta passar o nome da variável de ambiente entre colchetes no &lt;code&gt;os.environ['NOME-DA-VARIÁVEL-DE-AMBIENTE']&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O código abaixo mostra um exemplo de como acessar a variável de ambiente chamada &lt;code&gt;OS&lt;/code&gt; no meu sistema operacional.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;OS&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Windows_NT
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; A variável de ambiente &lt;code&gt;OS&lt;/code&gt; já estava configurada na minha máquina no momento da execução.&lt;/p&gt;
&lt;p&gt;Você pode consultar o valor de qualquer variável de ambiente do seu sistema operacional.&lt;/p&gt;
&lt;h2&gt;Exemplo de execução&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Como ler variável de ambiente com Python" src="/images/python-como-ler-variavel-de-ambiente/ler-variavel-de-ambiente.gif" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Referência&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/os.html#os.environ" target="_blank"&gt;Doc: os.environ&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="system"></category></entry><entry><title>Como fazer uma requisicao HTTP GET com javascript puro</title><link href="https://dicasdeprogramacao.com.br/como-fazer-uma-requisicao-http-get-com-javascript-puro/" rel="alternate"></link><published>2018-08-10T00:00:00-03:00</published><updated>2018-08-10T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-10:/como-fazer-uma-requisicao-http-get-com-javascript-puro/</id><summary type="html">&lt;p&gt;Este post mostra como fazer uma requisição HTTP com javascript puro, ou seja sem usar frameworks como jQuery.
Para isso basta utilizar a API &lt;strong&gt;XMLHttpRequest&lt;/strong&gt; nativa do javascript.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Disponibilizei um arquivo texto para utilizarmos como exemplo no endereço:
&lt;a href="https://dicasdeprogramacao.com.br/images/como-fazer-uma-requisicao-http-get-com-javascript-puro/exemplo.txt"&gt;https://dicasdeprogramacao …&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;Este post mostra como fazer uma requisição HTTP com javascript puro, ou seja sem usar frameworks como jQuery.
Para isso basta utilizar a API &lt;strong&gt;XMLHttpRequest&lt;/strong&gt; nativa do javascript.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Disponibilizei um arquivo texto para utilizarmos como exemplo no endereço:
&lt;a href="https://dicasdeprogramacao.com.br/images/como-fazer-uma-requisicao-http-get-com-javascript-puro/exemplo.txt"&gt;https://dicasdeprogramacao.com.br/images/como-fazer-uma-requisicao-http-get-com-javascript-puro/exemplo.txt&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O código abaixo mostra a forma mais simples, embora não indicada, de fazer uma requisição GET com javascript.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://dicasdeprogramacao.com.br/images/como-fazer-uma-requisicao-http-get-com-javascript-puro/exemplo.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//Sua URL&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//A execução do script pára aqui até a requisição retornar do servidor&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O código acima faz uma requisição &lt;strong&gt;síncrona&lt;/strong&gt; (pois o terceiro parâmetro da função &lt;code&gt;open&lt;/code&gt; é &lt;code&gt;false&lt;/code&gt;).
Ou seja, a execução do código pára no método &lt;code&gt;send()&lt;/code&gt; enquanto a requisição não retorna do servidor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; O suporte à requisições síncronas com XMLHttpRequest será removido em versões futuras do javascript.
Por isso é mais &lt;strong&gt;indicado fazer requisições assíncronas&lt;/strong&gt;! Embora esse processo de remoção possa demorar anos.&lt;/p&gt;
&lt;p&gt;Com requisições assíncronas, o código continua sendo executado mesmo que o servidor não tenha respondido à requisição ainda.&lt;/p&gt;
&lt;p&gt;O código abaixo mostra como fazer uma requisição HTTP &lt;strong&gt;assíncrona&lt;/strong&gt; com &lt;code&gt;XMLHttpRequest&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://dicasdeprogramacao.com.br/images/como-fazer-uma-requisicao-http-get-com-javascript-puro/exemplo.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//Sua URL&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onreadystatechange&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="c1"&gt;//Função a ser chamada quando a requisição retornar do servidor&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="c1"&gt;//Verifica se o retorno do servidor deu certo&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//A execução do script CONTINUARÁ mesmo que a requisição não tenha retornado do servidor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Repare que a execução do código principal não vai parar agora que o terceiro parâmetro da função &lt;code&gt;open&lt;/code&gt; é &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O retorno da requisição é recuperado pela função configurada no atributo &lt;code&gt;onreadystatechange&lt;/code&gt; do seu objeto &lt;code&gt;XMLHttpRequest&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Exemplo completo&lt;/h2&gt;
&lt;p&gt;O código abaixo mostra um exemplo completo de código javascript que implementa o exemplo acima, embutido em uma página HTML simples.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Exemplo de requisição HTTP GET com javascript puro&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;url&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;width:300px;&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://dicasdeprogramacao.com.br/images/como-fazer-uma-requisicao-http-get-com-javascript-puro/exemplo.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onclick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fazerRequisicao();&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Fazer requisição&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;hr&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;resposta&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fazerRequisicao&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//A execução do script pára aqui até a requisição retornar do servidor&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;resposta&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja abaixo o resultado deste código.&lt;/p&gt;
&lt;p&gt;&lt;img alt="execução de uma requisição http get com javascript puro" src="/images/como-fazer-uma-requisicao-http-get-com-javascript-puro/resultado.gif" style="width:100%;padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Qualquer dúvidas, fique a vontade para postar nos comentários.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/API/XMLHTTPRequest" target="_blank"&gt;Mozila: XMLHttpRequest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/dicasdejavascript.com.br/tree/master/content/examples/exemplo-http-get-request/" target="_blank"&gt;Código-fonte&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Javascript }"></category><category term="iniciante"></category><category term="request"></category><category term="http"></category><category term="javascript"></category></entry><entry><title>Pandas: Como construir um DataFrame a partir de um dicionário</title><link href="https://dicasdeprogramacao.com.br/pandas-como-construir-um-dataframe-a-partir-de-um-dicionario/" rel="alternate"></link><published>2018-08-07T00:00:00-03:00</published><updated>2018-08-07T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-07:/pandas-como-construir-um-dataframe-a-partir-de-um-dicionario/</id><summary type="html">&lt;p&gt;Há muitas formas de criar dataframes do pandas e já falamos aqui sobre
&lt;a href="https://dicasdepython.com.br/pandas-como-criar-um-dataframe-vazio/" target="_blank"&gt;como criar um DataFrame vazio&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vamos ver neste post como criar um dataframe a partir de um dicionário (objeto).&lt;/p&gt;
&lt;p&gt;Primeiro temos que importar a biblioteca pandas para …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Há muitas formas de criar dataframes do pandas e já falamos aqui sobre
&lt;a href="https://dicasdepython.com.br/pandas-como-criar-um-dataframe-vazio/" target="_blank"&gt;como criar um DataFrame vazio&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vamos ver neste post como criar um dataframe a partir de um dicionário (objeto).&lt;/p&gt;
&lt;p&gt;Primeiro temos que importar a biblioteca pandas para criar o nosso dataframe.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora, vamos criar um objeto dicionário de exemplo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;col1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;col2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Com o objeto podemos criar o dataframe passando-o como parâmetro &lt;code&gt;data&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;   col1  col2
0     1     3
1     2     4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; Repare que as chaves do dicionário definem as colunas do dataframe.&lt;/p&gt;
&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html" target="_blank"&gt;Documentação: DataFrame&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="Pandas"></category><category term="DataFrame"></category></entry><entry><title>Como executar testes do jUnit pela linha de comando</title><link href="https://dicasdeprogramacao.com.br/como-executar-testes-do-junit-pela-linha-de-comando/" rel="alternate"></link><published>2018-08-04T00:00:00-03:00</published><updated>2018-08-04T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-04:/como-executar-testes-do-junit-pela-linha-de-comando/</id><summary type="html">&lt;p&gt;A forma mais comum de executar os testes do Junit pela linha de comando é utilizando o maven, com o seguinte comando.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mvn test
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mas e se você não estiver utilizando o maven, como executar os testes do jUnit pela …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A forma mais comum de executar os testes do Junit pela linha de comando é utilizando o maven, com o seguinte comando.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mvn test
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mas e se você não estiver utilizando o maven, como executar os testes do jUnit pela linha de comandos?&lt;/p&gt;
&lt;p&gt;Vamos ver como fazer isso com o exemplo abaixo.&lt;/p&gt;
&lt;p&gt;Primeiro criamos a classe de exemplo que será testada no arquivo &lt;code&gt;ClasseASerTestada.java&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClasseASerTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodoASerTestado&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora a classe que tem o teste do junit no arquivo &lt;code&gt;ClasseDeTeste.java&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.junit.Assert.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.junit.Test&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClasseDeTeste&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;teste&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ClasseASerTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClasseASerTestada&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retornoDoMetodo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;metodoASerTestado&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retornoDoMetodo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Download dos jars do jUnit&lt;/h2&gt;
&lt;p&gt;Para utilizar as classes do jUnit, nós precisamos colocar os jars do junit no classpath.
Neste exemplo vamos colocar os jars do jUnit na própria pasta onde estão os nossos arquivos &lt;code&gt;.java&lt;/code&gt;. Você pode baixar os arquivos .jar do jUnit &lt;a href="https://github.com/junit-team/junit4/wiki/Download-and-Install" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/junit-team/junit4/wiki/Download-and-Install" target="_blank"&gt;&lt;img alt="Download dos jars do Junit" src="/images/como-executar-testes-do-junit-pela-linha-de-comando/junit-download-jars.png" style="width:100%; padding:10px;"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agora temos os seguintes arquivos na nossa pasta.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Duas classes e os arquivos jar na pasta" src="/images/como-executar-testes-do-junit-pela-linha-de-comando/classes-e-arquivos-jar.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Compilação&lt;/h2&gt;
&lt;p&gt;O próximo passo é compilar as nossas duas classes, especificando os arquivos .jar do jUnit no classpath.&lt;/p&gt;
&lt;p&gt;Primeiro compilamos a classe &lt;code&gt;ClasseASerTestada.java&lt;/code&gt; com o seguinte comando:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;javac ClasseASerTestada.java
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pronto. Em seguinda vamos compilar a classe que tem o teste do jUnit, desta vez precisamos expecificar o arquivo jar do jUnit no classpath no comando:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;javac -cp junit-4.12.jar;. ClasseDeTeste.java
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que para compilar precisamos especificar o classpath com o parâmetro &lt;code&gt;-cp&lt;/code&gt;.
Informamos que o classpath é o arquivo junit-4.12.jar e a pasta atual: &lt;code&gt;junit-4.12.jar;.&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Se você estiver no linux, troque o &lt;code&gt;;&lt;/code&gt; por &lt;code&gt;:&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Execução do jUnit via linha de comando&lt;/h2&gt;
&lt;p&gt;Agora que já compilamos nossas classes, podemos executar os nossos testes do jUnit com o comando abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;java -cp junit-4.12.jar;hamcrest-core-1.3.jar;. org.junit.runner.JUnitCore ClasseDeTeste
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Duas coisas importantes a serem observadas neste comando.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Nosso classpath é composto por dois jars (&lt;code&gt;junit-4.12.jar;hamcrest-core-1.3.jar&lt;/code&gt;) e as classes que estão na pasta local (&lt;code&gt;.&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Com o comando &lt;code&gt;java&lt;/code&gt; nós executamos a classe &lt;code&gt;org.junit.runner.JUnitCore&lt;/code&gt;, passando o nome da nossa classe de Teste &lt;code&gt;ClasseDeTeste&lt;/code&gt; como parâmetro.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O resultado deste comando é esse:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;JUnit version 4.12
.
Time: 0,003

OK (1 test)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ou seja, o jUnit executou o nosso teste. ;)&lt;/p&gt;
&lt;p&gt;Dúvidas nos comentários...&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/junit-team/junit4/wiki/Download-and-Install" target="_blank"&gt;Download do Junit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/dicasdejava.com.br/tree/master/content/examples/junit-linha-de-comando/" target="_blank"&gt;Código fonte utilizado&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Junit"></category></entry><entry><title>Java: Como limpar a tela do console</title><link href="https://dicasdeprogramacao.com.br/java-como-limpar-a-tela-do-console/" rel="alternate"></link><published>2018-08-03T00:00:00-03:00</published><updated>2018-08-03T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-03:/java-como-limpar-a-tela-do-console/</id><summary type="html">&lt;p&gt;Para limpar a tela do console nós utilizamos o comando &lt;code&gt;cls&lt;/code&gt; no Windows e &lt;code&gt;clear&lt;/code&gt; no Linux e no MacOS.&lt;/p&gt;
&lt;p&gt;Para limpar a tela do console com Java nós temos que verificar qual o sistema operacional estamos utilizando e executar …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para limpar a tela do console nós utilizamos o comando &lt;code&gt;cls&lt;/code&gt; no Windows e &lt;code&gt;clear&lt;/code&gt; no Linux e no MacOS.&lt;/p&gt;
&lt;p&gt;Para limpar a tela do console com Java nós temos que verificar qual o sistema operacional estamos utilizando e executar o respectivo comando.&lt;/p&gt;
&lt;p&gt;No exemplo abaixo, nós escrevemos &lt;code&gt;Teste&lt;/code&gt; no console, lemos um texto que o usuário digitar através da classe Scanner pra vermos o programa "parar".
E após o ENTER o programa limpa a tela. Veja o código:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/java-como-ler-dados-do-console-com-a-classe-scanner/" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Java: Como ler dados do Console com a classe Scanner&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LimpaConsole&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Limpa a tela no windows, no linux e no MacOS&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;os.name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Windows&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ProcessBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cmd&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cls&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;inheritIO&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;waitFor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRuntime&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;clear&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Resultado&lt;/h2&gt;
&lt;p&gt;Veja abaixo a execução deste programa no Windows.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Limpando a tela do console com Java" src="/images/java-como-limpar-a-tela-do-console/java-limpa-console.gif" width="100%"&gt;&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="console"></category><category term="Scanner"></category></entry><entry><title>Python: Como limpar a tela do console</title><link href="https://dicasdeprogramacao.com.br/python-como-limpar-a-tela-do-console/" rel="alternate"></link><published>2018-08-03T00:00:00-03:00</published><updated>2018-08-03T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-03:/python-como-limpar-a-tela-do-console/</id><summary type="html">&lt;p&gt;Para limpar a tela do console com python nós precisamos executar o comando  &lt;code&gt;clear&lt;/code&gt;
utilizando a função &lt;code&gt;system&lt;/code&gt; da biblioteca padrão &lt;code&gt;os&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Além disso, nós podemos forçar o retorno ser "None" para não sobrar um "0" no prompt do python …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para limpar a tela do console com python nós precisamos executar o comando  &lt;code&gt;clear&lt;/code&gt;
utilizando a função &lt;code&gt;system&lt;/code&gt; da biblioteca padrão &lt;code&gt;os&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Além disso, nós podemos forçar o retorno ser "None" para não sobrar um "0" no prompt do python.&lt;/p&gt;
&lt;p&gt;Veja no código a seguir.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;clear&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Resultado&lt;/h2&gt;
&lt;p&gt;Veja abaixo a execução deste programa.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Limpando a tela do console com Python" src="/images/python-como-limpar-a-tela-do-console/python-limpar-console.gif" width="100%"&gt;&lt;/p&gt;</content><category term=": Dicas de Python :"></category><category term="console"></category><category term="system"></category></entry><entry><title>Java, Python ou Javascript?</title><link href="https://dicasdeprogramacao.com.br/java-python-ou-javascript/" rel="alternate"></link><published>2018-08-01T00:00:00-03:00</published><updated>2018-08-01T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-01:/java-python-ou-javascript/</id><summary type="html">&lt;p&gt;A dúvida que fica martelando na cabeça da maioria das pessoas que estão iniciando a carreira como programador é:
&lt;strong&gt;Que linguagem de programação eu devo aprender?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se você está se perguntando isso, a minha resposta sempre será um conjunto de …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A dúvida que fica martelando na cabeça da maioria das pessoas que estão iniciando a carreira como programador é:
&lt;strong&gt;Que linguagem de programação eu devo aprender?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se você está se perguntando isso, a minha resposta sempre será um conjunto de perguntas de volta pra você, por exemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qual o objetivo que você pretende alcançar?&lt;/li&gt;
&lt;li&gt;Você está querendo aprender uma nova linguagem pra quê?&lt;/li&gt;
&lt;li&gt;Você está querendo aprender uma nova linguagem pra conseguir um emprego?&lt;/li&gt;
&lt;li&gt;Você já sabe programar em alguma linguagem?&lt;/li&gt;
&lt;li&gt;Você sabe o mínimo de lógica de programação?&lt;/li&gt;
&lt;li&gt;Você quer criar aplicativos para Smartphones?&lt;/li&gt;
&lt;li&gt;Você quer criar aplicativos para SmartTVs?&lt;/li&gt;
&lt;li&gt;Você quer desenvolver sistemas para a Web?&lt;/li&gt;
&lt;li&gt;Você quer criar sistemas embarcados?&lt;/li&gt;
&lt;li&gt;Você quer fazer macros no excel?&lt;/li&gt;
&lt;li&gt;Você quer trabalhar com Machine Learning, BigData, Mineração de dados, Ciência de Dados, Business Inteligence, Inteligência Artificial, Inteligência Computacional, Machine Intelligence (esse eu aprendi mês passado), ou &amp;lt;Insira aqui o nome modinha que surgiu depois que este post foi publicado&amp;gt;?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enfim, nenhuma linguagem resolve todos os problemas da humanidade.
Então é muito importante você definir o que pretender alcançar,
para aí sim, decidir a linguagem de programação que você deve aprender.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Se você não sabe nada de programação&lt;/strong&gt; e está fazendo essa pergunta, leia este post que escrevi em 2013, mas continua atual:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank"&gt;&amp;gt;&amp;gt; Quer aprender programação? Saiba qual a melhor linguagem!&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Mas várias linguagens resolvem o meu problema&lt;/h2&gt;
&lt;p&gt;E se você já sabe um mínimo de programação e mesmo depois do que eu falei acima você ainda está na dúvida,
pois duas ou mais linguagens servem para o que você quer fazer, continue lendo...&lt;/p&gt;
&lt;p&gt;O mundo do desenvolvimento de softwares é interessante justamente por possibilitar que a mesma coisa seja feita de várias formas diferentes, mas as bases são sempre as mesmas.&lt;/p&gt;
&lt;p&gt;Desde um simples algorítmo onde você pode resolver um problema com um 
&lt;a href="https://dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/"&gt;loop&lt;/a&gt;
ou com uma função recursiva, até os infinitos frameworks para frontend de aplicações web/mobile,
quase sempre tem mais de um jeito de resolver o mesmo problema,
inclusive quase sempre é possível utilizar mais de uma linguagem de programação.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Java, Python ou Javascript" class="aligncenter" src="/images/java-python-ou-javascript/destaque.png"&gt;&lt;/p&gt;
&lt;p&gt;E isso acaba causando muita discussão por aí. Dá até briga ...&lt;/p&gt;
&lt;p&gt;Java é melhor que C#!
Python é muito mais fácil!
Javascript está em todo lugar!
Faço isso em 2 minutos com Ruby! C, C++ é muito mais rápido!
70%-80% dos sites do mundo são feitos com PHP, conhece Wordpress?
Quem disse que tenho que saber lógica pra programar em Lisp?
Etc, etc, etc.&lt;/p&gt;
&lt;p&gt;Esse é o tipo de discussão que não vale a pena ficar dando &lt;em&gt;scroll&lt;/em&gt; nos comentários
pois a maioria não sabe o que está falando.&lt;/p&gt;
&lt;p&gt;No fundo, o que você precisa fazer pra escolher a sua próxima linguagem de programação ou framework predileto é analisar qual tem mais &lt;strong&gt;suporte&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;E quando digo suporte não me refiro a ter uma "grande" empresa por trás.
Muitas linguagens/frameworks por aí são &lt;em&gt;opensource&lt;/em&gt; e não tem "dono", é da comunidade.&lt;/p&gt;
&lt;p&gt;Mas mesmo assim é importante você observar se tem &lt;strong&gt;suporte&lt;/strong&gt;,
muitas linguagens/frameworks independentemente se tinham grandes empresas ou a "comunidade" por trás,
não vingaram. Por que?&lt;/p&gt;
&lt;h2&gt;Pessoas se agrupam&lt;/h2&gt;
&lt;p&gt;As pessoas usam o que a maioria usa e se você for da área de &lt;em&gt;marketing&lt;/em&gt; deve perceber aqui o clássico princípio da &lt;strong&gt;prova social&lt;/strong&gt;: a cafeteria mais cheia deve ser a melhor ;).&lt;/p&gt;
&lt;p&gt;Se esta linguagem/framework/tecnologia tem muita gente usando deve ser a/o melhor...&lt;/p&gt;
&lt;p&gt;E com muitas pessoas utilizando um mesmo produto, mais prova social. Isso vira uma grande bola de neve.
Forma-se uma &lt;strong&gt;comunidade&lt;/strong&gt; e como consequência a linguagem/framework melhora.&lt;/p&gt;
&lt;p&gt;Se no passado era bom e agora ficou ruim/obsoleto, mas a comundade é grande e boa,
a linguagem/framework vai evoluir, mesmo se for difícil.&lt;/p&gt;
&lt;p&gt;O Wordpress, por exemplo, tá aí pra provar isso. Tem suporte!&lt;/p&gt;
&lt;p&gt;O Wordpress começou a muitos anos atrás com versões antigas do PHP e do MySQL.
As tecnologias que suportam o Wordpress evoluíram e o Wordpress se atualizou,
"só" porque é o CMS mais utilizado no mundo e que mais
impulssionou a criação de blogs e sites na última década.&lt;/p&gt;
&lt;p&gt;Se formos falar de linguagens, Java, C#, Javascript, Python, PHP, idem. Todos eles se atualizam de alguma forma. Principalmente porque todos eles têm um bom &lt;strong&gt;suporte&lt;/strong&gt; por trás.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Se pararmos para pensar, as tecnologias do passado são difíceis de se utilizar
e as novas são cheias de falhas que as antigas não tem.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por isso não é tão difícil entender a divergência nas decisões entre o &lt;strong&gt;suporte&lt;/strong&gt; do java e o &lt;strong&gt;suporte&lt;/strong&gt; do python, por exemplo. E no final das contas, nem podemos acusar um ou outro...&lt;/p&gt;
&lt;p&gt;A galera do Java se esforça pra manter a compatibilidade com as versões anteriores,
enquanto a galera do Python meio que "chutou o balde" entre as versões 2.* e 3.* pra avançar muito mais rápido.&lt;/p&gt;
&lt;p&gt;No fundo, a galera do Python confiou que a &lt;strong&gt;comunidade&lt;/strong&gt; vai atualizar suas bibliotecas
para evoluir a linguagem.&lt;/p&gt;
&lt;p&gt;E não tem nada de errado com nenhum desses dois pensamentos. A pergunta importante que você deve fazer é: Terá &lt;strong&gt;suporte&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;A galera tá usando o framework [Vue, Embler, Angular, React, blablabla)? Tem(vai ter) suporte?&lt;/p&gt;
&lt;h2&gt;Dicas de Java, de Python e de Javascript&lt;/h2&gt;
&lt;p&gt;Nos últimos anos eu trabalhei bastante com Java, Python e Javascript.
Também trabalhei com C# durante bastante tempo,
mas atualmente não estou muito em contato com esta última.&lt;/p&gt;
&lt;p&gt;O fato é que nos últimos 2 meses eu voltei a me dedicar ao &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;,
e enquanto eu estava planejando os próximos conteúdos do blog eu me deparei com um problema.&lt;/p&gt;
&lt;p&gt;Acho que seria muito confuso gerar conteúdo sobre várias linguagens de programação,
misturando tudo aqui neste blog.&lt;/p&gt;
&lt;p&gt;Estou criando conteúdos práticos com dicas sobre estas 3 linguagens,
dicas do dia-a-dia, tutoriais de como resolver problemas com estas linguagens.&lt;/p&gt;
&lt;p&gt;Misturar todos estes posts aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;
acabaria por gerar mais confusão do que ajudar a quem está iniciando
neste mundo de desenvolvimento de softwares.
Então eu comprei 3 domínios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dicasdejava.com.br/"&gt;dicasdejava.com.br&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dicasdepython.com.br/"&gt;dicasdepython.com.br&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dicasdejavascript.com.br"&gt;dicasdejavascript.com.br&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O objetivo é organizar as coisas e o foco de cada blog.&lt;/p&gt;
&lt;p&gt;Você pode estar pensando que isto vai gerar um custo muito maior para mim.
O custo a mais é apenas o registro desses 3 domínios.
Assim como este blog aqui, manter os outros 3 blogs vai me gerar custo próximo de zero
conforme já falei &lt;a href="https://dicasdeprogramacao.com.br/porque-utilizar-ssg-para-criacao-de-blogs/"&gt;neste post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;E você também pode participar!
Se quiser saber como fazer alguma coisa específica nestas linguagens,
basta acessar os blogs, clicar no link &lt;strong&gt;"Pedir dica!"&lt;/strong&gt; disponível nos 3 blogs
e pedir uma explicação sobre a sua dúvida.&lt;/p&gt;
&lt;p&gt;Além disso, você também pode contribuir com os blogs criando &lt;em&gt;guest posts&lt;/em&gt;.
O código dos blogs estão disponíveis no meu &lt;a href="https://github.com/gustavofoa"&gt;github&lt;/a&gt;.
Para contribuir, basta fazer um &lt;strong&gt;Pull Request&lt;/strong&gt; lá. ;)&lt;/p&gt;
&lt;p&gt;Esta é uma forma que encontrei de contribuir mais com a comunidade
e abrir mais as portas para diálogo, troca de conhecimento e &lt;strong&gt;suporte&lt;/strong&gt; à quem precisa.&lt;/p&gt;
&lt;p&gt;O que achou da novidade?&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="Blogs"></category></entry><entry><title>Primeiro programa em Javascript</title><link href="https://dicasdeprogramacao.com.br/primeiro-programa-em-javascript/" rel="alternate"></link><published>2018-08-01T00:00:00-03:00</published><updated>2018-08-01T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-08-01:/primeiro-programa-em-javascript/</id><summary type="html">&lt;p&gt;A forma mais simples de criar um programa com javascript é através de páginas HTML.
Isso porque os browsers interpretam javascript nativamente.&lt;/p&gt;
&lt;p&gt;Isso significa que você não precisa instalar nada em seu computador para rodar um programa 
escrito javascript, basta …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A forma mais simples de criar um programa com javascript é através de páginas HTML.
Isso porque os browsers interpretam javascript nativamente.&lt;/p&gt;
&lt;p&gt;Isso significa que você não precisa instalar nada em seu computador para rodar um programa 
escrito javascript, basta ter um browser.&lt;/p&gt;
&lt;p&gt;Vejamos então como criar o seu primeiro código javascript com HTML.&lt;/p&gt;
&lt;p&gt;crie um arquivo com a extensão &lt;code&gt;.html&lt;/code&gt;, por exemplo &lt;code&gt;hello-world.html&lt;/code&gt;
e escreva o conteúdo abaixo nele. Para isso abra o arquivo em algum editor de texto.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Título&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Meu primeiro programa javascript.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ao executar o arquivo (dois cliques), a página HTML será carregada em um browser,
o código javascript que está dentro da tag &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; será executado,
apresando a mensagem na tela.&lt;/p&gt;
&lt;p&gt;Se tiver alguma dúvida, poste aí nos comentários.&lt;/p&gt;</content><category term="{ Dicas de Javascript }"></category><category term="iniciante"></category><category term="javascript"></category></entry><entry><title>Como escrever arquivos CSV em java</title><link href="https://dicasdeprogramacao.com.br/como-escrever-arquivos-csv-em-java/" rel="alternate"></link><published>2018-07-19T00:00:00-03:00</published><updated>2018-07-19T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-19:/como-escrever-arquivos-csv-em-java/</id><summary type="html">&lt;p&gt;Existem várias formas de escrever arquivos CSV em Java.
Neste post vamos ver como criar arquivos CSV em java com o auxílio da biblioteca open-source &lt;strong&gt;OpenCSV&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/como-ler-arquivos-csv-em-java/" target="_blank"&gt;&amp;gt;&amp;gt; Como ler arquivos CSV em java&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;OpenCSV como dependência (maven)&lt;/h2&gt;
&lt;p&gt;Para utilizar o &lt;strong&gt;OpenCSV …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Existem várias formas de escrever arquivos CSV em Java.
Neste post vamos ver como criar arquivos CSV em java com o auxílio da biblioteca open-source &lt;strong&gt;OpenCSV&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/como-ler-arquivos-csv-em-java/" target="_blank"&gt;&amp;gt;&amp;gt; Como ler arquivos CSV em java&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;OpenCSV como dependência (maven)&lt;/h2&gt;
&lt;p&gt;Para utilizar o &lt;strong&gt;OpenCSV&lt;/strong&gt; você precisa importá-lo como dependência no seu projeto.
Se você estiver utilizando o &lt;em&gt;Maven&lt;/em&gt;, basta adicionar a seguinte dependência no seu arquivo &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.opencsv&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;opencsv&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;4.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Escrevendo CSV como uma lista de String[]&lt;/h3&gt;
&lt;p&gt;Uma situação simples é quando você tem uma lista de arrays de String, ou seja &lt;code&gt;List&amp;lt;String[]&amp;gt;&lt;/code&gt;,
e quer escrever esses arrays como registros de um csv.
Veja no código abaixo como fazer isso com o &lt;strong&gt;OpenCSV&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util.csv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.CSVWriter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.Writer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Files&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Paths&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.ArrayList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CriarCsvComStringsOpenCsv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cabecalho&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nome&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;idade&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;telefone&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;linhas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;linhas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Joao&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;35&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;joao@dicasdejava.com.br&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;linhas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;23&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;maria@dicasdeprogramacao.com.br&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;linhas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;25&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ana@dicasdejava.com.br&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Writer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newBufferedWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Paths&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pessoas.csv&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CSVWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSVWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;csvWriter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeNext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cabecalho&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;csvWriter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;linhas&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;csvWriter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;flush&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Escrevendo CSV como um objeto&lt;/h3&gt;
&lt;p&gt;Outra forma interessante de criar um CSV é quando você tem uma lista de objetos de uma Classe que deve representar uma linha no csv.&lt;/p&gt;
&lt;p&gt;Para isto, vamos criar como exemplo a classe CsvPessoa com os atributos contidos no CSV.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.csv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CsvPessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CsvPessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;idade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Gets e Sets omitidos para ficar menor&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora vamos escrever o CSV com uma lista de pessoas, ou seja &lt;code&gt;List&amp;lt;CsvPessoa&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util.csv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.bean.StatefulBeanToCsv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.bean.StatefulBeanToCsvBuilder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.exceptions.CsvDataTypeMismatchException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.exceptions.CsvRequiredFieldEmptyException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.Writer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Files&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Paths&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.ArrayList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CriarCsvComObjetosOpenCsv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CsvDataTypeMismatchException&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CsvRequiredFieldEmptyException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Joao&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;joao@dicasdejava.com.br&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;maria@dicasdeprogramacao.com.br&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ana@dicasdejava.com.br&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Writer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newBufferedWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Paths&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pessoas.csv&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;StatefulBeanToCsv&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;beanToCsv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StatefulBeanToCsvBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;beanToCsv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;flush&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A Saída dos dois programas acima é um arquivo &lt;code&gt;pessoas.csv&lt;/code&gt; com o conteúdo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;
&lt;span class="n"&gt;joao&lt;/span&gt;&lt;span class="nv"&gt;@dicasdejava&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;Joao&lt;/span&gt;
&lt;span class="n"&gt;maria&lt;/span&gt;&lt;span class="nv"&gt;@dicasdeprogramacao&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;Maria&lt;/span&gt;
&lt;span class="n"&gt;ana&lt;/span&gt;&lt;span class="nv"&gt;@dicasdejava&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;Ana&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://opencsv.sourceforge.net/" target="_blank"&gt;OpenCSV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/examples.dicasdejava.com.br/tree/master/src/main/java/br/com/dicasdejava/util/csv" target="_blank"&gt;Códigos-fonte deste post&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="CSV"></category><category term="IO"></category></entry><entry><title>Como ler arquivos CSV em python</title><link href="https://dicasdeprogramacao.com.br/como-ler-arquivos-csv-em-python/" rel="alternate"></link><published>2018-07-19T00:00:00-03:00</published><updated>2018-07-19T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-19:/como-ler-arquivos-csv-em-python/</id><summary type="html">&lt;p&gt;Existem várias formas de ler arquivos CSV em Python. Por padrão o python já oferece um pacote para trabalharmos com arquivos CSV.&lt;/p&gt;
&lt;p&gt;Neste post vamos ver como ler arquivos CSV usando o pacote &lt;code&gt;csv&lt;/code&gt; do python.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/como-ler-arquivos-csv-em-java/" target="_blank"&gt;&amp;gt;&amp;gt; Como ler arquivos CSV …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Existem várias formas de ler arquivos CSV em Python. Por padrão o python já oferece um pacote para trabalharmos com arquivos CSV.&lt;/p&gt;
&lt;p&gt;Neste post vamos ver como ler arquivos CSV usando o pacote &lt;code&gt;csv&lt;/code&gt; do python.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/como-ler-arquivos-csv-em-java/" target="_blank"&gt;&amp;gt;&amp;gt; Como ler arquivos CSV em java&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;CSV de exemplo&lt;/h2&gt;
&lt;p&gt;Para os exemplos destes post, vamos usar um CSV simples.
Considere que o arquivo &lt;code&gt;pessoas.csv&lt;/code&gt; esteja em algum lugar acessível para o seu programa python e tenha este conteúdo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;
&lt;span class="n"&gt;Gustavo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;gustavo&lt;/span&gt;&lt;span class="nv"&gt;@dicasdeprogramcao&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Joao&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;joao&lt;/span&gt;&lt;span class="nv"&gt;@dicasdepython&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Maria&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;maria&lt;/span&gt;&lt;span class="nv"&gt;@dicasdeprogramacao&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Ana&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ana&lt;/span&gt;&lt;span class="nv"&gt;@dicasdepython&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Lendo CSV como array de Strings em python&lt;/h3&gt;
&lt;p&gt;O código abaixo mostrar como ler o arquivo CSV como um array de Strings e imprime na tela os valores de cada linha separadamente.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;

&lt;span class="n"&gt;arquivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pessoas.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;linhas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arquivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;linha&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;linhas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;linha&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[&amp;#39;nome&amp;#39;, &amp;#39;idade&amp;#39;, &amp;#39;email&amp;#39;]&lt;/span&gt;
&lt;span class="k"&gt;[&amp;#39;Gustavo&amp;#39;, &amp;#39;28&amp;#39;, &amp;#39;gustavo@dicasdeprogramcao.com.br&amp;#39;]&lt;/span&gt;
&lt;span class="k"&gt;[&amp;#39;Joao&amp;#39;, &amp;#39;35&amp;#39;, &amp;#39;joao@dicasdepython.com.br&amp;#39;]&lt;/span&gt;
&lt;span class="k"&gt;[&amp;#39;Maria&amp;#39;, &amp;#39;23&amp;#39;, &amp;#39;maria@dicasdeprogramacao.com.br&amp;#39;]&lt;/span&gt;
&lt;span class="k"&gt;[&amp;#39;Ana&amp;#39;, &amp;#39;25&amp;#39;, &amp;#39;ana@dicasdepython.com.br&amp;#39;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Repare que este algoritmo considera o cabeçalho como uma linha normal.&lt;/p&gt;
&lt;h3&gt;Lendo CSV como um dicionário em python&lt;/h3&gt;
&lt;p&gt;Uma interessante forma de se obter os dados de um CSV é na forma de um dicionário. O código abaixo mostra como fazer isso.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;

&lt;span class="n"&gt;arquivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pessoas.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;pessoas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DictReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arquivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;pessoa&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Nome:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;nome&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot; - Idade:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;idade&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot; - Email:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;email&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Nome&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gustavo&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gustavo&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdeprogramcao&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Nome&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Joao&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;joao&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdepython&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Nome&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Maria&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maria&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdeprogramacao&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Nome&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ana&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ana&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdepython&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Repare que neste exemplo o cabeçalho não foi considerado como uma linha normal, ele foi usado para dar nome às chaves do dicionário.&lt;/p&gt;
&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/csv.html" target="_blank"&gt;pacote csv do python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/dicasdepython.com.br/tree/master/content/examples/csv" target="_blank"&gt;Códigos-fonte deste post&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="CSV"></category><category term="IO"></category></entry><entry><title>Como ler arquivos CSV em java</title><link href="https://dicasdeprogramacao.com.br/como-ler-arquivos-csv-em-java/" rel="alternate"></link><published>2018-07-18T00:00:00-03:00</published><updated>2018-07-18T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-18:/como-ler-arquivos-csv-em-java/</id><summary type="html">&lt;p&gt;Existem várias formas de ler arquivos CSV em Java. A forma mais "raiz" é lendo o arquivo e fazendo Split, por espaço, vírgula ou ponto-e-vírgula, mas pra quê reinventar a roda né? Tem bibliotecas open-source que fazem todo o trabalho …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Existem várias formas de ler arquivos CSV em Java. A forma mais "raiz" é lendo o arquivo e fazendo Split, por espaço, vírgula ou ponto-e-vírgula, mas pra quê reinventar a roda né? Tem bibliotecas open-source que fazem todo o trabalho pra gente.&lt;/p&gt;
&lt;p&gt;Neste post vamos ver como ler arquivos CSV em java com a biblioteca open-source &lt;strong&gt;OpenCSV&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/como-escrever-arquivos-csv-em-java/" target="_blank"&gt;&amp;gt;&amp;gt; Como escrever arquivos CSV em java&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;CSV de exemplo&lt;/h2&gt;
&lt;p&gt;Para os exemplos destes post, vamos usar um CSV simples.
Considere que o arquivo &lt;code&gt;pessoas.csv&lt;/code&gt; esteja em algum lugar acessível pela sua classe, ou seja no &lt;code&gt;classpath&lt;/code&gt;, e tenha este conteúdo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;
&lt;span class="n"&gt;Gustavo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;gustavo&lt;/span&gt;&lt;span class="nv"&gt;@dicasdeprogramcao&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Joao&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;joao&lt;/span&gt;&lt;span class="nv"&gt;@dicasdejava&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Maria&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;maria&lt;/span&gt;&lt;span class="nv"&gt;@dicasdeprogramacao&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Ana&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ana&lt;/span&gt;&lt;span class="nv"&gt;@dicasdejava&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;OpenCSV como dependência (maven)&lt;/h2&gt;
&lt;p&gt;Para utilizar o &lt;strong&gt;OpenCSV&lt;/strong&gt; você precisa importá-lo como dependência no seu projeto.
Se você estiver utilizando o &lt;em&gt;Maven&lt;/em&gt;, basta adicionar a seguinte dependência no seu arquivo &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.opencsv&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;opencsv&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;4.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Lendo CSV como uma lista de String[]&lt;/h3&gt;
&lt;p&gt;Uma forma simples de ler um CSV é como uma lista de arrays de String, ou seja: &lt;code&gt;List&amp;lt;String[]&amp;gt;&lt;/code&gt;.
Veja no código abaixo como fazer isso com o &lt;strong&gt;OpenCSV&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util.csv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.CSVReader&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.CSVReaderBuilder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.Reader&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Files&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Paths&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerLinhasOpenCsv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Reader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newBufferedReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Paths&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pessoas.csv&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CSVReader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvReader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSVReaderBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;withSkipLines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvReader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readAll&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Name : &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - Idade : &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - Email : &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gustavo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gustavo&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdeprogramcao&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Joao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;joao&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdejava&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Maria&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maria&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdeprogramacao&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ana&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Idade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ana&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dicasdejava&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;br&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Lendo CSV como um objeto&lt;/h3&gt;
&lt;p&gt;Outra forma interessante de ler um CSV é obter uma lista de Objetos de uma Classe que representa um registro do csv.&lt;/p&gt;
&lt;p&gt;Para isto, vamos criar a classe CsvPessoa com os atributos contidos no CSV.&lt;/p&gt;
&lt;p&gt;É importante que os nomes dos atributos sejam iguais as colunas do CSV.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.csv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CsvPessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Gets e Sets omitidos para ficar menor&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;CsvPessoa{nome=&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\&amp;#39;, idade=&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;, email=&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\&amp;#39;}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora vamos ler o CSV e obter uma lista de pessoas, ou seja: &lt;code&gt;List&amp;lt;Pessoa&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.csv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.model.CsvPessoa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.bean.CsvToBean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.opencsv.bean.CsvToBeanBuilder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.Reader&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Files&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.file.Paths&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerLinhasComoObjetosOpenCsv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Reader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newBufferedReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Paths&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pessoas.csv&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CsvToBean&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvToBean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CsvToBeanBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvToBean&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pessoa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Gustavo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gustavo@dicasdeprogramcao.com.br&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Joao&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;joao@dicasdejava.com.br&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Maria&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;maria@dicasdeprogramacao.com.br&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;CsvPessoa&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Ana&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ana@dicasdejava.com.br&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://opencsv.sourceforge.net/" target="_blank"&gt;OpenCSV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/examples.dicasdejava.com.br/tree/master/src/main/java/br/com/dicasdejava/util/csv" target="_blank"&gt;Códigos-fonte deste post&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="CSV"></category><category term="IO"></category></entry><entry><title>Java: Como juntar dois arrays</title><link href="https://dicasdeprogramacao.com.br/java-como-juntar-dois-arrays/" rel="alternate"></link><published>2018-07-16T00:00:00-03:00</published><updated>2018-07-16T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-16:/java-como-juntar-dois-arrays/</id><summary type="html">&lt;p&gt;Neste post você verá como juntar dois arrays em java.&lt;/p&gt;
&lt;p&gt;A forma mais simples de juntar dois arrays é utilizando o método estático &lt;code&gt;addAll&lt;/code&gt; da classe &lt;code&gt;ArrayUtils&lt;/code&gt;
da biblioteca &lt;strong&gt;Apache Commons Lang&lt;/strong&gt;, passando os dois arrays como parâmetro.
O retorno …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Neste post você verá como juntar dois arrays em java.&lt;/p&gt;
&lt;p&gt;A forma mais simples de juntar dois arrays é utilizando o método estático &lt;code&gt;addAll&lt;/code&gt; da classe &lt;code&gt;ArrayUtils&lt;/code&gt;
da biblioteca &lt;strong&gt;Apache Commons Lang&lt;/strong&gt;, passando os dois arrays como parâmetro.
O retorno deste método é um novo array que agrega os dois. Veja o código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.apache.commons.lang3.ArrayUtils&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;JuntarArrays&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;array1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;b&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;array2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;e&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;f&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;g&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;h&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arraysJuntados&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;array1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;array2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arraysJuntados&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[a, b, c, d, e, f, g, h]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Maven&lt;/h2&gt;
&lt;p&gt;Se você utiliza Maven em seu projeto, pode adicionar a dependência abaixo no seu pom.xml
para utilizar todo o poder da biblioteca Apache Commons Lang.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.commons&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-lang3&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.7&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ArrayUtils.html" target="_blank"&gt;JavaDoc: ArrayUtils&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Array"></category><category term="Apache Commons"></category></entry><entry><title>Python: Como descobrir o tipo de uma variável ou objeto</title><link href="https://dicasdeprogramacao.com.br/python-como-descobrir-o-tipo-de-uma-variavel-ou-objeto/" rel="alternate"></link><published>2018-07-12T00:00:00-03:00</published><updated>2018-07-12T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-12:/python-como-descobrir-o-tipo-de-uma-variavel-ou-objeto/</id><summary type="html">&lt;p&gt;Para saber o tipo de um objeto ou variável, você pode usar a função &lt;code&gt;type()&lt;/code&gt;do python,
passando o objeto ou variável como parâmetro.&lt;/p&gt;
&lt;p&gt;O código mostra a utilização desta função para a descoberta do tipo da variável.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="nb"&gt;print …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Para saber o tipo de um objeto ou variável, você pode usar a função &lt;code&gt;type()&lt;/code&gt;do python,
passando o objeto ou variável como parâmetro.&lt;/p&gt;
&lt;p&gt;O código mostra a utilização desta função para a descoberta do tipo da variável.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;dicionario&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dicionario&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;logico&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logico&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Classe1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;

&lt;span class="n"&gt;objeto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Classe1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;class &amp;#39;list&amp;#39;&amp;gt;
&amp;lt;class &amp;#39;dict&amp;#39;&amp;gt;
&amp;lt;class &amp;#39;str&amp;#39;&amp;gt;
&amp;lt;class &amp;#39;int&amp;#39;&amp;gt;
&amp;lt;class &amp;#39;bool&amp;#39;&amp;gt;
&amp;lt;class &amp;#39;__main__.Classe1&amp;#39;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Além disso, para testar se uma variável ou objeto é de um determinado tipo, você deve utilizar o perador &lt;code&gt;is&lt;/code&gt;.
Veja&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;dicionario&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dicionario&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;logico&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logico&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Classe1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;

&lt;span class="n"&gt;objeto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Classe1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;Classe1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;True
True
True
True
True
True
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/stdtypes.html" target="_blank"&gt;Documentação: type&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="Básico"></category><category term="operadores"></category></entry><entry><title>Python: Como converter string em date</title><link href="https://dicasdeprogramacao.com.br/python-como-converter-string-em-date/" rel="alternate"></link><published>2018-07-11T00:00:00-03:00</published><updated>2018-07-11T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-11:/python-como-converter-string-em-date/</id><summary type="html">&lt;p&gt;Para converter uma string em date em python, basta usar a função &lt;code&gt;strptime&lt;/code&gt; da classe datetime, para obter um objeto datetime e em seguida, obter o objeto date através da função &lt;code&gt;date()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O código abaixo exemplifica a conversão de duas …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para converter uma string em date em python, basta usar a função &lt;code&gt;strptime&lt;/code&gt; da classe datetime, para obter um objeto datetime e em seguida, obter o objeto date através da função &lt;code&gt;date()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O código abaixo exemplifica a conversão de duas strings em formatos diferentes em objetos &lt;code&gt;date&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;str_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;11/07/2018&amp;#39;&lt;/span&gt;

&lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strptime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s1"&gt;/%m/%Y&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;str_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2018-07-11&amp;#39;&lt;/span&gt;

&lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strptime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%Y-%m-&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;2018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="mf"&gt;2018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/datetime.html" target="_blank"&gt;Documentação: datetime&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="String"></category><category term="date"></category><category term="datetime"></category></entry><entry><title>Pandas: Como criar um DataFrame vazio</title><link href="https://dicasdeprogramacao.com.br/pandas-como-criar-um-dataframe-vazio/" rel="alternate"></link><published>2018-07-10T00:00:00-03:00</published><updated>2018-07-10T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-10:/pandas-como-criar-um-dataframe-vazio/</id><summary type="html">&lt;p&gt;Para criar um dataframe com o pandas, primeiro nós temos que importar o pandas.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora, podemos criar o nosso dataframe.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Empty DataFrame
Columns: []
Index: []
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Além disso, nós podemos já definir as …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para criar um dataframe com o pandas, primeiro nós temos que importar o pandas.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora, podemos criar o nosso dataframe.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Empty DataFrame
Columns: []
Index: []
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Além disso, nós podemos já definir as colunas do nosso dataframe na criação.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;COLUNAS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Coluna-1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Coluna-2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Coluna-3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Coluna-4&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;COLUNAS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Empty DataFrame
Columns: [Coluna-1, Coluna-2, Coluna-3, Coluna-4]
Index: []
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html" target="_blank"&gt;Documentação: DataFrame&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="Pandas"></category><category term="DataFrame"></category></entry><entry><title>Python: Como converter inteiro em string e vice-versa</title><link href="https://dicasdeprogramacao.com.br/python-como-converter-inteiro-em-string-e-vice-versa/" rel="alternate"></link><published>2018-07-10T00:00:00-03:00</published><updated>2018-07-10T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-07-10:/python-como-converter-inteiro-em-string-e-vice-versa/</id><summary type="html">&lt;p&gt;Para converter uma variável do tipo inteiro para um texto (string), basta usar a função &lt;code&gt;str&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;variavel_texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;E para converter uma variável do tipo texto para uma variável do tipo inteiro, basta usar a função &lt;code&gt;int&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;variavel_inteiro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Para converter uma variável do tipo inteiro para um texto (string), basta usar a função &lt;code&gt;str&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;variavel_texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;E para converter uma variável do tipo texto para uma variável do tipo inteiro, basta usar a função &lt;code&gt;int&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;variavel_inteiro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;10&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O código abaixo mostra como converter um valor do tipo inteiro para um valor do tipo string (texto) e vice-versa.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;variavel_texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;variavel_texto&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;variavel_inteiro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;10&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;variavel_inteiro&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;281&lt;/span&gt;
&lt;span class="mf"&gt;11&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/functions.html#func-str" target="_blank"&gt;Documentação: função str&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/functions.html#int" target="_blank"&gt;Documentação: função int&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="String"></category><category term="inteiro"></category></entry><entry><title>Python: Como identificar o dia da semana de uma data</title><link href="https://dicasdeprogramacao.com.br/python-como-identificar-o-dia-da-semana-de-uma-data/" rel="alternate"></link><published>2018-06-29T00:00:00-03:00</published><updated>2018-06-29T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-06-29:/python-como-identificar-o-dia-da-semana-de-uma-data/</id><summary type="html">&lt;p&gt;O código abaixo mostra como identificar o dia da semana de uma data em Python&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;

&lt;span class="n"&gt;DIAS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Segunda-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Terça-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Quarta-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Quinta-Feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Sexta-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Sábado&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Domingo&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;indice_da_semana&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weekday …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;O código abaixo mostra como identificar o dia da semana de uma data em Python&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;

&lt;span class="n"&gt;DIAS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Segunda-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Terça-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Quarta-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Quinta-Feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Sexta-feira&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Sábado&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;Domingo&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;indice_da_semana&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weekday&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;indice_da_semana&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;dia_da_semana&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DIAS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;indice_da_semana&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dia_da_semana&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;numero_do_dia_da_semana&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isoweekday&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero_do_dia_da_semana&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;2018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;06&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;29&lt;/span&gt;
&lt;span class="mf"&gt;4&lt;/span&gt;
&lt;span class="n"&gt;Sexta&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;feira&lt;/span&gt;
&lt;span class="mf"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;É importante observar que o método &lt;code&gt;weekday()&lt;/code&gt; da classe &lt;code&gt;date&lt;/code&gt; retorna o dia da semana como um número inteiro,
onde 0 representa a segunda-feira e 6 representa o domingo.&lt;/p&gt;
&lt;p&gt;Podemos também usar o método &lt;code&gt;isoweekday()&lt;/code&gt; que retorna o dia da semana onde 1 representa segunda-feira e 7 representa domingo.&lt;/p&gt;
&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/datetime.html" target="_blank"&gt;Documentação: datetime&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term=": Dicas de Python :"></category><category term="Data"></category></entry><entry><title>Java: Como converter LocalDate e LocalDateTime em Date e vice-versa</title><link href="https://dicasdeprogramacao.com.br/java-como-converter-localdate-e-localdatetime-em-date-e-vice-versa/" rel="alternate"></link><published>2018-06-28T00:00:00-03:00</published><updated>2018-06-28T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-06-28:/java-como-converter-localdate-e-localdatetime-em-date-e-vice-versa/</id><summary type="html">&lt;p&gt;Este post demostra como converter &lt;code&gt;java.time.LocalDate&lt;/code&gt; e &lt;code&gt;java.time.LocalDateTime&lt;/code&gt;
em &lt;code&gt;java.util.Date&lt;/code&gt; e vice-versa.&lt;/p&gt;
&lt;h2&gt;LocalDate para Date&lt;/h2&gt;
&lt;p&gt;O código abaixo mostra como converter &lt;code&gt;java.time.LocalDate&lt;/code&gt;
em &lt;code&gt;java.util.Date&lt;/code&gt; e de volta para &lt;code&gt;java.time …&lt;/code&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Este post demostra como converter &lt;code&gt;java.time.LocalDate&lt;/code&gt; e &lt;code&gt;java.time.LocalDateTime&lt;/code&gt;
em &lt;code&gt;java.util.Date&lt;/code&gt; e vice-versa.&lt;/p&gt;
&lt;h2&gt;LocalDate para Date&lt;/h2&gt;
&lt;p&gt;O código abaixo mostra como converter &lt;code&gt;java.time.LocalDate&lt;/code&gt;
em &lt;code&gt;java.util.Date&lt;/code&gt; e de volta para &lt;code&gt;java.time.LocalDate&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.LocalDate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.ZoneId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConverterLocalDateParaDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LocalDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LocalDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDate = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;date1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;atStartOfDay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ZoneId&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;systemDefault&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;toInstant&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Date      = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;date1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;date1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toInstant&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;atZone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ZoneId&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;systemDefault&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;toLocalDate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDate = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;LocalDate = 2018-06-28
Date      = Thu Jun 28 00:00:00 BRT 2018
LocalDate = 2018-06-28
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;LocalDateTime para Date&lt;/h2&gt;
&lt;p&gt;Agora o código que mostra a conversão de &lt;code&gt;java.time.LocalDateTime&lt;/code&gt;
em &lt;code&gt;java.util.Date&lt;/code&gt; e de volta para &lt;code&gt;java.time.LocalDateTime&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.LocalDateTime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.ZoneId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConverterLocalDateTimeParaDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LocalDateTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LocalDateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDateTime = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;date1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;atZone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ZoneId&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;systemDefault&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;toInstant&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Date      = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;date1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;date1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toInstant&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;atZone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ZoneId&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;systemDefault&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;toLocalDateTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDate = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localDate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;LocalDateTime = 2018-06-28T19:18
Date          = Thu Jun 28 19:18:00 BRT 2018
LocalDateTime = 2018-06-28T19:18
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html" target="_blank"&gt;JavaDoc: LocalDate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html" target="_blank"&gt;JavaDoc: LocalDateTime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html" target="_blank"&gt;JavaDoc: Date&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html" target="_blank"&gt;JavaDoc: Instant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html" target="_blank"&gt;JavaDoc: ZoneId&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java 8"></category><category term="conversão"></category><category term="Date"></category></entry><entry><title>Exercício: Algorítmo Par ou Ímpar</title><link href="https://dicasdeprogramacao.com.br/exercicio-algoritmo-par-ou-impar/" rel="alternate"></link><published>2018-06-27T00:00:00-03:00</published><updated>2018-06-27T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-06-27:/exercicio-algoritmo-par-ou-impar/</id><summary type="html">&lt;p&gt;Lógica de programação se aprende com muita prática.
Por isso quero mostrar para quem está aprendendo, como implementar os algorítmos básicos de lógica de programação.&lt;/p&gt;
&lt;p&gt;Neste post, você vai aprender como implementar um algorítmo que verifica se um número é …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Lógica de programação se aprende com muita prática.
Por isso quero mostrar para quem está aprendendo, como implementar os algorítmos básicos de lógica de programação.&lt;/p&gt;
&lt;p&gt;Neste post, você vai aprender como implementar um algorítmo que verifica se um número é PAR ou ÍMPAR.&lt;/p&gt;
&lt;h2&gt;Passo 1: Esqueleto do algorítmo&lt;/h2&gt;
&lt;p&gt;O primeiro passo é criar a estrutura do algorítmo. Todo algorítmo tem um &lt;strong&gt;nome&lt;/strong&gt; uma área para a &lt;strong&gt;declaração das variáveis&lt;/strong&gt; e um &lt;strong&gt;corpo&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Algoritmo &amp;quot;ParOuImpar&amp;quot;

Var

Inicio

Fimalgoritmo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Passo 2: Solicitação do número para o usuário&lt;/h2&gt;
&lt;p&gt;O segundo passo é solicitar que o usuário digite o número, para verificarmos se ele é par ou ímpar.&lt;/p&gt;
&lt;p&gt;Pense que é uma conversa, você diz ao usuário o que ele precisa fazer, o usuário informa o valor que a gente pedi e em seguida a gente armazena esse valor em uma variável.&lt;/p&gt;
&lt;p&gt;Se vamos usar uma variável, também precisamos declará-la na sessão de variáveis. Veja&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Algoritmo &amp;quot;ParOuImpar&amp;quot;

Var
    numero : inteiro
Inicio

    escreva(&amp;quot;Informe um número: &amp;quot;)
    leia(numero)

Fimalgoritmo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja a execução deste algorítmo no &lt;a href="https://dicasdeprogramacao.com.br/download-visualg/" target="_blank"&gt;Visualg 3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Lendo o valor digitado pelo usuário em uma variável" src="/images/exercicio-algoritmo-par-ou-impar/lendo-valor-na-variavel.gif" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Passo 3: Verificação se o número é par ou ímpar&lt;/h2&gt;
&lt;p&gt;Agora que nós já obtemos o valor que o usuário digitou, podemos verificar se o número é par ou ímpar e dar essa informação pra ele.&lt;/p&gt;
&lt;p&gt;Pra isso, vamos utilizar a estrutura de controle &lt;a href="https://dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank"&gt;SE-ENTÃO-SENÃO&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;E a verificação que vamos utilizar é: &lt;strong&gt;Se o resto da divisão do número por 2 for igual a 0, então o número é par, senão o número é ímpar.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mas como obter o resto de uma divisão? utilizando o &lt;a href="https://dicasdeprogramacao.com.br/operadores-aritmeticos/" target="_blank"&gt;operador&lt;/a&gt;
&lt;strong&gt;MOD&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Veja o algorítimo final&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Algoritmo &amp;quot;ParOuImpar&amp;quot;

Var

    numero : inteiro

Inicio

       escreva(&amp;quot;Escreva um número: &amp;quot;)
       leia(numero)

       se numero mod 2 = 0 entao
           escreva(&amp;quot;O número &amp;quot;, numero, &amp;quot; é par!&amp;quot;)
       senao
           escreva(&amp;quot;O número &amp;quot;, numero, &amp;quot; é ímpar!&amp;quot;)
       fimse

Fimalgoritmo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que nas mensagens que apresentamos ao usuário,
nós &lt;em&gt;concatenamos&lt;/em&gt; o valor da variável número com o texto.&lt;/p&gt;
&lt;h2&gt;Video&lt;/h2&gt;
&lt;p&gt;Eu gravei um video implementando este algorítmo passo-a-passo.&lt;/p&gt;
&lt;p&gt;Assim você pode ver como eu faço na prática!&lt;/p&gt;
&lt;div class="youtube youtube-16x9"&gt;
&lt;iframe src="https://www.youtube.com/embed/CI9P9hD74G4" allowfullscreen seamless frameBorder="0"&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;Gostou do post? Você pode ter acesso GRATUITO a um minicurso e um e-book
de lógica de programação para iniciantes. Basta se inscrever no link abaixo.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mclp.dicasdeprogramacao.com.br"&gt;&amp;gt;&amp;gt; Quero me inscrever no minicurso GRATUITO de lógica de programação!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Escreva aqui em baixo nos comentários o que você achou do post e do video.&lt;/p&gt;
&lt;p&gt;E se você ficou com alguma dúvida, fique a vontade para perguntar nos comentários que eu respondo!&lt;/p&gt;</content><category term="Iniciante em programação"></category><category term="Exercícios"></category></entry><entry><title>Como personalizar o banner do Spring-boot no log</title><link href="https://dicasdeprogramacao.com.br/como-personalizar-o-banner-do-spring-boot-no-log/" rel="alternate"></link><published>2018-06-25T00:00:00-03:00</published><updated>2018-06-25T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-06-25:/como-personalizar-o-banner-do-spring-boot-no-log/</id><summary type="html">&lt;p&gt;Quando você roda a sua aplicação Spring-boot você já deve ter percebido que aparece no log um texto "Spring" bem grande. Assim:&lt;/p&gt;
&lt;p&gt;&lt;img alt="banner spring-boot" src="/images/como-personalizar-o-banner-do-spring-boot-no-log/banner-spring-boot.png" style="width:80%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Você gostaria de customizar esse banner no seu projeto do Spring-Boot?&lt;/p&gt;
&lt;p&gt;Para alterar o banner que aparece no …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quando você roda a sua aplicação Spring-boot você já deve ter percebido que aparece no log um texto "Spring" bem grande. Assim:&lt;/p&gt;
&lt;p&gt;&lt;img alt="banner spring-boot" src="/images/como-personalizar-o-banner-do-spring-boot-no-log/banner-spring-boot.png" style="width:80%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Você gostaria de customizar esse banner no seu projeto do Spring-Boot?&lt;/p&gt;
&lt;p&gt;Para alterar o banner que aparece no log do Spring-boot basta, criar um arquivo chamado &lt;code&gt;banner.txt&lt;/code&gt;
na pasta &lt;code&gt;resources&lt;/code&gt; do seu projeto.&lt;/p&gt;
&lt;p&gt;&lt;img alt="arquivo banner.txt na pasta resources" src="/images/como-personalizar-o-banner-do-spring-boot-no-log/resources-banner.png" style="width:60%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;No arquivo &lt;code&gt;banner.txt&lt;/code&gt; você pode colocar o texto que você quiser para aparecer no log.&lt;/p&gt;
&lt;p&gt;&lt;img alt="banner spring-boot personalizado com texto Dicas de Java" src="/images/como-personalizar-o-banner-do-spring-boot-no-log/banner-dicas-de-java.png" style="width:80%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;Escolhendo a fonte do texto&lt;/h3&gt;
&lt;p&gt;Legal, essa parte foi fácil! Mas eu não escrevi aquele texto, espaço-por-espaço, caracter-por-caracter...
Eu acessei &lt;a href="https://devops.datenkollektiv.de/banner.txt/index.html" target="_\blank"&gt;esse site&lt;/a&gt; que oferece um
&lt;strong&gt;Gerador online de banner para o Spring-boot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Basta digitar o texto que você quer personalizar e escolher a fonte, dentre as várias que eles oferecem.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Gerador online de banner para o Spring-boot" src="/images/como-personalizar-o-banner-do-spring-boot-no-log/gerador-banner-spring-boot.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Por fim, você pode copiar esse texto gerado pelo site e colar no seu arquivo &lt;code&gt;banner.txt&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-banner" target="_blank"&gt;Spring-Boot: Customizing the banner&lt;/a&gt;&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="Spring-Boot"></category><category term="Personalização"></category></entry><entry><title>Spring-boot: Como criar a estrutura de uma aplicação web do ZERO com Spring Initializr</title><link href="https://dicasdeprogramacao.com.br/spring-boot-como-criar-a-estrutura-de-uma-aplicacao-web-do-zero-com-spring-initializr/" rel="alternate"></link><published>2018-06-19T00:00:00-03:00</published><updated>2018-06-19T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-06-19:/spring-boot-como-criar-a-estrutura-de-uma-aplicacao-web-do-zero-com-spring-initializr/</id><summary type="html">&lt;p&gt;Uma das grandes utilização do Java é para criação de aplicações Web e APIs REST e
um dos melhores frameworks para isso é o &lt;strong&gt;Spring-boot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O Spring-boot surpreende pela facilidade para criar uma aplicação web em minutos
e com pouco …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Uma das grandes utilização do Java é para criação de aplicações Web e APIs REST e
um dos melhores frameworks para isso é o &lt;strong&gt;Spring-boot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O Spring-boot surpreende pela facilidade para criar uma aplicação web em minutos
e com pouco código. Na verdade, só o código que você está interssado de fato.&lt;/p&gt;
&lt;p&gt;O modo mais fácil (que nos dá o código praticamente pronto) de criar uma aplicação com Spring-Boot,
é utilizando o &lt;strong&gt;Spring Initializr&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Neste post vamos utilizar o Spring Initializr para criar uma API com um endpoint (endereço para um recurso) retornando um dado simples.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; Você pode usar o maven do seu computador se já tiver instalado, ou utilizar o executavel &lt;code&gt;mvnw&lt;/code&gt; que é baixado junto com a sua aplicação pelo Spring Initializr.&lt;/p&gt;
&lt;h2&gt;Criando uma aplicação Web o Spring Initializr&lt;/h2&gt;
&lt;p&gt;Você pode seguir o passo-apasso abaixo para baixar o código da sua aplicação com Spring-boot já configurado.&lt;/p&gt;
&lt;h3&gt;1. Baixe o código do Spring-Boot configurado&lt;/h3&gt;
&lt;p&gt;Acesse &lt;a href="https://start.spring.io/"&gt;https://start.spring.io/&lt;/a&gt;, configure os metadados básicos do seu projeto,
quais dependências do Spring nós vamos utilizar (Web no caso) e pronto! Agora você pode baixar um arquivo ZIP com o seu projeto Spring-boot configurado.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Criando um projeto spring-boot simples" src="/images/spring-boot-como-criar-a-estrutura-de-uma-aplicacao-web-do-zero-com-spring-initializr/criando-um-projeto-spring-boot.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;2. Descompacte o arquivo ZIP localmente&lt;/h3&gt;
&lt;p&gt;Após clicar em &lt;strong&gt;Generate Project&lt;/strong&gt;, um arquivo ZIP será baixado para o seu computador, agora você precisa descompactar o arquivo em uma pasta local.&lt;/p&gt;
&lt;h3&gt;3. Acesse a pasta descompactada pelo prompt de comando&lt;/h3&gt;
&lt;p&gt;Abra o prompt de comando e acesse a pasta descompactada. (&lt;code&gt;cd &amp;lt;caminho da pasta&amp;gt;&lt;/code&gt;)&lt;/p&gt;
&lt;h3&gt;4. Baixe as dependências do projeto&lt;/h3&gt;
&lt;p&gt;Execute o comando &lt;code&gt;mvn clean install&lt;/code&gt; para baixar as dependências do projeto através do maven.
Você também pode utilizar o &lt;code&gt;_mvnw_ que vem no arquivo ZIP do mesmo jeito&lt;/code&gt;mvnw clean install`.&lt;/p&gt;
&lt;p&gt;&lt;img alt="mvn clean install" src="/images/spring-boot-como-criar-a-estrutura-de-uma-aplicacao-web-do-zero-com-spring-initializr/mvn-clean-install.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h3&gt;5. Crie seu primeiro endpoint&lt;/h3&gt;
&lt;p&gt;Crie uma class RestController com um método responsável por responder uma requisição GET, como no exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.springbootsample.controller&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.springframework.http.HttpStatus&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.springframework.http.ResponseEntity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.springframework.web.bind.annotation.GetMapping&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.springframework.web.bind.annotation.RestController&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@RestController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;endpoint&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SampleController&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;OK&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HttpStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OK&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A classe acima utiliza a anotação &lt;code&gt;@RestController&lt;/code&gt; para informar o Spring-boot que ela é um controller rest e ainda diz qual o endereço do endpoint.&lt;/p&gt;
&lt;p&gt;Além disso ela tem um método com a anotação &lt;code&gt;@GetMapping&lt;/code&gt; que diz qual método deve ser chamado quando o controller receber uma requisição HTTP GET em seu endereço padrão &lt;code&gt;endpoint&lt;/code&gt;. O método retorna uma resposta HTTP com Status 200 (OK) e o corpo da resposta com o valor "OK".&lt;/p&gt;
&lt;h3&gt;6. Execute aplicação&lt;/h3&gt;
&lt;p&gt;Execute o comando &lt;code&gt;mvn spring-boot:run&lt;/code&gt; para executar a sua aplicação.
Você também pode utilizar o &lt;em&gt;mvnw&lt;/em&gt; que vem no arquivo ZIP do mesmo jeito &lt;code&gt;mvnw spring-boot:run&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="mvn spring-boot:run " src="/images/spring-boot-como-criar-a-estrutura-de-uma-aplicacao-web-do-zero-com-spring-initializr/mvn-spring-boot-run.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;A mensagem que aparece no final &lt;strong&gt;"Tomcat started on port(s): 8080 (http)"&lt;/strong&gt; significa que a sua aplicação web já está rodando na porta 8080.&lt;/p&gt;
&lt;h3&gt;7. Acesse o endpoint&lt;/h3&gt;
&lt;p&gt;Abra o seu browser e acesse a URL &lt;code&gt;http://localhost:8080/endpoint/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Acessando a aplicação pelo browser" src="/images/spring-boot-como-criar-a-estrutura-de-uma-aplicacao-web-do-zero-com-spring-initializr/acesso-endpoint-browser.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Tudo pronto!&lt;/h2&gt;
&lt;p&gt;Com esse pequeno passo-a-passo você já tem a sua aplicação web rodando com Spring-boot.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/spring-io/initializr" target="_blank"&gt;Spring Initializr&lt;/a&gt;&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="Spring-Boot"></category><category term="REST"></category><category term="API"></category></entry><entry><title>Lógica de Programação para Iniciantes</title><link href="https://dicasdeprogramacao.com.br/logica-de-programacao-para-iniciantes/" rel="alternate"></link><published>2018-06-18T00:00:00-03:00</published><updated>2018-06-18T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-06-18:/logica-de-programacao-para-iniciantes/</id><summary type="html">&lt;p&gt;Meu objetivo ao criar o blog &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; era ajudar
pessoas interessadas em aprender programação compartilhando dicas
e ensinamentos sobre desenvolvimento de softwares em geral.&lt;/p&gt;
&lt;p&gt;Com o tempo, foquei em criar mais conteúdo voltado para iniciantes em desenvolvimento de …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Meu objetivo ao criar o blog &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; era ajudar
pessoas interessadas em aprender programação compartilhando dicas
e ensinamentos sobre desenvolvimento de softwares em geral.&lt;/p&gt;
&lt;p&gt;Com o tempo, foquei em criar mais conteúdo voltado para iniciantes em desenvolvimento de softwares.
E hoje vejo que meus posts ajudaram (e ainda ajudam) muita gente ao redor do mundo.
Regularmente recebo e-mails com agradecimentos e isso é muito gratificante!&lt;/p&gt;
&lt;p&gt;&lt;img alt="lógica de programação para iniciantes" class="aligncenter size-full" src="/images/logica-de-programacao-para-iniciantes/logica-de-programacao-para-iniciantes.png"&gt;&lt;/p&gt;
&lt;p&gt;Mas infelizmente fiquei um longo tempo sem criar novos conteúdos aqui no blog.
E agora estou voltando a criação de conteúdos por aqui.&lt;/p&gt;
&lt;p&gt;E nada melhor para recomeçar os trabalhos do que a criação de um e-book gratuito. Concorda?&lt;/p&gt;
&lt;p&gt;Continue lendo para saber como ter acesso a um minicurso e um e-book GRATUITO sobre Lógica de Programação.&lt;/p&gt;
&lt;h2&gt;Primeiro uma pesquisa!&lt;/h2&gt;
&lt;p&gt;Antes de voltar a escrever qualquer conteúdo por aqui, eu queria saber que assunto eu deveria focar mais.&lt;/p&gt;
&lt;p&gt;E para começar bem eu fiz uma pesquisa entre os alunos inscritos no meu 
&lt;a href="https://mclp.dicasdeprogramacao.com.br" target="_blank"&gt;minicurso GRATUITO de lógica de programação&lt;/a&gt;
para saber que tipo de conteúdo eu deveria criar.&lt;/p&gt;
&lt;p&gt;Dentre as centenas de respostas, o resultado variou bastante e no final eu agrupei nos seguintes tópicos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Programação do Zero (Lógica de programação)&lt;/li&gt;
&lt;li&gt;Programação Backend (Java, C#, PHP, Python, Ruby) - Web/Desktop&lt;/li&gt;
&lt;li&gt;Bancos de Dados (MySQL, Oracle, SQL Server, Postgres)&lt;/li&gt;
&lt;li&gt;Programação Frontend (HTML5, CSS3, Javascript (EC6), SASS) - Web&lt;/li&gt;
&lt;li&gt;Desenvolvimento Mobile (Android, IOS, Híbrido, PWAs, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O resultado foi uma grande margem para os interessados em aprender &lt;strong&gt;Programação do Zero&lt;/strong&gt;. Conforme você pode ver a distribuição das respostas no gráfico abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Respostas da pesquisa sobre assunto para o blog" src="/images/logica-de-programacao-para-iniciantes/resultado-pesquisa.png"&gt;&lt;/p&gt;
&lt;p&gt;Ok, agora já sei quais assuntos devo focar para a retomada da produção de conteúdos para o blog.&lt;/p&gt;
&lt;p&gt;E para começar, revisitei o meu bom, velho e ainda muito atual ...&lt;/p&gt;
&lt;h2&gt;Minicurso GRATUITO de Lógica de Programação para Iniciantes&lt;/h2&gt;
&lt;p&gt;Talvez você já saiba, mas há um tempo atrás eu criei um 
&lt;a href="https://mclp.dicasdeprogramacao.com.br" target="_blank"&gt;minicurso GRATUITO de lógica de programação&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Este minicurso acontece por e-mail e a cada dia você recebe uma lição direto na sua caixa de entradas.
Ou seja, ao invés de você receber todo o conteúdo de uma vez, você recebe as lições a cada 24 horas.
Dessa forma você tem tempo para digerir a lição aprendida, com calma.&lt;/p&gt;
&lt;p&gt;Além do conteúdo teórico, o minicurso também tem alguns exercícios sugeridos que vão fazer você
exercitar o que acabou de aprender, você terá tempo de resolver o exercício e em seguida eu
envio no seu e-mail a minha própria solução para o exercício proposto.
No final do minicurso você ainda é desafiado a criar um jogo da velha sozinho!&lt;/p&gt;
&lt;p&gt;Por estar configurado para funcionar de forma automática,
este minicurso já conta com dezenas de milhares de alunos ao redor do mundo.&lt;/p&gt;
&lt;p&gt;Muitos inscritos são alunos de fora do Brasil, países que também falam português como Angola e Portugal.&lt;/p&gt;
&lt;p&gt;E para ajudar ainda mais os iniciantes em programação eu revisitei todo o conteúdo do minicurso,
melhorei algumas partes com o feedback que recebi ao longo do tempo e agora decidi incrementar este minicurso
criando um e-book!&lt;/p&gt;
&lt;h2&gt;E-book GRATUITO de Lógica de Programação para Iniciantes&lt;/h2&gt;
&lt;p&gt;Um dos feedbacks que mais recebi dos alunos é que o conteúdo está todo dissolvido nos e-mails.&lt;/p&gt;
&lt;p&gt;Muitos alunos estavam tão empolgados com as primeiras lições que estavam com "sangue nos olhos"
para acessar as próximas lições e o e-mail não chegava logo, rs.&lt;/p&gt;
&lt;p&gt;Nem sempre isso é bom, mas eu fui convencido a entregar todo o conteúdo de uma vez!&lt;/p&gt;
&lt;p&gt;Criei um e-book com todo o conteúdo do minicurso.
Isso mesmo, todo o conteúdo do minicurso está concentrado no e-book que você receberá logo na primeira lição.&lt;/p&gt;
&lt;p&gt;Os alunos antigos já receberam o e-book e muitos deles acabaram confessando que não terminaram o minicurso no passado.
Mas estão super empolgados novamente para retomar os estudos.&lt;/p&gt;
&lt;p&gt;E agora chegou a sua vez! Você também pode receber GRATUITAMENTE o minicurso por e-mail e o e-book de lógica de programação.
Basta clicar no link abaixo e se inscrever!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mclp.dicasdeprogramacao.com.br" target="_blank"&gt;&amp;gt;&amp;gt;Quero receber o minicurso e o e-book GRATUITO de lógica de programação&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Espero que aproveite! Bons estudos!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Java: Como encriptar e desecriptar uma String em Base64</title><link href="https://dicasdeprogramacao.com.br/java-como-encriptar-e-desecriptar-uma-string-em-base64/" rel="alternate"></link><published>2018-06-06T00:00:00-03:00</published><updated>2018-06-06T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-06-06:/java-como-encriptar-e-desecriptar-uma-string-em-base64/</id><summary type="html">&lt;p&gt;Embora &lt;strong&gt;NÃO seja uma forma segura de armazenar senhas&lt;/strong&gt;, encriptação com
Base64 é muito comum para serialização de arquivos e textos.
Ou melhor, os "bytes" do texto, já que Base64 é uma serialização &lt;em&gt;byte-to-text&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Outra grande utilização da serialização em …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Embora &lt;strong&gt;NÃO seja uma forma segura de armazenar senhas&lt;/strong&gt;, encriptação com
Base64 é muito comum para serialização de arquivos e textos.
Ou melhor, os "bytes" do texto, já que Base64 é uma serialização &lt;em&gt;byte-to-text&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Outra grande utilização da serialização em Base64 é para garantir a integridade de dados trafegados.&lt;/p&gt;
&lt;p&gt;Enfim, existe mais de uma maneira de "serializar" e "deserializar" um texto para Base64 em Java.
Neste post vamos ver duas delas ...&lt;/p&gt;
&lt;h2&gt;Utilizando a classe Base64 do pacote java.util&lt;/h2&gt;
&lt;p&gt;A classe &lt;code&gt;java.util.Base64&lt;/code&gt; foi adicionada à 
&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html" target="_blank"&gt;API Java&lt;/a&gt;
a partir do &lt;em&gt;Java 8&lt;/em&gt;.
Dentre as funcionalidades disponíveis, estão duas classes aninhadas (nested-class)
&lt;code&gt;Base64.Encoder&lt;/code&gt; e &lt;code&gt;Base64.Decoder&lt;/code&gt;, que provêem métodos estáticos para serializar e deserializar bytes.&lt;/p&gt;
&lt;p&gt;Vejamos um exemplo que mostra uma serialização/deserialização utilizando esta classe &lt;code&gt;Base64&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Base64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SerializacaoDeserializacaoBase64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoOriginal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;esta é uma string de teste para serialização/deserialização em Base64&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Texto original: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoOriginal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoSerializado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEncoder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;encodeToString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textoOriginal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Texto em Base64: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoSerializado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoDeserializado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDecoder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textoSerializado&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Texto deserializado: &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoDeserializado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Com o código acima, podemos perceber que a serialização Base64 é uma serialização de bytes em texto.
Ou seja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Para encriptar&lt;/strong&gt;, passamos &lt;code&gt;textoOriginal.getBytes()&lt;/code&gt; como parâmetro para o método &lt;code&gt;Base64.getEncoder().encodeToString&lt;/code&gt; e recebemos uma &lt;code&gt;String&lt;/code&gt; que é o texto no formato Base64.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para decriptar&lt;/strong&gt;, passamos uma &lt;code&gt;String&lt;/code&gt;, que é o texto no formato Base64, 
e recebemos um array de bytes (&lt;code&gt;byte[]&lt;/code&gt;), para transformar esse array de bytes em string,
passamos esse array de bytes para o construtor da classe &lt;code&gt;String(byte[])&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Saída&lt;/h3&gt;
&lt;p&gt;A saída do programa acima é essa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Texto original: esta é uma string de teste para serialização/deserialização em Base64
Texto em Base64: ZXN0YSDDqSB1bWEgc3RyaW5nIGRlIHRlc3RlIHBhcmEgc2VyaWFsaXphw6fDo28vZGVzZXJpYWxpemHDp8OjbyBlbSBCYXNlNjQ=
Texto deserializado: esta é uma string de teste para serialização/deserialização em Base64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Utilizando Apache Commons Codec&lt;/h2&gt;
&lt;p&gt;Também tem uma biblioteca útil da apache (&lt;strong&gt;Apache Commons Codec&lt;/strong&gt;)
que oferece métodos para serialização e deserialização de Base64.&lt;/p&gt;
&lt;p&gt;Se você estiver utilizando o Maven, pode adicionar a dependência
abaixo no seu &lt;code&gt;pom.xml&lt;/code&gt; para utilizar todo o poder da biblioteca &lt;strong&gt;Apache Commons Codec&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;commons-codec&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-codec&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.11&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A &lt;em&gt;Apache Commons Codec&lt;/em&gt; oferece a classe &lt;code&gt;org.apache.commons.codec.binary.Base64&lt;/code&gt;.
para acessar os métodos &lt;em&gt;encodeAsString&lt;/em&gt;  e &lt;em&gt;decode&lt;/em&gt; é necessário criar uma instância dela.
Veja abaixo um exemplo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.apache.commons.codec.binary.Base64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SerializacaoDeserializacaoBase64ApacheCommons&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoOriginal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;esta é uma string de teste para serialização/deserialização em Base64&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Texto original: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoOriginal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Base64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Base64&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoSerializado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;encodeAsString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textoOriginal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Texto em Base64: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoSerializado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoDeserializado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textoSerializado&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Texto deserializado: &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoDeserializado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O funcionamento dos métodos &lt;code&gt;encodeAsString&lt;/code&gt; e &lt;code&gt;decode&lt;/code&gt; é o mesmo.
O &lt;code&gt;encodeAsString&lt;/code&gt; recebe um array de bytes (&lt;code&gt;byte[]&lt;/code&gt;) e retorna uma &lt;code&gt;String&lt;/code&gt;,
e o método &lt;code&gt;decode&lt;/code&gt; recebe uma &lt;code&gt;String&lt;/code&gt; e retorna um array de bytes (&lt;code&gt;byte[]&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;A saída deste programinha é a mesma do exemplo anterior.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Texto original: esta é uma string de teste para serialização/deserialização em Base64
Texto em Base64: ZXN0YSDDqSB1bWEgc3RyaW5nIGRlIHRlc3RlIHBhcmEgc2VyaWFsaXphw6fDo28vZGVzZXJpYWxpemHDp8OjbyBlbSBCYXNlNjQ=
Texto deserializado: esta é uma string de teste para serialização/deserialização em Base64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html" target="_blank"&gt;JavaDoc: Base64 (API Java)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64.html" target="_blank"&gt;JavaDoc Base64 (Apache)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Apache Commons"></category><category term="Encriptação"></category><category term="String"></category></entry><entry><title>Java: Como converter um Iterator em List</title><link href="https://dicasdeprogramacao.com.br/java-como-converter-um-iterator-em-list/" rel="alternate"></link><published>2018-05-04T00:00:00-03:00</published><updated>2018-05-04T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-05-04:/java-como-converter-um-iterator-em-list/</id><summary type="html">&lt;p&gt;É possível converter um Iterator em List de muitas formas em java. Com &lt;em&gt;lambda&lt;/em&gt;, java antigo, Apache Commons, etc.
Vejamos então algumas das formas de fazer essa conversão...&lt;/p&gt;
&lt;h2&gt;Convertendo Iterator em List com Lambda (Java 8)&lt;/h2&gt;
&lt;p&gt;A partir do Java …&lt;/p&gt;</summary><content type="html">&lt;p&gt;É possível converter um Iterator em List de muitas formas em java. Com &lt;em&gt;lambda&lt;/em&gt;, java antigo, Apache Commons, etc.
Vejamos então algumas das formas de fazer essa conversão...&lt;/p&gt;
&lt;h2&gt;Convertendo Iterator em List com Lambda (Java 8)&lt;/h2&gt;
&lt;p&gt;A partir do Java 8, a interface &lt;code&gt;Iterator&lt;/code&gt; oferece o método &lt;code&gt;forEachRemaining&lt;/code&gt;
que podemos utilizar para iterar nos itens restantes do &lt;em&gt;Iterator&lt;/em&gt; com &lt;em&gt;Lambda&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.ArrayList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Iterator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;IteratorParaList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;José&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Iterator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEachRemaining&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Gustavo
Maria
José
João
Ana
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Outra forma de fazer essa conversão com &lt;em&gt;Lambda&lt;/em&gt; é passando apenas o método &lt;code&gt;add&lt;/code&gt;
da interface &lt;code&gt;List&lt;/code&gt; para o método &lt;code&gt;forEachRemainning&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEachRemaining&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Funciona da mesma forma que o exemplo anterior.&lt;/p&gt;
&lt;h2&gt;Convertendo Iterator em List Java 7 ou anterior&lt;/h2&gt;
&lt;p&gt;A forma antiga, básica, para converter um &lt;code&gt;Iterator&lt;/code&gt; em &lt;code&gt;List&lt;/code&gt; em java
é justamente "iterar" no iterator ...
Utilizando os métodos &lt;code&gt;hasNext&lt;/code&gt; (para verificar se tem mais ítens no Iterator) e &lt;code&gt;next&lt;/code&gt; (para obter o próximo ítem do iterator).&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.ArrayList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Iterator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;IteratorParaList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;José&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Iterator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Convertendo Iterator em List utilizando Apache Commons Collections&lt;/h2&gt;
&lt;p&gt;Como sempre, a &lt;strong&gt;Apache&lt;/strong&gt; tem uma biblioteca (&lt;strong&gt;Apache Commons Collections&lt;/strong&gt;)
que também nos oferece um método &lt;code&gt;toList&lt;/code&gt; na classe &lt;code&gt;IteratorUtils&lt;/code&gt;
para converter Iterator em List de forma simples.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.apache.commons.collections.IteratorUtils&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.ArrayList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Iterator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;IteratorParaList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;José&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Iterator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IteratorUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iteratorDeNomes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaConvertidaDoIterator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mas lembre-se que é necessário importar o &lt;em&gt;Apache Commons Collections&lt;/em&gt; no seu projeto.&lt;/p&gt;
&lt;p&gt;Se você estiver utilizando o Maven, pode adicionar a dependência
abaixo no seu &lt;code&gt;pom.xml&lt;/code&gt; para utilizar todo o poder da biblioteca &lt;strong&gt;Apache Commons Collections&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;commons-collections&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-collections&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.2.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#forEachRemaining-java.util.function.Consumer-" target="_blank"&gt;JavaDoc: Iterator.forEachRemaining&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html" target="_blank"&gt;JavaDoc: Iterator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/IteratorUtils.html#toList(java.util.Iterator)" target="_blank"&gt;JavaDoc: IteratorUtils.toList&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="IteratorUtils"></category><category term="Apache Commons"></category><category term="List"></category><category term="Iterator"></category><category term="Lambda"></category></entry><entry><title>Java: Como criar um InputStream a partir de uma String</title><link href="https://dicasdeprogramacao.com.br/java-como-criar-um-inputstream-a-partir-de-uma-string/" rel="alternate"></link><published>2018-05-04T00:00:00-03:00</published><updated>2018-05-04T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-05-04:/java-como-criar-um-inputstream-a-partir-de-uma-string/</id><summary type="html">&lt;p&gt;A forma mais rápida para criar um InputStream a partir de uma String é criando uma instancia da classe
&lt;code&gt;ByteArrayInputStream&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja no código abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.ByteArrayInputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.InputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;A forma mais rápida para criar um InputStream a partir de uma String é criando uma instancia da classe
&lt;code&gt;ByteArrayInputStream&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja no código abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.ByteArrayInputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.InputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InputStreamFromString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteArrayInputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Um texto qualquer&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O código acima cria um InputStream a partir de uma String.&lt;/p&gt;
&lt;p&gt;A classe &lt;code&gt;java.io.ByteArrayInputStream&lt;/code&gt; recebe um array de bytes em seu construtor.
E nós podemos obter esse array de bytes através do método &lt;code&gt;getBytes()&lt;/code&gt; da classe String.&lt;/p&gt;
&lt;h2&gt;Utilizando Apache Commons IO&lt;/h2&gt;
&lt;p&gt;Outra forma simples de converter uma String em InputStream é utilizando o método estático &lt;code&gt;toInputStream&lt;/code&gt;
da classe &lt;code&gt;IOUtils&lt;/code&gt; da biblioteca &lt;strong&gt;Apache Commons IO&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.apache.commons.io.IOUtils&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.ByteArrayInputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.InputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InputStreamFromString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toInputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;initialString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mas lembre-se que é necessário importar o &lt;em&gt;Apache Commons IO&lt;/em&gt; no seu projeto.&lt;/p&gt;
&lt;p&gt;Se você estiver utilizando o Maven, pode adicionar a dependência
abaixo no seu &lt;code&gt;pom.xml&lt;/code&gt; para utilizar todo o poder da biblioteca &lt;strong&gt;Apache Commons IO&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.commons&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-io&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.3.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" target="_blank"&gt;JavaDoc: String&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/io/ByteArrayInputStream.html" target="_blank"&gt;JavaDoc: ByteArrayInputStream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html" target="_blank"&gt;JavaDoc: IOUtils&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="IOUtils"></category><category term="Apache Commons"></category><category term="InputStream"></category><category term="String"></category></entry><entry><title>Java: Como ler um arquivo com a classe Scanner</title><link href="https://dicasdeprogramacao.com.br/java-como-ler-um-arquivo-com-a-classe-scanner/" rel="alternate"></link><published>2018-05-02T00:00:00-03:00</published><updated>2018-05-02T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-05-02:/java-como-ler-um-arquivo-com-a-classe-scanner/</id><summary type="html">&lt;p&gt;Muitas pessoas têm dúvidas de como ler os dados de um arquivo em java.
Neste post aprensento uma das formas mais simples de fazer isso:
Utilizando a classe &lt;code&gt;java.util.Scanner&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Um dos construtores da classe &lt;strong&gt;Scanner&lt;/strong&gt; recebe um arquivo …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Muitas pessoas têm dúvidas de como ler os dados de um arquivo em java.
Neste post aprensento uma das formas mais simples de fazer isso:
Utilizando a classe &lt;code&gt;java.util.Scanner&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Um dos construtores da classe &lt;strong&gt;Scanner&lt;/strong&gt; recebe um arquivo como parâmetro.
Criando o objeto Scanner com este construtor, ele vai utilizar o arquivo como entrada de dados.&lt;/p&gt;
&lt;p&gt;Confira o exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerArquivoComScanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileNotFoundException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextLine&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O exemplo acima, lê o arquivo &lt;code&gt;C:\temp\arquivo.txt&lt;/code&gt; e imprime o seu
conteúdo no console.&lt;/p&gt;
&lt;h2&gt;A classe Scanner&lt;/h2&gt;
&lt;p&gt;A classe Scanner é muito poderosa e foi introduzida a partir do &lt;strong&gt;Java 5&lt;/strong&gt;
com o objetivo de facilitar a entrada de dados no modo Console.&lt;/p&gt;
&lt;p&gt;Uma das características mais interessante da classe &lt;code&gt;Scanner&lt;/code&gt;
é a possibilidade de obter o valor do Stream diretamente
no formato do seu tipo primitivo.
Para isso basta utilizar os métodos &lt;code&gt;next&lt;/code&gt; do tipo primitivo
no formato &lt;code&gt;nextTipoDado()&lt;/code&gt;.
Além disso é possível fazer filtros com Regex e muitas outras coisas.&lt;/p&gt;
&lt;p&gt;Se quiser ver algumas outras utilizações da classe Scanner,
confira este outro post aqui do blog:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dicasdeprogramacao.com.br/java-como-ler-dados-do-console-com-a-classe-scanner/" target="_blank"&gt;&lt;strong&gt;&amp;gt;&amp;gt; Java: Como ler dados do Console com a classe Scanner&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html" target="_blank"&gt;Javadoc: Scanner&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java"></category><category term="Arquivo"></category><category term="Scanner"></category></entry><entry><title>Intellij IDEA: Atalho para public static void main</title><link href="https://dicasdeprogramacao.com.br/intellij-idea-atalho-para-public-static-void-main/" rel="alternate"></link><published>2018-04-23T00:00:00-03:00</published><updated>2018-04-23T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-04-23:/intellij-idea-atalho-para-public-static-void-main/</id><summary type="html">&lt;p&gt;Para gerar o método main do java &lt;code&gt;public static void main&lt;/code&gt; no &lt;strong&gt;Intellij IDEA&lt;/strong&gt;,
basta digitar as iniciais de cada palavra, ou seja &lt;code&gt;psvm&lt;/code&gt; e pressionar TAB ou ENTER.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Atalho psvm no IntelliJ" src="/images/intellij-idea-atalho-para-public-static-void-main/psvm.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Com esse atalho o Intellij IDEA gera o método &lt;code&gt;public static …&lt;/code&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para gerar o método main do java &lt;code&gt;public static void main&lt;/code&gt; no &lt;strong&gt;Intellij IDEA&lt;/strong&gt;,
basta digitar as iniciais de cada palavra, ou seja &lt;code&gt;psvm&lt;/code&gt; e pressionar TAB ou ENTER.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Atalho psvm no IntelliJ" src="/images/intellij-idea-atalho-para-public-static-void-main/psvm.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Com esse atalho o Intellij IDEA gera o método &lt;code&gt;public static void main&lt;/code&gt; automaticamente.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado do Atalho psvm no IntelliJ" src="/images/intellij-idea-atalho-para-public-static-void-main/psvm.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/help/idea/auto-completing-code.html" target="_blank"&gt;Intellij IDEA Help: code completion&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="atalhos"></category><category term="Intellij IDEA"></category></entry><entry><title>Intellij IDEA: Atalho para System.out.println</title><link href="https://dicasdeprogramacao.com.br/intellij-idea-atalho-para-systemoutprintln/" rel="alternate"></link><published>2018-04-23T00:00:00-03:00</published><updated>2018-04-23T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-04-23:/intellij-idea-atalho-para-systemoutprintln/</id><content type="html">&lt;p&gt;Para gerar o código &lt;code&gt;System.out.println&lt;/code&gt; no &lt;strong&gt;Intellij IDEA&lt;/strong&gt;,
basta digitar &lt;code&gt;sout&lt;/code&gt; e pressionar TAB ou ENTER.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Atalho sout no IntelliJ" src="/images/intellij-idea-atalho-para-systemoutprintln/sout.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;Com esse atalho o Intellij IDEA gera um &lt;code&gt;System.out.println&lt;/code&gt; automaticamente.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado do Atalho sout no IntelliJ" src="/images/intellij-idea-atalho-para-systemoutprintln/sout.gif" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/help/idea/auto-completing-code.html" target="_blank"&gt;Intellij IDEA Help: code completion&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="atalhos"></category><category term="Intellij IDEA"></category></entry><entry><title>Como gerar um número aleatório em Java</title><link href="https://dicasdeprogramacao.com.br/como-gerar-um-numero-aleatorio-em-java/" rel="alternate"></link><published>2018-04-10T00:00:00-03:00</published><updated>2018-04-10T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-04-10:/como-gerar-um-numero-aleatorio-em-java/</id><summary type="html">&lt;p&gt;Gerar número aleatório em java é uma tarefa fácil.&lt;/p&gt;
&lt;p&gt;Primeiro você precisa importar a classe &lt;code&gt;Random&lt;/code&gt; do pacote &lt;code&gt;java.util&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Random&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora você pode instanciar um objeto da classe &lt;code&gt;Random&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Random&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pronto! Com o …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Gerar número aleatório em java é uma tarefa fácil.&lt;/p&gt;
&lt;p&gt;Primeiro você precisa importar a classe &lt;code&gt;Random&lt;/code&gt; do pacote &lt;code&gt;java.util&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Random&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora você pode instanciar um objeto da classe &lt;code&gt;Random&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Random&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pronto! Com o objeto &lt;code&gt;random&lt;/code&gt; você pode gerar números aleatórios! :)&lt;/p&gt;
&lt;p&gt;Vejamos como gerar números aleatórios inteiros e reais.&lt;/p&gt;
&lt;h3&gt;Gerando números inteiros aleatórios de 0 à 100&lt;/h3&gt;
&lt;p&gt;Para gerar números aleatórios inteiros de 0 até um determinado valor, basta chamar o método &lt;code&gt;nextInt&lt;/code&gt;
informando o valor máximo. No nosso exemplo o máximo é 100:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Gerando números reais aleatórios&lt;/h3&gt;
&lt;p&gt;Números reais são gerados de 0 até 1 com a função &lt;code&gt;nextDouble&lt;/code&gt;.
Logo, se você quiser um número aleatório de 0 até o número que você quiser, basta multiplicar por ele.&lt;/p&gt;
&lt;p&gt;Por exemplo, para gerar um número aleatório de 0 até 100 basta multiplicar o número gerado por 100.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextDouble&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//Número aleatório de 0 à 100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Código de exemplo&lt;/h3&gt;
&lt;p&gt;No código abaixo, podemos ver a geração de números aleatórios conforme expliquei acima.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Random&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;GerarNumeroAleatorio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Random&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroInteiroAleatorio_0_a_10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Número inteiro aleatório de 0 até 10: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroInteiroAleatorio_0_a_10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroRealAleatorio_0_a_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextDouble&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Número real aleatório de 0 até 1: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroRealAleatorio_0_a_1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroRealAleatorio_0_a_10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextDouble&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Número real aleatório de 0 até 10: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroRealAleatorio_0_a_10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Exemplo de saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Número inteiro aleatório de 0 até 100: 43
Número real aleatório de 0 até 1: 0.16296306514069792
Número real aleatório de 0 até 100: 46.890481714549026
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html" target="_blank"&gt;JavaDoc: Random&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Random"></category></entry><entry><title>Java: Como converter String para int</title><link href="https://dicasdeprogramacao.com.br/java-como-converter-string-para-int/" rel="alternate"></link><published>2018-01-19T00:00:00-02:00</published><updated>2018-01-19T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-01-19:/java-como-converter-string-para-int/</id><summary type="html">&lt;p&gt;Muitas vezes precisamos converter um texto em um número para, por exemplo, fazer cálculos.&lt;/p&gt;
&lt;p&gt;Para converter uma String em um int em java basta utilizar o método &lt;code&gt;parseInt&lt;/code&gt; da class wrapper &lt;code&gt;Integer&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Muitas vezes precisamos converter um texto em um número para, por exemplo, fazer cálculos.&lt;/p&gt;
&lt;p&gt;Para converter uma String em um int em java basta utilizar o método &lt;code&gt;parseInt&lt;/code&gt; da class wrapper &lt;code&gt;Integer&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConverterStringParaInt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;25&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroConvertido&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroVezes2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroConvertido&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Resultado: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroVezes2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Resultado&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Tratando número inválido&lt;/h2&gt;
&lt;p&gt;Caso o texto que está sendo convertido não seja um número válido.
o método &lt;code&gt;Integer.parseInt(String)&lt;/code&gt; lançará uma Exceção do tipo &lt;strong&gt;NumberFormatException&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Veja:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConverterStringParaInt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dez&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroConvertido&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroVezes2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroConvertido&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Resultado: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroVezes2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;thread&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;main&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;lang&lt;/span&gt;.&lt;span class="nv"&gt;NumberFormatException&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;string&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dez&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;lang&lt;/span&gt;.&lt;span class="nv"&gt;NumberFormatException&lt;/span&gt;.&lt;span class="nv"&gt;forInputString&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;NumberFormatException&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;lang&lt;/span&gt;.&lt;span class="nv"&gt;Integer&lt;/span&gt;.&lt;span class="nv"&gt;parseInt&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Integer&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;580&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;lang&lt;/span&gt;.&lt;span class="nv"&gt;Integer&lt;/span&gt;.&lt;span class="nv"&gt;parseInt&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Integer&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;615&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;br&lt;/span&gt;.&lt;span class="nv"&gt;com&lt;/span&gt;.&lt;span class="nv"&gt;dicasdejava&lt;/span&gt;.&lt;span class="nv"&gt;fundamentos&lt;/span&gt;.&lt;span class="nv"&gt;ConverterStringParaInt&lt;/span&gt;.&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ConverterStringParaInt&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Por isso, é sempre importante tratar esta exceção quando estiver convertendo
String para int.&lt;/p&gt;
&lt;p&gt;Assim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConverterStringParaInt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dez&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroConvertido&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroVezes2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroConvertido&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Resultado: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroVezes2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NumberFormatException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Número inválido!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Número inválido!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html" target="_blank"&gt;Javadoc: Integer&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java"></category><category term="String"></category><category term="int"></category><category term="conversão"></category></entry><entry><title>Porque utilizar SSG para criação de blogs</title><link href="https://dicasdeprogramacao.com.br/porque-utilizar-ssg-para-criacao-de-blogs/" rel="alternate"></link><published>2018-01-16T00:00:00-02:00</published><updated>2018-01-16T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-01-16:/porque-utilizar-ssg-para-criacao-de-blogs/</id><summary type="html">&lt;p&gt;Você decidiu criar um blog e o primeiro passo é fazer uma pesquisa no google sobre:
&lt;strong&gt;qual a melhor tecnologia para criar o próximo blog de sucesso da internet&lt;/strong&gt;.
Blogger? Wordpress?
Ao identificar as características de cada opção, percebemos que …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Você decidiu criar um blog e o primeiro passo é fazer uma pesquisa no google sobre:
&lt;strong&gt;qual a melhor tecnologia para criar o próximo blog de sucesso da internet&lt;/strong&gt;.
Blogger? Wordpress?
Ao identificar as características de cada opção, percebemos que
nem sempre é mais indicado seguir o que a maior parte das pessoas está fazendo.&lt;/p&gt;
&lt;p&gt;Neste post vou explicar porque na maioria dos casos
é mais indicado criar um blog utilizando um
&lt;strong&gt;Gerador de Site Estático&lt;/strong&gt; ou &lt;strong&gt;Static Site Generator&lt;/strong&gt; (SSG) em inglês,
 ao invés de um &lt;strong&gt;Sistema de Gerenciamento de Conteúdo&lt;/strong&gt; ou &lt;strong&gt;Content Management System&lt;/strong&gt; (CMS).&lt;/p&gt;
&lt;h1&gt;Desvantagens dos Sistemas de Gerencimento de Conteúdo&lt;/h1&gt;
&lt;p&gt;Geralmente os sistemas de gerenciamento de conteúdo (CMS) são sites dinâmicos.
Ou seja, são construídos com uma linguagem para WEB (como PHP, Java, Ruby, etc.),
utilizam um banco de dados (MySQL, Postgress, Oracle, SqlServer etc.)
e funcionam sobre um servidor de aplicações (Apache, Nginx, Tomcat, etc.).&lt;/p&gt;
&lt;p&gt;Provavelmente você já ouviu falar de &lt;strong&gt;Workpress&lt;/strong&gt;,
o CMS mais utilizado no mundo para criação de blogs.
Ele é construído em PHP com MySQL.&lt;/p&gt;
&lt;p&gt;O &lt;em&gt;Stack&lt;/em&gt; &lt;em&gt;PHP+MySQL&lt;/em&gt; utilizado pelo Wordpress é indicado para muitas situações simples,
principalmente quando você &lt;strong&gt;precisa&lt;/strong&gt; gerar as páginas web dinamicamente,
ou responder a um evento em tempo real.
Mas para a criação de um blog nem sempre há essa necessidade.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wordpress" class="aligncenter" src="/images/porque-utilizar-ssg-para-criacao-de-blogs/wordpress.png"&gt;&lt;/p&gt;
&lt;p&gt;No passado era bastante justificável a utilização de CMSs para blogs,
um blog geralmente precisa de um controle de acesso para o gerenciamento do conteúdo,
um formulário de contatos, gestão de comentários, etc.
E para implementar isso era necessário ter as soluções no próprio sistema de gestão do blog.
Mas hoje em dia todas essas necessidades podem ser atendidas por sistemas terceiros.&lt;/p&gt;
&lt;p&gt;Por exemplo, para gestão de comentários nós podemos utilizar o &lt;a href="https://disqus.com/" target="_blank"&gt;Disqus&lt;/a&gt;,
ou até mesmo o &lt;a href="https://developers.facebook.com/" target="_blank"&gt;Facebook&lt;/a&gt;.
Para formulário de contatos também existem vários serviços como &lt;a href="https://formspree.io" target="_blank"&gt;Formspree&lt;/a&gt; ou
&lt;a href="https://www.formbucket.com/" target="_blank"&gt;Formbucket&lt;/a&gt;.
Para controle de acesso de gestão de conteúdo, podemos utilizar o próprio &lt;a href="https://github.com/" target="_blank"&gt;Github&lt;/a&gt;,
com o processo de aprovação via &lt;em&gt;Pull Requests&lt;/em&gt; que a maioria dos programadores já está acostumada.&lt;/p&gt;
&lt;p&gt;Além de podermos utilizar sistemas terceiros para as partes dinâmicas do nosso blog,
CMSs como o Workdpress têm algumas desvantagens que já me deram algumas dores de cabeça no passado,
tanto aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;, quanto em um outro site meu chamado &lt;a href="https://musicasparamissa.com.br" target="_blank"&gt;&lt;strong&gt;Músicas para Missa&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Segurança&lt;/h2&gt;
&lt;p&gt;A principal desvantagem é que por ser o CMS mais utilizado no mundo,
o Wordpress sofre ataques harckers constantemente.
É frequente a descoberta de uma ou outra &lt;a href="https://www.google.com.br/search?q=falha+de+segurança+no+wordpress" target="_blank"&gt;brecha de segurança no Wordpress&lt;/a&gt;.
Eu mesmo já tive blog invadido por causa de uma dessas brechas de segurança.&lt;/p&gt;
&lt;p&gt;Não que o Wordpress seja ruim na parte de segurança, na verdade é um problema dos sistemas de sucesso, como o próprio Windows.
Por ser o mais utilizado, quando nós instalamos um wordpress é como se estivéssemos pintando um alvo na nossa testa (ou no nosso servidor).&lt;/p&gt;
&lt;p&gt;Também já perdi as contas de quantas vezes o meu servidor MySQL caiu quando este e outros blogs sofreram ataques DDOS.&lt;/p&gt;
&lt;h2&gt;Banco de dados&lt;/h2&gt;
&lt;p&gt;Uma outra desvantagem forte dos CMSs na minha opinião,
é que o histórico de alterações de conteúdo fica no banco de dados.
Eu sou totalmente contra essa característica dos CMS
por causa do fator "gestão de banco de dados" que isso implica.
É necessário ter um processo rígido de backup e também de um bom conhecimento
sobre a forma como o CMS faz esse gerenciamento de versões.&lt;/p&gt;
&lt;p&gt;Sabemos que todo programador curte os sistemas de gerenciamento de versões como GIT, SVN, etc.
Por que não utilizar esses sistemas para gerenciar o blog inteiro, principalmente o seu conteúdo?
&lt;a href="https://dicasdeprogramacao.com.br/migracao-do-blog-para-site-estatico/" target="_blank"&gt;Agora que o &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; é um blog estático&lt;/a&gt;
 eu escrevo post na minha IDE preferida. ;)&lt;/p&gt;
&lt;h2&gt;Custo&lt;/h2&gt;
&lt;p&gt;Ah como é bom pagar menos!
Com um site dinâmico nós precisamos nos preocupar com hospedagens, servidores, bancos de dados, escalabilidade, etc.
O custo para manter servidores para nosso blog vai lá nas alturas.&lt;/p&gt;
&lt;p&gt;Além disso, aplicações dinâmicas trazem uma série de preocupações para manter o site no ar.
Cache, persistência, segurança, infra-estrutura web, etc.
Por isso, manter um blog com um CMS pode ficar caro ao longo do tempo, com o aumento das visitas.&lt;/p&gt;
&lt;p&gt;Criando o seu blog como um &lt;strong&gt;site estático&lt;/strong&gt; você não precisa se preocupar com nada disso.
Pois no final das contas nós teremos apenas arquivos HTML, CSS e Javascript para hospedar em qualquer servidor barato.
Você poderá utilizar um &lt;a href="https://aws.amazon.com/pt/s3/" target="_blank"&gt;S3 da Amazon Web Service&lt;/a&gt;
com custo baixíssimo, ou mesmo hospedar o seu blog de graça no &lt;a href="https://pages.github.com/" target="_blank"&gt;Github Pages&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Geradores de Sites Estáticos&lt;/h1&gt;
&lt;p&gt;Apresentados os problemas para se manter um blog diâmico,
os &lt;em&gt;Geradores de Sites Estáticos&lt;/em&gt; vem se mostrando a melhor solução para a maioria dos blogs.&lt;/p&gt;
&lt;p&gt;Os &lt;strong&gt;Static Site Generators&lt;/strong&gt; (SSG) são programas processadores que unem conteúdo,
algumas configurações, tema e plugins para criar as páginas do site.
O resultado é uma pasta que contém os arquivos estáticos que compõem o site.
Depois do site gerado você pode hospedá-lo em qualquer servidor básico de conteúdo estático.&lt;/p&gt;
&lt;p&gt;O próprio Github tem um projeto chamado &lt;a href="https://pages.github.com/"&gt;Github Pages&lt;/a&gt;
que hospeda o site estático gratuitamente com alguns &lt;a href="https://help.github.com/articles/what-is-github-pages/#usage-limits"&gt;limites de uso&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Static Site Generator" class="aligncenter" src="/images/porque-utilizar-ssg-para-criacao-de-blogs/ssg.png"&gt;&lt;/p&gt;
&lt;p&gt;Existem SSGs em diferentes linguagens como você pode conferir &lt;a href="https://www.staticgen.com/"&gt;neste link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O mais famoso é o &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;, feito em Ruby.
Mas eu uso e gosto bastante do &lt;a href="https://blog.getpelican.com/"&gt;Pelican&lt;/a&gt;,
que é feito em Python e inclusive utilizo para gerar este blog.
Não sou um defensor do Pelican. O que me atraiu mais para utilizá-lo
é a tecnologia de templates (Jinja2) que é mesma tecnologia do django.&lt;/p&gt;
&lt;h2&gt;Vantagens de se utilizar um SSG&lt;/h2&gt;
&lt;p&gt;Com os SSGs obtemos algumas vantagens em relação aos CMSs para blogs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Controle de versão para o conteúdo do blog (histórico e gestão de conteúdo);&lt;/li&gt;
&lt;li&gt;Escalabilidade para acesso em massa do blog (inclusive ataques DDOS);&lt;/li&gt;
&lt;li&gt;Proteção contra ataques (eles não tem o quê invadir);&lt;/li&gt;
&lt;li&gt;Escrever conteúdos para o blog como se estivesse programando
(Abre o código do blog na sua IDE favorita e divirta-se);&lt;/li&gt;
&lt;li&gt;É mais barato! Qualquer servidorzinho de site estático é mais barato
que uma hospedagem de site dinâmico.&lt;/li&gt;
&lt;li&gt;Estabilidade. Por exemplo eu armazeno meus blogs no S3 da Amazon (barato).
O dia em que a Amazon cair você não poderá ver suas séries favoritas da Netflix.&lt;/li&gt;
&lt;li&gt;Preview offline.
  No momento em que escrevo este post eu estou em um lugar sem internet ;)
  e visualizando como ficará o post no blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Além disso, é possível utilizar ferramentas de integração contínua (como Travis-CI, Cicle-CI, Jenkins, etc),
para fazer o deploy do blog direto no seu servidor de site estático.&lt;/p&gt;
&lt;p&gt;Eu, particularmente, armazeno os códigos-fonte dos meus blogs no meu &lt;a href="https://github.com/gustavofoa"&gt;github&lt;/a&gt;
e uso o &lt;a href="https://travis-ci.org/"&gt;Travis-CI&lt;/a&gt; para fazer deploy automaticamente deles no S3 da Amazon
a cada commit/push que eu faço no &lt;em&gt;master&lt;/em&gt; do meu repositório remoto.
Ou seja, não preciso nem me preocupar com a publicação do post,
só enviar o código fonte para o github!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Travis-CI" class="aligncenter" src="/images/porque-utilizar-ssg-para-criacao-de-blogs/travis-ci-gustavo.png"&gt;&lt;/p&gt;
&lt;h2&gt;Concluindo ...&lt;/h2&gt;
&lt;p&gt;Muita gente tem preconceito de SSGs por exigir um pouco mais de conhecimento técnico
em comparação aos CMSs como Wordpress.
Temos que concordar, criar um blog com Wordpress é muito simples e
tem várias hospedagens que fornecem um serviço de instalação do Wordpress
com apenas 1 clique. O dono do blog não precisa se preocupar (por enquanto) com PHP, MySQL, Apache, etc.&lt;/p&gt;
&lt;p&gt;Mas ao mesmo tempo que a barreira de entrada do Wordpress é muito pequena,
todo mundo que cria um blog, quer que ele cresça, e isso significa que
será necessário se preocupar com questões técnicas para mantê-lo no ar no futuro.
Com um site estático você está apenas antecipando esta preocupação.&lt;/p&gt;
&lt;p&gt;Além disso, configurar e personalizar temas e plugins deixa de ser tão trivial quanto instalar o Wordpress,
sendo necessário contratar programadores e designers para deixar o blog como o blogueiro quer.&lt;/p&gt;
&lt;p&gt;Os SSGs antecipam essa parte para a criação do blog, mas depois que ele já está criado,
configurado e personalizado, não tem mais preocupação nenhuma. Só criar conteúdo!&lt;/p&gt;
&lt;p&gt;E aí, já conhecia os SSGs? Gostou?
Algo a compartilhar sobre o assunto?
Escreva aqui abaixo, no serviço de comentários (disqus) que eu não criei por ser diâmico
... ;)&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="Blogs"></category></entry><entry><title>Migração do blog para Site Estático</title><link href="https://dicasdeprogramacao.com.br/migracao-do-blog-para-site-estatico/" rel="alternate"></link><published>2018-01-11T00:00:00-02:00</published><updated>2018-01-11T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-01-11:/migracao-do-blog-para-site-estatico/</id><summary type="html">&lt;p&gt;Já faz um tempo que não publico nada aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;,
o último post foi publicado em &lt;a href="https://dicasdeprogramacao.com.br/ingles-tecnico-para-programadores/" target="_blank"&gt;maio de 2016&lt;/a&gt;.
Infelizmente eu fiquei bastante tempo sem escrever aqui para me dedicar a outros
&lt;a href="http://gustavofurtado.com.br/projetos" target="_blank"&gt;projetos&lt;/a&gt;.
Mas recebo e-mails todos …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Já faz um tempo que não publico nada aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;,
o último post foi publicado em &lt;a href="https://dicasdeprogramacao.com.br/ingles-tecnico-para-programadores/" target="_blank"&gt;maio de 2016&lt;/a&gt;.
Infelizmente eu fiquei bastante tempo sem escrever aqui para me dedicar a outros
&lt;a href="http://gustavofurtado.com.br/projetos" target="_blank"&gt;projetos&lt;/a&gt;.
Mas recebo e-mails todos os dias de pessoas agradecendo pelos meus posts,
dizendo que minha forma de explicar as ajudaram a entender conceitos básicos de programação.
O &lt;a href="https://mclp.dicasdeprogramacao.com.br/" target="_blank"&gt;minicurso gratuito por e-mail de lógica de programação&lt;/a&gt;
recebe novos inscritos todos os dias e também recebo muitos e-mails de alunos agradecendo
pelo minicurso.&lt;/p&gt;
&lt;p&gt;Esse carinho dos alunos e leitores do blog me insentivaram a voltar a escrever.
Mas antes eu precisava refleti um pouco sobre o motivo de eu ter ficado tanto tempo sem escrever aqui.
Percebi que o processo de abrir a área administrativa do wordpress para escrever um post
era uma barreira para mim.
Eu não sou um escritor, pra mim não é natural abrir o word ou o wordpress para escrever.
Pra mim é natural abrir uma IDE para programar, escrever códigos.&lt;/p&gt;
&lt;h2&gt;Escrever posts como se estivesse programando&lt;/h2&gt;
&lt;p&gt;Então eu descobri os &lt;strong&gt;geradores de site estático&lt;/strong&gt; (&lt;em&gt;Static Site Generators&lt;/em&gt; - SSGs),
comecei a pesquisar sobre o assunto e descobri várias vantagens de se ter um blog estático.
Mas a principal vantagem pra mim era que eu iria escrever posts como se estivesse programando,
armazenando meu blog como um código no &lt;a href="https://github.com/gustavofoa/dicasdeprogramacao.com.br/" target="_blank"&gt;github&lt;/a&gt;,
criando &lt;em&gt;branches&lt;/em&gt;, fazendo &lt;em&gt;commits&lt;/em&gt;, &lt;em&gt;merge&lt;/em&gt;, &lt;em&gt;push&lt;/em&gt;, etc.&lt;/p&gt;
&lt;p&gt;Agora eu estou escrevendo este post em um lugar sem internet e
utilizando a IDE que trabalho diariamente &lt;a href="https://www.jetbrains.com/idea/" target="_blank"&gt;IntelliJ IDEA&lt;/a&gt;
, veja:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Escrevendo post com uma IDE" src="/images/migracao-do-blog-para-site-estatico/escrevendo-post-com-uma-ide.png"&gt;&lt;/p&gt;
&lt;p&gt;Existem muitas vantagens de se ter um blog como um site estático,
mas não vou falar disso neste post, prefiro escrever um post dedicado a isso.
Mas só o fato de poder escrever posts sem precisar abrir a área administrativa do Wordpress
já me conquistou e eu decidi migrar o &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; para esta tecnologia.&lt;/p&gt;
&lt;h2&gt;A migração de Wordpress para Pelican&lt;/h2&gt;
&lt;p&gt;Dentre os vários geradores de site estático (&lt;strong&gt;SSGs&lt;/strong&gt;), eu escolhi o &lt;a href="https://blog.getpelican.com/" target="_blank"&gt;Pelican&lt;/a&gt;
e comecei a entender o seu funcionamento para fazer a migração.&lt;/p&gt;
&lt;p&gt;Não tive grandes dificuldades para fazer a migração.
Basicamente é necessário entender como um blog é estruturado em qualquer plataforma.
Um blog tem &lt;em&gt;posts, páginas, categorias, tags, temas, plugins&lt;/em&gt;, etc.
Tanto o Wordpress o Blogger, quanto outras tecnologias de blog têm os mesmos conceitos,
com poucas diferenças entre elas. Para SSGs não é diferente.&lt;/p&gt;
&lt;p&gt;A coisa mais importante que se tem que ter em mente ao migrar um blog para SSG é
a identificação do que tem que ser dinâmico no blog, ou seja, o que tem que ser gerado
no servidor no momento da requisição de uma página do blog.
Se as páginas do blog serão geradas apenas uma vez ao invés de serem geradas no momento
em que um usuário abre uma página, as partes necessariamente dinâmicas não
podem ficar sob responsabilidade do blog mais, para isso usamos outros serviços.&lt;/p&gt;
&lt;p&gt;Por exemplo, &lt;strong&gt;os comentários&lt;/strong&gt; de todas os posts são diâmicos.
Quando alguém faz um comentário, este deve aparecer na página do post daquele momento em diante,
mas o blog não é gerado novamente toda vez que alguém comenta no blog.
Para isso nós podemos usar alguns serviços terceirizados.
Aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; estou utilizando o &lt;a href="https://disqus.com/" target="_blank"&gt;Disqus&lt;/a&gt;,
para gerenciar os comentários e mostrá-los dinâmicamente nos posts.
O &lt;a href="https://developers.facebook.com/docs/plugins/comments/" target="_blank"&gt;Facebook&lt;/a&gt; também tem o mesmo serviço.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Utilizando o Disqus para o serviço de comentários" src="/images/migracao-do-blog-para-site-estatico/disqus.png" target="_blank"&gt;&lt;/p&gt;
&lt;p&gt;Outra parte dinâmica do blog é o formulário de contatos,
para este serviço eu utilizei o &lt;a href="https://formspree.io/" target="_blank"&gt;Formspree&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Além da parte dinâmica, se você deseja utilizar o mesmo tema do seu blog wordpress,
será necessário migrá-lo para a tecnologia de template do SSG.
Este foi o principal motivo de eu ter escolhido utilizar o Pelican,
pois este utiliza &lt;a href="http://jinja.pocoo.org/" target="_blank"&gt;Jinja2&lt;/a&gt; para template.&lt;/p&gt;
&lt;p&gt;Fiz a migração do tema wordpress para pelican sem grandes dificuldades,
mas tenho que reconhecer que essa parte não é trivial,
é necessário ter conhecimento de programação, além de HTML, CSS e Javascript.
Mas a maioria dos SSGs tem boa documentação para ajudar nesta tarefa.&lt;/p&gt;
&lt;p&gt;Por fim sobraram os plugins. A quantidade de plugins disponível depende do SSG
e evidentemente a maioria dos plugins do wordpress não existem nos SSGs, pois
Infelizmente grande parte deles precisam necessariamente ser dinâmicos,
ou seja, precisam ser executados no momento da requisição da página do blog.
O que os impede de serem utilizados com um SSG.
Os SSGs mais famosos como Jekyll, Pelican, Hugo, têm bastante plugins.
Mas é necessário ter em mente que eles serão executados no momento da geração do blog,
não no momento em que alguém faz a requisição para uma página.&lt;/p&gt;
&lt;h2&gt;De volta à ativa&lt;/h2&gt;
&lt;p&gt;Infelizmente o &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; ficou um pouco abandonado nos últimos tempos.
Há tempos eu queria voltar a publicar por aqui, mas ficava adiando.&lt;/p&gt;
&lt;p&gt;Final de ano é sempre um tempo para fazer uma retrospectiva e corrigir o trajeto da caminhada.
Em 2018 pretendo voltar à ativa aqui no blog e essa migração para &lt;em&gt;site estático&lt;/em&gt;,
foi uma ação para evitar um bloqueio mental que eu sempre tive de &lt;strong&gt;não escritor&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Agora, escrevendo posts em arquivos, fazendo commits
e utilizando a mesma IDE que utilizo diariamente,
acredito que terei mais ânimo para escrever.&lt;/p&gt;
&lt;p&gt;Na próxima semana vou postar um artigo com as vantagens de se utilizar um SSG,
ao invés de um CMS como o Wordpress.&lt;/p&gt;
&lt;p&gt;Até lá!&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="blogs"></category></entry><entry><title>Java 8: Como formatar LocalDate e LocalDateTime</title><link href="https://dicasdeprogramacao.com.br/java-8-como-formatar-localdate-e-localdatetime/" rel="alternate"></link><published>2018-01-10T00:00:00-02:00</published><updated>2018-01-10T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-01-10:/java-8-como-formatar-localdate-e-localdatetime/</id><summary type="html">&lt;p&gt;Quando vamos imprimir uma data geralmente queremos que ela seja impressa em um formato específico.&lt;/p&gt;
&lt;p&gt;A forma mais simples de formatar &lt;code&gt;LocalDate&lt;/code&gt; e &lt;code&gt;LocalDateTime&lt;/code&gt; é usando a classe &lt;code&gt;DateTimeFormatter&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja um exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.LocalDate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.LocalDateTime …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Quando vamos imprimir uma data geralmente queremos que ela seja impressa em um formato específico.&lt;/p&gt;
&lt;p&gt;A forma mais simples de formatar &lt;code&gt;LocalDate&lt;/code&gt; e &lt;code&gt;LocalDateTime&lt;/code&gt; é usando a classe &lt;code&gt;DateTimeFormatter&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja um exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.LocalDate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.LocalDateTime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.time.format.DateTimeFormatter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FormatarLocalDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Obtém LocalDate de hoje&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LocalDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hoje&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LocalDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDate antes de formatar: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hoje&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DateTimeFormatter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTimeFormatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofPattern&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dd/MM/yyyy&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hojeFormatado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hoje&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDate depois de formatar: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hojeFormatado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Obtém LocalDateTime de agora&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LocalDateTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agora&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LocalDateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDateTime antes de formatar: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agora&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTimeFormatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofPattern&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dd/MM/yyyy HH:mm:ss&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agoraFormatado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agora&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDateTime depois de formatar: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agoraFormatado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída (No momento em que executo este programa):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;LocalDate antes de formatar: 2018-01-07
LocalDate depois de formatar: 07/01/2018
LocalDateTime antes de formatar: 2018-01-07T16:11:26.485
LocalDateTime depois de formatar: 07/01/2018 16:11:26
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Padrões de formatação&lt;/h2&gt;
&lt;p&gt;Você deve ter observado que utilizei &lt;code&gt;dd/MM/yyyy&lt;/code&gt; para formatar a data e
&lt;code&gt;dd/MM/yyyy HH:mm:ss&lt;/code&gt;.
Para escrever estes formatos eu me baseei no
&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html" target="_blank"&gt;JavaDoc da classe DateTimeFormatter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Existem muitas possibilidades de formatação das datas/horas
escrevendo números, palavras (como os meses do ano), abreviações, etc.&lt;/p&gt;
&lt;p&gt;Você não precisa saber tudo, claro que é muito bom dar uma boa estudada,
mas vou deixar aqui alguns formatos básicos para você brincar com as formatações de data/hora.
Primeiro o formato normal que todo mundo usa com o mínimo de dois dígitos para cada número,
e quatro dígitos para o ano&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;dd&lt;/strong&gt;: dia do mês com mínimo de dois dígitos (01 à 31)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MM&lt;/strong&gt;: mês do ano com mínimo de dois dígitos (01 à 12)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;yyyy&lt;/strong&gt;: ano com quatro dígitos (exemplo: 2018)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HH&lt;/strong&gt;: horas com mínimo de dois dígitos (00 à 24)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mm&lt;/strong&gt;: minutos com mínimo de dois dígitos (00 à 59)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ss&lt;/strong&gt;: minutos com mínimo de dois dígitos (00 à 59)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hh&lt;/strong&gt;: horas (até 12) com mínimo de dois dígitos (00 à 12)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Além dos formatos mais comuns citados acima, também pode-se obter variações deles.
Veja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;d&lt;/strong&gt;: dia do mês com mínimo de um dígito (1 à 31)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;M&lt;/strong&gt;: mês do ano com mínimo de um dígito (1 à 12)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;yy&lt;/strong&gt;: ano com dois dígitos (exemplo: 18)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;H&lt;/strong&gt;: horas com mínimo de um dígito (0 à 24)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;m&lt;/strong&gt;: minutos com mínimo de um dígito (0 à 59)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;s&lt;/strong&gt;: minutos com mínimo de um dígito (0 à 59)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h&lt;/strong&gt;: horas (até 12) com mínimo de um dígito (0 à 12)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O exemplo abaixo mostra a utilização dos formatos com mínimos de um dígito.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;LocalDateTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agora&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LocalDateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;DateTimeFormatter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTimeFormatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofPattern&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;d/M/y h:m:s&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agoraFormatado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agora&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;LocalDateTime formatado: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;agoraFormatado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;LocalDateTime formatado: 7/1/2018 4:32:4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Com isso você já pode brincar bastante com as formatações de Data/Hora em Java.&lt;/p&gt;
&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html" target="_blank"&gt;JavaDoc: DateTimeFormatter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java 8"></category><category term="Formatação"></category><category term="Date"></category></entry><entry><title>Java: Como fazer download de um arquivo</title><link href="https://dicasdeprogramacao.com.br/java-como-fazer-download-de-um-arquivo/" rel="alternate"></link><published>2018-01-03T00:00:00-02:00</published><updated>2018-01-03T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2018-01-03:/java-como-fazer-download-de-um-arquivo/</id><summary type="html">&lt;p&gt;As vezes precisamos baixar um arquivo utilizando Java e existem várias formas de fazer isso.
Neste post você verá 3 formas de fazer o download de um arquivo com Java.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apache Commons IO&lt;/li&gt;
&lt;li&gt;Java IO&lt;/li&gt;
&lt;li&gt;Java NIO&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Apache Commons IO …&lt;/h2&gt;</summary><content type="html">&lt;p&gt;As vezes precisamos baixar um arquivo utilizando Java e existem várias formas de fazer isso.
Neste post você verá 3 formas de fazer o download de um arquivo com Java.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apache Commons IO&lt;/li&gt;
&lt;li&gt;Java IO&lt;/li&gt;
&lt;li&gt;Java NIO&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Apache Commons IO&lt;/h2&gt;
&lt;p&gt;A minha forma preferida de baixar arquivos com Java, e algumas outras tarefas,
é utilizando a biblioteca &lt;em&gt;Commons IO&lt;/em&gt; da Apache.&lt;/p&gt;
&lt;p&gt;A Commons IO tem uma classe chamada FileUtils que tem vários métodos estáticos úteis,
um deles é o &lt;code&gt;FileUtils.copyURLToFile(URL source, File destination)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O código abaixo mostra um exemplo de como baixar um arquivo utilizando a &lt;em&gt;Apache Commons IO&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdeprogramacao.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.apache.commons.io.FileUtils&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.File&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.net.URL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DownloadFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://dicasdeprogramacao.com.br/images/logo-java.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo-baixado.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FileUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;copyURLToFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Lembrando que é necessário adicionar a biblioteca &lt;em&gt;Commons IO&lt;/em&gt;
como dependência do seu projeto.
Se você estiver utilizando o maven, basta adicionar a dependência do Apache Commons IO no seu arquivo pom.xml.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;commons-io&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-io&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.6&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Java IO&lt;/h2&gt;
&lt;p&gt;Uma forma de baixar um arquivo com java, sem usar nenhuma dependência,
é com o pacote java.io nativo do java.&lt;/p&gt;
&lt;p&gt;Basta obter o arquivo num InputStream e escrevê-lo num FileOutputStream.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdeprogramacao.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.File&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.FileOutputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.InputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.net.URL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DownloadFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://dicasdeprogramacao.com.br/images/logo-java.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo-baixado.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;openStream&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FileOutputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileOutputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;fos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;fos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Java NIO&lt;/h2&gt;
&lt;p&gt;Por fim, também podemos usar outro pacote nativo do Java: &lt;strong&gt;java.nio&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdeprogramacao.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.File&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.net.URL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.channels.Channels&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.nio.channels.ReadableByteChannel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DownloadFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://dicasdeprogramacao.com.br/images/logo-java.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/home/gustavo/arquivo-baixado.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ReadableByteChannel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Channels&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;openStream&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FileOutputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileOutputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;fos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getChannel&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;transferFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MAX_VALUE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;fos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;rbc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://mvnrepository.com/artifact/org.apache.commons/commons-io" target="_blank"&gt;Maven: Commons IO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://commons.apache.org/proper/commons-io/javadocs/api-2.6/org/apache/commons/io/FileUtils.html" target="_blank"&gt;JavaDoc: FileUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/net/URL.html" target="_blank"&gt;JavaDoc: URL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileOutputStream.html" target="_blank"&gt;JavaDoc: FileOutputStream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html" target="_blank"&gt;JavaDoc: InputStream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html" target="_blank"&gt;JavaDoc: FileChannel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/ReadableByteChannel.html" target="_blank"&gt;JavaDoc: ReadableByteChannel&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Array"></category><category term="List"></category><category term="Arrays"></category></entry><entry><title>Java: Operador IN - Verificando se um valor existe em um Array</title><link href="https://dicasdeprogramacao.com.br/java-operador-in-verificando-se-um-valor-existe-em-um-array/" rel="alternate"></link><published>2017-09-11T00:00:00-03:00</published><updated>2017-09-11T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-09-11:/java-operador-in-verificando-se-um-valor-existe-em-um-array/</id><summary type="html">&lt;p&gt;Em algumas linguagens de programação existem operadores para operações com conjuntos.
Um exemplo é o operador &lt;code&gt;in&lt;/code&gt; em python, como podemos ver abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Operador in na linguagem python" class="center-image" src="/images/java-operador-in-verificando-se-um-valor-existe-em-um-array/in-python.png"&gt;&lt;/p&gt;
&lt;p&gt;Em java &lt;strong&gt;não existe&lt;/strong&gt; o operador &lt;code&gt;in&lt;/code&gt;, mas podemos fazer essa verificação de outras maneiras.&lt;/p&gt;
&lt;h2&gt;Método &lt;strong&gt;&lt;em&gt;contains …&lt;/em&gt;&lt;/strong&gt;&lt;/h2&gt;</summary><content type="html">&lt;p&gt;Em algumas linguagens de programação existem operadores para operações com conjuntos.
Um exemplo é o operador &lt;code&gt;in&lt;/code&gt; em python, como podemos ver abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Operador in na linguagem python" class="center-image" src="/images/java-operador-in-verificando-se-um-valor-existe-em-um-array/in-python.png"&gt;&lt;/p&gt;
&lt;p&gt;Em java &lt;strong&gt;não existe&lt;/strong&gt; o operador &lt;code&gt;in&lt;/code&gt;, mas podemos fazer essa verificação de outras maneiras.&lt;/p&gt;
&lt;h2&gt;Método &lt;strong&gt;&lt;em&gt;contains&lt;/em&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;A forma mais simples de fazer essa verificação em uma lista de &lt;strong&gt;objetos&lt;/strong&gt;
é utilizando o método &lt;code&gt;contains&lt;/code&gt; da interface &lt;code&gt;List&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Lembrando que podemos
&lt;a href="http://dicasdeprogramacao.com.br/java-como-converter-array-para-list/" target="_blank"&gt;converter um array em uma lista&lt;/a&gt;
de forma bem simples com o método &lt;code&gt;Arrays.asList()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ListaContem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;3 in a = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;5 in a = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;6 in a = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entretanto, essa forma só funciona para uma lista de Objetos!
Não funciona para tipos primitivos, pois java não permite a criação de uma lista
 de tipo genérico primitivo.&lt;/p&gt;
&lt;p&gt;Por exemplo, isso não é permitido em java:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;- NÃO COMPILA!!!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Verificação em Tipo primitivo&lt;/h2&gt;
&lt;p&gt;Vimos que não é possível utilizar o método &lt;code&gt;contains&lt;/code&gt; para arrays de tipo primitivo.&lt;/p&gt;
&lt;p&gt;Entretanto, podemos fazer essa verificação com Java 8 usando &lt;em&gt;Lambda&lt;/em&gt;
e a classe de Stream do tipo primitivo.&lt;/p&gt;
&lt;p&gt;No nosso exemplo vamos utilizar a class &lt;code&gt;java.util.stream.IntStream&lt;/code&gt;,
mas poderíamos utilizar as classes &lt;code&gt;LongStream&lt;/code&gt; ou &lt;code&gt;DoubleStream&lt;/code&gt;
dependendo do tipo primitivo do array.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.stream.IntStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ContainsParaTipoPrimitivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;3 in a = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IntStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;anyMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;5 in a = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IntStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;anyMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;6 in a = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IntStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;anyMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" target="_blank"&gt;Javadoc: java.util.stream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html" target="_blank"&gt;Javadoc: IntStream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html" target="_blank"&gt;Javadoc: Arrays&lt;/a&gt;
4&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html" target="_blank"&gt;Javadoc: List&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java 8"></category><category term="Operadores"></category></entry><entry><title>Java: Como converter um InputStream em String</title><link href="https://dicasdeprogramacao.com.br/java-como-converter-um-inputstream-em-string/" rel="alternate"></link><published>2017-07-30T00:00:00-03:00</published><updated>2017-07-30T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-30:/java-como-converter-um-inputstream-em-string/</id><summary type="html">&lt;p&gt;Para converter um InputStream, que pode ser qualquer fonte de informação,
em um String nós podemos fazer uso do método estático &lt;code&gt;IOUtils.toString(inputStream)&lt;/code&gt;
da biblioteca &lt;strong&gt;Apache Commons IO&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Um InputStream pode ser vários tipos de fonte de inforamação,
um …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para converter um InputStream, que pode ser qualquer fonte de informação,
em um String nós podemos fazer uso do método estático &lt;code&gt;IOUtils.toString(inputStream)&lt;/code&gt;
da biblioteca &lt;strong&gt;Apache Commons IO&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Um InputStream pode ser vários tipos de fonte de inforamação,
um arquivo, a rede, uma requisição Http, um array de bytes (como o exemplo abaixo), etc.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo &lt;strong&gt;como converter um InputStream em uma String&lt;/strong&gt;
de forma simples utilizando a biblioteca &lt;em&gt;Apache Commons IO&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.apache.commons.io.IOUtils&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.ByteArrayInputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.InputStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InputStreamToString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteArrayInputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo Furtado de Oliveira Alves&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textoConvertido&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputStream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textoConvertido&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Gustavo Furtado de Oliveira Alves
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No exemplo acima, podemos ver que utilizando a classe IOUtils da &lt;em&gt;Apache Commons IO&lt;/em&gt;
conseguimos facilmente converter um InputStream em um objeto String através do método &lt;code&gt;toString&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Maven&lt;/h2&gt;
&lt;p&gt;Se você utiliza Maven em seu projeto, pode adicionar a dependência
abaixo no seu &lt;code&gt;pom.xml&lt;/code&gt; para utilizar todo o poder da biblioteca &lt;strong&gt;Apache Commons IO&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.commons&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-io&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.3.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html" target="_blank"&gt;JavaDoc: IOUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/examples.dicasdejava.com.br/blob/master/src/br/com/dicasdejava/util/InputStreamToString.java" target="_blank"&gt;Código-fonte de Exemplo&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="IOUtils"></category><category term="Apache Commons"></category><category term="InputStream"></category><category term="String"></category></entry><entry><title>Java: Como ordenar uma lista com Lambda</title><link href="https://dicasdeprogramacao.com.br/java-como-ordenar-uma-lista-com-lambda/" rel="alternate"></link><published>2017-07-26T00:00:00-03:00</published><updated>2017-07-26T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-26:/java-como-ordenar-uma-lista-com-lambda/</id><summary type="html">&lt;p&gt;A partir do Java 8, podemos usar funções lambda para muita coisas.
Uma delas é a ordenação de listas.&lt;/p&gt;
&lt;p&gt;Inclusive, podemos utilizar o 
&lt;a href="http://dicasdeprogramacao.com.br/java-implementando-metodos-na-interface-com-default-methods/" target="_blank"&gt;&lt;strong&gt;método default&lt;/strong&gt;&lt;/a&gt;
da interface List &lt;code&gt;List.sort(Comparator&amp;lt;? super E&amp;gt; c)&lt;/code&gt; para ordenar a nossa lista.  &lt;/p&gt;
&lt;p&gt;Veja …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A partir do Java 8, podemos usar funções lambda para muita coisas.
Uma delas é a ordenação de listas.&lt;/p&gt;
&lt;p&gt;Inclusive, podemos utilizar o 
&lt;a href="http://dicasdeprogramacao.com.br/java-implementando-metodos-na-interface-com-default-methods/" target="_blank"&gt;&lt;strong&gt;método default&lt;/strong&gt;&lt;/a&gt;
da interface List &lt;code&gt;List.sort(Comparator&amp;lt;? super E&amp;gt; c)&lt;/code&gt; para ordenar a nossa lista.  &lt;/p&gt;
&lt;p&gt;Veja como ficou simples ordenar uma lista com Lambda a partir do Java 8.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrdenarListaComLamba&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Daiana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Wellington&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;José&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Julia&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compareTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Daiana
Gustavo
José
Julia
Wellington
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html" target="_blank"&gt;Javadoc: List&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dicasdeprogramacao.com.br/java-implementando-metodos-na-interface-com-default-methods/" target="_blank"&gt;Java: Implementando métodos na interface com Default Methods!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sanaulla.info/2013/03/11/using-lambda-expression-to-sort-a-list-in-java-8-using-netbeans-lambda-support/" target="_blank"&gt;Using Lambda Expression to sort a List in Java 8 using Netbeans Lambda Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gustavofoa/examples.dicasdejava.com.br" target="_blank"&gt;Código-fonte de Exemplo&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java"></category><category term="List"></category><category term="Lambda"></category><category term="Comparator"></category><category term="Sort"></category></entry><entry><title>Java: Como ler dados do Console com a classe Scanner</title><link href="https://dicasdeprogramacao.com.br/java-como-ler-dados-do-console-com-a-classe-scanner/" rel="alternate"></link><published>2017-07-24T00:00:00-03:00</published><updated>2017-07-24T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-24:/java-como-ler-dados-do-console-com-a-classe-scanner/</id><summary type="html">&lt;p&gt;Uma dúvida comum em iniciantes em java é:
&lt;strong&gt;Como ler dados digitados pelo usuário no console&lt;/strong&gt;?
Neste post vou mostrar como usar a classe &lt;code&gt;java.util.Scanner&lt;/code&gt; para fazer isso.&lt;/p&gt;
&lt;p&gt;Confira o exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerConsoleComScanner …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Uma dúvida comum em iniciantes em java é:
&lt;strong&gt;Como ler dados digitados pelo usuário no console&lt;/strong&gt;?
Neste post vou mostrar como usar a classe &lt;code&gt;java.util.Scanner&lt;/code&gt; para fazer isso.&lt;/p&gt;
&lt;p&gt;Confira o exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerConsoleComScanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Qual o seu nome: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Seja bem vindo &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Execução&lt;/h2&gt;
&lt;p&gt;Após executar esse programa Java, aparece no console o texto: &lt;code&gt;Qual o seu nome:&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;Em seguida, o programa espera que o usuário informe um texto e precione ENTER.&lt;/p&gt;
&lt;p&gt;Se, por exemplo, o usuário digitar &lt;code&gt;Gustavo&lt;/code&gt; e pressionar ENTER
o programa continua com a saída abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Qual o seu nome: Gustavo
Seja bem vindo Gustavo!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;A classe Scanner&lt;/h2&gt;
&lt;p&gt;A classe Scanner apareceu a partir do &lt;strong&gt;Java 5&lt;/strong&gt;
com o objetivo de facilitar a entrada de dados no modo Console.&lt;/p&gt;
&lt;p&gt;Uma das características mais interessante da classe &lt;code&gt;Scanner&lt;/code&gt;
é a possibilidade de obter o valor digitado diretamente
no formato do tipo primitivo que o usuário digitar.
Para isso basta utilizarmos os métodos &lt;code&gt;next&lt;/code&gt; do tipo primitivo
no formato &lt;code&gt;nextTipoDado()&lt;/code&gt;. Como no código abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroInteiro&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroByte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextByte&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroLong&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextLong&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;booleano&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextBoolean&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroFloat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextFloat&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeroDouble&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextDouble&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sempre bom fazer um exemplo para verificar o funcionamento.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerNumeroConsoleComScanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Digite um número inteiro: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;O valor informado foi &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Digitando o valor 50 na execução do programa, temos a seguinda saída.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Digite um número inteiro: 50
O valor informado foi 50
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mas é importante observar que se o valor não puder ser convertido para o tipo
especificado a exceção &lt;code&gt;java.util.InputMismatchException&lt;/code&gt; será lançada.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;Digite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;um&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;n&lt;/span&gt;ú&lt;span class="nv"&gt;mero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;inteiro&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;teste&lt;/span&gt;
&lt;span class="nv"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;thread&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;main&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;util&lt;/span&gt;.&lt;span class="nv"&gt;InputMismatchException&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;util&lt;/span&gt;.&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="nv"&gt;throwFor&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;864&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;util&lt;/span&gt;.&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;1485&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;util&lt;/span&gt;.&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="nv"&gt;nextInt&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;2117&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;java&lt;/span&gt;.&lt;span class="nv"&gt;util&lt;/span&gt;.&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="nv"&gt;nextInt&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Scanner&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;2076&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;br&lt;/span&gt;.&lt;span class="nv"&gt;com&lt;/span&gt;.&lt;span class="nv"&gt;dicasdejava&lt;/span&gt;.&lt;span class="nv"&gt;fundamentos&lt;/span&gt;.&lt;span class="nv"&gt;LerNumeroConsoleComScanner&lt;/span&gt;.&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;LerConsoleComScanner&lt;/span&gt;.&lt;span class="nv"&gt;java&lt;/span&gt;:&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Por isso é importante tratar essa &lt;em&gt;exceção&lt;/em&gt; na leitura de tipos primitivos.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerNumeroConsoleComScanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Digite um número inteiro: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;O valor informado foi &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InputMismatchException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;O valor informado não é um número!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Digite um número inteiro: teste
O valor informado não é um número!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Outras utilizações de Scanner&lt;/h2&gt;
&lt;p&gt;Vimos neste post um exemplo de utilização básica da classe Scanner
para leitura dos dados digitados no console com Java.&lt;/p&gt;
&lt;p&gt;A classe Scanner é muito poderosa, podendo ser utilizada com outros
canais de entrada de dados como texto, arquivo, rede, etc.
Por exemplo, a classe Scanner pode ser utilizada para ler arquivos.
Como no exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LerArquivoComScanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileNotFoundException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextLine&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O exemplo acima, lê o arquivo &lt;code&gt;C:\temp\arquivo.txt&lt;/code&gt; e imprime o seu
conteúdo no console.&lt;/p&gt;
&lt;p&gt;Uma outra utilização da classe Scanner é a obtenção de dados filtrados
com &lt;strong&gt;REGEX&lt;/strong&gt; e customização de &lt;em&gt;delimiter&lt;/em&gt;, como no exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FiltrarDadosComScannerRegex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a1,b2,c3,d4,e5,f6&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;useDelimiter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\\d,?&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a
b
c
d
e
f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Neste exemplo, nós utilizamos &lt;em&gt;REGEX&lt;/em&gt; para extratir apenas as letras da sequência.
A classe Scanner usa o &lt;em&gt;delimiter&lt;/em&gt; para agrupar os dados obtidos da fonte,
da mesma forma que o método &lt;code&gt;String.split(regex)&lt;/code&gt;.
A diferença é que o Scanner não retorna o array com os dados agrupados
e também aceita outras fontes de dados como arquivo, console, rede, etc.&lt;/p&gt;
&lt;p&gt;Embora a classe Scanner seja utilizada principalmente para ler dados
que o usuário digita no console,
podemos perceber que a Scanner vai muito além disso, 
podendo ser uma ótima ferramenta para extração de dados.&lt;/p&gt;
&lt;h2&gt;Referências&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html" target="_blank"&gt;Javadoc: Scanner&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java"></category><category term="Console"></category><category term="Scanner"></category></entry><entry><title>Java: É possível acessar elementos da Superclasse da Superclasse?</title><link href="https://dicasdeprogramacao.com.br/java-e-possivel-acessar-elementos-da-superclasse-da-superclasse/" rel="alternate"></link><published>2017-07-21T00:00:00-03:00</published><updated>2017-07-21T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-21:/java-e-possivel-acessar-elementos-da-superclasse-da-superclasse/</id><summary type="html">&lt;p&gt;Você deve saber que para acessar um membro de uma Superclasse,
nós utilizamos a palavra-chave &lt;code&gt;super&lt;/code&gt;.
Por exemplo, &lt;code&gt;super.nome&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mas e se nós quisermos acessar um elemento que está na Superclasse da Superclasse?
Ou seja, dois níveis acima.
Não …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Você deve saber que para acessar um membro de uma Superclasse,
nós utilizamos a palavra-chave &lt;code&gt;super&lt;/code&gt;.
Por exemplo, &lt;code&gt;super.nome&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mas e se nós quisermos acessar um elemento que está na Superclasse da Superclasse?
Ou seja, dois níveis acima.
Não podemos utilizar &lt;code&gt;super.super.nome&lt;/code&gt; nem &lt;code&gt;super.super.super.nome&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;Isto pode ser um problema se você estiver subscrevendo métodos.
Ou seja, criando um método com o mesmo nome de um método da Superclasse.
Pois os métodos das classes acima da Superclasse podem se tornar inacessíveis.&lt;/p&gt;
&lt;p&gt;Uma forma de acessar atributos de classes superiores é fazendo um &lt;em&gt;cast&lt;/em&gt;.
Por exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;Pai&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mas isso não funciona para métodos se houver uma subscrição de método.
O código abaixo acessaria o método getNome da classe filha.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;Pai&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Vamos ver um exemplo mais completo para percebermos esse comportamento.&lt;/p&gt;
&lt;h2&gt;Exemplo:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Avo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Avo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Pai&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Avo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Pai&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Filho&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pai&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Filho&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TesteOverriding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Filho&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filho&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Filho&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filho&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filho&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;Pai&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filho&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;Pai&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filho&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;Avo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filho&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;Avo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filho&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Filho
Filho
Pai
Filho
Avo
Filho
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Podemos observar que, ao fazermos &lt;em&gt;cast&lt;/em&gt; do objeto &lt;code&gt;homem&lt;/code&gt;, 
nós conseguimos acessar diretamente a variável nome das classes mais acima da hierarquia.
Mas o mesmo não funcionou para o método &lt;code&gt;getNome()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O método &lt;code&gt;getNome()&lt;/code&gt; executado sempre foi o da classe Homem.&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="Java"></category><category term="Override"></category><category term="super.super"></category></entry><entry><title>Java: Como extrair uma lista de propriedades de itens de uma lista</title><link href="https://dicasdeprogramacao.com.br/java-como-extrair-uma-lista-de-propriedades-de-itens-de-uma-lista/" rel="alternate"></link><published>2017-07-13T00:00:00-03:00</published><updated>2017-07-13T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-13:/java-como-extrair-uma-lista-de-propriedades-de-itens-de-uma-lista/</id><summary type="html">&lt;p&gt;Pense na classe Pessoa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.entity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Pessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Quando você tem em mãos uma lista de Pessoas, e deseja obter …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Pense na classe Pessoa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.entity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Pessoa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Quando você tem em mãos uma lista de Pessoas, e deseja obter uma listagem dos nomes dessas pessoas. O que fazer?&lt;/p&gt;
&lt;p&gt;A partir do Java 8 foi introduzido em collections as funcionalidades do Collectors que funcionam em cima do Stream de uma coleção. Sendo assim para obter a lista de nomes utiliza-se o código exemplo a seguir:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Pessoa&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Fulano&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ciclano&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Beltrano&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pessoas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pessoa&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toArray&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Resultado:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[&amp;quot;Fulano&amp;quot;, &amp;quot;Ciclano&amp;quot;, &amp;quot;Beltrano&amp;quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html"&gt;JavaDoc: Collectors&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="List"></category><category term="Collectors"></category></entry><entry><title>Junit: Como definir a ordem de execução dos testes!</title><link href="https://dicasdeprogramacao.com.br/junit-como-definir-a-ordem-de-execucao-dos-testes/" rel="alternate"></link><published>2017-07-12T00:00:00-03:00</published><updated>2017-07-12T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-12:/junit-como-definir-a-ordem-de-execucao-dos-testes/</id><summary type="html">&lt;p&gt;Você sabia que podemos definir uma ordem de execução dos testes do JUnit?&lt;/p&gt;
&lt;p&gt;Sabemos que os testes de unidade não devem ter dependências entre si
e devem ser capazes de executar em qualquer ordem,
mas a partir da &lt;strong&gt;versão 4 …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Você sabia que podemos definir uma ordem de execução dos testes do JUnit?&lt;/p&gt;
&lt;p&gt;Sabemos que os testes de unidade não devem ter dependências entre si
e devem ser capazes de executar em qualquer ordem,
mas a partir da &lt;strong&gt;versão 4.11 do Junit&lt;/strong&gt;, nós podemos especificar um padrão
de ordenação a ser seguido na execução dos testes.&lt;/p&gt;
&lt;p&gt;Não sei pra quê você precisaria disso, mas se quiser ordenar a execução dos testes 
do Junit confira abaixo como fazer.&lt;/p&gt;
&lt;p&gt;Para determinar a ordem de execução dos testes, 
basta anotar a classe de testes com a anotação &lt;code&gt;@FixMethodOrder&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Esta anotação recebe como parâmetro o enum &lt;code&gt;MethodSorters&lt;/code&gt;,
que podem assumir os valores &lt;code&gt;DEFAULT&lt;/code&gt;, &lt;code&gt;JVM&lt;/code&gt; e &lt;code&gt;NAME_ASCENDING&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O valor &lt;code&gt;JVM&lt;/code&gt; diz que vamos seguir a ordem que a JVM determinar
e isso significa uma ordem mais ou menos &lt;em&gt;aleatória&lt;/em&gt;, depende da JVM.&lt;/p&gt;
&lt;p&gt;O valor &lt;code&gt;DEFAULT&lt;/code&gt; deixa a ordenação sob responsabilidade do próprio JUnit.
Entretanto na própria &lt;a href="https://github.com/junit-team/junit4/blob/master/doc/ReleaseNotes4.11.md#test-execution-order"&gt;&lt;em&gt;release notes da versão 4.11&lt;/em&gt;&lt;/a&gt;
eles não se comprometem a seguir uma ordem específica.&lt;/p&gt;
&lt;p&gt;Portanto, se quizermos controlar a ordem de execução dos testes,
nós devemos usar o valor &lt;code&gt;NAME_ASCENDING&lt;/code&gt; do enum &lt;code&gt;MethodSorders&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo que, alfabeticamente, o segundo teste deve ser executado primeiro.
Como colocamos a anotação &lt;code&gt;@FixMethodOrder(MethodSorters.NAME_ASCENDING)&lt;/code&gt; na classe,
o primeiro teste executado é o segundo, seguindo a ordem alfabética do nome do teste.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.junit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.junit.FixMethodOrder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.junit.Test&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.junit.runners.MethodSorters&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@FixMethodOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MethodSorters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NAME_ASCENDING&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrdemJunitTest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Segundo teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Primeiro teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Primeiro teste
Segundo teste
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora, removendo a anotação &lt;code&gt;@FixMethodOrder(MethodSorters.NAME_ASCENDING)&lt;/code&gt;,
o resultado seguiu a ordem de criação dos testes no código-fonte.&lt;/p&gt;
&lt;p&gt;Mas isso não significa que sempre seria assim.
O Junit que recebeu a responsabilidade de ordenar e não sabemos
que regra ele segue, ou irá seguir futuramente.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.junit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.junit.Test&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrdemJunitTest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Segundo teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Primeiro teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Segundo teste
Primeiro teste
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Maven&lt;/h2&gt;
&lt;p&gt;Se precisar do xml de dependência do &lt;strong&gt;Junit 4.11&lt;/strong&gt;, aqui está:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;junit&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;junit&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;4.11&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Referencias&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://junit.org/junit4/javadoc/4.12/org/junit/FixMethodOrder.html" target="_blank"&gt;JavaDoc: FixMethodOrder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://junit.org/junit4/javadoc/4.12/org/junit/runners/MethodSorters.html" target="_blank"&gt;JavaDoc: MethodSorters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/junit-team/junit4/blob/master/doc/ReleaseNotes4.11.md#test-execution-order" target="_blank"&gt;Release notes: Junit 3.11&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Junit"></category></entry><entry><title>Java: Implementando métodos na interface com Default Methods!</title><link href="https://dicasdeprogramacao.com.br/java-implementando-metodos-na-interface-com-default-methods/" rel="alternate"></link><published>2017-07-10T00:00:00-03:00</published><updated>2017-07-10T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-10:/java-implementando-metodos-na-interface-com-default-methods/</id><summary type="html">&lt;p&gt;Aprendi desde o início da minha carreira que uma &lt;em&gt;interface&lt;/em&gt; em Orientação a Objetos
apenas define os métodos que devem ser implementados pelas classes.
Ou seja, não poderíamos implementar um método em uma interface.&lt;/p&gt;
&lt;p&gt;Mas isso mudou e a partir …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Aprendi desde o início da minha carreira que uma &lt;em&gt;interface&lt;/em&gt; em Orientação a Objetos
apenas define os métodos que devem ser implementados pelas classes.
Ou seja, não poderíamos implementar um método em uma interface.&lt;/p&gt;
&lt;p&gt;Mas isso mudou e a partir do &lt;strong&gt;Java 8&lt;/strong&gt; nós podemos ter implementação "padrão" de um método
na interface Java! Para isso, basta utilizarmos a palavra-chave &lt;code&gt;default&lt;/code&gt; na declaração do método.&lt;/p&gt;
&lt;p&gt;É importante observar que os métodos &lt;em&gt;default&lt;/em&gt; não foram criados com o objetivo de permitir herança multipla,
e sim de permitir a evolução de interfaces sem quebrar códigos existentes.
Essa recurso do &lt;strong&gt;Java 8&lt;/strong&gt; é o que possibilitou o &lt;em&gt;Lambda&lt;/em&gt;!&lt;/p&gt;
&lt;p&gt;Vejamos um exemplo da implementação padrão de um método em uma interface.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;InterfaceComDefaultMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodo2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Classe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InterfaceComDefaultMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodo2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;b&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InterfaceComDefaultMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Classe&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;metodo&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;metodo2&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a
b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O arquivo Java acima exemplifica a utilização de um &lt;em&gt;"default method"&lt;/em&gt; em Java.&lt;/p&gt;
&lt;p&gt;Podemos observar que o método que foi implementado na interface, 
necessariamente utilizando a palavra-chave &lt;code&gt;default&lt;/code&gt;,
não precisa ser implementado na &lt;code&gt;Classe&lt;/code&gt; que "implementa" a interface &lt;code&gt;InterfaceComDefaultMethod&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;TEM que ter a palavra chave &lt;strong&gt;default&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Para utilizarmos esse recurso do &lt;strong&gt;Java 8&lt;/strong&gt; e implementar um método na própria interface,
precisamos utilizar a palavra-chave &lt;code&gt;default&lt;/code&gt; na declaração do método que terá a implementação padrão.
Conforme o exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Referências&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html" target="_blank"&gt;Doc: Default Methods&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Interface"></category><category term="Default Method"></category><category term="Java Básico"></category></entry><entry><title>Java: Como obter a extensão de um arquivo</title><link href="https://dicasdeprogramacao.com.br/java-como-obter-a-extensao-de-um-arquivo/" rel="alternate"></link><published>2017-07-06T00:00:00-03:00</published><updated>2017-07-06T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-06:/java-como-obter-a-extensao-de-um-arquivo/</id><summary type="html">&lt;p&gt;Há várias formas de extrair a extensão do nome de um arquivo.
A forma mais simples e legível para o o seu código, é utilizando o método 
&lt;code&gt;FilenameUtils.getExtension&lt;/code&gt; da biblioteca &lt;strong&gt;Apache Commons IO&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como obter …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Há várias formas de extrair a extensão do nome de um arquivo.
A forma mais simples e legível para o o seu código, é utilizando o método 
&lt;code&gt;FilenameUtils.getExtension&lt;/code&gt; da biblioteca &lt;strong&gt;Apache Commons IO&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como obter a extensão do nome de um arquivo
com &lt;code&gt;FilenameUtils.getExtension&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.apache.commons.io.FilenameUtils&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExtrairExtensaoArquivoComFilenameUtils&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Exemplo de arquivo do Windows&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo de teste.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FilenameUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Exemplo de arquivo sem extensão&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo sem extensao&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FilenameUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Exemplo de arquivo do Linux/Unix/OSX&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/home/gustavo/arquivo de imagem.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FilenameUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;txt

png
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Importação da biblioteca Apache Commons IO&lt;/h1&gt;
&lt;p&gt;Como a &lt;strong&gt;Apache Commons IO&lt;/strong&gt; não é uma biblioteca nativa do Java,
nós precisamos adicionar o arquivo &lt;strong&gt;jar&lt;/strong&gt; da biblioteca 
no classpath da nossa aplicação.&lt;/p&gt;
&lt;p&gt;Você pode baixar o &lt;strong&gt;jar&lt;/strong&gt; da &lt;em&gt;Apache Commons IO&lt;/em&gt; diretamente no 
&lt;a href="http://commons.apache.org/proper/commons-io/download_io.cgi" target="_blank"&gt;site da Apache&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Se você estiver utilizando o maven no seu projeto,
basta adicionar a dependência do &lt;em&gt;Apache Commons IO&lt;/em&gt; no seu arquivo &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.commons&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-io&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.3.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Indico a importação do &lt;strong&gt;Apache Commons IO&lt;/strong&gt; porque,
além do método que mostrei aqui, há muitos outros métodos úteis
nessa biblioteca.&lt;/p&gt;
&lt;h2&gt;Obter extensão do arquivo com Java PURO&lt;/h2&gt;
&lt;p&gt;Podemos utilizar uma lógica para obter a extensão do arquivo
utilizando apenas &lt;strong&gt;java&lt;/strong&gt;.
Sem a necessidade de usar a biblioteca citada anteriormente.&lt;/p&gt;
&lt;p&gt;Para isso, podemos fazer um &lt;code&gt;substring&lt;/code&gt; do nome do arquivo,
a partir da posição (+1) do último ponto encontrado no nome do arquivo.&lt;/p&gt;
&lt;p&gt;Mas devemos nos atentar para a verificação se o arquivo tem extensão,
ou seja, se tem "ponto" no nome do arquivo,
pois se o nome do arquivo não tiver ponto,
vamos obter o nome completo do arquivo ao invés de uma "extensão vazia". &lt;/p&gt;
&lt;p&gt;Observe no exemplo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExtrairExtensaoArquivoComJavaPuro&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Exemplo de arquivo do Windows&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo de teste.docx&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getFileExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Exemplo de arquivo sem extensão&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:\\temp\\arquivo sem extensao&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getFileExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Exemplo de arquivo do Linux/Unix/OSX&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/home/gustavo/arquivo de imagem.jpg&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getFileExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomeCompletoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extensaoDoArquivo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getFileExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lastIndexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docx

jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/package-summary.html" target="_blank"&gt;Javadoc: FilenameUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mvnrepository.com/artifact/org.apache.commons/commons-io" target="_blank"&gt;Maven: Apache Commons IO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_blank"&gt;Javadoc: String&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="FilenameUtils"></category><category term="List"></category><category term="Apache Commons IO"></category></entry><entry><title>Java: Varargs...</title><link href="https://dicasdeprogramacao.com.br/java-varargs/" rel="alternate"></link><published>2017-07-05T00:00:00-03:00</published><updated>2017-07-05T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-05:/java-varargs/</id><summary type="html">&lt;p&gt;Somente o último parâmetro de um método em Java pode ser do tipo &lt;strong&gt;varargs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Um parâmetro vararg pode receber &lt;strong&gt;0&lt;/strong&gt;, &lt;strong&gt;muitos&lt;/strong&gt; ou um &lt;strong&gt;array&lt;/strong&gt; de parâmetros.
Aliás, é por essa característica que o parâmetro vararg
&lt;strong&gt;deve ser o último parâmetro …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Somente o último parâmetro de um método em Java pode ser do tipo &lt;strong&gt;varargs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Um parâmetro vararg pode receber &lt;strong&gt;0&lt;/strong&gt;, &lt;strong&gt;muitos&lt;/strong&gt; ou um &lt;strong&gt;array&lt;/strong&gt; de parâmetros.
Aliás, é por essa característica que o parâmetro vararg
&lt;strong&gt;deve ser o último parâmetro do método&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Para declarar um vararg nós colocamos três pontinhos no tipo do parâmetro.
Por exemplo: &lt;code&gt;void metodo1(int a, String... b)&lt;/code&gt;. 
Neste exemplo o parâmetro &lt;code&gt;b&lt;/code&gt; é o parâmetro &lt;strong&gt;vararg&lt;/strong&gt; do método.&lt;/p&gt;
&lt;p&gt;Vejamos no exemplo abaixo todas as formas de utilizar o parâmetro do tipo &lt;em&gt;vararg&lt;/em&gt;. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Varargs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Sem o 3º parâmetro (Vararg...)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;metodoComVarargs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Com o 3º parâmetro do tipo int&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;metodoComVarargs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Com o 3º parâmetro do tipo int[] (array de int)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;metodoComVarargs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a3&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Com vários parâmetros int a partir do 3º parâmetro (Vararg...)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;metodoComVarargs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a4&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodoComVarargs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a1
true
0

a2
false
1
1

a3
true
3
1
2
3

a4
true
5
1
2
3
4
5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Deve ser do mesmo tipo!&lt;/h2&gt;
&lt;p&gt;É importante notar que o Vararg recebe &lt;strong&gt;valores do mesmo tipo&lt;/strong&gt;.
Não podemos por exemplo, chamar o método do exemplo acima
passando os seguintes parâmetros.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;//NÃO PODE CHAMAR O MÉTODO ASSIM!&lt;/span&gt;
&lt;span class="n"&gt;metodoComVarargs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a3&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;texto&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Deve ser o último parâmetro!&lt;/h2&gt;
&lt;p&gt;Como já vimos no inicio do post, 
o parâmetro &lt;em&gt;vararg&lt;/em&gt; deve ser o último parâmetro do método.
Não podemos declarar um método como no exemplo a baixo&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;//NÃO PODE DECLARAR O MÉTODO ASSIM!&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodoComVarargs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Referências:&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html" target="_blank"&gt;JavaDoc: Varargs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Varargs"></category><category term="Java Básico"></category></entry><entry><title>Java: Como converter List para Array</title><link href="https://dicasdeprogramacao.com.br/java-como-converter-list-para-array/" rel="alternate"></link><published>2017-07-04T00:00:00-03:00</published><updated>2017-07-04T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-04:/java-como-converter-list-para-array/</id><summary type="html">&lt;p&gt;Para converter um List (&lt;code&gt;java.util.List&lt;/code&gt;) em um Array (Vetor),
nós podemos utilizar o método toArray da interface &lt;code&gt;List&lt;/code&gt;
que pertence à API nativa do Java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como converter um List em um Array em Java …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para converter um List (&lt;code&gt;java.util.List&lt;/code&gt;) em um Array (Vetor),
nós podemos utilizar o método toArray da interface &lt;code&gt;List&lt;/code&gt;
que pertence à API nativa do Java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como converter um List em um Array em Java.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.ArrayList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ListParaArray&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;José&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arrayDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[Gustavo, Maria, José, João, Ana]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html" target="_blank"&gt;JavaDoc: List&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Array"></category><category term="List"></category><category term="Arrays"></category></entry><entry><title>Java: Diferença entre i++, ++i e i = i + 1</title><link href="https://dicasdeprogramacao.com.br/java-diferenca-entre-i-i-e-i-i-1/" rel="alternate"></link><published>2017-07-03T00:00:00-03:00</published><updated>2017-07-03T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-07-03:/java-diferenca-entre-i-i-e-i-i-1/</id><summary type="html">&lt;p&gt;É comum programadores iniciantes se depararem com um &lt;code&gt;i++&lt;/code&gt; ou &lt;code&gt;++i&lt;/code&gt;
no código &lt;strong&gt;java&lt;/strong&gt; e não saberem para quê serve,
outros ficam na dúvida de qual a diferença entre &lt;code&gt;i++&lt;/code&gt;, &lt;code&gt;++i&lt;/code&gt; e &lt;code&gt;i = i + 1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No exemplo acima, &lt;code&gt;i&lt;/code&gt; é …&lt;/p&gt;</summary><content type="html">&lt;p&gt;É comum programadores iniciantes se depararem com um &lt;code&gt;i++&lt;/code&gt; ou &lt;code&gt;++i&lt;/code&gt;
no código &lt;strong&gt;java&lt;/strong&gt; e não saberem para quê serve,
outros ficam na dúvida de qual a diferença entre &lt;code&gt;i++&lt;/code&gt;, &lt;code&gt;++i&lt;/code&gt; e &lt;code&gt;i = i + 1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No exemplo acima, &lt;code&gt;i&lt;/code&gt; é apenas uma variável do tipo &lt;code&gt;int&lt;/code&gt;,
podendo ter qualquer outro nome de variável.&lt;/p&gt;
&lt;p&gt;No final das contas, essas três formas de incremento
vão incrementar um &lt;strong&gt;único&lt;/strong&gt; valor na variável &lt;code&gt;i&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Se forem utilizados em um comando simples, ou seja,
um comando que só tem o incremento e mais nada,
as três formas não tem nenhuma diferença.&lt;/p&gt;
&lt;p&gt;Confira no exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;IncrementoComMaisMaisOuComMais1ComandoSimples&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;2&lt;/span&gt;
&lt;span class="mf"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entretanto se estas formas de incremento forem utilizadas em um comando composto,
ou seja, que contenha mais de uma instrução, os resultados podem ser diferentes.&lt;/p&gt;
&lt;p&gt;A instrução &lt;code&gt;++i&lt;/code&gt;, incrementa a variável &lt;code&gt;i&lt;/code&gt; &lt;strong&gt;antes&lt;/strong&gt; dela ser utilizada no comando.
Já a instrução &lt;code&gt;i++&lt;/code&gt;, incrementa a variável &lt;code&gt;i&lt;/code&gt; &lt;strong&gt;depois&lt;/strong&gt; dela ser utilizada no comando.
E se você incrementar uma variável e atribuir o resultado a ela mesma,
em um comando, o resultado da instrução é o valor da variável após o incremento.&lt;/p&gt;
&lt;p&gt;No exemplo abaixo vemos o resultado dos três tipos de incremento
como parâmetro do método &lt;code&gt;println&lt;/code&gt;, ou seja, antes de terminar o "comando".&lt;/p&gt;
&lt;p&gt;Lembrando que um comando &lt;em&gt;java&lt;/em&gt; só termina no &lt;code&gt;;&lt;/code&gt; (ponto e vírgula)!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;IncrementoComMaisMaisOuComMais1ComandoComposto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;      i++ =&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;        i =&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;      ++i =&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;        i =&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;i = i + 1 =&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;        i =&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;      i++ =&amp;gt; 0
        i =&amp;gt; 1
      ++i =&amp;gt; 2
        i =&amp;gt; 2
i = i + 1 =&amp;gt; 3
        i =&amp;gt; 3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No primeiro &lt;code&gt;print&lt;/code&gt;, quando utilizamos &lt;code&gt;i++&lt;/code&gt;,
percebemos que foi utilizado o valor atual da variável &lt;code&gt;i&lt;/code&gt; (0)
e em seguida a variável foi incrementada para (1), pois no print seguinte,
imprimimos apenas a variável, sem incremento.&lt;/p&gt;
&lt;p&gt;Ao utilizar &lt;code&gt;++1&lt;/code&gt;, percebemos que a variável &lt;code&gt;i&lt;/code&gt;
foi incrementada antes de ser utilizada. Ou seja, era 1 e passou a ser 2.
Esse comportamento pode ser comprovado na linha seguinte,
quando imprimimos &lt;code&gt;i&lt;/code&gt; novamente e obtemos o mesmo valor 2.&lt;/p&gt;
&lt;p&gt;Por fim, se utilizarmos &lt;code&gt;i = i + 1&lt;/code&gt; percebemos que a variável &lt;code&gt;i&lt;/code&gt;
também foi incrementada antes de ser utilizada.
O que significa que a instrução &lt;code&gt;i = i + 1&lt;/code&gt;,
resulta no valor da variável &lt;code&gt;i&lt;/code&gt; após o incremento.&lt;/p&gt;
&lt;p&gt;Espero que esta explicação te ajude, mas se ainda permenecer com dúvidas
poste aí nos comentários!&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="Operadores aritméticos"></category></entry><entry><title>Java: Parâmetros de linha de comando</title><link href="https://dicasdeprogramacao.com.br/java-parametros-de-linha-de-comando/" rel="alternate"></link><published>2017-06-30T00:00:00-03:00</published><updated>2017-06-30T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-30:/java-parametros-de-linha-de-comando/</id><summary type="html">&lt;p&gt;Muita gente se acostuma a criar o método estático &lt;code&gt;main&lt;/code&gt; no java 
e não sabe para quê serve o parâmetro do tipo &lt;code&gt;String[]&lt;/code&gt; (Array de String),
geralmente nomeado como &lt;code&gt;args&lt;/code&gt;. Vamos ver neste post porque este parâmetro existe
no método …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Muita gente se acostuma a criar o método estático &lt;code&gt;main&lt;/code&gt; no java 
e não sabe para quê serve o parâmetro do tipo &lt;code&gt;String[]&lt;/code&gt; (Array de String),
geralmente nomeado como &lt;code&gt;args&lt;/code&gt;. Vamos ver neste post porque este parâmetro existe
no método que inicia qualquer programa Java.&lt;/p&gt;
&lt;p&gt;Antes de falar sobre java, é importante perceber que 
todo programa pode receber argumentos de linha de comando ao ser executado.
Peguemos por exemplo o programa "Bloco de Notas" do Windows, cujo comando de linha de comando é "notepad",
se você abrir o prompt de comando do Windows (ou o "Executar") e executar o comando 
&lt;code&gt;notepad &amp;lt;Caminho de um arquivo .txt por exemplo&amp;gt;&lt;/code&gt;,
o software &lt;em&gt;Bloco de Notas&lt;/em&gt; vai abrir o seu arquivo que foi informado como argumento na linha comando.&lt;/p&gt;
&lt;p&gt;O que foi informado na frente do comando para a execução do software
é chamado de &lt;strong&gt;Argumento de linha de comando&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;No java, aquele array de String do método &lt;code&gt;main&lt;/code&gt; serve para receber os &lt;em&gt;argumentos de linha de comando&lt;/em&gt;
que são passados na hora de executar o programa.
Cada argumento é separado por um "espaço" no momento da execução.&lt;/p&gt;
&lt;p&gt;Vamos ver isso na prática com o código abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ParametroDeLinhaDeComando&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ao ser executado, o código acima imprime no prompt de comandos a quantidade de argumentos recebidos,
e em seguida imprime cada argumento separadamente, ao imprimir cada item do array &lt;code&gt;args&lt;/code&gt; em uma linha.&lt;/p&gt;
&lt;p&gt;Abaixo eu apresento a compilação e a execução deste programinha Java
com diferentes argumentos de linha de comando (no Windows).&lt;/p&gt;
&lt;p&gt;&lt;img alt="Execução de um programa Java com argumentos de linha de comando" src="/images/java-parametros-de-linha-de-comando/parametros-de-linha-de-comando.png" style="width:100%; padding:10px;"&gt;&lt;/p&gt;
&lt;p&gt;De &lt;strong&gt;bônus&lt;/strong&gt;, no exemplo acima eu mostro como compilar e executar uma classe
que se encontra em um pacote.&lt;/p&gt;
&lt;p&gt;Para compilar: &lt;code&gt;javac caminho\das\pastas\para\a\Classe.java&lt;/code&gt; (\ para Windows e / para Linux e MacOS)&lt;/p&gt;
&lt;p&gt;Para executar: &lt;code&gt;java caminho.das.pastas.para.a.Classe &amp;lt;argumentos de linha de comando separados por 'espaço'&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Qualquer dúvida, escreva abaixo nos comentários.&lt;/p&gt;</content><category term="{ Dicas de Java }"></category><category term="Java Básico"></category><category term="main"></category></entry><entry><title>Tudo que você precisa saber sobre comentários em Java</title><link href="https://dicasdeprogramacao.com.br/tudo-que-voce-precisa-saber-sobre-comentarios-em-java/" rel="alternate"></link><published>2017-06-29T00:00:00-03:00</published><updated>2017-06-29T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-29:/tudo-que-voce-precisa-saber-sobre-comentarios-em-java/</id><summary type="html">&lt;p&gt;Toda linguagem de programação provê formas de criar comentários no código,
ou seja, códigos que são ignorados pelo compilador.&lt;/p&gt;
&lt;p&gt;Vejamos as formas de criar comentários em Java.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ComentariosEmJava&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Toda linguagem de programação provê formas de criar comentários no código,
ou seja, códigos que são ignorados pelo compilador.&lt;/p&gt;
&lt;p&gt;Vejamos as formas de criar comentários em Java.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ComentariosEmJava&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Este é um código sem comentário.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Este é um comentário de linha.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Este comentário pode aparecer em qualquer parte do arquivo .java&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Tudo que estiver depois dos caracteres // é um comentário&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Outro comando&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//Mesmo que seja uma linha que já tenha um comando.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Porém após abrir o comentário com // ele não pode ser fechado na linha.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/*Comentário interno da linha*/&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/*Este tipo de comentário deve ser fechado com */&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/*Ele pode inclusive ocupar&lt;/span&gt;
&lt;span class="cm"&gt;        mais de uma linha, mas deve ser fechado! */&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Após fechar o comenário interno de linha pode ter um comando java&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/*Comentário de exemplo*/&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mais um comando&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*este comentário pode estar no meio da linha*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Outro comando&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Dentro de uma String não pode ter comentário &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/*isso continua sendo um texto, não é comentário*/.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Comentários dentro de linha só não pode estar no meio de uma palavra do comando&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Como este exemplo:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Str/*comentario*/ing texto2 = &amp;quot;teste&amp;quot;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Ou neste outro exemplo:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//String tex/*comentario*/to = &amp;quot;teste;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/*&lt;/span&gt;
&lt;span class="cm"&gt;         * Bloco de comentário:&lt;/span&gt;
&lt;span class="cm"&gt;         * Este bloco de comentário não é diferente do comentário interno de linha&lt;/span&gt;
&lt;span class="cm"&gt;         * Mas é muito utilizado para organização do código com esses * no inicio.&lt;/span&gt;
&lt;span class="cm"&gt;         * Geralmente vemos este tipo de comentário&lt;/span&gt;
&lt;span class="cm"&gt;         * para descrever o funcionamento de um método ou uma classe.&lt;/span&gt;
&lt;span class="cm"&gt;         * Como na descrição do método abaixo&lt;/span&gt;
&lt;span class="cm"&gt;         */&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/*&lt;/span&gt;
&lt;span class="cm"&gt;     * Este método não faz nada!&lt;/span&gt;
&lt;span class="cm"&gt;     * Este comentário descreve o método abaixo&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodo&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Este é um código sem comentário.
Outro comando
mais um comando
Outro comando
Dentro de uma String não pode ter comentário /*isso continua sendo um texto, não é comentário*/.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Javadoc&lt;/h2&gt;
&lt;p&gt;Além dos comentários simples do Java, há um tipo de comentário especial,
utilizado para documentar classes, interfaces, enums e métodos.&lt;/p&gt;
&lt;p&gt;Esse tipo de comentário é chamado de &lt;strong&gt;Javadoc&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O Javadoc é um comentário que começa com /*&lt;em&gt; e é fechado com &lt;/em&gt;/.
No Javadoc podemos podemos descrever parâmetros e retornos de métodos,
exceções retornadas, etc.&lt;/p&gt;
&lt;p&gt;Confira no código-exemplo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt; * Esta classe é um exemplo de classe que tem comentários do tipo Javadoc&lt;/span&gt;
&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClasseComJavadoc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * Este é um comentário de Javadoc&lt;/span&gt;
&lt;span class="cm"&gt;     * @param parametro - este é um parâmetro do método&lt;/span&gt;
&lt;span class="cm"&gt;     * @return Este metodo retorna falso (sempre)&lt;/span&gt;
&lt;span class="cm"&gt;     * @throws Exception - Esta exeption nunca é lançada neste método,&lt;/span&gt;
&lt;span class="cm"&gt;     * mas tá aqui pra exemplificar o comentário Javadoc para Exceptions&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;outroMetodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;parametro&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Comentários de Javadoc iniciam com /**&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//O comentário deste método é um comentário de Javadoc&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Mas estes comentários aqui de dentro do método não são do tipo Javadoc&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Referências&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.oracle.com/technetwork/articles/java/index-137868.html" target="_blank"&gt;How to Write Doc Comments for the Javadoc Tool&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Java Básico"></category></entry><entry><title>Java: Como transformar uma String separada por virgula em Array</title><link href="https://dicasdeprogramacao.com.br/java-como-transformar-uma-string-separada-por-virgula-em-array/" rel="alternate"></link><published>2017-06-28T00:00:00-03:00</published><updated>2017-06-28T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-28:/java-como-transformar-uma-string-separada-por-virgula-em-array/</id><summary type="html">&lt;p&gt;Confira no exemplo abaixo como transformar uma String
com valores separadores por vírgula em um Array.&lt;/p&gt;
&lt;h2&gt;Exemplo:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StringSeparadaPorVirgulaEmArray&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stringDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João, Carlos, José, Marcos, Maria, Julia, Joaquim …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Confira no exemplo abaixo como transformar uma String
com valores separadores por vírgula em um Array.&lt;/p&gt;
&lt;h2&gt;Exemplo:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StringSeparadaPorVirgulaEmArray&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stringDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João, Carlos, José, Marcos, Maria, Julia, Joaquim, Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arrayDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stringDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tamanho do array: &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arrayDeNomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arrayDeNomes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;Tamanho&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;array&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="nv"&gt;Jo&lt;/span&gt;ã&lt;span class="nv"&gt;o&lt;/span&gt;
&lt;span class="nv"&gt;Carlos&lt;/span&gt;
&lt;span class="nv"&gt;Jos&lt;/span&gt;é
&lt;span class="nv"&gt;Marcos&lt;/span&gt;
&lt;span class="nv"&gt;Maria&lt;/span&gt;
&lt;span class="nv"&gt;Julia&lt;/span&gt;
&lt;span class="nv"&gt;Joaquim&lt;/span&gt;
&lt;span class="nv"&gt;Ana&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Referências&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" target="_blank"&gt;JavaDoc: String&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Regex"></category><category term="String"></category><category term="Array"></category></entry><entry><title>Mockito: Como testar chamada de método</title><link href="https://dicasdeprogramacao.com.br/mockito-como-testar-chamada-de-metodo/" rel="alternate"></link><published>2017-06-27T00:00:00-03:00</published><updated>2017-06-27T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-27:/mockito-como-testar-chamada-de-metodo/</id><summary type="html">&lt;p&gt;Muita gente começa a usar o framework Mockito para fazer testes em Java
e tem dúvidas de como verificar se o método de uma dependência foi ou não chamado.&lt;/p&gt;
&lt;p&gt;Confira no exemplo abaixo como fazer a verificação de chamada de …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Muita gente começa a usar o framework Mockito para fazer testes em Java
e tem dúvidas de como verificar se o método de uma dependência foi ou não chamado.&lt;/p&gt;
&lt;p&gt;Confira no exemplo abaixo como fazer a verificação de chamada de método de uma dependência com o Mockito.&lt;/p&gt;
&lt;h2&gt;Exemplo:&lt;/h2&gt;
&lt;p&gt;Primeiro vamos definir a Classe que está sendo testada
e uma dependência dela na qual vamos verificar a chamada do método,
através de um Mock criado com o Mockito. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.mockito.verificarSeMetodoFoiChamado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClasseSendoTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DependenciaDaClasseSendoTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dependencia&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;ClasseSendoTestada&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DependenciaDaClasseSendoTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dependencia&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;dependencia&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dependencia&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodoSendoTestado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;parametro&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;dependencia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;metodoQueSeraChamado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parametro&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora a dependência:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.mockito.verificarSeMetodoFoiChamado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;DependenciaDaClasseSendoTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;metodoQueSeraChamado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;parametro&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Teste&lt;/h2&gt;
&lt;p&gt;E o teste que faz a verificação da chamada do método com Mockito. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.mockito.verificarSeMetodoFoiChamado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.junit.Test&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;org.mockito.Mockito&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClasseSendoTestadaTest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testeMetodoFoiChamado&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Cria Mock da dependência&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DependenciaDaClasseSendoTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dependencia&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mockito&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DependenciaDaClasseSendoTestada&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Instancia a classe sendo testada passando a dependência Mockada&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ClasseSendoTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;classeSendoTestada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClasseSendoTestada&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dependencia&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//chama o método sendo testado&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;classeSendoTestada&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;metodoSendoTestado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;parâmetro-teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Verifica se o método da dependência foi chamado (incluindo o parâmetro exato)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Mockito&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dependencia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mockito&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;times&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;metodoQueSeraChamado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;parâmetro-teste&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este teste verifica se o método da dependência da classe foi chamado
e ainda verifica a quantidade de vezes que ele foi testado.&lt;/p&gt;
&lt;p&gt;Se, por exemplo, quisermos verificar se o método foi acessado 5 vezes
bataria informar 5 no segundo parâmetro do método estático &lt;em&gt;verify&lt;/em&gt; da classe &lt;em&gt;Mockito&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Referencias&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#4" target="_blank"&gt;Javadoc: Mockito&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Mockito"></category></entry><entry><title>Java: Como embaralhar uma lista</title><link href="https://dicasdeprogramacao.com.br/java-como-embaralhar-uma-lista/" rel="alternate"></link><published>2017-06-26T00:00:00-03:00</published><updated>2017-06-26T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-26:/java-como-embaralhar-uma-lista/</id><summary type="html">&lt;p&gt;Para embaralhar uma lista (List) em Java, 
nós podemos utilizar o método shuffle a classe java.util.Collections
que é nativa da API java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como embaralhar os valores de um List.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Para embaralhar uma lista (List) em Java, 
nós podemos utilizar o método shuffle a classe java.util.Collections
que é nativa da API java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como embaralhar os valores de um List.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmbaralharList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;D&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;E&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;F&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Antes de embaralhar&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;shuffle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Depois de embaralhar&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;shuffle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//Depois de embaralhar novamente&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[A, B, C, D, E, F]&lt;/span&gt;
&lt;span class="k"&gt;[A, C, B, F, D, E]&lt;/span&gt;
&lt;span class="k"&gt;[E, D, C, F, B, A]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html" target="_blank"&gt;JavaDoc: Collections&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="List"></category></entry><entry><title>Java: Diferença entre os operadores &amp;&amp;, &amp;, || e |</title><link href="https://dicasdeprogramacao.com.br/java-diferenca-entre-os-operadores-e/" rel="alternate"></link><published>2017-06-25T00:00:00-03:00</published><updated>2017-06-25T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-25:/java-diferenca-entre-os-operadores-e/</id><summary type="html">&lt;p&gt;Uma dúvida muito comum entre programadores Java iniciantes
é saber a diferença entre os operadores lógicos duplo ou simples, ou seja, 
a diferença entre &lt;strong&gt;&amp;amp;&amp;amp;&lt;/strong&gt; e &lt;strong&gt;&amp;amp;&lt;/strong&gt; para o operador &lt;strong&gt;E&lt;/strong&gt;
e a diferença entre &lt;strong&gt;||&lt;/strong&gt; e &lt;strong&gt;|&lt;/strong&gt; para o operador &lt;strong&gt;OU&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A diferença …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Uma dúvida muito comum entre programadores Java iniciantes
é saber a diferença entre os operadores lógicos duplo ou simples, ou seja, 
a diferença entre &lt;strong&gt;&amp;amp;&amp;amp;&lt;/strong&gt; e &lt;strong&gt;&amp;amp;&lt;/strong&gt; para o operador &lt;strong&gt;E&lt;/strong&gt;
e a diferença entre &lt;strong&gt;||&lt;/strong&gt; e &lt;strong&gt;|&lt;/strong&gt; para o operador &lt;strong&gt;OU&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A diferença é que a quando usamos a versão dupla do operador (&amp;amp;&amp;amp; e ||), 
se a condição da operação for resolvida, ela não continua as avaliações das condições seguintes.&lt;/p&gt;
&lt;p&gt;Imagine que você está executando uma operação &lt;strong&gt;E&lt;/strong&gt;.
Se a verificação da esquerda resultar &lt;strong&gt;falso&lt;/strong&gt;, não é necessário verificar o teste do lado direito da operação, concorda?
Independente do resultado da segunda parte da operação, o resultado final será &lt;strong&gt;falso&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O mesmo se aplica para a operação &lt;strong&gt;OU&lt;/strong&gt;.
Se a verificação da esquerda resultar &lt;strong&gt;verdadeiro&lt;/strong&gt;, não é necessário verificar o teste do lado direito da operação.
Independente do resultado da segunda parte da operação, o resultado final será &lt;strong&gt;verdadeiro&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Quando usamos os operadores duplos (&amp;amp;&amp;amp; e ||) o java não continua as verificações se o resultado já for conhecido.
Já usando os operadores simples (&amp;amp; e |), ambos os lados da operação são &lt;strong&gt;sempre&lt;/strong&gt; verificados.&lt;/p&gt;
&lt;p&gt;Vamos ver um exemplo...&lt;/p&gt;
&lt;h2&gt;Exemplo:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OperadoresLogicosDuploOuSimples&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;false &amp;amp;&amp;amp; true = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;primeiraCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;segundaCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - sem teste da segunda condição.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;false &amp;amp; true = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;primeiraCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;segundaCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - com teste da segunda condição.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;true || false = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;primeiraCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;segundaCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - sem teste da segunda condição.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;true | false = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;primeiraCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;segundaCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - com teste da segunda condição.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;primeiraCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Executou o teste da primeira condição&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;segundaCondicao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Executou o teste da segunda condição&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Executou o teste da primeira condição
false &amp;amp;&amp;amp; true = false - sem teste da segunda condição.

Executou o teste da primeira condição
Executou o teste da segunda condição
false &amp;amp; true = false - com teste da segunda condição.

Executou o teste da primeira condição
true || false = true - sem teste da segunda condição.

Executou o teste da primeira condição
Executou o teste da segunda condição
true | false = true - com teste da segunda condição.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Referências:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.2" target="_blank"&gt;Boolean Logical Operators &amp;amp;, ^, and |&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dicasdeprogramacao.com.br/operadores-logicos/" target="_blank"&gt;Conheça os operadores lógicos!&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Operadores lógicos"></category></entry><entry><title>Java: Operadores Bitwise</title><link href="https://dicasdeprogramacao.com.br/java-operadores-bitwise/" rel="alternate"></link><published>2017-06-24T00:00:00-03:00</published><updated>2017-06-24T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-24:/java-operadores-bitwise/</id><summary type="html">&lt;p&gt;É possível realizar &lt;a href="http://www.dicasdeprogramacao.com.br/operadores-logicos/"&gt;operações lógicas&lt;/a&gt; entre números inteiros em Java.
Mas como assim? Operações lógicas não são somente entre valores lógicos (booleanos)?&lt;/p&gt;
&lt;p&gt;Sim e Não...&lt;/p&gt;
&lt;p&gt;Sim, operações lógicas (E, Ou, Não, Não-E, Não-Ou, Ou-Exclusivo, etc.)
são realizadas apenas entre valores …&lt;/p&gt;</summary><content type="html">&lt;p&gt;É possível realizar &lt;a href="http://www.dicasdeprogramacao.com.br/operadores-logicos/"&gt;operações lógicas&lt;/a&gt; entre números inteiros em Java.
Mas como assim? Operações lógicas não são somente entre valores lógicos (booleanos)?&lt;/p&gt;
&lt;p&gt;Sim e Não...&lt;/p&gt;
&lt;p&gt;Sim, operações lógicas (E, Ou, Não, Não-E, Não-Ou, Ou-Exclusivo, etc.)
são realizadas apenas entre valores lógicos.&lt;/p&gt;
&lt;p&gt;Entretanto em Java é possível realizar algumas operações lógicas entre valores numéricos inteiros.
Neste caso, as operações lógicas ocorrem no nível de &lt;em&gt;bits&lt;/em&gt; dos números,
ou seja, as operações lógicas ocorrem com as representações binárias dos números.&lt;/p&gt;
&lt;p&gt;Para realizar uma operação lógica com números inteiros (a nível de bits) com java,
basta utilizarmos os operadores &lt;strong&gt;&amp;amp;&lt;/strong&gt;, &lt;strong&gt;|&lt;/strong&gt; e &lt;strong&gt;^&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Exemplo:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.fundamentos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OperacoesBitwise&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; | &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;amp; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; ^ &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; | &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;amp; &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; ^ &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;
&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;
&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;
&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;15&lt;/span&gt;
&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;10 OU 12&lt;/h2&gt;
&lt;p&gt;No exemplo acima, nós efetuamos primeiro uma operação lógica &lt;strong&gt;OU&lt;/strong&gt; entre os números 10 e 12.
Mas como esta operação acontece no nível binário, primeiro termos que 
&lt;a href="http://www.dicasdeprogramacao.com.br/as-10-conversoes-numericas-mais-utilizadas-na-computacao/"&gt;converter os números para binário&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;10&lt;sub&gt;10&lt;/sub&gt; = 1010&lt;sub&gt;2&lt;/sub&gt;&lt;br /&gt;
  12&lt;sub&gt;10&lt;/sub&gt; = 1100&lt;sub&gt;2&lt;/sub&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Com os números binários em mãos podemos realizar as operações lógicas. Então 10 | 12 ...&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;

&lt;span class="mf"&gt;1010&lt;/span&gt;
&lt;span class="mf"&gt;1100&lt;/span&gt;
&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;1110&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;1110&lt;sub&gt;2&lt;/sub&gt; = 14&lt;sub&gt;10&lt;/sub&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Esta operação é como se fosse uma soma (que você aprende no primário),
mas aplicando o operador &lt;strong&gt;OU&lt;/strong&gt; ao invês do mais (+).&lt;/p&gt;
&lt;p&gt;Da direita para a esquerda...&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;10 E 12&lt;/h2&gt;
&lt;p&gt;Aplicando o operador &lt;strong&gt;E&lt;/strong&gt; aos valores 10 e 12 a nível de bits (binário), temos o seguinte resultado.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;

&lt;span class="mf"&gt;1010&lt;/span&gt;
&lt;span class="mf"&gt;1100&lt;/span&gt;
&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;1000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;1000&lt;sub&gt;2&lt;/sub&gt; = 8&lt;sub&gt;10&lt;/sub&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A ideia aqui é a mesma, esta operação é como se fosse uma soma (que você aprende no primário),
mas aplicando o operador &lt;strong&gt;E&lt;/strong&gt; ao invês do mais (+).&lt;/p&gt;
&lt;p&gt;Da direita para a esquerda...&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;10 OU-EXCLUSIVO 12&lt;/h2&gt;
&lt;p&gt;Aplicando o operador &lt;strong&gt;OU-EXCLUSIVO&lt;/strong&gt; aos valores 10 e 12 a nível de bits (binário), temos o seguinte resultado.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;

&lt;span class="mf"&gt;1010&lt;/span&gt;
&lt;span class="mf"&gt;1100&lt;/span&gt;
&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;0110&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;0110&lt;sub&gt;2&lt;/sub&gt; = 6&lt;sub&gt;10&lt;/sub&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Seguindo o mesmo raciocínio de aplicar o operador lógico no nível binário ...
(Da direita para a esquerda)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;EXCLUSIVO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;EXCLUSIVO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;EXCLUSIVO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;EXCLUSIVO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Operações Bitwise entre 9 e 7&lt;/h2&gt;
&lt;p&gt;Como um segundo exemplo da aplicação dos operadores bitwise podemos usar os valores 9 e 7.
Vejamos como o Java executa as operações &lt;strong&gt;OU&lt;/strong&gt;, &lt;strong&gt;E&lt;/strong&gt; e &lt;strong&gt;OU-EXCLUSIVO&lt;/strong&gt; entre esses valores:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="mf"&gt;1001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;
&lt;span class="mf"&gt;0111&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;1111&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;

&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="mf"&gt;1001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;
&lt;span class="mf"&gt;0111&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;0001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;

&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OU&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;EXCLUSIVO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="mf"&gt;1001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;
&lt;span class="mf"&gt;0111&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;1110&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;binário&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Referências:&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html" target="_blank"&gt;Bitwise and Bit Shift Operators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dicasdeprogramacao.com.br/as-10-conversoes-numericas-mais-utilizadas-na-computacao/" target="_blank"&gt;As 10 conversões numéricas mais utilizadas na computação&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dicasdeprogramacao.com.br/operadores-logicos/" target="_blank"&gt;Conheça os operadores lógicos!&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Operadores Bitwise"></category><category term="Bitwise"></category><category term="Operadores Lógicos"></category></entry><entry><title>Java: Como ordenar um Array</title><link href="https://dicasdeprogramacao.com.br/java-como-ordenar-um-array/" rel="alternate"></link><published>2017-06-23T00:00:00-03:00</published><updated>2017-06-23T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-23:/java-como-ordenar-um-array/</id><summary type="html">&lt;p&gt;Para ordenar um Array (Vetor) nós podemos utilizar a classe java.util.Arrays
que é nativa da API java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como ordenar um Array, tanto de texto quanto de número.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Para ordenar um Array (Vetor) nós podemos utilizar a classe java.util.Arrays
que é nativa da API java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como ordenar um Array, tanto de texto quanto de número.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrdenarArray&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;José&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Nomes não ordenados:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Nomes ordenados:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeros&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Números não ordenados:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Números ordenados:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Nomes não ordenados:
João
Gustavo
Maria
José
Ana

Nomes ordenados:
Ana
Gustavo
José
João
Maria

Números não ordenados:
20
2
8
19
100
5
1
6
13

Números ordenados:
1
2
5
6
8
13
19
20
100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html" target="_blank"&gt;JavaDoc: Arrays&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Array"></category><category term="Arrays"></category></entry><entry><title>Java: Como converter Array para List</title><link href="https://dicasdeprogramacao.com.br/java-como-converter-array-para-list/" rel="alternate"></link><published>2017-06-22T00:00:00-03:00</published><updated>2017-06-22T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2017-06-22:/java-como-converter-array-para-list/</id><summary type="html">&lt;p&gt;Para converter um Array (Vetor) em um List, nós podemos utilizar a classe java.util.Arrays
que é nativa da API java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como converter um Array em um List.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Para converter um Array (Vetor) em um List, nós podemos utilizar a classe java.util.Arrays
que é nativa da API java.&lt;/p&gt;
&lt;p&gt;Veja no exemplo abaixo como converter um Array em um List.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;br.com.dicasdejava.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ArrayParaList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gustavo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Maria&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;José&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;João&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Ana&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listaDeNomes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Saída:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[Gustavo, Maria, José, João, Ana]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Referências:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html" target="_blank"&gt;JavaDoc: Arrays&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="{ Dicas de Java }"></category><category term="Array"></category><category term="List"></category><category term="Arrays"></category></entry><entry><title>Inglês técnico para programadores</title><link href="https://dicasdeprogramacao.com.br/ingles-tecnico-para-programadores/" rel="alternate"></link><published>2016-05-30T00:00:00-03:00</published><updated>2016-05-30T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2016-05-30:/ingles-tecnico-para-programadores/</id><summary type="html">&lt;p&gt;Que aprender inglês ajuda na carreira de qualquer profissional, isso
tudo mundo já sabe. Em algumas profissões, no entanto, saber inglês
deixa de ser uma opção e passa a ser um conhecimento que serve de
instrumento para o trabalho. Entre …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Que aprender inglês ajuda na carreira de qualquer profissional, isso
tudo mundo já sabe. Em algumas profissões, no entanto, saber inglês
deixa de ser uma opção e passa a ser um conhecimento que serve de
instrumento para o trabalho. Entre as profissões que mais fazem uso da
língua inglesa – finanças, vendas, comércio, secretariado – a área de
programação é a que mais trabalha com o uso da língua.&lt;/p&gt;
&lt;p&gt;Há um velho ditado que diz que quem é programador e não aprende inglês
nunca será um programador de verdade. E faz sentido, já que boa parte
dos programas, dos termos e dos equipamentos usados nessa área estão em
inglês. Maurício, por exemplo, largou o emprego de programador por um
ano e foi morar na Austrália para aperfeiçoar seu inglês.
&lt;a href="https://preply.com/pt/aulas-ingl%C3%AAs-online" target="_blank"&gt;&lt;img alt="ingles-1" class="alignleft" src="/images/ingles-tecnico-para-programadores/ingles-1-300.jpg"&gt;&lt;/a&gt;
Segundo ele, essa foi a experiência mais valiosa até o presente, pois a partir
dela as portas para a programação se abriram. Ele cita que antes
precisava traduzir documentação através de tradutores simultâneos e era
complicado obter respostas através de fóruns brasileiros. Depois de ter
tomado a decisão de deixar tudo para trás e começar a aprender inglês,
tudo isso mudou. Mas e quando não é possível viajar, seja por falta de
tempo ou dinheiro? Uma plataforma nova e promissora chegou há 5 meses no
Brasil e vem mudando o conceito de ensino de idiomas, como é o caso da
Preply, que oferece &lt;u&gt;&lt;a href="https://preply.com/pt/aulas-ingl%C3%AAs-online" target="_blank"&gt;aulas de inglês
online&lt;/a&gt;&lt;/u&gt; com
professores brasileiros, estrangeiros ou nativos.&lt;/p&gt;
&lt;h2&gt;Programador precisa aprender inglês!&lt;/h2&gt;
&lt;p&gt;Evoluir em tecnologias e desenvolver novas metodologias nessa área, sem
ter o domínio do inglês, é extremamente difícil, e isso pode ser
reconhecido através de atividades simples como a correção de um &lt;em&gt;bugLog
Error&lt;/em&gt;, por exemplo. Esse profissional precisa conhecer os sistemas de
forma aprofundada e ler manuais ou decorar não vai ajudar muito, além de
tornar o processo todo mais cansativo. Como o programador desenvolve
&lt;em&gt;softwares&lt;/em&gt;, corrige sistemas e utiliza fontes que, em sua grande
maioria, estão na língua inglesa, fica difícil atuar sem a língua&lt;/p&gt;
&lt;p&gt;&lt;a href="https://preply.com/pt/aulas-ingl%C3%AAs-online" target="_blank"&gt;&lt;img alt="Inglês" class="alignright" src="/images/ingles-tecnico-para-programadores/ingles-2-300.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Além disso, a moda dos &lt;em&gt;Apps&lt;/em&gt; para &lt;em&gt;Android&lt;/em&gt; e &lt;em&gt;iPhone&lt;/em&gt; também estão fazendo
com que o mercado se atualize mais rapidamente e quando o profissional
entende o idioma pode "beber diretamente da fonte", sem precisar esperar
por traduções de qualidade. Se você está pensando em estudar programação
ou é programador e precisa decorar os termos porque não sabe falar a
língua, o ideal é começar com o aprendizado do inglês agora mesmo! Após
ter atingido a fluência, até o próprio exercício das atividades ficará
mais fácil, bem como o campo de atuação do profissional, que se
amplifica diante da maleabilidade de seus conhecimentos.&lt;/p&gt;
&lt;p&gt;Dizem que quando uma novidade tecnológica surge em países desenvolvidos
como os Estados Unidos, demora de um a dois anos para que ela chegue até
aqui. Por exemplo, o Uber que chegou recentemente aqui, já existia nos
EUA a algum tempo. Saber inglês te dá a oportunidade de ter contato
com o que há de mais novo em tecnologia no mundo!&lt;/p&gt;
&lt;p&gt;Muitas pessoas dizem que não tem tempo para estudar inglês. Eu já digo
que é "desculpinha". Ainda mais com a possibilidade de estudar
remotamente com professores qualificados. E se você for olhar na
plataforma &lt;a href="https://preply.com/pt/aulas-ingl%C3%AAs-online" target="_blank"&gt;Preply&lt;/a&gt;, o
preo das horas estão bem acessíveis. Então não tem
desculpas, as oportunidades estão aí batendo na porta, caberá a você
estar preparado ou não.&lt;/p&gt;
&lt;p&gt;Bons estudos!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Programação Orientada a Objetos: por que aprender isso?</title><link href="https://dicasdeprogramacao.com.br/programacao-orientada-objetos-por-que-aprender-isso/" rel="alternate"></link><published>2016-04-26T11:40:00-03:00</published><updated>2016-04-26T11:40:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2016-04-26:/programacao-orientada-objetos-por-que-aprender-isso/</id><summary type="html">&lt;p&gt;A Programação Orientada a Objetos (POO, para os íntimos) não é uma
linguagem de programação, não é uma plataforma de programação, não é um
tipo de programa, é um &lt;strong&gt;paradigma de programação&lt;/strong&gt;. A grosso modo, é um
jeito de programar …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A Programação Orientada a Objetos (POO, para os íntimos) não é uma
linguagem de programação, não é uma plataforma de programação, não é um
tipo de programa, é um &lt;strong&gt;paradigma de programação&lt;/strong&gt;. A grosso modo, é um
jeito de programar representando o que existe no mundo real: objetos,
que possuem características e ações.&lt;/p&gt;
&lt;p&gt;Atualmente, a maioria das tecnologias utilizadas no mercado usa os
conceitos de POO, tais como: Java, C#.NET, VB.NET, JavaScript, Python,
PHP, entre outras. E não é só por isso que você deve aprender POO, mas
também porque hoje as empresas utilizam diferentes frameworks (por
exemplo: Spring, Hibernate, Struts, etc.) para conseguirem acelerar o
desenvolvimento de software, e esses frameworks são construídos com os
conceitos de Programação Orientada a Objetos.&lt;/p&gt;
&lt;p&gt;Se você está aprendendo Java no curso técnico ou na faculdade e está
ficando traumatizado, o principal motivo do seu trauma é que estão
faltando os conceitos de POO.&lt;/p&gt;
&lt;p&gt;Essa "dor" é maior para quem vem de outros paradigmas de programação
como programação estruturada. Muitas vezes tenta-se aplicar conceitos de
paradigmas antigos (como variáveis globais, por exemplo) e o código que
era para ser orientado a objetos, bonitinho, fica uma mistura de um
pouquinho de POO com um monte de "funções" empacotadas em classes.&lt;/p&gt;
&lt;p&gt;Ah se o mundo soubesse o poder de programar utilizando os conceitos
corretos de POO somado a Design Patterns.&lt;/p&gt;
&lt;p&gt;Então, se você quiser aprender POO, eu indico o &lt;a href="https://goo.gl/C7Sq8Z" target="_blank"&gt;canal do
youtube&lt;/a&gt; do meu amigo Leandro Guarino. Neste
&lt;a href="https://goo.gl/C7Sq8Z" target="_blank"&gt;canal&lt;/a&gt; tem um curso de Programação Orientada a
Objetos. Lá você também encontrará vídeo-aulas de outros assuntos de
programação.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://goo.gl/C7Sq8Z" target="_blank"&gt;&lt;img alt="canal-youtube-programacao-orientada-a-objetos" class="aligncenter size-full" src="/images/programacao-orientada-objetos-por-que-aprender-isso/canal-youtube-programacao-orientada-a-objetos.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O Leandro é aluno de doutorado no INPE e professor universitário. Tem
uma didática muito boa e ensina como se estivesse conversando com um
amigo numa mesa de bar, então se você quer aprender Programação
Orientada a Objetos sem sofrimentos a hora é agora. Você pode &lt;a href="https://goo.gl/C7Sq8Z" target="_blank"&gt;clicar
AQUI&lt;/a&gt; para ir direto para as aulas do curso.&lt;/p&gt;
&lt;p&gt;Bons estudos!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Competição de desenvolvimento de aplicativos</title><link href="https://dicasdeprogramacao.com.br/competicao-de-desenvolvimento-de-aplicativos/" rel="alternate"></link><published>2016-04-19T00:00:00-03:00</published><updated>2016-04-19T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2016-04-19:/competicao-de-desenvolvimento-de-aplicativos/</id><summary type="html">&lt;p&gt;Que tal participar de uma competição de desenvolvimento de app,
aprender mais e ganhar prêmios?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.livecoding.tv/" target="_blank"&gt;Livecoding.tv&lt;/a&gt; (plataforma de transmissão
ao vivo de código) está trazendo uma competição mundial de
desenvolvimento de aplicativos móveis nativos para Android e iOS. A …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Que tal participar de uma competição de desenvolvimento de app,
aprender mais e ganhar prêmios?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.livecoding.tv/" target="_blank"&gt;Livecoding.tv&lt;/a&gt; (plataforma de transmissão
ao vivo de código) está trazendo uma competição mundial de
desenvolvimento de aplicativos móveis nativos para Android e iOS. A
competição começou dia 15 de abril de 2016 e qualquer um pode
participar, mesmo que não seja, atualmente, um usuário do Livecoding.tv.&lt;/p&gt;
&lt;p&gt;O objetivo da competição é criar um aplicativo oficial para o
próprio Livecoding.tv. O aplicativo não precisa ter todas as funções do
site. O que importa é que tenha todos os atributos essenciais.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.livecoding.tv/" target="_blank"&gt;&lt;img alt="logo-livecoding" class="alignright" src="/images/competicao-de-desenvolvimento-de-aplicativos/logo-livecoding.png"&gt;&lt;/a&gt;A comunidade do Livecoding.tv
irá votar através do &lt;a href="http://blog.livecoding.tv/" target="_blank"&gt;Blog do Livecoding.tv&lt;/a&gt;
para selecionar os ganhadores. Os vencedores serão apresentados num
artigo do blog.&lt;/p&gt;
&lt;p&gt;Existem três categorias de prêmios: melhor aplicativo iOS, melhor
aplicativo Android e transmissão mais educacional e interativa. Tanto
equipes como indivíduos podem participar da competição. Para participar,
basta preencher este
&lt;a href="https://docs.google.com/forms/d/1dOil0-d5EVlw-Rp9DTR3X0hq73aYufsbzoQ4aPjCsQQ/viewform?c=0&amp;amp;w=1&amp;amp;usp=send_form" target="_blank"&gt;formulário&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Além de colocar em prática o seu conhecimento, aprender mais, você ainda
pode ganhar prêmios!&lt;/p&gt;
&lt;p&gt;Os prêmios que estão sendo oferecidos são os seguintes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;O vencedor da categoria “iOS” levará um &lt;strong&gt;iPad Air 2 10-inch Retina
    16 GB&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;O vencedor da categoria “Android” levará um &lt;strong&gt;Google Pixel C Tablet
    32 GB&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;O vencedor da categoria “Transmissão mais educacional e interativa”
    levará um &lt;strong&gt;Samsung Gear VR&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ficou interessado? Para saber como participar, todos os requerimentos e
critérios podem ser conferidos
&lt;strong&gt;&lt;a href="https://drive.google.com/file/d/0By3FQW1zdibnV1BsenpYakljSTg/view" target="_blank"&gt;aqui&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A competição terminará no dia &lt;strong&gt;15 de maio de 2016&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Vale lembrar que é uma competição internacional heim! Vamos mostrar o
quão bom são os programadores brasileiros!&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="Eventos"></category></entry><entry><title>Há um robô em você!</title><link href="https://dicasdeprogramacao.com.br/ha-um-robo-em-voce/" rel="alternate"></link><published>2016-01-19T00:00:00-02:00</published><updated>2016-01-19T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2016-01-19:/ha-um-robo-em-voce/</id><summary type="html">&lt;p&gt;Para muita gente que acabou de descobrir este mundo do desenvolvimento
de softwares, lógica de programação parece coisa de outro mundo. As
pessoas ficam batendo cabeça com algoritmos tentando entender aquele
monte de código que, a princípio, não quer dizer …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para muita gente que acabou de descobrir este mundo do desenvolvimento
de softwares, lógica de programação parece coisa de outro mundo. As
pessoas ficam batendo cabeça com algoritmos tentando entender aquele
monte de código que, a princípio, não quer dizer nada. Mas o segredo
para aprender programação sem sofrimento está dentro de você!&lt;/p&gt;
&lt;p&gt;Desde criança você aprende lógica de programação! Lembra quando a sua
mãe te deu aquela bronca: "Não põe o pé sujo no sofá, moleque! Senão
você vai apanhar!"&lt;/p&gt;
&lt;p&gt;Você acaba de aprender a estrutura de controle mais básica da lógica de
programação &lt;a href="http://dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank"&gt;SE-ENTÃO-SENÃO&lt;/a&gt; e
de quebra um &lt;a href="http://dicasdeprogramacao.com.br/operadores-logicos/" target="_blank"&gt;operador
lógico&lt;/a&gt; E.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SE&lt;/strong&gt; "meu pé tá sujo" &lt;strong&gt;E&lt;/strong&gt; "eu colocar o pé no sofá" &lt;strong&gt;ENTÃO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Minha mãe vai me bater!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SENÃO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Posso assistir o meu desenho animado tranquilo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FIM-SE&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;E quando você prendeu fazer multiplicação? O(a) professor(a) te ensinou
a fazer repedidas somas. Não foi? Você aprendeu a fazer uma &lt;a href="http://dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" target="_blank"&gt;estrutura
de repetição&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Em muitas situações que vivenciamos e problemas que resolvemos
inconscientemente nós usamos lógica de programação sem saber.&lt;/p&gt;
&lt;p&gt;Quando toma banho, você executa um passo-a-passo para lavar o cabelo que
no final terá como resultado o seu cabelo lavado. Por hábito, você nem
pensa muito para executar cada passo desta atividade. Você fez essa
atividade em modo automático.&lt;/p&gt;
&lt;h2&gt;Uma parte de você é um robô&lt;/h2&gt;
&lt;p&gt;Nosso cérebro é um órgão muito preguiçoso. Ele quer delegar tudo! Tudo
que não precisa "pensar" para fazer ele tenta delegar. Por exemplo, você
já pensou na complexidade que é conseguir andar? Manter o equilíbrio,
movimentar cada músculo do corpo de forma síncrona, manter o seu centro
de gravidade dentro da sua base, etc. Já imaginou se tivesse que pensar
cada movimento do seu corpo conscientemente? Uma parte de você faz isso
tudo isso sem você precisar pensar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="há um robo em
você" class="aligncenter" src="/images/ha-um-robo-em-voce/há-um-robo-em-você-1024.jpg"&gt;&lt;/p&gt;
&lt;p&gt;A respiração é completamente automática, as batidas do seu coração
também. Levante o braço, e pense por um instante todos os músculos
que se movimentaram, já pensou se você precisasse pensar para fazer
isso?&lt;/p&gt;
&lt;p&gt;Algumas atividades você já nasceu fazendo por instinto, mas algumas
outras você precisou "aprender". Durante a sua vida você foi ajustando o
seu algoritmo "andar", "escrever", "digitar", "dirigir" para que a parte
"robô" de você executasse esses algoritmos inconscientemente.&lt;/p&gt;
&lt;p&gt;Uma parte de você é um robô que apenas executa atividades "sem precisar
pensar". Com o computador é a mesma coisa. Se ele receber as instruções,
ele vai executá-las. Computador não pensa, apenas faz o que a gente
manda.&lt;/p&gt;
&lt;p&gt;Aliás, existem várias pesquisas e discussões a respeito disso, mas o
homem ainda não conseguiu fazer um computador que pensa como um humano.
Tudo que o computador faz é executar algoritmos. Mas essa discussão não
é o foco deste post.&lt;/p&gt;
&lt;h2&gt;Você fez algoritmos a vida inteira&lt;/h2&gt;
&lt;p&gt;O que quero que você perceba é que, na verdade, você já sabe lógica de
programação. Durante toda a sua vida, você fez ajustes nos algoritmos
que são executados pelo robô que há em você. Esses algoritmos são os
&lt;strong&gt;hábitos&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Uma forma muito interessante de te ajudar a aprender programação
é identificando os hábitos que foram programados em você durante toda a
sua vida.&lt;/p&gt;
&lt;p&gt;Os seus hábitos funcionam assim:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Estímulos (ou gatilhos) -&amp;gt; Rotina -&amp;gt; Recompensa&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Desenvolvimento de softwares também se resume a esse processo, com
pequenas modificações de interpretação.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Entrada de dados -&amp;gt; Processamento -&amp;gt; Resultado&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Basicamente, todo programa de computador se resume a isso: &lt;strong&gt;Entrada de
dados -&amp;gt; Processamento -&amp;gt; Resultado&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por exemplo, quando você envia uma mensagem pelo Whatsapp:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Entrada de dados&lt;/strong&gt;: a mensagem e o toque no botão enviar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processamento&lt;/strong&gt;: Empacotamento, envio da mensagem e recebimento
    pelo app da outra pessoa&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resultado&lt;/strong&gt;: Mensagem recebida pelo receptor e notificação de
    "mensagem enviada" para o emissor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Percebeu? Agora é com você! Identifique os hábitos que você programou em
você durante toda a sua vida e que hoje são executados automaticamente
pelo "robô" que há em você. Existem hábitos bons e hábitos ruins. Uma
boa indicação de leitura para você se quiser modificar seus hábitos e
trocar os hábitos ruins por hábitos bons é o livro &lt;a href="https://www.amazon.com.br/gp/product/8539004119/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=8539004119&amp;amp;linkCode=as2&amp;amp;tag=gustafurta-20&amp;amp;linkId=0704f41606058992c9b2c7cc18561827" target="_blank"&gt;O Poder do
Hábito&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.amazon.com.br/gp/product/8539004119/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=8539004119&amp;amp;linkCode=as2&amp;amp;tag=gustafurta-20&amp;amp;linkId=0704f41606058992c9b2c7cc18561827" target="_blank"&gt;&amp;gt;&amp;gt; Se quiser comprar o livro O Poder do Hábito clique
AQUI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Minicurso GRATUITO de Lógica de Programação&lt;/h2&gt;
&lt;p&gt;Recentemente eu abri inscrições para o meu minicurso GRATUITO de lógica
de programação. Neste minicurso as aulas são enviadas para o seu e-mail
e sempre tem exercícios para você resolver. Eu dou um tempo para você
tentar resolver o exercício e envio a minha solução para o seu e-mail.&lt;/p&gt;
&lt;p&gt;Tenho recebido muitos e-mails de agradecimento sobre o minicurso e fico
muito feliz em poder ajudar tantas pessoas. Acredito que programação
deve ser aprendido por todo mundo.&lt;/p&gt;
&lt;p&gt;Se você tem interesse em aprender lógica de programação, te convido a se
inscrever gratuitamente neste minicurso. Basta acessar o link abaixo e
cadastrar o seu e-mail. As aulas serão enviadas para você
automaticamente no seu e-mail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://mclp.dicasdeprogramacao.com.br/" target="_blank"&gt;&amp;gt;&amp;gt; Clique AQUI para se inscrever no minicurso de lógica de
programação&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Aproveite enquanto é gratuito e se inscreva!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Padronizando ambiente de desenvolvimento com Vagrant</title><link href="https://dicasdeprogramacao.com.br/padronizando-ambiente-de-desenvolvimento-com-vagrant/" rel="alternate"></link><published>2016-01-12T00:00:00-02:00</published><updated>2016-01-12T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2016-01-12:/padronizando-ambiente-de-desenvolvimento-com-vagrant/</id><summary type="html">&lt;p&gt;Com a evolução do desenvolvimento de um projeto de software é normal a
necessidade de adicionar novos pacotes, configurações de ambiente, etc.
Também no inicio de um projeto, geralmente é necessário adicionar todas
as dependências do projeto nas máquinas de …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Com a evolução do desenvolvimento de um projeto de software é normal a
necessidade de adicionar novos pacotes, configurações de ambiente, etc.
Também no inicio de um projeto, geralmente é necessário adicionar todas
as dependências do projeto nas máquinas de todos os desenvolvedores.&lt;/p&gt;
&lt;p&gt;É comum ouvir aqueles clássicos "Na minha máquina funciona" ou "Adiciona
o XPTO.jar no seu classpath" ou "instala o pacote ABC" e por aí vai.&lt;/p&gt;
&lt;p&gt;Uma das melhores formas de resolver este problema é usando o
&lt;strong&gt;&lt;a href="https://www.vagrantup.com/" target="_blank"&gt;Vagrant&lt;/a&gt;&lt;/strong&gt;, que colocar a configuração do
ambiente de desenvolvimento no próprio repositório do código.&lt;/p&gt;
&lt;p&gt;Neste post você vai entender como funciona e como utilizar essa
ferramenta fantástica e cada vez mais utilizada por grandes times de
desenvolvimento de softwares, impulsionado pela filosofia &lt;strong&gt;DevOps&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="vagrant" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/vagrant.jpg" width="100%"&gt;&lt;/p&gt;
&lt;h2&gt;Como funciona o Vagrant&lt;/h2&gt;
&lt;p&gt;Através de poucos arquivos de configuração (um ou dois), o Vagrant cria
uma máquina virtual (com VirtualBox ou VMWare) e instala todas as
configurações necessárias. Deixando o ambiente de desenvolvimento pronto
para trabalhar, em qualquer máquina que você esteja.&lt;/p&gt;
&lt;p&gt;Uma das coisas mais interessantes é que as configurações do ambiente são
aplicadas apenas à máquina virtual e não no seu sistema operacional
hospedeiro.&lt;/p&gt;
&lt;p&gt;Outro grande benefício é poder trabalhar em vários projetos com
ambientes completamente diferentes. Por exemplo, é possível trabalhar
num projeto com Python 3.0 e em outro projeto com o Python 2.5. Sem nem
precisar instalar o Python no seu computador.&lt;/p&gt;
&lt;p&gt;Para criar o ambiente do projeto que você vai trabalhar, basta acessar a
pasta do projeto pelo prompt de comando e digitar "vagrant up". Pronto,
o Vagrant vai baixar a imagem do repositório, inicia a máquina
virtual e, caso configurado) instala todos os pacotes necessários para o
desenvolvimento do projeto.&lt;/p&gt;
&lt;p&gt;A máquina virtual é criada apenas na primeira vez, nas próximas
execuções de "vagrant up" o vagrant só verifica se tem algum novo pacote
a ser instalado.&lt;/p&gt;
&lt;h2&gt;Instalação do Vagrant&lt;/h2&gt;
&lt;p&gt;Antes de instalar o Vagrant é preciso instalar o VirtualBox que vai ser
o responsável por executar as máquinas virtuais do vagrant. Baixe o
instalador do VirtualBox em
&lt;a href="https://www.virtualbox.org/wiki/Downloads"&gt;https://www.virtualbox.org/wiki/Downloads&lt;/a&gt; e instale-o no seu sistema
operacional. A instalação é simples. Veja abaixo algumas imagens da
instalação do VirtualBox no Windows. O VirtalBox também é suportado
pelo Mac e Linux.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;**Off
topic&lt;/strong&gt;&lt;/span&gt;: Atualmente eu trabalho no Linux Mint, mas instalei o
Virtualbox e o vagrant num Windows 10 para testar e funcionou
normalmente. Só o acesso ssh que é um pouco diferente no windows, mas
vou dar uma superdica mais abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-VirtualBox-1" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-VirtualBox-1.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-VirtualBox-2" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-VirtualBox-2.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-VirtualBox-3" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-VirtualBox-3.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-VirtualBox-4" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-VirtualBox-4.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-VirtualBox-5" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-VirtualBox-5.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-VirtualBox-6" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-VirtualBox-6.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-VirtualBox-7" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-VirtualBox-7.png"&gt;&lt;/p&gt;
&lt;p&gt;Para instalar o Vagrant você só precisa acessar a página de download do
Vagrant &lt;a href="https://www.vagrantup.com/downloads.html"&gt;https://www.vagrantup.com/downloads.html&lt;/a&gt;, baixar o instalador
apropriado para o seu sistema operacional e seguir o passo a passo da
instalação. Abaixo eu mostro algumas imagens das telas da instalação do
Vagrant no Windows. No Linux e no Mac é tão simples quanto no Windows.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-Vagrant-1" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-Vagrant-1.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-Vagrant-2" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-Vagrant-2.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-Vagrant-3" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-Vagrant-3.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-Vagrant-4" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-Vagrant-4.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-Vagrant-5" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-Vagrant-5.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wizard-Vagrant-6" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Wizard-Vagrant-6.png"&gt;&lt;/p&gt;
&lt;p&gt;O instalador acrescentará os comandos do Vagrant no Path do seu sistema
operacional. Isso significa que você poderá executar os &lt;span
style="text-decoration: underline;"&gt;comandos do vagrant&lt;/span&gt; via linha
de comando em qualquer pasta que você estiver. Veremos mais sobre os
comandos do vagrant mais adiante neste post. Caso os comandos não
funcionem, reinicie o sistema operacional.&lt;/p&gt;
&lt;h2&gt;Configuração do ambiente de desenvolvimento&lt;/h2&gt;
&lt;p&gt;A primeira coisa que você precisa saber é que quando você inicia a
máquina virtual do Vagrant para o seu projeto pela primeira vez ele
vai baixar uma imagem e iniciar a VM. Essas imagens de máquinas
virtuais ficam armazenadas em repositórios online e são chamadas
de &lt;strong&gt;Boxes&lt;/strong&gt; ("Box" no singular).&lt;/p&gt;
&lt;p&gt;Existem boxes que já vem com várias coisas instaladas prontas para
desenvolver. Eu, particularmente, prefiro pegar um ubuntu limpo e criar
um script para instalar as dependências que vou precisar para o meu
projeto. Para visualizar as boxes disponíveis no repositório do Vagrant
acesse: &lt;a href="https://app.vagrantup.com/boxes/search"&gt;https://app.vagrantup.com/boxes/search&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Entendido o que são boxes (imagens de sistemas operacionais), vamos
criar a nossa configuração do Vagrant. Para isto basta criar um arquivo
chamado &lt;strong&gt;Vagrantfile&lt;/strong&gt; na raiz do seu projeto com o conteúdo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;Vagrant&lt;/span&gt;.&lt;span class="nv"&gt;configure&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nv"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;config&lt;/span&gt;.&lt;span class="nv"&gt;vm&lt;/span&gt;.&lt;span class="nv"&gt;box&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ubuntu/trusty64&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O &lt;strong&gt;Vagrantfile&lt;/strong&gt; é o principal arquivo de configuração do Vagrant. Ele
define qual a &lt;span style="text-decoration: underline;"&gt;box&lt;/span&gt; que
será instalada na VM.&lt;/p&gt;
&lt;p&gt;Para que o Vagrant crie o &lt;strong&gt;Vagrantfile&lt;/strong&gt; para você, basta acessar
a pasta do seu projeto via prompt de comando e execute "&lt;strong&gt;vagrant init
ubuntu/trusty64&lt;/strong&gt;".&lt;/p&gt;
&lt;p&gt;Esse comando apenas cria o &lt;strong&gt;Vagrantfile&lt;/strong&gt; já configurado com a box
"ubuntu/trusty64" e um monte de comentários (em inglês) para mais opções
configurações.&lt;/p&gt;
&lt;p&gt;"ubuntu/trusty64" é uma box básica com o &lt;strong&gt;Ubuntu 14.04 LTS
64-bit&lt;/strong&gt;, mas você pode configurar qualquer box que esteja no
repositório do Vagrant, você pode encontrar novas boxes
acessando &lt;a href="https://app.vagrantup.com/boxes/search"&gt;https://app.vagrantup.com/boxes/search&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Com o arquivo &lt;strong&gt;Vagrantfile &lt;/strong&gt;criado, agora você pode iniciar a sua VM
com o comando &lt;strong&gt;vagrant up&lt;/strong&gt;. O Vagrant vai baixar a box configurada,
inicializar a VM e pronto, sua VM já está rodando.&lt;/p&gt;
&lt;h2&gt;Acessar a máquina virtual&lt;/h2&gt;
&lt;p&gt;O Vagrant usa SSH para acessar suas VMs. Se você usa linux, para acessar
a máquina virtual do seu projeto basta digitar o comando &lt;strong&gt;vagrant ssh&lt;/strong&gt;
e você já estará conectado à VM. Mas se você usa Windows é um pouquinho
diferente.&lt;/p&gt;
&lt;p&gt;O Windows não possui um cliente SSH nativo. Então você deve usar um
client SSH como o &lt;a href="http://www.putty.org/" target="_blank"&gt;Putty&lt;/a&gt;. Mas tem uma forma
melhor ... &lt;a href="https://git-scm.com/" target="_blank"&gt;Instalar o git&lt;/a&gt;! O git adiciona um
client ssh no Path do Windows e como resultado o comando &lt;strong&gt;vagrant ssh&lt;/strong&gt;
funciona no Windows. Basta instalar o git e selecionar a opção &lt;strong&gt;"Use
Git and optional Unix tools from the Windows Command Prompt"&lt;/strong&gt; conforme
a imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Git-SSH-Windows" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/Git-SSH-Windows.png"&gt;&lt;/p&gt;
&lt;p&gt;Com o git instalado e selecionada a opção de usar ferramentas opcionais
do Unix no prompt de comando do Windows, o comando &lt;strong&gt;vagrant ssh&lt;/strong&gt;
funciona como no Linux.&lt;/p&gt;
&lt;p&gt;Após executar &lt;strong&gt;vagrant ssh&lt;/strong&gt; você estará conectado à máquina virtual.&lt;/p&gt;
&lt;p&gt;A pasta do seu projeto com o seus arquivos são acessíveis dentro da VM
na pasta /vagrant. Se você quiser acessar os arquivos do seu projeto de
dentro da VM basta acessar a VM com o &lt;strong&gt;vagrant ssh&lt;/strong&gt; e abrir a pasta
/vagrant através do comando &lt;strong&gt;cd /vagrant&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Scripts de instalação de dependências&lt;/h2&gt;
&lt;p&gt;Se tudo correu bem até aqui, você já tem uma máquina virtual funcionando
e acessível. Agora vamos ver como automatizar a instalação de
dependências através de scripts. Para isso você deve criar um
script &lt;em&gt;bash&lt;/em&gt; com os comandos a serem executados ao iniciar a sua VM
através do vagrant up e configurar o &lt;em&gt;Vagrantfile&lt;/em&gt; para identificá-lo.&lt;/p&gt;
&lt;p&gt;Vamos supor que você deseja instalar o &lt;em&gt;nginx&lt;/em&gt; para servir o seu projeto
como um site. Para isso crie um arquivo chamado &lt;strong&gt;nginx.sh&lt;/strong&gt; com o
script abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/env bash&lt;/span&gt;

apt-get&lt;span class="w"&gt; &lt;/span&gt;update
apt-get&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;nginx
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;!&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;/usr/share/nginx/html&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;rm&lt;span class="w"&gt; &lt;/span&gt;-rf&lt;span class="w"&gt; &lt;/span&gt;/usr/share/nginx/html
&lt;span class="w"&gt; &lt;/span&gt;ln&lt;span class="w"&gt; &lt;/span&gt;-fs&lt;span class="w"&gt; &lt;/span&gt;/vagrant&lt;span class="w"&gt; &lt;/span&gt;/usr/share/nginx/html
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No &lt;em&gt;Vagrantfile&lt;/em&gt; você deve apontar esse script com a configuração de
um provision conforme abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;Vagrant&lt;/span&gt;.&lt;span class="nv"&gt;configure&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nv"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;config&lt;/span&gt;.&lt;span class="nv"&gt;vm&lt;/span&gt;.&lt;span class="nv"&gt;box&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ubuntu/trusty64&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;config&lt;/span&gt;.&lt;span class="nv"&gt;vm&lt;/span&gt;.&lt;span class="nv"&gt;provision&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;:&lt;span class="nv"&gt;shell&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;nginx.sh&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pronto, agora quando você iniciar o seu ambiente de desenvolvimento
com &lt;strong&gt;vagrant up&lt;/strong&gt; o nginx será instalado na sua máquina e a pasta do
seu projeto &lt;strong&gt;/vagrant&lt;/strong&gt; será configurada como raiz do seu site.&lt;/p&gt;
&lt;p&gt;Você pode configurar outros scripts no &lt;em&gt;Vagrantfile&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Se a sua VM já estiver rodando, você pode forçar a execução dos scripts
com o comando &lt;strong&gt;vagrant provision&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Compartilhamento de portas&lt;/h2&gt;
&lt;p&gt;Agora que você já sabe configurar o vagrant para instalar
automaticamente todas as dependências do seu projeto através de scripts
&lt;em&gt;bash&lt;/em&gt;. Como você acessaria o seu site para teste a partir da sua
máquina host? É possível configurar o vagrant para mapear portas entre a
máquina host e a VM. Alterei o nosso &lt;em&gt;Vagrantfile&lt;/em&gt; para mapear a porta
80 da VM (porta padrão do apache) para a porta 8000 da máquina host.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Vagrant.configure(2) do |config|
  config.vm.box = &amp;quot;ubuntu/trusty64&amp;quot;
  config.vm.provision :shell, path: &amp;quot;nginx.sh&amp;quot;
  config.vm.network :forwarded_port, guest: 80, host: 8000
end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para atualizar a VM com o mapeamento da porta, basta executar &lt;strong&gt;vagrant
reload&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Testando o novo ambiente de desenvolvimento&lt;/h2&gt;
&lt;p&gt;Para testar se a nossa configuração do Vagrant funcionou, vamos criar um
arquivo index.html na pasta do projeto com uma página de exemplo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;&lt;/span&gt;Testando&lt;span class="w"&gt; &lt;/span&gt;o&lt;span class="w"&gt; &lt;/span&gt;Vagrant&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;O&lt;span class="w"&gt; &lt;/span&gt;Vagrant&lt;span class="w"&gt; &lt;/span&gt;funcionou!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Na máquina host podemos acessar o endereço http://localhost:8000 e a
nossa página de exemplo está funcionando.&lt;/p&gt;
&lt;p&gt;&lt;img alt="teste do
vagrant" class="aligncenter" src="/images/padronizando-ambiente-de-desenvolvimento-com-vagrant/teste-do-vagrant-e1452366196423.png"&gt;&lt;/p&gt;
&lt;h2&gt;Comandos&lt;/h2&gt;
&lt;p&gt;Abaixo listo alguns comando do vagrant para referência.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;vagrant init&lt;/strong&gt;: Este comando cria o arquivo &lt;strong&gt;Vagrantfile&lt;/strong&gt; na
    pasta em que o comando foi executado. O parâmetro seguinte ao
    comando é o nome da Box que será utilizada. Por exemplo &lt;strong&gt;&lt;em&gt;*vagrant
    init ubuntu/trusty64&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; configura no Vagrantfile a box que tem um
    Linux Ubuntu 14.04 LTS. O arquivo Vagrantfile criado pelo
    comando &lt;/em&gt;&lt;em&gt;vagrant init&lt;/em&gt;* é cheio de comentários de possíveis
    configurações do Vagrant, é interessante lê e tentar entender
    estas configurações.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant up&lt;/strong&gt;: Este comando inicia a máquina virtual e instala
    todas as dependências configuradas no &lt;strong&gt;Vagrantfile&lt;/strong&gt;. Quando este
    comando é executado a primeira vez, a &lt;strong&gt;box&lt;/strong&gt; é baixada, a máquina
    virtual é instalada e todasas dependências configuradas são
    instaladas na VM. Nas execuções seguintes de vagrant up, apenas as
    novas dependências são instaladas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant suspend&lt;/strong&gt;: Este comando suspende a execução da máquina
    virtual, liberando memória. É como se desligasse a VM, mas mantendo
    o estado da máquina.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant resumo&lt;/strong&gt;: Este comando restaura a execução de uma
    VM suspensa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant halt&lt;/strong&gt;: Este comando desliga a VM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant reload&lt;/strong&gt;: Este comando reinicia a VM e reavalia o
    Vagrantfile para instalação de novas dependências. É o mesmo
    que &lt;strong&gt;vagrant halt + vagrant up&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant ssh&lt;/strong&gt;: Este comando faz uma conexão via ssh com a
    máquina virtual. Funciona nativamente no Linux e no Mac, para o
    funcionar no Windows, siga as instruções da Sessão "ACESSAR A
    MÁQUINA VIRTUAL" deste artigo para verificar como fazer este
    comando funcionar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant box add&lt;/strong&gt;: Este comando baixa e instala uma box para
    o seu computador. Dessa forma quando quando você executar uma vm
    pela primeira vez a box não precisará ser baixada da internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant destroy&lt;/strong&gt;: Este comando remove a vm do seu computador. Ou
    seja, quando você executar &lt;strong&gt;vagrant up&lt;/strong&gt; novamente a VM será
    instalada do zero novamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vagrant provision&lt;/strong&gt;: Força a execução dos scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Existem muitos outros comandos do Vagrant, para obter uma lista de todos
os comandos, basta digitar &lt;strong&gt;vagrant&lt;/strong&gt; no prompt de comando e todas as
opções são apresentadas.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Meu objetivo com este post é mostrar como utilizar o vagrant para
automatizar a criação de ambiente de desenvolvimento. Isso é muito útil
para equipes de desenvolvimento de softwares pois elimina configurações
manuais na máquina de cada integrante da equipe e simplifica o trabalho.
Basta baixar o código do repositório, digitar &lt;strong&gt;vagrant up&lt;/strong&gt; e pronto, o
seu ambiente de trabalho está funcional. Com o vagrant a configuração do
ambiente de desenvolvimento fica junto com o código do projeto no
repositório de código.&lt;/p&gt;
&lt;p&gt;É interessante notar que cada desenvolvedor pode usar a IDE que desejar
na máquina host.&lt;/p&gt;
&lt;p&gt;Há muitas opções de configuração do vagrant. Mostrei aqui uma
configuração básica, mas o vagrant pode ser usado junto com Docker,
Chef, muitas opções de provisioning, muitas boxes já configuradas, etc.
Acesse &lt;a href="https://docs.vagrantup.com/"&gt;https://docs.vagrantup.com/&lt;/a&gt; para ver a documentação.&lt;/p&gt;
&lt;p&gt;Eu uso o Vagrant em vários projetos, e você? Você já conhecia o Vagrant?
Deixe aí em baixo o seu comentário!&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="Ferramentas"></category></entry><entry><title>Eu vou te ensinar programação!</title><link href="https://dicasdeprogramacao.com.br/eu-vou-te-ensinar-programacao/" rel="alternate"></link><published>2015-12-29T00:00:00-02:00</published><updated>2015-12-29T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-12-29:/eu-vou-te-ensinar-programacao/</id><summary type="html">&lt;p&gt;Desde quando eu criei o blog &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; eu queria
ajudar as pessoas a aprenderem programação. Acredito piamente que TODOS
devem aprender programação. Independente da profissão que exerce,
programação pode ser muito útil. Por isso nos meus posts aqui …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Desde quando eu criei o blog &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; eu queria
ajudar as pessoas a aprenderem programação. Acredito piamente que TODOS
devem aprender programação. Independente da profissão que exerce,
programação pode ser muito útil. Por isso nos meus posts aqui eu
sempre me pergunto: será que o leitor que nunca criou um software
conseguiria entender isso?&lt;/p&gt;
&lt;p&gt;Me revolto com a forma com que programação é ensinado em
muitas faculdades e cursos técnicos. Há exceções, mas a maioria desses
cursos cospe a matéria em cima do aluno de qualquer jeito e pronto.
Sei as dificuldades de pessoas, sem preparo prévio, que entram numa
faculdade ou curso técnico na área de TI para aprender programação já se
deparando com conteúdos avançados.  A culpa não é das faculdades e nem
dos professores.&lt;/p&gt;
&lt;p&gt;Durante a minha experiência profissional nesta área, percebi que as
coisas que mais atrapalham os iniciantes é começar com linguagens de
programação profissionais, sem antes entender os conceitos básicos de
lógica de programação (coisa básica como ler e escrever que não é
ensinado nas escolas), especialmente se a pessoa não sabe muito bem
inglês.&lt;/p&gt;
&lt;p&gt;Evidentemente em todas as salas de aula existe um desnivelamento
de experiências entre os alunos com relação ao que está sendo ensinado.
Também é natural os professores tentarem estimular a turma a ultrapassar
limites. Como sempre tem uma parte da turma que já é um pouco mais
experiente, os professores tendem a passar mais rápido pela parte
básica, por ver que alguns alunos querem conteúdos mais avançados. É um
dilema para o coitado do professor! Mas quase sempre o mais prejudicado
é o iniciante que nunca teve contato com programação. Estes precisam de
mais atenção.&lt;/p&gt;
&lt;p&gt;Lógica de programação é uma disciplina básica como a matemática e
português, mas não é ensinada na escola fundamental. E da mesma forma
como as disciplinas básicas da alfabetização, é preciso
muita &lt;strong&gt;prática&lt;/strong&gt; para se aprender lógica de programação. Não basta uma
passada rápida por este conteúdo. Você já pensou na dificuldade de um
analfabeto para aprender a ler se um professor apenas desse uma passada
rápida no que são vogais e consoantes e, em seguida mostrasse uma frase
inteira esperando que o aluno a lesse? É isso que acontece com o
iniciante em programação. Jogam-se todos os recurso da lógica de
programação sobre o aluno e espera-se que ele já saia criando um super
aplicativo.&lt;/p&gt;
&lt;p&gt;Penso que todos devem aprender programação, mas vejo que esses
iniciantes que dividem a sala com os mais experientes dificilmente
terminam o curso, desistem e, por fim, pensam não serem capazes de
aprender programação! Se este foi ou está sendo o seu caso, por favor
não pense assim! O problema não é você, mas o sistema de educação que
você percorreu a vida toda. Este não é só o caso da programação, outros
assuntos básicos como educação financeira, negócios e empreendedorismo
também não são tratados como deveria.&lt;/p&gt;
&lt;p&gt;&lt;img :width="100%" alt="Estudante" class="aligncenter" src="/images/eu-vou-te-ensinar-programacao/student.jpg"&gt;&lt;/p&gt;
&lt;p&gt;A minha revolta é que muitos alunos, muitos mesmo, saem dessas
faculdades cheias de alunos, desistem de aprender programação
achando que é muito difícil e se sentem incompetentes, burras ou
incapazes de seguir o avanço tecnológico que estamos vivendo.&lt;/p&gt;
&lt;p&gt;Revoltado eu assumi esta missão: &lt;strong&gt;Eu vou te ensinar programação!&lt;/strong&gt;
Mesmo que você nunca tenha feito um programa na vida, aprender
programação mudará a forma como você enxerga o mundo e esta evolução
tecnológica da atualidade. Independente da tua profissão, aprender
lógica de programação te será útil.&lt;/p&gt;
&lt;p&gt;Comecei este caminho criando um &lt;strong&gt;minicurso GRÁTIS de lógica de
programação&lt;/strong&gt; por e-mail.&lt;/p&gt;
&lt;p&gt;Se quiser se inscrever neste minicurso gratuito, basta &lt;a href="http://mclp.dicasdeprogramacao.com.br/" target="_blank"&gt;acessar este
link e cadastrar seu e-mail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Estou preparando um material para quem não sabe programação, o primeiro
que lancei é &lt;a href="http://mclp.dicasdeprogramacao.com.br/" target="_blank"&gt;este minicurso&lt;/a&gt;.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Quer ser programador? Aprenda inglês!</title><link href="https://dicasdeprogramacao.com.br/quer-ser-programador-aprenda-ingles/" rel="alternate"></link><published>2015-11-18T00:00:00-02:00</published><updated>2015-11-18T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-11-18:/quer-ser-programador-aprenda-ingles/</id><summary type="html">&lt;p&gt;Não tem conversa, se você quer trabalhar com programação, você tem que
saber inglês! Não precisa ser fluente de início, mas você precisa ler e
também escrever em inglês.&lt;/p&gt;
&lt;p&gt;Se você não gosta de inglês, você deve criar motivos para …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Não tem conversa, se você quer trabalhar com programação, você tem que
saber inglês! Não precisa ser fluente de início, mas você precisa ler e
também escrever em inglês.&lt;/p&gt;
&lt;p&gt;Se você não gosta de inglês, você deve criar motivos para gostar de
inglês. Vou explicar isso e neste post vou te dar algumas dicas de como
você pode aprender inglês sem sofrer.&lt;/p&gt;
&lt;p&gt;Se você não gosta e nem pretende gostar de inglês, desista da carreira
de desenvolvedor de softwares. Isso é sério! Impossível ser programador
sem saber inglês, pelo menos leitura. Mas se você sonha em se tornar um
desenvolvedor de softwares e ter uma carreira de sucesso, este pode ser
o grande motivo que fará você &lt;strong&gt;amar aprender inglês&lt;/strong&gt;! Quer saber como?&lt;/p&gt;
&lt;p&gt;&lt;img alt="We Want You To Develop
Softwares" class="aligncenter" src="/images/quer-ser-programador-aprenda-ingles/WeWantYouToProgram.png"&gt;&lt;/p&gt;
&lt;h2&gt;Crie motivos para aprender inglês&lt;/h2&gt;
&lt;p&gt;Quando a gente faz o que gosta, trabalhamos com amor e dedicação. Não
existe cansaço ou desânimo quando fazemos o que gostamos. Vou dar um
exemplo.&lt;/p&gt;
&lt;p&gt;Imagine que você acabou de chegar do trabalho (que você não gosta)
cansado e estressado, sem energia pra fazer nada. Você não vai estudar
inglês, certeza! Você não está com saco pra estudar uma coisa que você
não gosta. Certo? Mas e se o seu filhinho de 3 aninhos vier correndo,
abraçar a sua perna e dizer "Papai, papai! (Ou mamãe) Vamos brincar de
esconde-esconde?", o que você faria? Você empurraria o seu filho e diria
"Sai pra lá moleque! Tô cansado, deixa eu descansar!"? Você faria isso?
Eu respondo: Não há chance de você dar essa resposta pra ele! Você,
mesmo cansado de um árduo dia de trabalho, deixaria tudo e ia brincar
com seu filho! Por quê? Porque seu filho é prioridade pra você. Não há
cansaço que faça você não abraçar o seu filho!&lt;/p&gt;
&lt;p&gt;&lt;img alt="abraçar o
filho" class="aligncenter" src="/images/quer-ser-programador-aprenda-ingles/abraçar-o-filho.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Quando você quer muito uma coisa, ela vira prioridade para você. Se você
quer muito ter uma carreira de sucesso como programador, estudar inglês
todo dia é "abraçar o seu filho" após o dia de trabalho, e não há
cansaço que faça você não &lt;del&gt;abraçar o seu filho&lt;/del&gt; estudar o inglês.
Entendeu? Assim como um filho, o inglês vai virar parte do seu
pensamento o tempo todo. O inglês deixa de ser uma coisa que você
TEM que aprender (obrigado) para ser uma coisa que você QUER aprender.
Você passa a gostar de aprender inglês. Porque você quer muito ser
desenvolvedor de softwares e ter uma carreira de sucesso.&lt;/p&gt;
&lt;h2&gt;5 dicas para aprender inglês&lt;/h2&gt;
&lt;p&gt;Aprender inglês, assim como qualquer língua estrangeira, é um
trabalho que envolve hábito. Não adianta estudar inglês um dia inteiro e
ficar uma semana sem aprender nada novo de inglês. Tem que ser
diariamente! Você precisa desenvolver o hábito de estudar inglês. Abaixo
eu dou 5 dicas para você colocar o inglês no seu dia a dia.&lt;/p&gt;
&lt;h3&gt;Dica 1: Instale o jogo Duolingo no seu Smartphone&lt;/h3&gt;
&lt;p&gt;&lt;img alt="duolingo-iPad" class="alignleft" src="/images/quer-ser-programador-aprenda-ingles/duolingo-iPad-150x150.jpg"&gt;
Sabe aqueles joguinhos viciantes de smartphones? As pessoas perdem um tempo
gigantesco com esses joguinhos, talvez você seja uma delas. Que tal
você se viciar em um jogo de aprender inglês ao invés de outros
joguinhos inúteis? O &lt;a href="https://www.duolingo.com/" target="_blank"&gt;Duolingo&lt;/a&gt; é esse
joguinho. Nele você tem que acertar palavras, frases, escutar e até
falar em inglês para conseguir pontos e passar as fases. Quando você
adiciona amigos, aí o negócio fica sério (rs) e se torna uma competição.
Convide seus amigos! Você pode colocar o
&lt;a href="https://www.duolingo.com/" target="_blank"&gt;Duolingo&lt;/a&gt; em algum momento da sua rotina e
pode colocar ele no lugar daquele joguinho inútil e viciante, aí você
joga o &lt;a href="https://www.duolingo.com/" target="_blank"&gt;Duolingo&lt;/a&gt; no ônibus, no metrô, quando
acordar, na hora de dormir, na hora do almoço, etc. Na hora que
você jogaria o joguinho inútil.&lt;/p&gt;
&lt;p&gt;Um &lt;a href="https://s3.amazonaws.com/duolingo-papers/other/vesselinov-grego.duolingo12.pdf" target="_blank"&gt;estudo
independente&lt;/a&gt;
conduzido pela City University de Nova York e pela Universidade da
Carolina do Sul, concluiu que, em média, 34 horas de Duolingo equivalem
a um semestre universitário de estudos de um idioma.&lt;/p&gt;
&lt;p&gt;Tem muitos outros idiomas no Duolingo, mas o foco aqui é inglês, então
esqueça os outros idiomas por enquanto.&lt;/p&gt;
&lt;p&gt;Que tal começar agora e fazer 10 minutinhos de duolingo por dia? Te
desafio a fazer 10 dias de ofensiva! Ah! O Duolingo é gratuito. Então
não tem desculpa! Tem pra
&lt;a href="https://play.google.com/store/apps/details?id=com.duolingo" target="_blank"&gt;Android&lt;/a&gt;,
&lt;a href="https://itunes.apple.com/br/app/duolingo-learn-spanish-french/id570060128?mt=8" target="_blank"&gt;iOS&lt;/a&gt;
e
&lt;a href="https://www.microsoft.com/pt-br/store/apps/duolingo-learn-languages-for-free/9wzdncrcv5xn" target="_blank"&gt;WindowsPhone&lt;/a&gt;.
E se quiser me adicionar no duolingo pra gente ver quem vai mais longe,
meu perfil é esse: &lt;a href="https://www.duolingo.com/gustavo.foa"&gt;https://www.duolingo.com/gustavo.foa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O jogo tem muitas coisas legais, uma delas é que ela consegue
identificar as fases que você tem dificuldade (com base nos seus erros)
e com o passar do tempo você precisará reforçar aquele assunto.&lt;/p&gt;
&lt;p&gt;&lt;img alt="reforço
duolingo" class="aligncenter" src="/images/quer-ser-programador-aprenda-ingles/reforço-duolingo.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; Você não precisa ter um smartphone para usar o Duolingo,
você pode acessar &lt;a href="http://duolingo.com" target="_blank"&gt;duolingo.com&lt;/a&gt; e jogar online.&lt;/p&gt;
&lt;h3&gt;Dica 2: + 5 Aplicativos para aprender inglês&lt;/h3&gt;
&lt;p&gt;Continuando o mesmo assunto da dica #1 vejamos mais 5 aplicativos
gratuitos que você pode instalar no seu smartphone para estudar inglês
todos os dias e em qualquer lugar.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;VOA Learning English&lt;/strong&gt;: &lt;span
    style="text-decoration: underline;"&gt;&lt;strong&gt;V&lt;/strong&gt;&lt;/span&gt;oice &lt;span
    style="text-decoration: underline;"&gt;&lt;strong&gt;O&lt;/strong&gt;&lt;/span&gt;f &lt;span
    style="text-decoration: underline;"&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/span&gt;merica é um
    aplicativo onde você poderá ler textos e acompanhar a leitura sendo
    feita por falantes nativos americanos. Este app também traz vídeos,
    programas de rádio, artigos históricos sobre os EUA, etc.
    Links: &lt;a href="https://itunes.apple.com/br/app/voa-learning-english-update/id893509851" target="_blank"&gt;iOS&lt;/a&gt; e
    &lt;a href="https://play.google.com/store/apps/details?id=com.smartray.voa" target="_blank"&gt;Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Johnny Grammar's Word Challenge&lt;/strong&gt;: Esse app é uma corrida contra o
    relógio, você tem 60 segundos para responder o maior número de
    perguntas, são 3 níveis (easy, medium e hard) e vários tópicos.
    Links:
    &lt;a href="https://itunes.apple.com/br/app/learn-english-johnny-grammars/id432488501?mt=8" target="_blank"&gt;iOS&lt;/a&gt;
    e
    &lt;a href="https://play.google.com/store/apps/details?id=com.ubl.spellmaster" target="_blank"&gt;Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learn English Grammar&lt;/strong&gt;: App muito bom para praticar gramática.
    Tem versão para inglês americano e para inglês britânico. Links:
    &lt;a href="https://itunes.apple.com/br/app/learnenglish-grammar-us-edition/id681083763?mt=8" target="_blank"&gt;iOS&lt;/a&gt; e
    &lt;a href="https://play.google.com/store/apps/details?id=bc.leg.us" target="_blank"&gt;Android&lt;/a&gt;
    (Inglês americano) |
    &lt;a href="https://itunes.apple.com/br/app/learnenglish-grammar-uk-edition/id488099900?mt=8" target="_blank"&gt;iOS&lt;/a&gt;
    e &lt;a href="https://play.google.com/store/apps/details?id=bc.leg" target="_blank"&gt;Android&lt;/a&gt;
    (Inglês britânico)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memrise&lt;/strong&gt;: App para aprender e memorizar novas palavras. A ideia
    deste app é que você consiga memorizar palavras com
    coisa engraçadas. Links:
    &lt;a href="https://itunes.apple.com/br/app/memrise-ultimate-memorisation/id635966718?mt=8" target="_blank"&gt;iOS&lt;/a&gt;
    e
    &lt;a href="https://play.google.com/store/apps/details?id=com.memrise.android.memrisecompanion&amp;amp;hl=en" target="_blank"&gt;Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Letroca&lt;/strong&gt;: Jogo educativo de raciocínio onde você combina as
    letras disponíveis para formar palavras do vocabulário inglês. É
    mais um joguinho viciante para aprender inglês. Links:
    &lt;a href="https://itunes.apple.com/app/id658511180?mt=8" target="_blank"&gt;iOS&lt;/a&gt; e
    &lt;a href="https://play.google.com/store/apps/details?id=air.com.fanatee.letroca" target="_blank"&gt;Android&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Dica 3: Leia o assunto que você gosta em inglês&lt;/h3&gt;
&lt;p&gt;&lt;img alt="leitura" class="alignright" src="/images/quer-ser-programador-aprenda-ingles/leitura.jpg"&gt;
Qual o assunto que
você mais se interessa (fora programação)? Que tal aproveitar os
conteúdos que você consome sobre o seu assunto preferido e ler em
inglês? Você pode escolher coisas que você gosta, como cinema, esportes,
culinária, economia, finanças pessoais, revistas em quadrinhos, etc.
Qualquer coisa que você goste e queira ler. Aí você lê esse conteúdo
&lt;span style="text-decoration: underline;"&gt;em inglês&lt;/span&gt;, seja em
livros sobre o assunto, sites, revistas, ou qualquer fonte de conteúdo
em inglês.&lt;/p&gt;
&lt;p&gt;Você pode ler com um dicionário (Ou &lt;a href="http://translate.google.com.br" target="_blank"&gt;google
translator&lt;/a&gt;) do lado para ir traduzindo
no início, com o tempo você precisará recorrer menos ao dicionário. O
interessante é que chega uma hora que você estará lendo tão bem em
inglês que ficará na dúvida se um determinado conteúdo era inglês ou
português depois que você leu. "Caramba! Aquele post
interessante sobre *** que eu li ontem era em inglês ou português?".
Ou seja, você entendeu o que o post dizia, mas não se lembra o
idioma que o post estava escrito.&lt;/p&gt;
&lt;p&gt;A leitura em inglês deve ser um hábito diário. Se você acorda e lê
notícias na internet, leia notícias em sites americanos, exemplo: &lt;a href="http://www.nytimes.com/" target="_blank"&gt;The
New York Times&lt;/a&gt;, &lt;a href="http://www.wsj.com/" target="_blank"&gt;The Wall Street
Journal&lt;/a&gt;, &lt;a href="http://www.bbc.com/news" target="_blank"&gt;BBC News&lt;/a&gt;,
etc..&lt;/p&gt;
&lt;p&gt;Se você gosta de livros, leia livros em inglês!&lt;/p&gt;
&lt;p&gt;Reserve um tempo do seu dia para ler inglês. Leia algo que você queira,
não estou falando de coisas técnicas! Ao ler algo que você gosta e se
interessa pelo assunto, você não vai considerar isso obrigação, e vai
fazer até nas horas vagas e fins de semana. Lembra do "abraçar o seu
filho"?&lt;/p&gt;
&lt;h3&gt;Dica 4: Assista filmes em inglês (com legendas)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="assistir
filmes" class="alignleft" src="/images/quer-ser-programador-aprenda-ingles/assistir-filmes-300x201.jpg"&gt;
Assistir filmes,
seriados e até notícias em inglês é uma ótima maneira de aprender
inglês. E você pode configurar o nível do inglês que você quer
praticar. Iniciante pode colocar o audio em inglês e a legenda em
português ou o contrário. Intermediário pode colocar o audio em inglês e
a legenda também em inglês. E avançado ou fluente pode colocar o audio
em inglês sem legendas.&lt;/p&gt;
&lt;p&gt;O legal dos filmes e seriados é que são diálogos mais curtos e a parte
visual ajuda a compreender o contexto. Para aprender inglês você pode
ver o mesmo filme ou capítulo do seriado várias vezes.&lt;/p&gt;
&lt;h3&gt;Dica 5: Aprenda inglês com músicas!&lt;/h3&gt;
&lt;p&gt;&lt;img alt="escutar
música" class="alignright" src="/images/quer-ser-programador-aprenda-ingles/escutar-música-150x150.jpg"&gt;
Se você gosta de música, por que não usar música para aprender inglês? O legal
das músicas é que escutamos várias vezes e quando a gente aprende as
expressões e vocabulário elas ficam bem mais interessantes. Melhor ainda
é cantar as músicas pra praticar a fala.&lt;/p&gt;
&lt;p&gt;Então, pegue as suas músicas preferidas em inglês, leia a letra,
entenda o significado, escute a música lendo a letra, cante e decore a
música.&lt;/p&gt;
&lt;h2&gt;O inglês na vida do programador&lt;/h2&gt;
&lt;p&gt;Aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; eu procuro facilitar a vida de quem
nunca programou, inclusive escrevendo algoritmos e exemplos em português
usando o
&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank"&gt;Visualg&lt;/a&gt;&lt;/strong&gt;.
Mas você precisa saber e aceitar a verdade: pra ter uma carreira de
sucesso como desenvolvedor de softwares você precisa saber inglês!&lt;/p&gt;
&lt;p&gt;Todas as linguagens de programação profissionais são em inglês. As
ferramentas que nós, programadores, usamos são em inglês. Os projetos
&lt;strong&gt;opensource&lt;/strong&gt; que estão no &lt;strong&gt;&lt;a href="http://github.com" target="_blank"&gt;github&lt;/a&gt;&lt;/strong&gt; (inglês),
que podem ser usados para aprender programação, para criar um portfólio
de colaboração e ser contratado por grandes empresas (apple, google,
microsoft, etc.), são em inglês. Os erros que você recebe na hora de
programar, são em inglês. As respostas para estes erros, se você não
conseguir sozinho, estão na internet pois provavelmente alguém já passou
pelo mesmo problema, mas está em inglês.&lt;/p&gt;
&lt;p&gt;Isso é muito sério! Saber lógica de programação é básico e inglês
também, embora saber inglês não seja um pré-requisito. Você pode começar
a aprender programação sem saber inglês (eu sou prova disso), mas se
quer a melhor dica que eu poderia dar neste blog: &lt;strong&gt;aprenda inglês&lt;/strong&gt;,
crie motivos e uma rotina para aprender inglês. Sem inglês a sua
carreira não vai chegar a lugar algum.&lt;/p&gt;
&lt;p&gt;Acredito que você já esteja convencido que precisa aprender e praticar
inglês. Dei algumas dicas, mas é você a parte principal deste processo,
se você não tiver paixão o suficiente pela sua carreira e não &lt;del&gt;abraçar o seu filho&lt;/del&gt; criar motivos para &lt;strong&gt;viver inglês no seu dia a dia&lt;/strong&gt; peço
que invista seu tempo em outra carreira.&lt;/p&gt;
&lt;p&gt;E aí? Qual tática você usa para aprender/praticar inglês na sua rotina?
Comente aí em baixo!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Qual a diferênça entre View e Materialized View?</title><link href="https://dicasdeprogramacao.com.br/qual-a-diferenca-entre-view-e-materialized-view/" rel="alternate"></link><published>2015-08-20T08:59:00-03:00</published><updated>2015-08-20T08:59:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-08-20:/qual-a-diferenca-entre-view-e-materialized-view/</id><summary type="html">&lt;p&gt;Quando se trabalha com banco de dados podemos dizer que uma das tarefas
mais importantes a ser realizada é a otimização do desempenho do banco de
dados.&lt;/p&gt;
&lt;p&gt;Dependendo da aplicação, uma determinada tabela deve ser otimizada para
receber muitas consultas …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quando se trabalha com banco de dados podemos dizer que uma das tarefas
mais importantes a ser realizada é a otimização do desempenho do banco de
dados.&lt;/p&gt;
&lt;p&gt;Dependendo da aplicação, uma determinada tabela deve ser otimizada para
receber muitas consultas e poucas atualizações. Algumas vezes é o
contrário, muitas atualizações na tabela, mas poucas consultas.&lt;/p&gt;
&lt;p&gt;Neste post você vai entender um conceito que deve ser claro para você
quando for decidir se pretende priorizar a escrita ou a leitura de uma
tabela ou "visão". Você vai entender a diferença entre uma &lt;em&gt;VIEW&lt;/em&gt; e uma
&lt;em&gt;MATERIALIZED VIEW&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="view ou materialized
view" class="aligncenter" src="/images/qual-a-diferenca-entre-view-e-materialized-view/view-ou-materialized-view.png"&gt;&lt;/p&gt;
&lt;p&gt;Antes de falar sobre as diferenças entre esses dois tipos de objetos de
banco de dados, é importante definir o que é uma &lt;em&gt;VIEW&lt;/em&gt; ou &lt;em&gt;visão&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;O que é uma &lt;em&gt;VIEW&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;Uma &lt;em&gt;VIEW&lt;/em&gt; (ou Visão) é uma consulta armazenada no banco de dados. Nós
podemos, realizar consultas sobre uma &lt;em&gt;VIEW&lt;/em&gt; como se fosse uma
tabela. Muitas pessoas se referem às &lt;em&gt;VIEWs&lt;/em&gt; como uma &lt;em&gt;tabela virtual&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Uma das principais funções da VIEW é controlar a segurança do banco de
dados. Geralmente se cria a VIEW (uma consulta armazenada no banco de
dados) com os campos que determinado perfil de usuário pode acessar, e
concede-se ao usuário acesso apenas a essa VIEW e não à(s) tabela(s)
diretamente.&lt;/p&gt;
&lt;p&gt;Também utiliza-se VIEWs para apresentar informações mais organizadas
para o usuário sem que ele precise elaborar uma consulta complexa. Esta
já estaria pronta e armazenada no próprio banco de dados para uso.&lt;/p&gt;
&lt;p&gt;Para entender o que é uma VIEW na prática, imagine as duas tabelas
abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tabela
Funcionário" class="aligncenter" src="/images/qual-a-diferenca-entre-view-e-materialized-view/Tabela-Funcionário.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tabela
departamento" class="aligncenter" src="/images/qual-a-diferenca-entre-view-e-materialized-view/Tabela-departamento.png"&gt;&lt;/p&gt;
&lt;p&gt;Agora considere que um determinado usuário precisa de uma lista
atualizada de Funcionários e seus respectivos departamentos. Por
questões de segurança, não pode ser fornecido à este usuário informações
de CPF, E-mail e Salário dos funcionários.&lt;/p&gt;
&lt;p&gt;A melhor forma para se fazer isso é criar uma VIEW onde essas
informações não apareçam e fornecer ao usuário acesso apenas a esta
VIEW. Ou seja, o usuário só teria acesso visão conforme a imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="VIEW
Funcionário-Departamento" src="/images/qual-a-diferenca-entre-view-e-materialized-view/VIEW-Funcionário-Departamento.png"&gt;{.aligncenter
.size-full .wp-image-2244 width="298" height="106"}&lt;/p&gt;
&lt;p&gt;A consulta desta view poderia ser a seguinte:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SELECT F.NOME AS FUNCIONARIO, D.NOME AS DEPARTAMENTO from FUNCIONARIO
F INNER JOIN DEPARTAMENTO D ON D.ID_DEPARTAMENTO = F.ID_DEPARTAMENTO&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mas na realidade, a VIEW realiza uma consulta (query) em tempo de
execução. Em uma VIEW simples essa consulta que é armazenada. Essa
consulta pode ter condições próprias para restringir os dados que
serão visualizados pelo usuário, tanto horizontal (colunas que serão
apresentadas) quanto vertical (linhas que serão apresentadas).&lt;/p&gt;
&lt;p&gt;Por exemplo, se no mesmo caso acima, além de não apresentar cpf, e-mail
e salário, quiséssemos também retirar os funcionários do departamento
"Recursos Humanos" da "visão" do usuário, bastaria colocar uma
condição na cláusula "WHERE" da view (&lt;em&gt;where id_departamento &amp;lt;&amp;gt;
2&lt;/em&gt;). O usuário nem saberia disso.&lt;/p&gt;
&lt;p&gt;Acho que já deu pra entender o que é uma VIEW: &lt;strong&gt;Uma consulta
armazenada, uma tabela "virtual".&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Qualquer dúvida deixe um comentário no final do post.&lt;/p&gt;
&lt;p&gt;Agora vamos ver ...&lt;/p&gt;
&lt;h2&gt;O que é uma &lt;em&gt;MATERIALIZED VIEW&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Visão Materializada&lt;/strong&gt; é uma view, só que neste caso, o que é
armazenado não é a consulta e sim o resultado dela.&lt;/p&gt;
&lt;p&gt;Isso implica algumas coisas muito importantes que devem ser entendidas
quando for decidir entre criar uma VIEW ou uma MATERIALIZED VIEW.&lt;/p&gt;
&lt;p&gt;Primeiro, uma MATERIALIZED VIEW é uma tabela real no banco de dados que
é atualizada SEMPRE que ocorrer uma atualização em alguma tabela usada
pela sua consulta. Por este motivo, no momento em que o usuário faz uma
consulta nesta visão materializada o resultado será mais rápido que se
ela não fosse materializada.&lt;/p&gt;
&lt;p&gt;Basicamente a diferença no uso das duas é essa. A &lt;em&gt;&lt;span
style="text-decoration: underline;"&gt;view&lt;/span&gt;&lt;/em&gt; realiza &lt;span
style="text-decoration: underline;"&gt;a consulta&lt;/span&gt; no momento que o
usuário faz uma consulta nela e a &lt;em&gt;materialized view&lt;/em&gt; realiza &lt;span
style="text-decoration: underline;"&gt;a consulta&lt;/span&gt; no momento em que
uma das tabelas consultadas é atualizada.&lt;/p&gt;
&lt;p&gt;Vejamos como seria na prática com o mesmo exemplo que utilizamos acima.&lt;/p&gt;
&lt;p&gt;Se a &lt;em&gt;view&lt;/em&gt; V_FUNCIONARIO_DEPARTAMENTO for materializada, sempre que a
tabela &lt;span style="text-decoration: underline;"&gt;departamento&lt;/span&gt; ou
a tabela &lt;span
style="text-decoration: underline;"&gt;funcionário&lt;/span&gt; receber uma
inclusão, alteração ou exclusão, a "consulta da view" também será
executada e o resultado será armazenado.&lt;/p&gt;
&lt;p&gt;Embora a consulta na &lt;em&gt;view&lt;/em&gt; fique mais rápida com o pre-processamento da
consulta interna, o processo de escrita no banco de dados fica mais
lento, pois é necessário executar a consulta interna da &lt;em&gt;materialized
view&lt;/em&gt; toda vez que um dado sofrer alteração.&lt;/p&gt;
&lt;h2&gt;Quando usar &lt;em&gt;VIEW&lt;/em&gt; ou &lt;em&gt;MATERIALIZED VIEW&lt;/em&gt;?&lt;/h2&gt;
&lt;p&gt;A decisão se a sua &lt;em&gt;view&lt;/em&gt; deve ser simples ou materializada é tomada com
base no tipo de utilização das tabelas usadas pela consulta da &lt;em&gt;view&lt;/em&gt;. A
decisão é simples. Você consulta mais na view do que altera os dados das
tabelas? Os dados do seu banco de dados são alterados com frequência?&lt;/p&gt;
&lt;p&gt;Em resumo, você deve usar uma &lt;em&gt;visão materializada&lt;/em&gt; quando &lt;strong&gt;o
desempenho das buscas na view é mais importante que o desempenho da
escrita nas tabelas que ela utiliza&lt;/strong&gt;. Mas se uma tabela utilizada pela
&lt;em&gt;view&lt;/em&gt; tem muita alteração de dados, talvez seja mais interessante que a
&lt;em&gt;view&lt;/em&gt; não seja materializada.&lt;/p&gt;
&lt;p&gt;Estamos entendidos? Quando for criar a próxima view você já sabe se ela
deve ser materializada ou não.&lt;/p&gt;
&lt;p&gt;Deixe um comentário se tiver dúvida.&lt;/p&gt;</content><category term="Banco de dados"></category></entry><entry><title>Uhul! O Visualg continua ... Conheça a versão 3.0!</title><link href="https://dicasdeprogramacao.com.br/uhul-o-visualg-continua-conheca-a-versao-3-0/" rel="alternate"></link><published>2015-08-03T00:00:00-03:00</published><updated>2015-08-03T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-08-03:/uhul-o-visualg-continua-conheca-a-versao-3-0/</id><summary type="html">&lt;p&gt;Uma das maiores dificuldades de quem está começando neste mundo do
desenvolvimento de softwares é aprender lógica de programação. Outro
grande vilão da maioria dos iniciantes é o &lt;strong&gt;inglês&lt;/strong&gt;. Sim, embora hoje
em dia inglês seja essencial para a maioria …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Uma das maiores dificuldades de quem está começando neste mundo do
desenvolvimento de softwares é aprender lógica de programação. Outro
grande vilão da maioria dos iniciantes é o &lt;strong&gt;inglês&lt;/strong&gt;. Sim, embora hoje
em dia inglês seja essencial para a maioria das atividades que queremos
desempenhar, muita gente ainda não domina este idioma. O Visualg é o
grande aliado deste iniciante em programação que não sabe inglês.&lt;/p&gt;
&lt;p&gt;Um dos primeiros artigos deste blog foi sobre o Visualg, que à época
ainda estava na versão 2.5. Nesse artigo eu falo sobre a importância do
iniciante começar com uma linguagem de programação mais didática, pois o
objetivo deve ser entender lógica de programação antes de aprender
particularidades das linguagens de programação "profissionais". No
artigo também mostro como instalar o &lt;strong&gt;Visualg&lt;/strong&gt; e criar o seu primeiro
programa. Você pode lê-lo clicando no link abaixo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank"&gt;Quer aprender programação? Saiba qual a melhor
linguagem!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Infelizmente o professor &lt;strong&gt;Cláudio Morgado de&lt;/strong&gt; &lt;strong&gt;Souza&lt;/strong&gt; criador do
Visualg parou de dar suporte ao programa por motivos pessoais e o
Visualg ficou um tempo sem novas atualizações. Mas mesmo assim o Visualg
continuou sendo o software preferido dos iniciantes em programação.
Inclusive a maioria dos exemplos de lógica de programação que dou nos
meus &lt;a href="https://dicasdeprogramacao.com.br/categoria/iniciante-em-programacao/" ttarget="_blank"&gt;artigos para
iniciantes&lt;/a&gt; foram
criados no Visualg.&lt;/p&gt;
&lt;h2&gt;O Visualg não morreu!&lt;/h2&gt;
&lt;p&gt;Felizmente, o professor &lt;strong&gt;Antonio Carlos Nicolodi&lt;/strong&gt; tomou a iniciativa
de continuar o projeto. Ele contatou o professor Cláudio e recebeu
autorização e o código-fonte dele pra dar continuidade ao Visualg.&lt;/p&gt;
&lt;p&gt;Você pode baixar o Visualg 3.0 no link:
&amp;gt;&amp;gt; &lt;strong&gt;&lt;a href="http://sourceforge.net/projects/visualg30/"&gt;http://sourceforge.net/projects/visualg30/&lt;/a&gt; &amp;lt;&amp;lt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Eu, particularmente, fiquei extremamente feliz em saber que o
Visualg não morreu, pois sei que este programa é um grande aliado dos
iniciantes em programação.&lt;/p&gt;
&lt;h2&gt;Novidades do Visualg 3.0&lt;/h2&gt;
&lt;p&gt;Nesta "primeira" nova versão, foram acrescentados um novo layout e um
design mais amigável, além de novos comandos, funcionalidades e
facilidades.&lt;/p&gt;
&lt;p&gt;O coração do Visualg continua o mesmo, mas agora tem uma roupagem
diferente. Podemos ver de forma mais intuitiva a execução do programa e
o valor das variáveis em cada passo da execução do algoritmo. Isso é
muito importante para o aluno entender o funcionamento dos algoritmos.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Visualg
3.0" class="aligncenter" src="/images/uhul-o-visualg-continua-conheca-a-versao-3-0/Visualg-3.0.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Além dessa re-estruturação do layout, o Visualg 3.0 também possui novos
"skins" como podemos ver nas imagens abaixo,novos comandos e também
algumas facilidades novas como reconhecer comandos em português correto!
( PARA ... FAÇA, SE .. ENTÃO .. SENÃO) e o operador lógico NÃO, mas em
maiúsculo e os comandos antigos ainda são reconhecidos para manter a
compatibilidade.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Visualg - Skin
madeira" class="aligncenter" src="/images/uhul-o-visualg-continua-conheca-a-versao-3-0/visualg_madeira-300.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Visualg - Skin
água" class="aligncenter" src="/images/uhul-o-visualg-continua-conheca-a-versao-3-0/visualg_agua-300.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Visualg - Skin
alumínio" class="aligncenter" src="/images/uhul-o-visualg-continua-conheca-a-versao-3-0/visualg_aluminio-300.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Visualg - Skin
plástico" class="aligncenter" src="/images/uhul-o-visualg-continua-conheca-a-versao-3-0/visualg_plastico-300.png"&gt;&lt;/p&gt;
&lt;p&gt;Por enquanto, estas são as novidades do Visualg. Tenho certeza que o
professor Antônio vai cuidar com muito carinho do Visualg e ajudar a
evoluir esta ferramenta que é a queridinha de todos os aspirantes em
programação!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;gt;&amp;gt;&lt;a href="http://sourceforge.net/projects/visualg30/"&gt;Baixe agora o Visualg
3.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vida longa ao Visualg!&lt;/strong&gt;&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>6 motivos para usar bancos de dados NoSQL</title><link href="https://dicasdeprogramacao.com.br/6-motivos-para-usar-bancos-de-dados-nosql/" rel="alternate"></link><published>2015-06-10T00:00:00-03:00</published><updated>2015-06-10T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-06-10:/6-motivos-para-usar-bancos-de-dados-nosql/</id><summary type="html">&lt;p&gt;Você deve imaginar a velocidade em que a Web está crescendo hoje em dia.
O crescimento contínuo de dispositivos conectados a internet é
surpreendente. A &lt;strong&gt;Internet das Coisas&lt;/strong&gt; já é realidade, onde tudo pode
estar conectado à rede.&lt;/p&gt;
&lt;p&gt;E a …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Você deve imaginar a velocidade em que a Web está crescendo hoje em dia.
O crescimento contínuo de dispositivos conectados a internet é
surpreendente. A &lt;strong&gt;Internet das Coisas&lt;/strong&gt; já é realidade, onde tudo pode
estar conectado à rede.&lt;/p&gt;
&lt;p&gt;E a quantidade de dados gerados a todo momento é algo gigantesco. Em
todos os setores, imagina a quantidade de transações que acontecem o
tempo inteiro em bancos de dados do mundo inteiro. Pra você ter uma
ideia, um Boeing 737 gera &lt;strong&gt;240 terabytes&lt;/strong&gt; de dados por voo nos EUA.
Imagina a quantidade de posts no Facebook ou Twitter a cada segundo? Na
telefonia, ligações, mensagens, etc. Geramos MUITOS dados a cada segundo
que passa. Estamos na Era do &lt;strong&gt;Big Data&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/" target="_blank"&gt;&amp;gt;&amp;gt; O que é um Banco de
Dados?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank"&gt;&amp;gt;&amp;gt; O que é um
SGBD?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/a-historia-dos-bancos-de-dados/" target="_blank"&gt;&amp;gt;&amp;gt; A história dos bancos de
dados&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para utilizarmos todos esses dados que geramos a todo momento, e extrair
informações, é necessário ferramentas especiais. Dentre todas
as ferramentas, desde ferramentas para armazenamento, extração, análise,
formatação, etc. Começamos pela forma como armazenamos essa grande
quantidades de dados. É aí que entra o &lt;strong&gt;NoSQL&lt;/strong&gt;!&lt;/p&gt;
&lt;h2&gt;O que é NoSQL?&lt;/h2&gt;
&lt;p&gt;&lt;img alt="NoSQL" class="alignright" src="/images/6-motivos-para-usar-bancos-de-dados-nosql/NoSQL.png"&gt;&lt;/p&gt;
&lt;p&gt;O constante crescimento da tecnologia em geral, tem feito os
desenvolvedores reavaliarem como eles armazenam e mantém esses dados. Os
bancos de dados precisam prover escalabilidade, flexibilidades,
segurança e eficiência para o massivo fluxo de dados que vivemos.&lt;/p&gt;
&lt;p&gt;Desenvolvedores especialistas analisam a dificuldade, às vezes a
impossibilidade, de utilizar modelos relacionais para armazenar todos
esses dados mantendo uma escalabilidade dinâmica e a
performance necessária com o aumento dos dados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-sql/" target="_blank"&gt;&amp;gt;&amp;gt; Você precisa saber o que é
SQL!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O NoSQL, que a propósito significa &lt;em&gt;Not Only SQL&lt;/em&gt; (Não apenas SQL),
nasceu com o propósito de ser o banco de dados para os &lt;strong&gt;super-dados&lt;/strong&gt;
do boom da internet. Devido à flexibilidade oferecida por esse modelo
muitos estão optando pelo NoSQL. Não é a toa que o &lt;a href="http://www.marketresearchmedia.com/?p=568" target="_blank"&gt;mercado global NoSQL
tem previsão de chegar a US \$ 3,4 bilhões em
2020&lt;/a&gt;, uma taxa de
crescimento anual de 21% para o período 2015-2020.&lt;/p&gt;
&lt;p&gt;O termo NoSQL é usado simplesmente para descrever uma família de bancos
de dados que não são relacionais, podendo variar em vários pontos entre
eles. No geral, existem 4 tipos de bancos de dados NoSQL, são eles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chave-Valor&lt;/strong&gt;: Armazena dados no padrão chave-valor, como
    tabelas hash. Ex. MemcacheD, Riak, REDIS;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafos&lt;/strong&gt;: Armazena dados na forma de grafo (vértices
    e arestas). Ex. Sesame, Neo4j;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Colunas&lt;/strong&gt;: Armazena dados em linhas particulares de tabela
    no disco. Ex. Cassandra, Hbase;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documento&lt;/strong&gt;: Armazena os dados como "documentos", onde um
    documento pode ser um dado aninhado em formato chave-valor (por
    exemplo o padrão JSON). Ex. MongoDB, CouchDB.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="exemplos-nosql" class="aligncenter" src="/images/6-motivos-para-usar-bancos-de-dados-nosql/exemplos-nosql.gif"&gt;&lt;/p&gt;
&lt;p&gt;Embora os diferentes tipos de bancos de dados NoSQL tenham diferenças
entre si, todos eles têm as mesmas premissas. Abaixo descrevo &lt;strong&gt;6
motivos para usar NoSQL&lt;/strong&gt; que se aplicam a &lt;span
style="text-decoration: underline;"&gt;qualquer tipo de banco de dados
NoSQL&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;1. Flexibilidade&lt;/h2&gt;
&lt;p&gt;Estruturas de dados intuitivas e flexíveis são funcionalidades que mais
atraem desenvolvedores que trabalham em times de desenvolvimento ágil. A
maioria dos bancos de dados NoSQL tem essas qualidades.&lt;/p&gt;
&lt;p&gt;A grande flexibilidade dos bancos de dados NoSQL é muito popular por
suportar as práticas de desenvolvimento ágil, pois elimina a
complexidade de mudanças dos bancos de dados gerando um bom suporte para
adaptações rápidas.&lt;/p&gt;
&lt;h2&gt;2. Escalabilidade&lt;/h2&gt;
&lt;p&gt;A maioria dos bancos de dados NoSQL são construídos para escalar
horizontalmente, distribuindo os dados por clusters melhor que os SGBDs
relacionais, que sofrem muito em performance quando executa consultas
com "joins" em ambientes clusterizados. Como o NoSQL evita "joins"
naturalmente, a performance das consultas permanece alta.&lt;/p&gt;
&lt;p&gt;A escalabilidade NoSQL aplica-se tanto ao crescimento dos dados quanto
ao número de usuários agindo simultaneamente sobre os dados.&lt;/p&gt;
&lt;h2&gt;3. Disponibilidade&lt;/h2&gt;
&lt;p&gt;A indisponibilidade de um banco de dados pode causar sérios prejuízos,
incluindo perda de clientes. A maioria dos bancos de dados NoSQL
oferecem eficientes arquiteturas de replicação de dados que proporciona
aos NoSQLs maior disponibilidade. Ou seja, se um ou mais servidores (ou
nós) cai um outro nó do cluster está apto a continuar o trabalho
automaticamente sem perda de dados.&lt;/p&gt;
&lt;h2&gt;4. Raízes open source&lt;/h2&gt;
&lt;p&gt;Muitos bancos de dados NoSQL tem raízes na comunidade open
source. Talvez isso tenha sido fundamental para o rápido crescimento do
seu uso e popularidade. Nota-se que as companhias que oferecem versões
comerciais de bancos NoSQL com uma forte estrutura de suporte e
serviços, estão ao mesmo tempo participando direta ou indiretamente de
comunidades de bancos de dados NoSQL open source. Exemplos são
Apache-&amp;gt;Cassandra, IBM-&amp;gt;CouchDB, MongoDB-&amp;gt;MongoDB open source,
entre outros.&lt;/p&gt;
&lt;h2&gt;5. Baixo custo operacional&lt;/h2&gt;
&lt;p&gt;Devido ao peso do &lt;strong&gt;open source&lt;/strong&gt; no NoSQL, o custo para iniciar a
utilização desses bancos de dados também se torna muito baixo ou zero. É
comum ouvir dizerem que a transição &lt;strong&gt;relacional -&amp;gt; NoSQL&lt;/strong&gt; diminuiu
muito os custos enquanto obteve um desempenho melhor ou igual ao
anterior.&lt;/p&gt;
&lt;p&gt;Grandes bancos de dados relacionais requerem computadores ou mainframes
caros. Com o NoSQL, esse custo também diminui, pois este foi
desenvolvido para trabalhar em ambientes distribuídos.&lt;/p&gt;
&lt;h2&gt;6. Funcionalidades especiais&lt;/h2&gt;
&lt;p&gt;Também com o peso do &lt;strong&gt;open source&lt;/strong&gt; sobre o NoSQL, muitos
distribuidores de bancos de dados NoSQL oferecem algumas funcionalidades
especiais para incentivar e atrair mais usuários. Índices específicos,
capacidade de consulta de dados geoespaciais, replicação automática de
dados, funcionalidades para sincronização, APIs RESTful são exemplos de
funcionalidades especiais oferecidas pelos diferentes distribuidores
NoSQL.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Na hora de escolher o banco de dados que você vai utilizar na sua
próxima aplicação, considere usar um banco de dados NoSQL. Não é atoa
que a popularidade do NoSQL cresceu tão rápido nos últimos anos.&lt;/p&gt;
&lt;p&gt;Além de optar pela utilização de um NoSQL, há uma grande variedade de
bancos de dados NoSQL com diferentes funcionalidades que podem lhe
ser muito útil durante o desenvolvimento.&lt;/p&gt;
&lt;p&gt;Uma coisa é certa: se você pretende desenvolver um software que vai
crescer (escalar) MUITO, a melhor alternativa é um NoSQL.&lt;/p&gt;</content><category term="Banco de dados"></category></entry><entry><title>O mínimo de HTML que você TEM que saber!</title><link href="https://dicasdeprogramacao.com.br/o-minimo-de-html-que-voce-tem-que-saber/" rel="alternate"></link><published>2015-05-25T00:00:00-03:00</published><updated>2015-05-25T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-05-25:/o-minimo-de-html-que-voce-tem-que-saber/</id><summary type="html">&lt;p&gt;O mundo está cada vez mais tecnológico e entender as coisas básicas de
tecnologia que usamos é uma questão de alfabetização. Sim, a nova
alfabetização!&lt;/p&gt;
&lt;p&gt;As pessoas usam a internet, mas muitos não fazem ideia de como as coisas
funcionam …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O mundo está cada vez mais tecnológico e entender as coisas básicas de
tecnologia que usamos é uma questão de alfabetização. Sim, a nova
alfabetização!&lt;/p&gt;
&lt;p&gt;As pessoas usam a internet, mas muitos não fazem ideia de como as coisas
funcionam para ela poderem consumir este conteúdo na rede. Conhecer os
conceitos básicos da tecnologia é dar os primeiros passos num novo mundo
cheio de oportunidades!&lt;/p&gt;
&lt;p&gt;Neste post quero te apresentar o HTML! A linguagem responsável por te
entregar este texto que você está lendo neste exato momento. E todas as
páginas de internet que você acessa todos os dias.&lt;/p&gt;
&lt;h2&gt;O que é HTML?&lt;/h2&gt;
&lt;p&gt;Quando vemos uma página de internet no navegador, a vemos toda bonitinha
com cores, imagens, textos, links, etc. Mas na verdade, o seu navegador
interpreta um código e apresenta a página para você. Esse código é o
HTML, que significa &lt;em&gt;Linguagem de Marcação de Hiper-Textos&lt;/em&gt; (tradução de
&lt;em&gt;hypertext markup language&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Ao contrário do que muita gente pensa, HTML NÃO é uma linguagem de
programação, o nome já diz: &lt;strong&gt;Linguagem de Marcação&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Mas o que isso significa? Significa que não criamos programas com HTML.&lt;/p&gt;
&lt;p&gt;O HTML é uma linguagem que usa apenas marcadores (ou &lt;em&gt;tags&lt;/em&gt;), para
"configurar" uma página. Por exemplo, podemos dizer que um texto deve
estar em negrito marcando ele com a tag &lt;strong&gt;&amp;lt;b&amp;gt;&lt;/strong&gt;
ou &lt;strong&gt;&amp;lt;strong&amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Se você clicar nesta página com o botão direito do mouse e selecionar
"Exibir código fonte", você verá o código HTML desta página. E se
procurar pelo texto &lt;strong&gt;Linguagem de Marcação&lt;/strong&gt; que está em negrito, verá
que ele estará entre as &lt;em&gt;tags&lt;/em&gt; &lt;strong&gt;&amp;lt;strong&amp;gt;&amp;lt;/strong&amp;gt;&lt;/strong&gt;. Veja
na imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="exemplo de código
html" class="aligncenter" src="/images/o-minimo-de-html-que-voce-tem-que-saber/strong.png"&gt;&lt;/p&gt;
&lt;p&gt;Acho que você notou outras &lt;em&gt;tags&lt;/em&gt; no código-fonte acima. Certo? Uma
tag &lt;strong&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/strong&gt; que marca um &lt;em&gt;parágrafo&lt;/em&gt; e outra
tag &lt;strong&gt;&amp;lt;em&amp;gt;&amp;lt;/em&amp;gt;&lt;/strong&gt; que marca um texto a ser &lt;em&gt;enfatizado&lt;/em&gt;. O
HTML é formado por estas &lt;em&gt;tags&lt;/em&gt;, que &lt;em&gt;marcam&lt;/em&gt; o texto.&lt;/p&gt;
&lt;p&gt;Vamos avançar um pouquinho mais? Vamos criar uma página web ...&lt;/p&gt;
&lt;h2&gt;Criando uma página HTML simples&lt;/h2&gt;
&lt;p&gt;Um código simples ajudará a gente entender os conceitos básicos de HTML,
acho mais fácil entender na prática. Abaixo eu apresento um código HTML.
Você pode copiar esse código, salvar em um arquivo com a extensão
".html" e abri-lo num navegador.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Título&lt;span class="w"&gt; &lt;/span&gt;da&lt;span class="w"&gt; &lt;/span&gt;página&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;bgcolor=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;gray&amp;#39;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;Primeira&lt;span class="w"&gt; &lt;/span&gt;página&lt;span class="w"&gt; &lt;/span&gt;HTML

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;quot;cores&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;rgb&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cores rgb&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.dicasdeprogramacao.com.br/images/o-minimo-de-html-que-voce-tem-que-saber/cores-rgb.jpg&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.dicasdeprogramacao.com.br/&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Clique&lt;span class="w"&gt; &lt;/span&gt;aqui&lt;span class="w"&gt; &lt;/span&gt;para&lt;span class="w"&gt; &lt;/span&gt;acessar&lt;span class="w"&gt; &lt;/span&gt;o&lt;span class="w"&gt; &lt;/span&gt;blog&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;Dicas&lt;span class="w"&gt; &lt;/span&gt;de&lt;span class="w"&gt; &lt;/span&gt;Programação&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Agora vamos entender este código e aprender os conceitos básicos de HTML
...&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Podemos ver no código HTML acima que ele é formado por &lt;em&gt;tags&lt;/em&gt; (o
    texto entre os sinais de menor e maior "&amp;lt; e &amp;gt;"). Essas tags,
    abrem um "bloco" que deve ser fechado. Para fechar uma tag,
    utiliza-se a barra logo depois do símbolo de menor. Por exemplo,
    abrimos a tag &amp;lt;title&amp;gt; e fechamos ela dessa
    forma: &amp;lt;/title&amp;gt;.&lt;/li&gt;
&lt;li&gt;O texto que fica dentro da tag &amp;lt;title&amp;gt; é o texto que aparece
    na barra de títulos do navegador.&lt;/li&gt;
&lt;li&gt;O texto que fica entre a &lt;em&gt;tag&lt;/em&gt; de abertura e a &lt;em&gt;tag&lt;/em&gt; de fechamento é
    conhecido como "valor de corpo da tag"&lt;/li&gt;
&lt;li&gt;As tags HTML pode ser aninhadas, ou seja, uma dentro da outra
    (Perceba que a tag &amp;lt;title&amp;gt; está dentro da tag &amp;lt;head&amp;gt;,
    que por sua vez está dentro da tag &amp;lt;html&amp;gt;).&lt;/li&gt;
&lt;li&gt;Um HTML básico é formado pela tag &amp;lt;html&amp;gt; e dentro desta, as
    tags &amp;lt;head&amp;gt; (cabeçalho) e &amp;lt;body&amp;gt; (corpo).&lt;/li&gt;
&lt;li&gt;Tudo que fica dentro da tag &amp;lt;body&amp;gt; é o corpo da sua página.&lt;/li&gt;
&lt;li&gt;As tags podem ter atributos, por exemplo o atributo bgcolor da tag
    &amp;lt;body&amp;gt; define a cor de fundo da página. No exemplo definimos
    as cor de fundo como 'gray' (cinza). Pode-se também utilizar
    &lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/entenda-como-funcionam-os-codigos-de-cores-rgb/"&gt;códigos
    RGB&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Algumas tags não precisam de &lt;em&gt;valor de corpo&lt;/em&gt; e em HTML puro, não
    precisam ser fechadas, como a tag &amp;lt;br&amp;gt; (quebra de linha). Mas
    para compatibilizar com XML, é correto fechar todas as tags. Nesse
    caso, você não precisa fechar a tag do modo convencional (por
    exemplo &lt;strong&gt;&amp;lt;br&amp;gt;&amp;lt;/br&amp;gt;&lt;/strong&gt;). Pode simplesmente fechar com uma
    barra ao final da tag de abertura. Assim: &lt;strong&gt;&amp;lt;br /&amp;gt;&lt;/strong&gt;. O mesmo
    pode ser observado na tag &amp;lt;img&amp;gt;.&lt;/li&gt;
&lt;li&gt;As imagens que vemos em uma página web são definidas pela tag
    &amp;lt;img&amp;gt; do HTML. Os atributos que mais utilizamos desta tag são
    src (que determina o endereço da imagem a ser exibida), &lt;em&gt;title&lt;/em&gt; e
    &lt;em&gt;alt&lt;/em&gt; (que definem o texto exibido quando colocamos o cursor do
    mouse em cima da imagem). Dica: Os atributos &lt;em&gt;title&lt;/em&gt; e &lt;em&gt;alt&lt;/em&gt; são
    muito importantes para o SEO (Otimização para mecanismos de busca)
    da sua página. ;)\
    Exemplo do código de uma imagem HTML: &amp;lt;img title="cores rgb"
    alt="cores rgb"
    src="&lt;a href="http://www.dicasdeprogramacao.com.br/images/o-minimo-de-html-que-voce-tem-que-saber/cores-rgb.jpg"&gt;http://www.dicasdeprogramacao.com.br/images/o-minimo-de-html-que-voce-tem-que-saber/cores-rgb.jpg&lt;/a&gt;" /&amp;gt;&lt;/li&gt;
&lt;li&gt;Os links das páginas web são criados pela tag &amp;lt;a&amp;gt;. O atributo
    mais importante dos links é o href que é o endereço do link. O texto
    que aparece dentro da tag de link (entre a abertura &amp;lt;a&amp;gt; e o
    fechamento &amp;lt;/a&amp;gt;) é conhecido como "texto âncora". Este texto
    também é muito importante para o SEO.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Não dá pra falar tudo sobre HTML em um único post, mas pra começar a
entender como funcionam as páginas da internet. Os conceitos básicos de
HTML apresentados acima é o mínimo que qualquer um deve saber sobre as
páginas Web que você acessa todos os dias. Se você em ter um blog por
exemplo, saber um pouquinho de HTML te ajudará muito!&lt;/p&gt;
&lt;p&gt;Claro que tem muito mais. Criação de tabelas, divs, formatação com CSS,
adição de javascript, páginas dinâmicas, etc. HTML é só o começo. Não
pare por aqui!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Como descobrir o primeiro e o último dia do mês em C#</title><link href="https://dicasdeprogramacao.com.br/como-descobrir-o-primeiro-e-o-ultimo-dia-do-mes-em-c/" rel="alternate"></link><published>2015-03-26T00:00:00-03:00</published><updated>2015-03-26T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-03-26:/como-descobrir-o-primeiro-e-o-ultimo-dia-do-mes-em-c/</id><summary type="html">&lt;p&gt;Criar uma data em C# com o primeiro dia do mês é simples, mas muita
gente tem dúvida na hora de criar uma data com o último dia do mês, pois
depende do mês. Logo pensam em toda uma lógica …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Criar uma data em C# com o primeiro dia do mês é simples, mas muita
gente tem dúvida na hora de criar uma data com o último dia do mês, pois
depende do mês. Logo pensam em toda uma lógica, com Switch-case, etc.
Mas em C# isso é bem fácil. Vejamos ...&lt;/p&gt;
&lt;p&gt;Se você tem uma data e deseja criar uma outra data para o &lt;span
style="text-decoration: underline;"&gt;primeiro dia do mês&lt;/span&gt;, basta
criar um novo DateTime com o dia 1 usando o mês e o ano da primeira
data. Veja no código abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;//Vamos considerar que a data seja o dia de hoje, mas pode ser qualquer data.&lt;/span&gt;
&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Today&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;//DateTime com o primeiro dia do mês&lt;/span&gt;
&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;primeiroDiaDoMes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Já pra criar um DateTime com o último dia do mês em C# temos que saber
quantos dias tem no mês, para isso existe um método estático da struct
DateTime que resolve esse problema.&lt;/p&gt;
&lt;p&gt;&lt;span class="wrap:true lang:default decode:true crayon-inline"&gt;public
static int DaysInMonth(int year, int month);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Perceba que este método recebe o ano e mês como parâmetros e retorna a
quantidade de dias daquele mês.&lt;/p&gt;
&lt;p&gt;Considerando a mesma variável &lt;em&gt;data&lt;/em&gt; do código anterior, o código abaixo
mostra como criar o DateTime com o &lt;span
style="text-decoration: underline;"&gt;último dia do mês&lt;/span&gt; corrente.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;//DateTime com o último dia do mês&lt;/span&gt;
&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ultimoDiaDoMes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DaysInMonth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Month&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Essa é uma dica rápida do &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;. Se ficou com
dúvida, pode perguntar nos comentários aí em baixo.&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="{ Dicas Rápidas }"></category></entry><entry><title>A primeira fase de um projeto de banco de dados</title><link href="https://dicasdeprogramacao.com.br/a-primeira-fase-de-um-projeto-de-banco-de-dados/" rel="alternate"></link><published>2015-03-18T00:00:00-03:00</published><updated>2015-03-18T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-03-18:/a-primeira-fase-de-um-projeto-de-banco-de-dados/</id><summary type="html">&lt;p&gt;O projeto de banco de dados é, geralmente, uma das partes mais
importantes no desenvolvimento de um novo software. Claro que existem
softwares que nem usam bancos de dados, mas a grande maioria dos
sistemas de informação consulta ou mantém …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O projeto de banco de dados é, geralmente, uma das partes mais
importantes no desenvolvimento de um novo software. Claro que existem
softwares que nem usam bancos de dados, mas a grande maioria dos
sistemas de informação consulta ou mantém dados armazenados em um banco
de dados, por este motivo entender como um banco de dados é projetado e
também saber criar um projeto de banco de dados é essencial na carreira
de qualquer desenvolvedor de software.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/como-criar-um-projeto-de-banco-de-dados/" target="_blank" title="Como criar um projeto de banco de dados"&gt;Já dei uma visão geral sobre projetos de bancos de
dados&lt;/a&gt;
em um artigo anterior. Neste artigo vamos ver, com exemplos
práticos, como executar a primeira fase de um projeto de banco de dados:
&lt;strong&gt;A análise de requisitos&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Primeiro passo&lt;/h2&gt;
&lt;p&gt;A primeira coisa que se deve fazer é reunir dados relevantes para o novo
projeto através de documentos existentes, realização de entrevistas com
especialistas no negócio, etc. Esta etapa é muito importante, pois
quando o projetista entende errado os requisitos, o projeto pode ser um
fracasso. Nesta etapa deve-se gerar uma documentação descritiva, de
forma breve, sem ambiguidades e que descreva bem como as coisas
funcionam na realidade, uma &lt;strong&gt;descrição textual das regras de negócio&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Este texto sucinto que compila o entendimento das regras de negócio é
conhecido como &lt;strong&gt;mini-mundo&lt;/strong&gt;. E é mesmo um mini-mundo, pois é a partir
da descrição das regras de negócio que desenvolvemos os modelos externos
(que são representações gráficas do mini-mundo e devem ser entendíveis
pelo usuário) e estes modelos não devem fugir da realidade descrita nas
regras de negócio.&lt;/p&gt;
&lt;p&gt;&lt;img alt="projeo de banco de
dados" class="aligncenter" src="/images/a-primeira-fase-de-um-projeto-de-banco-de-dados/modelagem-de-banco-de-dados.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;Exemplo de um mini-mundo&lt;/h2&gt;
&lt;p&gt;Vejamos um exemplo de dessa primeira etapa e uma descrição de regras de
negócios para um caso fictício. Vamos tomar por exemplo um consultório
odontológico básico. Para simplificar consideremos que este consultório
é mantido por uma entidade social e não cobra diretamente dos pacientes,
ou seja, no momento do atendimento este consultório apenas atende os
pacientes sem se preocupar com pagamentos.&lt;/p&gt;
&lt;p&gt;Primeiro eu me reuni com os dentistas, a secretária e o dono do
consultório, realizei entrevistas onde fiz algumas perguntas sobre como
é o trabalho deles e o fluxo de trabalho no dia-a-dia do consultório e
fiz cópias de fichas de pacientes e alguns relatórios que a secretária
faz para o dono do consultório semanal e mensalmente. Agora vou redigir
a descrição do mini-mundo deste consultório para entendermos como as
coisas funcionam no atendimento dos pacientes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;No consultório odontológico ‘Dentibão’, situado na rua ‘X’, nº ‘1’ na
cidade ‘Y’, estado de MG (‘Dentibão’ só poderia ser de MG né? rsrs),
as consultas funcionam por ordem de chegada dos pacientes da seguinte
maneira: O paciente, ao chegar no consultório, obtém do atendente uma
senha numérica de ordem crescente e aguarda até o momento de ser
chamado.\
O atendente chama os pacientes pela ordem das senhas. Inicialmente o
atendente solicita o nome do paciente e procura a ficha dele no
arquivo de pacientes (que está em ordem alfabética). Se o paciente
ainda não tiver ficha no consultório, então o atendente solicita os
dados básicos do paciente para criar uma ficha para ele, estes dados
são: CPF, Nome, Data de nascimento, endereço e telefones.\
Com a ficha do paciente em mãos, o atendente pergunta ao paciente o
motivo da consulta, que geralmente é &lt;em&gt;consulta de rotina&lt;/em&gt; ou &lt;em&gt;dor de
dente&lt;/em&gt;. Então o atendente cria uma &lt;span
style="text-decoration: underline;"&gt;ficha de atendimento&lt;/span&gt; com as
informações de motivo da consulta, anexa à ficha do paciente e coloca
em baixo da pilha de fichas para atendimentos do dentista. Neste
momento o atendente diz ao paciente que espere que o dentista o chame,
e finaliza o atendimento.\
O dentista chama os pacientes pela ordem que o atendente organizou a
pilha de fichas, mas antes de chamar cada paciente, o dentista analisa
o histórico de atendimentos do paciente e o motivo que ele (paciente)
descreveu para a consulta atual. Após atender o paciente, o dentista
descreve detalhes do atendimento na ficha de atendimento, como
diagnóstico, receita de remédios, solicitação de retorno, etc.
Finaliza-se a consulta e paciente é liberado.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Modelos Externos&lt;/h2&gt;
&lt;p&gt;Descrevi acima um exemplo básico de descrição de regras de negócio.
Agora vamos criar os primeiros modelos com as entidades e os
relacionamentos desta descrição de mini-mundo. Estes primeiros modelos
são conhecidos como &lt;strong&gt;modelos externos&lt;/strong&gt;, pois devem ser de fácil
entendimento por todos os envolvidos, não apenas os técnicos, ou seja,
no nosso caso o dentista, o atendente, a secretária devem ser capazes de
entender esses modelos e opinar o que condiz ou não com a realidade e o
objetivo do novo banco de dados que está sendo projetado.&lt;/p&gt;
&lt;p&gt;Para criar esses modelos iniciais podemos seguir uma dica simples:
identificar &lt;strong&gt;substantivos&lt;/strong&gt; e &lt;strong&gt;verbos&lt;/strong&gt; potenciais no texto. Os
substantivos podem ser Entidades e os verbos podem ser Relacionamentos.&lt;/p&gt;
&lt;p&gt;Alguns substantivos potenciais para entidades: Paciente, Atendente,
Dentista, Atendimento, Histórico de atendimento, Senha…\
Alguns verbos potenciais para relacionamentos: Obter (Senha), Atender
(atendente atender paciente), Atender (dentista atender paciente),
Analisar (Atendimentos)…&lt;/p&gt;
&lt;p&gt;Nestes modelos vamos adotar a notação mais utilizada para este fim, a
“&lt;a href="http://pt.wikipedia.org/wiki/Modelo_de_entidade_e_relacionamento" target="_blank" title="Modelo de Entidades e Relacionamentos"&gt;Notação de
Chen&lt;/a&gt;”,
também conhecida como MER (Modelo de Entidades e Relacionamentos) ou DER
(Diagrama de Entidades e Relacionamentos). Nesta notação as entidades
são representadas como retângulos e os relacionamentos como
losangos. Vamos criar então, os primeiros modelos baseados na descrição
acima.&lt;/p&gt;
&lt;p&gt;Retorne ao texto do mini-mundo e leia o primeiro parágrafo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="modelo-paciente-senha" class="aligncenter" src="/images/a-primeira-fase-de-um-projeto-de-banco-de-dados/modelo-paciente-senha.png"&gt;&lt;/p&gt;
&lt;p&gt;Acho que esse primeiro modelo tá entendível para uma pessoa leiga, né?
Esse é o objetivo do modelo externo! Dá pra lê-lo como “O atendente
fornece uma senha ao paciente”. Observe onde estão os substantivos e os
verbos. Este modelo representa a primeira etapa do atendimento, quando o
paciente chega ao consultório.&lt;/p&gt;
&lt;p&gt;É importante notar que a ordem do atendimento não é importante para o
modelo desta etapa, pois isso não diz respeito a dados e sim a
lógica. Lembrando que o objetivo aqui é um projeto de banco de dados,
não os requisitos de "funcionamento" de um sistema.&lt;/p&gt;
&lt;p&gt;Vamos fazer mais um modelo para o nosso mini-mundo:&lt;/p&gt;
&lt;p&gt;&lt;img alt="modelo-atendente-paciente" class="aligncenter" src="/images/a-primeira-fase-de-um-projeto-de-banco-de-dados/modelo-atendente-paciente.png"&gt;&lt;/p&gt;
&lt;p&gt;Deu pra perceber que um atendente “atende” um paciente e inicia a “Ficha
de atendimento”? Beleza, então vamos ao próximo modelo:&lt;/p&gt;
&lt;p&gt;&lt;img alt="modelo-dentista-paciente" class="aligncenter" src="/images/a-primeira-fase-de-um-projeto-de-banco-de-dados/modelo-dentista-paciente.png"&gt;&lt;/p&gt;
&lt;p&gt;Neste modelo dá pra ler que o Dentista “atende” o paciente. Certo?
Também dá pra ler que o dentista “conclui” o Atendimento atual (iniciado
pelo atendente). Além disso dá pra ler que o Dentista analisa os
atendimentos anteriores, com essa última leitura do modelo, percebemos
que a entidade “Atendimento” não representa só o atual, mas também os
anteriores. Com essa interpretação, podemos concluir que para os
atendimentos anteriores do paciente e o próprio atendimento atual, nem
sempre era o mesmo atendente e nem o mesmo dentista. Captou a ideia?&lt;/p&gt;
&lt;p&gt;Vamos juntar tudo?&lt;/p&gt;
&lt;p&gt;&lt;img alt="modelo-entidade-relacionamento" class="aligncenter" src="/images/a-primeira-fase-de-um-projeto-de-banco-de-dados/modelo-entidade-relacionamento.png"&gt;&lt;/p&gt;
&lt;p&gt;Apareceu um relacionamento interessante quando juntamos tudo, um
“paciente recebe atendimento”. Após montar o modelo completo eu senti
falta desse relacionamento. Acho que agora qualquer um que olhar o
modelo vai entender o processo inteiro. E se não estiver claro, o modelo
deve ser melhorado! O modelo externo deve ser entendido “externamente”
ao profissional de desenvolvimento de software, ou seja, deve ser
entendido por qualquer um. O seu objetivo é ajudar todas as pessoas que
estão participando do projeto do banco de dados entenderem a mesma
coisa. Se você já tem um conhecimento de banco de dados, não pense em
tabelas agora, o importante é todo mundo entender o cenário.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Vimos neste post como se inicia um projeto de banco de dados, desde
a captação e organização de dados junto aos &lt;span
style="text-decoration: underline;"&gt;especialistas do domínio&lt;/span&gt;, até
a análise e a criação de um documento e modelos externos que representam
diferentes visões do mini-mundo.&lt;/p&gt;
&lt;p&gt;Repare que criamos vários modelos, cada um representa uma determinada
visão, visão do atendente, visão do dentista, visão geral, etc... Essa é
a ideia, na fase seguinte do projeto nós começamos a aprofundar nestes
modelos acrescentando informações&lt;/p&gt;
&lt;p&gt;Espero que esse exemplo ajude a entender como os modelos podem ajudar na
transferência de conhecimento entre o profissional que entende do
negócio (no caso o dono do consultório), e os profissionais que
trabalham no desenvolvimento de softwares. Acredite, esses modelos são
de fundamental importância para o sucesso do banco de dados, pois uma
falha na comunicação aqui, resulta em um banco de dados ruim lá na
frente.&lt;/p&gt;
&lt;p&gt;Pronto para iniciar um projeto de banco de dados? Qualquer dúvida, post
aqui em baixo nos comentários!&lt;/p&gt;</content><category term="Banco de dados"></category></entry><entry><title>As 10 linguagens de programação mais requisitadas pelo mercado</title><link href="https://dicasdeprogramacao.com.br/as-10-linguagens-de-programacao-mais-requisitadas-pelo-mercado/" rel="alternate"></link><published>2015-03-05T00:00:00-03:00</published><updated>2015-03-05T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-03-05:/as-10-linguagens-de-programacao-mais-requisitadas-pelo-mercado/</id><summary type="html">&lt;p&gt;Muita gente me pergunta qual linguagem de programação deve estudar...&lt;/p&gt;
&lt;p&gt;Eu sempre respondo a mesma coisa: &lt;strong&gt;É você quem deve decidir isso!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pergunte a si mesmo, qual é o seu objetivo?&lt;/p&gt;
&lt;p&gt;Dependendo do que você quer, uma linguagem de programação …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Muita gente me pergunta qual linguagem de programação deve estudar...&lt;/p&gt;
&lt;p&gt;Eu sempre respondo a mesma coisa: &lt;strong&gt;É você quem deve decidir isso!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pergunte a si mesmo, qual é o seu objetivo?&lt;/p&gt;
&lt;p&gt;Dependendo do que você quer, uma linguagem de programação é mais indicada que outra.&lt;/p&gt;
&lt;p&gt;A maioria das pessoas pensam em aprender a programar para entrar no
mercado de trabalho e conseguir um emprego.&lt;/p&gt;
&lt;p&gt;De acordo com o escritório
de Estatísticas de Trabalho dos Estados Unidos, empregos para
programador devem crescer a uma média de 8% pelos próximos sete anos&lt;/p&gt;
&lt;p&gt;Então esta área é muito boa para o longo prazo, concorda?&lt;/p&gt;
&lt;p&gt;Então se você quer se focar este ano para ter uma bela carreira de programador,
fiz uma lista das dez linguagens das programação mais requisitadas pelo mercado
de trabalho. Conheça um pouquinho sobre cada uma delas.&lt;/p&gt;
&lt;h2&gt;1. Java&lt;/h2&gt;
&lt;p&gt;Java é uma das linguagens de programação mais usadas no mundo. A
primeira versão da linguagem foi lançada pela Sun Microsystems em 1995 e
atualmente pertence à &lt;strong&gt;Oracle&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;É uma linguagem criada originalmente para o paradigma de Orientação a Objetos
e hoje é a principal linguagem de programação utilizada para desenvolver
aplicativos para tablets e smartphones da plataforma Android.&lt;/p&gt;
&lt;p&gt;Java também é muito utilizado em ambientes corporativos,
por isso o Java é um dos mais requisitados no mercado de trabalho hoje em dia.&lt;/p&gt;
&lt;h2&gt;2. Javascript&lt;/h2&gt;
&lt;p&gt;Quase todas as páginas da internet tem um código em javascript.&lt;/p&gt;
&lt;p&gt;Costumo dizer que enquanto o HTML é a linguagem que estrutura uma página e o CSS
a deixa bonita, o javascript faz a página funcionar.&lt;/p&gt;
&lt;p&gt;Todo programador web deve aprender javascript independente da linguagem utilizada no
"backend". Essa linguagem é responsável por executar scripts do lado do
cliente, sem a necessidade de passar pela interpretação do servidor.&lt;/p&gt;
&lt;p&gt;Melhor ainda, hoje em dia, javascrpt é bastante usado também no lado back-end.
Agradecimentos ao NodeJs.&lt;/p&gt;
&lt;h2&gt;3. PHP&lt;/h2&gt;
&lt;p&gt;O PHP é a linguagem de programação mais usada no backend de sites. Tem gente que ama e tem gente que odeia, mas a verdade é que a maioria dos
sites da internet são feitos com PHP.&lt;/p&gt;
&lt;p&gt;Isso se deve, em grande parte, aos
gerenciadores de conteúdo (CMS) mais usados no mundo, tais como
Wordpress, Drupal, Joomla. A maioria dos blogs que você encontra na
internet usa um desses gerenciadores de conteúdo.&lt;/p&gt;
&lt;p&gt;Mas além disso, hoje o PHP é uma linguagem completamente renovada que
garante produtividade concorrendo com as novidades do mundo de
desenvolvimento web.&lt;/p&gt;
&lt;h2&gt;4. C#&lt;/h2&gt;
&lt;p&gt;O C# é a linguagem principal quando se fala de Microsoft. Desde
serviços e plataformas web a dispositivos móveis que utilizam Windows
Phone. Também é uma das linguagens usadas do motor gráfico de
desenvolvimento de jogos Unity é o C#. Se você quer programar para
Windows 7, 8, 10, etc. aprenda C#.&lt;/p&gt;
&lt;h2&gt;5. C&lt;/h2&gt;
&lt;p&gt;Muito rápido e poderoso, o C é utilizado para criar softwares para
sistemas embarcados. Criada em 1972, muitos sistemas operacionais foram
desenvolvidos em C e até os dias de hoje a linguagem continua sendo
muito usada para desenvolvimento de sistemas operacionais, aplicativos,
games e integração com o hardware. Empresas aeroespaciais e de
telecomunicações utilizam muito o C. Aliás, um dos ramos que mais tem
crescido em oferta de emprego para programadores é a telecomunicações.
Vale a pena aprender!&lt;/p&gt;
&lt;h2&gt;6. C++&lt;/h2&gt;
&lt;p&gt;O C++ é considerado por muitos como a melhor linguagem para
desenvolvimento de softwares para desktop e jogos que exigem bastante
hardware. É o aprimoramento da linguagem C com elementos da orientação a
objetos.&lt;/p&gt;
&lt;p&gt;&lt;img alt="programar" class="aligncenter" src="/images/as-10-linguagens-de-programacao-mais-requisitadas-pelo-mercado/programar.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;7. Python&lt;/h2&gt;
&lt;p&gt;O Python é excelente para quem está começando. É uma linguagem que serve
pra quase tudo e nos permite trabalhar mais rápido e integrar sistemas
de forma eficaz. Python é livre e de código aberto,
multiplataforma, orientada a objetos e de alto nível. Grandes empresas
utilizam Python para tarefas críticas, tais como Google, Youtube e
Netflix.&lt;/p&gt;
&lt;h2&gt;8. Objective-C&lt;/h2&gt;
&lt;p&gt;Esta é a linguagem principal para a plataforma da Apple como IOS e OS X.
É uma linguagem de programação flexiva orientada a objeto que usa
transmissão de mensagens no estilo Smaltalk e C. Como IPhone e IPad
vende bastante, aprender Objective-C é uma boa opção para entrar no
mercado de aplicativos mobile.&lt;/p&gt;
&lt;h2&gt;9. Ruby&lt;/h2&gt;
&lt;p&gt;O Ruby é uma linguagem simples de aprender, elegante, focada na
produtividade, incrivelmente poderosa e totalmente livre. Ficou mais
famoso pelo seu uso na internet através do framework &lt;strong&gt;Ruby on Rails&lt;/strong&gt;,
mas o Ruby pode ser usado para muitas outras coisas e a demanda
por programadores de Ruby vem crescendo bastante nos últimos anos.&lt;/p&gt;
&lt;h2&gt;10. Visual Basic&lt;/h2&gt;
&lt;p&gt;O bom e velho VB ainda é muito utilizado para desenvolvimento desktop.
Já vi muito software escrito em VB e embora muita gente acha que vem
perdendo mercado, para o C# por exemplo, ainda tem muito sistema em VB
que precisa de manutenção.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;As vezes quem está começando pode se sentir confuso na hora de escolher
qual linguagem investir tempo para aprender para entrar no mercado de
trabalho.&lt;/p&gt;
&lt;p&gt;Neste artigo eu quis apresentar as linguagens que são mais requisitas
pelos mercado de trabalho. É importante ressaltar que a ordem em que
listei essas linguagens não representa a ordem das mais requisitadas
pelo mercado. Para isso existe algumas pesquisas como as do &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;site
Tiobe&lt;/a&gt; ou
do
&lt;a href="http://mashable.com/2014/01/21/learn-programming-languages/"&gt;Mashable&lt;/a&gt;.
Mas creio que essa ordem pode variar dependendo da região.&lt;/p&gt;
&lt;p&gt;Mas se você não sabe nada de programação e quer aprender para entrar
nesse mercado de trabalho, sugiro que antes de se preocupar com a
linguagem, aprenda lógica de programação.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;&lt;strong&gt;Quer aprender programação? Saiba a melhor
linguagem!&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para ajudar iniciantes em lógica de programação eu criei um minicurso
GRATUITO de lógica de programação. Neste minicurso você receberá as
aulas por e-mail e será instigado a resolver problemas práticos
utilizando lógica de programação. Também envio minhas soluções para os
exercícios por e-mail, desta forma você pode tentar resolver sozinho e
comprar a sua resposta com a minha.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://mclp.dicasdeprogramacao.com.br/"&gt;&amp;gt;&amp;gt; Quero me inscrever no minicurso GRATUITO de lógica de
programação!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;E você, já escolheu qual das linguagens vai aprender este ano?&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Algoritmo para Validar CPF</title><link href="https://dicasdeprogramacao.com.br/algoritmo-para-validar-cpf/" rel="alternate"></link><published>2015-01-19T00:00:00-02:00</published><updated>2015-01-19T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-01-19:/algoritmo-para-validar-cpf/</id><summary type="html">&lt;p&gt;Quando se está trabalhando em um sistema corporativo, é comum a
necessidade de validar CPF. Muita gente não sabe que um CPF para ser
válido não basta apenas atender à máscara
&lt;strong&gt;"###.###.###-##"&lt;/strong&gt; (o caractere '#' representa um número),
existe uma regra matemática …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quando se está trabalhando em um sistema corporativo, é comum a
necessidade de validar CPF. Muita gente não sabe que um CPF para ser
válido não basta apenas atender à máscara
&lt;strong&gt;"###.###.###-##"&lt;/strong&gt; (o caractere '#' representa um número),
existe uma regra matemática que também deve ser verificada para um CPF
ser considerado válido. Se você acha que é complicado verificar se um
CPF é válido ou não, você vai se surpreender!&lt;/p&gt;
&lt;p&gt;&lt;img alt="exemplo de
CPF" class="aligncenter" src="/images/algoritmo-para-validar-cpf/cpf-exemplo.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;Regra para validar CPF&lt;/h2&gt;
&lt;p&gt;O cálculo para validar um CPF é especificado pelo &lt;a href="http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/consultapublica.asp" target="_blank" title="Consulta para validação de CPF"&gt;Ministério da
Fazenda&lt;/a&gt;, que
disponibiliza no próprio site as
&lt;a href="http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/funcoes.js" target="_blank" title="Funções para validação de CPF"&gt;funções&lt;/a&gt;
(em javascript) para validação de CPF. Vamos entender como funciona.&lt;/p&gt;
&lt;p&gt;O CPF é formado por 11 dígitos numéricos que seguem a máscara
"###.###.###-##", a verificação do CPF acontece utilizando os
9 primeiros dígitos e, com um cálculo simples, verificando se o
resultado corresponde aos dois últimos dígitos (depois do sinal "-").&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vamos usar como exemplo, um CPF fictício "529.982.247-25".&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Validação do primeiro dígito&lt;/h3&gt;
&lt;p&gt;Primeiramente multiplica-se os 9 primeiros dígitos pela sequência
decrescente de números de 10 à 2 e soma os resultados. Assim:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;5 * &lt;strong&gt;10&lt;/strong&gt; + 2 * &lt;strong&gt;9&lt;/strong&gt; + 9 * &lt;strong&gt;8&lt;/strong&gt; + 9 * &lt;strong&gt;7&lt;/strong&gt; + 8 * &lt;strong&gt;6&lt;/strong&gt; + 2 *
&lt;strong&gt;5&lt;/strong&gt; + 2 * &lt;strong&gt;4&lt;/strong&gt; + 4 * &lt;strong&gt;3&lt;/strong&gt; + 7 * &lt;strong&gt;2&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O resultado do nosso exemplo é:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;295&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O próximo passo da verificação também é simples, basta multiplicarmos
esse resultado por 10 e dividirmos por 11.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;295 * &lt;strong&gt;10&lt;/strong&gt; / &lt;strong&gt;11&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O resultado que nos interessa na verdade é o RESTO da divisão. Se ele
for igual ao &lt;strong&gt;primeiro dígito verificador&lt;/strong&gt; (primeiro dígito depois do
'-'), a primeira parte da validação está correta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Observação Importante:&lt;/strong&gt; Se o resto da divisão for igual a 10, nós o
consideramos como 0.&lt;/p&gt;
&lt;p&gt;Vamos conferir o primeiro dígito verificador do nosso exemplo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;O resultado da divisão acima é '268' e o RESTO é &lt;strong&gt;2&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Isso significa que o nosso CPF exemplo passou na validação do primeiro
dígito.&lt;/p&gt;
&lt;h3&gt;Validação do segundo dígito&lt;/h3&gt;
&lt;p&gt;A validação do segundo dígito é semelhante à primeira, porém vamos
considerar os 9 primeiros dígitos, mais o primeiro dígito verificador, e
vamos multiplicar esses 10 números pela sequencia decrescente de 11 a 2.
Vejamos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;5 * &lt;strong&gt;11&lt;/strong&gt; + 2 * &lt;strong&gt;10&lt;/strong&gt; + 9 * &lt;strong&gt;9&lt;/strong&gt; + 9 * &lt;strong&gt;8&lt;/strong&gt; + 8 * &lt;strong&gt;7&lt;/strong&gt; + 2
* &lt;strong&gt;6&lt;/strong&gt; + 2 * &lt;strong&gt;5&lt;/strong&gt; + 4 * &lt;strong&gt;4&lt;/strong&gt; + 7 * &lt;strong&gt;3&lt;/strong&gt; + 2 * &lt;strong&gt;2&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O resultado é:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;347&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Seguindo o mesmo processo da primeira verificação, multiplicamos por 10
e dividimos por 11.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;347 * &lt;strong&gt;10&lt;/strong&gt; / &lt;strong&gt;11&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Verificando o RESTO, como fizemos anteriormente, temos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;O resultado da divisão é '315' e o RESTO é &lt;strong&gt;5&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Verificamos, se o resto corresponde ao segundo dígito verificador.&lt;/p&gt;
&lt;p&gt;Com essa verificação, constatamos que o CPF 529.982.247-25 é válido.&lt;/p&gt;
&lt;h2&gt;CPFs inválidos conhecidos&lt;/h2&gt;
&lt;p&gt;Existe alguns casos de CPFs que passam nessa validação que expliquei,
mas que ainda são inválidos. É os caso dos CPFs com dígitos repetidos
(111.111.111-11, 222.222.222-22, ...)&lt;/p&gt;
&lt;p&gt;Esses CPF atendem à validação, mas ainda são considerados inválidos.&lt;/p&gt;
&lt;p&gt;No nosso algoritmo, vamos verificar se todos os dígitos do CPF são
iguais e, neste caso, considerar que ele é inválido.&lt;/p&gt;
&lt;h2&gt;Algoritmo para validar CPF&lt;/h2&gt;
&lt;p&gt;Agora que já aprendemos como acontece a validação de um CPF, vamos ver
como ficaria um algoritmo para validar CPF. Vamos escrever o algoritmo
em Portugal utilizando o
&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;Visualg&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;No algoritmo abaixo, eu criei uma função chamada
&lt;strong&gt;validaCPF(cpf:CARACTER)&lt;/strong&gt; que retorna &lt;strong&gt;verdadeiro&lt;/strong&gt; ou &lt;strong&gt;falso&lt;/strong&gt; se o
CPF for ou não válido.&lt;/p&gt;
&lt;p&gt;Se você não sabe o que é uma função, &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-sao-funcoes-e-procedimentos/" target="_blank" title="O que são Funções e Procedimentos?"&gt;leia este
artigo&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Validação de CPF&amp;quot;&lt;/span&gt;

&lt;span class="n"&gt;funcao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;validaCPF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;CARACTER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LOGICO&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;num1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inteiro&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;resto1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resto2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;extrai&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dígitos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CPF&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;num11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Validação&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CPFs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inválidos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conhecidos&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;RETORNE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSO&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;soma1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;resto1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resto1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="n"&gt;resto1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;soma2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;resto2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resto2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="n"&gt;resto2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resto1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resto2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;RETORNE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VERDADEIRO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;RETORNE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="n"&gt;fimfuncao&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CARACTER&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Verificação&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;um&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CPF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inválido&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;123.456.789-12&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;validaCPF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VERDADEIRO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O CPF &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é válido!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O CPF &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é inválido!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Verificação&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;um&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CPF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;válido&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;529.982.247-25&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;validaCPF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VERDADEIRO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O CPF &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é válido!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O CPF &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é inválido!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Verificação&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CPF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dígitos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iguais&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;777.777.777-77&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;validaCPF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VERDADEIRO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O CPF &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é válido!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O CPF &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é inválido!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perceba que testamosa nossa função com três CPFs, um inválido e outro
válido e um inválido conhecido. O resultado da execução deste algoritmo
é esse.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;O CPF 123.456.789-12 é inválido!
O CPF 529.982.247-25 é válido!
O CPF 777.777.777-77 é inválido!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Também utilizei algumas funções pré-definidas pelo Visualg para extrair
cada caracter da variável &lt;em&gt;cpf&lt;/em&gt; e para convertê-los em números inteiros.
As funções que utilizei foram:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caracpnum (c : caracter): inteiro&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Esta função serve para converter um valor do tipo texto em um
    valor do tipo inteiro&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copia (c : caracter ; p, n : inteiro): caracter&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Esta função serve para extrair sub-textos de variáveis texto.&lt;/li&gt;
&lt;li&gt;Ela recebe três parâmetros, o primeiro é o texto de onde vamos
    extrair o sub-texto, o segundo é a posição de inicio do
    sub-texto e o terceiro parâmetro é a quantidade de caracteres
    que vamos extrair.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No nosso caso, nós extraímos os dígitos do cpf através da função
&lt;strong&gt;copia&lt;/strong&gt; e convertemos o resultado desta função em inteiro através da
função &lt;strong&gt;caracpnum&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Por exemplo, para o cpf &lt;em&gt;"529.982.247-25"&lt;/em&gt; a linha abaixo atribui o
valor inteiro 8 à variável num5, pois este é o caracter da posição 6
(contando o caracter ponto ".").&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;num5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Caracpnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Copia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Outro detalhe interessante é o operador &lt;em&gt;mod&lt;/em&gt; que retorna o resto da
divisão.&lt;/p&gt;
&lt;p&gt;Claro que pode-se implementar de outras formas,
com &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-sao-vetores-e-matrizes-arrays/" target="_blank" title="O que são Vetores e Matrizes (arrays)"&gt;Vetores&lt;/a&gt;,
&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;LOOPs&lt;/a&gt;,
etc. Entretanto eu tentei implementar de uma forma mais simples de
entender a regra.&lt;/p&gt;
&lt;p&gt;Se quiser entender cada recurso utilizado neste algoritmo leia os
artigos abaixo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de decisão SE-ENTÃO-SENÃO"&gt;Estrutura de decisão
SE-ENTAO-SENAO&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-sao-funcoes-e-procedimentos/" target="_blank" title="O que são Funções e Procedimentos?"&gt;O que são Funções e
Procedimentos?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/operadores-aritmeticos/" target="_blank" title="Você sabe usar os Operadores Aritméticos em programação?"&gt;Você sabe usar os Operadores Aritméticos em
programação?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/operadores-relacionais/" target="_blank" title="Conheça os Operadores Relacionais!"&gt;Conheça os Operadores Relacionais!
&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" target="_blank" title="O que são tipos de dados primitivos?"&gt;O
que são tipos de dados primitivos?
&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;Quer
aprender programação? Saiba qual a melhor
linguagem!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Entendendo como funciona o algoritmo, você torna-se capaz de validar CPF
em qualquer linguagem.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Sublime Text: O queridinho dos programadores</title><link href="https://dicasdeprogramacao.com.br/sublime-text-o-queridinho-dos-programadores/" rel="alternate"></link><published>2015-01-04T00:00:00-02:00</published><updated>2015-01-04T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2015-01-04:/sublime-text-o-queridinho-dos-programadores/</id><summary type="html">&lt;p&gt;O que faz um profissional importante é seu conhecimento sobre as
diversas áreas em que ele atua. Isso serve para qualquer profissional,
do lixeiro ao alto executivo. Mas um outro fator importante a ser
considerado são as ferramentas que o …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O que faz um profissional importante é seu conhecimento sobre as
diversas áreas em que ele atua. Isso serve para qualquer profissional,
do lixeiro ao alto executivo. Mas um outro fator importante a ser
considerado são as ferramentas que o profissional utiliza. Já imaginou
o quando sofre um borracheiro sem um macaco? Profissional competente com
as ferramentas certas é o primeiro passo para qualquer negócio ter
sucesso.&lt;/p&gt;
&lt;p&gt;Programadores também precisam de ferramentas certas para trabalhar. Uma
IDE é um conjunto de ferramentas organizadas para facilitar o trabalho
do desenvolvedor, ou um &lt;strong&gt;Ambiente Integrado de Desenvolvimento&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Assim como acontece com linguagens, frameworks, sistemas operacionais,
etc. Sempre há aquela discussão sobre qual a melhor IDE. Não quero entra
nessa discução aqui.&lt;/p&gt;
&lt;p&gt;Mas há uma tendência muito forte pelo uso de IDEs simples. Muitas vezes
os programadores, escritores e usuários, em geral, acabam cansados de
usar IDEs pesadas e lentas ou editores de texto sobrecarregados de
recursos que nunca vão precisar. Neste cenário surgem IDEs que priorizam
o simples como o &lt;strong&gt;Sublime Text&lt;/strong&gt; e o&lt;strong&gt; Notepad++&lt;/strong&gt;, editores de texto
superpoderosos que podem ser configurados para se adaptar a forma de
trabalho do usuário.&lt;/p&gt;
&lt;p&gt;Vamos conhecer um pouco mais o &lt;strong&gt;Sublime Text&lt;/strong&gt; e porque ele está se
tornando o queridinho dos desenvolvedores de softwares.&lt;/p&gt;
&lt;h2&gt;Simples, rápido, leve e customizável&lt;/h2&gt;
&lt;p&gt;O Sublime Text é antes de tudo um &lt;span
style="text-decoration: underline;"&gt;editor de texto&lt;/span&gt; leve, possui
uma interface limpa e fácil de usar. Mas é altamente flexível, podendo
se adaptar a diferentes tipos de profissionais. Através de plugins a
IDE oferece muitos recursos exclusivos que fazem a programação se tornar
mais produtiva.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Sublime
Text" class="aligncenter" src="/images/sublime-text-o-queridinho-dos-programadores/Sublime-Text.png"&gt;&lt;/p&gt;
&lt;h2&gt;Ferramentas mais conhecidas&lt;/h2&gt;
&lt;p&gt;O Sublime Text trás algumas ferramentas padrão que mostram o porquê
dessa IDE ser tão usada.&lt;/p&gt;
&lt;h3&gt;Goto Anything&lt;/h3&gt;
&lt;p&gt;&lt;img alt="go to
anything" class="aligncenter" src="/images/sublime-text-o-queridinho-dos-programadores/go-to-anything.png"&gt;&lt;/p&gt;
&lt;p&gt;Talvez essa função seja a principal responsável pelo sucesso do Sublime
Text. Com uma simplicidade igual a do Google, através do comando
"Ctrl+P" é apresentado um campo de busca muito rápido que busca qualquer
conteúdo em qualquer arquivo do projeto à medida em que digitamos
o texto.&lt;/p&gt;
&lt;h3&gt;Plugins&lt;/h3&gt;
&lt;p&gt;&lt;img alt="plugin
css" class="alignright" src="/images/sublime-text-o-queridinho-dos-programadores/plugin-css-300x201.png"&gt;
Uma das coisas mais
interessantes do Sublime Text é a capacidade de estender as
funcionalidades do editor por meio de plugins.&lt;/p&gt;
&lt;p&gt;Existe plugin pra tudo! Integração com o GIT, snippets para Bootstrap,
SFTP, highlight, VI, SASS, LESS, e ótimas ferramentas para refatoração
de código.&lt;/p&gt;
&lt;p&gt;Através do &lt;a href="https://packagecontrol.io/" target="_blank" title="Sublime Text Package Control"&gt;Package
Control&lt;/a&gt;, o
usuário pode navegar por uma infinidade de plugins. Além dos muitos
plugins já disponíveis, é muito simples criar os próprios plugins, a
linguagem utilizada é o &lt;strong&gt;Python&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Modo livre de distrações&lt;/h3&gt;
&lt;p&gt;Quando você precisa de foco, uma ferramenta muito interessante é
o &lt;strong&gt;&lt;em&gt;Distraction Free Mode&lt;/em&gt;&lt;/strong&gt;. Quando acionado (Menu &lt;em&gt;View/Enter
Distraction Free Mode&lt;/em&gt;), a IDE fica em tela cheia.&lt;/p&gt;
&lt;h3&gt;Função Auto-Completar&lt;/h3&gt;
&lt;p&gt;Todos nós sabemos como é bom usar funções de auto-completar. Essa função
aumenta muito a nossa produtividade! Você começa digitando um comando e
a IDE abre uma janela com sugestões. Muito útil quando você não lembra
exatamente como escreve o comando. Quem não gosta de auto-completar?&lt;/p&gt;
&lt;h3&gt;Snippets&lt;/h3&gt;
&lt;p&gt;Snippets são trechos de código prontos que podem ser adicionados no
arquivo através de um comando seguido de "&lt;em&gt;Tab&lt;/em&gt;". Por exemplo, se você
digitar "lorem" e teclar "&lt;em&gt;Tab&lt;/em&gt;" automaticamente é inserido um parágrafo
com o famoso texto &lt;del&gt;enchedor de linguiça&lt;/del&gt; "&lt;em&gt;Lorem Ipsum".&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Uma boa utilização é criar o Snippets "sysou" para gerar o
System.out.println(), muito familiar quem usa Eclipse ... ;)&lt;/p&gt;
&lt;p&gt;Para criar snippets basta selecionar &lt;strong&gt;Tools &amp;gt; New snippet…&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Command Pallete&lt;/h3&gt;
&lt;p&gt;O &lt;strong&gt;Command Pallete&lt;/strong&gt; funciona da mesma forma que o &lt;em&gt;Gogo Anything&lt;/em&gt;, a
diferença é que este pesquisa comandos do próprio Sublime Text.&lt;/p&gt;
&lt;p&gt;Para acionar o Command Pallete utilize o comando &lt;strong&gt;&lt;em&gt;Ctrl+Shift+P&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Divisão de Tela&lt;/h3&gt;
&lt;p&gt;Outra característica muito interessante do Sublime Text é a
possibilidade de dividir a tela colocando dois (ou mais) arquivos lado a
lado. Isso é muito útil para comparar arquivos. Inclusive é possível
colocar partes diferentes do mesmo arquivo lado a lado. Outra utilização
muito comum entre web designers é colocar o HTML de um lado e o CSS do
outro.&lt;/p&gt;
&lt;h3&gt;Minimap&lt;/h3&gt;
&lt;p&gt;&lt;img alt="minimap sublime
text" class="alignright" src="/images/sublime-text-o-queridinho-dos-programadores/minimap-300x215.png"&gt;
O Sublime Text
apresenta um mini-mapa no lado direito da tela para ter rápido acesso à
todas as linhas de seu código, basta deslizá-lo para cima ou para baixo.&lt;/p&gt;
&lt;p&gt;Não é uma função nova, mas ajuda muito na hora de trabalhar com seus
arquivos.&lt;/p&gt;
&lt;p&gt;Você pode exibir ou esconder o mini-mapa através da opção &lt;strong&gt;&lt;em&gt;View &amp;gt;
Hide/show minimap&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Quem vê o Sublime Text pela primeira vez as vezes se pergunta como pode
um editor com uma aparência tão simples ser capaz de substituir uma IDE
de programação completa? A resposta é a capacidade de personalização
que o Sublime Text proporciona.&lt;/p&gt;
&lt;p&gt;Além disso, mesmo com tantos recursos é uma ferramenta muito rápida. O
desempenho deste software é simplesmente impressionante.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sublimetext.com/" target="_blank" title="Sublime Text"&gt;Vale a pena conhecer esta
IDE&lt;/a&gt;, ela é multi-plataforma
e funciona em Mac, Windows e Linux de forma idêntica.&lt;/p&gt;
&lt;p&gt;Possui uma versão de avaliação sem prazo de expiração, entretanto sempre
aparece uma janela para registro do software.&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="Ferramentas"></category></entry><entry><title>Melhore sua produtividade com a técnica Pomodoro!</title><link href="https://dicasdeprogramacao.com.br/melhore-sua-produtividade-com-a-tecnica-pomodoro/" rel="alternate"></link><published>2014-12-06T00:00:00-02:00</published><updated>2014-12-06T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2014-12-06:/melhore-sua-produtividade-com-a-tecnica-pomodoro/</id><summary type="html">&lt;p&gt;Quem nunca experimentou a ansiedade de estar frente a uma tarefa que
precisa ser cumprida em um prazo que já está acabando? E quando a
complexidade dessa tarefa nos faz ter vontade de jogar tudo pro alto?
Acredite, isso já …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Quem nunca experimentou a ansiedade de estar frente a uma tarefa que
precisa ser cumprida em um prazo que já está acabando? E quando a
complexidade dessa tarefa nos faz ter vontade de jogar tudo pro alto?
Acredite, isso já aconteceu muito comigo em minhas tarefas
profissionais, acadêmicas e pessoais.&lt;/p&gt;
&lt;p&gt;O maior inimigo de quem trabalha a frente do computador é a &lt;strong&gt;falta de
foco&lt;/strong&gt;. Sim, isso acontece com muita gente e na minha opinião é até
normal perder a produtividade com o tempo, mas é sempre bom rever sua
forma de trabalhar para melhorar sua produtividade.&lt;/p&gt;
&lt;p&gt;Desenvolvedores de softwares sofrem muito disso. Na verdade, todo mundo
que trabalha na frente do computador tende a cansar a mente e com o
tempo ir buscando uma forma de "relaxar" a cabeça, seja entrando no
facebook, twitter, youtube, joginho, bate-papo, ler um texto que não tem
nada a ver com o trabalho, etc. A internet possibilita várias distrações
que por nos trazer algum tipo de prazer, o nosso cérebro acaba criando
maus hábitos.&lt;/p&gt;
&lt;p&gt;&lt;img alt="distrações redes
sociais" class="alignleft" src="/images/melhore-sua-produtividade-com-a-tecnica-pomodoro/redes-sociais-300x210.jpg"&gt;
O problema é que
com o passar do tempo esses hábitos instigam o nosso cérebro a decidir
sempre pela distração ao invés do trabalho. Aí você chega no final do
dia e tem a sensação de que não teve tempo pra nada! Que o tempo é seu
inimigo! O trabalho vai acumulando e no fim acaba sendo feito de
qualquer jeito porque "teve pouco tempo". Você está improdutivo! Isso
não é bom pra ninguém.&lt;/p&gt;
&lt;p&gt;Está na hora de repensar a forma com que você tem trabalhado. Existem
várias técnicas para melhorar a produtividade de trabalho, neste
artigo vou compartilhar uma técnica que eu particularmente gosto muito
e que também pode te ajudar a retomar o foco no seu trabalho. Estou
falando da &lt;strong&gt;Técnica Pomodoro&lt;/strong&gt;!&lt;/p&gt;
&lt;h2&gt;Como nasceu a Técnica Pomodoro?&lt;/h2&gt;
&lt;p&gt;Antes de saber o que é, acho interessante entender como nasceu essa
técnica. A &lt;a href="http://pomodorotechnique.com/" target="_blank" title="The Pomodoro Technique"&gt;técnica
pomodoro&lt;/a&gt; foi
criada pelo italiano Francesco
&lt;img alt="Timer de fogão -
pomodoro" class="alignleft" src="/images/melhore-sua-produtividade-com-a-tecnica-pomodoro/relogio-fogao-225x300.jpg"&gt;
Cirillo nos tempos
de faculdade (no final dos anos 80 e início dos anos 90) quando percebeu
que o alto número de distrações e interrupções estavam quase o fazendo
reprovar nas provas, pois, por mais que ele fosse nas aulas e estudasse
em casa, ele não tinha produtividade.&lt;/p&gt;
&lt;p&gt;Foi quando ele fez uma aposta consigo mesmo: "Eu posso estudar (estudar
mesmo!) por 10 minutos?". Então ele procurou alguma coisa que pudesse
marcar os 10 minutos para que ele começasse a estudar com foco total, um
juiz para a aposta dele (com ele mesmo). E o juiz que ele achou foi na
cozinha, um marcador de tempo desses de fogão, sabe? Mas o que ele tinha
na cozinha dele era no formato de um tomate (em italiano: Pomodoro).&lt;/p&gt;
&lt;p&gt;Bom, na verdade ele perdeu a aposta nas primeiras vezes, não conseguiu
ter foco por 10 minutos direto. Mas com mais esforço e prática ele
conseguiu criar o hábito de ter foco e no final obteve sucesso. Hoje a
técnica está evoluída a ponto de ser aplicada por equipes inteiras.&lt;/p&gt;
&lt;h2&gt;O que é a técnica pomodoro&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Pomodoro
Timer" class="alignright" src="/images/melhore-sua-produtividade-com-a-tecnica-pomodoro/Pomodoro-Technique-Timer-300x300.jpg"&gt;
Esta técnica consiste em fracionar o seu tempo de trabalho entre foco total
(completamente sem distrações e interrupções) e um tempo para descanso.
Parece simples, mas não é fácil lutar contra o seu cérebro habituado a
decidir sempre pelas distrações.&lt;/p&gt;
&lt;p&gt;Em sua concepção mais básica, a técnica funciona assim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trabalhe numa tarefa durante 25 minutos sem parar. Coloque um
    "timer" para marcar os 25 minutos e te avisar quando acabar. Neste
    momento você deve ter &lt;strong&gt;FOCO TOTAL&lt;/strong&gt;!&lt;/li&gt;
&lt;li&gt;Faça uma pausa de 5 minutos para descansar. Você pode tomar um café,
    uma água, ir no banheiro ou ver seus e-mails, facebook etc...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso é &lt;strong&gt;UM pomodoro&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faça isso durante quatro Pomodoros (4 vezes: 25 minutos de foco + 5
    minutos de descanso)&lt;/li&gt;
&lt;li&gt;Depois disso faça uma pausa maior (15 minutos)&lt;/li&gt;
&lt;li&gt;Reinicie mais quadro pomodoros...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pronto, isso é o básico do funcionamento da técnica, mas se no meio do
seu pomodoro você tiver vontade de ir no banheiro, beber água ou ter
um pensamento fora do que você tem que se concentrar, você precisa
anotar isso em um papel e continuar o pomodoro, isso é uma forma de
dizer pro seu cérebro "&lt;em&gt;fique tranquilo que eu vou me lembrar disso
&lt;/em&gt;&lt;em&gt;depois&lt;/em&gt;**". Mas se o seu pomodoro for realmente interrompido (preciso
ir no banheiro!) ele deve ser cancelado e inicia-se outro depois.&lt;/p&gt;
&lt;h2&gt;Gerenciamento do tempo&lt;/h2&gt;
&lt;p&gt;O pomodoro não se limita em apenas &lt;span
style="text-decoration: underline;"&gt;focar&lt;/span&gt; e &lt;span
style="text-decoration: underline;"&gt;descansar&lt;/span&gt;. Você pode fazer o
planejamento de todo o seu trabalho baseado nos pomodoros, mensurar a
sua produtividade em pomodoros e principalmente estimar o prazo de cada
atividade em pomodoros (e reavaliar a estimativa com o tempo). Além de
ganhar produtividade você consegue ter um ótimo gerenciamento de tempo
para o seu dia-a-dia.&lt;/p&gt;
&lt;p&gt;O mais interessante é que muitas vezes a gente resolve problemas quando
não está pensando nele. Quantas vezes você descobriu uma solução
enquanto tomava banho ou quando acordou no meio da noite. O pomodoro
instiga o nosso cérebro a descansar entre cada pomodoro e é nesse
intervalo que muitas vezes vem a solução do problema. Simplesmente
porque a mente se desligou do problema.&lt;/p&gt;
&lt;p&gt;Além disso tudo, tem uma coisa mais simples que faz a maior diferença e
eu ainda não falei. O ideal é que o seu "timer" seja como o timer do
fogão, inclusive no barulho. Aquele tique-taque do reloginho faz o
cérebro se lembrar a todo instante que deve permanecer concentrado e
ficar tranquilo que será avisado quando o tempo acabar. Ou seja, não
precisa se preocupar nem com o tempo do pomodoro! O barulho do timer do
pomodoro é capaz de criar o melhor hábito disso tudo: &lt;strong&gt;a
concentração!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mas preciso te dizer que é difícil construir o hábito da concentração e
no início você não conseguirá fazer os pomodoros completamente (Lembra
que o criador da técnica perdeu a aposta na primeira vez?). Mas se você
persistir conseguirá um resultado fantástico. Não desista quando não
conseguir finalizar os pomodoros no começo!&lt;/p&gt;
&lt;h2&gt;Benfícios da técnica pomodoro&lt;/h2&gt;
&lt;p&gt;O pomodoro trás vários benefícios pra quem consegue aplicá-la
corretamente, como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alivia a ansiedade.&lt;/li&gt;
&lt;li&gt;Aumenta o foco e a concentração.&lt;/li&gt;
&lt;li&gt;Diminui as distrações e interrupções.&lt;/li&gt;
&lt;li&gt;Aumenta a consciência nas decisões de planejamento.&lt;/li&gt;
&lt;li&gt;Aumenta a motivação.&lt;/li&gt;
&lt;li&gt;Aumenta a determinação para alcançar os objetivos.&lt;/li&gt;
&lt;li&gt;Melhora a assertividade das estimativas.&lt;/li&gt;
&lt;li&gt;Melhora o processo de trabalho e estudo.&lt;/li&gt;
&lt;li&gt;Ajuda a resolver problemas complexos.&lt;/li&gt;
&lt;li&gt;O tempo se torna um aliado ao invés de um inimigo.&lt;/li&gt;
&lt;li&gt;Incentiva a continuar a aplicação da técnica.&lt;/li&gt;
&lt;li&gt;Cria o hábito da concentração.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Ferramentas&lt;/h2&gt;
&lt;p&gt;O legal do pomodoro é a simplicidade para se aplicar a técnica. Você só
precisa de um timer, um papel e uma caneta para anotar as pequenas
interrupções para não perder o foco e gerenciar as tarefas estimadas
e realizadas.&lt;/p&gt;
&lt;p&gt;No site oficial do criador da técnica são vendidos alguns artefatos
interessantes, como um &lt;a href="http://pomodorotechnique.com/timer/" target="_blank" title="Timer pomodoro"&gt;timer no formato de
tomatinho&lt;/a&gt;, livros
e cursos.&lt;/p&gt;
&lt;p&gt;Existem também alguns softwares voltados para auxiliar na aplicação da
técnica, tem pra vários sistemas operações e inclusive SOs de
dispositivos móveis como android e IOS. Veja abaixo algumas ferramentas
que encontrei para auxiliar na aplicação da técnica pomodoro.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://code.google.com/p/pomodairo/" target="_blank" title="Pomodairo"&gt;Pomodairo&lt;/a&gt;:&lt;/strong&gt;
    Aplicativo para Windows que roda na plataforma Adobe AIR.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://reborg.github.io/pomodori/" target="_blank" title="Pomodori"&gt;Pomodori&lt;/a&gt;&lt;/strong&gt;:
    Aplicativo para Mac.Tem ferramentas para gerenciar os pomodoros e as
    atividades executados na semana/mês, etc...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://play.google.com/store/search?q=pomodoro&amp;amp;c=apps" target="_blank" title="Aplicativos Android para Pomodoro"&gt;Vários aplicativos de Pomodoro para
    Android&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.brothersoft.com/pomodoro-desktop-248517.html" target="_blank" title="Pomodoro Desktop"&gt;Pomodoro
    Desktop&lt;/a&gt;&lt;/strong&gt;:
    Aplicativo para Mac.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.tomighty.org/" target="_blank" title="Tomighty"&gt;Tomighty&lt;/a&gt;&lt;/strong&gt;: Aplicativo
    simples criado em Java (Roda em todos os sistemas operacionais com
    JVM), muito bom.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=325610693&amp;amp;mt=8&amp;amp;ign-mpt=uo%3D2" target="_blank" title="Pomodoro Timer"&gt;Pomodoro
    Timer&lt;/a&gt;&lt;/strong&gt;:
    Aplicativo para iPhone e iPad.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.teamviz.com/" target="_blank" title="TeamViz"&gt;&lt;strong&gt;TeamViz&lt;/strong&gt;&lt;/a&gt;: Esse é o que eu
    mais gosto, tem a versão free e tem a versão paga. É uma plataforma
    inteira muito completa para a aplicação do Pomodoro, com
    gerenciamento de atividades, estimativas, forma simples de anotar as
    interrupções, etc ...&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;E você? Já conhecia a técnica?&lt;/h2&gt;
&lt;p&gt;Eu utilizo bastante esta técnica no meu dia-a-dia. Há uma certa
padronização do tempo de cada pomodoro (25 minutos + 5 de descanso e um
pausa long de 15 minutos), mas concordo que este padrão pode não ser o
melhor pra você, esteja livre para alterar os tempos de cada pomodoro
especificamente para você, mas não fuja muito dos 25x5.&lt;/p&gt;
&lt;p&gt;No inicio você pode aplicar a técnica em sua forma mais simples, mas ela
também é uma ferramenta muito importante para gerenciar a sua
produtividade do dia-a-dia, planejar, estimar e priorizar as tarefas que
você tem que trabalhar.&lt;/p&gt;
&lt;p&gt;Você já conhecia a &lt;strong&gt;técnica pomodoro&lt;/strong&gt;? Deixe aí o seu comentário do
que achou e dos resultados que está tendo com a aplicação desta técnica!&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="Técnicas"></category><category term="Produtividade"></category></entry><entry><title>Programador só escreve códigos?</title><link href="https://dicasdeprogramacao.com.br/programador-so-escreve-codigos/" rel="alternate"></link><published>2014-09-15T00:00:00-03:00</published><updated>2014-09-15T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2014-09-15:/programador-so-escreve-codigos/</id><summary type="html">&lt;p&gt;Muita gente inicia a carreira na área de desenvolvimento de softwares
pensando que programador é a pessoa que domina uma ou mais linguagens de
programação e consegue criar softwares. Se você pensa assim, está
completamente enganado.&lt;/p&gt;
&lt;p&gt;Um dos motivos que …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Muita gente inicia a carreira na área de desenvolvimento de softwares
pensando que programador é a pessoa que domina uma ou mais linguagens de
programação e consegue criar softwares. Se você pensa assim, está
completamente enganado.&lt;/p&gt;
&lt;p&gt;Um dos motivos que me fizeram escolher estudar engenharia era a
possibilidade de mudar a minha visão em relação a como tudo funciona,
como as coisas acontecem. Eu percebo que isso aconteceu na minha vida. E
esse também é o motivo de eu ser apaixonado por desenvolvimento de
softwares. Trabalhar com desenvolvimento de softwares exige que a gente
entenda o domínio onde o software vai atuar.&lt;/p&gt;
&lt;p&gt;Esse é, na verdade, o grande diferencial das pessoas que estão
concorrendo a uma vaga de emprego. As pessoas acham que o mais
importante é dominar linguagens e tecnologias, enquanto o principal é
saber levar a tecnologia para ajudar no processo de negocio do cliente.
Neste contexto, conhecer o negócio é mais importante que conhecer uma
linguagem de programação a fundo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Programar não é só escrever
códigos" class="aligncenter" src="/images/programador-so-escreve-codigos/Coding_Shots_Annual_Plan_high_res-5-1024x682.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;Programador é mais que apenas um ... Programador&lt;/h2&gt;
&lt;p&gt;Programador não é uma maquina que transforma café em códigos! Aliás,
contratar programador de linguagens já estabelecidas no mercado é tão
simples quanto contratar uma faxineira. Na Índia se "chutar uma moita"
sai um programador PHP, Java ou .Net que trabalha a preço de banana.&lt;/p&gt;
&lt;p&gt;Quem deseja seguir carreira como programador deve, antes de tudo, gostar
de aprender. Não digo aprender só tecnologia, digo aprender
principalmente negócios. Negócios de todo tipo: mineração, logística,
marketing, supply chain, aviação civil, processos jurídicos, impostos,
comércio etc.&lt;/p&gt;
&lt;p&gt;Isso é o mais fascinante nesta profissão. Apos 10, 15 ou 20 anos de
trabalho nessa área o profissional provavelmente já atuou em dezenas ou
mesmo centenas de tipos de negócios diferentes.&lt;/p&gt;
&lt;p&gt;No final das contas o código que escrevemos não tem tanto valor para o
cliente quando o papel que o software desempenha em um negócio. Não digo
que o código não tem valor, muito pelo contrário, o código que você
produz pode também gerar prejuízo para o cliente caso a manutenção seja
muito difícil. Por isso, a qualidade do código deve ser uma de suas
maiores preocupações.&lt;/p&gt;
&lt;p&gt;Além do mais, você não quer que o programador que vai dar manutenção no
seu código saia xingando sua mãe por aí, né?&lt;/p&gt;
&lt;h2&gt;Você deve falar a linguagem do cliente!&lt;/h2&gt;
&lt;p&gt;Se você já trabalha com programação vai entender a situação: Quantas
vezes você já pensou que seria bem mais fácil se o seu cliente soubesse
interpretar um modelo de dados ou uma arquitetura cliente/servidor? Não
seria mais simples conversar numa linguagem mais técnica? Acredite, os
nossos clientes pensam da mesma forma quando têm que nos explicar alguma
coisa sobre o negócio deles. Pensam: "Como seria melhor se esses
programadores entendessem o que eu quero dizer sem que eu precisasse
explicar de uma forma tão burra!"&lt;/p&gt;
&lt;p&gt;É o cliente que paga o seu salário! É sua obrigação aprender a linguagem
dele, não ele a sua.&lt;/p&gt;
&lt;p&gt;Claro que é importante aprender coisas técnicas, mas também é muito
importante aprender o domínio. Isso serve também para avaliar em que
área você vai investir. Da mesma forma que você escolhe uma linguagem de
programação pra aprender, paralelamente você também deve escolher uma
área de negócio para estudar e investir seu tempo. Pense nisso.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Lançado canal do YouTube com video-aulas sobre design de software</title><link href="https://dicasdeprogramacao.com.br/lancado-canal-youtube-com-video-aulas-sobre-design-de-software/" rel="alternate"></link><published>2014-08-19T00:00:00-03:00</published><updated>2014-08-19T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2014-08-19:/lancado-canal-youtube-com-video-aulas-sobre-design-de-software/</id><summary type="html">&lt;p&gt;Eduardo Guerra, pesquisador do INPE, editor da MundoJ e autor dos
livros &lt;a href="https://casadocodigo.refersion.com/l/e18.1464" target="_blank"&gt;Design Patterns com Java: Projeto orientado a objetos guiado por
padrões&lt;/a&gt; e &lt;a href="https://casadocodigo.refersion.com/l/f85.2026" target="_blank"&gt;Componentes
Reutilizáveis em Java com Reflexões e
Anotações&lt;/a&gt; está lançando
um canal do YouTube onde periodicamente …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Eduardo Guerra, pesquisador do INPE, editor da MundoJ e autor dos
livros &lt;a href="https://casadocodigo.refersion.com/l/e18.1464" target="_blank"&gt;Design Patterns com Java: Projeto orientado a objetos guiado por
padrões&lt;/a&gt; e &lt;a href="https://casadocodigo.refersion.com/l/f85.2026" target="_blank"&gt;Componentes
Reutilizáveis em Java com Reflexões e
Anotações&lt;/a&gt; está lançando
um canal do YouTube onde periodicamente irá postar videos com aulas e
hands-on a respeito de design de software. Segundo ele, o conteúdo acaba
complementando o material de seus livros, sendo uma excelente fonte para
aprender sobre técnicas ágeis, padrões de projeto e reflexão.&lt;/p&gt;
&lt;p&gt;&lt;img alt="canal youtube design de
software" class="aligncenter" src="/images/lancado-canal-youtube-com-video-aulas-sobre-design-de-software/canal-youtube-design-de-software.png"&gt;&lt;/p&gt;
&lt;p&gt;Até o momento já foram postados os seguintes videos:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://youtu.be/i_asEbCGUj0" target="_blank"&gt;&lt;strong&gt;Comparando abordagens para construção de
frameworks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Essa apresentação mostra diferentes abordagens para a construção de
frameworks, abordando a diferença entre elas. É utilizado um exemplo
como base, e em seguida é mostrado como seria o framework com a
utilização de herança, composição, reflexão e metadados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://youtu.be/SQlxPchXm4s" target="_blank"&gt;Refatorando frameworks - Parte 1 - Herança, composição e composição
recursiva&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esse video mostra uma refatoração de duas classes independentes para a
criação de um framework que reúne a parte comum entre elas em uma
estrutura mais flexível e extensível. Será mostrada a refatoração para o
uso de herança com um Template Method, em seguida será utilizado
composição e, por fim, a composição recursiva é demonstrada com o uso do
padrão Composite.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://youtu.be/83bFYWtx2dU" target="_blank"&gt;&lt;strong&gt;Padrões para criação de objetos&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Essa aula apresenta alguns problemas relacionados com a criação de
objetos em softwares orientados a objetos. Também apresenta padrões que
podem ser utilizados para atacar esses problemas, como Static Factory
Method, Singleton, Builder e Abstract Factory.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://youtu.be/9h8W09aTrNU" target="_blank"&gt;&lt;strong&gt;Refatorando frameworks - Parte 2 - Adicionando reflexão e
anotações&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=SQlxPchXm4s" target="_blank"&gt;Esse hands-on&lt;/a&gt;
continua o exemplo do video anterior mostrando como utilizar
reflexão para ler as propriedades da classe para a geração de um mapa.
Em seguida mostra como utilizar anotações para configurar a geração
desse mapa.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://youtu.be/51P-uRr0b0k" target="_blank"&gt;&lt;strong&gt;Refatorando frameworks - Parte 3 - Adicionando extensibilidade nas
anotações&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://youtu.be/9h8W09aTrNU" target="_blank"&gt;Esse hands-on&lt;/a&gt;
continua o exemplo do video anterior mostrando como criar um hotspot utilizando
anotações, permitindo que a aplicação possa criar novas anotações que
geram um novo comportamento no framework.&lt;/p&gt;
&lt;p&gt;Recomendo todos a &lt;a href="https://www.youtube.com/channel/UCCUxbxaPefOjgD14-7UbjVg"&gt;assinarem o
canal&lt;/a&gt;
e acompanharem o conteúdo.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Como desinstalar o Oracle completamente</title><link href="https://dicasdeprogramacao.com.br/como-desinstalar-o-oracle-completamente/" rel="alternate"></link><published>2014-07-31T00:00:00-03:00</published><updated>2014-07-31T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2014-07-31:/como-desinstalar-o-oracle-completamente/</id><summary type="html">&lt;p&gt;O
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;SGBD&lt;/a&gt;
Oracle, um dos melhores do mercado, é um software criado para ser
utilizados em servidores robustos de empresas com grandes bancos de
dados. Entretanto podemos instalá-lo em nosso computador pessoal,
obviamente para fins de desenvolvimento e estudo.&lt;/p&gt;
&lt;p&gt;Já …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;SGBD&lt;/a&gt;
Oracle, um dos melhores do mercado, é um software criado para ser
utilizados em servidores robustos de empresas com grandes bancos de
dados. Entretanto podemos instalá-lo em nosso computador pessoal,
obviamente para fins de desenvolvimento e estudo.&lt;/p&gt;
&lt;p&gt;Já publiquei aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; um artigo ensinando
como instalar o Oracle no windows para criar um ambiente de estudos de
banco de dados, inclusive dou dicas de como desabilitar a execução do
oracle quando não estamos mais utilizando, isso ajuda muito o desempenho
do seu computador.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/" target="_blank" title="Como criar um ambiente para estudar Banco de Dados e SQL"&gt;Veja como instalar o Oracle XE no Windows para estudar bancos de
dados e
SQL&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mas quando não queremos mais o Oracle instalado no nosso computador,
talvez porque você não precise mais estudar banco de dados e SQL ou por
qualquer outro motivo, vem a questão: como desinstalar completamente o
Oracle? Adianto que não é uma desinstalação simples como você está
acostumado, não basta simplesmente abrir o "Adicionar e Remover
programas" do Windows e desinstalar o Oracle.&lt;/p&gt;
&lt;p&gt;No passado eu tive problemas para desinstalar o Oracle do meu
computador. Vou mostrar como faço passo-a-passo para desinstalar
completamente o Oracle do Windows ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Importante!&lt;/strong&gt; Os passos apresentados aqui edita o registro do Windows
e desinstala todos os produtos do Oracle completamente. Isso pode ser
perigoso, um erro cometido na edição do registro pode causar danos
irreparáveis ao seu sistema operacional. &lt;span
style="text-decoration: underline;"&gt;Portando seja muito cuidadoso ao
editar o registro do Windows.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Obs.: As imagens ilustradas representa os produtos Oracle instalados
no meu computador, no seu caso pode ser diferente.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Passo-a-passo para desinstalar o Oracle completamente&lt;/h2&gt;
&lt;h3&gt;1. Desinstale os produtos Oracle através do OUI.&lt;/h3&gt;
&lt;p&gt;Acesse o Oracle Universal Installer no menu iniciar de desinstale todos
os componentes Oracle.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Desinstalar Oracle Universal
Installer" class="aligncenter" src="/images/como-desinstalar-o-oracle-completamente/Desinstalar-Oracle-Universal-Installer.png"&gt;&lt;/p&gt;
&lt;h3&gt;2. Abra o Editor de Registro do Windows.&lt;/h3&gt;
&lt;p&gt;Para abrir o Editor de Registro do Windows clique no Menu
Iniciar-&amp;gt;Executar (ou use a combinação de teclas "Windows"+R), digite
o comando "regedit" e tecle ENTER. &lt;img alt="executar
regedit" class="aligncenter" src="/images/como-desinstalar-o-oracle-completamente/executar-regedit.png"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;LEMBRANDO! Muito cuidado com o que você exclui no registro. Siga
&lt;strong&gt;cuidadosamente&lt;/strong&gt; os passos a seguir.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;3. Exclua a chave de registro HKEY_LOCAL_MACHINE/SOFTWARE/Oracle.&lt;/h3&gt;
&lt;p&gt;Esta chave contém entradas de registro para todos os produtos Oracle.
&lt;img alt="excluir chave de registro do
Oracle" class="aligncenter" src="/images/como-desinstalar-o-oracle-completamente/excluir-chave-de-registro-do-Oracle.png"&gt;&lt;/p&gt;
&lt;h3&gt;4. Se você estiver usando um Windows 64-bits, exclua também a chave de registro HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Oracle.&lt;/h3&gt;
&lt;p&gt;&lt;img alt="excluir chave de registro do Oracle
2" class="aligncenter" src="/images/como-desinstalar-o-oracle-completamente/excluir-chave-de-registro-do-Oracle-2.png"&gt;&lt;/p&gt;
&lt;h3&gt;5. Exclua todas as referências para serviços Oracle dentro desta parte do registro: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/.&lt;/h3&gt;
&lt;p&gt;Deve ser fácil identificar os nomes dos serviços que começam com "Ora".
&lt;img alt="excluir chave de registro dos serviços
Oracle" class="aligncenter" src="/images/como-desinstalar-o-oracle-completamente/excluir-chave-de-registro-dos-serviços-Oracle.png"&gt;&lt;/p&gt;
&lt;h3&gt;6. Reinicie o seu computador.&lt;/h3&gt;
&lt;h3&gt;7. Exclua a pasta "C:\Oracle", ou a pasta configurada como ORACLE_BASE.&lt;/h3&gt;
&lt;p&gt;No meu caso, o ORACLE_BASE era a pasta "C:\app\oracle".&lt;/p&gt;
&lt;h3&gt;8. Exclua a pasta "C:\Program Files\Oracle".&lt;/h3&gt;
&lt;p&gt;Se vocês estiver usando um Windows 64-bits, exclua também a pasta
"C:\Program Files (x86)\Oracle".&lt;/p&gt;
&lt;h3&gt;9. Exclua a pasta do Oracle do menu iniciar.&lt;/h3&gt;
&lt;p&gt;Provavelmente seja a pasta "C:\ProgramData\Microsoft\Windows\Start
Menu\Programs\".&lt;/p&gt;
&lt;h3&gt;10. Esvazie a pasta "C:\Temp".&lt;/h3&gt;
&lt;h3&gt;11. Esvazie a Lixeira.&lt;/h3&gt;
&lt;p&gt;A partir de agora, sua máquina estará completamente sem o Oracle.&lt;/p&gt;
&lt;p&gt;Não custa lembrar... Muito cuidado ao editar o registro do Windows. Um
erro pode causar danos irreversíveis ao seu Sistema Operacional.&lt;/p&gt;
&lt;p&gt;Espero que isso ajude!&lt;/p&gt;</content><category term="Banco de dados"></category><category term="Oracle"></category><category term="Instalação"></category></entry><entry><title>Por quê aprender a programar?</title><link href="https://dicasdeprogramacao.com.br/por-que-aprender-a-programar/" rel="alternate"></link><published>2014-05-14T00:00:00-03:00</published><updated>2014-05-14T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2014-05-14:/por-que-aprender-a-programar/</id><summary type="html">&lt;p&gt;Apesar de parecer intimidante no começo, programar não é tão complicado
como muitos pensam. Na verdade, da mesma forma como ler, escrever e
fazer cálculos básicos, programação é a nova disciplina básica para
alfabetização.&lt;/p&gt;
&lt;p&gt;Muitas pessoas pensam que programação é …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Apesar de parecer intimidante no começo, programar não é tão complicado
como muitos pensam. Na verdade, da mesma forma como ler, escrever e
fazer cálculos básicos, programação é a nova disciplina básica para
alfabetização.&lt;/p&gt;
&lt;p&gt;Muitas pessoas pensam que programação é só para nerds, uns caras malucos
que ficam o dia inteiro na frente do computador fazendo “não sei o quê”.
Isso é natural, principalmente entre as pessoas mais velhas que
cresceram sem o contato com a tecnologia atual. Tenho uma convicção de
que daqui a uns 10 ou 20 anos, programação será ensinado nas escolas
como uma coisa tão básica quanto ler, escrever e fazer cálculos básicos
como soma, subtração, multiplicação e divisão.&lt;/p&gt;
&lt;h2&gt;Software está em tudo!&lt;/h2&gt;
&lt;p&gt;&lt;img alt="aprender
programação" class="alignright" src="/images/por-que-aprender-a-programar/criancas-programando-300x200.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Já parou pra pensar na quantidade de equipamentos que estamos
diretamente em contato e que são controlados por softwares?
Calculadoras, computadores, celulares, smartphones, tablets, óculos,
relógios, internet, TVs, micro-ondas, geladeiras, caixa eletrônicos,
linhas de produção, satélites, carros, impressoras (3D), letreiros
digitais, drones, câmeras, semáforos, e mais um monte de coisa que eu
ficaria horas (dias?) enumerando...&lt;/p&gt;
&lt;p&gt;Hoje em dia tudo a nossa volta tem
“inteligência”. E tudo é controlado por ... &lt;strong&gt;Softwares!&lt;/strong&gt; Os
dispositivos que são controlados por softwares estão por toda parte!
Agricultura, manufatura, transporte, venda, agropecuária, medicina, etc.
Atividades onde você menos imagina têm software! Isso tudo falando só do
presente, deixo a sua imaginação livre para tirar suas próprias
conclusões sobre o futuro.&lt;/p&gt;
&lt;p&gt;Diferentemente do que muitos pensam, programação não é um monte de
código que poucos conseguem entender. No fundo, programar é ensinar uma
máquina a resolver problemas. Todos nós resolvemos problemas e tomamos
decisões o tempo todo! Programação é uma forma de automatizar decisões e
atividades dando comandos para que um equipamento eletrônico execute a
tarefa autonomamente.&lt;/p&gt;
&lt;h2&gt;Programação melhora o mundo!&lt;/h2&gt;
&lt;p&gt;Aprender programação é uma forma de descobrir um mundo novo cheio de
possibilidades. A cabeça do programador ferve de ideias de softwares
legais que se pode fazer. Eu me divirto muito programando. Sem contar da
satisfação que é ver a cara do usuário ao usar pela primeira vez o
software que você desenvolveu e que resolve o problema que ele tinha. É
muito gratificante!&lt;/p&gt;
&lt;p&gt;Hoje em dia com a possibilidade de criar softwares para dispositivos
cada vez mais portáteis - smartphones, tables, óculos, relógios, etc -
podemos utilizar informações que o usuário nem imagina que fornece, e
criar softwares que auxiliam as pessoas em diferentes aspectos.&lt;/p&gt;
&lt;p&gt;Talvez você já tenha percebido o quanto é útil um software como o
&lt;a href="https://www.waze.com/pt-BR" target="_blank" title="Wase - Aplicativo de trânsito e navegação"&gt;Waze&lt;/a&gt;, que
mostra em tempo real, que a rua que você pretendia passar está
congestionada por causa de um acidente de trânsito. Aliás, num futuro
(não tão distante) da tecnologia
os softwares poderão ser secretários pessoais superinteligentes e tudo
(tudo mesmo!) a nossa volta ser controlado por softwares.&lt;/p&gt;
&lt;h2&gt;A atividade básica do futuro&lt;/h2&gt;
&lt;p&gt;&lt;img alt="aprender programação
inglês" class="alignleft" src="/images/por-que-aprender-a-programar/caneta-codigo-300x200.jpg"&gt;
Não precisa pensar muito para
saber que a demanda por profissionais que sabem programar será
altíssima em poucos anos. O mercado atual já sofre com a falta desses
profissionais. Mais que isso, programação tende a ser uma atividade tão
básica quanto dirigir um carro.&lt;/p&gt;
&lt;p&gt;Para fazer uma analogia, os primeiros carros automotores construídos no
início do século passado, receberam um olhar de desconfiança das pessoas
que pensavam que só ricos teriam condições de pagar um profissional para
manusear o automóvel. Hoje saber dirigir é uma atividade básica entre
adultos.&lt;/p&gt;
&lt;p&gt;Muitos pensam que só quem pode pagar um profissional pode
construir softwares, mas a tendencia é acontecer o mesmo que aconteceu
com os carros. Ao invés das pessoas contratarem um programador
(motorista), elas mesmas criarão os próprios softwares (dirigir o
próprio carro).&lt;/p&gt;
&lt;p&gt;A demanda por programadores tem crescido mais que a quantidade de
programadores que estão se profissionalizando. A falta de profissionais
só está aumentando no mercado! Nos Estados Unidos as grandes empresas de
tecnologia como Microsoft, Google, Facebook, Twitter têm investido alto
para conseguir ter os melhores profissionais, apostam em oferecer o
melhor ambiente de trabalho.&lt;/p&gt;
&lt;p&gt;O problema agora é colocar o ensino de programação nas escolas. Com isso
tem surgido algumas iniciativas para incentivar o ensino de programação.
Um dos grandes exemplos disso é a
organização &lt;a href="http://code.org/" target="_blank" title="Code.org"&gt;code.org&lt;/a&gt;, como pode ser visto
no vídeo abaixo.&lt;/p&gt;
&lt;iframe class="wt-video aligncenter" width="100%" height="420" src="http://www.youtube.com/embed/mHW1Hsqlp6A?wmode=transparent" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>DICA: Os melhores livros sobre programação!</title><link href="https://dicasdeprogramacao.com.br/os-melhores-livros-sobre-programacao/" rel="alternate"></link><published>2013-12-19T00:00:00-02:00</published><updated>2013-12-19T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-12-19:/os-melhores-livros-sobre-programacao/</id><summary type="html">&lt;p&gt;Eu sei a dificuldade que é aprender desenvolvimento de softwares, ainda
mais utilizando aqueles livros velhos em inglês. Pra piorar, geralmente
quem tá iniciando a carreira com programação não sabe muito inglês, eu
mesmo comecei com um inglês péssimo! Aí …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Eu sei a dificuldade que é aprender desenvolvimento de softwares, ainda
mais utilizando aqueles livros velhos em inglês. Pra piorar, geralmente
quem tá iniciando a carreira com programação não sabe muito inglês, eu
mesmo comecei com um inglês péssimo! Aí, a gente tem que recorrer aos
livros traduzidos, cheios de erros de tradução e com uma linguagem
difícil de entender. Só com muita força de vontade mesmo!&lt;/p&gt;
&lt;p&gt;Mas, pra felicidade geral da nação, finalmente surgiram excelentes
&lt;strong&gt;livros sobre programação&lt;/strong&gt; em português, escritos por profissionais
com experiência no assunto, autores que sabem dessa dificuldade. Deixo
aqui uma ótima dica pra &lt;span style="line-height: 1.5em;"&gt;você que está
aprendendo programação, conheça os livros da &lt;a href="http://bit.ly/19u5sEu" target="_blank" title="Casa do Código, Livros para o programador"&gt;Casa do
Código&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;A Casa do Código&lt;/h2&gt;
&lt;p&gt;Na minha opinião, hoje a Casa do Código é a melhor opção para comprar
livros sobre programação. Eu conheço esse mercado e sei que os autores
fazem parte dos profissionais mais "ativos" da área. Os autores da &lt;a href="http://bit.ly/19u5sEu" target="_blank" title="Casa do Código, Livros para o programador"&gt;Casa
do
Código&lt;/a&gt; participam
ativamente na comunidade com Open Source, listas de discussão, grupos,
etc.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bit.ly/19u5sEu" target="_blank"&gt;&lt;img alt="Casa do
Código" class="aligncenter" src="/images/os-melhores-livros-sobre-programacao/casa-do-codigo.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O mais legal é que eles utilizam uma das técnicas mais importantes em
desenvolvimento de softwares no próprio processo de editoração de
livros! &lt;strong&gt;Integração contínua&lt;/strong&gt;. Isso mesmo! Eles utilizam o Jenkins (um
sistema para implementar integração contínua), e através do github, eles
recebem as mudanças dos autores para gerar o livro a cada novo commit.
Dessa forma o feedback é curto e os livros terão sempre atualizações,
correções e novidades que vão direto para o leitor.&lt;/p&gt;
&lt;p&gt;Um outro diferencial da editora é que, diferente das editoras
tradicionais que ainda resistem aos ebooks, eles encaram a versão
digital com prioridade. A gente pode comprar o ebook e ler em qualquer
computador, pois eles disponibilizam em PDF, .mobi (para o Kindle) e o
.epub (para o iPad). A proposta é não deixar o leitor preso a nenhuma
plataforma, o objetivo é que aprendamos, rápido e agora!&lt;/p&gt;
&lt;p&gt;Ah! Eles também oferecem o livro impresso se você quiser, e dão a opção
de comprar apenas o livro digital, apenas o livro impresso, ou ambos.&lt;/p&gt;
&lt;p&gt;Eu já li alguns livros da editora e comprovo a ótima qualidade, é por
isso que eles não param de crescer, a cada dia surgem novos novos livros
que me deixam com a mão coçando pra comprar.&lt;/p&gt;
&lt;h2&gt;Sugestão de livros&lt;/h2&gt;
&lt;p&gt;Muitas pessoas me perguntam como começar a programar, outros pedem
opinião de quais linguagens aprender. Como muitos já sabem, indico
começar pelo mais básico possível. É importantíssimo saber lógica de
programação antes de querer programar em qualquer linguagem de
programação.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;&lt;strong&gt;Quer aprender programação? Saiba qual a melhor
linguagem!&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Confirmando essa ideia, vai aí uma dica de livro para começar com
programação:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bit.ly/1Emf2Tp" target="_blank"&gt;&lt;img alt="Livro: Lógica de
Programaçãp" class="aligncenter" src="/images/os-melhores-livros-sobre-programacao/LivroLogicaDeProgramacao.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Também tem aqueles que já aprenderam lógica de programação e querem
avançar no estudo. &lt;strong&gt;Java&lt;/strong&gt; é uma das melhores linguagens para se
investir hoje em dia. Há muitas oportunidades de emprego para quem sabe
Java, seja pra ambientes desktop, web, mobile (android) ou Arduino, que
tá chegando com tudo com a Internet das coisas.&lt;/p&gt;
&lt;p&gt;A Casa do Código já tem uma &lt;a href="http://bit.ly/1yU0Ex0" target="_blank" title="Livros sobre java da Casa do Código"&gt;coleção de livros sobre
java&lt;/a&gt;
impressionante!&lt;/p&gt;
&lt;p&gt;Quem quer aprender sobre Desenvolvimento Ágil, Front End, Games, Mobile
e Ruby, também encontra livros de excelente qualidade por lá ...&lt;/p&gt;
&lt;p&gt;Investir em conhecimento, é uma das melhores formas de investimento.
Ninguém pode tirar o conhecimento de você depois. Por isso sempre digo:
leia livros, faça cursos, estude, pratique ...&lt;/p&gt;
&lt;p&gt;Fica essa dica: Conheça os livros da &lt;a href="http://bit.ly/19u5sEu" target="_blank" title="Casa do Código, Livros para o programador"&gt;Casa do
Código&lt;/a&gt;!&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="Livros"></category></entry><entry><title>5 funções curingas em PHP que todo iniciante em programação deve saber</title><link href="https://dicasdeprogramacao.com.br/5-funcoes-curingas-em-php-que-todo-iniciante-em-programacao-deve-saber/" rel="alternate"></link><published>2013-12-11T00:00:00-02:00</published><updated>2013-12-11T00:00:00-02:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-12-11:/5-funcoes-curingas-em-php-que-todo-iniciante-em-programacao-deve-saber/</id><summary type="html">&lt;p&gt;Este é um &lt;em&gt;Guest Post&lt;/em&gt; escrito pela equipe da
&lt;a href="http://fastcom.com.br/" title="FastCom Marketing Digital e Performance"&gt;FastCom&lt;/a&gt;
para o &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;, se você também tem interesse em
escrever um Guest Post para o nosso blog basta entrar em
&lt;a href="http://www.dicasdeprogramacao.com.br/contato/" title="Contato"&gt;contato&lt;/a&gt;. A
FastCom é uma empresa que presta …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Este é um &lt;em&gt;Guest Post&lt;/em&gt; escrito pela equipe da
&lt;a href="http://fastcom.com.br/" title="FastCom Marketing Digital e Performance"&gt;FastCom&lt;/a&gt;
para o &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;, se você também tem interesse em
escrever um Guest Post para o nosso blog basta entrar em
&lt;a href="http://www.dicasdeprogramacao.com.br/contato/" title="Contato"&gt;contato&lt;/a&gt;. A
FastCom é uma empresa que presta serviços orientados de marketing
digital, criação de sites com foco em SEO para e-commerces, ads e mídias
sociais.&lt;/p&gt;
&lt;p&gt;É fato. Mesmo quem está dando os primeiros passos na área de
desenvolvimento web sabe que é necessário ter sempre à mão pequenos
truques da programação para otimizar o tempo de trabalho. Por isso, na
postagem de hoje, trouxemos uma série de funções úteis para você que
está começando a desenvolver em PHP - com certeza a linguagem de
programação mais utilizada atualmente para desenvolvimento web -, onde
você poderá ter uma espécie de ‘canivete suíço’ inicial, para utilizar
em seus futuros projetos.&lt;/p&gt;
&lt;p&gt;&lt;img alt="funções
php" class="size-full aligncenter" src="/images/5-funcoes-curingas-em-php-que-todo-iniciante-em-programacao-deve-saber/php.jpg"&gt;&lt;/p&gt;
&lt;p&gt;O Hypertext Preprocessor (PHP) é muito versátil e com linhas de códigos
podemos fazer muitas coisas quando o assunto é o meio digital. Ele,
inclusive, pode ser usado na maioria dos sistemas operacionais e, aqui,
elencamos algumas funções básicas e mostramos de forma prática situações
nas quais você pode usar os scripts. Na internet, você encontra muitos
outros, porém, sem os exemplos mostrados a seguir:&lt;/p&gt;
&lt;h2&gt;1. Como mostrar dados de uma string XML?&lt;/h2&gt;
&lt;p&gt;O Twitter, Facebook e alguns serviços do Google passam informações por
meio de suas APIs. Utilizando XML e JSON, podemos mostrar as informações
de um XML através da seguinte função:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="cp"&gt;$string_xml=&amp;quot;&amp;lt;?xml version=&amp;#39;1.0&amp;#39;?&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;users&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;user&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;398&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Joao&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;email&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;joao@ninguem.com&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;email&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;user&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;user&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;867&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Fulano&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;email&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;fulano@detal.com&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;email&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;user&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;users&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&amp;quot;;

//carrega a string xml usando a função
$xml =simplexml_load_string($string_xml);

//faz um look para cada ocorrência de &amp;quot;user&amp;quot;
foreach ($xml-&amp;gt;user as $user)
{
   //acessa atributo
   echo $user[&amp;#39;id&amp;#39;], &amp;#39;  &amp;#39;;
   //ocorrencias internas acessadas através do operador -&amp;gt;
   echo $user-&amp;gt;name, &amp;#39;  &amp;#39;;
   echo $user-&amp;gt;email, &amp;#39;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&amp;#39;;
}

?&amp;gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="cp"&gt;    // imprime o resultado&lt;/span&gt;
&lt;span class="cp"&gt;    echo $xml;&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O resultado desse código PHP você pode ver aqui:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado a função mostra xml" src="/images/5-funcoes-curingas-em-php-que-todo-iniciante-em-programacao-deve-saber/mostra-xml.png" title="Exemplo que mostra as informações de um XML"&gt;.&lt;/p&gt;
&lt;h2&gt;2. Como imprimir resultados de uma string JSON sem loop?&lt;/h2&gt;
&lt;p&gt;APIs como Flickr, Twitter e outros serviços populares utilizam esse
formato. Você pode utilizar, por exemplo, para mostrar os tweets que
contém uma determinada hashtag, pois você pode desenvolver uma aplicação
que guarda as ocorrências de determinada hashtag durante um ano, e
depois monta um gráfico para saber quando elas ocorrem mais. Ou comparar
a semelhança dos trending topics cada vez que eles mudam, ou um gráfico
pra ver quais países digitam a hashtag #justinbieber nos dias de
semana, após as 20h.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="cp"&gt;    $json_string=&amp;#39;{&amp;quot;id&amp;quot;:1,&amp;quot;nome&amp;quot;:&amp;quot;joao&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;joao@ninguem.com&amp;quot;,&amp;quot;interesses&amp;quot;:[&amp;quot;wordpress&amp;quot;,&amp;quot;php&amp;quot;]} &amp;#39;;&lt;/span&gt;
&lt;span class="cp"&gt;    $obj = json_decode($json_string);&lt;/span&gt;
&lt;span class="cp"&gt;    echo $obj-&amp;gt;nome; //imprime o nome&lt;/span&gt;
&lt;span class="cp"&gt;    echo &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    echo $obj-&amp;gt;interesses[1]; //improme o segundo interesse = php&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O resultado desse código PHP você pode
ver aqui:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado da função Mostra Json" src="/images/5-funcoes-curingas-em-php-que-todo-iniciante-em-programacao-deve-saber/mostra-json.png" title="Exemplo que mostra as informações de um JSON sem loop"&gt;.&lt;/p&gt;
&lt;h2&gt;3. Como listar o conteúdo de uma pasta?&lt;/h2&gt;
&lt;p&gt;Você pode utilizar essa função em uma aplicação onde você gostaria de
listar o conteúdo de uma pasta onde estão seus relatórios e imagens de
uma determinada pasta. Listar os arquivos sempre é o primeiro passo para
você começar a mensurar seus gastos com servidor (CPU, memória, banda e
disco);&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="cp"&gt;    //declara a função&lt;/span&gt;
&lt;span class="cp"&gt;    function list_files($dir)&lt;/span&gt;
&lt;span class="cp"&gt;    {&lt;/span&gt;
&lt;span class="cp"&gt;        // verifica se a é um diretório&lt;/span&gt;
&lt;span class="cp"&gt;        if(is_dir($dir))&lt;/span&gt;
&lt;span class="cp"&gt;        {&lt;/span&gt;

&lt;span class="cp"&gt;            //abre o diretorio&lt;/span&gt;
&lt;span class="cp"&gt;            if($handle = opendir($dir))&lt;/span&gt;
&lt;span class="cp"&gt;            {&lt;/span&gt;

&lt;span class="cp"&gt;                // percorre os registros do diretorio&lt;/span&gt;
&lt;span class="cp"&gt;                while(($file = readdir($handle)) !== false)&lt;/span&gt;
&lt;span class="cp"&gt;                {&lt;/span&gt;

&lt;span class="cp"&gt;                    if($file != &amp;quot;.&amp;quot; &amp;amp;&amp;amp; $file != &amp;quot;..&amp;quot; &amp;amp;&amp;amp; $file != &amp;quot;Thumbs.db&amp;quot;)&lt;/span&gt;
&lt;span class="cp"&gt;                    {&lt;/span&gt;
&lt;span class="cp"&gt;                        //monta um link com o nome do arquivo&lt;/span&gt;
&lt;span class="cp"&gt;                        echo &amp;#39;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;&amp;#39;.$dir.$file.&amp;#39;&amp;quot;&amp;gt;&amp;#39;.$file.&amp;#39;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;#39;.&amp;quot;n&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;                    }&lt;/span&gt;
&lt;span class="cp"&gt;                }&lt;/span&gt;
&lt;span class="cp"&gt;                closedir($handle);&lt;/span&gt;
&lt;span class="cp"&gt;            }&lt;/span&gt;
&lt;span class="cp"&gt;        }&lt;/span&gt;
&lt;span class="cp"&gt;    }&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="cp"&gt;&amp;lt;?&lt;/span&gt;

&lt;span class="cp"&gt;    $root = &amp;#39;.&amp;#39;;&lt;/span&gt;

&lt;span class="cp"&gt;    list_files($root);&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Como mostrar o IP real do visitante?&lt;/h2&gt;
&lt;p&gt;Você pode utilizar essa informação para mostrar dados personalizados
baseados no IP do visitante. Vale ressaltar que tal script não
funcionará em casos nos quais o usuário usa navegadores anônimos, como o
TOR.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="cp"&gt;    //declara função&lt;/span&gt;
&lt;span class="cp"&gt;    function pegaip()&lt;/span&gt;
&lt;span class="cp"&gt;    {&lt;/span&gt;
&lt;span class="cp"&gt;        //verifica se não é vazio&lt;/span&gt;
&lt;span class="cp"&gt;        if (!empty($_SERVER[&amp;#39;HTTP_CLIENT_IP&amp;#39;]))&lt;/span&gt;
&lt;span class="cp"&gt;        {&lt;/span&gt;
&lt;span class="cp"&gt;            $ip=$_SERVER[&amp;#39;HTTP_CLIENT_IP&amp;#39;];&lt;/span&gt;
&lt;span class="cp"&gt;        }&lt;/span&gt;
&lt;span class="cp"&gt;        //verifica se vem de um proxy&lt;/span&gt;
&lt;span class="cp"&gt;        elseif (!empty($_SERVER[&amp;#39;HTTP_X_FORWARDED_FOR&amp;#39;]))&lt;/span&gt;
&lt;span class="cp"&gt;        {&lt;/span&gt;
&lt;span class="cp"&gt;            $ip=$_SERVER[&amp;#39;HTTP_X_FORWARDED_FOR&amp;#39;];&lt;/span&gt;
&lt;span class="cp"&gt;        }&lt;/span&gt;
&lt;span class="cp"&gt;        else&lt;/span&gt;
&lt;span class="cp"&gt;        {&lt;/span&gt;
&lt;span class="cp"&gt;            $ip=$_SERVER[&amp;#39;REMOTE_ADDR&amp;#39;];&lt;/span&gt;
&lt;span class="cp"&gt;        }&lt;/span&gt;
&lt;span class="cp"&gt;        //retorna ip&lt;/span&gt;
&lt;span class="cp"&gt;        return $ip;&lt;/span&gt;
&lt;span class="cp"&gt;    }&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="cp"&gt;    echo pegaip();&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O resultado desse código PHP você pode
ver aqui:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo que mostra como obter o IP real de um visitante do site." src="/images/5-funcoes-curingas-em-php-que-todo-iniciante-em-programacao-deve-saber/php-ip-real.png"&gt;&lt;/p&gt;
&lt;h2&gt;5. Como comparar duas strings?&lt;/h2&gt;
&lt;p&gt;Este PHP é usado para muitas finalidades, como, por exemplo, verificar
se as tags ‘title’ do seu site são iguais, ou efetuar qualquer tipo de
comparativo entre páginas do seu site.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="cp"&gt;    //atribui valor a string 1&lt;/span&gt;
&lt;span class="cp"&gt;    $string1 = &amp;quot;Programar usando php é muito legal&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    //atribui valor a string 2&lt;/span&gt;
&lt;span class="cp"&gt;    $string2 = &amp;quot;Programar usando php é muito chato&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    //compara 2 strings&lt;/span&gt;
&lt;span class="cp"&gt;    similar_text($string1, $string2, $quanto);&lt;/span&gt;
&lt;span class="cp"&gt;    //$quanto mostrará quantos % as 2 strings são iguais&lt;/span&gt;

&lt;span class="cp"&gt;    //imprime os resultados&lt;/span&gt;
&lt;span class="cp"&gt;    echo &amp;quot;As Strings:&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    echo &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    echo $string1;&lt;/span&gt;
&lt;span class="cp"&gt;    echo &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    echo &amp;quot;e&amp;lt;br /&amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    echo $string2;&lt;/span&gt;
&lt;span class="cp"&gt;    echo &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="cp"&gt;    echo &amp;quot;são &amp;quot;.$quanto.&amp;quot; % parecidas&amp;quot;;&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O resultado desse código PHP você pode
ver &lt;/p&gt;
&lt;p&gt;&lt;img alt="Exemplo que mostra como comparar duas strings" src="/images/5-funcoes-curingas-em-php-que-todo-iniciante-em-programacao-deve-saber/verifica-parecidas.png"&gt;.&lt;/p&gt;
&lt;p&gt;Estas funções são básicas e servem como base para seus projetos em
desenvolvimento e &lt;a href="https://fastcom.com.br/solucoes/desenvolvimento-web/" target="_blank"&gt;criação de
sites&lt;/a&gt;. Em caso de
dúvidas, entre em contato com a gente!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Fonte:&lt;/em&gt; &lt;a href="http://fastcom.com.br/"&gt;&lt;em&gt;FastCom&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;
&lt;em&gt;Imagem: Getty Images&lt;/em&gt;&lt;/p&gt;</content><category term="{ Dicas de Programação }"></category><category term="PHP"></category></entry><entry><title>Entenda como funciona o código de cores RGB</title><link href="https://dicasdeprogramacao.com.br/entenda-como-funcionam-os-codigos-de-cores-rgb/" rel="alternate"></link><published>2013-08-12T00:00:00-03:00</published><updated>2013-08-12T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-08-12:/entenda-como-funcionam-os-codigos-de-cores-rgb/</id><summary type="html">&lt;p&gt;Em muitas áreas de aplicação nós precisamos trabalhar com cores, mesmo
que não seja programando. Por exemplo, configurar a cor de um site ou
editar uma imagem com o Photoshop, Corel draw, Gimp, paint, etc. Geralmente
essas cores são representadas …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Em muitas áreas de aplicação nós precisamos trabalhar com cores, mesmo
que não seja programando. Por exemplo, configurar a cor de um site ou
editar uma imagem com o Photoshop, Corel draw, Gimp, paint, etc. Geralmente
essas cores são representadas por um código de 6 caracteres hexadecimais
(de 0 a F) precedido do caracter "&lt;strong&gt;#&lt;/strong&gt;", por exemplo: '&lt;strong&gt;#68B46D&lt;/strong&gt;'.&lt;/p&gt;
&lt;p&gt;Esse código louco pode parecer estranho a primeira vista,
mas é assim que as cores são tratadas no contexto atual da tecnologia.
Estamos falando do código RGB de cores, o mais usado na WEB.&lt;/p&gt;
&lt;p&gt;Pense na sua experiência atual.
Dado um código web de cores (Por exemplo: #13A47B), você sabe descobrir que cor é essa?
E o contrário? Dada uma cor, você sabe descobrir o código RGB dela?&lt;/p&gt;
&lt;p&gt;Neste artigo vou explicar como funciona esse código e, de forma simples, &lt;strong&gt;como descobrir o código de uma cor e vice-versa&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Como as cores são formadas?&lt;/h2&gt;
&lt;p&gt;&lt;img alt="cores
rgb" class="alignleft" src="/images/entenda-como-funcionam-os-codigos-de-cores-rgb/cores-rgb.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Existem duas maneiras de se formar uma cor, uma delas é através de pigmentação e
outra é através da luz. A primeira é muito utilizada em artes plásticas,
onde se mistura cores para formar uma outra.
Nós aprendemos isso na escola primária, quando misturamos um guache azul
com um amarelo e formamos um verde. Lembra?&lt;/p&gt;
&lt;p&gt;Mas a forma utilizada na tecnologia é a formação de cores por luz.
Na formação de cores por luz, as cores são formadas a partir de três cores primarias.&lt;/p&gt;
&lt;p&gt;As três cores primárias mais conhecidas são: Vermelho,
Verde e Azul, ou RGB (do inglês, Red-Green-Blue).&lt;/p&gt;
&lt;p&gt;A partir delas pode-se criar as demais cores.&lt;/p&gt;
&lt;p&gt;As cores são criadas na computação com a combinação de valores de RGB.
Cada uma dessas cores primárias recebe um valor de intensidade que varia
de 0 a 255.&lt;/p&gt;
&lt;p&gt;O branco é quando se tem o maior valor para as 3 cores, ou seja,
255 para Red, Green e Blue.
E o preto é formado quando se tem o valor 0 para essas 3 cores.&lt;/p&gt;
&lt;p&gt;Então para se obter a cor branca, precisamos de 255 Red (vermelho),
255 Green (Verde) e 255 Blue (Azul).
E para se obter o preto precizamos de 0 Red, 0 Green e 0 Blue.&lt;/p&gt;
&lt;h2&gt;A formação do código RGB&lt;/h2&gt;
&lt;p&gt;Um código RGB é uma representação dos valores das cores primárias
juntas, só que em Hexadecimal.&lt;/p&gt;
&lt;p&gt;Podemos perceber que os códigos RGB são sempre formados com 6 dígitos,
o que dá 2 dígitos para cada cor.&lt;/p&gt;
&lt;p&gt;Se em 2 dígitos hexadecimais conseguimos valores de 00 a FF, então conseguimos
representar valores de 0 a 255 da base decimal, concorda?&lt;/p&gt;
&lt;p&gt;Para entender melhor, veja o meu artigo sobre &lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/as-10-conversoes-numericas-mais-utilizadas-na-computacao/" target="_blank" title="As 10 conversões numéricas mais utilizadas na computação"&gt;As 10 conversões numéricas mais utilizadas na
computação.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Continuando o raciocínio, se o branco é formado com a combinação dos maiores valores para RGB (255 para Red, 255 para Green e 255 para Blue), o
código RGB do branco é: #FFFFFF.&lt;/p&gt;
&lt;p&gt;Ou seja, 255 vermelho (FF), 255 verde (FF) e 255 Azul (FF).
Juntando tudo com o # do início, temos o #FFFFFF.&lt;/p&gt;
&lt;p&gt;O preto seria #000000. Certo? Tem alguma dúvida sobre isso? Comente lá em baixo.&lt;/p&gt;
&lt;p&gt;Agora olhando pra figura que apresentei no início que mostra a combinação de cores
primárias para formar outras cores. Veja ela novamente.&lt;/p&gt;
&lt;p&gt;&lt;img alt="cores
rgb" class="aligncenter" src="/images/entenda-como-funcionam-os-codigos-de-cores-rgb/cores-rgb.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Agora me responda, como seria a representação da cor amarela em código RGB?&lt;/p&gt;
&lt;p&gt;Bom, percebemos que o amarelo é formado com a combinação do Verde e do
Vermelho. Está vendo na imagem?&lt;/p&gt;
&lt;p&gt;Então o amarelo é formado puramente pelo Verde (Green) e pelo Vermelho (Red).&lt;/p&gt;
&lt;p&gt;Então o código RGB do amarelo é #FFFF00. Ou seja, valores
máximos para R (Red) e G (Green) e 0 para o B (Blue).&lt;/p&gt;
&lt;p&gt;Deu pra entender né...?&lt;/p&gt;
&lt;h2&gt;Como descobrir a cor de um código RGB&lt;/h2&gt;
&lt;p&gt;Existem vários sites que fazem isso. Mas pra facilitar a sua vida eu
implementei aqui neste artigo um campo pra você ver a cor de um
código. Basta digitar o código no campo abaixo. Por exemplo #2C76D0.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Digite o código RGB aqui:&lt;/strong&gt;
&lt;input id="txtCor" type="text" value="#2C76D0" oninput="changeColor()"&gt;&lt;/input&gt;&lt;/p&gt;
&lt;div id="representacaoDaCor" style="background-color: #2c76d0; height:50px; width:300px;"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Lembre-se: o código é formado pelo caracter # acrescido de seis dígitos
que, dividido em tres representam Vermelho (Red), Verde (Gree) e Azul (Blue).&lt;/p&gt;
&lt;h2&gt;Como descobrir o código de uma cor&lt;/h2&gt;
&lt;p&gt;Agora que você já entendeu o conceito do código RGB, fica fácil
descobrir o código de uma cor, combinando os valores para &lt;strong&gt;Red-Green-Blue&lt;/strong&gt;.
Se você usa o Windows por exemplo, você pode usar o próprio paint pra isso.&lt;/p&gt;
&lt;p&gt;Vou descrever quais os passos para descobrir o código RGB de
uma cor a partir do seu computador, usando o windows.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Coloque a cor na tela do seu computador e pressione a
    tecla &lt;strong&gt;PRINT SCREEN&lt;/strong&gt;. (Pra fazer uma cópia da tela do seu computador)&lt;/li&gt;
&lt;li&gt;Abra o &lt;strong&gt;paint&lt;/strong&gt; e pressione &lt;strong&gt;Ctrl+V&lt;/strong&gt; pra colar a imagem da
    sua tela.&lt;/li&gt;
&lt;li&gt;Clique na ferramenta &lt;strong&gt;Selecionador de cores&lt;/strong&gt; do paint. (É esse
    ícone: &lt;img alt="selecionador de
    cores" src="/images/entenda-como-funcionam-os-codigos-de-cores-rgb/selecionador-de-cores.png"&gt;)&lt;/li&gt;
&lt;li&gt;Clique em cima da cor que deseja identificar.&lt;/li&gt;
&lt;li&gt;Clique no botão &lt;strong&gt;Editar cores.&lt;/strong&gt; (É esse ícone: &lt;img alt="editar cores no
    paint" src="/images/entenda-como-funcionam-os-codigos-de-cores-rgb/editar-cores.png"&gt;)&lt;/li&gt;
&lt;li&gt;Identifique os valores de Vermelho, Verde e Azul. Conforme
    apresentado na tela abaixo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="Vermelho Verde e Azul de uma
cor" class="aligncenter" src="/images/entenda-como-funcionam-os-codigos-de-cores-rgb/tela-que-identifica-os-valores-de-rgb.png"&gt;&lt;/p&gt;
&lt;p&gt;Esses números estão na base decimal. Pra gerar o código RGB é necessário
convertê-los para a base &lt;strong&gt;Hexadecimal&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para mais detalhes de como fazer essa conversão, acesse este post:&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/as-10-conversoes-numericas-mais-utilizadas-na-computacao/" target="_blank" title="As 10 conversões numéricas mais utilizadas na computação"&gt;As 10 conversões numéricas mais utilizadas na
computação.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sabido isso, você só precisa converter os valores de Red-Green-Blue para decimal e juntar tudo.&lt;/p&gt;
&lt;p&gt;Pra facilitar a sua vida eu também implementei neste artigo três campos
pra você digitar os números em decimal e obter o código RGB da cor.
Basta digitar abaixo os valores para vermelho, verde e azul e ver a cor correspondente.&lt;/p&gt;
&lt;p&gt;R =
&lt;input id="txtR" style="width: 30px;" type="text" value="27" oninput="changeRGB()"&gt;&lt;/input&gt;
G =
&lt;input id="txtG" style="width: 30px;" type="text" value="139" oninput="changeRGB()"&gt;&lt;/input&gt;
B =
&lt;input id="txtB" style="width: 30px;" type="text" value="61" oninput="changeRGB()"&gt;&lt;/input&gt;&lt;/p&gt;
&lt;div id="codigoRGB"&gt;
&lt;b&gt;Código RGB:&lt;/b&gt; \#1b8b3d
&lt;div style="background-color:#1b8b3d; height:50px; width:300px;"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;Curiosidade sobre o código RGB&lt;/h2&gt;
&lt;p&gt;Agora que você já sabe que o código #FFFFFF é a cor branca e o código
#000000 é a cor preta.&lt;/p&gt;
&lt;p&gt;Uma curiosidade sobre o código RGB é que quando
os valores são iguais para as três cores primárias, nós temos cores em
escala de cinza. Por exemplo, o código #5A5A5A é um cinza escuro, pois
está próximo do preto #000000. Já o código #B7B7B7 é um cinza mais
claro, pois está mais próximo do branco #FFFFFF.&lt;/p&gt;
&lt;p&gt;Espero que tenha gostado dessa dica. Entender como é formado o código
RGB é importante para fazer muitas coisas, principalmente se você quer
trabalhar com desenvolvimento Web.&lt;/p&gt;
&lt;p&gt;Bons estudos!&lt;/p&gt;
&lt;script type="text/javascript" src="/images/entenda-como-funcionam-os-codigos-de-cores-rgb/rgbscript.js"&gt;&lt;/script&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>O que são Funções e Procedimentos?</title><link href="https://dicasdeprogramacao.com.br/o-que-sao-funcoes-e-procedimentos/" rel="alternate"></link><published>2013-05-29T00:00:00-03:00</published><updated>2013-05-29T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-05-29:/o-que-sao-funcoes-e-procedimentos/</id><summary type="html">&lt;p&gt;Me responda essa pergunta: Você saberia fazer um algoritmo para calcular
a raiz quadrada de um número? Reflita um pouquinho sobre a complexidade
de tal algoritmo. E um algoritmo para gerar um número aleatório, você
faz ideia de como fazer …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Me responda essa pergunta: Você saberia fazer um algoritmo para calcular
a raiz quadrada de um número? Reflita um pouquinho sobre a complexidade
de tal algoritmo. E um algoritmo para gerar um número aleatório, você
faz ideia de como fazer? Bom, não são algoritmos tão triviais para se
implementar. Mas e se você precisar descobrir a raiz quadrada de um
número ou mesmo gerar um número aleatório no seu algoritmo, o que fazer?&lt;/p&gt;
&lt;p&gt;Aha! Já existem algoritmos que executam essas operações. O que
precisamos é apenas solicitar a execução desses algoritmos dentro do
nosso. Esse tipo de algoritmo que solicitamos a execução de dentro do
nosso algoritmo são chamados de &lt;strong&gt;funções&lt;/strong&gt; (ou &lt;strong&gt;procedimentos&lt;/strong&gt; caso
não retornem um resultado).&lt;/p&gt;
&lt;p&gt;&lt;img alt="função" class="aligncenter" src="/images/o-que-sao-funcoes-e-procedimentos/função.png"&gt;&lt;/p&gt;
&lt;h2&gt;Função ou Procedimento?&lt;/h2&gt;
&lt;p&gt;As &lt;strong&gt;funções&lt;/strong&gt; (&lt;strong&gt;functions&lt;/strong&gt;), também conhecidas como  sub-rotinas, são
muito utilizadas em programação. Um dos grandes benefícios é não
precisar copiar o código todas as vezes que precisar executar aquela
operação, além de deixar a leitura do código mais intuitiva. No exemplo
anterior, caso precisássemos descobrir a raiz quadrada de 10 números,
bastaria chamar a &lt;strong&gt;função&lt;/strong&gt; que calcula a raiz quadrada 10 vezes.&lt;/p&gt;
&lt;p&gt;Os &lt;strong&gt;procedimentos &lt;/strong&gt;(&lt;strong&gt;procedures&lt;/strong&gt;) diferem das funções apenas por não
retornarem resultado, imagine um procedimento que envia e-mail. Precisa
retornar resultado? Nos algoritmos apresentados aqui no &lt;strong&gt;{ Dicas de
Programação }&lt;/strong&gt; nós já utilizamos muitos &lt;strong&gt;procedimentos&lt;/strong&gt; sem perceber.
Por exemplo, para ler o valor digitado por um usuário nós já utilizamos
o procedimento &lt;strong&gt;LEIA&lt;/strong&gt; e para mostrar um texto na tela nós utilizamos o
procedimento &lt;strong&gt;ESCREVA&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Parâmetros&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Funções&lt;/strong&gt; (e &lt;strong&gt;procedimentos&lt;/strong&gt;) podem ou não receber parâmetros. No
caso da função de raiz quadrada, é necessário passar como parâmetro o
número que se deseja calcular a raiz, o procedimento &lt;strong&gt;ESCREVA&lt;/strong&gt;, requer
um texto como parâmetro para apresentar na tela do usuário.&lt;/p&gt;
&lt;h2&gt;Usando funções na prática!&lt;/h2&gt;
&lt;p&gt;Acho que já deu pra entender o que são funções e procedimentos, vamos
ver agora como utilizá-las. Abaixo a um algoritmo que calcula a
hipotenusa de um triângulo retângulo, dado os lados, utilizando a função
RAIZQ do
&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;Visualg&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Hipotenusa&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o lado A do triângulo retângulo: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o lado B do triângulo retângulo: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAIZQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Cálculo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;da&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hipotenusa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;utilizando&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FUNÇÃO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAIZQ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O valor da hipotenusa é: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Observe que utilizamos a função RAIZQ para calcular a raiz quadrada do
valor que passamos como parâmetro (valor entre parênteses) "a*a +
b*b", o valor retornado por essa função armazenamos na variável "c".&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" target="_blank" title="O que é variável e constante?"&gt;Saiba o que é uma
    variável&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Abaixo um exemplo da execução desse algoritmo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="resultado algoritmo
hipotenusa" class="aligncenter" src="/images/o-que-sao-funcoes-e-procedimentos/resultado-algoritmo-hipotenusa.png"&gt;&lt;/p&gt;
&lt;h2&gt;Criando as próprias Funções e Procedimentos&lt;/h2&gt;
&lt;p&gt;Para se criar uma &lt;strong&gt;função&lt;/strong&gt; no Visualg utilizamos a seguinte sintaxe:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;funcao &amp;lt;nome-de-função&amp;gt; [(&amp;lt;seqüência-de-declarações-de-parâmetros&amp;gt;)]: &amp;lt;tipo-de-dado&amp;gt;
// Seção de Declarações Internas
inicio
// Seção de Comandos
fimfuncao
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Já para criar um procedimento no Visualg utilizamos a seguinte sintaxe:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;proc&lt;/span&gt;&lt;span class="nv"&gt;edimento&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;nome&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;de&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;procedimento&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;seqüência&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;de&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;declarações&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;de&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;parâmetros&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Seção&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Declarações&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Internas&lt;/span&gt;
&lt;span class="nf"&gt;inicio&lt;/span&gt;
&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Seção&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Comandos&lt;/span&gt;
&lt;span class="nf"&gt;fimprocedimento&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para exemplificar a criação e utilização das nossas próprias funções e
procedimentos, vamos criar um algoritmo para resolver equações de
segundo grau, onde criaremos uma função chamada &lt;em&gt;calcula_delta&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.brasilescola.com/matematica/equacao-2-grau.htm" target="_blank" title="Equação do segundo grau"&gt;&lt;span style="line-height: 13px;"&gt;Dúvida sobre como calcular uma
    equação de segundo
    grau?&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;EquaçãoDoSegundoGrau&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;

&lt;span class="n"&gt;funcao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calcula_delta&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;RETORNE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;
&lt;span class="n"&gt;fimfuncao&lt;/span&gt;

&lt;span class="n"&gt;inicio&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Informe o valor de A: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Informe o valor de B: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Informe o valor de C: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calcula_delta&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Esta equação não possui raízes reais.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAIZQ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Esta equação possui apenas uma raiz: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAIZQ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;x2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAIZQ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Esta equação possui duas raízes: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; e &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;
&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja que declaramos a função &lt;em&gt;calcula_delta&lt;/em&gt; no inicio do código, e
então podemos chamar essa função de dentro do algoritmo. Simples né? Pra
criar procedimento é a mesma coisa, só que não retorna resultado e
usamos a outra sintaxe apresentada anteriormente. Um possível resultado
da execução desse algoritmo é esse:&lt;/p&gt;
&lt;p&gt;&lt;img alt="resultado equação do segundo
grau" class="aligncenter" src="/images/o-que-sao-funcoes-e-procedimentos/resultado-equação-do-segundo-grau.png"&gt;&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Funções&lt;/strong&gt; e &lt;strong&gt;procedimentos&lt;/strong&gt; são utilizados com muita frequência em
desenvolvimento de softwares. São vários benefícios como: evita
duplicação de código quando precisamos executar a mesma operação várias
vezes, deixa o entendimento do algoritmo mais intuitívo, pois tiramos a
parte complexa do código do fluxo principal do algoritmo, etc.&lt;/p&gt;
&lt;p&gt;Em linguagens orientada a objeto como java, C++ e C#, funções e
procedimentos são chamados de &lt;strong&gt;MÉTODO&lt;/strong&gt;. Mais por uma questão de
conceito de Orientação a Objetos, mas no fundo é a mesma coisa, podem
receber parâmetros e retornam ou não um resultado.&lt;/p&gt;
&lt;p&gt;Pratique identificando no seu código, onde você pode utilizar funções e
procedimentos. Um exemplo, é unir em um só procedimento aquele código de
leitura de valores do usuário que sempre utilizamos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ESCREVA ("Informe o valor de A: ")&lt;/p&gt;
&lt;p&gt;LEIA (a)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Já imagina como fazer isso? Qualquer dúvida, deixe nos comentários aí em
baixo.&lt;/p&gt;</content><category term="Dicionário de programador"></category></entry><entry><title>Vários cursos online da área de programação</title><link href="https://dicasdeprogramacao.com.br/cursos-online-da-area-de-programacao/" rel="alternate"></link><published>2013-05-21T00:00:00-03:00</published><updated>2013-05-21T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-05-21:/cursos-online-da-area-de-programacao/</id><summary type="html">&lt;!-- BANNER BRAVA CURSOS --&gt;
&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt; é uma área que está em alta
no mercado e a cada dia que passa mais oportunidades estão surgindo para
quem domina o assunto.&lt;/p&gt;
&lt;p&gt;Com a facilidade de acesso à internet hoje em
dia, não há mais desculpas para …&lt;/p&gt;</summary><content type="html">&lt;!-- BANNER BRAVA CURSOS --&gt;
&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt; é uma área que está em alta
no mercado e a cada dia que passa mais oportunidades estão surgindo para
quem domina o assunto.&lt;/p&gt;
&lt;p&gt;Com a facilidade de acesso à internet hoje em
dia, não há mais desculpas para não aprender, há muita informação na
grande rede. Um exemplo é o nosso blog &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;, que
vem trazendo conteúdo de qualidade para quem quer aprender essa arte de
criar softwares.&lt;/p&gt;
&lt;p&gt;Quero encorajá-los dizendo que não é um bicho de sete
cabeças, programação não é complicado como muitos pensam. Basta ter boa
vontade de aprender.&lt;/p&gt;
&lt;h2&gt;Comece pelo básico&lt;/h2&gt;
&lt;p&gt;Quem tá começando a aprender programação, deve começar pelo básico. Aqui
no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; já tem uma série de artigos voltados
para iniciantes em programação, basta ler atentamente. Tenho certeza que
você vai se surpreender com a facilidade do assunto. Veja alguns dos
artigos disponíveis aqui no site, preparados especialmente para
iniciantes em programação:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;Quer aprender programação? Saiba qual a melhor
    linguagem!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" target="_blank" title="O que é variável e constante?"&gt;O que é variável e
    constante&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" target="_blank" title="O que são tipos de dados primitivos?"&gt;O que são tipos de dados
    primitivos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de decisão SE-ENTÃO-SENÃO"&gt;Estrutura de decisão
    SE-ENTÃO-SENÃO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-selecao-multipla-escolha-caso/" target="_blank" title="Estrutura de seleção multipla ESCOLHA-CASO"&gt;Estrutura de seleção múltipla
    ESCOLHA-CASO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;Estrutura de repetição
    ENQUANTO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-repita-ate/" target="_blank" title="Estrutura de repetição REPITA-ATÉ"&gt;Estrutura de repetição
    REPITA-ATÉ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-para/" target="_blank" title="Estrutura de repetição PARA"&gt;Estrutura de repetição
    PARA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-sao-vetores-e-matrizes-arrays/" target="_blank" title="O que são Vetores e Matrizes (arrays)"&gt;O que são Vetores e
    Matrizes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Faça um Curso de Programação online!&lt;/h2&gt;
&lt;p&gt;O objetivo do &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; é levar bom conteúdo da área
de programação pra quem quer aprender, mas é um trabalho árduo que leva
tempo. Se você quer aprender rapidamente, a nossa indicação é que faça
um curso de alguma área de programação que você tem mais interesse,
&lt;strong&gt;programação pra Web, Android, Java, PHP, Python, C, C#&lt;/strong&gt;, etc. Claro,
após aprender o básico como dito acima.&lt;/p&gt;
&lt;p&gt;Existem vários cursos sobre isso na internet, aqui vamos indicar os da &lt;a href="http://afiliado.bravacursos.com.br/3562/curso/" target="_blank" title="Brava Cursos"&gt;Brava
Cursos&lt;/a&gt; que
tem bastante curso da área de programação, de qualidade e barato. A
vantagem de fazer um curso online é que você receberá muita informação
nova de pessoas experientes, isso encurta o caminho do aprendizado.Veja
abaixo uma lista dos cursos disponíveis:&lt;/p&gt;
&lt;iframe width="100%" height="450" frameborder="0" src="http://bravacursos.com.br/banner/listaCursosInteligente.php?af=3562&amp;amp;cat=30&amp;amp;cat=30"&gt;&lt;/iframe&gt;
&lt;!-- FIM --&gt;

&lt;p&gt;Aprender programação é fácil e não tem segredo, se tiver a gente conta
rs. O importante é estudar! Você pode acompanhar os artigos que
disponibilizamos aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;, pode fazer um
curso online, pode pesquisar na internet, enfim. Basta força de vontade!&lt;/p&gt;
&lt;p&gt;Bons estudos!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>As 10 conversões numéricas mais utilizadas na computação</title><link href="https://dicasdeprogramacao.com.br/as-10-conversoes-numericas-mais-utilizadas-na-computacao/" rel="alternate"></link><published>2013-05-16T00:00:00-03:00</published><updated>2013-05-16T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-05-16:/as-10-conversoes-numericas-mais-utilizadas-na-computacao/</id><summary type="html">&lt;p&gt;&lt;strong&gt;Conversões numéricas&lt;/strong&gt; são utilizadas em muitos casos na computação.
Isso porque nós somos acostumados com a base numérica &lt;strong&gt;decimal&lt;/strong&gt; (0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10 , 11, ...), mas no mundo da tecnologia
digital os dispositivos eletrônicos …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Conversões numéricas&lt;/strong&gt; são utilizadas em muitos casos na computação.
Isso porque nós somos acostumados com a base numérica &lt;strong&gt;decimal&lt;/strong&gt; (0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10 , 11, ...), mas no mundo da tecnologia
digital os dispositivos eletrônicos trabalham em baixo nível com a base
numérica &lt;strong&gt;binária&lt;/strong&gt; (0 ou 1), pois os números binários são facilmente
representados na eletrônica através de pulsos elétricos. Além desses
dois, as bases numéricas &lt;strong&gt;octal&lt;/strong&gt; e &lt;strong&gt;hexadecimal&lt;/strong&gt; também são muito
utilizadas pela fácil representação.&lt;/p&gt;
&lt;h2&gt;Simbologia&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;base numérica&lt;/strong&gt; representa a quantidade de símbolos possíveis para
representar um determinado número. Veja a tabela abaixo, sobre quais
símbolos podem ser utilizados em cada sistema de numeração.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Base Numérica&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Símbolos&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Decimal&lt;/td&gt;
&lt;td&gt;0, 1, 2, 3, 4, 5, 6, 7, 8 e 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binário&lt;/td&gt;
&lt;td&gt;0 e 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Octal&lt;/td&gt;
&lt;td&gt;0, 1, 2, 3, 4, 5, 6 e 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hexadecimal&lt;/td&gt;
&lt;td&gt;0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Olhando pra essa tabela é mais fácil perceber que, ao contarmos, quando
chegamos no último símbolo precisamos incrementar o número da esquerda
para representar o próximo. Por exemplo, ao contarmos na base
&lt;strong&gt;decimal&lt;/strong&gt;, quando chegamos no 9, precisamos do símbolo 1 para formar o
próximo número 10. O mesmo vale para as outras bases numéricas. Por
exemplo, no &lt;strong&gt;octal&lt;/strong&gt;, quando chegamos no 7, o próximo número é 10, ao
chegar no 17, o próximo é 20 e assim sucessivamente. No &lt;strong&gt;binário&lt;/strong&gt;,
contamos assim: 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, ...
Deu pra entender a ideia?&lt;/p&gt;
&lt;h2&gt;Representação de base numérica&lt;/h2&gt;
&lt;p&gt;Quando falamos de números da base &lt;strong&gt;decimal&lt;/strong&gt; geralmente não
representamos explicitamente a base numérica, quando vemos um número
qualquer sem base numérica sub-entendemos ser um número da base decimal.
Mas para números de outras bases é necessário informar explicitamente a
base numérica do número. Esta é representada por um número sub-escrito
no final do número. Por exemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1010001011&lt;sub&gt;2&lt;/sub&gt;&lt;/li&gt;
&lt;li&gt;453234&lt;sub&gt;8&lt;/sub&gt;&lt;/li&gt;
&lt;li&gt;23AF6D&lt;sub&gt;16&lt;/sub&gt;&lt;/li&gt;
&lt;li&gt;1024&lt;sub&gt;10&lt;/sub&gt; (nesse caso, por ser base decimal, podemos representar ou o
    número sem a base, apenas &lt;strong&gt;1024&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Entendido isso, vamos ver agora como converter os números entre as bases
decimais.&lt;/p&gt;
&lt;h2&gt;1ª Conversão numérica: Decimal para Binário&lt;/h2&gt;
&lt;p&gt;A conversão numérica de números &lt;strong&gt;decimais&lt;/strong&gt; para números &lt;strong&gt;binários&lt;/strong&gt; é
realizada através de divisões consecutivas. Como? Dividimos o número da
base decimal por 2 até que não seja mais divisível, ao final, o número
binário é o &lt;strong&gt;resultado da última divisão &lt;span
style="text-decoration: underline;"&gt;ajuntado&lt;/span&gt; dos restos das
demais divisões "de baixo para cima"&lt;/strong&gt;. Bom, é melhor vemos um exemplo
pra ficar claro...&lt;/p&gt;
&lt;p&gt;Vamos converter o número 34 para a base binária.&lt;/p&gt;
&lt;p&gt;&lt;img alt="conversao decimal para
binário" class="aligncenter" src="/images/as-10-conversoes-numericas-mais-utilizadas-na-computacao/conversao-decimal-para-binário.png"&gt;&lt;/p&gt;
&lt;p&gt;Fácil né!? Não se esqueça de utilizar o resultado da última divisão para
formar o número binário! Só pra confirmar que você aprendeu, leia
novamente a frase em negrito do parágrafo anterior.&lt;/p&gt;
&lt;h2&gt;2ª Conversão Numérica: Decimal para Octal&lt;/h2&gt;
&lt;p&gt;A conversão numérica de &lt;strong&gt;Decimal&lt;/strong&gt; para &lt;strong&gt;Octal&lt;/strong&gt; é quase idêntica a
anterior, a diferença é que agora dividimos por 8. Veja o exemplo
abaixo, onde convertemos o número 2834 da base &lt;strong&gt;decimal&lt;/strong&gt; para a base
&lt;strong&gt;octal&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="conversao decimal para
octal" class="aligncenter" src="/images/as-10-conversoes-numericas-mais-utilizadas-na-computacao/conversao-decimal-para-octal.png"&gt;&lt;/p&gt;
&lt;h2&gt;3ª Conversão Numérica: Decimal para Hexadecimal&lt;/h2&gt;
&lt;p&gt;Já dá pra imaginar como é a conversão de números &lt;strong&gt;decimais&lt;/strong&gt; para a
base &lt;strong&gt;hexadecimal&lt;/strong&gt;? Acertou! É a mesma coisa que a anterior, só que
agora dividimos por 16. Mas tem um pequeno detalhe, ao final não podemos
utilizar os números 10, 11, 12, 13, 14, e 15, no lugar desse números
utilizamos A, B, C, D, E e F. Veja o exemplo abaixo, onde convertemos o
número 2834 da base &lt;strong&gt;decimal&lt;/strong&gt; para a base &lt;strong&gt;hexa-decimal&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="conversao decimal para
hexadecimal" class="aligncenter" src="/images/as-10-conversoes-numericas-mais-utilizadas-na-computacao/conversao-decimal-para-hexadecimal.png"&gt;&lt;/p&gt;
&lt;p&gt;Viu como é fácil? Não se esqueça de trocar os valores acima de 9 por
letras!&lt;/p&gt;
&lt;h2&gt;4ª Conversão Numérica: Binário para Decimal&lt;/h2&gt;
&lt;p&gt;Agora vamos entrar na conversão de números &lt;span
style="text-decoration: underline;"&gt;para&lt;/span&gt; a base &lt;strong&gt;decimal&lt;/strong&gt;, mas
vamos ver que após aprender uma forma, as outras são bem parecidas
também. A conversão de números &lt;strong&gt;binários&lt;/strong&gt; para números &lt;strong&gt;decimais&lt;/strong&gt; é
realizada através de uma somatória dos algarismos binários &lt;strong&gt;da direita
pra a esquerda&lt;/strong&gt; onde cada termo da somatória é multiplicado por 2
elevado a um número sequencial iniciado em 0. Parece complicado, mas não
é. Você pode seguir uns passos simples como apresentado abaixo:&lt;/p&gt;
&lt;p&gt;Vamos converter o número 100010&lt;sub&gt;2&lt;/sub&gt; para a base &lt;strong&gt;decimal&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Primeiro invertermos o número para fazermos a somatória &lt;strong&gt;da direita
    para a esquerda do número original&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;100010&lt;/strong&gt; -&amp;gt; &lt;strong&gt;010001&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agora vamos somar cada número, multiplicando por 2 elevado a um
    número sequencial iniciado em 0.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;0 * 2 &lt;sup&gt;0&lt;/sup&gt; + 1 * 2 &lt;sup&gt;1&lt;/sup&gt; + 0 * 2 &lt;sup&gt;2&lt;/sup&gt; + 0 * 2 &lt;sup&gt;3&lt;/sup&gt; + 0 * 2 &lt;sup&gt;4&lt;/sup&gt; + 1 * 2 &lt;sup&gt;5&lt;/sup&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Podemos eliminar os termos que multiplicam por 0. Certo?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;del&gt;0 * 2 &lt;sup&gt;0&lt;/sup&gt;&lt;/del&gt; + 1 * 2 &lt;sup&gt;1&lt;/sup&gt; + &lt;del&gt;0 * 2 &lt;sup&gt;2&lt;/sup&gt;&lt;/del&gt; + &lt;del&gt;0 * 2 &lt;sup&gt;3&lt;/sup&gt;&lt;/del&gt; + &lt;del&gt;0 * 2 &lt;sup&gt;4&lt;/sup&gt;&lt;/del&gt; + 1 * 2 &lt;sup&gt;5&lt;/sup&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ficamos com ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1 * 2 &lt;sup&gt;1&lt;/sup&gt; + 1 * 2 &lt;sup&gt;5&lt;/sup&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fazemos o cálculo do expoente e somamos.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2 + 32&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resultado: &lt;strong&gt;34&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pode conferir com a &lt;span
style="text-decoration: underline;"&gt;primeira&lt;/span&gt; conversão deste
artigo...&lt;/p&gt;
&lt;h2&gt;5ª Conversão Numérica: Octal para Decimal&lt;/h2&gt;
&lt;p&gt;A conversão de números da base &lt;strong&gt;octal&lt;/strong&gt; para a base &lt;strong&gt;decimal&lt;/strong&gt; é
semelhante a anterior, porém utilizamos 8 no lugar do número 2. Vamos
converter o número 5422&lt;sub&gt;8&lt;/sub&gt; para a base &lt;strong&gt;decimal&lt;/strong&gt; seguindo os mesmos
passos da conversão anterior.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Primeiro invertermos o número para fazermos a somatória &lt;strong&gt;da direita
    para a esquerda do número original&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;5422&lt;/strong&gt; -&amp;gt; &lt;strong&gt;2245&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agora vamos somar cada número, multiplicando por 8 elevado a um
    número sequencial iniciado em 0.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2 * 8 &lt;sup&gt;0&lt;/sup&gt; + 2 * 8 &lt;sup&gt;1&lt;/sup&gt; + 4 * 8 &lt;sup&gt;2&lt;/sup&gt; + 5 * 8 &lt;sup&gt;3&lt;/sup&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fazemos o cálculo do expoente e obtemos os termos da soma.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2 * 1 + 2 * 8 + 4 * 64 + 5 * 512&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ficamos com ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;**2 + 16 + 256 + 2560&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resultado: &lt;strong&gt;2834&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pode conferir com a &lt;span
style="text-decoration: underline;"&gt;segunda&lt;/span&gt; conversão deste
artigo...&lt;/p&gt;
&lt;h2&gt;6ª Conversão Numérica: Hexadecimal para Decimal&lt;/h2&gt;
&lt;p&gt;Adivinha! Mesma coisa que a anterior, só que agora utilizando 16, mas
lembre-se: é necessário substituir as letras A, B, C, D, E e F por 10,
11, 12, 13, 14 e 15. Vamos converter o número B12&lt;sub&gt;16&lt;/sub&gt; para a
base &lt;strong&gt;decimal&lt;/strong&gt; seguindo os mesmos passos da conversão anterior.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Primeiro invertermos o número para fazermos a somatória &lt;strong&gt;da direita
    para a esquerda do número original&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;B12&lt;/strong&gt; -&amp;gt; &lt;strong&gt;21B&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agora vamos somar cada número, multiplicando por 16 elevado a um
    número sequencial iniciado em 0.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2 * 16 &lt;sup&gt;0&lt;/sup&gt; + 1 * 16 &lt;sup&gt;1&lt;/sup&gt; + B * 16 &lt;sup&gt;2&lt;/sup&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Substituimos B por 11, ficamos com ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2 * 16 &lt;sup&gt;0&lt;/sup&gt; + 1 * 16 &lt;sup&gt;1&lt;/sup&gt; + 11 * 16 &lt;sup&gt;2&lt;/sup&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fazemos o cálculo do expoente e obtemos os termos da soma.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2 * 1 + 1 * 16 + 11 * 256&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ficamos com ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2 + 16 + 2816&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resultado: &lt;strong&gt;2834&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pode conferir com a &lt;span
style="text-decoration: underline;"&gt;terceira&lt;/span&gt; conversão deste
artigo...&lt;/p&gt;
&lt;h2&gt;7ª Conversão Numérica: Binário para Octal&lt;/h2&gt;
&lt;p&gt;A conversão de números da base &lt;strong&gt;binária&lt;/strong&gt; para a base ** octal&lt;strong&gt;, é
parecida com a conversão &lt;/strong&gt;binário-decimal&lt;strong&gt;, mas antes é preciso
separar os dígitos binários &lt;/strong&gt;de 3 em 3 da direita para a esquerda&lt;strong&gt;.
Vejamos um exemplo, vamos converter o número 10011011101&lt;sub&gt;2&lt;/sub&gt; para
&lt;/strong&gt;octal**.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Separamos os dígitos binários &lt;strong&gt;de 3 em 3 da direita para a
    esquerda&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;10 011 011 101&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agora fazemos a conversão &lt;strong&gt;binário-decimal&lt;/strong&gt; para cada
    grupo separadamente. (Veja a 4ª conversão deste artigo)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2 3 3 5&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unimos novamente os dígitos e temos o número na base &lt;strong&gt;octal&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2335&lt;sub&gt;8&lt;/sub&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;8ª Conversão Numérica: Binário para Hexadecimal&lt;/h2&gt;
&lt;p&gt;A conversão de números da base &lt;strong&gt;binária&lt;/strong&gt; para a
base ** hexadecimal&lt;strong&gt; é quase idêntica à anterior, só que agora
separamos os dígitos binários &lt;/strong&gt;de 4 em 4 da direita para a esquerda&lt;strong&gt; e
antes de unir os dígitos ao final, trocamos os números 10, 11, 12, 13,
14 e 15 por A, B, C, D, E e F. Vejamos um exemplo, vamos converter o
número 10011011101&lt;sub&gt;2&lt;/sub&gt; para &lt;/strong&gt;hexadecimal**.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Separamos os dígitos binários &lt;strong&gt;de 4 em 4 da direita para a
    esquerda&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;100 1101 1101&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agora fazemos a conversão &lt;strong&gt;binário-decimal&lt;/strong&gt; para cada
    grupo separadamente. (Veja a 4ª conversão deste artigo)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;4 13 13&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Trocamos os números maiores que 9 por letra.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;4 D D&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unimos novamente os dígitos e temos o número na base
    &lt;strong&gt;hexadecimal&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;4DD&lt;sub&gt;16&lt;/sub&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;9ª Conversão Numérica: Octal para Binário&lt;/h2&gt;
&lt;p&gt;Nessa conversão temos que pensar no contrário da conversão
&lt;strong&gt;binário-octal&lt;/strong&gt;. Convertemos cada dígito do número &lt;strong&gt;octal&lt;/strong&gt; para a
base &lt;strong&gt;binária&lt;/strong&gt; separadamente. Vamos converter o número 2335&lt;sub&gt;8&lt;/sub&gt; para a
base &lt;strong&gt;binária&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Separamos os dígitos do número &lt;strong&gt;octal&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2 3 3 5&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agora fazemos a conversão de cada dígito separadamente para binário
    como se fosse número da base &lt;strong&gt;decimal&lt;/strong&gt;. (Veja a 1ª conversão deste
    artigo)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;**010 011 011 101 **&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unimos novamente os dígitos e temos o número na base &lt;strong&gt;binária&lt;/strong&gt;
    (neste momento podemos eliminar os 0s a esquerda).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;10011011101&lt;sub&gt;2&lt;/sub&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pode conferir este resultado com a 7ª conversão.&lt;/p&gt;
&lt;h2&gt;10ª Conversão Numérica: Hexadecimal para Binário&lt;/h2&gt;
&lt;p&gt;Da mesma forma que a anterior, nessa conversão temos que pensar no
contrário da conversão &lt;strong&gt;binário-hexadecimal&lt;/strong&gt;. Convertemos cada dígito
do número &lt;strong&gt;hexadecimal&lt;/strong&gt; para a base &lt;strong&gt;binária&lt;/strong&gt; separadamente. Vamos
converter o número 4DD&lt;sub&gt;16&lt;/sub&gt; para a base &lt;strong&gt;binária&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Separamos os dígitos do número &lt;strong&gt;hexadecimal&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;4 D D&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Convertemos as letras para número seguindo aquela ordem já
    mencionada.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;4 13 13&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agora fazemos a conversão de cada dígito separadamente para binário
    como se fosse número da base &lt;strong&gt;decimal&lt;/strong&gt;. (Veja a 1ª conversão deste
    artigo)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;0100 1101 1101&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unimos novamente os dígitos e temos o número na
    base &lt;strong&gt;binária&lt;/strong&gt; (neste momento podemos eliminar os 0s a esquerda).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;10011011101&lt;sub&gt;2&lt;/sub&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pode conferir este resultado com a 8ª conversão.&lt;/p&gt;
&lt;h2&gt;Exercitar!&lt;/h2&gt;
&lt;p&gt;Como todo cálculo matemático, para aprender bem essas conversões
numéricas é preciso praticar, fazer bastante exercícios. Com o tempo só
de olhar para alguns números você já sabe como representá-lo em outras
bases numéricas. Então, pegue o lápis e um papel e comece a fazer
conversões. Não vou deixar exemplos de exercícios de conversão, basta
escolher um número aleatoriamente e convertê-lo para as outras bases.
Para conferir o resultado você pode utilizar a calculadora do seu
computador, basta colocá-la no modo "Programador" e alterar a base dos
números.&lt;/p&gt;
&lt;p&gt;&lt;img alt="calculadora modo
programador" class="alignleft" src="/images/as-10-conversoes-numericas-mais-utilizadas-na-computacao/calculadora-modo-programador.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="base numérica na calculadora do
windows" class="alignleft" src="/images/as-10-conversoes-numericas-mais-utilizadas-na-computacao/base-numérica-na-calculadora-do-windows.png"&gt;&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>O que são Vetores e Matrizes (arrays)</title><link href="https://dicasdeprogramacao.com.br/o-que-sao-vetores-e-matrizes-arrays/" rel="alternate"></link><published>2013-05-13T00:00:00-03:00</published><updated>2013-05-13T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-05-13:/o-que-sao-vetores-e-matrizes-arrays/</id><summary type="html">&lt;p&gt;&lt;strong&gt;Vetores&lt;/strong&gt; e &lt;strong&gt;Matrizes&lt;/strong&gt; são estruturas de dados muito simples que
podem nos ajudar muito quando temos muitas variáveis do mesmo tipo em um
algoritmo. Imagine o seguinte problema: Você precisa criar um algoritmo
que lê o nome e as 4 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Vetores&lt;/strong&gt; e &lt;strong&gt;Matrizes&lt;/strong&gt; são estruturas de dados muito simples que
podem nos ajudar muito quando temos muitas variáveis do mesmo tipo em um
algoritmo. Imagine o seguinte problema: Você precisa criar um algoritmo
que lê o nome e as 4 notas de 50 alunos, calcular a média de cada aluno
e informar quais foram aprovados e quais foram reprovados.&lt;/p&gt;
&lt;p&gt;Conseguiu imaginar quantas variáveis você vai precisar? Muitas né?
Vamos fazer uma conta rápida: 50 variáveis para armazenar os nomes dos alunos,
(4 * 50 = ) 200 variáveis para armazenar as 4 notas de cada aluno e por fim,
50 variáveis para armazenar as médias de cada aluno. 300 variáveis no
total, sem contar a quantidade de linhas de código que você vai precisar
para ler todos os dados do usuário, calcular as médias e apresentar os
resultados. Mas eu tenho uma boa notícia pra você. Nós não precisamos
criar 300 variáveis! Podemos utilizar &lt;strong&gt;Vetores&lt;/strong&gt; e &lt;strong&gt;Matrizes&lt;/strong&gt; (também
conhecidos como &lt;strong&gt;ARRAYs&lt;/strong&gt;)!&lt;/p&gt;
&lt;h2&gt;O que são Vetores e Matrizes?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Vetor&lt;/strong&gt; (&lt;strong&gt;array&lt;/strong&gt; uni-dimensional) é uma variável que armazena várias
variáveis do mesmo tipo. No problema apresentado anteriormente, nós
podemos utilizar um &lt;span
style="text-decoration: underline;"&gt;vetor&lt;/span&gt; de 50 posições para
armazenar os nomes dos 50 alunos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matriz&lt;/strong&gt; (&lt;strong&gt;array&lt;/strong&gt; multi-dimensional) é um &lt;strong&gt;vetor&lt;/strong&gt; de &lt;strong&gt;vetores&lt;/strong&gt;.
No nosso problema, imagine uma matriz para armazenar as 4 notas de cada
um dos 50 alunos. Ou seja, um vetor de 50 posições, e em cada posição do
vetor, há outro vetor com 4 posições. Isso é uma matriz.&lt;/p&gt;
&lt;p&gt;Cada item do vetor (ou matriz) é acessado por um número chamado de
&lt;strong&gt;índice&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Vamos representar os vetores e matrizes graficamente para facilitar o
entendimento do conceito.&lt;/p&gt;
&lt;p&gt;&lt;img alt="vetor e matriz
(array)" class="aligncenter" src="/images/o-que-sao-vetores-e-matrizes-arrays/vetor-e-matriz.png"&gt;&lt;/p&gt;
&lt;p&gt;Podemos ver na imagem acima que cada posição do vetor é identificado por
um número (chamado de índice), no caso da matriz são dois números (um na
vertical e um na horizontal).&lt;/p&gt;
&lt;h2&gt;Vetores e Matrizes na prática!&lt;/h2&gt;
&lt;p&gt;Tomando o exemplo apresentado no início deste artigo, vamos implementar
o algoritmo utilizando o
&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;Visualg&lt;/a&gt;.
Nele, vamos usar algumas estruturas básicas já apresentadas aqui, tais
como A &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-para/" target="_blank" title="Estrutura de repetição PARA"&gt;estrutura de repetição
PARA&lt;/a&gt;
e a &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de decisão SE-ENTÃO-SENÃO"&gt;estrutura de decisão
SE-ENTÃO-SENÃO&lt;/a&gt;.
(Neste algoritmo vamos reduzir o número de alunos de 50 para 5, para
facilitar a visualização do resultado.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;Saiba o que é o Visualg, como instalar e criar os seus primeiros
algoritmos!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Preste muita atenção no modo como é criado o Vetor e a Matriz e também
a forma como é acessada cada posição.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;MediaDe5Alunos&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Função&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Calcular&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;média&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;das&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alunos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apresentar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;quem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aprovado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ou&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reprovado&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Autor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gustavo&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Seção&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Declarações&lt;/span&gt;
&lt;span class="nf"&gt;var&lt;/span&gt;

&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nl"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vetor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;1..5&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caractere&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nl"&gt;notas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vetor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;1..5,1..4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;real&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nl"&gt;medias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vetor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;1..5&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;real&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;contadorLoop2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inteiro&lt;/span&gt;

&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Leitura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cada&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aluno&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;PARA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FACA&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;Digite o nome do aluno(a) número &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot; de 5: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;PARA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contadorLoop2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FACA&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;Digite a nota &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contadorLoop2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot; do aluno(a) &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, contadorLoop2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;FIMPARA&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;CÁLCULO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DAS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MÉDIAS&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;medias&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 3&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMPARA&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;APRESENTAÇÃO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DOS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RESULTADOS&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;PARA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FACA&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;medias&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;O aluno(a) &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot; foi aprovado com as notas (&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 3&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;) e média: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;medias&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;O aluno(a) &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nomes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot; foi reprovado com as notas (&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 3&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1, 4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;) e média: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;medias&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;contadorLoop1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMPARA&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Repare que os &lt;span style="text-decoration: underline;"&gt;arrays&lt;/span&gt;
(vetores ou matrizes) aliados a estrutura de repetição PARA é um ótimo
recurso para algoritmos que precisam de muitas variáveis do mesmo tipo.&lt;/p&gt;
&lt;p&gt;Se você é iniciante em programação este algoritmo pode parecer complexo
para você, se houver dúvidas não se acanhe em deixar um comentário aí em
baixo que vamos te ajudar. Pra aprender programação (e qualquer outra
coisa) o mais importante é a força de vontade!&lt;/p&gt;
&lt;p&gt;Um resultado do algoritmo acima pode ser observado a seguir:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Digite o nome do aluno(a) número 1 de 5: Gustavo&lt;/p&gt;
&lt;p&gt;Digite a nota 1 do aluno(a) Gustavo: 9&lt;/p&gt;
&lt;p&gt;Digite a nota 2 do aluno(a) Gustavo: 10&lt;/p&gt;
&lt;p&gt;Digite a nota 3 do aluno(a) Gustavo: 9,5&lt;/p&gt;
&lt;p&gt;Digite a nota 4 do aluno(a) Gustavo: 8&lt;/p&gt;
&lt;p&gt;Digite o nome do aluno(a) número 2 de 5: João&lt;/p&gt;
&lt;p&gt;Digite a nota 1 do aluno(a) João: 5&lt;/p&gt;
&lt;p&gt;Digite a nota 2 do aluno(a) João: 6&lt;/p&gt;
&lt;p&gt;Digite a nota 3 do aluno(a) João: 4,5&lt;/p&gt;
&lt;p&gt;Digite a nota 4 do aluno(a) João: 7&lt;/p&gt;
&lt;p&gt;Digite o nome do aluno(a) número 3 de 5: Pedro&lt;/p&gt;
&lt;p&gt;Digite a nota 1 do aluno(a) Pedro: 7&lt;/p&gt;
&lt;p&gt;Digite a nota 2 do aluno(a) Pedro: 8,5&lt;/p&gt;
&lt;p&gt;Digite a nota 3 do aluno(a) Pedro: 6&lt;/p&gt;
&lt;p&gt;Digite a nota 4 do aluno(a) Pedro: 7&lt;/p&gt;
&lt;p&gt;Digite o nome do aluno(a) número 4 de 5: Luciana&lt;/p&gt;
&lt;p&gt;Digite a nota 1 do aluno(a) Luciana: 10&lt;/p&gt;
&lt;p&gt;Digite a nota 2 do aluno(a) Luciana: 7&lt;/p&gt;
&lt;p&gt;Digite a nota 3 do aluno(a) Luciana: 7,5&lt;/p&gt;
&lt;p&gt;Digite a nota 4 do aluno(a) Luciana: 8&lt;/p&gt;
&lt;p&gt;Digite o nome do aluno(a) número 5 de 5: Augusto&lt;/p&gt;
&lt;p&gt;Digite a nota 1 do aluno(a) Augusto: 5&lt;/p&gt;
&lt;p&gt;Digite a nota 2 do aluno(a) Augusto: 5,5&lt;/p&gt;
&lt;p&gt;Digite a nota 3 do aluno(a) Augusto: 7,5&lt;/p&gt;
&lt;p&gt;Digite a nota 4 do aluno(a) Augusto: 6&lt;/p&gt;
&lt;p&gt;O aluno(a) Gustavo foi aprovado com as notas ( 9, 10, 9.5, 8) e média:
9.125&lt;/p&gt;
&lt;p&gt;O aluno(a) João foi reprovado com as notas ( 5, 6, 4.5, 7) e média:
5.625&lt;/p&gt;
&lt;p&gt;O aluno(a) Pedro foi aprovado com as notas ( 7, 8.5, 6, 7) e média:
7.125&lt;/p&gt;
&lt;p&gt;O aluno(a) Luciana foi aprovado com as notas ( 10, 7, 7.5, 8) e média:
8.125&lt;/p&gt;
&lt;p&gt;O aluno(a) Augusto foi aprovado com as notas ( 5, 5.5, 7.5, 6) e
média: 6&lt;/p&gt;
&lt;p&gt;*** Fim da execução.\
*** Feche esta janela para retornar ao Visualg.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Como você pode perceber nesse artigo, Vetores e Matrizes são, na
verdade, a mesma coisa: &lt;strong&gt;array&lt;/strong&gt; a diferença é que o vetor é um array
de apenas 1 dimensão e a matriz é um array de 2 (ou mais) dimensões.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Array&lt;/strong&gt; é uma das estruturas de dados mais simples que existe e uma
das mais utilizadas também. Acho que todas as linguagens de programação
têm &lt;strong&gt;arrays&lt;/strong&gt;, pelo menos ainda não conheço uma linguagem que não tem.
Porém, os índices podem mudar dependendo da linguagem, algumas começam
os índices do array com 1 e outras com 0, essa é a grande diferença que
geralmente encontramos entre linguagens. No caso das linguagens que
começam os arrays com o índice 0, o último elemento do array recebe o
índice (&amp;lt;tamanho do array&amp;gt; - 1).&lt;/p&gt;
&lt;p&gt;Gostou de conhecer os Arrays (Vetores e Matrizes)?&lt;/p&gt;
&lt;p&gt;Recente mente eu criei um minicurso GRATUITO de lógica de programação
para ajudar quem está começando agora. Neste minicurso você receberá as
aulas por e-mail e terá bastante exercícios para resolver. Eu envio
minhas soluções para os exercícios por e-mail, assim você pode tentar
resolver sozinho e comprar a sua resposta com a minha. E caso não
consiga fazer sozinho, pode entender a minha solução que vai junto com
uma explicação detalhada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://mclp.dicasdeprogramacao.com.br/"&gt;&amp;gt;&amp;gt; CLIQUE AQUI e se inscreva no minicurso GRATUITO de lógica&amp;gt; de programação !&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Um grande abraço!&lt;/p&gt;</content><category term="Dicionário de programador"></category></entry><entry><title>Como criar um ambiente para estudar Banco de Dados e SQL</title><link href="https://dicasdeprogramacao.com.br/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/" rel="alternate"></link><published>2013-05-09T00:00:00-03:00</published><updated>2013-05-09T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-05-09:/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/</id><summary type="html">&lt;p&gt;Para aprender banco de
dados e SQL é preciso praticar bastante, ou seja, criar os
próprios bancos de dados, tabelas, visões, inserir e atualizar
registros, fazer consultas, etc.&lt;/p&gt;
&lt;p&gt;Pra aprender todos esses conceitos não
há outra maneira senão interagir com …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Para aprender banco de
dados e SQL é preciso praticar bastante, ou seja, criar os
próprios bancos de dados, tabelas, visões, inserir e atualizar
registros, fazer consultas, etc.&lt;/p&gt;
&lt;p&gt;Pra aprender todos esses conceitos não
há outra maneira senão interagir com um
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;&lt;strong&gt;SGBD&lt;/strong&gt;&lt;/a&gt; real.&lt;/p&gt;
&lt;p&gt;Então, vamos criar um ambiente para isso. Neste artigo vamos ver
como instalar o &lt;strong&gt;Oracle XE&lt;/strong&gt; e o &lt;strong&gt;SQL Developer&lt;/strong&gt; a fim de criarmos um
ambiente para estudar banco de dados e SQL na prática.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;Oracle XE&lt;/strong&gt; é a versão grátis do &lt;span
style="text-decoration: underline;"&gt;Oracle database&lt;/span&gt;, criada
justamente para servir de banco de dados de entrada para iniciantes e
profissionais que desejam treinar e desenvolver softwares utilizando
bancos de dados. Como, provavelmente, você utiliza o seu computador para
outras coisas, vou mostrar neste artigo uma forma de não deixar os
serviços do
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;&lt;strong&gt;SGBD&lt;/strong&gt;&lt;/a&gt; iniciarem
automaticamente,  para não atrapalhar o desempenho do seu computador
enquanto não estiver utilizando o banco de dados. :)&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;SQL Developer&lt;/strong&gt; é o software que utilizamos para acessar o
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;&lt;strong&gt;SGBD&lt;/strong&gt;&lt;/a&gt;
e executar instruções
&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-sql/" target="_blank" title="Você precisa saber o que é SQL!"&gt;SQL&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Requisitos para a instalação&lt;/h2&gt;
&lt;p&gt;Alguns requisitos mínimos de Hardware e Software devem ser atendidos
para instalar o Oracle XE como pode ser visto na
&lt;a href="http://docs.oracle.com/cd/E17781_01/install.112/e18803/toc.htm#autoId2" target="_blank" title="Requisitos para instalação do Oracle XE"&gt;documentação&lt;/a&gt; do
software:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arquitetura de Sistema: &lt;strong&gt;Intel (x86)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Um dos seguintes Sistemas Operacionais:Espaço mínimo em Disco
    (HD): &lt;strong&gt;1,5 GB&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Microsoft Windows XP Professional&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft Windows Server 2003 - todas as edições&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft Windows Server 2003 R2 - todas as edições&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft Windows Server 2008 - Standard, Enterprise,
    Datacenter, Web, e Foundation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft Windows 7 - Professional, Enterprise, e Ultimate&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Memória RAM: 256 GB, mas é recomendável no mínimo &lt;strong&gt;512 GB&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Windows Installer (MSI): &lt;strong&gt;MSI versão 2.0&lt;/strong&gt; ou posterior
    (Você pode baixar o MSI aqui:  &lt;a href="http://msdn.microsoft.com/"&gt;http://msdn.microsoft.com/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Instalando o Oracle XE no Windows 7 32 bits&lt;/h2&gt;
&lt;p&gt;O sistema operacional mais utilizado hoje em dia é o Windows, por isso o
escolhi para mostrar a instalação do Oracle XE, mas a instalação em
ambiente Linux também é suportada. É importante frisar que &lt;strong&gt;a
instalação em Windows 64 bits NÃO é suportada&lt;/strong&gt;. Vejamos, então, um
passo-a-passo de como instalá-lo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Baixar o instalador do Oracle&lt;/strong&gt; através do
    site  &lt;a href="http://www.oracle.com/technetwork/products/express-edition/downloads/index.html"&gt;http://www.oracle.com/technetwork/products/express-edition/downloads/index.html&lt;/a&gt;.
    É necessário criar uma conta no site da Oracle para isso e aceitar
    os termos de licença.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="página de download do oracle
xe" class="size-full" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/página-de-download-do-oracle-xe.png" title="página de download do oracle xe"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Descompactar o arquivo Zip &lt;/strong&gt;baixado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="extração do instalador do Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/extração-do-instalador-do-Oracle.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Entrar na pasta descompactada e &lt;strong&gt;executar o arquivo Setup.exe.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="executando o instalador do Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/executando-o-instalador-do-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ler e aceitar (caso concorde, claro) os termos de licença&lt;/strong&gt;
    apresentado na primeira tela da instalação.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="aceitar os termos de licença do Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/aceitar-os-termos-de-licença-do-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Selecionar o local da instalação&lt;/strong&gt; do Oracle.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="selecão do local de instalação do Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/selecão-do-local-de-instalação-do-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Informar uma senha para os usuários SYS e SYSTEM&lt;/strong&gt; do banco de
    dados (estes são os usuários administradores do banco de dados e
    você precisará se lembrar dessa senha depois).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Senha dos usuários SYS e
SYSTEM" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/Senha-dos-usuários-SYS-e-SYSTEM.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ao final, é apresentada uma tela de resumo da instalação, basta
    &lt;strong&gt;clicar em "Instalar"&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="resumo da instalação do Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/resumo-da-instalação-do-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;&lt;strong&gt;Pronto!&lt;/strong&gt; Agora é só esperar o
    processo de instalação terminar que aparecerá a tela final.
    \o/&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Oracle XE
instalado!" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/Oracle-XE-instalado.png"&gt;&lt;/p&gt;
&lt;h2&gt;Desabilitando a inicialização automática do Oracle&lt;/h2&gt;
&lt;p&gt;Agora que o Oracle XE está instalado, como prometido, vou mostrar como
não deixar o serviço do banco de dados iniciar automaticamente na
inicialização do Windows, pra não atrapalhar o desempenho do seu
computador enquanto não estiver usando o banco de dados. Também veremos
o que precisamos fazer quando quisermos iniciar o serviço do banco de
dados.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primeiro, clique no iniciar, digite &lt;strong&gt;"services.msc"&lt;/strong&gt; e
    tecle ENTER. Veja a figura abaixo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="iniciar gerenciador de serviços no
windows" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/iniciar-gerenciador-de-serviços-no-windows.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aparecerá uma tela com todos os serviços do Windows, encontre os
    serviços &lt;strong&gt;"OracleServiceXE"&lt;/strong&gt; e &lt;strong&gt;"OracleXETNSListener"&lt;/strong&gt;.
    Selecione o primeiro (OracleServiceXE) e clique no botão
    propriedade, como indicado na figura abaixo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Serviços do Oracle XE
ativos" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/Serviços-do-Oracle-XE-ativos.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Na tela de propriedades selecione o tipo de inicialização "Manual" e
    clique em OK.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Serviços do Oracle XE com inicialização
manual" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/Serviços-do-Oracle-XE-com-inicialização-manual.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Execute os últimos 2 passos para o serviço
    &lt;strong&gt;"OracleXETNSListener"&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ao final desse processo, na tela de serviços do Windows deve listar
    os dois serviços mencionados com tipo de inicialização
    &lt;strong&gt;"Manual".&lt;/strong&gt; Dessa forma os serviços do Oracle XE não iniciaram
    automaticamente na inicialização do Windows, isso fará com que seu
    computador não fique lento enquanto não estiver usando o Oracle XE.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="inicialização manual dos serviços do Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/inicialização-manual-dos-serviços-do-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quando você for usar o Oracle XE para estudar, você precisará
    iniciar os serviços do Oracle usando o atalho: &lt;strong&gt;Iniciar -&amp;gt; Todos
    os Programas -&amp;gt; Oracle Database 11g Express Edition -&amp;gt; Iniciar
    Banco de Dados&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="iniciar serviços do Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/iniciar-serviços-do-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;p&gt;Tudo instalado, agora já podemos usar o nosso banco de dados! A forma
mais simples pra isso é executar o aplicativo básico do Oracle XE para
comandos SQL (Na figura anterior, é o item acima do que usamos, ou seja,
&lt;strong&gt;"Executar Linha de Comandos SQL"&lt;/strong&gt;). Esse aplicativo disponibiliza
apenas uma tela para inserirmos comandos SQL, para nos conectar ao banco
de dados precisamos digitar &lt;strong&gt;"connect system"&lt;/strong&gt; e em seguida informar
aquela senha que inserimos no processo de instalação. Conforme a figura
abaixo:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Executar Linha de Comandos SQL no Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/Executar-Linha-de-Comandos-SQL-no-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;p&gt;Feito isso, já estamos conectados ao banco de dados e podemos executar
os comandos SQL para criar tabelas, inserir registros, consultar
informações, etc. Mas essa tela não é muito boa pra isso né? O que
precisamos é instalar o &lt;strong&gt;SQL Developer&lt;/strong&gt;!&lt;/p&gt;
&lt;h2&gt;Instalando o SQL Developer no Windows 7&lt;/h2&gt;
&lt;p&gt;Achou a instalação do Oracle XE simples? A instalação do &lt;strong&gt;SQL
Developer&lt;/strong&gt; é mais simples ainda! Vamos então ao passo-a-passo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;&lt;strong&gt;Baixar o instalador&lt;/strong&gt; &lt;strong&gt;do SQL
    Developer&lt;/strong&gt; através do
    site &lt;a href="http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html"&gt;http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html&lt;/a&gt;.
    Baixe a opção &lt;strong&gt;"Windows 32-bit - zip file includes the
    JDK1.6.0_35"&lt;/strong&gt;, é necessário criar uma conta no site da Oracle para
    isso e aceitar os termos de licença.\
    &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="página de download do SQL
Developer" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/página-de-download-do-SQL-Developer.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Descompactar o arquivo Zip &lt;/strong&gt;baixado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="extração do SQL
Developer" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/extração-do-SQL-Developer.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Entrar na pasta descompactada e &lt;strong&gt;executar o
    arquivo sqldeveloper.exe.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="executando o SQL
Developer" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/executando-o-SQL-Developer.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;Pronto, você já está executando o
    SQL Developer. Não tem processo de instalação! (rs)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Após a tela do SQL Developer abrir, o que precisamos fazer é criar
    uma conexão com o nosso banco de dados, utilizando o botão indicado
    na figura abaixo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="botão para criar uma conexão com banco de dados no SQL
Developer" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/botão-para-criar-uma-conexão-com-banco-de-dados-no-SQL-Developer.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;Na tela que aparece em seguida,
    informe os dados para conexão com o Oracle XE e um nome para essa
    conexão (você pode criar outras, com outros bancos de dados e
    outros usuários).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="tela para criar conexão com o banco de dados no SQL
Developer" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/tela-para-criar-conexão-com-o-banco-de-dados-no-SQL-Developer.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Após conectar-se no banco de dados, já é possível executar os
    comandos SQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="SQL Developer conectado ao Oracle
XE" class="aligncenter" src="/images/como-criar-um-ambiente-para-estudar-banco-de-dados-e-sql/SQL-Developer-conectado-ao-Oracle-XE.png"&gt;&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Com isso, nesse artigo nós criamos um ambiente para estudar bancos de
dados e SQL. Mostrei a instalação do Oracle XE, a configuração para que
os serviços do Oracle XE não fiquem ligados direto enquanto não
estivermos usando o banco de dados e por fim vimos o SQL Developer que é
um software muito bom para executarmos os nossos comandos SQL, bem
melhor que aquela telinha preta do aplicativo padrão do Oracle XE
(sqlplus).&lt;/p&gt;
&lt;p&gt;Se tiver alguma dúvida no processo de instalação, deixe um comentário
aqui em baixo.&lt;/p&gt;</content><category term="Banco de dados"></category><category term="Oracle"></category><category term="Instalação"></category></entry><entry><title>Conheça os operadores lógicos!</title><link href="https://dicasdeprogramacao.com.br/operadores-logicos/" rel="alternate"></link><published>2013-05-06T00:00:00-03:00</published><updated>2013-05-06T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-05-06:/operadores-logicos/</id><summary type="html">&lt;p&gt;As operações lógicas são ensinadas em vários cursos de tecnologia de
diferentes formas, por exemplo, em cursos de eletrônica é ensinado
portas lógicas, já em programação aprendemos os operadores lógicos. Mas
no fundo é a mesma coisa e se você …&lt;/p&gt;</summary><content type="html">&lt;p&gt;As operações lógicas são ensinadas em vários cursos de tecnologia de
diferentes formas, por exemplo, em cursos de eletrônica é ensinado
portas lógicas, já em programação aprendemos os operadores lógicos. Mas
no fundo é a mesma coisa e se você entender a ideia das operações
lógicas você pode usar esse conhecimento em qualquer área da tecnologia.&lt;/p&gt;
&lt;h2&gt;Tipo de dados LÓGICO&lt;/h2&gt;
&lt;p&gt;&lt;img alt="operadores lógicos" class="alignleft" src="/images/operadores-logicos/operadores-lógicos.jpg"&gt;&lt;/p&gt;
&lt;p&gt;O &lt;a href="http://www.dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" target="_blank" title="O que são tipos de dados primitivos?"&gt;tipo de dados
primitivo&lt;/a&gt;
mais simples é o chamado &lt;strong&gt;booleano&lt;/strong&gt; ( ou lógico ). Pra quem não
conhece esse tipo de dados, um dado booleano só pode assumir dois
valores ( &lt;strong&gt;VERDADEIRO&lt;/strong&gt; ou &lt;strong&gt;FALSO&lt;/strong&gt; ). Em eletrônica, costuma-se
ensinar apresentando como exemplo uma lâmpada, que pode estar acesa
(verdadeiro) ou apagada (falso). Isso é o básico. Na literatura você
pode encontrar esses dados de diferentes formas, por exemplo:
verdadeiro/falso, aceso/apagado, 1/0, ligado/desligado, true/false,
sim/não, etc….&lt;/p&gt;
&lt;p&gt;As operações lógicas trabalham sobre valores booleanos, tanto os valores
de entrada como o de saída são desse tipo. Os operadores lógicos são: E,
OU, NÃO, NÃO-E, NÃO-OU, OU-EXCLUSIVO E NÃO-OU-EXCLUSIVO. Abaixo uma
explicação de cada um.&lt;/p&gt;
&lt;h3&gt;Operador E (AND)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="porta lógica
AND" class="alignright" src="/images/operadores-logicos/portas-lógicas-AND.jpg" title="porta lógica AND"&gt;&lt;/p&gt;
&lt;p&gt;O Operador “E” ou “AND” resulta em um valor VERDADEIRO se os dois
valores de entrada da operação forem VERDADEIROs, caso contrário o
resultado é FALSO. Abaixo a &lt;strong&gt;tabela-verdade&lt;/strong&gt; da operação E.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;VALOR 1&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;VALOR 2&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OPERAÇÃO E&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Operador OU (OR)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="porta lógica
OR" class="alignright" src="/images/operadores-logicos/portas-lógicas-OR.jpg" title="porta lógica OR"&gt;&lt;/p&gt;
&lt;p&gt;O Operador “OU” ou “OR” resulta em um valor VERDADEIRO se ao menos UM
dos dois valores de entrada da operação for VERDADEIRO, caso contrário o
resultado é FALSO. Abaixo a &lt;strong&gt;tabela-verdade&lt;/strong&gt; da operação OU.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;VALOR 1&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;VALOR 2&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OPERAÇÃO OU&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Operador NÃO (NOT)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="porta lógica
NOT" class="alignright" src="/images/operadores-logicos/portas-lógicas-NOT.jpg" title="porta lógica NOT"&gt;&lt;/p&gt;
&lt;p&gt;O Operador “NÃO” ou “NOT” é o único operador que recebe como entrada
apenas um valor, e sua função é simplesmente inverter os valores. Ou
seja, se o valor de entrada for VERDADEIRO, o resultado será FALSO e se
o valor de entrada for FALSO, o resultado será VERDADEIRO. Abaixo a
&lt;strong&gt;tabela-verdade&lt;/strong&gt; da operação NÃO.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;VALOR DE ENTRADA&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OPERAÇÃO NÃO&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Operador NÃO-E (NAND)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="porta lógica
NAND" class="alignright" src="/images/operadores-logicos/portas-lógicas-NAND.jpg" title="porta lógica NAND"&gt;&lt;/p&gt;
&lt;p&gt;O Operador “NÃO-E” ou “NAND” é o contrário do operador E (AND), ou seja,
resulta em VERDADEIRO, se ao menos um dos dois valores for FALSO, na
verdade este é o operador E (AND) seguido do operador NÃO (NOT). Abaixo
a &lt;strong&gt;tabela-verdade&lt;/strong&gt; da operação NÃO-E.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;VALOR 1&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;VALOR 2&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OPERAÇÃO NAND&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Operador NÃO-OU (NOR)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="pórta lógica
NOR" class="alignright" src="/images/operadores-logicos/pórtas-lógicas-NOR.jpg" title="pórta lógica NOR"&gt;&lt;/p&gt;
&lt;p&gt;O Operador “NÃO-OU” ou “NOR” é o contrário do operador OU (OR), ou seja,
resulta em VERDADEIRO, se os dois valores forem FALSO, na verdade este é
o operador OU (OR) seguido do operador NÃO (NOT). Abaixo a
&lt;strong&gt;tabela-verdade&lt;/strong&gt; da operação NÃO-OU.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;VALOR 1&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;VALOR 2&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OPERAÇÃO NOR&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Operador OU-EXCLUSIVO (XOR)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="porta lógica
XOR" class="alignright" src="/images/operadores-logicos/portas-lógicas-XOR.jpg" title="porta lógica XOR"&gt;&lt;/p&gt;
&lt;p&gt;O Operador “OU-EXCLUSIVO” ou “XOR” é uma variação interessante do
operador OU (OR), ele resulta em VERDADEIRO se apenas um dos valores de
entrada for VERDADEIRO, ou seja, apenas se os valores de entrada forem
DIFERENTES. Abaixo a &lt;strong&gt;tabela-verdade&lt;/strong&gt; da operação OU-EXCLUSIVO.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;VALOR 1&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;VALOR 2&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OPERAÇÃO XOR&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Operador NÃO-OU-EXCLUSIVO (XNOR)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="porta lógica
XNOR" class="alignright" src="/images/operadores-logicos/portas-lógicas-XNOR.jpg" title="porta lógica XNOR"&gt;&lt;/p&gt;
&lt;p&gt;O Operador “NÃO-OU-EXCLUSIVO” ou “XNOR” é o contrário do operador
OU-EXCLUSIVO (XOR), ou seja, resulta VERDADEIRO se os valores de entrada
forem IGUAIS. Observe a tabela abaixo:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;VALOR 1&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;VALOR 2&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OPERAÇÃO XNOR&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;td&gt;VERDADEIRO&lt;/td&gt;
&lt;td&gt;FALSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;FALSO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Operadores lógicos nas linguagens de programação&lt;/h2&gt;
&lt;p&gt;Cada linguagem de programação tem uma forma de representar os operadores
lógicos. A simbologia mais encontrada são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AND&lt;/strong&gt;, &lt;strong&gt;OR&lt;/strong&gt; e &lt;strong&gt;NOT&lt;/strong&gt; em linguagens como: Pascal, Visual Basic
    e SQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;amp;&amp;amp;&lt;/strong&gt;, &lt;strong&gt;||&lt;/strong&gt; e ! em linguagens como: Java  e C#&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Algumas linguagens oferecem operadores lógicos para o nível de bit
(também chamado de operadores bitwise). Ou seja, podemos fazer operações
lógicas com os bits de dois números. Em java, por exemplo esses
operadores são &amp;amp; e |. Veja o código abaixo escrito em java.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TesteBitwise&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;10 &amp;amp; 7 = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;10 | 7 = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Abaixo o resultado deste programa.&lt;/p&gt;
&lt;p&gt;&lt;img alt="resultado
bitwise" class="aligncenter" src="/images/operadores-logicos/resultado-bitwise.png"&gt;&lt;/p&gt;
&lt;p&gt;Essas operações lógicas são realizadas com os bits dos números de
entrada. Assim:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Convertemos o número 10 e o número 7 para binário.&lt;/p&gt;
&lt;p&gt;10 = 1010 em binário&lt;/p&gt;
&lt;p&gt;7 = 0111 em binário&lt;/p&gt;
&lt;p&gt;depois realizamos as operações lógicas com cada bit dos dois números.&lt;/p&gt;
&lt;p&gt;10 &amp;amp; 7 = 0010 = 2&lt;/p&gt;
&lt;p&gt;10 | 7 = 1111 = 15&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Conhecer esses operadores é muito importante para qualquer área
da tecnologia que você for trabalhar. Em
programação por exemplo, utilizamos esses operadores praticamente o
tempo todo, principalmente para controle de fluxo de execução e tomadas
de decisão. Se você chegou até aqui e não conseguiu entender direito o
que são os operadores lógicos, deixe um comentário aí em baixo parar
sanarmos as dúvidas.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Conheça os Operadores Relacionais!</title><link href="https://dicasdeprogramacao.com.br/operadores-relacionais/" rel="alternate"></link><published>2013-05-02T00:00:00-03:00</published><updated>2013-05-02T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-05-02:/operadores-relacionais/</id><summary type="html">&lt;p&gt;Operadores relacionais são utilizados para comparar valores, o resultado
de uma expressão relacional é um valor
&lt;a href="http://www.dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" target="_blank" title="Conheça os tipos de dados básicos em programação!"&gt;booleano&lt;/a&gt; (VERDADEIRO
ou FALSO). Os operadores relacionais são: &lt;strong&gt;igual&lt;/strong&gt;, &lt;strong&gt;diferente&lt;/strong&gt;,
&lt;strong&gt;maior&lt;/strong&gt;, &lt;strong&gt;menor&lt;/strong&gt;, &lt;strong&gt;maior ou igual&lt;/strong&gt;, &lt;strong&gt;menor ou igual&lt;/strong&gt;. Não é
necessário explicar cada um …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Operadores relacionais são utilizados para comparar valores, o resultado
de uma expressão relacional é um valor
&lt;a href="http://www.dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" target="_blank" title="Conheça os tipos de dados básicos em programação!"&gt;booleano&lt;/a&gt; (VERDADEIRO
ou FALSO). Os operadores relacionais são: &lt;strong&gt;igual&lt;/strong&gt;, &lt;strong&gt;diferente&lt;/strong&gt;,
&lt;strong&gt;maior&lt;/strong&gt;, &lt;strong&gt;menor&lt;/strong&gt;, &lt;strong&gt;maior ou igual&lt;/strong&gt;, &lt;strong&gt;menor ou igual&lt;/strong&gt;. Não é
necessário explicar cada um, pois eles são auto-explicativos. Mas para
quem é iniciante em desenvolvimento de softwares algumas informações
podem ser importantes, principalmente pelo fato de haver diferença entre
linguagens de
programação.
&lt;img alt="Operadores-relacionais" class="aligncenter" src="/images/operadores-relacionais/Operadores-relacionais.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Os operadores relacionais são diferente dependendo da linguagem de
programação, mas conhecendo os símbolos mais comuns, a maioria da
linguagens de programação fica mais fácil aprender. No
&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;VisuAlg&lt;/a&gt;,
os símbolos dos operadores relacionais são: =, &amp;lt;&amp;gt;, &amp;gt;, &amp;lt;,
&amp;gt;=, &amp;lt;=. Vamos testar esses operadores no
&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Quer aprender programação? Saiba qual a melhor linguagem!"&gt;Visualg&lt;/a&gt;
com
o algoritmo abaixo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;TesteOperadoresRelacionais&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LOGICO&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; =  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;gt;  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;gt;= &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;= &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; =  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;gt;  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;gt;= &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;= &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; =  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;gt;  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;  &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;gt;= &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;lt;= &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;? &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Algoritmo grande né? Como exercício pense em uma forma melhor de fazer
esse algoritmo. A intenção é mostrar o funcionamento dos operadores
relacionais com 3 possibilidades de valores: um número menor que o
outro, dois números iguais e um número maior que outro. Abaixo o
resultado da execução.&lt;/p&gt;
&lt;p&gt;&lt;img alt="resultado operadores
relacionais" class="aligncenter" src="/images/operadores-relacionais/resultado-operadores-relacionais.png"&gt;&lt;/p&gt;
&lt;h2&gt;Operadores Relacionais e linguagens de programação&lt;/h2&gt;
&lt;p&gt;Em todas as linguagens de programação existem símbolos para executarmos
essas operações. As operações &lt;strong&gt;maior&lt;/strong&gt;, &lt;strong&gt;menor&lt;/strong&gt;, &lt;strong&gt;maior ou
igual&lt;/strong&gt; e &lt;strong&gt;menor ou igual&lt;/strong&gt; na maioria das linguagens de programação
são os mesmos símbolos (até hoje não encontrei uma linguagem que tenha
símbolo diferente para estes
operadores): &lt;strong&gt;&amp;gt;&lt;/strong&gt; (maior), &lt;strong&gt;&amp;lt;&lt;/strong&gt; (menor), &lt;strong&gt;&amp;gt;=&lt;/strong&gt; (maior ou
igual) e &lt;strong&gt;&amp;lt;=&lt;/strong&gt;(menor ou igual). Mas os vilões dos iniciantes são os
símbolos para testar igualdade e diferença. Em cada linguagem é de um
jeito! Em java, C, C#, javascript, etc. Por exemplo,
os símbolos de igual e diferente são: &lt;strong&gt;==&lt;/strong&gt; e &lt;strong&gt;!=&lt;/strong&gt;. Já em Pascal,
SQL, Visual Basic, ... os símbolos de igual e diferente
são: &lt;strong&gt;=&lt;/strong&gt; e &lt;strong&gt;&amp;lt;&amp;gt;&lt;/strong&gt;. Então fique esperto quando for aprender
alguma dessas linguagens!&lt;/p&gt;
&lt;p&gt;Em java, não é possível testar Strings com o operador de igualdade
(&lt;strong&gt;==&lt;/strong&gt;), pois String é uma classe e não um tipo primitivo, e para
testar a igualdade entre objetos deve-se utilizar o método equals.
Assim: nome.equals(“João”).&lt;/p&gt;
&lt;p&gt;Em algumas linguagens de &lt;a href="" id="spiderWordFound3"&gt;&lt;/a&gt;programação (Python por
exemplo) é possível utilizar os operadores &lt;strong&gt;maior &lt;/strong&gt;e &lt;strong&gt;menor&lt;/strong&gt; para
verificar a precedência alfabética de um &lt;a href="" id="spiderWordFound4"&gt;&lt;/a&gt;texto em
relação a outro. Por exemplo: ”Pedro” &amp;lt; “Paulo” resulta em &lt;strong&gt;FALSO&lt;/strong&gt;,
pois o texto “Pedro” alfabeticamente aparece depois do texto “Paulo”.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Os operadores relacionais são muito utilizados em programação, as
decisões dos algoritmos geralmente são tomadas nas operações
relacionais, ou seja, as decisões baseiam-se em testes do estado das
variáveis. Então é muito importante entender o que é uma operação
relacional e quais os operadores utilizados nesse tipo de expressão.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Estrutura de repetição PARA</title><link href="https://dicasdeprogramacao.com.br/estrutura-de-repeticao-para/" rel="alternate"></link><published>2013-04-29T00:00:00-03:00</published><updated>2013-04-29T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-29:/estrutura-de-repeticao-para/</id><summary type="html">&lt;p&gt;Já precisou implementar um LOOP com número de iterações pré-definido?
(&lt;span style="text-decoration: underline;"&gt;iteração&lt;/span&gt; é cada vez
que as instruções do bloco do loop são executadas) Por exemplo, um
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;algoritmo&lt;/a&gt;
que realiza a soma dos números de 1 a 100, terá um número …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Já precisou implementar um LOOP com número de iterações pré-definido?
(&lt;span style="text-decoration: underline;"&gt;iteração&lt;/span&gt; é cada vez
que as instruções do bloco do loop são executadas) Por exemplo, um
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;algoritmo&lt;/a&gt;
que realiza a soma dos números de 1 a 100, terá um número de iterações
pré-definido (100).&lt;/p&gt;
&lt;p&gt;Podemos implementar esse LOOP com qualquer estrutura
de repetição (saiba mais sobre as
estruturas &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;ENQUANTO&lt;/a&gt;
e
&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-repita-ate" target="_blank" title="Estrutura de repetição REPITA-ATÉ"&gt;REPITA-ATÉ&lt;/a&gt;),
mas para isso é necessário utilizar um contador, uma
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" target="_blank" title="O que é variável e constante?"&gt;variável&lt;/a&gt;
que será utilizada para contar quantas iterações foram executadas até o
momento (o algoritmo de multiplicação utilizado &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;no artigo sobre
algoritmos&lt;/a&gt; implementa
um contador com a estrutura de repetição
&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;ENQUANTO&lt;/a&gt;). A
estrutura de repetição PARA, implementa um contador implicitamente. Veja
como é o seu esquema.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PARA&lt;/strong&gt; &amp;lt;variável contadora&amp;gt; &lt;strong&gt;DE&lt;/strong&gt; &amp;lt;valor inicial&amp;gt; &lt;strong&gt;ATE&lt;/strong&gt;
&amp;lt;valor final&amp;gt; [&lt;strong&gt;PASSO&lt;/strong&gt; &amp;lt;valor de incremento&amp;gt;] &lt;strong&gt;FAÇA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;instruções a serem executadas repetidamente até a &amp;lt;variável
contadora&amp;gt; atingir o valor final&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FIM&lt;/strong&gt;-PARA&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O passo de incremento é opcional, esse recurso serve pera definir qual o
valor do incremento do contador, por exemplo de 1 em 1 (padrão), de 2 em
2, de 3 em 3, etc. Essa estrutura de repetição realiza o incremento de
um contator de forma implícita, vejamos graficamente como funciona.&lt;/p&gt;
&lt;p&gt;&lt;img alt="estrutura-PARA" class="aligncenter" src="/images/estrutura-de-repeticao-para/estrutura-PARA.png"&gt;&lt;/p&gt;
&lt;p&gt;A &lt;span style="text-decoration: underline;"&gt;inicialização&lt;/span&gt; da
variável contadora é realizada implicitamente, com o &amp;lt;valor
inicial&amp;gt; informado da declaração da estrutura PARA. A &lt;span
style="text-decoration: underline;"&gt;condição&lt;/span&gt; para executar a
iteração é que o valor da variável contadora não tenha atingido o
&amp;lt;valor final&amp;gt;. E ao final de cada iteração, o valor da variável
contadora é &lt;span
style="text-decoration: underline;"&gt;incrementado&lt;/span&gt; em 1 (ou o valor
declarado como PASSO ou &amp;lt;valor de incremento&amp;gt;).&lt;/p&gt;
&lt;h2&gt;Estrutura PARA na prática!&lt;/h2&gt;
&lt;p&gt;Vamos implementar como exemplo um algoritmo para calcular o fatorial de
um número. Para quem não sabe, fatorial é a multiplicação de todos os
números de 1 até ao número que se está calculando. Por exemplo: Fatorial
de 5 (5!) = 1 * 2 * 3 * 4 * 5 = 120. Vamos criar um algoritmo
utilizando o ENQUANTO primeiro.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;FatorialComENQUANTO&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o número para calcular o fatorial: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ENQUANTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FACA&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMENQUANTO&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O fatorial de &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é : &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja que foi necessário incrementar o contador explicitamente (linha
16). Com a estrutura de repetição PARA, isso não é necessário. Vejamos
agora o mesmo algoritmo implementado com o PARA.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;FatorialComPARA&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INTEIRO&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o número para calcular o fatorial: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;PARA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FACA&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contador&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMPARA&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O fatorial de &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; é : &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fatorial&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nesta estrutura, não é necessário incrementar nem inicializar o
contador, isso é feito automaticamente. O resultado dos dois algoritmos
é o mesmo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado
Fatorial" class="aligncenter" src="/images/estrutura-de-repeticao-para/Resultado-Fatorial.png"&gt;&lt;/p&gt;
&lt;p&gt;LOOPs podem ser implementados com qualquer estrutura de repetição,
porém, em alguns casos uma estrutura se mostra mais adequada que outras,
como nesse caso do fatorial a mais adequada é a estrutura PARA. Conhecer
essas estruturas de repetição é muito importante para criar programas
melhores. Conheça as estruturas de
repetição &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;ENQUANTO&lt;/a&gt; e &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-repita-ate" target="_blank" title="Estrutura de repetição REPITA-ATÉ"&gt;REPITA-ATÉ&lt;/a&gt;.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Você precisa saber o que é SQL!</title><link href="https://dicasdeprogramacao.com.br/o-que-e-sql/" rel="alternate"></link><published>2013-04-26T09:20:00-03:00</published><updated>2013-04-26T09:20:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-26:/o-que-e-sql/</id><summary type="html">&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt; (Structured Query Language) é a linguagem padrão universal para
manipular &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/" target="_blank" title="O que é um Banco de Dados?"&gt;bancos de
dados&lt;/a&gt; relacionais
através dos
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;SGBDs&lt;/a&gt;.
Isso significa que todos os SGBDRs (Sistema de Gerenciamento de Banco de
Dados Relacionais) oferecem uma interface para acessar o banco de …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt; (Structured Query Language) é a linguagem padrão universal para
manipular &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/" target="_blank" title="O que é um Banco de Dados?"&gt;bancos de
dados&lt;/a&gt; relacionais
através dos
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;SGBDs&lt;/a&gt;.
Isso significa que todos os SGBDRs (Sistema de Gerenciamento de Banco de
Dados Relacionais) oferecem uma interface para acessar o banco de dados
utilizando a linguagem SQL, embora com algumas variações. Logo, saber o
que é SQL e como utilizá-la é fundamental para qualquer desenvolvedor de
softwares.&lt;/p&gt;
&lt;p&gt;A "Linguagem Estruturada de Consultas" (SQL, traduzida para o português)
é utilizada para interagir com o SGBD e executar várias tarefas como
inserir e alterar registros, criar objetos no banco de dados, gerenciar
usuário, consultar informações, controlar transações, etc. Todas as
operações realizadas no banco de dados podem ser solicitadas ao SGBD
utilizando esta linguagem.&lt;/p&gt;
&lt;p&gt;&lt;img alt="SQL" class="aligncenter" src="/images/o-que-e-sql/SQL.png"&gt;&lt;/p&gt;
&lt;p&gt;A linguagem SQL é dividida em 4 agrupamentos de acordo com o tipo de
operação a ser executada no banco de dados. A saber, DML (Data
Manipulation Language, ou Linguagem de Manipulação de Dados e
português), DDL (Data Definition Language, ou Linguagem de Definição de
Dados em português), DCL (Data Control Language, ou Linguagem de
Controle de Dados em português) e DTL (Data Transaction Language, ou
Linguagem de Transação de Dados em português).&lt;/p&gt;
&lt;p&gt;Alguns autores classificam também uma divisão da linguagem para consultas,
a DQL (Data Query Language, Linguagem de Consulta de Dados), que tem apenas um
comando (SELECT), porém é mais comum encontrar este comando como
integrante da DML, juntamente com os comandos INSERT, UPDATE e DELETE.
Vejamos os comandos SQL de cada agrupamento.&lt;/p&gt;
&lt;h2&gt;DML - Data Manipulation Language&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DML&lt;/strong&gt; (Linguagem de Manipulação de &lt;a href="" id="spiderWordFound5"&gt;&lt;/a&gt;Dados) é o
subconjunto mais utilizado da linguagem &lt;strong&gt;SQL&lt;/strong&gt;, pois é através da DML
que operamos sobre os &lt;span
style="text-decoration: underline;"&gt;dados&lt;/span&gt; dos bancos de dados com
instruções de inserção, atualização, exclusão e consulta de informações.
Os comandos SQL desse subconjunto são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style="line-height: 13px;"&gt;INSERT&lt;/span&gt;&lt;/strong&gt;&lt;span
    style="line-height: 13px;"&gt;: utilizado para inserir registros
    (tuplas), em uma tabela.&lt;/span&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;Exemplo: &lt;span
    style="text-decoration: underline;"&gt;INSERT into
    CLIENTE(ID, NOME) values(1,'José');&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: utilizado para alterar valores de uma ou mais
    linhas (tuplas) de uma tabela.&lt;ul&gt;
&lt;li&gt;Exemplo: &lt;span style="text-decoration: underline;"&gt;UPDATE
    CLIENTE set NOME = 'João'  WHERE ID = 1;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DELETE&lt;/strong&gt;: utilizado para excluir um ou mais registros (tupla) de
    uma tabela.&lt;ul&gt;
&lt;li&gt;Exemplo: &lt;span style="text-decoration: underline;"&gt;DELETE FROM
    CLIENTE WHERE ID = 1;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SELECT&lt;/strong&gt;: O principal comando da SQL, o comando select é utilizado
    para efetuar consultas no banco de dados.&lt;ul&gt;
&lt;li&gt;Exemplo: &lt;span style="text-decoration: underline;"&gt;SELECT ID,
    NOME FROM CLIENTE;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Nota:&lt;/span&gt; &lt;strong&gt;Registro&lt;/strong&gt;,
&lt;strong&gt;Linha&lt;/strong&gt; e &lt;strong&gt;Tupla&lt;/strong&gt; são palavras sinônimas para referenciar a uma
linha da tabela.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;DDL - Data Definition Language&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DDL&lt;/strong&gt; (Linguagem de Definição de Dados) é o subconjunto da &lt;strong&gt;SQL&lt;/strong&gt;
utilizado para gerenciar a estrutura do banco de dados. Com a DDL
podemos criar, alterar e remover objetos (tabelas, visões, funções,
etc.) no banco de dados. Os comandos deste subconjunto são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;&lt;strong&gt;CREATE&lt;/strong&gt;: utilizado para criar
    objetos no banco de dados.&lt;/span&gt;&lt;ul&gt;
&lt;li&gt;Exemplo (criar uma tabela): &lt;span
    style="text-decoration: underline;"&gt;CREATE TABLE CLIENTE ( ID
    INT PRIMARY KEY, NOME VARCHAR(50));&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ALTER&lt;/strong&gt;: utilizado para alterar a estrutura de um objeto.&lt;ul&gt;
&lt;li&gt;Exemplo (adicionar uma coluna em uma tabela existente): &lt;span
    style="text-decoration: underline;"&gt;ALTER TABLE CLIENTE ADD SEXO
    CHAR(1);&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DROP&lt;/strong&gt;: utilizado para remover um objeto do banco de dados.&lt;ul&gt;
&lt;li&gt;Exemplo (remover uma tabela): &lt;span
    style="text-decoration: underline;"&gt;DROP TABLE CLIENTE;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;DCL - Data Control Language&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DCL&lt;/strong&gt; (Linguagem de Controle de Dados) é o subconjunto da &lt;strong&gt;SQL&lt;/strong&gt;
utilizado para controlar o acesso aos dados, basicamente com dois
comandos que permite ou bloqueia o acesso de usuários a dados. Vejamos
estes comandos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GRANT&lt;/strong&gt;: Autoriza um usuário a executar alguma operação.&lt;ul&gt;
&lt;li&gt;Exemplo (dar permissão de consulta na tabela cliente para o
    usuário carlos): &lt;span style="text-decoration: underline;"&gt;GRANT
    select ON cliente TO carlos;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REVOKE&lt;/strong&gt;: Restringe ou remove a permissão de um usuário executar
    alguma operação.&lt;ul&gt;
&lt;li&gt;Exemplo (não permitir que o usuário carlos crie tabelas no banco
    de dados): REVOKE CREATE TABLE FROM carlos;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;DTL - Data Transaction Language&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DTL&lt;/strong&gt; (Linguagem de controle de transações) é o subconjunto da &lt;strong&gt;SQL&lt;/strong&gt;
que fornece mecanismos para controlar transações no banco de dados. São
3 comandos: iniciar uma transação (BEGIN TRANSACTION), efetivar as
alterações no banco de dados (COMMIT) e cancelar as alterações
(ROLLBACK).&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Quem quer trabalhar com desenvolvimento de softwares precisa aprender a
SQL, pois a maioria dos sistemas de informação interage com banco de
dados, e essa é a linguagem universal para fazer qualquer coisa nos
bancos de dados relacionais (o tipo de banco de dados mais utilizado na
industria). Pode haver pequenas variações na linguagem dependendo do
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" target="_blank" title="O que é um SGBD?"&gt;SGBD&lt;/a&gt;,
mas a sintaxe dos comandos são muito parecidas.&lt;/p&gt;
&lt;p&gt;Cada comando citado neste artigo possui uma série de recursos, o comando
que tem mais recursos, obviamente, é o comando SELECT. O objetivo deste
artigo é apenas apresentar a linguagem SQL e seus comandos, continue
ligado aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt; que vamos ver os detalhes de
cada comando desta linguagem.&lt;/p&gt;</content><category term="Banco de dados"></category></entry><entry><title>Estrutura de repetição REPITA-ATÉ</title><link href="https://dicasdeprogramacao.com.br/estrutura-de-repeticao-repita-ate/" rel="alternate"></link><published>2013-04-24T00:00:00-03:00</published><updated>2013-04-24T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-24:/estrutura-de-repeticao-repita-ate/</id><summary type="html">&lt;p&gt;Frequentemente precisamos implementar uma estrutura de repetição em
nossos algoritmos para resolver algum problema. Um recurso para fazer
isso é a estrutura ENQUANTO.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;&amp;gt;&amp;gt;Conheça a estrutura de repetição ENQUANTO!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Uma outra estrutura de repetição interessante é a &lt;strong&gt;REPITA-ATÉ&lt;/strong&gt;
(Repeat-Until). A …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Frequentemente precisamos implementar uma estrutura de repetição em
nossos algoritmos para resolver algum problema. Um recurso para fazer
isso é a estrutura ENQUANTO.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;&amp;gt;&amp;gt;Conheça a estrutura de repetição ENQUANTO!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Uma outra estrutura de repetição interessante é a &lt;strong&gt;REPITA-ATÉ&lt;/strong&gt;
(Repeat-Until). A diferença desta estrutura é que ela é um &lt;strong&gt;LOOP
PÓS-TESTADO&lt;/strong&gt;, isto é, o teste para verificar se o bloco será executado
novamente, acontece no final do bloco. Isso garante que as instruções
dentro deste bloco serão executadas ao menos uma vez. Veja como é o
esquema do &lt;strong&gt;REPITA-ATÉ&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;REPITA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;instruções a serem executadas repetidamente &lt;span
style="text-decoration: underline;"&gt;até&lt;/span&gt; a expressão booleana
retornar VERDADEIRO&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ATÉ&lt;/strong&gt; &amp;lt;expressão booleana&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Perceba, que além de ser pós-testada, esta estrutura testa o contrário
do ENQUANTO. Na estrutura &lt;strong&gt;REPITA-ATÉ&lt;/strong&gt;, as instruções do bloco são
executadas repetidamente &lt;span
style="text-decoration: underline;"&gt;enquanto&lt;/span&gt; a expressão booleana
resultar FALSO. A partir do momento que a expressão booleana resultar
VERDADEIRO, o fluxo do algoritmo sairá do LOOP. Veja  graficamente o
funcionamento.&lt;/p&gt;
&lt;p&gt;&lt;img alt="estrutura-REPITA" class="aligncenter" src="/images/estrutura-de-repeticao-repita-ate/estrutura-REPITA.png"&gt;&lt;/p&gt;
&lt;h2&gt;A estrutura REPITA-ATÉ na prática!&lt;/h2&gt;
&lt;p&gt;Vamos usar o mesmo exemplo que apresentei no artigo sobre a &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;estrutura
de repetição
ENQUANTO&lt;/a&gt;.
Pois naquele algoritmo, foi preciso repetir uma parte do código para
solucionar uma particularidade da estrutura. Vejamos novamente o exemplo
(Lembrando que estamos utilizando o VisuAlg para implementar os
algoritmos, para mais detalhes &lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Linguagem de programação para iniciantes"&gt;clique
aqui&lt;/a&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;SomaEnquantoValorDiferenteDe0&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite um valor para a soma: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ENQUANTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FACA&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Total: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite um valor para a soma: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMENQUANTO&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Resultado: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja que a leitura de dados é escrita duas vezes neste algoritmo (linhas
8,9,14 e 15), o motivo para fazer isso é que a estrutura ENQUANTO é
&lt;span style="text-decoration: underline;"&gt;pré-testada&lt;/span&gt;. Logo, não
dá pra testar se o usuário digitou o valor 0 se ele ainda não tiver
digitado valor nenhum. Com a estrutura de repetição REPITA-ATÉ não é
necessário escrever duas vezes a leitura de dados do usuário, pois ela é
&lt;span style="text-decoration: underline;"&gt;pós-testada&lt;/span&gt;. Observe a
implementação daquele algoritmo com REPITA-ATÉ.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;SomaAteValorIgualA0&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;REPITA&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite um valor para a soma: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Total: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Podemos observar que o teste mudou de (&lt;strong&gt;valorDigitado &amp;lt;&amp;gt; 0&lt;/strong&gt;) na
estrutura ENQUANTO, para (&lt;strong&gt;valorDigitado = 0&lt;/strong&gt;) na estrutura
REPITA-ATÉ. Você saberia explicar por quê? Pense um pouco e responda por
si mesmo. (Se tiver dúvida pode deixar um comentário que explicaremos).
O resultado deste algoritmo pode ser observado abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado
REPITA-ATE" class="aligncenter" src="/images/estrutura-de-repeticao-repita-ate/Resultado-REPITA-ATE.png"&gt;&lt;/p&gt;
&lt;p&gt;Pra finalizar, percebemos que é possível utilizar qualquer uma das duas
estruturas para implementar LOOPs, porém cada uma é mais apropriada
dependendo do problema. Neste problema em particular, a estrutura
REPITA-ATÉ se mostrou mais apropriada. Mas essa decisão de qual utilizar
entre as duas, sempre será tomada observando a diferença entre
PRÉ-TESTADA e PÓS-TESTADA.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Estrutura de repetição ENQUANTO</title><link href="https://dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" rel="alternate"></link><published>2013-04-22T00:00:00-03:00</published><updated>2013-04-22T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-22:/estrutura-de-repeticao-enquanto/</id><summary type="html">&lt;p&gt;Em nossos algoritmos, hora ou outra precisamos executar alguns passos
&lt;span style="text-decoration: underline;"&gt;mais de uma vez&lt;/span&gt;. Ou
mesmo executar repetidamente alguns passos até que alguma condição seja
atendida. A partir dessa necessidade surgem as estruturas de
repetição, também conhecidas como &lt;strong&gt;LOOP&lt;/strong&gt;. Neste …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Em nossos algoritmos, hora ou outra precisamos executar alguns passos
&lt;span style="text-decoration: underline;"&gt;mais de uma vez&lt;/span&gt;. Ou
mesmo executar repetidamente alguns passos até que alguma condição seja
atendida. A partir dessa necessidade surgem as estruturas de
repetição, também conhecidas como &lt;strong&gt;LOOP&lt;/strong&gt;. Neste artigo, vamos tratar
de forma especial a estrutura de repetição &lt;strong&gt;ENQUANTO&lt;/strong&gt; (em inglês,
&lt;strong&gt;WHILE&lt;/strong&gt;). Seu funcionamento é tão simples quanto a &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de decisão SE-ENTÃO-SENÃO"&gt;&lt;strong&gt;estrutura de
decisão SE-ENTÃO&lt;/strong&gt;&lt;/a&gt;.
A diferença é que os passos dentro deste bloco, são repetidos &lt;span
style="text-decoration: underline;"&gt;enquanto&lt;/span&gt; a expressão booleana
(VERDADEIRO ou FALSO) resultar VERDADEIRO. Veja o esquema abaixo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ENQUANTO &lt;/strong&gt;&amp;lt;expressão booleana&amp;gt; &lt;strong&gt;FAÇA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;instruções a serem executadas &lt;span
style="text-decoration: underline;"&gt;enquanto&lt;/span&gt; a expressão
booleana resultar em VERDADEIRO&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FIM-ENQUANTO&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Esta estrutura de repetição é também chamada de loop &lt;span
style="text-decoration: underline;"&gt;pré-testado&lt;/span&gt;, pois a expressão
booleana é verificada antes da primeira execução. Se inicialmente ela já
resultar em FALSO, as instruções que estão dentro do bloco não são
executadas nenhuma vez.&lt;/p&gt;
&lt;p&gt;&lt;img alt="estrutura-ENQUATO" class="aligncenter" src="/images/estrutura-de-repeticao-enquanto/estrutura-ENQUATO.png"&gt;&lt;/p&gt;
&lt;h2&gt;Estrutura ENQUANTO na prática!&lt;/h2&gt;
&lt;p&gt;Para entender na prática como usamos essa estrutura de repetição,
vejamos um exemplo de algoritmo utilizando a ferramenta &lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Linguagem de programação para iniciantes"&gt;&lt;span
style="text-decoration: underline;"&gt;VisuAlg&lt;/span&gt;&lt;/a&gt;.
Vamos implementar um algoritmo para somar valores até o usuário digitar
o valor 0. Ou seja, vamos somar todos os valores que o usuário digitar,
porém quando ele digitar 0 o "loop" acaba, a cada iteração do loop vamos
apresentar o resultado atual da soma.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;SomaEnquantoValorDiferenteDe0&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite um valor para a soma: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ENQUANTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FACA&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Total: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite um valor para a soma: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valorDigitado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMENQUANTO&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Resultado: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Observe o resultado deste algoritmo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado algoritmo
ENQUANTO" class="aligncenter" src="/images/estrutura-de-repeticao-enquanto/Resultado-algoritmo-ENQUANTO.png"&gt;&lt;/p&gt;
&lt;p&gt;As estruturas de repetição são muito utilizadas em desenvolvimento de
softwares. Entender como funciona é muito importante para resolver
problemas que precisam executar tarefas repetidas vezes. Para praticar a
utilização da estrutura ENQUANTO, implemente um algoritmo no
&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Linguagem de programação para iniciantes"&gt;VisuAlg&lt;/a&gt;
para calcular uma multiplicação através de somas consecutivas, para
facilitar assuma que os dois fatores da multiplicação são positivos.
Caso não consiga, acesse o artigo &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;O que é
Algoritmo&lt;/a&gt;,
que tem um exemplo desse cálculo.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Você sabe usar os Operadores Aritméticos em programação?</title><link href="https://dicasdeprogramacao.com.br/operadores-aritmeticos/" rel="alternate"></link><published>2013-04-19T00:00:00-03:00</published><updated>2013-04-19T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-19:/operadores-aritmeticos/</id><summary type="html">&lt;p&gt;Todo mundo já usou operadores aritméticos na escola! Nos primeiros anos
de estudo aprendemos a fazer continhas de soma, subtração, multiplicação
e divisão. Em algoritmos eles também são simples e têm a mesma
simbologia em todas as linguagens de programação …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Todo mundo já usou operadores aritméticos na escola! Nos primeiros anos
de estudo aprendemos a fazer continhas de soma, subtração, multiplicação
e divisão. Em algoritmos eles também são simples e têm a mesma
simbologia em todas as linguagens de programação ( +, -, * e / ).&lt;/p&gt;
&lt;p&gt;Além desses mais simples, dois outros operadores aritméticos não recebem
muita atenção e pode ser que você não os conhece, eles são o &lt;strong&gt;div&lt;/strong&gt; e
o &lt;strong&gt;mod&lt;/strong&gt;, que resultam, respectivamente, o &lt;strong&gt;quociente &lt;/strong&gt;(a
parte inteira do resultado da divisão) e o &lt;strong&gt;resto&lt;/strong&gt; da divisão. Observe
as operações abaixo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;14 &lt;strong&gt;/&lt;/strong&gt; 4 = 3,5&lt;/p&gt;
&lt;p&gt;14 &lt;strong&gt;div&lt;/strong&gt; 4 = 3&lt;/p&gt;
&lt;p&gt;14 &lt;strong&gt;mod&lt;/strong&gt; 4 = 2&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O operador &lt;strong&gt;mod&lt;/strong&gt; em muitas linguagens de programação (java por
exemplo) é representado pelo símbolo “&lt;strong&gt;%&lt;/strong&gt;“, assim:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;14 &lt;strong&gt;%&lt;/strong&gt; 4 = 2&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="operadores
aritméticos" class="aligncenter" src="/images/operadores-aritmeticos/operadores-aritméticos.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Um outro operador aritmético que existe em algumas linguagens de
programação é o &lt;strong&gt;^&lt;/strong&gt; e executa a operação de potência, mas geralmente
essa operação é realizada através de uma função chamada &lt;strong&gt;pow&lt;/strong&gt;, bem
como a operação de radiciação (função &lt;strong&gt;sqrt)&lt;/strong&gt;. Veja um exemplo do
operador ^:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2 &lt;strong&gt;^&lt;/strong&gt; 5 = 32 (dois elevado a cinco)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Operadores aritméticos de radiciação também são fornecidos por algumas
linguagens de programação, mas esses são bem mais raros. O Postgres por
exemplo oferece os símbolos &lt;strong&gt;|/&lt;/strong&gt; e &lt;strong&gt;||/&lt;/strong&gt; para operações de raiz
quadrada e raiz cúbica, respectivamente.&lt;/p&gt;
&lt;h2&gt;Precedência entre os operadores aritméticos&lt;/h2&gt;
&lt;p&gt;Da mesma forma que na matemática, os operadores
de multiplicação e divisão têm precedência de execução em relação aos
operadores de soma e subtração. Aliás se tiver parênteses na expressão
estes têm precedência ainda maior. A tabela abaixo indica a precedência
dos operadores.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Prioridade&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Operadores&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1º&lt;/td&gt;
&lt;td&gt;Parênteses internos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2º&lt;/td&gt;
&lt;td&gt;potência (&lt;strong&gt;^&lt;/strong&gt;) e raiz (quando a linguagem oferece esses operadores)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3º&lt;/td&gt;
&lt;td&gt;* / &lt;strong&gt;div&lt;/strong&gt; e &lt;strong&gt;mod&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4º&lt;/td&gt;
&lt;td&gt;+ e -&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Os operadores de mesma prioridade são interpretados da esquerda para a
direita. Para exemplificar essa questão de precedência, observe a
expressão:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;5 + 3 * ( 3 – 1 ) – 2 ^ 5 / 4 – 1&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O computador executa o cálculo na seguinte sequência:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;5 + 3 * &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/span&gt; - 2 ^
5 / 4 – 1&lt;/p&gt;
&lt;p&gt;5 + 3 * 2 - &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;32&lt;/strong&gt;&lt;/span&gt; /
4 – 1&lt;/p&gt;
&lt;p&gt;5 + &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/span&gt; - 32 / 4 –
1&lt;/p&gt;
&lt;p&gt;5 + 6 - &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/span&gt; – 1&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;11&lt;/strong&gt;&lt;/span&gt; - 8 - 1&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/span&gt; – 1&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Os operadores aritméticos realmente todo mundo deve saber desde criança,
mas para criarmos algoritmos é muito importante conhecermos mais
detalhes, como o operador &lt;strong&gt;mod&lt;/strong&gt; ou a ordem de precedência de cada um.
Ainda assim, um dia você pode ser surpreendido com um resultado que você
não esperava de uma expressão.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Como criar um projeto de banco de dados</title><link href="https://dicasdeprogramacao.com.br/como-criar-um-projeto-de-banco-de-dados/" rel="alternate"></link><published>2013-04-17T00:00:00-03:00</published><updated>2013-04-17T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-17:/como-criar-um-projeto-de-banco-de-dados/</id><summary type="html">&lt;p&gt;O banco de dados, muitas vezes, é a parte mais importante do sistema,
pois é onde fica a informação. Por consequência, um projeto de banco de
dados é essencial para o desenvolvimento de sistemas de informação. Um
projeto de banco …&lt;/p&gt;</summary><content type="html">&lt;p&gt;O banco de dados, muitas vezes, é a parte mais importante do sistema,
pois é onde fica a informação. Por consequência, um projeto de banco de
dados é essencial para o desenvolvimento de sistemas de informação. Um
projeto de banco de dados bem ou mal realizado pode determinar o sucesso
ou insucesso do sistema.&lt;/p&gt;
&lt;p&gt;Muitas vezes a falta de clareza ao entender a
natureza exata do ambiente onde o banco de dados será aplicado, leva à
criação de bancos de dados ruins, que não alcançam o objetivo esperado
pelo cliente. Neste artigo vou apresentar as etapas de um projeto de
banco de dados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/" target="_blank" title="O que é um Banco de Dados?"&gt;O que é um banco de
dados?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/a-historia-dos-bancos-de-dados/" target="_blank" title="A história dos bancos de dados"&gt;&lt;strong&gt;A história dos bancos de
dados&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;As etapas de um projeto de banco de dados&lt;/h2&gt;
&lt;p&gt;Um projeto de banco de dados é sub-dividido em etapas onde o objetivo é
a criação de um banco de dados otimizado que atenda as expectativas do
cliente. E nesse contexto, os modelos de dados são muito importantes
para a transmissão de idéias entre o cliente e o projetista, bem como
facilitar a manutenção do banco de dados no futuro.&lt;/p&gt;
&lt;p&gt;O projeto de banco
de dados é basicamente, dividido em &lt;strong&gt;Projeto Conceitual&lt;/strong&gt;, &lt;strong&gt;Projeto
Lógico&lt;/strong&gt; e &lt;strong&gt;Projeto Físico&lt;/strong&gt;. Porém antes de começar a projetar o banco
de dados é necessário a realização de análise de requisitos junto ao
cliente.&lt;/p&gt;
&lt;p&gt;Essa talvez seja a fase mais importante do projeto, pois é
nessa hora que as necessidades e expectativas do cliente são
transmitidas para o projetista. Veja o fluxo do projeto de banco de
dados na figura abaixo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Projeto de banco de dados" class="aligncenter" src="/images/como-criar-um-projeto-de-banco-de-dados/Projeto-de-banco-de-dados.png"&gt;&lt;/p&gt;
&lt;h2&gt;Primeira etapa: Análise de Requisitos&lt;/h2&gt;
&lt;p&gt;A primeira etapa do projeto de banco de dados é a identificação dos
requisitos que o banco de dados deve atender. Nesta fase devem ser
realizadas entrevistas com as pessoas envolvidas no processo, cria-se
uma descrição textual macro do processo (texto conhecido como
mini-mundo), modelos externos (que devem ser entendidos por todos).&lt;/p&gt;
&lt;p&gt;Este é o momento em que as regras de negócio devem ser identificadas, se
a fase de análise de requisitos for mal executada e se identificar
regras de negócio que não representam a realidade, tudo o que for feito
em seguida no projeto será perda de tempo. Por isso, esta é considerada
a &lt;strong&gt;parte mais importante do projeto&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Segunda Etapa: Projeto Conceitual&lt;/h2&gt;
&lt;p&gt;O &lt;strong&gt;Projeto Conceitual&lt;/strong&gt; se baseia na especificação de requisitos criada
na etapa anterior. A partir deste insumo de informações é gerado um
esquema conceitual do banco de dados. Esquema conceitual é uma visão
macro do banco de dados, uma descrição de alto nível da estrutura.&lt;/p&gt;
&lt;p&gt;Os &lt;strong&gt;modelos de Entidade-Relacionamento&lt;/strong&gt; são muito utilizados para
descrever os esquemas conceituais. É importante frisar que nesta fase
descreve-se o &lt;span style="text-decoration: underline;"&gt;conteúdo de
informação&lt;/span&gt; e não a estrutura onde elas serão armazenadas
(tabelas, colunas, visões, etc...)&lt;/p&gt;
&lt;p&gt;&lt;img alt="projeto" class="aligncenter" src="/images/como-criar-um-projeto-de-banco-de-dados/projeto.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;Terceira etapa: Projeto Lógico&lt;/h2&gt;
&lt;p&gt;O &lt;strong&gt;Projeto Lógico&lt;/strong&gt; é a etapa onde mapeamos o conceito dos modelos de
entidade-relacionamento em objetivos de bancos de dados. Nesta fase
criamos os &lt;strong&gt;modelos internos&lt;/strong&gt; de bancos de dados, com detalhes sobre
tabelas, relacionamentos, regras, metadados das colunas (tipo, tamanho,
obrigatoriedade, ...), visões, etc.&lt;/p&gt;
&lt;p&gt;Ao final, o resultado de um projeto
lógico é um &lt;span style="text-decoration: underline;"&gt;esquema do banco
de dados&lt;/span&gt; parecido com o modelo conceitual, porém com mais
detalhes de banco de dados e não apenas conceitos.&lt;/p&gt;
&lt;h2&gt;Quarta Etapa: Projeto Físico&lt;/h2&gt;
&lt;p&gt;O &lt;strong&gt;Projeto Físico&lt;/strong&gt; é a parte final do projeto de banco de dado, nesta
etapa define-se detalhes técnicos da implementação do banco de dados,
por exemplo a forma como os dados serão armazenados, os scripts para a
criação dos objetos no banco de dados (tabelas, visões, colunas,
funções, ...), permissão de acesso de usuário, etc. Esta etapa é
fortemente ligada ao
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-sgbd/" title="O que é um SGBD?"&gt;SGBD&lt;/a&gt;
que será utilizado. A otimização de desempenho do banco de dados é
trabalhada nesta fase do projeto.&lt;/p&gt;
&lt;p&gt;&lt;img alt="servidor-de-banco-de-dados" class="aligncenter" src="/images/como-criar-um-projeto-de-banco-de-dados/servidor-de-banco-de-dados.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Projetar bem o banco de dados é vital para o sucesso do sistema que está
sendo desenvolvido. As primeiras etapa do projeto são de grande
importância para se criar um banco de dados que realmente atenda as
necessidades do cliente, enquanto as últimas etapas do projeto estão
mais ligadas à tecnologia de Banco de dados que será adotada,
principalmente o projeto físico.&lt;/p&gt;</content><category term="Banco de dados"></category></entry><entry><title>Estrutura de seleção multipla ESCOLHA-CASO</title><link href="https://dicasdeprogramacao.com.br/estrutura-de-selecao-multipla-escolha-caso/" rel="alternate"></link><published>2013-04-15T00:00:00-03:00</published><updated>2013-04-15T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-15:/estrutura-de-selecao-multipla-escolha-caso/</id><summary type="html">&lt;p&gt;A estrutura ESCOLHA-CASO (em inglês SWITCH-CASE), é uma solução elegante
quanto se tem várias &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de Decisão SE-ENTÃO-SENÃO"&gt;estruturas de
decisão&lt;/a&gt;
(SE-ENTÃO-SENÃO) aninhadas. Isto é, quando outras verificações são
feitas caso a anterior tenha falhado (ou seja, o fluxo do algoritmo
entrou no bloco …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A estrutura ESCOLHA-CASO (em inglês SWITCH-CASE), é uma solução elegante
quanto se tem várias &lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de Decisão SE-ENTÃO-SENÃO"&gt;estruturas de
decisão&lt;/a&gt;
(SE-ENTÃO-SENÃO) aninhadas. Isto é, quando outras verificações são
feitas caso a anterior tenha falhado (ou seja, o fluxo do algoritmo
entrou no bloco SENÃO). A proposta da estrutura ESCOLHA-CASO é permitir
ir direto no bloco de código desejado, dependendo do valor de uma
variável de verificação. Veja o esquema abaixo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ESCOLHA&lt;/strong&gt; &amp;lt;variável de verificação&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CASO&lt;/strong&gt; &amp;lt;valor1&amp;gt; &lt;strong&gt;FAÇA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;"instruções a serem executadas caso &amp;lt;variável de verificação&amp;gt; =
&amp;lt;valor1&amp;gt;"&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CASO&lt;/strong&gt; &amp;lt;valor2&amp;gt; &lt;strong&gt;FAÇA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;"instruções a serem executadas caso &amp;lt;variável de verificação&amp;gt; =
&amp;lt;valor2&amp;gt;"&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CASO&lt;/strong&gt; &amp;lt;valor3&amp;gt; &lt;strong&gt;FAÇA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;"instruções a serem executadas caso &amp;lt;variável de verificação&amp;gt; =
&amp;lt;valor3&amp;gt;"&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FIM-ESCOLHA&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Veja o esquema desta estrutura de seleção.&lt;/p&gt;
&lt;p&gt;&lt;img alt="estrutura-ESCOLHA" class="aligncenter" src="/images/estrutura-de-selecao-multipla-escolha-caso/estrutura-ESCOLHA.png"&gt;&lt;/p&gt;
&lt;h2&gt;ESCOLHA-CASO na prática!&lt;/h2&gt;
&lt;p&gt;Para exemplificar a melhoria oferecida por essa estrutura, imagine a
seguinte situação: Você deseja criar um algoritmo para uma calculadora,
o usuário digita o primeiro número, a operação que deseja executar e o
segundo número. Dependendo do que o usuário informar como operador, o
algoritmo executará um cálculo diferente (soma, subtração, multiplicação
ou divisão). Vejamos como seria esse algoritmo implementado no
&lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Linguagem de programação para iniciantes"&gt;VisuAlg&lt;/a&gt; com
&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de decisão SE-ENTÃO-SENÃO"&gt;SE-ENTÃO-SENÃO&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;CalculadoraBasicaComSE&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CARACTERE&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o primeiro número: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite a operação: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o segundo número: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;+&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Resultado: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Veja como os SEs aninhados (dentro dos SENÃOs) deixam o código mais
complexo. Dá pra entender a lógica, mas não é muito elegante. Agora
vamos ver como ficaria a mesma lógica com a estrutura ESCOLHA-CASO.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;CalculadoraBasicaComSE&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CARACTERE&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o primeiro número: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite a operação: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Digite o segundo número: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCOLHA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operacao&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;+&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMESCOLHA&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Resultado: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Bem mais bonito! Agora a lógica tá mais visível e elegante. O resultado
dos dois algoritmos é o mesmo, veja um exemplo de execução deste
programa.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado do Algoritmo de Calculadora
básica" class="aligncenter" src="/images/estrutura-de-selecao-multipla-escolha-caso/Resultado-do-Algoritmo-de-Calculadora-básica.png"&gt;&lt;/p&gt;
&lt;h2&gt;Caso não tratado na estrutura (OUTROCASO)&lt;/h2&gt;
&lt;p&gt;Existe uma opção a mais nessa estrutura, justamente para tratar quando o
valor da variável não é equivalente a nenhum valor informado como opção
nos CASOs, ou seja, é um "OUTROCASO". No algoritmo listado
anteriormente, imagine se o usuário digitasse um valor diferente de "+",
"-", "*" e "/". Caso quiséssemos apresentar uma mensagem para o usuário
informando que ele digitou uma opção inválida, utilizaríamos esse
recurso da estrutura ESCOLHA-CASO. Veja.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nv"&gt;ESCOLHA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;operacao&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;+&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nv"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nv"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nv"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;CASO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nv"&gt;resultado&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;numero2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;OUTROCASO&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;ESCREVA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;A operação digitada é inválida!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nv"&gt;FIMESCOLHA&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Como pudemos observar, em termos de organização de código a estrutura
ESCOLHA-CASO é uma opção muito elegante quando se tem muitos
SE-ENTÃO-SENÃO para verificar a mesma variável. Facilita a leitura do
algoritmo e a manutenção do código.&lt;/p&gt;
&lt;p&gt;Como exercício para praticar essa
estrutura de controle de fluxo, crie um algoritmo em que o usuário
digita uma letra qualquer, e o programa verifica qual a ordem dessa
letra no alfabeto, por exemplo: se o usuário digitar a letra 'G' o
programa deve imprimir na tela, "G é a sétima letra do alfabeto".
Implemente com a estrutura ESCOLHA-CASO e depois com a estrutura
SE-ENTÃO-SENÃO para perceber a diferença. Qualquer dúvida deixe nos
comentários aqui em baixo.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>A história dos bancos de dados</title><link href="https://dicasdeprogramacao.com.br/a-historia-dos-bancos-de-dados/" rel="alternate"></link><published>2013-04-01T00:00:00-03:00</published><updated>2013-04-01T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-01:/a-historia-dos-bancos-de-dados/</id><summary type="html">&lt;p&gt;Hoje os &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/" target="_blank" title="O que é um Banco de Dados?"&gt;bancos de
dados&lt;/a&gt;
são essenciais para muitas empresas e estão no coração de muitos
sistemas computacionais. Ter acesso rápido às informações é muito
importante para a correta tomada de decisões em um negócio.&lt;/p&gt;
&lt;p&gt;Se você pretende trabalhar com …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Hoje os &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/" target="_blank" title="O que é um Banco de Dados?"&gt;bancos de
dados&lt;/a&gt;
são essenciais para muitas empresas e estão no coração de muitos
sistemas computacionais. Ter acesso rápido às informações é muito
importante para a correta tomada de decisões em um negócio.&lt;/p&gt;
&lt;p&gt;Se você pretende trabalhar com desenvolvimento de softwares, com certeza
precisará trabalhar com bancos de dados em algum momento. Conhecer a
história dos bancos de dados e como eles evoluíram é muito importante
para entender como os bancos de dados mais comum são organizados. Então
como aconteceu a evolução dos bancos de dados?&lt;/p&gt;
&lt;h2&gt;A história dos bancos de dados&lt;/h2&gt;
&lt;p&gt;Antigamente as empresas armazenavam dados em fichas de papel que eram
organizadas em arquivos físicos através de pastas. Extrair informações e
manter esses arquivos organizado era uma tarefa muito custosa. Além
disso o acesso à informação dependia da localização geográfica dos
arquivos. Enfim esses arquivos físicos evoluíram para arquivos digitais.&lt;/p&gt;
&lt;p&gt;No início, cada entidade (clientes, funcionários, produtos, etc) era um
arquivo de dados que eram acompanhados de um "software simples" para
manipular os dados do arquivo, esses softwares permitiam realizer
operações de cadastro, alteração, exclusão e consulta nos arquivos
digitais. De fato melhorou bastante, principalmente a tarefa de consulta
de informações, porém os arquivos digitais eram ainda uma versão
melhorada dos arquivos físicos.&lt;/p&gt;
&lt;p&gt;&lt;img alt="evolução-humanidade-computador" class="aligncenter" src="/images/a-historia-dos-bancos-de-dados/evolução-humanidade-computador.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Mas as entidades precisavam relacionar-se, por exemplo um &lt;span
style="text-decoration: underline;"&gt;produto&lt;/span&gt; é fornecido por
um &lt;span style="text-decoration: underline;"&gt;fornecedor&lt;/span&gt;, e com os
arquivos digitais relacioná-las não era uma tarefa muito trivial, os
"softwares simples" para manipular os arquivos digitais começaram a
ficar "complexos" para permitir os relacionamentos entre
entidades.&lt;/p&gt;
&lt;p&gt;Então, na década de 60 a empresa IBM investiu fortemente em
pesquisas para solucionar estes problemas dos bancos de dados digitais
primitivos. Vários modelos de bancos de dados surgiram nesta época,
dentre eles os modelos hierárquico e rede.&lt;/p&gt;
&lt;p&gt;Em junho de 1970, o pesquisador &lt;strong&gt;Edgar Frank "Ted" Codd&lt;/strong&gt; da IBM, mudou
a história dos bancos de dados apresentando o &lt;span
style="text-decoration: underline;"&gt;modelo relacional&lt;/span&gt; no
artigo intitulado &lt;strong&gt;"A Relational Model of Data for Large Shared Data
Banks"&lt;/strong&gt;, onde o autor apresentou uma forma de usuários sem conhecimento
técnico armazenarem e extraírem grandes quantidades de informações de um
banco de dados. Este artigo foi o grande impulso para a evolução dos
bancos de dados, a partir do artigo de "Ted" Codd que os cientistas
aprofundaram a ideia de criar o modelo de banco de dados relacional.&lt;/p&gt;
&lt;h2&gt;Banco de dados relacional&lt;/h2&gt;
&lt;p&gt;Apesar de ter sido o marco dos bancos de dados relacionais, o artigo de
Codd não foi muito explorado no início. Só no final da década de 70 que
foi desenvolvido um sistema baseado nas idéias do cientista, o "Sistema
R". Junto com esse sistema foi criado a linguagem de consulta
estruturada (SQL - Structured Query Language) que se tornou a linguagem
padrão para bancos de dados relacionais.&lt;/p&gt;
&lt;p&gt;Embora tenha contribuído para a
evolução dos bancos de dados relacionais, o "System R" não foi muito bem
sucedido comercialmente, mas os sistemas de banco de dados seguintes
foram baseados nele.&lt;/p&gt;
&lt;p&gt;Nos anos 80 surgiram outros bancos de dados, a Oracle apresentou o
Oracle 2 e a IBM o SQL/DS (que se tornou DB2), ambos sistemas comerciais
de bancos de dados. Na sequencia vieram SQL Server, MySQL, DBase III,
Paradox, etc...&lt;/p&gt;
&lt;h2&gt;Bancos de dados hoje&lt;/h2&gt;
&lt;p&gt;Atualmente existem vários modelos de bancos de dados tais como orientado
a objetos, orientado a documentos, etc. Mas o mais comum ainda é o banco
de dados relacional. A decisão entre qual modelo de banco de dados
utilizar baseia-se no tipo de dados que você pretende armazenar.&lt;/p&gt;
&lt;p&gt;Por exemplo, se você for armazenar uma grande quantidade de dados em um
modelo pequeno (imagine um banco de dados pro twitter), é mais indicado
utilizar um banco de dados orientado a documentos a um banco de dados
relacional. Muitas questões envolvem essa decisão, mas não é uma questão
de superioridade entre uma ou outra tecnologia, todas tem prós e contras
e são mais indicadas ou não para cada problema.&lt;/p&gt;</content><category term="Banco de dados"></category></entry><entry><title>O que é um SGBD?</title><link href="https://dicasdeprogramacao.com.br/o-que-e-um-sgbd/" rel="alternate"></link><published>2013-04-01T00:00:00-03:00</published><updated>2013-04-01T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-04-01:/o-que-e-um-sgbd/</id><summary type="html">&lt;p&gt;Em muitos sistemas informatizados é necessário armazenar informações em
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/"&gt;bancos de dados&lt;/a&gt;, podemos constatar isso observando que nas últimas
décadas o banco de dados se tornou o coração de muitos sistemas.&lt;/p&gt;
&lt;p&gt;A informação é muitas vezes a coisa mais valiosa …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Em muitos sistemas informatizados é necessário armazenar informações em
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/"&gt;bancos de dados&lt;/a&gt;, podemos constatar isso observando que nas últimas
décadas o banco de dados se tornou o coração de muitos sistemas.&lt;/p&gt;
&lt;p&gt;A informação é muitas vezes a coisa mais valiosa das empresas, mantê-las e
poder acessá-las sempre que necessário é primordial para tomar decisões
importantes. Mas controlar o acesso a essas informações também é
importantíssimo. Já pensou se elas caíssem em mãos erradas? E a perda de
informações? Já imaginou se estragasse o HD do servidor onde está o
banco de dados? Backup é uma forma de garantir que informações não serão
perdidas.&lt;/p&gt;
&lt;p&gt;Enfim, já deu para perceber que a gerência de um banco de dados não é
uma coisa a se deixar de lado, pois uma empresa pode depender dele, ou
seja, pode ajudar a empresa a ter sucesso, mas também pode levá-la ao
fracasso. Para garantir a consistência dos dados, controlar o acesso,
manter os dados seguros, fornecer meios de acesso aos dados, ... foram
criados os Sistemas de Gerenciamento de Bancos de Dados, ou &lt;strong&gt;SGBD&lt;/strong&gt;
(DBMS em inglês DataBase Management System).&lt;/p&gt;
&lt;h2&gt;A definição de SGBD&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;“Um Sistema de Gerenciamento de Banco de Dados (SGBD) – do inglês Data
Base Management System (DBMS) – é o conjunto de programas de
computador (softwares) responsáveis pelo gerenciamento de uma base de
dados. Seu principal objetivo é retirar da aplicação cliente a
responsabilidade de gerenciar o acesso, a manipulação e a organização
dos dados. O SGBD disponibiliza uma interface para que seus clientes
possam incluir, alterar ou consultar dados previamente armazenados. Em
bancos de dados relacionais a interface é constituída pelas APIs
(Application Programming Interface) ou drivers do SGBD, que executam
comandos na linguagem SQL (Structured Query Language).”&lt;/p&gt;
&lt;p&gt;Fonte: Wikipédia&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="database-organograma" class="aligncenter" src="/images/o-que-e-um-sgbd/database-organograma.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Tudo que fazemos em um banco de dados passa pelo SGBD! O SGBD é
responsável por tudo, salvar os dados no HD, manter em memória os dados
mais acessados, ligar dados e metadados, disponibilizar uma interface
para programas e usuários externos acessem o banco de dados (para banco
de dados relacionais, é utilizada a linguagem SQL), encriptar dados,
controlar o acesso a informações, manter cópias dos dados para
recuperação de uma possível falha, garantir transações no banco de
dados, enfim, sem o SGBD o banco de dados não funciona!&lt;/p&gt;
&lt;p&gt;É comum as pessoas chamarem um SGBD de banco de dados, por exemplo:
banco de dados Oracle, banco de dados MySQL, banco de dados SQL Server,
etc. Na verdade esses são os SGBDs, banco de dados é o que eles
oferecem, o correto é chamá-los de: SGBD Oracle, SGBD MySQL, SGBD SQL
Server, etc. Cada um implementa um banco de dados (ou vários) de uma
maneira diferente, mas para o usuário isso é quase transparente, pois a
linguagem de acesso aos dados é a mesma, o SQL.&lt;/p&gt;
&lt;p&gt;Agora você já sabe, pra acessar um banco de dados você precisa usar um
SGBD.&lt;/p&gt;</content><category term="Dicionário de Programador"></category></entry><entry><title>O que é um Banco de Dados?</title><link href="https://dicasdeprogramacao.com.br/o-que-e-um-banco-de-dados/" rel="alternate"></link><published>2013-03-26T00:00:00-03:00</published><updated>2013-03-26T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-03-26:/o-que-e-um-banco-de-dados/</id><summary type="html">&lt;p&gt;Existem vários tipos de banco de dados e eles estão presentes na nossa
vida há muito tempo, a lista telefônica por exemplo pode ser considerada
um banco de dados.&lt;/p&gt;
&lt;p&gt;Antigamente as empresas armazenavam informações em
arquivos físicos, mas o surgimento …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Existem vários tipos de banco de dados e eles estão presentes na nossa
vida há muito tempo, a lista telefônica por exemplo pode ser considerada
um banco de dados.&lt;/p&gt;
&lt;p&gt;Antigamente as empresas armazenavam informações em
arquivos físicos, mas o surgimento e evolução dos computadores
possibilitaram o armazenamento de dados de modo digital. Assim os bancos
de dados evoluíram e se tornaram o coração de muitos sistemas de
informação. A definição de Banco de dados encontrada na internet é essa:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“&lt;strong&gt;Bancos de dados&lt;/strong&gt;, ou &lt;strong&gt;bases de dados&lt;/strong&gt; (em Portugal), são
coleções de informações que se relacionam de forma que crie um
sentido. São de vital importância para empresas, e há duas décadas se
tornaram a principal peça dos sistemas de informação.“&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Fonte: Wikipedia&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Podemos simplificar essa definição para: "&lt;strong&gt;Bancos de dados&lt;/strong&gt; são
coleções de dados interligados entre si e organizados para fornecer
informações."&lt;/p&gt;
&lt;p&gt;&lt;img alt="banco de
dados" class="aligncenter" src="/images/o-que-e-um-banco-de-dados/banco-de-dados.png"&gt;&lt;/p&gt;
&lt;h2&gt;Dados vs Informações&lt;/h2&gt;
&lt;p&gt;Muitos consideram &lt;em&gt;dados&lt;/em&gt; &lt;em&gt;e informações&lt;/em&gt; como palavras sinônimas, mas
na verdade não são. Para entender o que é um banco de dados é muito
importante saber a diferença entre essas duas palavras.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style="line-height: 13px;"&gt;Dados&lt;/span&gt;&lt;/strong&gt;&lt;span
    style="line-height: 13px;"&gt; são fatos brutos, em sua forma primária.
    E muitas vezes os dados podem não fazer sentido sozinhos.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Informações&lt;/strong&gt; consiste no agrupamento de dados de forma organizada
    para fazer sentido, gerar conhecimento.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por exemplo, o número 2001 isoladamente faz algum sentido? Não! Isso é
um &lt;span style="text-decoration: underline;"&gt;dado&lt;/span&gt;. E se eu
dissesse: "Ano do atentado terrorista às torres gêmeas: 2001"? Agora faz
sentido! Isso é uma &lt;span
style="text-decoration: underline;"&gt;informação&lt;/span&gt;. &lt;strong&gt;Um banco de
dados é uma estrutura de dados organizada que permite a extração de
informações&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Metadados&lt;/h2&gt;
&lt;p&gt;Todo dado relativo a outro dado é chamado de &lt;strong&gt;metadados&lt;/strong&gt;. No exemplo
anterior do ano 2001 o dado "Ano do atendado terrorista às torres
gêmeas" é um metadado, pois ele é um dado &lt;span
style="text-decoration: underline;"&gt;sobre&lt;/span&gt; o dado "2001". Um outro
exemplo mais comum em banco de dados: o campo &lt;span
style="text-decoration: underline;"&gt;telefone&lt;/span&gt; da tabela &lt;span
style="text-decoration: underline;"&gt;cliente&lt;/span&gt; tem, entre outros, os
seguinte metadados: nome (telefone), tipo (texto), tamanho (30
caracteres), obrigatoriedade (não), etc.&lt;/p&gt;
&lt;p&gt;Um banco de dados é formado por &lt;span
style="text-decoration: underline;"&gt;dado&lt;/span&gt; e &lt;span
style="text-decoration: underline;"&gt;metadados&lt;/span&gt;. Sem os metadados
não seria possível organizar e extrair informações de um banco de dados.&lt;/p&gt;</content><category term="Banco de dados"></category></entry><entry><title>Estrutura de decisão SE-ENTÃO-SENÃO</title><link href="https://dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" rel="alternate"></link><published>2013-03-12T00:00:00-03:00</published><updated>2013-03-12T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-03-12:/estrutura-de-decisao-se-entao-senao/</id><summary type="html">&lt;p&gt;A maioria dos algoritmos precisam tomar decisões ao longo de sua
execução. Para isso existem as estruturas de decisão, e a mais utilizada
é a estrutura &lt;strong&gt;SE-ENTÃO-SENÃO &lt;/strong&gt;(Em inglês &lt;strong&gt;IF-THEN-ELSE&lt;/strong&gt;). O
funcionamento é simples: com base no resultado de uma …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A maioria dos algoritmos precisam tomar decisões ao longo de sua
execução. Para isso existem as estruturas de decisão, e a mais utilizada
é a estrutura &lt;strong&gt;SE-ENTÃO-SENÃO &lt;/strong&gt;(Em inglês &lt;strong&gt;IF-THEN-ELSE&lt;/strong&gt;). O
funcionamento é simples: com base no resultado de uma expressão booleana
(&lt;strong&gt;VERDADEIRO&lt;/strong&gt; ou &lt;strong&gt;FALSO&lt;/strong&gt;), o fluxo do algoritmo segue para um bloco
de instruções ou não. Observe o esquema da estrutura &lt;strong&gt;SE-ENTÃO-SENÃO&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SE&lt;/strong&gt; &amp;lt;expressão booleana&amp;gt; &lt;strong&gt;ENTÃO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;instruções a serem executadas caso a expressão booleana resulte em
&lt;strong&gt;VERDADEIRO&lt;/strong&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SENÃO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;instruções a serem executadas caso a expressão booleana resulte em
&lt;strong&gt;FALSO&lt;/strong&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FIM-SE&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O bloco de código &lt;strong&gt;SENÃO&lt;/strong&gt; é opcional. É comum encontrar instruções de
decisão apenas com &lt;strong&gt;SE-ENTÃO&lt;/strong&gt; sem o bloco &lt;strong&gt;SENÃO&lt;/strong&gt;. Veja um esquema
gráfico desta estrutura de decisão.&lt;/p&gt;
&lt;p&gt;&lt;img alt="estrutura
IF" class="aligncenter" src="/images/estrutura-de-decisao-se-entao-senao/estrutura-IF.png"&gt;&lt;/p&gt;
&lt;h2&gt;SE-ENTÃO-SENÃO na prática!&lt;/h2&gt;
&lt;p&gt;Vejamos um exemplo de utilização desta estrutura com um algoritmo, para
isso vamos utilizar o VisuAlg (para mais informações leia o &lt;a href="http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" target="_blank" title="Linguagem de programação para iniciantes"&gt;artigo
sobre linguagens de programação para
iniciantes&lt;/a&gt;).
Neste algoritmo, vamos simular um caixa eletrônico quando vamos sacar
dinheiro. O caixa eletrônico verifica se o valor que desejamos sacar é
menor que o saldo disponível. Assumiremos que há R\$ 1000 de saldo
disponível para o saque.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;SacarDinheiro&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;SaldoDisponivel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ValorDoSaque&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REAL&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SaldoDisponivel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Assumimos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;há&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reais&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;saldo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disponível&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;para&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;saque&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Informe o valor do Saque: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ValorDoSaque&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ValorDoSaque&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SaldoDisponivel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;SaldoDisponivel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SaldoDisponivel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ValorDoSaque&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Sacando R$ &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ValorDoSaque&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SENAO&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;O valor solicitado é maior que o valor disponível para saque!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;FIMSE&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;ESCREVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Saldo disponível: R$ &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SaldoDisponivel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Abaixo a execução do algoritmo acima quando informamos valores menores
que 1000.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Sacar dinheiro menor que
1000" class="aligncenter" src="/images/estrutura-de-decisao-se-entao-senao/Sacar-dinheiro-menor-que-10001.png"&gt;&lt;/p&gt;
&lt;p&gt;Agora a execução do mesmo algoritmo, porém inserindo um valor maior que
1000 para saque.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Sacar dinheiro maior que
1000" class="aligncenter" src="/images/estrutura-de-decisao-se-entao-senao/Sacar-dinheiro-maior-que-1000.png"&gt;&lt;/p&gt;
&lt;p&gt;Perceba que o fluxo do algoritmo tomou rumos diferentes.&lt;/p&gt;
&lt;p&gt;Essa é a estrutura de controle de fluxo mais utilizada na criação de
programas de computador. Pratique-a criando algoritmos que tomam
decisão. Como exercício, crie um algoritmo para verificar se um aluno
foi aprovado ou reprovado no final do ano, assim: O usuário digita as 4
notas (de 0 a 10) bimestrais do aluno e o algoritmo deve calcular a
média e verificar se é maior que 6. Caso afirmativo, exibe na tela uma
mensagem informando que o aluno foi aprovado, caso contrário, uma
mensagem informando que ele foi reprovado.&lt;/p&gt;
&lt;p&gt;Pratique!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>O que são tipos de dados primitivos?</title><link href="https://dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" rel="alternate"></link><published>2013-03-12T00:00:00-03:00</published><updated>2013-03-12T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-03-12:/tipos-de-dados-primitivos/</id><summary type="html">&lt;p&gt;Nos
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;algoritmos&lt;/a&gt;
criados para realizar tarefas na computação utilizamos
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" target="_blank" title="O que é variável e constante?"&gt;variáveis&lt;/a&gt; para
manipular dados, por exemplo: nome, idade, altura, peso, data de
nascimento, sexo, saldo, etc. Para otimizar a utilização da memória,
cada variável armazena apenas um tipo de dados.&lt;/p&gt;
&lt;p&gt;A …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Nos
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;algoritmos&lt;/a&gt;
criados para realizar tarefas na computação utilizamos
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" target="_blank" title="O que é variável e constante?"&gt;variáveis&lt;/a&gt; para
manipular dados, por exemplo: nome, idade, altura, peso, data de
nascimento, sexo, saldo, etc. Para otimizar a utilização da memória,
cada variável armazena apenas um tipo de dados.&lt;/p&gt;
&lt;p&gt;A variável &lt;strong&gt;nome&lt;/strong&gt;,
deve armazenar &lt;span style="text-decoration: underline;"&gt;textos&lt;/span&gt;,
já a variável &lt;strong&gt;idade&lt;/strong&gt; deve armazenar apenas &lt;span
style="text-decoration: underline;"&gt;números inteiros&lt;/span&gt; (sem casa
decimal), na variável &lt;strong&gt;sexo&lt;/strong&gt; podemos armazenar apenas um &lt;span
style="text-decoration: underline;"&gt;caractere&lt;/span&gt; ("M" ou "F"). Seria
correto armazenarmos o valor "M" na variável &lt;strong&gt;idade&lt;/strong&gt;? Não né, por isso
devemos especificar em nossos algoritmos o tipo de cada variável.&lt;/p&gt;
&lt;p&gt;&lt;img alt="tipos de
dados" class="aligncenter" src="/images/tipos-de-dados-primitivos/tipos-de-dados.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;Quais são os tipos de dados primitivos?&lt;/h2&gt;
&lt;p&gt;Em computação existem apenas 4 tipos de dados primitivos, algumas
linguagens subdividem esses tipos de dados em outros de acordo com a
capacidade de memória necessária para a variável. Mas de modo geral, os
tipos de dados primitivos são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style="line-height: 13px;"&gt;INTEIRO&lt;/span&gt;&lt;/strong&gt;&lt;span
    style="line-height: 13px;"&gt;: Representa valores numéricos negativo
    ou positivo sem casa decimal, ou seja, valores inteiros.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REAL&lt;/strong&gt;: Representa valores numéricos negativo ou positivo com casa
    decimal, ou seja, valores reais. Também são chamados de &lt;span
    style="text-decoration: underline;"&gt;ponto flutuante&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LÓGICO&lt;/strong&gt;: Representa valores &lt;span
    style="text-decoration: underline;"&gt;booleanos&lt;/span&gt;, assumindo
    apenas dois estados, VERDADEIRO ou FALSO. Pode ser representado
    apenas um bit (que aceita apenas 1 ou 0).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TEXTO&lt;/strong&gt;: Representa uma sequencia de um ou mais de caracteres,
    colocamos os valores do tipo TEXTO entre " " (aspas duplas).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Algumas linguagens de programação, dividem esses tipos primitivos de
acordo com o espaço necessário para os valores daquela variável. Na
linguagem &lt;span style="text-decoration: underline;"&gt;Java&lt;/span&gt; por
exemplo, o tipo de dados inteiro é dividido em 4 tipos primitivos:
&lt;strong&gt;byte&lt;/strong&gt;, &lt;strong&gt;short&lt;/strong&gt;, &lt;strong&gt;int&lt;/strong&gt; e &lt;strong&gt;long&lt;/strong&gt;. A capacidade de armazenamento
de cada um deles é diferente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;&lt;strong&gt;byte&lt;/strong&gt;: é capaz de armazenar
    valores entre -128 até 127.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;short&lt;/strong&gt;: é capaz de armazenar valores entre – 32768 até 32767.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;int&lt;/strong&gt;: é capaz de armazenar valores entre –2147483648
    até 2147483647.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;long&lt;/strong&gt;: é capaz de armazenar valores
    entre –9223372036854775808 até 9223372036854775807.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mas essa divisão é uma particularidade da linguagem de programação que
está sendo utilizada. O objetivo é otimizar a utilização da memória. Em
algumas linguagens de programação não é necessário especificar o tipo de
dados da variável, eles são identificados dinamicamente. Porém, é
necessário informar o tipo de dados de cada variável em algoritmos.&lt;/p&gt;
&lt;h2&gt;Tipos de dados customizados&lt;/h2&gt;
&lt;p&gt;A partir dos tipos de dados primitivos podemos criar outros tipos de
dados utilizando uma combinação de variáveis.  São estruturas de dados,
classes, vetores, matrizes, etc.&lt;/p&gt;
&lt;p&gt;Uma classe chamada Carro é um tipo de dados que agrupa outras variáveis
básicas como &lt;strong&gt;marca&lt;/strong&gt;, &lt;strong&gt;cor&lt;/strong&gt;, &lt;strong&gt;ano&lt;/strong&gt;, &lt;strong&gt;modelo&lt;/strong&gt;, etc. Um vetor é um
agrupamento de variáveis, uma matriz é um agrupamento de vetores. Enfim,
a base de todos os tipos de dados são os tipos de dados primitivos,
independente da linguagem de programação.&lt;/p&gt;
&lt;p&gt;&lt;img alt="classe
carro" class="aligncenter" src="/images/tipos-de-dados-primitivos/classe-carro.jpg"&gt;&lt;/p&gt;
&lt;p&gt;O conceito de estruturas de dados e classes é bem mais complexo que
isto, por exemplo classes têm operações além de atributos, mas aqui é
importante apenas frisar que também são tipos de dados. Diferente dos
tipos de dados primitivos que já são implementados internamente pelas
linguagens de programação, esses tipos de dados são criados pelo
programador.&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>Quer aprender programação? Saiba qual a melhor linguagem!</title><link href="https://dicasdeprogramacao.com.br/linguagem-de-programacao-para-iniciantes/" rel="alternate"></link><published>2013-03-08T00:00:00-03:00</published><updated>2013-03-08T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-03-08:/linguagem-de-programacao-para-iniciantes/</id><summary type="html">&lt;p&gt;A pergunta que é feita por todo mundo que está aprendendo a programar é:
Que linguagem de programação devo aprender? A resposta é óbvia: &lt;strong&gt;Uma
linguagem de programação para iniciantes!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Antes de mais nada, você deve ter consciência que ao …&lt;/p&gt;</summary><content type="html">&lt;p&gt;A pergunta que é feita por todo mundo que está aprendendo a programar é:
Que linguagem de programação devo aprender? A resposta é óbvia: &lt;strong&gt;Uma
linguagem de programação para iniciantes!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Antes de mais nada, você deve ter consciência que ao longo da sua
carreira como programador você sempre terá que aprender uma linguagem
de programação nova. Pois todas tem suas vantagens e desvantagens. Uma
dica interessante é: não seja fanático por uma linguagem específica!&lt;/p&gt;
&lt;p&gt;Muitas pessoas defendem com unhas e dentes a linguagem de programação
que têm mais afinidade. Mas isso não é bom! Para cada projeto, cada
trabalho, uma linguagem é mais indicada ou não. Você deve decidir qual
linguagem usar, não com base no seu gosto pessoal, mas nas vantagens que a
linguagem oferece para o projeto.&lt;/p&gt;
&lt;p&gt;Pensando nisso, se o seu projeto atual é &lt;strong&gt;aprender programação&lt;/strong&gt;,
que linguagem você deve utilizar agora?&lt;/p&gt;
&lt;h2&gt;Qual a melhor linguagem pra aprender programação?&lt;/h2&gt;
&lt;p&gt;Se você é iniciante, procure uma linguagem de programação que te ajude a
aprender lógica de programação! Só depois de aprender o básico que você
deve aprender uma outra linguagem mais profissional.&lt;/p&gt;
&lt;p&gt;Muitas pessoas já
começam aprendendo lógica de programação com linguagens profissionais,
por exemplo &lt;span style="text-decoration: underline;"&gt;java&lt;/span&gt;,
&lt;span style="text-decoration: underline;"&gt;C&lt;/span&gt;, &lt;span style="text-decoration: underline;"&gt;python&lt;/span&gt;, &lt;span
style="text-decoration: underline;"&gt;C#&lt;/span&gt;, etc. É totalmente válido
e muitos conseguem de fato aprender, mas algumas pessoas podem ter
dificuldade de assimilar os conceitos básicos com essas linguagens.&lt;/p&gt;
&lt;p&gt;Então, para quem nunca programou antes, indico fortemente que comece com
uma linguagem que o ajude &lt;strong&gt;aprender a programar&lt;/strong&gt; antes de mais nada.&lt;/p&gt;
&lt;p&gt;Pra quê você tem que saber coisas específicas e avançadas de um linguagem de programação específica,
se você não aprendeu a &lt;strong&gt;lógica de programação&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;&lt;img alt="linguagem de programação para
iniciantes" class="aligncenter" src="/images/linguagem-de-programacao-para-iniciantes/linguagem-de-programação.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Para mim foi difícil entender isso quando ensinava pessoas a programar,
queria logo que elas aprendessem java, python, ou C#, etc. Mas a dificuldade
dos iniciantes, na verdade, era conseguir aprender lógica de programação tendo que
"decorar" as restrições exigidas pela linguagem que ela estava programando.&lt;/p&gt;
&lt;p&gt;Um entrave para os iniciantes é que as linguagens de programação profissionais são em inglês. Por isso, nos artigos
voltados para iniciante aqui no &lt;strong&gt;{ Dicas de Programação }&lt;/strong&gt;,
escrevemos algoritmos em português (pseudo-códigos) e utilizamos uma
linguagem simples para transmitir os conceitos de lógica de programação,
pois o objetivo é ensinar o básico.&lt;/p&gt;
&lt;h2&gt;Visualg, implementando algoritmos em português!&lt;/h2&gt;
&lt;p&gt;Na minha opinião esta é a melhor ferramenta para iniciantes em
programação implementarem seus algoritmos. O Visualg foi criado por um
brasileiro (Claudio Morgado de Souza), é fácil de ser usado e compila
pseudo-códigos escritos em português, também conhecidos como "Portugol".&lt;/p&gt;
&lt;p&gt;O Visualg foi desenvolvido para Windows. Para instalar faça o download
do instalador (versão 2.5) na
página: &lt;a href="http://www.dicasdeprogramacao.com.br/download-visualg/"&gt;http://www.dicasdeprogramacao.com.br/download-visualg/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A instalação é muito simples, basta executar o instalador e acionar os
botões "Avançar", a famosa instalação "Next, next, next ...". Quando
abrimos o software, vimos uma tela com o esqueleto de uma algoritmo já
criado, como a imagem abaixo:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Visualg página
inicial" class="aligncenter" src="/images/linguagem-de-programacao-para-iniciantes/Visualg-página-inicial.png"&gt;&lt;/p&gt;
&lt;h2&gt;Criando o primeiro programa com o Visualg&lt;/h2&gt;
&lt;p&gt;Para batizar o Visualg vamos criar agora um programa básico. Digite o
algoritmo abaixo no visualg:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;algoritmo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BoasVindas&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CARACTERE&lt;/span&gt;
&lt;span class="n"&gt;inicio&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Olá! Digite o seu nome: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;LEIA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ESCREVA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Seja bem vindo &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fimalgoritmo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para executarmos o programa, utilize o botão indicado na figura ou
pressione F9.&lt;/p&gt;
&lt;p&gt;&lt;img alt="BoasVindas" class="aligncenter" src="/images/linguagem-de-programacao-para-iniciantes/BoasVindas.png"&gt;&lt;/p&gt;
&lt;p&gt;Para finalizar, o resultado deste programa, é como apresentado pela
figura abaixo:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Resultado primeiro programa
visualg" class="aligncenter" src="/images/linguagem-de-programacao-para-iniciantes/Resultado-primeiro-programa-visualg.png"&gt;&lt;/p&gt;
&lt;p&gt;Outra coisa muito interessante no Visualg é a documentação de
referência. É tudo em português! Se você tiver dúvida de uma
palavra-chave ou comando, basta acessar a documentação através do menu
ajuda. Eu mesmo já acessei muito essas referências para ver como os
comandos básicos deveriam ser escritos. Use-a! É uma documentação bem
simples e didática, com certeza ela pode te ajudar a aprender
programação.&lt;/p&gt;
&lt;p&gt;Como pôde ser visto, programar utilizando o Visualg é muito fácil! Por
utilizar uma linguagem em português ele torna-se um grande aliado para
iniciantes em programação.&lt;/p&gt;
&lt;p&gt;Evidentemente, não se cria softwares
profissionais com esta ferramenta, o seu grande objetivo é ajudar no
ensino de &lt;strong&gt;lógica de programação&lt;/strong&gt;. E com certeza cumpre o seu papel.&lt;/p&gt;
&lt;h2&gt;Dicas para quem quer aprender a programar&lt;/h2&gt;
&lt;p&gt;Se você leu esse artigo até aqui, provavelmente está interessado em
aprender a programar.&lt;/p&gt;
&lt;p&gt;Eu criei um minicurso GRATUITO de lógica de programação
que para se inscrever basta informar o seu e-mail. Após se
cadastrar você receberá as lições por e-mail em sequência.&lt;/p&gt;
&lt;p&gt;Baseado sempre na prática, o minicurso é recheado de exercícios
para você resolver e eu também mando as soluções dos exercícios
nas lições seguintes. Dessa forma você
coloca em prática o que aprendeu e pode comparar a sua solução com a
minha!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://mclp.dicasdeprogramacao.com.br"&gt;&amp;gt;&amp;gt; Clique AQUI para se inscrever no minicurso GRATUITO de
lógica de programação&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Além disso, abaixo vou listar alguns artigos aqui do &lt;strong&gt;{ Dicas de
Programação }&lt;/strong&gt; pra te ajudar a aprender o básico de lógica de
programação utilizando o Visualg, você pode lê-los nesta ordem que você
aprenderá lógica de programação e te deixará preparado para
qualquer linguagem de programação que você escolher para trabalhar.  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 13px;"&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;O que é
    Algoritmo?&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" target="_blank" title="O que é variável e constante?"&gt;O que é variável e
    constante?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/tipos-de-dados-primitivos/" target="_blank" title="O que são tipos de dados primitivos?"&gt;O que são tipos de dados
    primitivos?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-decisao-se-entao-senao/" target="_blank" title="Estrutura de decisão SE-ENTÃO-SENÃO"&gt;Estrutura de decisão
    SE-ENTÃO-SENÃO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-selecao-multipla-escolha-caso/" target="_blank" title="Estrutura de seleção multipla ESCOLHA-CASO"&gt;Estrutura de seleção múltipla
    ESCOLHA-CASO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-enquanto/" target="_blank" title="Estrutura de repetição ENQUANTO"&gt;Estrutura de repetição
    ENQUANTO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-repita-ate/" target="_blank" title="Estrutura de repetição REPITA-ATÉ"&gt;Estrutura de repetição
    REPITA-ATÉ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/estrutura-de-repeticao-para/" target="_blank" title="Estrutura de repetição PARA"&gt;Estrutura de repetição
    PARA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-sao-funcoes-e-procedimentos/" target="_blank" title="O que são Funções e Procedimentos?"&gt;O que são Funções e
    Procedimentos?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-sao-vetores-e-matrizes-arrays/" target="_blank" title="O que são Vetores e Matrizes (arrays)"&gt;O que são Vetores e
    Matrizes?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/operadores-aritmeticos/" target="_blank" title="Você sabe usar os Operadores Aritméticos em programação?"&gt;Você sabe usar os Operadores Aritméticos em
    programação?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/operadores-relacionais/" target="_blank" title="Conheça os Operadores Relacionais!"&gt;Conheça os Operadores
    Relacionais!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/operadores-logicos/" target="_blank" title="Conheça os operadores lógicos!"&gt;Conheça os Operadores
    Lógicos!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/as-10-conversoes-numericas-mais-utilizadas-na-computacao/" target="_blank" title="As 10 conversões numéricas mais utilizadas na computação"&gt;As 10 conversões numéricas mais utilizadas na
    computação&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bons estudos!&lt;/p&gt;</content><category term="Iniciante em programação"></category></entry><entry><title>O que é variável e constante?</title><link href="https://dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" rel="alternate"></link><published>2013-03-06T00:00:00-03:00</published><updated>2013-03-06T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-03-06:/o-que-e-variavel-e-constante/</id><summary type="html">&lt;p&gt;Programas de computador utilizam os recursos de hardware mais básicos
para executar
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;algoritmos&lt;/a&gt;.
Enquanto o processador executa os cálculos, a memória é responsável por
armazenar dados e servi-los ao processador. O recurso utilizado nos
programas para escrever e ler dados …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Programas de computador utilizam os recursos de hardware mais básicos
para executar
&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;algoritmos&lt;/a&gt;.
Enquanto o processador executa os cálculos, a memória é responsável por
armazenar dados e servi-los ao processador. O recurso utilizado nos
programas para escrever e ler dados da memória do computador é conhecido
como &lt;span style="text-decoration: underline;"&gt;variável&lt;/span&gt;, que é
simplesmente um espaço na memória o qual reservamos e damos um nome. Por
exemplo, podemos criar uma variável chamada "idade" para armazenar a
idade de uma pessoa. Você pode imaginar uma variável como uma gaveta
"etiquetada" em um armário.&lt;/p&gt;
&lt;p&gt;&lt;img alt="gaveta" class="aligncenter" src="/images/o-que-e-variavel-e-constante/variável.jpg" title="Variável - gaveta"&gt;&lt;/p&gt;
&lt;p&gt;Quando criamos uma variável em nosso programa especificamos que tipo de
dados pode ser armazenado nela (dependendo da linguagem de programação).
Por exemplo, a variável &lt;span
style="text-decoration: underline;"&gt;nome&lt;/span&gt; só poderia armazenar
valores do tipo texto. Já a variável &lt;span
style="text-decoration: underline;"&gt;idade&lt;/span&gt;, só poderia armazenar
valores do tipo número (inteiro).&lt;/p&gt;
&lt;p&gt;Chamamos este espaço alocado na memória de &lt;strong&gt;variável&lt;/strong&gt;, porque o valor
armazenado neste espaço de memória pode ser alterado ao longo do tempo,
ou seja, o valor ali alocado é "variável" ao longo do tempo. Diferente
das &lt;strong&gt;constantes&lt;/strong&gt;, que é um espaço reservado na memória para armazenar
um valor que não muda com o tempo. Por exemplo, o valor PI
(3.14159265359...) que nunca vai mudar!&lt;/p&gt;
&lt;h2&gt;Veja como funciona uma variável com um &lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-algoritmo/" target="_blank" title="O que é Algoritmo?"&gt;algoritmo&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Para não restar dúvidas, vamos mostrar como funciona uma variável em um
algoritmo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Algoritmo &lt;strong&gt;Teste de Variável&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declaração das variáveis&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;nome : Texto&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inicio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;nome &amp;lt;- "João"&lt;/p&gt;
&lt;p&gt;imprimir(nome)&lt;/p&gt;
&lt;p&gt;nome &amp;lt;- "Maria"&lt;/p&gt;
&lt;p&gt;imprimir(nome)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fim&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Neste algoritmo, declaramos uma variável chamada "nome" do tipo "Texto".
Inicialmente armazenamos o texto "João" na variável nome, e mandamos
imprimir na tela o valor desta variável. Neste momento aparece na tela o
texto "João", em seguida alteramos o valor da variável para "Maria"
neste momento o texto "João" é apagado da memória e em seu lugar é
armazenado o texto "Maria". Em seguida, mandamos imprimir na tela
novamente o valor da variável, então aparece na tela o texto "Maria".&lt;/p&gt;
&lt;p&gt;Só mais um exemplo pra garantir. rs&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Algoritmo &lt;strong&gt;Soma&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declaração de variáveis&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;numero1 : Inteiro&lt;/p&gt;
&lt;p&gt;numero2: Inteiro&lt;/p&gt;
&lt;p&gt;resultado: Inteiro&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inicio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;numero1 &amp;lt;- 5&lt;/p&gt;
&lt;p&gt;numero2 &amp;lt;- 4&lt;/p&gt;
&lt;p&gt;resultado &amp;lt;- numero1 + numero2&lt;/p&gt;
&lt;p&gt;imprimir(resultado)&lt;/p&gt;
&lt;p&gt;numero2 &amp;lt;- 2&lt;/p&gt;
&lt;p&gt;resultado &amp;lt;- resultado * numero2&lt;/p&gt;
&lt;p&gt;imprimir(resultado)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fim&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O resultado deste algoritmo é imprimir na tela o valor "9" e depois o
valor "18". Ainda resta dúvidas?&lt;/p&gt;
&lt;p&gt;Saber como ler e escrever dados na memória do computador é muito
importante para criar um algoritmo. E a forma como fazemos isso é
através das &lt;span style="text-decoration: underline;"&gt;variáveis&lt;/span&gt;.&lt;/p&gt;</content><category term="Dicionário de programador"></category></entry><entry><title>O que é Algoritmo?</title><link href="https://dicasdeprogramacao.com.br/o-que-e-algoritmo/" rel="alternate"></link><published>2013-03-04T00:00:00-03:00</published><updated>2013-03-04T00:00:00-03:00</updated><author><name>Gustavo Furtado de Oliveira Alves</name></author><id>tag:dicasdeprogramacao.com.br,2013-03-04:/o-que-e-algoritmo/</id><summary type="html">&lt;p&gt;Embora as vezes não percebemos, utilizamos algoritmos no nosso dia-a-dia
e não sabemos. Para a execução de alguma tarefa ou mesmo resolver algum
problema, muitas vezes inconscientemente executamos algoritmos. Mas o
que é Algoritmo?&lt;/p&gt;
&lt;p&gt;Algoritmo é simplesmente uma "receita" para …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Embora as vezes não percebemos, utilizamos algoritmos no nosso dia-a-dia
e não sabemos. Para a execução de alguma tarefa ou mesmo resolver algum
problema, muitas vezes inconscientemente executamos algoritmos. Mas o
que é Algoritmo?&lt;/p&gt;
&lt;p&gt;Algoritmo é simplesmente uma "receita" para executarmos uma
tarefa ou resolver algum problema. E como toda receita, um algoritmo
também deve ser finito. Se seguirmos uma receita de bolo corretamente,
conseguiremos fazer o bolo. A computação utiliza muito esse recurso,
então se você pretende aprender programação, obviamente deve saber o que
é algoritmo.&lt;/p&gt;
&lt;h2&gt;Exemplo de Algoritmo&lt;/h2&gt;
&lt;p&gt;Imagine o trabalho de um recepcionista de cinema, ele deve conferir os
bilhetes e direcionar o cliente para a sala correta. Além disso, se o
cliente estiver 30 minutos adiantado o recepcionista deve informar que a
sala do filme ainda não está aberta. E quando o cliente estiver 30
minutos atrasado o recepcionista deve informar que a entrada não é mais
permitida&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Obs&lt;/strong&gt;: &lt;em&gt;Essas regras não são 100% verdade, eu as defini neste
post apenas para fins didáticos&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vamos escrever um algoritmo para descrever a atividade do recepcionista.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Algoritmo &lt;strong&gt;Recepcionista de Cinema&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inicio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1 - Solicitar ao cliente o bilhete do filme.&lt;/p&gt;
&lt;p&gt;2 - Conferir a data e o horário do filme no bilhete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Se&lt;/strong&gt; data/hora atual &amp;gt; data/hora do filme + 30 minutos &lt;strong&gt;Então&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3 - Informar ao cliente que o tempo limite para entrada foi excedido.&lt;/p&gt;
&lt;p&gt;4 - Não permitir a entrada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Senão Se&lt;/strong&gt; data/hora atual &amp;lt; data/hora do filme - 30
minutos &lt;strong&gt;Então&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5 - Informar ao cliente que a sala do filme ainda não foi liberada
para entrada.&lt;/p&gt;
&lt;p&gt;6 - Não permitir a entrada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Senão&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;7 - Permitir a entrada.&lt;/p&gt;
&lt;p&gt;8 - Indicar ao cliente onde fica a sala do filme.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fim-Se&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fim&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Qualquer pessoa que seguir esses passos executará a função do
recepcionista do cinema. Concorda? É importante notar que o algoritmo
tem um fluxo que pode seguir diferentes caminhos dependendo da situação
em que se encontra. Outro aspecto interessante é que o algoritmo é
finito, uma hora ele tem que acabar! Vejamos outro exemplo, dessa vez
com uma representação visual: Como trocar uma lâmpada?&lt;/p&gt;
&lt;p&gt;&lt;img alt="Fluxograma" class="aligncenter" src="/images/o-que-e-algoritmo/Fluxograma.gif" title="Algoritmo"&gt;&lt;/p&gt;
&lt;p&gt;Esta representação gráfica do algoritmo é chamada de fluxograma. Os
losangos representam as decisões que são tomadas para executar um ou
outro passo. Ao final, a lâmpada tem que estar funcionando.&lt;/p&gt;
&lt;h2&gt;Algoritmos na computação&lt;/h2&gt;
&lt;p&gt;Todas as tarefas executadas pelo computador, são baseadas em Algoritmos.
Logo, um algoritmo deve também ser bem definido, pois é uma máquina que
o executará. Uma calculadora por exemplo, para executar a operação de
multiplicação, executa um algoritmo que calcula somas até um determinado
número de vezes. Abaixo, um exemplo do algoritmo de multiplicação. Para
facilitar, consideremos que os fatores da multiplicação são positivos.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Algoritmo &lt;strong&gt;Multiplição de números positivos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declaração de variáveis&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;numero1, numero2, resultado, contador: Inteiro&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inicio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ler(numero1)&lt;/p&gt;
&lt;p&gt;ler(numero2)&lt;/p&gt;
&lt;p&gt;resultado &amp;lt;- 0&lt;/p&gt;
&lt;p&gt;contador &amp;lt;- 0&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enquanto&lt;/strong&gt; contador &amp;lt; numero2 &lt;strong&gt;Faça&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;resultado &amp;lt;- resultado + numero1&lt;/p&gt;
&lt;p&gt;contador &amp;lt;- contador + 1&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fim-Enquanto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;escrever(resultado)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fim&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Este algoritmo pode ser considerado complexo por iniciantes, mas
algoritmos deste tipo, utilizando variáveis e controle de fluxo, é muito
comum em programação. Se você quer aprender programação, é necessário
entendê-lo, se não conseguiu, leia-o novamente com mais atenção. Para
ajudar, vamos definir algumas coisas importantes sobre o algoritmo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span
    style="line-height: 13px;"&gt;&lt;a href="http://www.dicasdeprogramacao.com.br/o-que-e-variavel-e-constante/" target="_blank" title="O que é variável e constante?"&gt;&lt;strong&gt;Variável&lt;/strong&gt;&lt;/a&gt;
    é um espaço alocado na memória para armazenar dados. No algoritmo,
    foram criadas 4 variáveis.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;O símbolo "&lt;strong&gt;&amp;lt;-&lt;/strong&gt;" representa uma atribuição de valor a
    uma variável. Por exemplo, (&lt;strong&gt;&lt;em&gt;resultado &amp;lt;= resultado +
    numero1&lt;/em&gt;&lt;/strong&gt;) atribui à variável &lt;em&gt;resultado&lt;/em&gt;, o valor da própria
    variável &lt;em&gt;resultado&lt;/em&gt;, acrescido do valor da variável &lt;em&gt;numero1&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;O comando "&lt;strong&gt;ler(numero1)&lt;/strong&gt;", significa que o algoritmo está lendo o
    que o usuário digita e armazenando na variável &lt;em&gt;numero1&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;O comando &lt;strong&gt;Enquanto&lt;/strong&gt; é uma estrutura de controle de fluxo do tipo
    "Estrutura de repetição".&lt;/li&gt;
&lt;li&gt;O comando &lt;strong&gt;escrever(resultado)&lt;/strong&gt; exibe na tela o valor da
    variável &lt;em&gt;resultado.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Com o tempo, a leitura e criação de algoritmos passa a ser uma coisa
muito simples para um programador. Mas para isso é preciso bastante
prática! Então, você pode começar fazendo um exercício, crie algoritmos
para as suas tarefas do dia-a-dia a partir do momento em que você
acorda. Essa é a melhor forma de aprender a criar algoritmos.&lt;/p&gt;</content><category term="Dicionário de programador"></category></entry></feed>