it-swarm.asia

Neden Scala = Java)

Tamamen Scala bir dil olarak ... ve hala herhangi bir şirketin neden Java Scala'ya geçiş yapması gerektiğiyle mücadele ediyorum.) Scala sadece JVM üstüne sözdizimi şekeri veya Scala over Java gerçek dünya uygulamalarını geliştirecek?) Temel gelişmeler var mı?

16
Dakotah North

Feragatname: Ben bir Scala guru değilim).

Scala son derece iyi iki şey yapar ki bu Java (şu anda) yapmaz.

İşlevsel sorunları çözme

  • En temel düzeyde, Scala koleksiyon desteği ile tam teşekküllü kapaklar var. Bu artık (örneğin bir DZone direğini utanmadan yırtık) kazan plaka kodu yazmak zorunda kalmayacağınız anlamına gelir

    public List<Item> bought(User user)
    {
        List<Item> result = new ArrayList();
        for (Item item : currentItems)
        {
            if (user.bought(item))
            {
                result.add(item);
            }
        }
        return result;
    }
    

Bunun yerine şöyle bir şey yazın:

def bought(user: User) = items.filter(user bought _)
  • Daha işlevsel bir aşk var, ama şu anda hala işlevsel programlamayı emdiğim için bu konuda konuşmak için nitelikli değilim :)

Eşzamanlılığı daha güvenli bir şekilde çözün

  • Scala, Java'nın değişken verisinden + iş parçacığı modelindeki kilitlerden doğal olarak daha güvenli olan bir aktör modeli (+ başka bir iyilik) var (kütüphaneler ne kadar iyi olursa olsun, Java dil tarafından hala engelleniyor).

Dürüst olmak gerekirse Scala Java üzerinde baş ve omuzlar ayakta kılan çok fazla düşünemiyorum. Bir sürü küçük kazanç ve iyileştirme evet, ama aynı zamanda kendinizi asmak için çok daha fazla halat. YMMV

Biraz HTH

19
Martijn Verburg

Bu "sadece sözdizimsel şeker" tanımınıza bağlıdır. Örneğin, Java makine kodu üzerindeki sözdizimsel şekerden daha fazlası nedir?

Herhangi bir dil makine kodundan daha az yapabilir, ancak hiçbir dil daha fazlasını yapamaz.

Üst düzey dillerin tabloya getirdiği şey, kodun daha kolay okunmasını ve anlaşılmasını, daha kolay oluşturulmasını ve daha fazla hata yakalanmasını sağlamaktır. Ve benim düşünceme göre, bunlardan ilki en çok fark yaratan şeydir - tam olarak "sadece sözdizimsel şeker".

Ancak sadece diğer ikisi göz önüne alındığında, hala Scala Java'ya göre avantajları vardır).

Konuyu işaretlememek, ancak kapanışlara sahip olmak, kodun kapanıştan daha karmaşık olmasını sağlar. Ve Java 7 bir şey ekleyecek olsa da çağrılan kapanışlar, bunlar olmayacak - sadece anonim işlevler olacaklar.

Daha fazla hata yakalamaya gelince, Scala'nın üstün varyans kullanımı, bunun yeterli olduğu kanıtıdır. Ayrıca, değişmezliğe yaptığı vurgu da her türlü hatayı önler - bu Java değişmez yapamaz, ancak bunu yapmak için kütüphaneyle birlikte gelmez).

9
Daniel C. Sobral

Üzerine Martijn'in cevabı Bunu eklemek istiyorum Scala daha fazla etkileyici daha Java ve faydaları (1) daha üretken yapar (2) aynı sorunu çözmek için daha az kod yazmak, kodunuzdaki hataları azaltabileceğiniz anlamına gelir (IMHO hatasız kod bir efsanedir).

2
sakisk

Scala yaklaşık 3 aydır kullanıyorum ve hala Java'da yapamayacağım bir şey bulamıyorum. Bana göre Scala aynı şeyden bahsediyor gibi görünüyor basmakalıp. Eğer aradığınız şey azalıyorsa basmakalıp o zaman Scala sizin için ama IMHO, örneğin yukarıda verilen filtre örneği Apache koleksiyonları kullanılarak da çözülebilir

<T> CollectionUtils.filter(Predicate<T>...)

veya bunun gibi kapaklar kullanın

<T> CollectionUtils.forAllDo(..., Closure<T>)

Ama elbette daha ayrıntılı. Yine de tür çıkarım seviyorum. Scala) öğrendikçe, bunun muhtemelen başlığın altında ne olduğunu fark edeceksiniz.

0
user105463