"फिर से हैलो।"

"नमस्ते!"

"आज मैं आपको रिफैक्टरिंग के बारे में बताने जा रहा हूं। रिफैक्टरिंग किसी प्रोजेक्ट में उसकी कार्यक्षमता को बदले बिना कोड को बदलना है।"

"लेकिन यह कैसे संभव है?"

"ठीक है, सबसे सरल मामलों में, हम चर और/या विधियों का नाम बदल सकते हैं। आखिरकार, एक चर का नाम बदलने से प्रोग्राम अलग तरह से काम नहीं करेगा, है ना?"

"बिल्कुल नहीं।"

"आप बड़े तरीकों को कई छोटे तरीकों में भी तोड़ सकते हैं। "

"आप दोहराए गए कोड स्निपेट को एक अलग विधि में खींच सकते हैं। "

"कुछ कार्यों को स्थिर घोषित किया जा सकता है और फिर उपयोगिता वर्गों में स्थानांतरित किया जा सकता है।"

"लेकिन यह रिफैक्टरिंग की एक संकीर्ण व्याख्या है।"

"रिफैक्टरिंग का मतलब कभी-कभी नई कार्यक्षमता को जोड़े बिना किसी प्रोजेक्ट के आर्किटेक्चर को फिर से लिखना (सुधारना) होता है। यह शब्द के व्यापक अर्थों में रिफैक्टरिंग है।"

"IntelliJ IDEA विशेष रूप से सबसे लोकप्रिय एकीकृत विकास वातावरण (IDE) बन गया क्योंकि यह सबसे शक्तिशाली रिफैक्टरिंग उपकरण पेश करने वाला पहला था।"

"ये जादुई उपकरण क्या हैं?"

मैजिक ट्रिक # 1: एक विधि का नाम बदलें।

"कल्पना करें कि आपके कोड में एक विधि है जिसे 100-500 अलग-अलग स्थानों से बुलाया जाता है। आपने इसका नाम कुछ और समझने योग्य में बदलने का फैसला किया है। मान लीजिए कि यह रन () है, और आप चाहते हैं कि यह रनडाउनलोड टास्कएसिंक () हो। कितनी जल्दी क्या आप यह कर सकते हैं?"

"ठीक है, पहले आपको विधि का नाम बदलने की आवश्यकता है, फिर प्रोग्राम में उन सभी स्थानों को खोजें जहाँ उस विधि को कहा जाता है, और वहाँ भी नाम बदलें।"

"और आप उन जगहों को कैसे ढूंढेंगे?"

"मैं अभी प्रोग्राम चलाऊंगा और IntelliJ IDEA मुझे उन सभी जगहों को दिखाएगा जहां एक गैर-मौजूद विधि कहलाती है।"

"ठीक है। लेकिन अब मान लीजिए कि प्रत्येक विधि में व्याख्यात्मक टिप्पणी (जावाडॉक) है जो बताती है कि विधि क्या करती है - और पुरानी विधि का नाम वहां लिखा गया है।"

"मैं टिप्पणियों को भी बदलूंगा।"

"लेकिन ऐसे चर भी हो सकते हैं जिनके नाम विधि के नाम से जुड़े हैं। उन्हें भी बदलना अच्छा होगा:"

पहले बाद
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

"हाँ, उन चरों के नाम भी बदलना अच्छा होगा। यह चोट नहीं पहुँचाएगा।"

"ठीक है, यह सब IntelliJ IDEA का उपयोग करके कुछ ही सेकंड में किया जा सकता है!"

"आप कर्सर को विधि के नाम पर रखते हैं (या इसे माउस से क्लिक करें), और फिर Shift+F6 दबाएं और वांछित विधि नाम टाइप करना शुरू करें।"

"यहाँ एक विधि नाम के संपादन का एक उदाहरण है।"

"संपादन प्रारंभ करें:"

आईडिया: रीफैक्टरिंग - 1

"एक नया नाम निर्दिष्ट करें:"

आईडीईए: रिफैक्टरिंग - 2

"बस एक नया नाम दर्ज करें, एंटर दबाएं, और बस इतना ही। इस विधि का नाम बदल दिया जाएगा जहां इसे परियोजना में कहा जाता है।"

"IntelliJ IDEA आमतौर पर यह भी पूछता है कि क्या आप टिप्पणियों में चर नामों और विधि नामों का नाम बदलना चाहते हैं। बस 'हां' पर क्लिक करें और यह सब कुछ बदल देगा।"

"क्या अधिक है, अगर परियोजना इस रिफैक्टरिंग ऑपरेशन से पहले संकलित की जाती है, तो इसे रिफैक्टरिंग के बाद संकलित करने की गारंटी दी जाती है।"

"बहुत ही आशाजनक लगता है।"

"वैसे, आप वेरिएबल नामों को उसी तरह बदल सकते हैं। एक नाम पर क्लिक करने के बाद, बस Shift+F6 दबाएं — फिर आप एक नया नाम दर्ज कर सकते हैं, और IntelliJ वेरिएबल नाम को बदल देगा जहां भी इसका उपयोग किया जाएगा। "

"यदि चर एक वर्ग में एक क्षेत्र है और एक गेट्टर और एक सेटर है, तो वेरिएबल के नए नाम से मिलान करने के लिए गेट्टर और सेटर के नाम भी बदल दिए जाएंगे।"

"मैंने इसे चरों का उपयोग करके आज़माया। सब कुछ वैसा ही काम करता है जैसा आपने कहा था, ऐली। रिफैक्टरिंग बहुत बढ़िया है!"

"क्या आपको लगता है कि रिफैक्टरिंग के लिए बस इतना ही है? रिफ्रैक्टरिंग इतना व्यापक विषय है - हमने सतह को खरोंच भी नहीं किया है।"

"वाह। और क्या है?"

मैजिक ट्रिक #2: एक वेरिएबल निकालें।

"कभी-कभी कुछ अभिव्यक्तियों को कोड में इतनी बार दोहराया जाता है कि आप उन्हें एक अलग चर में ले जाना चाहेंगे। उदाहरण के लिए:"

कोड
public void printInfo(User user)
{
 System.out.println(user.getProfile().getName());
 System.out.println(user.getProfile().getAddress().getState());
 System.out.println(user.getProfile().getAddress().getCity());
 System.out.println(user.getProfile().getAddress().getStreet());
 System.out.println(user.getProfile().getAddress().getHomeNumber());
}
आप इसे कैसे देखना चाहते हैं:
public void printInfo(User user)
{
 Address address = user.getProfile().getAddress();

 System.out.println(user.getProfile().getName());
 System.out.println(address.getState());
 System.out.println(address.getCity());
 System.out.println(address.getStreet());
 System.out.println(address.getHomeNumber());
}

"आह।"

"और कोड बहुत अधिक जटिल हो सकता है, बहुत सारे दोहराए गए भागों के साथ।"

"प्रोग्रामर इसे जानबूझकर इस तरह से नहीं लिखते हैं। लेकिन आपको अक्सर एक विधि में कुछ जोड़ने की आवश्यकता होगी, फिर कुछ और - और समय के साथ दोहराव की संख्या छत के माध्यम से चली जाती है।"

"एक अलग चर बनाकर, हम इसे उचित नाम दे सकते हैं और कोड की पठनीयता में सुधार कर सकते हैं।"

"उदाहरण के लिए, उपरोक्त उदाहरण में, शायद हम घर के पते के बारे में बात नहीं कर रहे हैं। हो सकता है कि हम आपातकालीन संपर्क के पते के बारे में बात कर रहे हों। फिर आप केवल पते के बजाय इस परिवर्तनीय आपातकालीन संपर्क पता को कॉल कर सकते हैं। फिर, एक प्रोग्रामर इस कोड को पहली बार देखकर समझ जाएगा कि यहां क्या हो रहा है।"

"हाँ, मैं सहमत हूँ। ऐसे चर जोड़ना समझ में आता है।"

"तो आप इसे कैसे करते हैं?"

"एक अभिव्यक्ति को एक अलग चर में ले जाना बहुत आसान है।"

चरण 1: अभिव्यक्ति का चयन करने के लिए माउस का प्रयोग करें।

आईडिया: रिफैक्टरिंग - 3

चरण 2: Ctrl+Alt+V दबाएं

आईडीईए: रिफैक्टरिंग - 4

"एक विंडो खुलती है जहां IntelliJ IDEA हमसे पूछता है कि क्या हम केवल चयनित अभिव्यक्ति या अभिव्यक्ति के सभी उदाहरणों (4 घटनाओं) को बदलना चाहते हैं?"

"सभी घटनाओं को बदलने के लिए दूसरा विकल्प चुनें (सभी 4 घटनाओं को बदलें)"

चरण 3: एंटर दबाएं।

आईडीईए: रिफैक्टरिंग - 5

"IntelliJ IDEA आपको एक वेरिएबल नाम दर्ज करने के लिए कहेगा। यह नाम के लिए अपना सुझाव भी देगा। बुरा नहीं है, एह?"

"उह-हह। ठीक है। हम वेरिएबल 'एड्रेस' नाम देने की भी योजना बना रहे थे। इसे कैसे पता चला?"

"अभिव्यक्ति में अंतिम विधि के नाम का उपयोग करके, जो एक पता देता है। इस प्रकार, यह संभावना है कि चर का उपयोग एक पते को संग्रहीत करने के लिए किया जाएगा।"

"यह वास्तव में अच्छी तरह से काम किया। महान सामान, ऐली।"

मैजिक ट्रिक #3: एक अलग विधि में कोड निकालें।

"लेकिन हम कुछ और कर सकते थे। हम एक नई पद्धति की घोषणा कर सकते थे, उदाहरण के लिए प्रिंटएड्रेस (), और इस सारे कोड को इसमें स्थानांतरित कर दिया।"

"चलो ऐसा करने की कोशिश करते हैं।"

चरण 1: पता चर का उपयोग करने वाले कोड की 4 पंक्तियों का चयन करें:

आईडीईए: रिफैक्टरिंग - 6

चरण 2: Ctrl+Alt+M दबाएं

आईडीईए: रिफैक्टरिंग - 7

"IntelliJ IDEA यह निर्धारित करता है कि विधि को किन चरों की आवश्यकता होगी, और यह सुझाव देता है कि यह कैसा दिखना चाहिए।"

चरण 3: विधि नाम के रूप में प्रिंटएड्रेस दर्ज करें और एंटर दबाएं।

आईडीईए: रिफैक्टरिंग - 8

"आपको वह कैसा लगा?"

"यह बहुत बढ़िया है। IntelliJ IDEA ने न केवल कोड को एक अलग विधि में निकाला, बल्कि इसमें सभी आवश्यक चर भी जोड़े। और तो और, इसने सभी नामों का सही अनुमान लगाया।"