1. सिंटॅक्टिक साखर

काही क्लिष्ट कोड किंवा लॉजिक दोन ओळींमध्ये लिहीले जाऊ शकते, कोड कॉम्पॅक्ट आणि वाचनीय बनवणे प्रोग्रामरना आवडते. आणि प्रोग्रामिंग भाषांचे निर्माते कधीकधी यामध्ये मदत करतात.

एक चपळ भाषा वैशिष्ट्य जे तुम्हाला शॉर्टकट (कमी कोड लिहा) घेऊ देते त्याला सिंटॅक्टिक शुगर म्हणतात . पण, खरे सांगायचे तर, जावामध्ये ते फारच कमी आहे.

Java च्या निर्मात्यांनी Java मधील कोणतीही अनावश्यकता दूर करण्यासाठी शक्य ते सर्व केले. जर C++ तुम्हाला 20 मार्गांनी काही करू देत असेल, तर Java तुम्हाला ते फक्त एकाच मार्गाने करू देते.

परंतु जावा प्रोग्रामर किंवा जावाच्या निर्मात्यांना स्वातंत्र्याचा अभाव आवडला नाही. आणि कधीकधी साखर तुमच्या आणि माझ्यासारख्या सामान्य लोकांसाठी जीवन सुलभ करते.

तसे, तुम्ही आधीच काही सिंटॅक्टिक शुगरचा सामना केला आहे: ऑटोबॉक्सिंग आणि अनबॉक्सिंग . चला तुलना करूया:

लांब कोड संक्षिप्त कोड
Integer a = new Integer(5);
int b = a.intValue();
Integer a = 5;
int b = a;
int b = 5;
Integer c = new Integer(b);
int b = 5;
Integer c = b;
Integer a = new Integer(1);
int b = 1;
if (a.intValue() == b)
{
   ...
}
Integer a = 1;
int b = 1;
if (a == b)
{
   ...
}

डावीकडील लांब कोड ऐवजी, आपण उजवीकडे अधिक संक्षिप्त कोड लिहू शकता. आणि बुद्धिमान Java कंपाइलर कोडच्या लहान आवृत्तीवर आधारित कोडची वर्बोज आवृत्ती तयार करेल. सिंटॅक्टिक शुगर म्हणजे नेमके हेच.


2. व्हेरिएबलच्या प्रकाराचे अनुमान: varकीवर्ड

Java 11 मध्ये, कंपाइलर अधिक हुशार झाला आणि आता त्याला नियुक्त केलेल्या मूल्याच्या प्रकारावर आधारित घोषित व्हेरिएबलचा प्रकार निर्धारित करू शकतो . कोडमध्ये, हे असे दिसते:

var name = value;

nameनवीन व्हेरिएबलचे नाव कुठे आहे, मूल्य हे त्याचे प्रारंभिक मूल्य आहे आणि varव्हेरिएबल घोषित करण्यासाठी वापरलेला कीवर्ड आहे. नेम व्हेरिएबलचा प्रकार त्यास नियुक्त केलेल्या मूल्याच्या प्रकाराप्रमाणेच असेल.

उदाहरणे:

आपण कोड कसे पाहतो संकलक काय पाहतो
var i = 1;
int i = 1;
var s = "Hello";
String s = "Hello";
var console = new Scanner(System.in);
Scanner console = new Scanner(System.in);
var list = new ArrayList<String>();
ArrayList<String> list = new ArrayList<String>();
var data = new int[]{1, 2, 3};
int[] data = new int[]{1, 2, 3};

कंपायलर स्वतः व्हेरिएबलचा प्रकार निर्धारित करतो किंवा त्यास नियुक्त केलेल्या मूल्यावर आधारित आहे.

प्रोग्रामर भाषेत असे वैशिष्ट्य जोडायचे की नाही यावर जोरदार वादविवाद केले. बर्‍याच लोकांना याचा varगैरवापर केला जाईल अशी भीती होती आणि परिणामी कोड वाचनीयतेला त्रास होईल.

यात सत्यता आहे, म्हणून varकोडची वाचनीयता वाढवते तिथे वापरणे चांगले. उदाहरणार्थ, हे दोन प्रकरणांमध्ये:

केस 1: व्हेरिएबलला नियुक्त केलेले मूल्य पाहता, व्हेरिएबलचा प्रकार लगेच स्पष्ट होतो

कोड स्पष्टीकरण
var stream = url.getInputStream();
व्हेरिएबल एक आहेInputStream
var name = person.getFullName();
व्हेरिएबल आहे aString

या प्रकरणांमध्ये, आपण वापरू नयेvar . बरं, व्हेरिएबलचा प्रकार काय आहे?

कोड स्पष्टीकरण
var result = task.execute();
व्हेरिएबलचा प्रकार निश्चित करणे कठीण आहे
var status = person.getStatus();
व्हेरिएबलचा प्रकार निश्चित करणे कठीण आहे

केस 2: कोड समजण्यासाठी व्हेरिएबलचा प्रकार महत्त्वाचा नाही

कोडला बर्‍याचदा व्हेरिएबलवर मेथड कॉल करण्याची गरज नसते, उदा. जेव्हा व्हेरिएबल काही तात्पुरते साठवण्यासाठी वापरले जाते. या प्रकरणात, varनिश्चितपणे वापरल्याने कोडची वाचनीयता कमी होत नाही:

लांब कोड संक्षिप्त कोड
var data = stream.getMetaData();
storage.save(data)
आम्हाला प्रवाहातून मेटाडेटा मिळाला streamआणि तो रेपॉजिटरीमध्ये सेव्ह केला storage. व्हेरिएबलचा dataविशिष्ट प्रकार महत्त्वाचा नाही.

सोनेरी अर्थ

आता मी समान कोड लिहिण्याचे तीन मार्ग देईन. वापरणे varहा सर्वोत्तम पर्याय असेल.

कोड नोंद
dest.writeHeaderInfo(src.getFileMetaInfo());
खूप कॉम्पॅक्ट
var headerInfo = src.getFileMetaInfo();
dest.writeHeaderInfo(headerInfo);
फक्त योग्य
FileMetaInfo headerInfo = src.getFileMetaInfo();
dest.writeHeaderInfo(headerInfo);
खूप तपशीलवार

1 ओळीच्या आवृत्तीवरून 2 ओळींवरील आवृत्तीवर जाणे, आम्ही व्हेरिएबल नाव ( headerInfo) वापरून कोड थोडे अधिक वाचनीय बनवले आहे. आता हे स्पष्ट झाले आहे की पद्धत केवळ मेटा माहिती नाही तर शीर्षलेख माहिती देते.

तिसरी आवृत्ती अतिशय शब्दशः आहे. headerInfoएक आहे हे तथ्य FileMetaInfoपद्धतीवरून आधीच स्पष्ट आहे getFileMetaInfo(). मेटा माहितीचा उद्देश अधिक मनोरंजक आहे.



3. डायमंड ऑपरेटरसह प्रकार वगळणे:<>

ऑपरेटर दिसण्यापूर्वीच var, संकलनाच्या प्रकारांचा अंदाज कसा लावायचा हे कंपाइलरला शिकवण्याचा प्रयत्न झाला. तुम्ही सहमत व्हाल की हे नोटेशन थोडेसे अनावश्यक दिसते:

ArrayList<String> list = new ArrayList<String>();

Java च्या सातव्या आवृत्तीपासून, संकलन प्रकार लिहिताना, जर व्हेरिएबल घोषित करताना निर्दिष्ट केले असेल तर तुम्ही संग्रह घटकांचा प्रकार वगळू शकता. दुसऱ्या शब्दांत, वरील कोड थोड्याशा संक्षिप्त स्वरूपात लिहिला जाऊ शकतो:

ArrayList<String> list = new ArrayList<>();

तुम्ही बघू शकता, तुम्हाला यापुढे स्ट्रिंग दुसऱ्यांदा लिहिण्याची गरज नाही. var ऑपरेटर प्रमाणे छान नाही, परंतु त्या वेळी प्रगती झाल्यासारखे वाटले.

संकलन प्रकारातील रिकाम्या कोन कंसांना डायमंड ऑपरेटर असे म्हणतात , कारण दोन कोन कंस अस्पष्टपणे डायमंडसारखे दिसतात.

एकाच वेळीvar कीवर्ड आणि डायमंड ऑपरेटर वापरणे अवांछित आहे :

var list = new ArrayList<>();

संग्रहामध्ये संग्रहित केलेल्या घटकांच्या प्रकाराबद्दल कोणतीही माहिती नाही आणि संग्रह प्रकार ArrayList < Object > असेल.



4. दुहेरी कुरळे ब्रेसेस

द्रुत अॅरे इनिशिएलायझेशन लक्षात ठेवा?

आम्ही फक्त कुरळे ब्रेसेसमध्ये मूल्ये सूचीबद्ध केली आहेत, जसे की:

उदाहरणे
int[] data = new int[] {1, 2, 3, 4, 5, 6, 7};
int[] data = {1, 2, 3, 4, 5, 6, 7};

जावाच्या निर्मात्यांना अॅरेचे लेखन घटक सुलभ करण्यासाठी कुरळे ब्रेसेस वापरण्याची कल्पना आवडली. पण संग्रहांचे काय?

जावाच्या निर्मात्यांना संग्रहासाठी पुरेशी सर्जनशील विचारसरणी होती, ज्यामुळे त्यांना दुहेरी कुरळे ब्रेसेस असलेली युक्ती वापरता आली.

साखर सह साखरेशिवाय
var list = new ArrayList<String>()
{{
   add("Hello");
   add("How's");
   add("Life?");
}};
var list = new ArrayList<String>();

list.add("Hello");
list.add("How's");
list.add("Life?");

जर कंपायलरला डावीकडील उदाहरणाप्रमाणे कोड आढळला, तर तो त्यास उजवीकडील कोडमध्ये रूपांतरित करतो.

कोड जास्त कॉम्पॅक्ट होत नाही. listयेथे बचत बऱ्यापैकी क्षुल्लक आहे: तुम्हाला प्रत्येक वेळी लिहावे लागत नाही . व्हेरिएबलचे नाव खूप मोठे असल्यास हे उपयुक्त ठरू शकते.

परंतु एखाद्या प्रोजेक्टमध्ये तुम्हाला असा कोड आढळल्यास, आश्चर्यचकित होऊ नका 🙂