Executando verificação de segurança...
4

Eu sempre agradeço quando alguém aborda um tema importante para discutir e por isso costumo votar na postagem original, mesmo quando não concordo com tudo o que está escrito nela.

Há controvérsias sobre o que é paradigma de programação ou não. Até mesmo há quem questione se o que chamam de paradigma é de fato.

Eu dei uma boa estudada sobre o assunto. Nada que permita eu escrever uma tese, mas a minha conclusão é que esse é mais um daqueles assuntos que ninguém sabe de nada, inclusive eu, claro.

A página da Wikipedia sobre o assunto é uma colcha de retalhos escrita por "trocentas" mãos e amplamente inconsistente. Portanto não é confiável e é uma das fontes ruins.

O problema é que é bem difícil achar fontes boas.

Eu adotei uma definição que encontrei em discussões entre alguns dos melhores desenvolvedores de softwares do mundo e postei sobre isso, não vou repetir tudo aqui. De lá dá para ir para outras respostas que dou mais detalhes para quem quer se aprofundar e entender melhor.

Em resumo (não, isto não é o ChatGPT :D), só existem os paradigmas imperativo, funcional e lógico. O resto até pode ser considerado paradigma, mas secundário. Em geral as orientações não deveriam ser chamadas de paradigma.

E sim, orientação a objeto não é paradigma, muito menos é importante como as pessoas acham. Elas usam OOP de fato muito menos do que elas mesmas acham que usam. É impossível usar OOP o tempo todo, o grosso do código trata de outras coisas. As pessoas mais gostam de afirmar que usam OOP do que usam de fato, até por não entender o que estão usando. É uma questão de estar na moda e não de entender sobre a ciência/engenharia da coisa. Nem vou falar muito sobre o fato OOP nem ter definição universal que alguns acham, inclusive a falha de crer no que o Alan kay falou, para não desviar o foco aqui. Quem quiser saber mais pesquise porque já respondi sobre isso em diversos lugares.

E sim, os paradigmas são mutuamente exclusivos, o que pode ser usado em conjunto não é paradigma, segundo a definição que eu adotei, porque ela pareceu fazer sentido pra mim em 40 anos trabalhando com isso e sendo bastante questionador e estudioso do assunto. A definição de paradigma demonstra que um jeito elimina o outro.

Você não consegue fazer algo imperativo e funcional ao mesmo tempo, embora possa em partes diferentes cada um deles de forma limitada. Você pode usar OO junto com imperativo ou com funcional, porque OO não é paradigma.

A maioria das linguagens implementam 100% do paradigma imperativo. Algumas poucas implementam 100% do paradigma funcional, com algum escape em IO (em geral com Monads) porque seria impraticável de outra forma. Quase não há linguagens lógicas e não sei dizer sobre a implementação delas. Assim como o potencial paradigma de metas não tem implementação conhecida.

Algumas linguagens são puras em um destes três paradigmas. Nenhuma é pura em paradigmas secundários, precisam de um dos principais, o que mostra mais ainda como eles não podem ser tratados da mesma forma. Não existe linguagem puramente orientada a objeto.

OCaml é híbrida, não é só questão de escape, ela permite o imperativo desde que em momentos distintos.

Todas as linguagens de programação possuem estados e são acessados, a forma de manipulá-los é que muda.

No paradigma funcional, quase sempre a maior parte do código não é função, mas ela é o centro de como se codifica. No imperativo se usa função quase tanto quanto no paradigma funcional, mas ela não é o centro da atenção, especialmente não se costuma usar para fazer repetições.

Há questiuonamentos até se é certo chamar uma linguagem desse ou daquele paradigma, apesar de ser amplamente usado (popularidade não torna algo correto). Mas se for feito então deveria se concentrar nos paradigmas principais, já que em geral os secundários podem não ser usados mesm oque a linguagem entregue facilidade e influencie em favor deles, ou seja possível adotar o secundário em linguagens que não o suportem nativamente com facilidade. Você consegue fazer OO em C com algum esforço, e não usar OO em C# com alguma dificuldade, mas não consegue deixar o imperativo nelas.

E eu não conheço todos, nem mesmo de nome.

Eu não brigo com quem quer usar outras definições, acho um direito usar outras fontes, mas gostaria que a pessoa aos menos justificasse a escolha, colocasse as fontes, para não ser só a repetição de algo publicado sem uma análise mais profunda, não ser só um "Maria vai com as outras".

Estou à disposição se tiverem dúvidas sobre o assunto e até de paradigmas específicos, ele não é tão simples quanto parece e há muita confusão na internet e até em livros. Entender isso e estudar linguagens de diferentes paradigmas aumenta muito a capacidade de programação das pessoas, recomendo!

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).