Quais são as semelhanças entre Perl e Java? [fechadas]

14

Penso que estou aprendendo Java como minha segunda linguagem (eu sou um desenvolvedor de Perl). Mas apenas lendo alguns dos tutoriais on-line, eu realmente não consigo encontrar nenhuma semelhança entre os dois. O que é fácil entender quando aprender Java?

Dinâmico
fonte
Comece de frente decidindo "EU GOSTO DESTE IDIOMA!". Sempre que encontrar algo difícil, lembre-se da sua decisão e poupe muitos ranger de dentes e puxar os cabelos.
1
Leitura recomendada: Gorilla vs. Shark

Respostas:

32

Perl é uma linguagem de programação dinâmica de alto nível, de propósito geral, multi-paradigma, interpretada e dinâmica. Java é uma linguagem de programação de alto nível, de propósito geral e principalmente de paradigma único, tipicamente estaticamente.

Então, ambos são de alto nível :

Uma linguagem de programação de alto nível é uma linguagem de programação com forte abstração dos detalhes do computador.

e de uso geral :

No software de computador, uma linguagem de programação de uso geral (GPL) é uma linguagem de programação projetada para ser usada para escrever software em uma ampla variedade de domínios de aplicativos.

Em essência, isso significa que tudo o que você pode fazer com Perl, também pode fazer com Java. E como o @KyleHodgson menciona , ambas as sintaxes derivam de C e C ++ e a sintaxe para coisas simples como forloops e ifinstruções é essencialmente a mesma - e, como observa o @DipanMehta , ambas são coletadas como lixo . E é claro que ambos são extremamente populares e têm comunidades vibrantes.

Mas é aí que as semelhanças param. Perl é multi-paradigma, suportando uma ampla variedade de paradigmas de programação:

O Perl não encoraja um único paradigma, eles são essencialmente iguais e você é livre para escolher o que achar melhor para o que estiver construindo, sem, obviamente, limitá-lo a um único paradigma, você pode misturar e combinar. Por outro lado, Java é principalmente uma linguagem orientada a objetos baseada em classe. Há suporte para programação genérica, mas como iniciante, você deve pensar em Java estritamente como uma linguagem orientada a objetos baseada em classe.

Portanto, o Perl permite mais de uma maneira de estruturar seu código 1 , enquanto o Java é apenas uma. Isso não é uma coisa ruim (ou uma coisa boa), é apenas diferente. Se você não escreveu nenhum código Perl orientado a objetos, o Java pode parecer um pouco estranho no começo. Não desanime, a orientação a objetos é algo que você precisará aprender, se estiver considerando uma carreira em desenvolvimento de software, e aprender Java é uma boa maneira de aprender os conceitos básicos de orientação a objetos - não é uma maneira perfeita, mas definitivamente uma boa maneira.

E como você sabe, Perl é interpretado, enquanto Java é ... bem ... um animal completamente diferente . Em Java, você escreve seu código como faria no Perl e depois o compila . O resultado não é um executável, mas um bytecode Java . Esse formato intermediário é executado (finalmente!) Na Java Virtual Machine , que é algo análogo ao interpretador Perl. Uma JVM deve ser instalada previamente para que um programa Java seja executado, de maneira semelhante a como você precisa instalar um interpretador Perl para executar um script Perl 2 .

Vindo de um plano de fundo Perl, a coisa mais importante a lembrar é a etapa de compilação para bytecode: toda vez que você faz uma alteração em um arquivo de origem Java, é necessário recompilá-lo. Pode parecer uma loucura no começo, mas a compilação tem uma consequência muito boa: seu código é verificado quanto a uma variedade de erros neste estágio, e o compilador se recusa a concluir o processo, se houver algum, e às vezes ajuda a identificar os erros com mensagens úteis (sempre há mensagens, mas apenas algumas vezes são úteis).

O que nos leva à última grande diferença:

Perl é dinâmico 3 :

Linguagem de programação dinâmica é um termo usado amplamente na ciência da computação para descrever uma classe de linguagens de programação de alto nível que executam em tempo de execução muitos comportamentos comuns que outras linguagens podem executar durante a compilação, se houver. Esses comportamentos podem incluir a extensão do programa, adicionando novo código, estendendo objetos e definições ou modificando o sistema de tipos, tudo durante a execução do programa.

e digitado dinamicamente 4 :

Diz-se que uma linguagem de programação é digitada dinamicamente quando a maioria de sua verificação de tipo é executada em tempo de execução, em vez de em tempo de compilação.

e Java é digitado estaticamente :

Diz-se que uma linguagem de programação usa digitação estática quando a verificação de tipo é realizada durante o tempo de compilação, em oposição ao tempo de execução.

O que, para simplificar o máximo possível, significa que em Java você deve declarar o tipo de suas variáveis ​​e métodos antes de usá-los. Existem outras diferenças, mas eu não gostaria de estragar a diversão de descobri-las sozinho :)

E, finalmente, há uma diferença muito importante: Java é a linguagem da academia 5 e do mundo corporativo, enquanto você raramente encontra Perl em um ambiente acadêmico (onde eu a conheci) e suas perspectivas de carreira estão diminuindo. (ainda há muitos trabalhos, mas nem de longe tantos como Java, linguagens .Net ou PHP). Não vou comentar sobre os motivos, apenas afirmo os fatos (tristes). Como você ainda é muito jovem, ao aprender Java, você estará um pouco mais preparado para o curso de Ciência da Computação, se optar por seguir esse caminho.

Não desista do Perl, é claro, mas explore Java. O fato de serem mais diferentes do que similares também significa que você aprenderá abordagens e mentais de programação bastante diferentes, é um caminho difícil, mas que o tornará um programador melhor.

1 "Tim Toady"

2 A comunidade Perl está explorando ativamente a possibilidade de uma máquina virtual Perl, via Parrot .

3 Dinâmico nem sempre significa digitado dinamicamente.

4 Perl é digitado dinamicamente para tipos definidos pelo usuário, estaticamente em relação a matrizes, hashes, escalares e sub-rotinas distintas e fortemente tipado via use strict, portanto, é essencialmente uma linguagem de sistema de tipo variável, mas para manter um senso de sanidade, vamos chamá-lo dinamicamente digitado.

5 Ao ponto do abuso, como Joel Spolsky escreve em The Perils of JavaSchools .

yannis
fonte
6
Comparado com o Perl, o Java não é uma linguagem de alto nível. É preciso muito mais código Java para escrever algo do que código Perl.
tchrist
1
@tchrist O que a quantidade de código tem a ver com se um idioma é de nível alto ou superior / inferior ao de outro idioma?
21412 yannis
1
@YannisRizos Isso é muito fácil de responder. Se precisar de mais código, você não estará lidando com uma camada de abstração alta o suficiente. Um exemplo flagrante é o manuseio de string desonesto de Java. Ele não suporta o conceito de alto nível de pontos de código Unicode abstratos, exceto no mecanismo regex em Java 7. Isso gera uma grande quantidade de malarkey devido à comparação de Java de linguagem de nível inferior com Perl.
19412 tchrist
@tchrist A subjetividade do termo não permite muito espaço para uma comparação sã, as linhas são muito borradas e os dois idiomas têm uma gama extremamente ampla de recursos, alguns dos quais são de nível muito alto e outros de baixo nível. Então, continuarei pensando que eles estão no mesmo nível e não vou me preocupar muito com isso. Eu tive uma conversa semelhante aqui , que me inspirou para não perder nenhum tempo comparando línguas;)
yannis
@YannisRizos Você não pode encontrar um conceito de alto nível em Java que não tenha o Perl, mas você pode encontrar muitos conceitos de alto nível em Perl que não possui o Java. Assim, Perl é de nível superior. Perl tem ponteiros de função; Java não. Perl tem sobrecarga de operador; Java não. Perl tem destruidores determinísticos; Java não. Perl pode sobrecarregar funções por tipo de retorno; Java não pode. Eu posso continuar assim por muito tempo. É claro que você continuará a 'sentir' da maneira que mais lhe agrada e por qualquer motivo, mas isso não se deve a análises subjetivas.
19412 tchrist
2

Bem, os dois usam sintaxe C como ponto e vírgula, chaves e assim por diante. Pessoalmente, quando tentei mudar de Perl para Java há alguns anos - a maior coisa que me impressionou foi a programação orientada a objetos. Eu havia desenvolvido alguns objetos em Perl, mas doeu minha cabeça tentar imaginar a vida no Reino dos Substantivos.

Kyle Hodgson
fonte
@downvote, por quê? (Eu não sou tão apaixonado com a resposta, apenas curioso para saber o que você achou tão problemático.)
Kyle Hodgson
1

Dar uma facada em uma resposta alternativa, já que a selecionada atualmente parece estar focada nas diferenças entre as duas (na verdade, não há muitas semelhanças entre Perl e Java).

Semelhanças

  • Ambos são do tipo C (possuem loops e chaves e ponto e vírgula)
  • Eles são principalmente imperativos
  • Nem produzir binários compilados
  • Ambos são muito maduros
  • Ambos são testados em batalha na empresa (Perl mais como ops cola e Java mais como aplicativos / serviços)
  • Ambos são populares
  • Ambos suportam orientação a objetos
  • Ambos têm uma grande variedade de estruturas disponíveis
  • Ambos têm livros publicados sobre eles
  • Ambos são de nível superior ao C / assembly
  • Ambos são "lentos" (para vários cenários específicos de lentidão, em que nem C / assembly)
  • Ambos gerenciam a memória automaticamente ("coleta de lixo")
  • Nem são legais / legais no verão de 2012
  • Ambos estão entrincheirados na comunidade de código aberto
  • Ambos estão disponíveis para muitas plataformas

Se o seu código Perl for muito rigoroso e ortogonal (bem testado, bem documentado, usa Moose ou orientação estrita a objetos), esses conceitos serão muito importantes para Java, pois ele é extremamente ortogonal e não tão expressivo.

Mark Canlas
fonte