तराज़ू

तराज़ू

सीखने का अभ्यास

परिचय

प्रॉपर्टी

C# में प्रॉपर्टी क्लास का एक सदस्य होती है, जो उस क्लास के अंदर मौजूद डेटा तक पहुँच देती है। इसे कॉल करने वाला कोड उस डेटा को सेट कर सकता है या प्राप्त (get) कर सकता है। प्रॉपर्टी या तो ऑटो-इम्प्लीमेंटेड हो सकती है, या उसके पीछे एक बैकिंग फील्ड होता है। इनमें एक set एक्सेसर और/या एक get एक्सेसर होता है। कुछ अन्य भाषाओं में म्यूटेटर लगभग set एक्सेसर जैसा होता है और एक्सेसर लगभग get एक्सेसर जैसा, हालाँकि इन दोनों के सिंटैक्स की बनावट बिल्कुल अलग होती है।

किसी प्रॉपर्टी को सेट करते समय इनपुट वैल्यू की जाँच की जा सकती है, उसे फॉर्मेट किया जा सकता है, या किसी और तरीके से बदला जा सकता है। वास्तव में, क्लास के कोड के लिए उपलब्ध कोई भी प्रोग्रामेटिक काम किया जा सकता है।

इसी तरह, प्रॉपर्टी से डेटा प्राप्त करते समय डेटा की गणना या फॉर्मेटिंग की जा सकती है, और यहाँ भी क्लास के लिए उपलब्ध कोई भी प्रोग्रामेटिक काम किया जा सकता है।

प्रॉपर्टी में भी बाकी क्लास सदस्यों की तरह एक्सेस मॉडिफायर (public, private आदि) होते हैं, लेकिन set एक्सेसर का एक्सेस लेवल get एक्सेसर से स्वतंत्र हो सकता है, और इसका उलटा भी। यह ज़रूरी नहीं कि प्रॉपर्टी में दोनों एक्सेसर हों; उसमें सिर्फ एक भी हो सकता है (या get, या set)।

प्रॉपर्टी लिखने के लिए बुनियादी सिंटैक्स दो रूपों में हो सकता है:

फील्ड/एक्सप्रेशन पर आधारित प्रॉपर्टी:

private int myField;
public int MyProperty
{
    get { return myField; }
    set { myField = value; }
}

ऑटो-इम्प्लीमेंटेड प्रॉपर्टी

public int MyProperty { get; private set; } = 42;

इनिशियलाइज़ेशन ज़रूरी नहीं है।

निर्देश

इस अभ्यास में आप किलोग्राम को इकाई मानकर एक वेइंग मशीन का मॉडल बनाएँगे।

आपके सामने छह काम हैं, और हर काम में आपको एक या उससे अधिक प्रॉपर्टी लागू करनी है:

1. वेइंग मशीन में प्रिसिज़न रखने की सुविधा दीजिए

अलग-अलग ज़रूरतों को पूरा करने के लिए हम हर वेइंग मशीन को उसकी अपनी प्रिसिज़न देने की सुविधा देते हैं (प्रिसिज़न यानी दशमलव चिह्न के बाद अंकों की संख्या)। WeighingMachine क्लास में एक सिर्फ पढ़ने वाली Precision प्रॉपर्टी लागू कीजिए, जो कंस्ट्रक्टर के precision आर्गुमेंट से सेट होती है:

var wm = new WeighingMachine(precision: 3);

//  => wm.Precision == 3

2. वेइंग मशीन पर वज़न सेट करने की सुविधा दीजिए

WeighingMachine.Weight प्रॉपर्टी को ऐसे लागू कीजिए कि वज़न पढ़ा भी जा सके और सेट भी किया जा सके:

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;

//  => wm.Weight == 60.5

3. ऋणात्मक वज़न अस्वीकार हो, यह सुनिश्चित कीजिए

साफ है, किसी व्यक्ति का वज़न ऋणात्मक नहीं हो सकता। WeighingMachine.Weight प्रॉपर्टी में वैलिडेशन जोड़िए, ताकि उसमें ऋणात्मक वज़न सेट करने की कोशिश करने पर ArgumentOutOfRangeException फेंका जाए:

var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException

4. वेइंग मशीन पर टेयर एडजस्टमेंट लागू करने की सुविधा दीजिए

टेयर एडजस्टमेंट की वैल्यू कुछ भी हो सकती है, ऋणात्मक भी, या ऐसी भी जिससे प्रदर्शित होने वाला वज़न ऋणात्मक हो जाए। WeighingMachine.TareAdjustment प्रॉपर्टी लागू कीजिए, ताकि टेयर एडजस्टमेंट सेट किया जा सके:

var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;

// => wm.TareAdjustment == -10.6

5. वेइंग मशीन में डिफॉल्ट टेयर एडजस्टमेंट हो, यह सुनिश्चित कीजिए

पूरी तरह जाँच करने पर पता चला कि निर्माण की किसी खामी के कारण हर वेइंग मशीन वज़न को 5 अधिक बताती है। WeighingMachine.TareAdjustment प्रॉपर्टी की डिफॉल्ट वैल्यू 5 कर दीजिए।

var wm = new WeighingMachine(precision: 3);

// => wm.TareAdjustment == 5.0

6. वज़न प्राप्त करने की सुविधा दीजिए

WeighingMachine.DisplayWeight प्रॉपर्टी लागू कीजिए। यह एक स्ट्रिंग लौटाती है जिसमें टेयर एडजस्टमेंट लगाने के बाद का वज़न, सही प्रिसिज़न के साथ और इकाई जोड़कर दिखाया जाता है। ध्यान दीजिए: display-weight = input-weight - tare-adjustment

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;

// => wm.DisplayWeight == "50.567 kg"
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
C# Exercism

तराज़ू शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।