Conceito de Pseudocódigo: Origem, Definição e Significado

Conceito de Pseudocódigo: Origem, Definição e Significado

Conceito de Pseudocódigo: Origem, Definição e Significado
Desvendar o universo da programação pode parecer, à primeira vista, uma jornada repleta de sintaxes complexas e códigos indecifráveis. Mas e se eu te dissesse que existe uma ponte, um idioma universal que transcende as barreiras das linguagens de programação específicas, permitindo que ideias e lógicas fluam livremente, antes mesmo de serem traduzidas para a linguagem das máquinas? Este é o poder do pseudocódigo.

O Que é Pseudocódigo? Uma Ponte Entre a Ideia e o Código

O pseudocódigo é, em sua essência, uma linguagem informal e descritiva usada para expressar os passos de um algoritmo ou a lógica de um programa de computador. Pense nele como um rascunho detalhado, um plano de ação para a resolução de um problema computacional. Ele combina elementos da linguagem natural com convenções de programação estruturada, tornando a comunicação de ideias de programação acessível a todos, independentemente de sua familiaridade com uma linguagem de programação específica.

Essa ferramenta é fundamental na fase de planejamento e design de software. Antes de mergulhar na escrita do código em linguagens como Python, Java ou C++, os desenvolvedores utilizam o pseudocódigo para delinear a lógica, as instruções sequenciais, as decisões (condicionais) e as repetições (loops) que comporão a solução. O objetivo é garantir que a lógica esteja correta e bem definida, minimizando erros na fase de codificação.

Origem e Evolução: Uma Necessidade Intrínseca na Computação

A necessidade de uma forma de descrever algoritmos de maneira clara e compreensível surgiu com a própria computação. Embora o termo “pseudocódigo” não tenha um inventor singular e uma data de criação específica, sua prática remonta aos primórdios da ciência da computação.

Nos primeiros dias, a comunicação de algoritmos era feita através de descrições em linguagem natural, mas isso frequentemente levava a ambiguidades e mal-entendidos. Com o avanço e a formalização da área, a necessidade de uma linguagem mais estruturada, porém menos restritiva que uma linguagem de programação formal, tornou-se evidente.

Pesquisadores e cientistas da computação começaram a desenvolver convenções e notações para descrever procedimentos de forma precisa. A ideia de usar palavras-chave comuns, como “SE”, “ENTÃO”, “ENQUANTO”, “FAZER”, já estava presente em trabalhos pioneiros. A evolução foi gradual, impulsionada pela busca por clareza e eficiência na comunicação de ideias computacionais.

O pseudocódigo não é uma linguagem padronizada universalmente. Cada organização, equipe ou até mesmo indivíduo pode ter suas próprias convenções e estilos. No entanto, existem elementos comuns que a maioria das abordagens de pseudocódigo compartilha, garantindo uma boa base para a compreensão.

Definição Detalhada: Desmistificando a Estrutura e a Sintaxe

A beleza do pseudocódigo reside em sua flexibilidade. Ele não se prende a regras de sintaxe estritas como as linguagens de programação. Em vez disso, foca na clareza e na intenção. Algumas convenções comuns incluem:

* Palavras-chave: Uso de palavras-chave em maiúsculas para indicar ações ou estruturas de controle. Exemplos comuns são:
* `INICIO` / `FIM`: Marca o início e o fim de um bloco de código.
* `LER` / `ESCREVER` (ou `MOSTRAR`, `IMPRIMIR`): Para entrada e saída de dados.
* `SE` … `ENTÃO` … `SENÃO`: Para decisões condicionais.
* `ENQUANTO` … `FAZER` … `FIM_ENQUANTO` (ou `LOOP`, `REPETIR`): Para repetição controlada por condição.
* `PARA` … `FAZER` … `FIM_PARA`: Para repetição com contador.
* `FUNÇÃO` / `PROCEDIMENTO`: Para definir blocos de código reutilizáveis.
* `ATRIBUIR` (ou `=`) : Para designar um valor a uma variável.

* Variáveis: Geralmente declaradas com um nome descritivo, sem a necessidade de especificar um tipo de dado rígido como em linguagens de programação. Por exemplo, `nome_do_usuario`, `contador_de_itens`.

* Comentários: Frequentemente usados para explicar partes específicas do pseudocódigo, aumentando a legibilidade. Podem ser indicados por caracteres como `//` ou parênteses.

* Estrutura: A indentação é crucial para indicar a hierarquia e o escopo dos blocos de código, assim como em muitas linguagens de programação.

Vamos ilustrar com um exemplo prático. Suponha que queremos criar um pseudocódigo para verificar se um número é par ou ímpar:

INICIO
LER numero
SE numero MOD 2 == 0 ENTÃO
ESCREVER “O número é par.”
SENÃO
ESCREVER “O número é ímpar.”
FIM_SE
FIM

Neste exemplo, `INICIO` e `FIM` delimitam o algoritmo. `LER numero` indica que vamos obter um valor e armazená-lo na variável `numero`. `SE numero MOD 2 == 0 ENTÃO` é a condição que verifica se o resto da divisão de `numero` por 2 é igual a zero. Se for verdade, o código dentro do `ENTÃO` é executado, escrevendo “O número é par.”. Caso contrário, o código dentro do `SENÃO` é executado, escrevendo “O número é ímpar.”. `FIM_SE` fecha a estrutura condicional.

### Significado e Propósito: Por Que o Pseudocódigo é Tão Valioso?

O pseudocódigo transcende a mera descrição de um algoritmo; ele carrega um significado profundo no ciclo de desenvolvimento de software e na comunicação técnica. Seu propósito principal é facilitar a compreensão, o planejamento e a comunicação.

1. **Clareza e Compreensão**: Permite que desenvolvedores, designers e até mesmo stakeholders não técnicos entendam a lógica de um programa sem se prender à sintaxe específica de uma linguagem de programação. Isso é vital para a colaboração e para garantir que todos estejam na mesma página.

2. **Planejamento e Design**: Serve como um “blueprint” para o desenvolvimento. Ao escrever o pseudocódigo, os desenvolvedores podem identificar falhas na lógica, otimizar passos e antecipar problemas antes de investir tempo na codificação. É uma forma de pensar sobre o problema de maneira estruturada.

3. **Independência de Linguagem**: Como mencionado, o pseudocódigo não é atrelado a nenhuma linguagem de programação. Isso significa que um algoritmo descrito em pseudocódigo pode ser facilmente implementado em diferentes linguagens. Essa portabilidade conceitual é uma vantagem enorme.

4. **Documentação**: Funciona como uma forma de documentação de alto nível para os algoritmos. Ajuda a entender como uma parte específica de um software funciona, o que é crucial para a manutenção e para a integração com outras partes do sistema.

5. **Aprendizado**: Para iniciantes na programação, o pseudocódigo é uma ferramenta de aprendizado fantástica. Ele permite que se concentrem na lógica e na estrutura do pensamento computacional sem serem sobrecarregados pelas complexidades da sintaxe de uma linguagem de programação.

6. **Brainstorming e Prototipagem Lógica**: É excelente para explorar diferentes abordagens para resolver um problema. Permite testar mentalmente ou rabiscar ideias rapidamente, antes de se comprometer com uma implementação específica.

Um erro comum que os iniciantes cometem é pular a fase de pseudocódigo, indo direto para a codificação. Isso pode levar a um código confuso, com muitos erros lógicos e retrabalho. O tempo investido no pseudocódigo é, na verdade, um investimento que economiza tempo e esforço a longo prazo.

### Aplicações Práticas: Onde o Pseudocódigo Brilha?

O pseudocódigo não é uma ferramenta restrita a um nicho específico da computação; suas aplicações são vastas e variadas.

* **Ensino de Programação**: Em cursos introdutórios de ciência da computação e programação, o pseudocódigo é quase unanimidade. Ele permite que os professores foquem nos conceitos fundamentais de lógica, controle de fluxo e estruturas de dados, sem a barreira da sintaxe.

* **Desenvolvimento de Algoritmos**: Em áreas como inteligência artificial, machine learning, otimização e computação gráfica, onde algoritmos complexos são a norma, o pseudocódigo é essencial para descrever e comunicar essas soluções.

* **Design de Software**: Arquitetos de software utilizam pseudocódigo para descrever o fluxo de dados e a interação entre diferentes módulos de um sistema complexo.

* **Resolução de Problemas Gerais**: Até mesmo para resolver problemas cotidianos que exigem uma sequência lógica de passos, o pseudocódigo pode ser uma ferramenta útil para organizar o pensamento.

* **Comunicação Interdisciplinar**: Em projetos que envolvem equipes com diferentes especialidades (por exemplo, engenheiros de software, analistas de dados, designers de UX), o pseudocódigo serve como uma linguagem comum para descrever o comportamento esperado do software.

Imagine um cenário em que um cientista de dados precisa explicar um algoritmo de recomendação para um gerente de marketing. Usar pseudocódigo seria muito mais eficaz do que tentar explicar em termos de Python ou R, permitindo que o gerente de marketing compreenda a lógica por trás das recomendações.

### Vantagens e Desvantagens: Uma Análise Equilibrada

Como qualquer ferramenta, o pseudocódigo possui seus pontos fortes e fracos.

Vantagens:

* Fácil de aprender e usar: Não exige conhecimento prévio de linguagens de programação.
* Independência de linguagem: Portátil entre diferentes linguagens de programação.
* Clareza na comunicação: Facilita a compreensão da lógica por diversas audiências.
* Redução de erros: Ajuda a identificar e corrigir falhas lógicas precocemente.
* Documentação acessível: Serve como um registro claro do pensamento algorítmico.
* Acelera o desenvolvimento: Ao ter a lógica clara, a codificação se torna mais rápida e eficiente.

Desvantagens:

* Não executável diretamente: Precisa ser traduzido para uma linguagem de programação real para ser executado por um computador.
* Falta de padronização rigorosa: A variação nas convenções pode, às vezes, levar a ambiguidades se não houver um acordo interno sobre o estilo.
* Pode se tornar muito detalhado ou muito vago: Encontrar o equilíbrio certo na descrição é uma habilidade que se desenvolve com a prática. Um pseudocódigo excessivamente detalhado pode se aproximar demais da sintaxe de uma linguagem, perdendo parte de sua flexibilidade. Por outro lado, um pseudocódigo muito vago pode não ser útil.

### Exemplos Avançados e Dicas para um Bom Pseudocódigo

Vamos explorar alguns exemplos mais complexos para solidificar o entendimento.

**Exemplo: Algoritmo de Busca Linear**

O objetivo é encontrar um item específico em uma lista.

INICIO
FUNÇÃO buscar_item(lista_de_itens, item_procurado)
PARA cada indice de 0 até tamanho(lista_de_itens) – 1 FAZER
SE lista_de_itens[indice] == item_procurado ENTÃO
RETORNAR indice // Item encontrado, retorna sua posição
FIM_SE
FIM_PARA
RETORNAR -1 // Item não encontrado
FIM_FUNÇÃO

// Exemplo de uso
minha_lista = [“maçã”, “banana”, “laranja”, “uva”]
item_a_encontrar = “laranja”

posicao = buscar_item(minha_lista, item_a_encontrar)

SE posicao != -1 ENTÃO
ESCREVER “Item encontrado na posição: “, posicao
SENÃO
ESCREVER “Item não encontrado na lista.”
FIM_SE
FIM

Neste exemplo, introduzimos o conceito de função (`buscar_item`), que recebe uma lista e um item como entrada e retorna a posição do item ou -1 se não for encontrado. O loop `PARA cada` itera sobre os índices da lista.

**Dicas para Escrever um Pseudocódigo Eficaz:**

* Seja Claro e Conciso: Use linguagem simples e direta. Evite jargões excessivos ou ambiguidades.
* Mantenha a Consistência: Se você usar uma convenção para uma determinada ação (por exemplo, `ESCREVER`), use-a consistentemente.
* Use Nomes Descritivos: Variáveis e funções devem ter nomes que indiquem seu propósito. `conta_total` é melhor que `ct`.
* Indente Corretamente: A indentação é sua aliada para mostrar a estrutura e o fluxo do código.
* Divida em Blocos Lógicos: Separe o pseudocódigo em partes lógicas, como inicialização, processamento e saída.
* Comente Quando Necessário: Explique as partes mais complexas ou as decisões não óbvias.
* Concentre-se na Lógica, Não na Sintaxe: Lembre-se que o objetivo é descrever o “o quê” e o “como” do algoritmo, não a sintaxe exata de uma linguagem.
* Adapte ao Público: Se estiver escrevendo para um público menos técnico, simplifique ainda mais a linguagem.

### Erros Comuns a Evitar

* Pseudocódigo demais como linguagem de programação: Tentar usar sintaxe específica de uma linguagem (como ponto e vírgula no final de cada linha em C++). O pseudocódigo deve ser mais abstrato.
* Pseudocódigo muito vago: Não detalhar o suficiente os passos, deixando lacunas na lógica. Por exemplo, “processar dados” sem explicar como.
* Falta de estrutura: Não usar indentação ou palavras-chave para indicar estruturas de controle, resultando em um bloco de texto difícil de seguir.
* Ignorar a fase de pseudocódigo: Ir direto para a codificação sem um plano claro.
* Não testar a lógica do pseudocódigo: Ler o pseudocódigo como se fosse um texto corrido para garantir que os passos fazem sentido.

### O Futuro e a Relevância Contínua do Pseudocódigo

Em um mundo cada vez mais digitalizado, onde a automação e a inteligência artificial moldam nosso cotidiano, a capacidade de pensar logicamente e resolver problemas de forma estruturada é mais importante do que nunca. O pseudocódigo, como ferramenta fundamental nesse processo, não perderá sua relevância.

Com o surgimento de novas linguagens de programação, paradigmas e ferramentas de desenvolvimento, o pseudocódigo continuará a ser a linguagem universal para expressar algoritmos. Ele serve como a base sólida sobre a qual todo o software é construído.

A capacidade de transitar do conceito abstrato para a lógica concreta, e depois para a implementação em código, é uma habilidade valiosa para qualquer profissional da área de tecnologia e além. O pseudocódigo é o elo que conecta essas etapas.

Entender e dominar o pseudocódigo é um passo crucial para qualquer pessoa que deseja se aprofundar na ciência da computação, no desenvolvimento de software ou simplesmente aprimorar suas habilidades de resolução de problemas. Ele capacita a mente a pensar de forma algorítmica, a criar soluções eficientes e a comunicar ideias de forma clara e inequívoca.

Conclusão: A Clareza Como Alicerce da Inovação

Em suma, o pseudocódigo é mais do que uma ferramenta; é uma filosofia de planejamento e comunicação na computação. Sua origem está na necessidade humana de expressar ideias complexas de forma compreensível, e seu significado reside na ponte que ele constrói entre o pensamento humano e a execução da máquina. Ao dominar o pseudocódigo, você está aprimorando sua capacidade de pensar de forma lógica, de resolver problemas de maneira estruturada e de comunicar suas ideias de forma eficaz. Ele é o alicerce sobre o qual grandes inovações são construídas, permitindo que a criatividade e a eficiência caminhem juntas na jornada da criação de software.

Explore, pratique e use o pseudocódigo como seu guia. Ele abrirá portas para um entendimento mais profundo do mundo da programação e das infinitas possibilidades que ele oferece.

Se você achou este artigo útil, compartilhe com seus amigos e colegas! E para mais conteúdos sobre tecnologia e desenvolvimento, não deixe de se inscrever em nossa newsletter. Vamos juntos desbravar os segredos da computação!

O que é pseudocódigo e qual a sua principal utilidade?

Pseudocódigo é uma linguagem informal e abstrata utilizada para descrever algoritmos e a lógica de um programa de computador. Ele se assemelha à linguagem natural, mas segue uma estrutura mais formalizada, com o objetivo de tornar a descrição de processos computacionais compreensível para humanos, independentemente da linguagem de programação específica que será utilizada para a implementação final. Sua principal utilidade reside em atuar como um intermediário entre a ideia de um programa e o código executável, facilitando o planejamento, a comunicação entre desenvolvedores e a depuração inicial antes da escrita do código real. É uma ferramenta essencial no planejamento e design de software, permitindo que programadores e não programadores discutam e validem a lógica de um sistema de forma clara e concisa.

Qual a origem histórica do pseudocódigo?

A origem do pseudocódigo não está atrelada a um único inventor ou a um marco histórico específico, mas sim a uma evolução natural na forma como os cientistas da computação e programadores passaram a descrever procedimentos antes do desenvolvimento de linguagens de programação de alto nível padronizadas. Nos primórdios da computação, a comunicação de algoritmos era frequentemente feita através de diagramas de fluxo ou descrições em linguagem natural que podiam ser ambíguas. Com o aumento da complexidade dos sistemas e a necessidade de uma comunicação mais precisa e universal, a ideia de um “código falso” ou “semelhante a um código” começou a ganhar força. A década de 1960 e 1970 são frequentemente citadas como o período em que o pseudocódigo se consolidou como uma prática comum no desenvolvimento de software, especialmente com a popularização de livros didáticos e acadêmicos que o adotaram como método de ensino e descrição de algoritmos. Ele surgiu como uma resposta à necessidade de uma representação mais estruturada e menos ambígua do que a linguagem natural pura, mas ainda assim mais acessível e menos restritiva do que as linguagens de programação formais da época.

Como o pseudocódigo se diferencia de uma linguagem de programação real?

A principal diferença entre pseudocódigo e uma linguagem de programação real reside no seu nível de formalidade e executabilidade. Linguagens de programação como Python, Java ou C++ possuem uma sintaxe estritamente definida e regras gramaticais que precisam ser seguidas à risca para que o código seja compilado ou interpretado e executado por um computador. Erros de sintaxe podem impedir completamente a execução. O pseudocódigo, por outro lado, é flexível e não possui uma sintaxe padronizada universalmente aceita. Ele utiliza uma mistura de linguagem natural e convenções de programação para descrever os passos de um algoritmo. Seu foco não é ser executado por uma máquina, mas sim ser claramente compreendido por pessoas. Isso significa que um pseudocódigo pode usar termos como “ler”, “escrever”, “se”, “enquanto”, “para” de forma mais livre, sem se prender a palavras-chave específicas ou a estruturas de controle exatas de uma linguagem. A ênfase está na lógica e no fluxo do processo, e não nos detalhes de implementação que uma linguagem de programação exigiria.

Quais são os principais elementos de um pseudocódigo?

Um pseudocódigo, embora não tenha uma sintaxe rígida, geralmente incorpora elementos que o tornam eficaz na descrição de algoritmos. Estes elementos incluem: instruções sequenciais, que representam passos a serem executados um após o outro; estruturas de decisão, como “SE-ENTÃO-SENÃO”, que permitem ao programa tomar caminhos diferentes com base em condições; estruturas de repetição, como “ENQUANTO”, “PARA” e “FAÇA-ENQUANTO”, que executam um bloco de código múltiplas vezes; sub-rotinas ou procedimentos, que são blocos de código reutilizáveis que realizam tarefas específicas; e variáveis, que são nomes simbólicos usados para armazenar dados. Além disso, o uso de comentários é fundamental para explicar partes complexas do algoritmo. A clareza na nomeação de variáveis e na descrição das ações é crucial para a eficácia do pseudocódigo.

Como o pseudocódigo auxilia na resolução de problemas e no design de algoritmos?

O pseudocódigo é uma ferramenta poderosa no processo de resolução de problemas e no design de algoritmos, pois permite uma abordagem estruturada e incremental. Ao descrever a lógica de um problema em pseudocódigo, o desenvolvedor é forçado a pensar cuidadosamente sobre cada passo, as condições necessárias e as ações a serem tomadas. Isso ajuda a identificar e corrigir falhas lógicas em um estágio inicial, antes que o tempo e o esforço sejam investidos na codificação. Ele funciona como um rascunho detalhado, permitindo que o desenvolvedor visualize o fluxo do programa e teste mentalmente diferentes cenários. Essa abstração da sintaxe de uma linguagem específica libera o foco na essência do problema, facilitando a exploração de diferentes abordagens e otimizações. Em equipes, o pseudocódigo serve como um meio de comunicação eficaz, permitindo que todos os membros compreendam a lógica do algoritmo, independentemente do seu nível de familiaridade com uma linguagem de programação específica.

Quais são as convenções comuns utilizadas na escrita de pseudocódigo?

Embora não exista um padrão oficial, algumas convenções são amplamente adotadas na escrita de pseudocódigo para garantir clareza e consistência. Geralmente, usa-se letras maiúsculas para palavras-chave de controle, como `SE`, `ENTÃO`, `SENÃO`, `ENQUANTO`, `PARA`, `FAZER`, `RETORNAR`. Para indicar o início e o fim de blocos de código, como em estruturas condicionais ou de repetição, é comum o uso de indentação ou palavras-chave como `FIM SE`, `FIM ENQUANTO`, `FIM PARA`. A leitura de dados geralmente é representada por palavras como `LER`, `OBTER` ou `INPUT`, enquanto a saída de dados é indicada por `ESCREVER`, `MOSTRAR` ou `OUTPUT`. Variáveis são geralmente declaradas de forma implícita ou explícita com tipos de dados básicos (inteiro, real, caractere, booleano). Comentários são frequentemente precedidos por um símbolo como `//` ou `#` para explicar partes do código.

Como o pseudocódigo se relaciona com a depuração e o teste de software?

O pseudocódigo desempenha um papel crucial na depuração e no teste de software, atuando como um plano de teste inicial. Antes de escrever o código-fonte, a descrição em pseudocódigo pode ser revisada e testada mentalmente ou com exemplos simples para verificar se a lógica está correta. Essa fase de teste em pseudocódigo é muito mais rápida e barata do que a depuração de código real. Ao identificar erros lógicos no pseudocódigo, os desenvolvedores podem corrigi-los sem o desperdício de tempo de compilação e execução. Uma vez que o pseudocódigo foi validado, ele serve como um guia claro para a implementação em uma linguagem de programação específica. Os casos de teste desenvolvidos para o pseudocódigo podem ser facilmente traduzidos em testes formais para o código final, garantindo que a funcionalidade esperada seja alcançada e que o software se comporte corretamente em diversas situações.

Quais são os benefícios de usar pseudocódigo no desenvolvimento de software?

O uso de pseudocódigo no desenvolvimento de software oferece uma série de benefícios significativos. Primeiramente, ele promove a clareza e a compreensão da lógica do programa, facilitando a comunicação entre membros da equipe e até mesmo com stakeholders não técnicos. Em segundo lugar, permite uma detecção precoce de erros lógicos, reduzindo o tempo e os custos de depuração posterior. Em terceiro lugar, aumenta a portabilidade, pois um algoritmo descrito em pseudocódigo pode ser facilmente implementado em qualquer linguagem de programação. Além disso, o pseudocódigo acelera o processo de design, permitindo que os desenvolvedores foquem na solução do problema sem se preocupar com a sintaxe específica de uma linguagem. Ele também serve como uma excelente ferramenta de documentação, explicando o funcionamento interno de um sistema de forma acessível. Por fim, incentiva o pensamento algorítmico, ajudando os desenvolvedores a aprimorar suas habilidades de resolução de problemas.

Como o pseudocódigo pode ser usado para documentar algoritmos existentes?

O pseudocódigo é uma ferramenta valiosa para documentar algoritmos existentes, especialmente aqueles que foram implementados em linguagens de programação mais antigas ou que possuem uma lógica complexa. Ao traduzir um trecho de código em pseudocódigo, é possível criar uma descrição abstrata e de alto nível que explica o propósito e o funcionamento do algoritmo, independentemente das particularidades da linguagem original. Isso torna o algoritmo mais acessível para novos desenvolvedores ou para equipes que podem não estar familiarizadas com a linguagem de implementação. A documentação em pseudocódigo pode ser mais focada na lógica e no fluxo, removendo o ruído da sintaxe específica, tornando a leitura e a compreensão mais eficientes. É uma prática comum em manutenção de sistemas e na criação de manuais técnicos, onde a clareza sobre o funcionamento do software é primordial.

Existem diferentes estilos ou tipos de pseudocódigo?

Embora não haja um padrão rígido, podem-se identificar diferentes estilos ou abordagens na escrita de pseudocódigo, dependendo do nível de detalhe desejado e da audiência a que se destina. Alguns pseudocódigos tendem a ser mais próximos da linguagem natural, usando frases mais descritivas e menos estrutura de programação. Outros são mais orientados à programação, incorporando de perto a sintaxe e as convenções de linguagens de alto nível, como Pascal ou C, mas sem a rigidez de uma linguagem real. Existe também o pseudocódigo estruturado, que segue estritamente as regras de blocos e sequências, e o pseudocódigo orientado a objetos, que pode descrever classes, objetos e métodos. A escolha do estilo geralmente depende do contexto e do objetivo da documentação ou comunicação. O importante é que o pseudocódigo seja claro, conciso e efetivamente transmita a lógica do algoritmo para o seu público.

Compartilhe esse conteúdo!

Publicar comentário