আমি জানি না যে "এটি একটি স্ট্যাটিক বিশ্লেষণ করতে পারে না এবং প্রায়শই তা করতে পারে না" যে দাবিটি এসেছে। জোরের প্রথম অংশটি স্পষ্টতই ভুল। দ্বিতীয়টি "ঘন ঘন" আপনি কী বোঝাতে চান তার উপর নির্ভর করে। আমি বরং বলব যে প্রায়শই এটি স্থির বিশ্লেষণ করে এবং খুব কমই এটি এতে ব্যর্থ হয়। সাধারণ ব্যবসায়িক প্রয়োগে, খুব কমই কখনই হয় না এর থেকে খুব কাছের হয়ে যায় ।
সুতরাং এখানে এটি প্রথম সুবিধা:
সুবিধা 1: স্থির বিশ্লেষণ
সাধারণ দাবি এবং যুক্তি যাচাইয়ের একটি ত্রুটি রয়েছে: কোডটি কার্যকর না হওয়া পর্যন্ত এগুলি স্থগিত করা হয়। অন্যদিকে কোড কোডগুলি কোডিং পদক্ষেপে বা অ্যাপ্লিকেশনটি সংকলনের সময় অনেক পূর্বের স্তরে প্রকাশিত হয়। আগে আপনি কোনও ত্রুটি ধরেন, এটি ঠিক করা কম ব্যয়বহুল।
উপকার 2: সর্বদা আপ ডেট ডকুমেন্টেশন সাজান
কোড চুক্তিগুলি এক ধরণের ডকুমেন্টেশন সরবরাহ করে যা সর্বদা আপ টু ডেট থাকে। যদি পদ্ধতির এক্সএমএল মন্তব্যটি SetProductPrice(int newPrice)বলে যে newPriceএটি শূন্যের চেয়ে উচ্চতর বা সমান হওয়া উচিত, আপনি আশা করতে পারেন যে ডকুমেন্টেশনটি আপ টু ডেট রয়েছে তবে আপনি এটি আবিষ্কার করতে পারেন যে কেউ পদ্ধতিটি পরিবর্তন করেছে যাতে newPrice = 0একটি নিক্ষেপ করেArgumentOutOfRangeException , তবে সংশ্লিষ্ট ডকুমেন্টেশনগুলি কখনও পরিবর্তন করেনি। কোড চুক্তি এবং কোডের মধ্যেই পারস্পরিক সম্পর্ক সম্পর্কিত, আপনার সিঙ্কের বাইরে থাকা ডকুমেন্টেশন সমস্যা নেই।
কোড চুক্তি দ্বারা সরবরাহিত ডকুমেন্টেশনগুলি এমনভাবে মূল্যবানও হয় যে প্রায়শই, এক্সএমএল মন্তব্যগুলি গ্রহণযোগ্য মানগুলি ভালভাবে ব্যাখ্যা করে না। কতবার আমি হতাশ যদি ছিল nullবা string.Emptyবা \r\nএকটি পদ্ধতি জন্য একজন অনুমোদিত মান, এবং XML মন্তব্য যে নীরব ছিল!
উপসংহারে, কোড চুক্তি ব্যতীত প্রচুর কোডের টুকরো এরকম:
আমি কিছু মানগুলি গ্রহণ করব তবে অন্য নয়, তবে আপনাকে যদি ডকুমেন্টেশন অনুমান করতে বা পড়তে হবে তবে তা যদি থাকে। আসলে, ডকুমেন্টেশন পড়বেন না: এটি পুরানো। কেবল সমস্ত মানগুলি লুপ করুন এবং আপনি সেগুলি দেখতে পাবেন যা আমাকে ব্যতিক্রম ছুঁড়ে ফেলেছে। আপনাকে যে মানগুলি ফিরিয়ে দেওয়া হতে পারে তার পরিসীমাও অনুমান করতে হবে, কারণ আমি তাদের সম্পর্কে আপনাকে আরও কিছু বলি, যদিও এটি সত্য নাও হতে পারে, গত কয়েক বছর ধরে আমাকে করা শত শত পরিবর্তনগুলি।
কোড চুক্তিগুলির সাথে এটি হয়ে যায়:
শিরোনাম আর্গুমেন্ট 0..500 দৈর্ঘ্য সহ একটি নন-নাল স্ট্রিং হতে পারে। পূর্বে পূর্ণসংখ্যাটি একটি ধনাত্মক মান, যা স্ট্রিং ফাঁকা থাকলেই শূন্য হতে পারে। অবশেষে, আমি কোনও IDefinitionবস্তু ফিরিয়ে দেব , কখনই শূন্য নয়।
সুবিধা 3: ইন্টারফেসের চুক্তি
তৃতীয় সুবিধা হ'ল কোড চুক্তিগুলি ইন্টারফেসকে শক্তিশালী করে। আসুন বলি যে আপনার মতো কিছু রয়েছে:
public interface ICommittable
{
public ICollection<AtomicChange> PendingChanges { get; }
public void CommitChanges();
...
}
আপনি কীভাবে কেবলমাত্র দৃser়পদ এবং ব্যাতিক্রমগুলি ব্যবহার করে গ্যারান্টিটি খালি না CommitChangesহলে কেবল কল করা যেতে পারে PendingChanges? আপনি PendingChangesকখনই গ্যারান্টি দিবেন যে কখনই নয় null?
সুবিধা 4: একটি পদ্ধতির ফলাফল কার্যকর করুন
অবশেষে, চতুর্থ সুবিধাটি Contract.Ensureফলাফলের পক্ষে সক্ষম হবেন । যদি কোনও পদ্ধতিটি যখন পূর্ণসংখ্যাকে ফেরত দেয়, তখন আমি নিশ্চিত হতে চাই যে মানটি কখনই নিকৃষ্ট বা শূন্যের সমান নয়? পাঁচ বছর পরে, প্রচুর বিকাশকারীদের প্রচুর পরিবর্তন সহ্য করার পরে? যত তাড়াতাড়ি কোনও পদ্ধতিতে একাধিক রিটার্ন পয়েন্ট থাকে, Assertএর জন্য এটি একটি রক্ষণাবেক্ষণের দুঃস্বপ্ন হয়ে যায়।
কোড চুক্তিগুলি কেবল আপনার কোডের সঠিকতার মাধ্যম হিসাবে বিবেচনা করবেন না, কোড লেখার আরও কঠোর উপায়। একইভাবে, কোনও ব্যক্তি যিনি একচেটিয়া গতিশীল ভাষা ব্যবহার করেছিলেন সে জিজ্ঞাসা করতে পারে আপনি ভাষা স্তরে কেন প্রকার প্রয়োগ করবেন, যখন আপনি প্রয়োজনের সময় দৃser়তার সাথে একই জিনিসটি করতে পারেন। আপনি পারেন, তবে স্থির টাইপিং ব্যবহার করা সহজ, তাত্পর্যপূর্ণ সংস্থার তুলনায় কম ত্রুটি-প্রবণতা এবং স্ব-ডকুমেন্টিং।
ডায়নামিক টাইপিং এবং স্ট্যাটিক টাইপিংয়ের মধ্যে পার্থক্য সাধারণ প্রোগ্রামিং এবং প্রোগ্রামিং এর মাধ্যমে চুক্তির মাধ্যমে পার্থক্যটির খুব কাছাকাছি।