Які схожість між Perl та Java? [зачинено]


14

У мене є розум, що я вивчаю Java як свою другу мову (я розробник Perl). Але тільки прочитавши невелику кількість навчальних посібників в Інтернеті, я дійсно не можу знайти подібності між ними. Що я буду легко розуміти під час вивчення Java?


Почніть попереду, вирішивши "Я люблю цю мову!". Кожного разу, коли ви стикаєтеся з чимось складним, просто пам’ятайте про своє рішення і заощаджуйте багато зубів і зубів.

1
Рекомендоване читання: Gorilla vs. Shark

Відповіді:


32

Perl - це багаторівнева парадигма, інтерпретована, динамічна мова програмування високого рівня. Java - це універсальна, загальноприйнята, переважно однопарадигма, статично набрана мова програмування.

Отже, обидва є на високому рівні :

Мова програмування високого рівня - це мова програмування з сильною абстракцією від деталей комп'ютера.

і загального призначення :

У комп’ютерному програмному забезпеченні загальна мова програмування (GPL) - це мова програмування, призначена для використання для написання програмного забезпечення в широкому спектрі областей додатків.

По суті це означає, що все, що ви можете зробити з Perl, ви також можете зробити з Java. І як згадує @KyleHodgson , обидва їх синтаксису походять від C і C ++, а синтаксис для простих речей, таких як forпетлі та ifзаяви, по суті, однаковий - і як зазначає @DipanMehta , обидва збирають сміття . І звичайно обидва надзвичайно популярні та мають яскраві спільноти.

Але на цьому схожість зупиняється. Perl - це багатопарадигма, яка підтримує широкий спектр парадигм програмування:

Perl не заохочує однієї єдиної парадигми, вони по суті рівні, і ви можете вибирати те, що ви вважаєте, що найкраще підходить для того, що ви будуєте, але, звичайно, не обмежуючи вас однією парадигмою, ви можете змішувати та співставляти. З іншого боку, Java - це об'єктно-орієнтована мова, орієнтована на клас. Існує підтримка загального програмування, але як початківець ви повинні думати про Яву як строго об'єктно-орієнтовану мову, орієнтовану на клас.

Тож Perl дозволяє декілька способів структурувати ваш код 1 , тоді як Java - лише один. Це не погана річ (або гарна річ), це просто інше. Якщо ви не написали жодного об'єктно-орієнтованого коду Perl, Java спочатку може здатися трохи чужим. Не віддавайте духу, орієнтація на об'єкт - це те, що з часом доведеться навчитися, якщо ви думаєте про кар'єру в розробці програмного забезпечення, а вивчення Java - це хороший спосіб вивчення основних понять орієнтації на об'єкт - не ідеальний спосіб, але напевно хороший спосіб.

І як ви знаєте, інтерпретується Perl, тоді як Java - це ... ну зовсім інший звір . На Java ви пишете свій код так, як і в Perl, а потім компілюєте його . Результат - не виконуваний, а байт-код Java . Цей формат посередництва виконується (нарешті!) У віртуальній машині Java , яка дещо аналогічна інтерпретатору Perl. Для запуску програми Java необхідно заздалегідь встановити JVM, аналогічно тому, як потрібно встановити інтерпретатор Perl, щоб виконати сценарій Perl 2 .

Починаючи з фону Perl, найважливіше, що слід пам’ятати, - це компіляція до кроку байтового коду: Кожен раз, коли ви вносите зміни до вихідного файлу Java, вам потрібно перекомпілювати його. Спочатку це може здатися божевільним, але компіляція має дуже приємний наслідок: на цьому етапі ваш код перевіряється на наявність різноманітних помилок, і компілятор відмовляється закінчити процес, якщо такі є, а іноді допоможе визначити помилки корисні повідомлення (Повідомлення завжди є, але лише іноді вони корисні).

Що призводить нас до останньої головної різниці:

Perl є динамічним 3 :

Мова динамічного програмування - це термін, що широко використовується в інформатиці для опису класу мов програмування високого рівня, які виконують під час виконання багато загальних поведінок, які інші мови можуть виконувати під час компіляції, якщо вони взагалі є. Ці поведінки можуть включати розширення програми, додаючи новий код, розширюючи об'єкти та визначення, або змінюючи систему типів, все під час виконання програми.

і динамічно набрано 4 :

Як кажуть, мова програмування динамічно набирається, коли більшість перевірок типу виконується під час виконання, на відміну від часу компіляції.

і Java статично набрана :

Кажуть, що мова програмування використовує статичну типізацію, коли перевірка типу виконується під час компіляції, на відміну від часу виконання.

Що, простіше кажучи, означає, що в Java вам потрібно оголосити тип своїх змінних та методи перед їх використанням. Є й інші відмінності, але я не хотів би зіпсувати задоволення від їх відкриття самостійно :)

І, нарешті, є одна дуже важлива відмінність: Java - це мила мова академії 5 та корпоративного світу, тоді як ви рідко зустрінетесь з Perl в академічній обстановці (де я вперше зустрівся з нею), і перспективи його кар’єри скорочуються (ще досить багато завдань, але ніде не так багато, як Java, .Net languages ​​або PHP). Я не буду коментувати причини, я лише констатую (сумні) факти. Оскільки ви ще дуже молодий, вивчаючи Java, ви трохи підготуєтесь до ступеня інформатики, якщо вирішите йти цим шляхом.

Звичайно, не здавайся на Perl, але досліджуй Java. Те, що вони відрізняються від подібних, також означає, що ви дізнаєтесь зовсім інші підходи та програмні менталітети, це нелегкий шлях, але такий, що в кінцевому підсумку зробить вас кращим програмістом.

1 "Тім Тоді"

2 Спільнота Perl активно вивчає можливість віртуальної машини Perl через Parrot .

3 Динамічний не завжди означає динамічно набраний.

4 Perl динамічно набирається для визначених користувачем типів, статично набирається відносно розрізнення масивів, хешей, скалярів та підпрограм, і сильно набирається через use strict, так що по суті це системна мова змінного типу, але щоб зберегти певне почуття розумності, давайте назвемо це динамічно набрав.

5 До міри зловживань, як пише Джоел Спольський у «Загрози JavaSchools» .


6
У порівнянні з Perl, Java не є мовою високого рівня. Для написання коду Java потрібно набагато більше, ніж код Perl.
tchrist

1
@tchrist Яке значення має кількість коду щодо того, чи є мова високого рівня чи вищого / нижчого рівня, ніж інша мова?
янніс

1
@YannisRizos На це досить легко відповісти. Якщо потрібно більше коду, ви не маєте справу з досить високим рівнем абстракції. Одним з яскравих прикладів є химерна обробка рядків Java. Це не підтримує концепцію високих рівнів абстрактних точок коду Unicode, за винятком механізму регулярних виразів на Java 7. Це значною мірою допомагає malarkey через те, наскільки низькорівнева мова Java порівнюється з Perl.
tchrist

@tchrist Суб'єктивність цього терміна не дає багато місця для розумного порівняння, рядки занадто розмиті, і обидві мови мають надзвичайно широкий спектр особливостей, деякі з яких дуже високі, а деякі низькі. Тож я продовжуватиму вважати їх на тому самому рівні і не буду дуже хвилюватися з цього приводу. У мене був подібний розмова тут , який надихнув мене не втрачати час на порівняння мов;)
Янніс

@YannisRizos Ви не можете знайти концепцію високого рівня в Java, якої не вистачає Perl, але ви можете знайти багато концепцій високого рівня в Perl, яких не вистачає Java. Таким чином, Perl є вищим рівнем. Perl має покажчики функцій; Java не робить. Perl має перевантаження оператора; Java не робить. Perl має детерміновані деструктори; Java не робить. Perl може перевантажувати функції за типом повернення; Java не може. Я можу йти цим шляхом дуже довго. Ви, звичайно, будете продовжувати «відчувати», що найбільше радує вас і з будь-якої причини, але це не пов’язано з суб’єктивним аналізом.
tchrist

2

Що ж, вони обидва використовують синтаксис типу C - крапкою з комою, фігурними дужками тощо. Особисто, коли я кілька років тому намагався перейти з Perl на Java - найбільше, що мене спонукало, - це об’єктно-орієнтоване програмування. Я розробив деякі предмети в Перлі, але мені боліло голову, намагаючись уявити життя в Королівстві іменників.


@downvote, чому? (Я не так закоханий у відповідь, просто цікаво, що ви вважаєте таким проблематичним.)
Кайл Ходжсон

1

Отримавши ногу на альтернативну відповідь, оскільки обраний на даний момент, здається, зосереджує увагу на відмінностях між ними (справді між Perl та Java не дуже багато подібності).

Подібність

  • Вони обидва подібні до С (у них є петлі, дужки та напівколонки)
  • Вони принципово необхідні
  • Не виробляйте складених двійкових файлів
  • Вони обоє дуже зрілі
  • Вони обидва випробувані на бою на підприємстві (Perl більше як ops клей і Java більше як додатки / послуги)
  • Вони обидва популярні
  • Вони обидва підтримують об'єктну орієнтацію
  • Вони мають доступний широкий спектр рамок
  • Вони обидва опублікували книги про них
  • Вони обидва вищого рівня, ніж C / збірка
  • Вони обидва "повільні" (для різних, конкретних сценаріїв повільності, що не є C / збіркою)
  • Вони обидва керують пам'яттю автоматично ("збирання сміття")
  • Ні літо 2012, ні хіп / класно
  • Вони обидва закріпилися у спільноті з відкритим кодом
  • Вони обидва доступні для багатьох платформ

Якщо ваш код Perl дуже жорсткий і ортогональний (добре перевірений, добре задокументований, використовує Moose або сувору орієнтацію на об'єкти), то ці поняття будуть дуже добре переноситись на Java, оскільки Java надзвичайно ортогональна і не настільки виразна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.