"আবারো স্বাগতম."

"ওহে!"

"আজ আমি আপনাকে রিফ্যাক্টরিং সম্পর্কে বলতে যাচ্ছি। রিফ্যাক্টরিং হল একটি প্রজেক্টে কোড পরিবর্তন না করে তার কার্যকারিতা পরিবর্তন করা।"

"কিন্তু কিভাবে সম্ভব?"

"আচ্ছা, সবচেয়ে সহজ ক্ষেত্রে, আমরা ভেরিয়েবল এবং/অথবা পদ্ধতির নাম পরিবর্তন করতে পারি। সর্বোপরি, একটি ভেরিয়েবলের নাম পরিবর্তন করলে প্রোগ্রামটি ভিন্নভাবে কাজ করবে না, তাই না?"

"অবশ্যই না."

"আপনি বড় পদ্ধতিগুলিকে কয়েকটি ছোট পদ্ধতিতে ভাঙ্গতে পারেন। "

"আপনি একটি পৃথক পদ্ধতিতে বারবার কোড স্নিপেট টানতে পারেন। "

"কিছু ফাংশন স্ট্যাটিক ঘোষণা করা যেতে পারে এবং তারপর ইউটিলিটি ক্লাসে স্থানান্তরিত করা যেতে পারে।"

"কিন্তু এটি রিফ্যাক্টরিংয়ের একটি সংকীর্ণ ব্যাখ্যা।"

"কখনও কখনও রিফ্যাক্টরিং মানে নতুন কার্যকারিতা যোগ না করে একটি প্রজেক্টের আর্কিটেকচার পুনর্লিখন (উন্নতি) করা। এটি শব্দটির ব্যাপক অর্থে রিফ্যাক্টরিং।"

"IntelliJ IDEA সবচেয়ে জনপ্রিয় ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (IDE) হয়ে উঠেছে বিশেষ করে কারণ এটিই প্রথম অত্যন্ত শক্তিশালী রিফ্যাক্টরিং টুল প্রবর্তন করে।"

"এই যাদুকরী সরঞ্জামগুলি কি?"

ম্যাজিক ট্রিক #1: একটি পদ্ধতির নাম পরিবর্তন করুন।

"ভাবুন যে আপনার কোডটি 100-500টি বিভিন্ন জায়গা থেকে কল করা হয়েছে এমন একটি পদ্ধতি রয়েছে। আপনি এটির নামটি আরও বোধগম্য কিছুতে পরিবর্তন করার সিদ্ধান্ত নিয়েছেন। ধরা যাক এটি রান(), এবং আপনি চান যে এটি runDownloadTaskAsync() হবে কত দ্রুত তুমি কি এটা করতে পারো?"

"আচ্ছা, প্রথমে আপনাকে পদ্ধতির নাম পরিবর্তন করতে হবে, তারপর প্রোগ্রামের সমস্ত জায়গা খুঁজে বের করুন যেখানে সেই পদ্ধতিটি বলা হয়েছে এবং সেখানেও নাম পরিবর্তন করুন।"

"এবং আপনি সেই জায়গাগুলি কীভাবে খুঁজে পাবেন?"

"আমি শুধু প্রোগ্রাম চালাব এবং IntelliJ IDEA আমাকে এমন সব জায়গা দেখাবে যেখানে একটি অস্তিত্বহীন পদ্ধতি বলা হয়।"

"ঠিক আছে। কিন্তু এখন ধরুন যে প্রতিটি পদ্ধতিতে একটি ব্যাখ্যামূলক মন্তব্য (JavaDoc) আছে যা ব্যাখ্যা করে যে পদ্ধতিটি কী করে - এবং সেখানে পুরানো পদ্ধতির নাম লেখা আছে।"

"আমিও মন্তব্য পরিবর্তন করব।"

"কিন্তু এমন ভেরিয়েবলও থাকতে পারে যাদের নাম পদ্ধতির নামের সাথে যুক্ত। সেগুলিও পরিবর্তন করা ভালো হবে:"

আগে পরে
Task task = manager.run();
Task asyncTask = manager.runDownloadTaskAsync();

"হ্যাঁ, সেই ভেরিয়েবলের নামও বদলানো ভালো হবে। ক্ষতি হবে না।"

"আচ্ছা, ইন্টেলিজে আইডিইএ ব্যবহার করে এই সব কিছু মাত্র কয়েক সেকেন্ডের মধ্যে করা যায়!"

"আপনি পদ্ধতির নামের উপর কার্সার রাখুন (অথবা এটি মাউস দিয়ে ক্লিক করুন), এবং তারপর 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: একটি আলাদা পদ্ধতিতে কোড বের করুন।

"কিন্তু আমরা অন্য কিছু করতে পারতাম। আমরা একটি নতুন পদ্ধতি ঘোষণা করতে পারতাম, যেমন printAddress (), এবং এই কোডের সমস্ত অংশ এতে স্থানান্তরিত করতে পারতাম।"

"চলো এটা করার চেষ্টা করি।"

ধাপ 1: কোডের 4 লাইন নির্বাচন করুন যা ঠিকানা ভেরিয়েবল ব্যবহার করে:

আইডিয়া: রিফ্যাক্টরিং - 6

ধাপ 2: Ctrl+Alt+M টিপুন

আইডিয়া: রিফ্যাক্টরিং - 7

"IntelliJ IDEA নির্ধারণ করে যে পদ্ধতিতে কোন ভেরিয়েবলের প্রয়োজন হবে, এবং এটি কেমন হওয়া উচিত তা পরামর্শ দেয়৷ "শুধুমাত্র পদ্ধতিটির জন্য একটি নাম লিখতে হবে।"

ধাপ 3: পদ্ধতির নাম হিসাবে printAddress লিখুন এবং এন্টার টিপুন।

আইডিয়া: রিফ্যাক্টরিং - 8

"আপনি এটা কিভাবে পছন্দ করেন?"

"এটি দুর্দান্ত। IntelliJ IDEA শুধুমাত্র একটি পৃথক পদ্ধতিতে কোডটি বের করেনি, এটি সমস্ত প্রয়োজনীয় ভেরিয়েবলও যুক্ত করেছে। আরও কী, এটি সমস্ত নাম সঠিকভাবে অনুমান করেছে।"