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ı?
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 _)
Eşzamanlılığı daha güvenli bir şekilde çözün
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
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).
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.