2012-07-13 11 views
29

मैं एक पुस्तक पढ़ रहा हूं - बिग नेर्ड रांच आईओएस प्रोग्रामिंग। यह कहता है कि डॉट नोटेशन की अनुशंसा नहीं की जाती है क्योंकि यह कोड को खराब करता है। मैं साथ ही आईओएस प्रोग्रामिंग के लिए स्टैनफोर्ड कोर्स देख रहा हूं और इसमें वह डॉट नोटेशन का व्यापक रूप से उपयोग कर रहा है। आप क्या सुझाव देंगे? मैं व्यक्तिगत रूप से अधिक जानकारी को ब्रैकेट करने के लिए दुबला हूं।उद्देश्य-सी डॉट नोटेशन या स्क्वायर ब्रैकेट नोटेशन में क्या पसंद किया जाता है?

क्या आप कृपया इस कोड को ब्रैकेट नोटेशन में कैसे घुमाने के बारे में बता सकते हैं?

self.display.text = [self.display.text stringByAppendingString:digit]; 

के रूप में मैं समझता हूँ कि यह होना चाहिए:

[[self display] setText]:[[[self display] text] stringByAppendingString:digit]; 

यह सही है?

+1

यह ज्यादातर व्यक्तिगत वरीयता का मामला है। – omz

उत्तर

46

यह व्यक्तिगत पसंद का मामला है। ऐसे लोग हैं जो तर्क देते हैं कि डॉट नोटेशन यह स्पष्ट नहीं करता है कि संदेश भेजे जा रहे हैं (विधियों को बुलाया जा रहा है) क्योंकि यह सी-स्टाइल संरचना तत्व पहुंच की तरह दिखता है। तर्क का दूसरा पक्ष यह है कि डॉट नोटेशन टाइप करना आसान है, पढ़ने में आसान है, और अधिक संक्षिप्त है।

डॉट नोटेशन (ऑब्जेक्टिव-सी 2.0 में) से पहले उद्देश्य-सी लिखने वाले व्यक्ति के रूप में, मैं दोनों तरफ के तर्कों को समझ सकता हूं, लेकिन डॉट नोटेशन का उपयोग करना पसंद करता हूं। उस ने कहा, मुझे लगता है कि उद्देश्य-सी से शुरू होने वाले लोगों के लिए यह महत्वपूर्ण है कि संकुचित होने पर डॉट नोटेशन सिंटैक्स मानक एक्सेसर विधि कॉल में परिवर्तित हो जाता है। मुझे लगता है कि बिग नेर्ड रांच पुस्तक के लेखकों के पास शायद एक समान रवैया है, और यह एक बड़ा हिस्सा है कि उन्होंने पुस्तक में ब्रैकेट नोटेशन का उपयोग करने का फैसला क्यों किया।

तो संक्षेप में, जो भी आपको सबसे अच्छा लगता है। दोनों मान्य हैं, और दोनों के बीच चुनाव अनिवार्य रूप से शैली का मामला है। कोई फर्क नहीं पड़ता कि आप क्या चुनते हैं, सुनिश्चित करें कि आप समझते हैं कि दोनों शैलियों समकक्ष संकलित कोड उत्पन्न करती हैं।

संपादित करें: मैं डॉट नोटेशन को ब्रैकेट सिंटैक्स में परिवर्तित करने के बारे में प्रश्न का उत्तर देना भूल गया। आप करीब हैं, लेकिन जो आपने लिखा है वह गलत है और वास्तव में संकलित नहीं होगा। यह होना चाहिए: [[self display] setText:[[[self display] text] stringByAppendingString:digit]]

NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit]; 
[[self display] setText:stringWithDigit]; 

संपादित करें 2:: मैं इसे दो पंक्तियों (ठीक है, वास्तव में मैं डॉट नोटेशन का उपयोग करेंगे) में विभाजित था मैं इसे लिख रहे थे, तो यह 3 साल से अधिक कर दिया गया है के बाद से मैं इस जवाब में लिखा था। मैं सिर्फ यह ध्यान रखना चाहता था कि इन दिनों, एक बहुत अधिक ऐप्पल फ्रेमवर्क कक्षाओं में ऐसी चीजें हैं जो पहले से ही नियमित तरीके से @properties (उदा। -[NSArray count]) में परिवर्तित की गई थीं, संभवतः बेहतर स्विफ्ट इंटरऑप के लिए। इसने मुझे डॉट नोटेशन का उपयोग करने के लिए और भी उदारतापूर्वक उपयोग करने के लिए प्रेरित किया है।

तुम हमेशा डॉट नोटेशन का उपयोग करना चाहिए, जब भी आप गुणों के साथ काम कर रहे:

+7

+1, एक आरामदायक ओब्जे-सी उपयोगकर्ता के रूप में मुझे नहीं पता था कि मैं कुछ बिंदुओं के साथ 10 मिलियन ब्रैकेट को प्रतिस्थापित कर सकता हूं। मैंने ज्यादातर मामलों में माना कि वे संरचना का उपयोग कर रहे थे। – user7116

+0

@Andrew Madsen वह कोड है जिसे मैंने सही उद्धृत किया है? ब्रैकेट एक। – Dvole

+0

क्षमा करें, मैंने वास्तव में आपके प्रश्न के उस हिस्से का जवाब नहीं दिया था! मैंने अपना जवाब संपादित कर लिया है। उत्तर के लिए –

8

यहाँ मेरी राय है। न केवल लिखना तेज़ है (self.foo के पास [लघु foo] से कम वर्ण हैं) लेकिन अधिक महत्वपूर्ण बात यह है कि यह जंजीर संदेशों को समझने में आसान बनाता है। उदाहरण के लिए:

self.myTextField.text.length

से

[[[self myTextField] text] length]

साथ ही समझना आसान है, यह यह कम आप गंदगी विराम चिह्न (सुनिश्चित करें कि आप सही संख्या है बनाना होगा कि संभावना बढ़ जाती है ब्रैकेट्स अक्सर दर्द होता है)।

लेकिन, जैसा कि अन्य लोगों ने ऊपर बताया है, आखिरकार यह व्यक्तिगत राय है।

+12

मजेदार, हालांकि, 'लंबाई' 'NSString' पर' @ property' नहीं है। ;) – bbum

+3

दिलचस्प बात यह है कि जंजीर गुणों का एक ही उदाहरण आमतौर पर यह इंगित करने के लिए प्रयोग किया जाता है कि ब्रैकेट नोटेशन आपको वास्तव में क्या हो रहा है की बेहतर दृश्यता देता है। – Munhitsu

+2

सहमत हैं, लेकिन फिर हमें यह पता लगाना होगा कि वास्तव में संपत्ति कौन सा है, जो वास्तव में संदेश – onmyway133

6

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन मैं एक और आधुनिक उत्तर जोड़ना चाहता हूं।

तेजी से और हमारी पसंदीदा भाषा के आने वाले निधन के रिलीज के साथ, वरीयता डॉट नोटेशन की तरफ झुकना चाहिए। सभी आईओएस ढांचे ने डॉट नोटेशन के पक्ष में अपने एपीआई को अपडेट किया है (गेटर्स को हेडर में रीडोनली प्रॉपर्टी पसंद करते हैं)। यह तेजी से अधिक तरल पदार्थ की ओर अंतिम अनुवाद बनाता है।

स्पष्ट होने के लिए, उन उदाहरणों के गुणों को प्राथमिकता दें जहां आप गेटर्स और/या सेटर्स का पर्दाफाश कर रहे हैं। सौभाग्य से एक्सकोड का modern objective-c migration tool आपके लिए इनमें से अधिकतर करेगा।

+0

कोई आसानी से बिल्कुल विपरीत तर्क दे सकता है: उद्देश्य-सी बनाता है में ब्रैकेट का उपयोग करना दोनों भाषाओं के बीच अंतर करना आसान है। यह अभी भी काफी हद तक व्यक्तिगत पसंद का मामला है, लेकिन मुझे ओब्जे-सी में डॉट नोटेशन पसंद करने का कोई कारण नहीं है क्योंकि इसका उपयोग स्विफ्ट में किया जाता है। ओब्जे-सी एक अलग भाषा है; यह स्विफ्ट में मोर्फ़िंग नहीं कर रहा है, और आपके ओब्जे-सी कोड को और अधिक स्विफ्ट-वाई बनाने में कोई बात नहीं है। – Caleb

+1

@ कैलेब ताकि आप सुझाव दे रहे हैं कि हम तेजी से अनदेखा करते हैं और पुरानी, ​​ब्रैकेट भारी उद्देश्य सी वाक्यविन्यास रखते हैं? इस तथ्य के बावजूद कि सभी आईओएस ढांचे डॉट गुणों में संक्रमण कर रहे हैं? –

+0

यह न देखें कि आप अपने कोड –

संबंधित मुद्दे