Perl ve Java arasındaki benzerlikler nelerdir? [kapalı]


14

Aklımda Java'yı ikinci dilim olarak öğrendiğimi ayarladım (Perl geliştiricisiyim). Ancak, çevrimiçi öğreticilerin bir kısmını okurken, ikisi arasında gerçekten benzerlik bulamıyorum. Java öğrenirken neyi kolay anlayacağım?


"BU DİLİ SEVİYORUM!" Ne zaman zor bir şeyle karşılaşırsanız kararınızı hatırlayın ve kendinizi çok fazla diş taşlama ve saç çekme kurtarın.

1
Önerilen okuma: Gorilla vs. Shark

Yanıtlar:


32

Perl, üst düzey, genel amaçlı, çok paradigmalı, yorumlanmış, dinamik bir programlama dilidir. Java, üst düzey, genel amaçlı, çoğunlukla tek paradigmalı, statik olarak yazılmış bir programlama dilidir.

Yani, her ikisi de üst düzey :

Üst düzey bir programlama dili, bilgisayarın ayrıntılarından güçlü soyutlamaya sahip bir programlama dilidir.

ve genel amaçlı :

Bilgisayar yazılımında genel amaçlı bir programlama dili (GPL), çok çeşitli uygulama alanlarında yazılım yazmak için kullanılmak üzere tasarlanmış bir programlama dilidir.

Esasında bu Perl ile yapabileceğiniz her şeyin Java ile yapabileceğiniz anlamına gelir. Ve @KyleHodgson'un belirttiği gibi , her iki sözdizimi de C ve C ++ 'dan türetilir ve fordöngüler ve ififadeler gibi basit şeyler için sözdizimi esasen aynıdır - ve @DipanMehta notlarında her ikisi de çöp toplanır . Ve elbette her ikisi de son derece popüler ve canlı topluluklara sahip.

Ama benzerlikler burada durmaktadır. Perl çok çeşitli paradigmadır ve çok çeşitli programlama paradigmalarını destekler:

Perl tek bir paradigmayı teşvik etmez, esasen eşittir ve bina ne olursa olsun en uygun olanı hangisi seçerseniz seçin, elbette sizi tek bir paradigma ile sınırlandırmadan, karıştırabilir ve eşleştirebilirsiniz. Öte yandan, Java çoğunlukla sınıfa dayalı bir nesnedir. Genel programlama desteği vardır, ancak yeni başlayan biri olarak Java'yı kesinlikle sınıf tabanlı nesne yönelimli bir dil olarak düşünmelisiniz.

Yani Perl kodunuzu yapısı için birden fazla yol verir 1 , Java oysa sadece bir. Bu kötü bir şey (ya da iyi bir şey) değil, sadece farklı. Nesneye yönelik bir Perl kodu yazmadıysanız, Java ilk başta biraz yabancı görünebilir. Cesaretiniz kırılmasın, nesne yönelimi, yazılım geliştirmede kariyer yapmayı düşünüyorsanız, sonunda öğrenmeniz gereken bir şeydir ve Java'yı öğrenmek, nesne yöneliminin temel kavramlarını öğrenmenin iyi bir yoludur - mükemmel bir yol değil, ama kesinlikle iyi bir yol.

Bildiğiniz gibi, Perl yorumlanırken, Java ... tamamen ... tamamen farklı bir canavardır . Java'da kodunuzu Perl'de yaptığınız gibi yazarsınız ve sonra derlersiniz . Sonuç yürütülebilir bir dosya değil, Java bayt kodu . Bu intermediatery formatında (nihayet!) Yürütüldüğünde Java Virtual Machine olduğunu biraz Perl yorumlayıcısı benzer. Bir Java programının çalışması için, bir Perl betiğini yürütmek için bir Perl yorumlayıcısını nasıl kurmanız gerektiği konusunda önceden bir JVM kurulmalıdır 2 .

Bir Perl arka planından geliyorsa, hatırlanması gereken en önemli şey bytecode adımına derleme: Bir Java kaynak dosyasında her değişiklik yaptığınızda, onu yeniden derlemeniz gerekir. İlk başta çılgınca gelebilir, ancak derlemenin çok güzel bir sonucu vardır: Kodunuz bu aşamada çeşitli hatalar için kontrol edilir ve derleyici varsa işlemi bitirmeyi reddeder ve bazen hataları saptamanıza yardımcı olur. yararlı mesajlar (Her zaman mesaj vardır, ancak sadece bazen yardımcı olurlar).

Bu da bizi son büyük farka getiriyor:

Perl dinamik 3 :

Dinamik programlama dili, bilgisayar bilimlerinde, çalışma zamanında diğer dillerin derleme sırasında gerçekleştirebileceği birçok yaygın davranışı yürüten bir üst düzey programlama dili sınıfını tanımlamak için yaygın olarak kullanılan bir terimdir. Bu davranışlar, programın yürütülmesi sırasında yeni kod ekleyerek, nesneleri ve tanımları genişleterek veya tür sistemini değiştirerek programın genişletilmesini içerebilir.

ve dinamik olarak yazılmıştır 4 :

Bir programlama dilinin, tip kontrolünün büyük çoğunluğunun derleme zamanında aksine çalışma zamanında gerçekleştirildiği zaman dinamik olarak yazıldığı söylenir.

ve Java statik olarak yazılmıştır :

Bir programlama dilinin çalışma zamanı yerine derleme zamanı sırasında tip denetimi yapıldığında statik yazmayı kullandığı söylenir.

Bu, mümkün olduğunca basit bir şekilde ifade etmek gerekirse, Java'da değişkenlerinizi ve yöntemlerinizi kullanmadan önce bildirmeniz gerektiği anlamına gelir. Başka farklılıklar da var, ama onları kendiniz keşfetmenin eğlencesini bozmak istemem :)

Ve son olarak, çok önemli bir fark var: Java, akademik ortamın 5 ve kurumsal dünyanın tatlı dilidir , ancak Perl ile artık akademik bir ortamda nadiren karşılaşacaksınız (onunla ilk tanıştığım yer) ve kariyer perspektifleri küçülüyor (yine de birkaç iş, ancak Java, .Net dilleri veya PHP kadar yakın bir yerde). Sebepleri hakkında yorum yapmayacağım, sadece (üzücü) gerçekleri belirtiyorum. Hala çok genç olduğunuz için, Java öğrenerek bir Bilgisayar Bilimi derecesi için biraz daha hazırlıklı olacaksınız, eğer bu yolu takip etmeyi seçtiyseniz.

Elbette Perl'den vazgeçmeyin, Java'yı keşfedin. Benzerlerinden daha farklı olmaları, oldukça farklı yaklaşımları ve programlama zihniyetlerini öğreneceğiniz anlamına gelir, bu zor bir yol ama sonuçta sizi daha iyi bir programcı yapacak olan bir yoldur.

1 "Tim Toady"

2 Perl topluluğu, Parrot aracılığıyla bir Perl sanal makinesinin olasılığını aktif olarak araştırıyor .

3 Dinamik her zaman dinamik olarak yazılan anlamına gelmez.

4 Perl dinamik olarak kullanıcı tanımlı türler için yazılmıştır, dizileri, karmaları, skalerleri ve alt rutinleri ayırt etmek için statik olarak yazılmıştır ve güçlü bir şekilde yazılmıştır use strict, bu yüzden aslında değişken bir sistem sistemidir, ancak bir akıl sağlığını korumak için dinamik olarak diyelim yazdınız.

5 Joel Spolsky'nin JavaSchools Perils'e yazdığı gibi, kötüye kullanım noktasına .


6
Perl ile karşılaştırıldığında, Java üst düzey bir dil değildir. Bir şey yazmak Perl kodundan çok daha fazla Java kodu gerektirir.
tchrist

1
@tchrist Bir dilin başka bir dilden daha yüksek veya daha yüksek / daha düşük düzeyde olmasıyla ilgili kod miktarı ne anlama gelir?
yannis

1
@YannisRizos Cevaplamak oldukça kolay. Daha fazla kod alırsa, yeterince yüksek bir soyutlama katmanıyla uğraşmazsınız. Göze çarpan bir örnek, Java'nın tehlikeli dize kullanımıdır. Java 7'deki regex motoru dışında soyut Unicode kod noktalarının üst düzey konseptini desteklemez. Bu, Java'nın Perl ile ne kadar düşük bir dil karşılaştırıldığından büyük bir malarkey sağlar.
tchrist

@tchrist Terimin öznelliği, aklı başında bir karşılaştırma için fazla yer bırakmaz, çizgiler çok bulanıktır ve her iki dil de, bazıları çok yüksek ve bazıları düşük olan son derece geniş özelliklere sahiptir. Yani, onları aynı seviyede olarak düşünmeye devam edeceğim ve bunun için endişelenmeyeceğim. Burada benzer bir konuşma yaptım , bu da dilleri karşılaştırmak için hiçbir zaman kaybetmememe ilham verdi;)
yannis

@YannisRizos Perl'de eksik olan Java'da yüksek düzeyli bir kavram bulamazsınız, ancak Perl'de Java'nın eksik olduğu birçok yüksek düzeyli kavram bulabilirsiniz. Böylece, Perl daha yüksek seviyededir. Perl fonksiyon göstergelerine sahiptir; Java bunu yapmaz. Perl'de operatör aşırı yüklenmesi var; Java bunu yapmaz. Perl'in deterministik yıkıcıları vardır; Java bunu yapmaz. Perl, dönüş tipine göre fonksiyonları aşırı yükleyebilir; Java yapamaz. Bu şekilde çok uzun süre devam edebilirim. Elbette sizden en çok memnun olanı, ancak her ne sebeple olursa olsun, 'hissetmeye' devam edeceksiniz, ancak bunun nedeni öznel analiz değildir.
tchrist

2

Her ikisi de C benzeri bir sözdizimi kullanır - noktalı virgül, kıvırcık parantez ve benzeri. Şahsen, birkaç yıl önce Perl'den Java'ya geçmeye çalıştığımda - beni harekete geçiren en büyük şey nesne yönelimli programlama oldu. Perl'de bazı nesneler geliştirmiştim, ama İsimler Krallığı'nda yaşamı hayal etmeye çalışmak başımı incitti.


@downvote, neden? (Cevaba çok aşık değilim, sadece bu kadar sorunlu bulduğunuzu merak ediyorum.)
Kyle Hodgson

1

Şu anda seçili olandan beri alternatif bir cevabı saplamak, ikisi arasındaki farklara odaklanıyor gibi görünüyor (gerçekten Perl ve Java arasında çok fazla benzerlik yok).

benzerlikler

  • İkisi de C benzeri (döngüler, parantezler ve noktalı virgüller var)
  • Esasen zorunludurlar
  • Her ikisi de derlenmiş ikili dosyalar üretmez
  • İkisi de çok olgun
  • İkisi de şirkette savaş testinden geçmiştir (Perl daha çok ops tutkal ve Java daha çok uygulama / hizmet olarak)
  • İkisi de popüler
  • İkisi de nesne yönelimini destekler
  • Her ikisinin de geniş bir çerçeve yelpazesi var
  • İkisinin de onlar hakkında yayınlanmış kitapları var
  • Her ikisi de C / montajdan daha üst düzey
  • İkisi de "yavaş" (her ikisinin de C / derleme olmadığı yavaş, çeşitli özel senaryolar için)
  • Her ikisi de belleği otomatik olarak yönetir ("çöp toplama")
  • 2012 yazından itibaren kalça / serinlik de yok
  • İkisi de açık kaynak topluluğuna yerleşti
  • Her ikisi de birçok platform için kullanılabilir

Perl kodunuz çok titiz ve dik ise (iyi test edilmiş, iyi belgelenmiş, Moose veya katı nesne yönelimi kullanır), bu kavramlar Java'ya çok iyi taşınacaktır, çünkü Java son derece diktir ve etkileyici değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.