কম্পিউটার টিউটোরিয়াল

রিফ্যাক্টরিং কীভাবে কোড সরল করে: চিন্তাশীল অ্যাবস্ট্রাকশনের শক্তি

গত সপ্তাহ কনসিস্টেন্ট রিটার্ন ভ্যালু ওয়ালা মেথড সম্পর্কে লিখেছিলাম, এবং সেগুলো কীভাবে কোড সরল করে। তবে সেটা কীভাবে হয়? সঠিক রিফ্যাক্টরিং কীভাবে কোড সহজ করে? ভালো অ্যাবস্ট্রাকশন কীভাবে ভালো, এবং খারাপ অ্যাবস্ট্রাকশন কীভাবে খারাপ? ব্লাইন্ডলি কোড রিঅ্যারেঞ্জ করলে কোয়ালিটি সফটওয়্যার পাওয়া যায় না।

যদি আপনি কেন এই টেকনিকগুলো কাজ করে সেটা শিখতে পারেন, তাহলে কোড কোথায় সাহায্য চায় সেটা ভালোভাবে বুঝতে পারবেন। এবং সঠিক টুল সঠিক জায়গায় ব্যবহার করতে পারবেন।

সফটওয়্যার ডেভেলপমেন্টে সবচেয়ে কঠিন সমস্যা কী?

"কম্পিউটার সাইন্সে শুধু দুটি কঠিন সমস্যা আছে: ক্যাশ ইনভ্যালিডেশন এবং নেমিং থিংস।"

– ফিল কার্লটন

হ্যাঁ, এই কোট সব জায়গায় পাওয়া যায়। কিন্তু রিয়েল-ওয়ার্ল্ড সফটওয়্যার ডেভেলপমেন্টে আসলে একটা আরও কঠিন সমস্যা আছে: কমপ্লেক্সিটি ম্যানেজ করা। কমপ্লেক্সিটির কয়েকটি ডেফিনিশন আছে। মূলত, একটি প্রোগ্রামের কমপ্লেক্সিটি হলো আপনার মস্তিষ্কের সামনে কাজ করার সময় কত জিনিস রাখতে হয়।

আপনি যত বেশি সফটওয়্যার লিখবেন, তত বেশি জিনিস মস্তিষ্কে রাখতে পারবেন। কিন্তু সেরা ডেভেলপারদেরও লিমিট আছে। প্রজেক্ট খুব কমপ্লেক্স হলে, মস্তিষ্ক ওভারলোড হবে, এবং প্রোগ্রামের বিভিন্ন এরিয়া ভুলে যাবেন। এবং সবচেয়ে খারাপ বাগ দেখায় যখন এক পার্ট চেঞ্জ করলেন অন্য পার্ট কীভাবে প্রভাবিত হবে সেটা বুঝতে না পারলেই।

অনুমান দিয়ে সরলীকরণ

ফটোগ্রাফিক মেমরি থাকলে, প্রোগ্রামের সব পার্ট কীভাবে ফিট হয় সেটা মনে রাখতে পারলে, বাগ কম হতো, ঠিক না? মেমরি বড়ানো কঠিন। তবে একবারে একটা জিনিসে ফোকাস করতে পারলে প্রায় একই সুবিধা পাওয়া যায়।

সফটওয়্যার ডেভেলপমেন্টের অনেক বেস্ট প্র্যাকটিস মস্তিষ্কে রাখতে হয় এমন জিনিসের সংখ্যা কমাতে। কয়েকটি উদাহরণ:

  • রিটার্ন ভ্যালুতে কনসিস্টেন্সি মানে আপনাকে এক টাইপ ডেটা হ্যান্ডেল করতে হয়, বদলে বিভিন্ন সিচুয়েশনে বিভিন্ন টাইপের ডেটা না হ্যান্ডেল করলে।

  • অ্যাবস্ট্রাকশন হলো কোডকে সিম্পলার ইন্টারফেসের পেছনে লুকিয়ে রাখা। ভালো অ্যাবস্ট্রাকশন থাকলে, আপনি শুধু চিন্তা করবেন অ্যাবস্ট্রাকশনটি কীভাবে আচরণ করা উচিত, ভেতরে কীভাবে কাজ করে সেটা চিন্তা করবেন না।

  • টেস্টিং আপনাকে অন্য এরিয়ায় কাজ করার সময় অজান্তে কোড ভাঙতে থেকে বাঁচায়। অনুমান করতে পারেন যে আপনি যদি কিছু ভাঙেন তবে টেস্ট ধরবে। এতে আপনি শুধু কাজ কর रहे কোডে ফোকাস করতে পারেন, ভাঙা জিনিসগুলো পরে ফিক্স করবেন।

  • টেস্ট-ড্রাইভেন ডেভেলপমেন্ট আপনাকে এমন কোড লিখতে সাহায্য করে যা আপনার আশা অনুযায়ী কাজ করে। আপনি কনসেন্ট্রেট করতে পারেন সিম্প্লেস্ট পসিবল ইমপ্লিমেন্টেশন লিখতে যা টেস্ট পাস করবে। যদি সেটা অতিরিক্ত সিম্পল হয় এবং আশা অনুযায়ী কাজ না করে, টেস্ট ধরবে।

এই টেকনিকগুলো সঠিকভাবে ব্যবহার করলে কিছু ভালো অনুমান করতে পারবেন। এই অনুমানগুলো থাকলে, মস্তিষ্কের সামনে খুব কম জিনিস রাখতে হয়। আপনি ভালো, বেশি নির্ভরযোগ্য কোড লিখতে পারবেন, কারণ সিস্টেমে আপনার কোডের নিখুঁত পরিসংখ্যান ফলাফল নিয়ে চিন্তা করতে হবে না।

দूसरी পক্ষ, এই টেকনিকগুলো ভুল জায়গায় ব্যবহার করলে আপনাকে দেখতে হবে এমন কোড লুকিয়ে দেবে। কোড লুকাতে, আপনার অনুমানগুলো কখনো কখনো ভুল হবে। এতে আরও অধিক সম্ভাবনা থাকে আপনি সেটা ভাঙবেন!

এটাই কেন খারাপ অ্যাবস্ট্রাকশন কোনো অ্যাবস্ট্রাকশন নাই চেয়ে খারাপ, এবং কেন আপনি শুধু "extract method" ফেলে কোড ম্যাজিক্যালি ভালো করতে পারবেন না।

সঠিক রিফ্যাক্টরিং, সঠিক জায়গায়

ক্লিয়ার কোড মানে যা করছে সেটা স্পষ্টভাবে দেখানো। যে জিনিস জানা দরকার সেটা দেখানো, যা দরকার নেই সেটা লুকাতে একই গুরুত্বপূর্ণ। রিফ্যাক্টরিং বা সফটওয়্যার বেস্ট প্র্যাকটিস ব্যবহার করার সময়, ফাইনাল কোড এবং কীভাবে কমপ্লেক্সিটি কমিয়েছে সেটা চিন্তা করুন। কোডের বাকি অংশকে ভালো, সরলীকরণকারী অনুমান করতে সাহায্য করছেন? নাকি অপরিহার্য জ্ঞান খুব সিম্পল ইন্টারফেসের পেছনে গाड़িয়ে দিচ্ছেন?

  1. অ্যান্ড্রয়েডে জিমেইলে 'কিউড' ইমেইল বুঝুন ও সমাধান করুন

  2. সফটওয়্যার আপডেট কেন গুরুত্বপূর্ণ: আপনার ডেটা এবং সিস্টেম সিকিউরিটি রক্ষা

  3. অ্যান্টিভাইরাস সফটওয়্যার বোঝা: এটি কীভাবে আপনার ডিভাইস রক্ষা করে

  4. চমৎকার কাউড অ্যানিমেশনের জন্য সেরা ৫টি কাউড সিমুলেশন সফটওয়্যার