Answers:
Perl是一种高级通用通用多范例解释型动态编程语言。Java是一种高层次的,通用的,大多是单模式,静态类型的编程语言。
因此,两者都是高级的:
高级编程语言是一种从计算机详细信息中抽象而来的编程语言。
和通用:
在计算机软件中,通用编程语言(GPL)是一种编程语言,旨在用于在各种应用程序域中编写软件。
实质上,这意味着您可以使用Perl进行的所有操作,也可以使用Java进行的处理。正如@KyleHodgson所提到的,它们的语法都源自C和C ++,而诸如for
循环和if
语句之类的简单内容的语法本质上是相同的-就像@DipanMehta 指出的那样,两者都是垃圾回收。当然,两者都非常受欢迎,并且社区充满活力。
但这就是相似之处停止的地方。Perl是多范式,支持多种编程范式:
Perl不鼓励使用单一范式,它们实质上是相等的,您可以自由选择最适合自己构建的模型,而不必局限于单一范式,您可以混合搭配。另一方面,Java主要是一种基于类的面向对象语言。它支持通用编程,但是作为初学者,您应该将Java严格视为基于类的面向对象语言。
因此,Perl允许用多种方法来构造代码1,而Java只是一种。那不是一件坏事(或一件好事),只是有所不同。如果您尚未编写任何面向对象的Perl代码,则Java乍一看似乎有些陌生。不要气our,如果您正在考虑从事软件开发工作,那么面向对象是您最终必须学习的东西,而学习Java是学习面向对象的基本概念的一种好方法-并不是一种完美的方法,但是绝对是个好方法。
如您所知,Perl被解释,而Java是……很好…… 完全是另一种野兽。在Java中,您可以像在Perl中一样编写代码,然后对其进行编译。结果不是可执行文件,而是Java bytecode。这种中间格式是在Java虚拟机中执行的(最终!),它有点类似于Perl解释器。必须预先安装JVM才能运行Java程序,类似地讲,您需要如何安装Perl解释器来执行Perl脚本2。
来自Perl的背景,要记住的最重要的事情是编译到字节码的步骤:每次对Java源文件进行更改时,都需要重新编译它。乍一看听起来很疯狂,但是编译会产生非常好的结果:在此阶段检查您的代码是否存在各种错误,并且如果有任何错误,编译器拒绝完成该过程,有时会帮助您使用有用的消息(总是有消息,但有时仅是有用的消息)。
这给我们带来了最后一个主要区别:
Perl是动态的3:
动态编程语言是计算机科学中广泛使用的术语,用于描述一类高级编程语言,这些语言在运行时执行其他语言在编译期间可能执行的许多常见行为(如果有的话)。这些行为可能包括程序扩展,通过添加新代码,通过扩展对象和定义,或通过修改类型系统(全部在程序执行期间进行)。
并动态输入4:
当一种编程语言的大部分类型检查在运行时(而不是在编译时)执行时,可以说它是动态类型的。
Java是静态类型的:
在编译时(而不是在运行时)执行类型检查时,一种编程语言被称为使用静态类型。
简而言之,这意味着在Java中,必须在使用变量和方法之前声明它们的类型。还有其他差异,但是我不想破坏自己发现它们的乐趣:)
最后,还有一个非常重要的区别:Java是学术界5 和企业界的甜心语言,而您再也不会在学术场合(我第一次见到她)遇到Perl,并且它的职业前景正在缩小。 (仍然有很多工作,但远不及Java,.Net语言或PHP)。我不会评论原因,我只是在说(悲伤的)事实。由于您还很年轻,因此,如果您选择按照这种方式学习Java,那么您将为计算机科学学位做些准备。
当然,不要放弃Perl,但是一定要探索Java。它们比相似的产品差异更大的事实还意味着您将学习完全不同的方法和编程思想,这是一条艰难的道路,但最终将使您成为一名更好的程序员。
1个 “ Tim Toady”
2 Perl社区正在通过Parrot积极探索Perl虚拟机的可能性。
3动态并不总是意味着动态输入。
4 Perl是为用户定义的类型动态键入的,针对区分数组,哈希,标量和子例程的类型为静态类型,并通过进行强类型化use strict
,因此从本质上讲,它是一种变量类型的系统语言,但是为了保持理智,让我们动态地对其进行调用输入。
5正如乔尔· 斯波斯基(Joel Spolsky)在《 JavaSchools的危险》中写道的那样。
好吧,它们都使用类似C的语法-分号,花括号等。就个人而言,几年前,当我试图从Perl切换到Java时-使我震惊的最大事情是面向对象的编程。我在Perl中开发了一些对象,但是尝试想象名词王国的生活却伤了我的头。
因为当前选择的答案似乎着眼于两者之间的差异(确实,Perl和Java之间没有很多相似之处),所以选择另一种答案。
如果您的Perl代码非常严格并且是正交的(经过充分测试,有据可查,使用Moose或严格的面向对象),那么这些概念将很好地融入Java中,因为Java具有极强的正交性且不那么具有表现力。