2009-12-11 4 views
5

के बाद खुशी से बोली लगाएंगे। मैं एक फॉर्म चाहता हूं कि जावा की क्या नाराज चीजें इतिहास हैं और स्कैला की किस विशेषता को बदल दिया गया है।जावा से चीजों की एक सूची है कि अब हम स्काला

मुझे स्वीकार करना होगा कि मैं स्कैला के लिए नया हूं, इसलिए मैं ज्यादा योगदान नहीं दे सकता। लेकिन मुझे लगता है कि यह सूची मेरे लिए उपयोगी होगी और साथ ही दूसरों को स्कैला

की पूरी तरह से सराहना करने के लिए उपयोगी होगा। हम कीवर्ड "वैल" का उपयोग करते हैं और यह प्रारंभिकरण के बाद मान को अपरिवर्तनीय बनाता है। जावा में, हमें ऑब्जेक्ट के प्रकार और कीवर्ड फ़ाइनल को टाइप करना पड़ा। स्कैला हमें इस दर्द से मुक्त करता है।

स्कैला में सांद्रता समर्थन स्पष्ट रूप से बेहतर है, लेकिन मैं इसकी तलाश नहीं कर रहा हूं। अनदेखा करने के लिए यह बहुत अच्छी सुविधा है। मैं बेहतर विवरण की तलाश में हूं कि भले ही मिनीस्कूल का अच्छा असर होगा।

कुछ क्षेत्र हैं: प्रकार सिस्टम, अपवाद संचालन, regexes, ओह सुविधाओं, वाक्यात्मक चीनी आदि

+10

"जावा में, हमें ऑब्जेक्ट का प्रकार और कीवर्ड फ़ाइनल भी टाइप करना पड़ा। स्कैला हमें इस दर्द से मुक्त करता है। " यदि यह दर्द की आपकी परिभाषा है तो आप बहुत ही आश्रय प्रोग्रामिंग जीवन जी रहे हैं। – David

+0

नहीं। मैं आश्रय जीवन नहीं रहा हूं ... लेकिन हाँ, मेरे बयान का मतलब है कि मेरे पास है बहुत अधिक दर्द सहन किया :) – user855

उत्तर

0

मैं तथ्य यह है कि कार्यों अब कर रहे हैं ऑब्जेक्ट्स, और कहा कि पुरातन डिफ़ॉल्ट रूप से लिपटे रहे हैं। समझदार रूप से अनुमानित प्रकार के लिए कंपाइलर की क्षमता भी अच्छी है।

0

मैं इस प्रश्न की कुछ मान्यताओं से असहमत हूं।

स्कैला JVM पर चलता है, इसलिए समवर्ती समर्थन (वीएम स्तर पर) जावा से बेहतर नहीं हो सकता है। आपको लगता है कि actorsJava threads से बेहतर मॉडल हो सकता है, लेकिन अगर जावा में कलाकारों को लागू नहीं किया जा सका तो मुझे आश्चर्य होगा।

आगे, जावा में Regular Expressions है।

+1

... लेकिन स्कैला है ... –

6
  • अशक्त (अधिकतर) स्काला
  • में चला गया है भाव के लिए
  • covariant और contravariant परिभाषा साइड जेनरिक
  • इन्फ़िक्स ऑपरेटरों/तरीकों (a + b, list map f)
  • मिलान
  • अंतर्निहित पैटर्न रूपांतरण टाइप करें
  • स्थैतिक चला गया है (ऑब्जेक्ट के साथ)
  • शक्तिशाली पैकेज का समर्थन (नेस्ट संकुल)

लेकिन हर सुविधा के रूप में वे अपने प्रभाव यह डिजाइन जब उपयोग करने के लिए का हिस्सा है:

    अभिव्यक्ति बनाम नक्शा/flatMap/फिल्टर के लिए
  • /...
  • पैटर्न बहुरूपता बनाम मिलान
  • इन्फ़िक्स बनाम विधि कॉल वाक्य रचना

जब अंतर्निहित उपयोग करने के लिए रूपांतरण और जेनेरिक टाइप करें।

कुछ भी मुफ्त में नहीं है। स्कैला एक शक्तिशाली उपकरण है ताकि आप स्वयं को चोट पहुंचा सकें।

case class Person(name: String, age: Int) 
के बजाय

:

8

एक बात मुझे पसंद है की तरह कुछ लिखने के लिए सक्षम किया जा रहा है

class Person { 

    private String name; 
    private int age; 

    public Person(String name, int age) { 
    this.name=name; 
    this.age=age; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getAge{ 
     return age; 
    } 

    public String toString() { 
     return String.format("Person(%s, %d)", name, age); 
    } 

    public boolean equals(Object other) { 
     if (other == this) 
      return true; 
     if (other.getClass() != getClass()) 
      return false; 
     Person p = (Person) other; 
     return getName().equals(p.getName()) && getAge().equals(p.getAge()); 
    } 

    public int hashCode() { 
     int h = getName().hashCode(); 
     h = 37 * h + getAge(); //or whatever it is! 
     return h; 
    } 
} 
+2

आप गेटर्स भूल गए हैं! इसे 'केस क्लास' बनाएं और आपको वहां 'बराबर', 'हैशकोड' और 'टूस्ट्रिंग' भी मिलेंगे –

+0

वह सेटर्स को नहीं भूल गया। 'केस क्लास' आपको डिफ़ॉल्ट रूप से 'वैल' देता है। –

+0

लेकिन स्केल के वर्दी एक्सेस सिद्धांत –

4

मैं स्काला के प्रमुख विशेषताओं में से दो लगता है कर रहे हैं:

  • स्टेटिक टाइप अनुमान - यह ठंडा भाषा सुविधा वास्तव में आपको अपना कोड छोटा करने की अनुमति देती है लेकिन जरूरी तेज़ी से।
  • भिन्नता एनोटेशन i.e. nonvariance (स्केल & जावा में डिफ़ॉल्ट), सह-भिन्नता & कॉन्ट्रैक्ट-वेरिएंस - एक अन्य सुविधा जो आपको बहुत अधिक कोड लिखने के बिना आपके आवेदन में संबंधित प्रकारों की अनुमति देती है।

हालांकि, एक बात यह है कि मेरे साथ बहुत अच्छी तरह नहीं बैठता अंतर्निहित रूपांतरण के अस्तित्व है (वे कर रहे हैं के लिए इसी तरह सी ++ के अंतर्निहित रूपांतरण), जो एक त्वरित हैक यानी की तरह लगता है वाहिनी-टेप

के लिए अपने विचार

4

स्कैला में एकाधिक विरासत के लिए एक शक्तिशाली अवधारणा है: traits! यह Eiffel's implementation inheritance के करीब आने का लंबा सफर तय करता है। इसमें Ruby's mixin modules के साथ कुछ समानता भी है।

0

मैं वैकल्पिक रूप से 2.8 में पैरामीटर नामित करने की उम्मीद कर रहा हूं। वे अपरिवर्तनीय वस्तुओं पर स्वयं-दस्तावेज़ कोड को सुविधाजनक बनाएंगे क्योंकि आप कन्स्ट्रक्टर का आह्वान करते समय पैरामीटर नामों का उपयोग कर सकते हैं।

इसके अलावा, 2.8 में कक्षाओं के मामले में कॉपी क्षमताओं को स्केल में पहले से ही अपरिवर्तनीय संग्रह की तरह "संशोधित प्रतिलिपि" वस्तुओं को लागू करना आसान हो जाएगा।

2

स्काला 2.8 यहाँ पर कार्य करना है, इसलिए इस में से कुछ अभी तक पूरी तरह नहीं जारी किया है ...

स्काला विशेष रूप से हटाने के बॉयलरप्लेट के साथ मदद करता है:

  • प्रकार निष्कर्ष
  • लक्षण/mixins
  • वर्दी एक्सेस सिद्धांत - कोई और गेटर्स और सेटर्स
  • ऑपरेटर ओवरलोडिंग

और कार्यात्मक निर्माणों को जोड़ने के लिए आगे अपने कार्यक्रम के आकार को कम करने के लिए:

  • पहली कक्षा कार्य - हाँ, वह बंद :)
  • -comprehensions के लिए मायने रखता है। ये लूप्स नहीं हैं, बल्कि एक बहुत शक्तिशाली जानवर हैं।
  • मैच/मामले ब्लॉक - पैटर्न मिलान, स्विच/मामले की तुलना में अधिक शक्तिशाली

यह भी अच्छी तरह से डिजाइन दोषों में से कुछ के आसपास जावा में

  • प्रकट विलोपन द्वारा खो जानकारी पुनर्ग्रहण की कक्षा काम करता है
  • सिंगलेट्स - कक्षा
  • घोषणा-साइट भिन्नता - अब < पर स्थिर विधियों की तुलना में अधिक ऑब्जेक्ट उन्मुख है? फैली हुई टी >
  • कोई और अधिक अपवाद

और कुछ अच्छा एक्स्ट्रा कलाकार जाँच

  • नाम और डिफ़ॉल्ट पैरामीटर
  • अंतर्निहित रूपांतरण और मानकों
  • एक्सएमएल शाब्दिक
  • विकी वाक्य रचना scaladoc

कुछ कार्यात्मक प्रोग्रामिंग अवधारणाओं के एक सिंहावलोकन के लिए http://www.artima.com/weblogs/viewpost.jsp?thread=275983 भी देखें

संबंधित मुद्दे