Điểm giống nhau giữa Perl và Java là gì? [đóng cửa]


14

Tôi có ý nghĩ rằng tôi đang học Java như ngôn ngữ thứ hai của mình (Tôi là nhà phát triển Perl). Nhưng chỉ cần đọc một chút các hướng dẫn trực tuyến, tôi thực sự không thể tìm thấy bất kỳ điểm tương đồng nào giữa hai. Tôi sẽ có một thời gian dễ hiểu khi học Java?


Bắt đầu trước bằng cách quyết định "TÔI THÍCH NGÔN NGỮ NÀY!". Bất cứ khi nào bạn gặp phải điều gì khó khăn, chỉ cần nhớ quyết định của bạn và tiết kiệm cho mình rất nhiều nghiến răng và nhổ tóc.

1
Đề nghị đọc: Gorilla vs Shark

Câu trả lời:


32

Perl là một ngôn ngữ lập trình động cấp cao, đa mục đích, đa mô hình, diễn giải, năng động. Java là một ngôn ngữ lập trình cấp cao, đa mục đích, chủ yếu là mô hình đơn, được gõ tĩnh.

Vì vậy, cả hai đều là cấp cao :

Ngôn ngữ lập trình cấp cao là ngôn ngữ lập trình có sự trừu tượng hóa mạnh mẽ từ các chi tiết của máy tính.

mục đích chung :

Trong phần mềm máy tính, ngôn ngữ lập trình đa dụng (GPL) là ngôn ngữ lập trình được thiết kế để sử dụng để viết phần mềm trong nhiều lĩnh vực ứng dụng.

Về bản chất, điều này có nghĩa là mọi thứ bạn có thể làm với Perl, bạn cũng có thể làm với Java. Và như @KyleHodgson đề cập , cả hai cú pháp của chúng đều xuất phát từ C và C ++ và cú pháp cho các công cụ đơn giản như forvòng lặp và ifcâu lệnh về cơ bản là giống nhau - và như @DipanMehta lưu ý , cả hai đều là rác được thu thập . Và tất nhiên cả hai đều cực kỳ nổi tiếng và có cộng đồng sôi động.

Nhưng đó là nơi tương tự dừng lại. Perl là đa mô hình, hỗ trợ một loạt các mô hình lập trình:

Perl không khuyến khích một mô hình duy nhất, về cơ bản chúng là bằng nhau và bạn có thể tự do lựa chọn bất cứ điều gì bạn nghĩ phù hợp nhất với bất cứ điều gì bạn đang xây dựng, mà tất nhiên không giới hạn bạn trong một mô hình duy nhất, bạn có thể kết hợp và kết hợp. Mặt khác, Java chủ yếu là một ngôn ngữ hướng đối tượng dựa trên lớp. Có hỗ trợ cho lập trình chung, nhưng là người mới bắt đầu, bạn nên nghĩ về Java như một ngôn ngữ hướng đối tượng dựa trên lớp.

Vì vậy, Perl cho phép nhiều hơn một cách để cấu trúc mã 1 của bạn , trong khi Java chỉ là một cách. Đó không phải là một điều xấu (hoặc một điều tốt), nó chỉ khác nhau. Nếu bạn chưa viết bất kỳ mã Perl nào hướng đối tượng, ban đầu Java có vẻ hơi xa lạ. Đừng nản lòng, định hướng đối tượng là thứ mà cuối cùng bạn sẽ phải học, nếu bạn đang xem xét một nghề nghiệp trong phát triển phần mềm và học Java là một cách tốt để học các khái niệm cơ bản về định hướng đối tượng - không phải là một cách hoàn hảo, nhưng chắc chắn là một cách tốt

Và như bạn đã biết, Perl được giải thích, trong khi Java thì ... à ... hoàn toàn là một con thú khác . Trong Java, bạn viết mã của mình như trong Perl và sau đó bạn biên dịch nó . Kết quả không phải là một tệp thực thi, mà là mã byte Java . Định dạng trung gian này được thực thi (cuối cùng!) Trong Máy ảo Java , có phần giống với trình thông dịch Perl. Phải cài đặt JVM trước để chương trình Java chạy, mô phỏng theo cách bạn cần cài đặt trình thông dịch Perl để thực thi tập lệnh Perl 2 .

Đến từ nền Perl, điều quan trọng nhất cần nhớ là quá trình biên dịch sang bước mã byte: Mỗi khi bạn thay đổi tệp nguồn Java, bạn cần biên dịch lại nó. Thoạt nghe có vẻ điên rồ, nhưng quá trình biên dịch có một hậu quả rất hay: Mã của bạn được kiểm tra nhiều lỗi ở giai đoạn này và trình biên dịch từ chối kết thúc quá trình nếu có, và đôi khi sẽ giúp bạn xác định lỗi với tin nhắn hữu ích (Luôn có tin nhắn, nhưng chỉ đôi khi chúng hữu ích).

Điều này đưa chúng ta đến sự khác biệt lớn cuối cùng:

Perl là động 3 :

Ngôn ngữ lập trình động là thuật ngữ được sử dụng rộng rãi trong khoa học máy tính để mô tả một lớp ngôn ngữ lập trình cấp cao thực thi trong thời gian chạy nhiều hành vi phổ biến mà các ngôn ngữ khác có thể thực hiện trong quá trình biên dịch, nếu có. Những hành vi này có thể bao gồm mở rộng chương trình, bằng cách thêm mã mới, bằng cách mở rộng các đối tượng và định nghĩa hoặc bằng cách sửa đổi hệ thống loại, tất cả trong khi thực hiện chương trình.

tự động gõ 4 :

Một ngôn ngữ lập trình được cho là được gõ động khi phần lớn việc kiểm tra kiểu của nó được thực hiện trong thời gian chạy trái ngược với thời gian biên dịch.

và Java được gõ tĩnh :

Một ngôn ngữ lập trình được cho là sử dụng kiểu gõ tĩnh khi kiểm tra kiểu được thực hiện trong thời gian biên dịch trái ngược với thời gian chạy.

Điều đó, để đặt nó đơn giản nhất có thể, có nghĩa là trong Java, bạn phải khai báo loại biến và phương thức của bạn trước khi sử dụng chúng. Có những sự khác biệt khác, nhưng tôi sẽ không muốn làm hỏng niềm vui khi tự mình khám phá chúng :)

Và cuối cùng, có một điểm khác biệt rất quan trọng: Java là ngôn ngữ ngọt ngào của học viện 5 thế giới doanh nghiệp, trong khi bạn sẽ hiếm khi gặp Perl trong một môi trường học thuật nữa (nơi lần đầu tiên tôi gặp cô ấy), và quan điểm nghề nghiệp của nó đang bị thu hẹp (vẫn còn khá nhiều công việc, nhưng không nơi nào có nhiều như Java, ngôn ngữ .Net hoặc PHP). Tôi sẽ không bình luận về những lý do, tôi chỉ nêu sự thật (buồn). Vì bạn vẫn còn rất trẻ, bằng cách học Java, bạn sẽ chuẩn bị hơn một chút cho bằng cấp Khoa học Máy tính, nếu bạn chọn đi theo con đường đó.

Tất nhiên, đừng từ bỏ Perl, nhưng hãy khám phá Java. Thực tế là chúng khác nhau nhiều hơn tương tự cũng có nghĩa là bạn sẽ học được những cách tiếp cận và tâm lý lập trình khá khác nhau, đó là một con đường khó khăn nhưng cuối cùng sẽ giúp bạn trở thành một lập trình viên giỏi hơn.

1 "Tim Toady"

2 Cộng đồng Perl đang tích cực khám phá khả năng sở hữu của máy ảo Perl, thông qua Parrot .

3 Động không phải lúc nào cũng có nghĩa là gõ động.

4 Perl được gõ động cho các kiểu do người dùng xác định, được gõ tĩnh để phân biệt các mảng, băm, vô hướng và chương trình con, và được gõ mạnh use strict, vì vậy về cơ bản nó là ngôn ngữ hệ thống biến đổi, nhưng để giữ ý thức về sự tỉnh táo, hãy gọi nó là động đánh máy

5 Đến mức lạm dụng, như Joel Spolsky viết trong The Perils of JavaSchools .


6
So với Perl, Java không phải là ngôn ngữ cấp cao. Phải mất nhiều mã Java hơn để viết một cái gì đó so với mã Perl.
tchrist

1
@tchrist Số lượng mã có liên quan đến việc một ngôn ngữ ở cấp độ cao, hoặc cấp độ cao hơn / thấp hơn so với ngôn ngữ khác?
yannis

1
@YannisRizos Điều đó khá dễ trả lời. Nếu nó cần nhiều mã hơn, thì bạn không xử lý một lớp trừu tượng đủ cao. Một ví dụ rõ ràng là với việc xử lý chuỗi tinh ranh của Java. Nó không hỗ trợ khái niệm cấp cao về các điểm mã Unicode trừu tượng ngoại trừ trong công cụ regex trong Java 7. Điều đó tạo ra rất nhiều malarkey vì mức độ thấp của ngôn ngữ Java so với Perl.
tchrist

@tchrist Tính chủ quan của thuật ngữ này không cho phép nhiều sự so sánh lành mạnh, các dòng quá mờ và cả hai ngôn ngữ đều có một loạt các tính năng cực kỳ rộng, một số trong đó có mức độ rất cao và một số ít. Vì vậy, tôi sẽ tiếp tục nghĩ rằng họ ở cùng cấp độ và sẽ không lo lắng nhiều về điều đó. Tôi đã có một cuộc trò chuyện tương tự ở đây , điều này đã thôi thúc tôi không mất thời gian so sánh các ngôn ngữ;)
yannis

@YannisRizos Bạn không thể tìm thấy một khái niệm highlevel trong Java mà Perl thiếu, nhưng bạn có thể tìm thấy nhiều khái niệm highlevel trong Perl mà Java thiếu. Do đó, Perl là cấp độ cao hơn. Perl có con trỏ hàm; Java thì không. Perl có quá tải toán tử; Java thì không. Perl có các hàm hủy xác định; Java thì không. Perl có thể quá tải các chức năng theo kiểu trả về; Java không thể. Tôi có thể đi trên con đường này trong một thời gian rất dài. Tất nhiên, bạn sẽ tiếp tục 'cảm thấy' tuy nhiên hầu hết làm hài lòng bạn, và vì bất kỳ lý do gì, nhưng đó không phải là do phân tích chủ quan.
tchrist

2

Vâng, cả hai đều sử dụng cú pháp giống như C - dấu chấm phẩy, dấu ngoặc nhọn và tương tự. Cá nhân, khi tôi cố gắng thực hiện chuyển đổi từ Perl sang Java một số năm trước - điều lớn nhất khiến tôi gặp khó khăn là lập trình hướng đối tượng. Tôi đã phát triển một số đối tượng ở Perl, nhưng tôi đau đầu khi cố tưởng tượng cuộc sống ở Vương quốc Danh từ.


@downvote, tại sao? (Tôi không quá thích câu trả lời, chỉ tò mò về những gì bạn thấy có vấn đề.)
Kyle Hodgson

1

Đưa ra một câu trả lời thay thế vì câu trả lời hiện được chọn dường như đang tập trung vào sự khác biệt giữa hai câu hỏi (thực sự không có nhiều điểm tương đồng giữa Perl và Java).

Điểm tương đồng

  • Chúng đều giống chữ C (chúng có các vòng và niềng răng và dấu chấm phẩy)
  • Họ là chủ yếu bắt buộc
  • Không sản xuất nhị phân biên dịch
  • Cả hai đều rất trưởng thành.
  • Cả hai đều được thử nghiệm chiến đấu trong doanh nghiệp (Perl more as ops keo và Java hơn là các ứng dụng / dịch vụ)
  • Cả hai đều phổ biến
  • Cả hai đều hỗ trợ hướng đối tượng
  • Cả hai đều có sẵn một loạt các khung
  • Cả hai đều có sách xuất bản về họ
  • Cả hai đều ở cấp độ cao hơn C / lắp ráp
  • Cả hai đều "chậm" (đối với các kịch bản cụ thể, chậm khác nhau trong đó không phải là C / lắp ráp)
  • Cả hai đều tự động quản lý bộ nhớ ("bộ sưu tập rác")
  • Không phải là hip / mát như mùa hè 2012
  • Cả hai đều cố thủ trong cộng đồng nguồn mở
  • Cả hai đều có sẵn cho nhiều nền tảng

Nếu mã Perl của bạn rất nghiêm ngặt và trực giao (được kiểm tra tốt, được ghi chép tốt, sử dụng Moose hoặc hướng đối tượng nghiêm ngặt), thì các khái niệm đó sẽ mang rất tốt vào Java, vì Java cực kỳ trực giao và không biểu cảm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.