আপনি জানেন আপনি কি চান করতে, কিন্তু আপনার কোড শুধু সহযোগিতা করছে না। হতে পারে এটির ইন্ডেন্টেশনের অনেকগুলি স্তর রয়েছে, বা অর্ধ ডজন পদ্ধতি চেইন রয়েছে বা অসমমিত দেখায়। যাই হোক না কেন, কিছু একটা খারাপ লাগে। আপনি এটিকে উপেক্ষা করতে পারেন - মানে, আপনি এখনও লিখতে চান এমন বৈশিষ্ট্যগুলিতে পূর্ণ একটি ব্যাকলগ রয়েছে এবং এটি আসলেই সেটি নয় খারাপ তবে এটি একটি ভুল হবে:আপনার কোড আপনাকে কিছু বলার চেষ্টা করছে এবং আপনি এটি মিস করতে চান না৷
যদি আপনি জানাতে শিখতে পারেন কখন আপনার কোড অদ্ভুত মনে হয়, তাহলে আপনি আপনার সফ্টওয়্যার ডিজাইন দক্ষতা দ্রুত এবং ব্যাপকভাবে উন্নত করবেন . এই অন্তর্দৃষ্টি তৈরি করা কঠিন, কারণ এটি অভিজ্ঞতা, পরামর্শ এবং কোড পর্যালোচনা থেকে আসে। কিন্তু আপনি লাইব্রেরিগুলি থেকে কিছু সাহায্য পেতে পারেন যেগুলি খারাপ কোড খারাপ বোধ করতে সিনট্যাকটিক ভিনেগার ব্যবহার করে৷
সিনট্যাকটিক ভিনেগার দেখতে কেমন?
এখানে মিনিটেস্ট/মক ব্যবহার করে সিনট্যাকটিক ভিনেগারের একটি উদাহরণ দেওয়া হল, একটি ছোট উপহাস এবং স্টাবিং লাইব্রেরি যা রুবির সাথে পাঠানো হয়:
require 'minitest/mock'
class CartTest < MiniTest::Test
def test_error_message_set_on_charge_failure
cart = Cart.new(items)
cart.stub(:charge!, false) do
cart.checkout!
assert_equal "The credit card could not be charged", cart.credit_card_error
end
end
end
আপনি যখন পরীক্ষা চালাবেন, charge!
Cart
এ পদ্ধতি স্টাবড, তাই পরীক্ষাটি পেমেন্ট প্রসেসরে আঘাত করবে না। আপনি যখন চান ঠিক তখনই আপনি স্টাব করেন তা নিশ্চিত করার জন্য ব্লক সিনট্যাক্সটি চমৎকার। কিন্তু আপনি যখন একগুচ্ছ পদ্ধতি বন্ধ করতে চান তখন কী হয়?
require 'minitest/mock'
class CartTest < MiniTest::Test
def test_error_message_set_on_charge_failure
payment_processor = PaymentProcessor.new
cart = Cart.new(items, processor: payment_processor)
payment_processor.stub(:charge!, false) do
payment_processor.stub(:login!, true) do
payment_processor.stub(:logout!, true) do
cart.checkout!
assert_equal "The credit card could not be charged", cart.credit_card_error
end
end
end
end
end
ইউ এটি অনেক ইন্ডেন্টেশন। এবং এটি শুধুমাত্র একটি পরীক্ষায় – আপনি কল্পনা করতে পারেন যে এই কোডটি অনেক অন্যান্য পরীক্ষায় পুনরাবৃত্তি হচ্ছে৷
আপনি পারতে৷ একটি পরীক্ষা সহায়ক পদ্ধতিতে এই সমস্ত নেস্টিং মোড়ানো। কিন্তু আপনি যদি সত্যি হন আপনার কোড শুনে, এটি আপনাকে বলছে যে আপনার আরও ভাল উপায় খুঁজে বের করা উচিত। এর পরিবর্তে টেস্ট ডাবল ব্যবহার করার সময় হতে পারে:
class TestPaymentProcessor < PaymentProcessor
def login!(account_id, key)
true
end
def charge!(amount, credit_card)
credit_card.can_be_charged?
end
def logout!
true
end
end
class CartTest < MiniTest::Test
def test_error_message_set_on_charge_failure
test_payment_processor = TestPaymentProcessor.new
cart = Cart.new(items, processor: test_payment_processor)
cart.credit_card = failing_credit_card
cart.checkout!
assert_equal "The credit card could not be charged", cart.credit_card_error
end
end
এখন আপনার পরীক্ষা আরো পঠনযোগ্য. এছাড়াও, আপনার কাছে একটি TestPaymentProcessor
আছে যা অন্যান্য অনেক জায়গায় ব্যবহার করা যেতে পারে। এমনকি আপনি এটিকে ডেভেলপমেন্ট মোডেও ব্যবহার করতে পারেন, যদি আপনি সত্যিকারের সার্ভারে আঘাত করতে না চান!
খারাপ কোড খারাপ লাগা উচিত
মতামতযুক্ত লাইব্রেরিগুলি ব্যবহার করে যা খারাপ কোডকে স্পষ্ট করে তোলে, আপনি খারাপ কোডটি আরও দ্রুত এবং আরও নির্ভরযোগ্যভাবে লক্ষ্য করতে শুরু করবেন। এবং এটি আপনার ভবিষ্যত কোডকে ক্লিন করে, সহজে পড়া এবং কাজ করতে কম বেদনাদায়ক করে তুলবে।
আপনার প্রিয় মতামতযুক্ত লাইব্রেরিগুলি কী এবং তারা কীভাবে আপনাকে খারাপ কোড খুঁজে পেতে এবং ঠিক করতে সহায়তা করে? আমাকে নীচের মন্তব্যে জানতে দিন!