जावा प्रो टिप्स: अपने प्रोग्रामिंग को सुपरचार्ज करने के लिए दुर्लभ ट्रिक्स

Mar 13 2023
अपने जावा कोड को बेहतर बनाने के लिए दुर्लभ और शक्तिशाली तकनीकों की खोज करें, डबल ब्रेस इनिशियलाइज़ेशन से लेकर वैकल्पिक क्लास और बहुत कुछ इस लेख में, हम कुछ दुर्लभ और शक्तिशाली युक्तियों और युक्तियों का पता लगाएंगे जो आपको जावा की पूरी क्षमता को अनलॉक करने और कोड बनाने में मदद कर सकते हैं यह सुरुचिपूर्ण और कुशल दोनों है। कार्यात्मक इंटरफेस और स्ट्रीम एपीआई और वैकल्पिक वर्ग के लिए विधि संदर्भ से, हम जावा की कुछ उन्नत सुविधाओं को कवर करेंगे जिन्हें अक्सर अनदेखा किया जाता है लेकिन आपके प्रोग्रामिंग अनुभव में काफी सुधार कर सकते हैं।

अपने जावा कोड को बेहतर बनाने के लिए दुर्लभ और शक्तिशाली तकनीकों की खोज करें, डबल ब्रेस इनिशियलाइज़ेशन से लेकर वैकल्पिक क्लास और बहुत कुछ

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

कार्यात्मक इंटरफेस और स्ट्रीम एपीआई और वैकल्पिक वर्ग के लिए विधि संदर्भ से, हम जावा की कुछ उन्नत सुविधाओं को कवर करेंगे जिन्हें अक्सर अनदेखा किया जाता है लेकिन आपके प्रोग्रामिंग अनुभव में काफी सुधार कर सकते हैं।

तो, आइए गोता लगाएँ और जावा की पूरी शक्ति का उपयोग करें!

डबल ब्रेस इनिशियलाइज़ेशन

यह तकनीक आपको एक वर्ग का एक उदाहरण बनाने और एकल कथन का उपयोग करके इसके मूल्यों को आरंभ करने की अनुमति देती है। इसमें एक अनाम इनर क्लास बनाना और इंस्टेंस वेरिएबल्स को इनिशियलाइज़ करने के लिए इंस्टेंस इनिशियलाइज़र ब्लॉक का उपयोग करना शामिल है।

Map<String, String> myMap = new HashMap<String, String>() {{
   put("key1", "value1");
   put("key2", "value2");
}};

यह सुविधा जावा 7 में पेश की गई थी और आपको बेहतर पठनीयता के लिए संख्यात्मक शाब्दिक में अंकों के समूहों को अलग करने के लिए अंडरस्कोर का उपयोग करने की अनुमति देती है।

int million = 1_000_000;
long creditCardNumber = 1234_5678_9012_3456L;
double pi = 3.14_15_92_65;

यह सुविधा जावा 7 में पेश की गई थी और आपको एक कोशिश ब्लॉक के अंत में स्ट्रीम, फाइल और डेटाबेस कनेक्शन जैसे संसाधनों को स्वचालित रूप से बंद करने की अनुमति देती है, जिससे अंत में ब्लॉक की आवश्यकता समाप्त हो जाती है।

try (FileInputStream fis = new FileInputStream("myfile.txt");
     BufferedInputStream bis = new BufferedInputStream(fis)) {
    // code that uses fis and bis
} catch (IOException e) {
    // handle exception
}

आप सिंगलटन डिज़ाइन पैटर्न को लागू करने के लिए जावा में एक एनम का उपयोग कर सकते हैं। एनम वैल्यू को केवल एक बार इंस्टेंट किया जाता है जब एनम को पहली बार एक्सेस किया जाता है, जिससे यह थ्रेड-सुरक्षित हो जाता है।

public enum Singleton {
    INSTANCE;
 
    // methods and instance variables
}

लैम्ब्डा एक्सप्रेशन जावा 8 में पेश किए गए थे और आपको स्ट्रीम और संग्रह जैसे कार्यात्मक प्रोग्रामिंग निर्माणों के लिए अधिक संक्षिप्त और पठनीय कोड लिखने की अनुमति देते हैं।

List<String> names = Arrays.asList("John", "Mary", "Bob");
names.forEach(name -> System.out.println(name));

कार्यात्मक इंटरफेस ऐसे इंटरफेस होते हैं जिनमें केवल एक अमूर्त विधि होती है और लैम्ब्डा एक्सप्रेशन को परिभाषित करने के लिए उपयोग किया जाता है। आप @FunctionalInterfaceएनोटेशन का उपयोग यह सुनिश्चित करने के लिए कर सकते हैं कि एक इंटरफ़ेस एक कार्यात्मक इंटरफ़ेस है और यदि यह नहीं है तो संकलन-समय त्रुटि प्राप्त करें।

@FunctionalInterface
public interface MyInterface {
    void doSomething();
}

विधि संदर्भ आपको किसी विधि को बिना बुलाए संदर्भित करने की अनुमति देता है। आप ::विधि संदर्भ बनाने के लिए ऑपरेटर का उपयोग कर सकते हैं। विधि संदर्भ चार प्रकार के होते हैं: स्थैतिक, उदाहरण, निर्माणकर्ता और मनमाना उदाहरण।

List<String> names = Arrays.asList("John", "Mary", "Bob");
names.forEach(System.out::println);

स्ट्रीम एपीआई जावा 8 में पेश की गई एक शक्तिशाली विशेषता है जो आपको कार्यात्मक तरीके से डेटा संग्रह को संसाधित करने की अनुमति देती है। आप डेटा को प्रोसेस करने के लिए कई तरह के ऑपरेशन जैसे फ़िल्टर, मैप, रिड्यूस और कलेक्ट का इस्तेमाल कर सकते हैं।

List<String> names = Arrays.asList("John", "Mary", "Bob");
long count = names.stream()
                 .filter(name -> name.length() < 4)
                 .count();

वैकल्पिक वर्ग का उपयोग उस मान का प्रतिनिधित्व करने के लिए किया जाता है जो मौजूद हो सकता है या नहीं भी हो सकता है। आप वैकल्पिक वस्तुओं के साथ काम करने के लिए isPresent(), get()और जैसे तरीकों का उपयोग कर सकते हैं ।orElse()

Optional<String> name = Optional.ofNullable(getName());
if (name.isPresent()) {
    System.out.println("Hello, " + name.get());
} else {
    System.out.println("Hello, stranger");
}

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

Map<String, List<String>> myMap = new HashMap<>();

एक्सप्लोर करते रहें, सीखते रहें और कोडिंग करते रहें!

अपने ट्विटर और इंस्टाग्राम अकाउंट पर , मैं अक्सर अपनी प्रोग्रामिंग यात्रा और विकास के अनुभव साझा करता हूं।

पढ़ने के लिए धन्यवाद :)