Html + Css se encaixa em qual categoria

Boa noite, a algum tempo venho me questionando sobre um assunto bem polêmico, não é fácil de explicar meu ponto mas vamo lá…

Por que html e css trabalhando juntos não se encaixam na categoria de linguagem de programação, sendo que se encaixam na terceira hierarquia de Chomsky mais conhecida como (Gramática regular), ou seja, ambas as linguagens possuem regras e padrões bem definidos que determinam como elas devem ser estruturadas e interpretadas, e também possuem os requisitos principais para se caracterizar como uma linguagem de programação, como I/O (input/output)e também um sistema básico de variáveis, quando os dois trabalham com variáveis locais usando div e id?

Porque eles não possuem capacidade de lógica ou de realizar cálculos.

2 curtidas

Esse é um daqueles assuntos que se perguntar pra 10 pessoas, vai ter 11 respostas diferentes.

Isso porque não existe uma única definição “oficial”, canônica, universalmente aceita e livre de controvérsias sobre o que é uma linguagem de programação.

Mesmo nos círculos acadêmicos (mais teóricos e formais), não há consenso. O melhor que podemos ter é um critério mínimo no qual a maioria parece concordar: que tal linguagem deve ter sintaxe e semântica bem definidas. A sintaxe define uma gramática formal que diz quais construções são válidas, e a semântica dá significado aos elementos da sintaxe. Bem, se fosse só isso, então HTML e CSS poderiam ser consideradas “linguagens de programação”.

Mas há pessoas que não se contentam com esta definição, e incluem como obrigatório o fato de ser Turing Complete. Ou seja, precisa ter outras características, dentre elas (mas não apenas estas): a capacidade de computar (realizar cálculos), ter loops e condicionais, funções (nativas ou criadas pelo programador), ler e escrever dados - seja em variáveis ou em outra forma de armazenagem (arquivos, por exemplo), etc.

Neste caso, HTML e CSS não seriam linguagens de programação. Não sei de onde vc tirou que HTML e CSS fazem I/O. Como vc consegue ler algo que o usuário digitou (ou o conteúdo de um arquivo) com HTML e CSS? No HTML até tem <input>, mas isso é apenas uma interface para que o browser envie os dados ao backend (e quem fará a leitura e depois a saída é a linguagem que está rodando no servidor). Não é o HTML e nem o CSS que fez o I/O.

Quanto a “variáveis”, o CSS até tem uma forma limitada, mas está bem longe do conceito de variáveis das linguagens de programação “tradicionais”: vc não pode usá-las em qualquer expressão ou cálculo, no CSS o uso é bem restrito a contextos específicos (são basicamente valores que podem ser reusados, não mais que isso). E não sei o que vc quis dizer com “trabalham com variáveis locais usando div e id”, isso não faz o menor sentido.


E claro, o que vc mais vai ver por aí é a discussão não-acadêmica e mais, digamos, informal. E aí é terra de ninguém, com cada um dando sua opinião e nunca chegando a conclusão nenhuma. Os argumentos mais comuns que lembro de cabeça:

  • HTML significa “HyperText Markup Language” (Linguagem de Marcação de Hipertexto), ou seja, é uma linguagem de marcação, não de programação. Só serve pra definir a estrutura de uma página, mas não pra fazer programas da forma “tradicional”
  • Mas quando estamos programando um site, usamos HTML também, então ele faz parte do processo de programação. Portanto, é uma linguagem de programação.
    • Aí tem a resposta: Se levar essa definição ao extremo, então Excel, Word e até o Notepad também seriam linguagens de programação (afinal, eu usei o Word pra escrever a especificação do sistema e o Notepad para escrever o código, e isso faz parte do “processo de programação”, certo?)
      • e a discussão segue ad infinitum (ou até começarem os xingamentos)
  • HTML só define a estrutura, e CSS só define a estilização. O browser só interpreta isso e monta a página
  • Vc disse “interpretar”? Então eles são linguagens de programação interpretadas, possuem instruções que são executadas como qualquer outra linguagem.
  • Mas não tem loops, condicionais, funções, classes/structs, não dá pra fazer cálculos, etc.

Leitura complementar:

2 curtidas

Não se classifica se uma linguagem é ou não de programação usando a hierarquia de Chomsky. HTML e CSS não são linguagens regulares, da onde vc tirou isso? Outro erro. Gramática regular é um formalismo gerador de cadeias para uma linguagem regular, assim como os autômatos finitos representam um formalismo reconhecedor de linguagens regulares. É impossível você definir uma gramática regular que gere, ou um autômato finito que reconheça, cadeias formadas por código HTML ou CSS. HTML e CSS são linguagens livres de contexto, ou seja, linguagens do tipo 2 na hierarquia de Chomsky.

Veja se você consegue projetar uma gramática regular ou um autômato finito para a seguinte cadeia:

<div><div><div><div><div></div></div></div></div></div>

Onde é permitido aninhar divs infinitamente, ou seja, uma linguagem com a seguinte definição:

CodeCogsEqn

Onde a = <div> e b = </div>

Note que o que eu mostrei é apenas um subconjunto da HTML…

3 curtidas