আপনি যদি ওয়ান লাইনারের মতো প্রসারিত করতে বাধ্য হন
a = F(G1(H1(b1), H2(b2)), G2(c1));
আমি আপনাকে দোষ দেব না এটি কেবল পড়া কঠিন নয়, এটি ডিবাগ করাও শক্ত।
কেন?
- এটা ঘন
- কিছু ডিবাগার কেবল একবারে পুরো বিষয়টি হাইলাইট করবে
- এটি বর্ণনামূলক নামমুক্ত
আপনি যদি মধ্যবর্তী ফলাফলগুলি দিয়ে এটি প্রসারিত করেন তবে পাবেন
var result_h1 = H1(b1);
var result_h2 = H2(b2);
var result_g1 = G1(result_h1, result_h2);
var result_g2 = G2(c1);
var a = F(result_g1, result_g2);
এবং এটি পড়া এখনও কঠিন। কেন? এটি দুটি সমস্যার সমাধান করে এবং একটি চতুর্থ পরিচয় দেয়:
এটা ঘন
কিছু ডিবাগার কেবল একবারে পুরো বিষয়টি হাইলাইট করবে
- এটি বর্ণনামূলক নামমুক্ত
- এটি অ-বর্ণনামূলক নামের সাথে বিশৃঙ্খল
আপনি যদি এটির নামের সাথে এটি প্রসারিত করেন যা নতুন, ভাল, অর্থপূর্ণ অর্থ যুক্ত করে, আরও ভাল! একটি ভাল নাম আমাকে বুঝতে সাহায্য করে।
var temperature = H1(b1);
var humidity = H2(b2);
var precipitation = G1(temperature, humidity);
var dewPoint = G2(c1);
var forecast = F(precipitation, dewPoint);
এখন কমপক্ষে এটি একটি গল্প বলে। এটি সমস্যাগুলি সংশোধন করে এবং এখানে প্রদত্ত যে কোনও কিছুর চেয়ে স্পষ্টতই ভাল তবে এটির জন্য আপনাকে নামগুলি উপস্থিত করা প্রয়োজন।
যদি আপনি এটি অর্থহীন নামগুলির মতো করে করেন result_this
এবং result_that
কারণ আপনি কেবল ভাল নামগুলি ভাবতে পারেন না তবে আমি আপনাকে অবশ্যই অর্থহীন নাম বিশৃঙ্খলা বাদ দিয়ে কিছু ভাল পুরাতন শ্বেত স্পেস ব্যবহার করে এটি প্রসারিত করতে পছন্দ করব:
int a =
F(
G1(
H1(b1),
H2(b2)
),
G2(c1)
)
;
অর্থহীন ফলাফলের নামগুলির চেয়ে এটি যতটা পঠনযোগ্য, তত বেশি না পঠনযোগ্য (এই ফাংশনের নামগুলি যে দুর্দান্ত তা নয়)।
এটা ঘন
কিছু ডিবাগার কেবল একবারে পুরো বিষয়টি হাইলাইট করবে
- এটি বর্ণনামূলক নামমুক্ত
এটি অ-বর্ণনামূলক নামের সাথে বিশৃঙ্খল
আপনি যখন ভাল নাম চিন্তা করতে পারেন না, এটি যতটা ভাল তা পায়।
কোনও কারণে ডিবাগারগুলি নতুন রেখাগুলি পছন্দ করে তাই আপনার এটি খুঁজে পাওয়া উচিত যে এটির ডিবাগিংটি কঠিন নয়:
যদি এটি পর্যাপ্ত না G2()
হয় তবে কল্পনাটি একাধিক জায়গায় ডাকা হয়েছিল এবং তারপরে এটি ঘটেছিল:
Exception in thread "main" java.lang.NullPointerException
at composition.Example.G2(Example.java:34)
at composition.Example.main(Example.java:18)
আমি মনে করি এটি দুর্দান্ত যেহেতু প্রতিটি G2()
কল তার নিজস্ব লাইনে থাকবে, এই স্টাইলটি আপনাকে সরাসরি আপত্তিজনক কলটিতে নিয়ে যায়।
সুতরাং দয়া করে আমাদের সমস্যাটি আটকে রাখার অজুহাত হিসাবে 1 এবং 2 সমস্যাটি ব্যবহার করবেন না 4.. আপনি যখন সেগুলি সম্পর্কে ভাবতে পারেন তখন ভাল নাম ব্যবহার করুন। যখন আপনি পারবেন না তখন অর্থহীন নামগুলি এড়িয়ে চলুন।
অরবিটের মন্তব্যে লাইটনেস রেসগুলি সঠিকভাবে উল্লেখ করেছে যে এই ফাংশনগুলি কৃত্রিম এবং তাদের মৃত দুর্বল নামগুলি রয়েছে। তাই বন্য থেকে কিছু কোডে এই স্টাইলটি প্রয়োগ করার একটি উদাহরণ এখানে দেওয়া হয়েছে:
var user = db.t_ST_User.Where(_user => string.Compare(domain,
_user.domainName.Trim(), StringComparison.OrdinalIgnoreCase) == 0)
.Where(_user => string.Compare(samAccountName, _user.samAccountName.Trim(),
StringComparison.OrdinalIgnoreCase) == 0).Where(_user => _user.deleted == false)
.FirstOrDefault();
শব্দের মোড়কের প্রয়োজন নেই এমন কি শব্দের প্রবাহের দিকে তাকাতেও আমি ঘৃণা করি। এই স্টাইলের নীচে এটি দেখতে কেমন তা এখানে দেখুন:
var user = db
.t_ST_User
.Where(
_user => string.Compare(
domain,
_user.domainName.Trim(),
StringComparison.OrdinalIgnoreCase
) == 0
)
.Where(
_user => string.Compare(
samAccountName,
_user.samAccountName.Trim(),
StringComparison.OrdinalIgnoreCase
) == 0
)
.Where(_user => _user.deleted == false)
.FirstOrDefault()
;
আপনি দেখতে পাচ্ছেন, আমি খুঁজে পেয়েছি যে এই স্টাইলটি কার্যকরী কোডের সাথে ভালভাবে কাজ করে যা অবজেক্ট ওরিয়েন্টেড স্পেসে চলেছে। যদি আপনি মধ্যবর্তী শৈলীতে এটি করতে ভাল নাম নিয়ে আসতে পারেন তবে আপনার কাছে আরও শক্তি। ততক্ষণে আমি এটি ব্যবহার করছি। তবে যে কোনও ক্ষেত্রে, দয়া করে অর্থহীন ফলাফলের নামগুলি এড়ানোর জন্য কোনও উপায় সন্ধান করুন। তারা আমার চোখে আঘাত করে।