Perl和Java之间有何相似之处?[关闭]


14

我下定决心要学习Java作为第二语言(我是Perl开发人员)。但是仅仅阅读一些在线教程,我真的找不到两者之间的任何相似之处。学习Java时,我会很轻松地了解什么?


首先确定“我喜欢这种语言!”。每当遇到困难时,请记住您的决定,为自己省去很多磨牙和拔毛的麻烦。

1
推荐阅读:大猩猩与鲨鱼

Answers:


32

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的危险》中写道的那样


6
与Perl相比,Java不是高级语言。与Perl代码相比,编写某些代码需要花费更多的Java代码。
tchrist 2012年

1
@tchrist无论某种语言是高级语言还是比另一种语言高/低的语言,代码量有什么关系?
yannis'2

1
@YannisRizos这很容易回答。如果需要更多代码,那么您将无法处理足够高的抽象层。一个明显的例子是Java的狡猾字符串处理。除Java 7的regex引擎外,它不支持抽象的Unicode代码点的高级概念。由于Java与Perl相比语言的低级性,这造成了很大的麻烦。
tchrist 2012年

@tchrist这个词的主观性不允许比较合理的空间,线条太模糊,并且两种语言都有非常广泛的功能,其中一些功能非常高级,有些则很卑鄙。因此,我会一直认为它们处于同一水平,不会对此太担心。我在这里进行了类似的交谈,这激发了我不要浪费时间比较各种语言;)
yannis 2012年

@YannisRizos您无法在Java中找到Perl缺少的高级概念,但是您可以在Java中找到许多Java缺少的高级概念。因此,Perl是更高级别的。Perl有函数指针。Java没有。Perl有运算符重载;Java没有。Perl具有确定性的析构函数;Java没有。Perl可以按返回类型重载函数。Java不能。我可以继续这种方式很长时间。当然,无论出于何种原因,无论您多么满意,您都将继续“感觉”,但这不是由于主观分析。
tchrist 2012年

2

好吧,它们都使用类似C的语法-分号,花括号等。就个人而言,几年前,当我试图从Perl切换到Java时-使我震惊的最大事情是面向对象的编程。我在Perl中开发了一些对象,但是尝试想象名词王国的生活却伤了我的头。


@downvote,为什么?(我不太喜欢这个答案,只是对您发现的问题感到好奇。)
凯尔·霍奇森

1

因为当前选择的答案似乎着眼于两者之间的差异(确实,Perl和Java之间没有很多相似之处),所以选择另一种答案。

相似之处

  • 它们都类似于C(它们具有循环,花括号和分号)
  • 他们是当务之急
  • 都不产生编译的二进制文件
  • 他们都很成熟
  • 它们都在企业中经过了实战测试(Perl用作操作胶,Java用作应用程序/服务)
  • 他们俩都很受欢迎
  • 它们都支持面向对象
  • 他们都有广泛的可用框架
  • 他们都有关于他们的书出版
  • 它们都比C / assembly高
  • 它们都是“慢速的”(对于各种特定的慢速场景,因为它们都不是C /汇编语言)
  • 它们都自动管理内存(“垃圾收集”)
  • 截至2012年夏季,髋部/臀部都不酷
  • 他们都在开源社区中根深蒂固
  • 它们都可用于许多平台

如果您的Perl代码非常严格并且是正交的(经过充分测试,有据可查,使用Moose或严格的面向对象),那么这些概念将很好地融入Java中,因为Java具有极强的正交性且不那么具有表现力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.