Apa persamaan antara Perl dan Java? [Tutup]

14

Saya memiliki pemikiran bahwa saya sedang belajar Java sebagai bahasa kedua saya (saya seorang pengembang Perl). Tetapi hanya dengan membaca sedikit tutorial online, saya benar-benar tidak dapat menemukan kesamaan di antara keduanya. Apa yang akan saya pahami dengan mudah saat mempelajari Java?

Dinamis
sumber
Mulailah dari awal dengan memutuskan "SAYA SUKA BAHASA INI!". Setiap kali Anda mengalami sesuatu yang sulit, ingatlah keputusan Anda dan simpan sendiri banyak gigi yang bergerinda dan mencabut rambut.
1
Bacaan yang disarankan: Gorilla vs. Shark

Jawaban:

32

Perl adalah bahasa pemrograman dinamis tingkat tinggi, bertujuan umum, multi-paradigma, ditafsirkan. Java adalah bahasa pemrograman tingkat tinggi, bertujuan umum, sebagian besar paradigma tunggal, tipe statis.

Jadi, keduanya tingkat tinggi :

Bahasa pemrograman tingkat tinggi adalah bahasa pemrograman dengan abstraksi yang kuat dari perincian komputer.

dan tujuan umum :

Dalam perangkat lunak komputer, bahasa pemrograman tujuan umum (GPL) adalah bahasa pemrograman yang dirancang untuk digunakan untuk menulis perangkat lunak di berbagai domain aplikasi.

Pada dasarnya ini berarti bahwa semua yang dapat Anda lakukan dengan Perl, Anda juga dapat melakukannya dengan Java. Dan seperti @KyleHodgson menyebutkan , kedua sintaks mereka berasal dari C dan C ++ dan sintaks untuk hal-hal sederhana seperti forloop dan ifpernyataan pada dasarnya sama - dan seperti catatan @DipanMehta , keduanya dikumpulkan dari sampah . Dan tentu saja keduanya sangat populer dan memiliki komunitas yang hidup.

Tapi di situlah kesamaan berhenti. Perl adalah multi-paradigma, mendukung berbagai paradigma pemrograman:

Perl tidak mendorong satu paradigma tunggal, mereka pada dasarnya sama dan Anda bebas memilih mana yang menurut Anda paling sesuai dengan apa pun yang Anda bangun, tanpa tentu saja membatasi Anda pada satu paradigma tunggal, Anda dapat mencampur dan mencocokkan. Di sisi lain, Java sebagian besar bahasa berorientasi objek berbasis kelas. Ada dukungan untuk pemrograman generik, tetapi sebagai pemula, Anda harus menganggap Java sebagai bahasa berorientasi objek berbasis kelas.

Jadi Perl memungkinkan lebih dari satu cara untuk menyusun kode 1 Anda , sedangkan Java hanya satu. Itu bukan hal yang buruk (atau hal yang baik), hanya saja berbeda. Jika Anda belum menulis kode Perl yang berorientasi objek, Java mungkin tampak agak asing pada awalnya. Jangan berkecil hati, orientasi objek adalah sesuatu yang pada akhirnya harus Anda pelajari, jika Anda mempertimbangkan karier dalam pengembangan perangkat lunak, dan belajar Java adalah cara yang baik untuk mempelajari konsep dasar orientasi objek - bukan cara yang sempurna, tetapi pasti cara yang bagus.

Dan seperti yang Anda tahu, Perl ditafsirkan, sedangkan Java adalah ... yah ... binatang yang sama sekali berbeda . Di Jawa, Anda menulis kode seperti di Perl, lalu mengompilasinya . Hasilnya bukan executable, tetapi bytecode Java . Format perantara ini dijalankan (akhirnya!) Di Java Virtual Machine , yang agak analog dengan penerjemah Perl. JVM harus diinstal terlebih dahulu agar program Java dapat berjalan, secara bersamaan tentang bagaimana Anda perlu menginstal penerjemah Perl untuk menjalankan skrip Perl 2 .

Berasal dari latar belakang Perl, hal yang paling penting untuk diingat adalah kompilasi ke langkah bytecode: Setiap kali Anda membuat perubahan ke file sumber Java Anda perlu mengkompilasi ulang. Mungkin terdengar gila pada awalnya, tetapi kompilasi memiliki konsekuensi yang sangat bagus: Kode Anda diperiksa untuk berbagai kesalahan pada tahap ini, dan kompiler menolak untuk menyelesaikan proses jika ada, dan kadang-kadang akan membantu Anda menentukan kesalahan dengan pesan yang membantu (Selalu ada pesan, tetapi hanya kadang-kadang mereka membantu).

Yang membawa kita ke perbedaan besar terakhir:

Perl dinamis 3 :

Bahasa pemrograman dinamis adalah istilah yang digunakan secara luas dalam ilmu komputer untuk menggambarkan kelas bahasa pemrograman tingkat tinggi yang mengeksekusi pada runtime banyak perilaku umum yang mungkin dilakukan oleh bahasa lain selama kompilasi, jika sama sekali. Perilaku ini dapat mencakup ekstensi program, dengan menambahkan kode baru, dengan memperluas objek dan definisi, atau dengan memodifikasi sistem tipe, semua selama eksekusi program.

dan secara dinamis mengetik 4 :

Bahasa pemrograman dikatakan diketik secara dinamis ketika mayoritas pemeriksaan tipenya dilakukan pada saat run-time sebagai lawan pada saat kompilasi.

dan Java diketik secara statis :

Bahasa pemrograman dikatakan menggunakan pengetikan statis ketika pengecekan tipe dilakukan selama waktu kompilasi dan bukan waktu berjalan.

Yang, untuk membuatnya sesederhana mungkin, berarti di Jawa Anda harus mendeklarasikan jenis variabel dan metode Anda sebelum menggunakannya. Ada perbedaan lain, tetapi saya tidak ingin merusak kesenangan menemukan mereka sendiri :)

Dan, akhirnya, ada satu perbedaan yang sangat penting: Jawa adalah bahasa yang manis bagi akademisi 5 dan dunia usaha, sementara Anda jarang bertemu Perl dalam lingkungan akademis lagi (tempat saya pertama kali bertemu dengannya), dan perspektif kariernya menyusut. (masih beberapa pekerjaan, tapi tidak ada yang dekat dengan Java, .Net bahasa atau PHP). Saya tidak akan mengomentari alasannya, saya hanya menyatakan fakta (sedih). Karena Anda masih sangat muda, dengan mempelajari Java Anda akan sedikit lebih siap untuk gelar Ilmu Komputer, jika Anda memilih untuk mengikuti jalan itu.

Jangan menyerah pada Perl, tentu saja, tetapi menjelajahi Jawa. Fakta bahwa mereka lebih berbeda daripada yang serupa juga berarti bahwa Anda akan mempelajari pendekatan dan mentalitas pemrograman yang sangat berbeda, itu adalah jalan yang sulit tetapi yang pada akhirnya akan menjadikan Anda seorang programmer yang lebih baik.

1 "Tim Toady"

2 Komunitas Perl secara aktif menjelajahi kemungkinan mesin virtual Perl, melalui Parrot .

3 Dinamis tidak selalu berarti diketik secara dinamis.

4 Perl secara dinamis diketik untuk tipe yang ditentukan pengguna, diketik secara statis berkenaan dengan array yang membedakan, hash, skalar, dan subrutin, dan sangat diketik melalui use strict, jadi pada dasarnya ini adalah bahasa sistem tipe variabel, tetapi untuk menjaga kewarasan, sebut saja secara dinamis sebut saja secara dinamis diketik.

5 Sampai pada titik pelecehan, seperti yang ditulis Joel Spolsky di The Perils of JavaSchools .

yannis
sumber
6
Dibandingkan dengan Perl, Java bukan bahasa tingkat tinggi. Dibutuhkan lebih banyak kode Java untuk menulis sesuatu daripada kode Perl.
tchrist
1
@tchrist Apa hubungan sejumlah kode dengan apakah suatu bahasa tingkat tinggi, atau lebih tinggi / lebih rendah dari bahasa lain?
yannis
1
@YannisRizos Cukup mudah dijawab. Jika membutuhkan lebih banyak kode, maka Anda tidak berurusan dengan lapisan abstraksi yang cukup tinggi. Salah satu contoh mencolok adalah dengan penanganan string cerdik Jawa. Itu deosn't mendukung konsep tingkat tinggi poin kode Unicode abstrak kecuali di mesin regex di Jawa 7. Itu membuat banyak malarkey karena seberapa rendah tingkat bahasa Jawa dibandingkan dengan Perl.
tchrist
@tchrist Subjektivitas dari istilah ini tidak memungkinkan banyak ruang untuk perbandingan yang waras, garis-garisnya terlalu buram, dan kedua bahasa memiliki beragam fitur yang sangat luas, beberapa di antaranya sangat tinggi dan beberapa rendah. Jadi, saya akan terus berpikir mereka berada di level yang sama dan tidak akan terlalu khawatir tentang hal itu. Saya memiliki percakapan serupa di sini , yang mengilhami saya untuk tidak kehilangan waktu membandingkan bahasa;)
yannis
@YannisRizos Anda tidak dapat menemukan konsep tingkat tinggi di Java yang tidak dimiliki Perl, tetapi Anda dapat menemukan banyak konsep tingkat tinggi di Perl yang tidak dimiliki Java. Dengan demikian, Perl adalah level yang lebih tinggi. Perl memiliki pointer fungsi; Java tidak. Perl memiliki kelebihan operator; Java tidak. Perl memiliki destruktor deterministik; Java tidak. Perl dapat membebani fungsi berdasarkan tipe kembali; Java tidak bisa. Saya bisa pergi dengan cara ini untuk waktu yang sangat lama. Anda tentu saja akan terus 'merasakan' apa pun yang paling menyenangkan Anda, dan untuk alasan apa pun, tetapi itu bukan karena analisis subjektif.
tchrist
2

Yah, mereka berdua menggunakan sintaks seperti C - titik koma, kurung kurawal dan sejenisnya. Secara pribadi, ketika saya mencoba untuk beralih dari Perl ke Jawa beberapa tahun yang lalu - hal terbesar yang membuat saya tersandung adalah pemrograman berorientasi objek. Saya telah mengembangkan beberapa objek di Perl, tetapi itu melukai kepala saya untuk mencoba membayangkan kehidupan di Kerajaan Kata benda.

Kyle Hodgson
sumber
@ penurunan suara, mengapa? (Saya tidak begitu jatuh cinta dengan jawabannya, hanya ingin tahu apa yang menurut Anda sangat bermasalah.)
Kyle Hodgson
1

Mengambil jawaban alternatif karena jawaban yang saat ini dipilih tampaknya berfokus pada perbedaan antara keduanya (benar-benar tidak ada banyak kesamaan antara Perl dan Jawa).

Kesamaan

  • Keduanya mirip-C (mereka memiliki loop dan kawat gigi dan semi-titik dua)
  • Mereka pada prinsipnya sangat penting
  • Tidak menghasilkan binari yang dikompilasi
  • Keduanya sangat dewasa
  • Keduanya diuji dalam pertempuran di perusahaan (Perl lebih sebagai lem ops dan Java lebih sebagai aplikasi / layanan)
  • Keduanya populer
  • Keduanya mendukung orientasi objek
  • Keduanya memiliki beragam kerangka kerja yang tersedia
  • Mereka berdua memiliki buku yang diterbitkan tentang mereka
  • Keduanya level lebih tinggi dari C / perakitan
  • Keduanya "lambat" (untuk berbagai skenario lambat khusus yang tidak ada C / assembly)
  • Mereka berdua mengelola memori secara otomatis ("pengumpulan sampah")
  • Baik pinggul / keren pada musim panas 2012
  • Keduanya bercokol di komunitas open source
  • Keduanya tersedia untuk banyak platform

Jika kode Perl Anda sangat ketat dan ortogonal (teruji dengan baik, terdokumentasi dengan baik, menggunakan Moose atau orientasi objek yang ketat), maka konsep tersebut akan membawa sangat baik ke Jawa, karena Jawa sangat ortogonal dan tidak ekspresif.

Mark Canlas
sumber