उद्देश्य-सी [बंद] सीखने से पहले C जानें


107

एक महत्वाकांक्षी Apple डेवलपर होने के नाते, मैं समुदाय की राय प्राप्त करना चाहता हूं यदि उद्देश्य-सी और अंततः कोको फ्रेमवर्क में जाने से पहले सी सीखना बेहतर है?

मेरी आंत कहती है कि सी सीखो, जो मुझे एक अच्छी नींव देगा।

जवाबों:


163

मैं पहले C सीखता। मैंने ओज-सी में जाने से पहले सी सीखा (और सी में बहुत कुछ किया)। मेरे कई सहयोगी हैं जो कभी वास्तविक सी प्रोग्रामर नहीं थे, उन्होंने ओब्ज-सी के साथ शुरुआत की और केवल उतना ही सी सीखा जितना आवश्यक था।

हर अब और फिर मैं देखता हूं कि वे पूरी तरह से ओब्ज-सी में एक समस्या को कैसे हल करते हैं, कभी-कभी बहुत ही अनाड़ी समाधान होते हैं। आमतौर पर मैं तब कुछ ओज-सी कोड को शुद्ध सी कोड के साथ बदल देता हूं (आखिरकार आप उन्हें जितना चाहें मिला सकते हैं, ओब्ज-सी विधि की सामग्री पूरी तरह से, शुद्ध सी कोड हो सकती है)। किसी भी ओबज-सी प्रोग्रामर का अपमान करने के इरादे के बिना, ऐसे समाधान हैं जो ओब्ज-सी में बहुत सुरुचिपूर्ण हैं, ये ऐसे समाधान हैं जो सिर्फ काम करते हैं (और देखो) वस्तुओं के लिए बहुत बेहतर धन्यवाद(ओओपी प्रोग्रामिंग जटिल कार्यक्रमों को कार्यात्मक प्रोग्रामिंग की तुलना में बहुत अधिक प्यारा बना सकती है; उदाहरण के लिए बहुरूपता एक शानदार विशेषता है) ... और मुझे वास्तव में ओब्ज-सी पसंद है (सी ++ की तुलना में बहुत अधिक! मैं सी ++ सिंटैक्स से नफरत करता हूं और कुछ भाषा विशेषताएं सादे टखने हैं! और खराब विकास प्रतिमान IMHO); हालांकि, जब मैं कभी-कभी अपने सहयोगियों के ओबज-सी कोड को फिर से लिखता हूं (और मैं वास्तव में केवल ऐसा करता हूं, अगर मुझे लगता है कि यह बिल्कुल आवश्यक है), तो परिणामस्वरूप कोड आमतौर पर 50% छोटा होता है, इसके लिए केवल 25% मेमोरी की आवश्यकता होती है पहले और रनटाइम के दौरान लगभग 400% तेज है।

मैं यहाँ क्या कहने की कोशिश कर रहा हूँ: हर भाषा के नियम और विपक्ष होते हैं। C के पास पेशेवरों और विपक्ष हैं और इसलिए Obj-C है। हालांकि, ओबज-सी की वास्तव में बहुत बड़ी विशेषता (यही कारण है कि मुझे यह जावा की तुलना में अधिक पसंद है) यह है कि आप फिर से सादे सी में कूद सकते हैं और फिर से वापस आ सकते हैं। यह इतनी बड़ी विशेषता क्यों है? चूँकि जैसे ओब्ज-सी शुद्ध सी के विपक्ष में से कई को ठीक करता है, वैसे ही शुद्ध सी ओब्ज-सी के कुछ विपक्ष को ठीक कर सकता है। यदि आप उन्हें एक साथ मिलाते हैं तो आपको एक बहुत शक्तिशाली टीम प्राप्त होगी।

यदि आप केवल ओबज-सी सीखते हैं और सी का कोई पता नहीं है या केवल इसके मूल आधारों को जानते हैं और यह कभी नहीं कोशिश की है कि कैसे यह सामान्य रूप से कुछ सामान्य समस्याओं को हल कर सकता है, तो आप वास्तव में ओबज-सी का केवल आधा हिस्सा ही सीख सकते हैं। C, Obj-C का एक मूलभूत हिस्सा है। किसी भी समय और हर जगह सी का उपयोग करने की क्षमता इसकी एक मूलभूत विशेषता है।

एक विशिष्ट उदाहरण हमारे द्वारा उपयोग किए गए कुछ कोड थे, जिन्हें बेस 64 में डेटा को एनकोड करना था, लेकिन हम इसके लिए कोई बाहरी लाइब्रेरी (ओपनएसएसएल के कोई भी काम नहीं) का उपयोग नहीं कर सकते थे। हमने एक बेस 64 एनकोडर का उपयोग किया, जो पूरी तरह से कोको वर्गों का उपयोग करके लिखा गया था। यह ठीक काम कर रहा था, लेकिन जब हमने इसे 200 एमबी बाइनरी डेटा एनकोड किया, तो इसने अनंत काल ले लिया और मेमोरी ओवरहेड अस्वीकार्य था। मैंने इसे एक छोटे, अल्ट्रा कॉम्पैक्ट बेस 64 एनकोडर के साथ पूरी तरह से एक सी फ़ंक्शन के रूप में लिखा (मैंने फ़ंक्शन बॉडी को विधि बॉडी में कॉपी किया, विधि ने एनएसडाटा को इनपुट के रूप में लिया और एनएसएसट्रिंग को आउटपुट के रूप में लौटा दिया, हालांकि फ़ंक्शन के अंदर सब कुछ सी था)। सी एनकोडर इतना अधिक कॉम्पैक्ट था, इसने शुद्ध कोको एनकोडर को कारक 8 में गति से हराया और मेमोरी ओवरहेड भी बहुत कम था। डेटा एन्कोडिंग / डिकोडिंग, बिट्स के साथ खेलना और समान स्तर के समान कार्य केवल C के मजबूत बिंदु हैं।

एक अन्य उदाहरण कुछ यूआई कोड था जो बहुत सारे ग्राफ़ खींचता था। ग्राफ़ को चित्रित करने के लिए आवश्यक डेटा संग्रहीत करने के लिए, हमने NSArray का उपयोग किया। वास्तव में NSMutableArray है, क्योंकि ग्राफ एनिमेटेड था। परिणाम: बहुत धीमा ग्राफ एनीमेशन। हमने सभी NSArray को सामान्य C सरणियों के साथ बदल दिया, वस्तुओं के साथ संरचना (सभी ग्राफ समन्वय जानकारी के बाद आपके पास वस्तुओं में कुछ भी नहीं होना चाहिए), लूप के लिए सरल के साथ अभिगमकर्ता पहुंच और एक सरणी से डेटा लेने के बजाय मेमकोपी के साथ सरणियों के बीच डेटा स्थानांतरित करना शुरू कर दिया। अन्य एक, सूचकांक के लिए सूचकांक। परिणाम: कारक द्वारा गति। 4. पुराने पीपीसी सिस्टम पर भी ग्राफ सुचारू रूप से एनिमेटेड।

C की कमजोरी यह है कि हर अधिक जटिल कार्यक्रम लंबे समय में बदसूरत हो जाता है। सी अनुप्रयोगों को पठनीय, एक्स्टेंसिबल और मैनेज करने योग्य रखने से प्रोग्रामर के बहुत सारे अनुशासन की मांग होती है। कई प्रोजेक्ट विफल हो जाते हैं क्योंकि यह अनुशासन गायब है। ओबज-सी आपको कक्षाओं, वंशानुक्रम, प्रोटोकॉल और इसी तरह का उपयोग करके अपने आवेदन को संरचना करना आसान बनाता है। जब तक मैं आवश्यक न हो, मैं किसी विधि की सीमाओं के पार शुद्ध C कार्यक्षमता का उपयोग नहीं करूंगा। मैं ऑब्जेक्ट के तरीके के भीतर सभी कोड को ऑब्जेक्टिव-सी ऐप में रखना पसंद करता हूं; बाकी सब कुछ OO अनुप्रयोग के उद्देश्य को पराजित करता है। हालाँकि इस पद्धति के भीतर मैं कभी-कभी विशुद्ध रूप से सी का उपयोग करता हूं।


और अगर मैं पहले से ही c ++ जानता हूं और iPhone / iTouch deveopment के लिए Objective-C सीखना चाहता हूं, तो क्या C को सीखना आवश्यक है?
chester89

11
@ chester89: यदि आप पहले से ही C ++ जानते हैं, तो आप C- के बारे में पर्याप्त जानते हैं, जिसका उद्देश्य उद्देश्य-सी के साथ शुरू करना है।
स्वेन

स्वेन सही है, सी ++ बहुत जटिल है और पहले से ही शुद्ध सी का इतना उपयोग करता है, यदि आप सी ++ को वास्तव में अच्छी तरह से जानते हैं, तो आपको सी को भी अच्छी तरह से जानना चाहिए।
मिकी

इस विषय पर मेरा पसंदीदा संगीत अभी तक है, धन्यवाद।
मॉर्क्रोम

1
@FrederikWitte C ++ को छोड़ दें, यह केवल आपको एक शुरुआत के रूप में भ्रमित करेगा (और यह ऐसी भाषा नहीं है जिसे आपको मोबाइल विकास की आवश्यकता होगी)। जावा से शुरू करें, यह एक अच्छी शिक्षण भाषा है और सिर्फ जावा को जानना Android के लिए विकसित करने के लिए पर्याप्त है (हो सकता है कि जब तक आप गेम या वीडियो प्लेयर या ऐसा लिखना नहीं चाहते हों)। तब तक C और अंत में Obj-C सीखें, जब तक कि आप उस सभी को छोड़ना नहीं चाहते हैं, बजाय एक स्विफ्ट सीखें। आपकी पंसद।
मैकी

25

आप एक ही समय में आसानी से सी और ऑब्जेक्टिव-सी सीख सकते हैं - भाषा के लिए ऑब्जेक्टिव-सी के अतिरिक्त के साथ शुरू करने से पहले, और (एक नौसिखिया प्रोग्रामर के रूप में) सी की मिनुतिया (सूचक अंकगणित और इतने पर सहित) सीखने की कोई आवश्यकता नहीं है। उद्देश्य-सी के साथ जल्दी से गुजरना आपको "वस्तुओं में सोच" को और अधिक तेज़ी से शुरू करने में मदद कर सकता है।

उपलब्ध संसाधनों के संदर्भ में, Apple का प्रलेखन आम तौर पर C से परिचित होता है, इसलिए The Objective-C 2.0 प्रोग्रामिंग लैंग्वेज के साथ शुरू करने से आपको ज्यादा फायदा नहीं होगा। मैं स्टीफन कोचन द्वारा ऑब्जेक्टिव-सी में प्रोग्रामिंग की एक प्रति में निवेश करेगा (यह इस पर निर्भर करता है कि आप कितनी जल्दी से गुजरना चाहते हैं, आप दूसरे संस्करण की प्रतीक्षा कर सकते हैं):

प्रोग्रामिंग ऑब्जेक्टिव-सी डेवलपर्स लाइब्रेरी प्रोग्रामिंग ऑब्जेक्टिव-सी 2.0 डेवलपर्स लाइब्रेरी

यह कोई पूर्व अनुभव नहीं मानता है, और आपको उद्देश्य-सी और जितना आवश्यक हो उतना सी सिखाता है।

यदि आप थोड़ा महत्वाकांक्षी महसूस कर रहे हैं, तो आप स्कॉट स्टीवेन्सन के "लर्न सी" ट्यूटोरियल के साथ शुरू कर सकते हैं , लेकिन इसमें कुछ पूर्वापेक्षाएँ हैं ("आपको पहले से ही कम से कम एक स्क्रिप्टिंग या प्रोग्रामिंग भाषा पता होनी चाहिए, जिसमें फ़ंक्शन, चर और लूप शामिल हैं। '' Mac OS X टर्मिनल में कमांड लिखने की भी आवश्यकता होगी। ")।

(सिर्फ रिकॉर्ड के लिए और संदर्भ के लिए: मैंने 1991 में एक ही समय में दोनों को सीखा - यह मुझे कोई नुकसान नहीं पहुंचा। मैंने हालांकि, बेसिक, पास्कल, लोगो और LISP में एक पृष्ठभूमि की है। )


2
आपको पूरी तरह से पहले C सीखना आवश्यक नहीं होना चाहिए। खासकर यदि आप पहले से ही जावा की C # जैसी भाषा जानते हैं। C # और Java उद्देश्य सी के लिए बहुत अधिक है। हालांकि C # उल्लू के अनुभव और डेल्फी के साथ गलतियों के कारण अधिक है।
डैनियल होनिग ऑक्ट

18

मैंने ऑब्जेक्टिव-सी पर अपनी किताब लिखने से पहले इस मुद्दे पर बहुत सोचा। पहला, मैं वास्तव में मानता हूं कि ऑब्जेक्टिव-सी सीखने से पहले सी भाषा सीखना गलत रास्ता है। सी एक प्रक्रियात्मक हैकई विशेषताओं वाली भाषा, जो विशेष रूप से नौसिखिए स्तर पर, उद्देश्य-सी में प्रोग्रामिंग के लिए आवश्यक नहीं है। वास्तव में, इनमें से कुछ विशेषताओं का सहारा लेना एक अच्छी वस्तु-उन्मुख प्रोग्रामिंग पद्धति का पालन करने के अनाज के खिलाफ जाता है। एक वस्तु-उन्मुख सीखने से पहले एक प्रक्रियात्मक भाषा के सभी विवरणों (और कार्यों और संरचित प्रोग्रामिंग तकनीकों के साथ एक समस्या के समाधान पर हमला करना) को सिखाना एक अच्छा विचार नहीं है। यह प्रोग्रामर को गलत दिशा में शुरू कर सकता है जो संभवतः एक अच्छी वस्तु-उन्मुख प्रोग्रामिंग अनुशासन को बढ़ावा देने के लिए गलत अभिविन्यास और मानसिकता विकसित करने के लिए अग्रणी है। सिर्फ इसलिए कि Objective-C C भाषा का एक विस्तार है, इसका मतलब यह नहीं है कि आपको पहले C सीखना है!

मुझे लगता है कि एक एकीकृत भाषा के रूप में ऑब्जेक्टिव-सी और अंतर्निहित सी भाषा को पढ़ाना सही दृष्टिकोण है। यह जानने का कोई कारण नहीं है कि एक "फॉर" स्टेटमेंट सी भाषा से है और न ही इसके सुपरसेट ऑब्जेक्टिव-सी लैंग्वेज से। इसके अलावा, C सरणियों और स्ट्रिंग्स (और उन्हें जोड़ तोड़) जैसी चीजों के बारे में विस्तार से क्यों जानें पहलेउदाहरण के लिए सरणी (NSArray) और स्ट्रिंग ऑब्जेक्ट्स (NSString) के बारे में सीखना? कई सी पाठ संरचनाओं के लिए बहुत समय और संरचनाओं के लिए संकेत देते हैं, और संकेत के साथ सरणियों के माध्यम से पुनरावृत्ति करते हैं। लेकिन आप इनमें से किसी भी C भाषा सुविधाओं के बारे में जाने बिना Objective-C प्रोग्राम लिखना शुरू कर सकते हैं। और नौसिखिए प्रोग्रामर के लिए, यह एक बड़ी बात है। न केवल सीखने की अवस्था को छोटा करता है बल्कि उद्देश्य-सी कार्यक्रमों को लिखने के लिए सीखी जाने वाली सामग्री की मात्रा को भी कम करता है (और इसमें से कुछ को चुनिंदा रूप से फ़िल्टर किया गया है)।

मैं इस बात से सहमत हूं कि आप सबसे अधिक सीखना चाहते हैं, यदि सभी नहीं, अंतर्निहित सी विशेषताओं का, लेकिन कई को तब तक टाल दिया जा सकता है जब तक कि वर्गों और विधियों को परिभाषित करने, वस्तुओं और संदेश के भावों के साथ काम करने, और विरासत की अवधारणाओं को समझने का एक ठोस समझ नहीं आता है और बहुरूपता अच्छी तरह से समझा जाता है।


यह सब उन लोगों के लिए है जो संघर्ष और गहरी समझ से बचते हुए तेजी से सीखना चाहते हैं। मैं एक पूर्ण प्रोग्रामिंग नॉब सिखा रहा हूं (जबकि मेरे पास 11+ साल का प्रोग्रामिंग अनुभव है) प्रोग्राम करने के लिए और दूसरों को सिखाने से पहले (लेकिन मैं इसे स्पष्ट करने के लिए कोई शिक्षक नहीं हूं)। और पता है क्या? यह सभी अवधारणाएँ जिनका हम उपयोग कर रहे हैं वे सभी जटिल और गैर-सहज हैं जो एक पूर्ण शुरुआती के लिए हैं! सी काफी-निम्न स्तर के सामान को समझने का एक शानदार तरीका है, ताकि भविष्य में उनके लिए कुछ जादू न हो। कहा कि एक बेहतर प्रोग्रामर के लिए सीखने की अवस्था सी के साथ पहले से बेहतर है क्योंकि यह बर्बर नियम =) है
MANIAK_dobrii

15

मैं उद्देश्य सी के साथ सही गोता लगाऊंगा - यदि आप पहले से ही अपनी बेल्ट के तहत कुछ भाषाएं प्राप्त कर चुके हैं, तो यह वाक्यविन्यास नहीं है जो सीखने की अवस्था है, यह कोको है।


1
अब उस ने कहा, सी। सीखने के लिए और अधिक सामग्री उपलब्ध है। यह पाया गया कि ओबजेक के बारे में सबसे कठिन हिस्सा था, सामग्री की कमी जो अच्छी तरह से व्यवस्थित थी, स्पष्ट थी, सी या सी ++ सामग्री की तुलना करने के लिए पर्याप्त गहराई थी और वास्तव में आपको समझने में मदद मिली कि क्या था इसके अंदर चल रहा है।
Spanky

10

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


यदि आप पहले से ही इसमें शामिल नहीं हैं, तो C सीखना पहले OO प्रोग्रामिंग के आपके विचार को विकृत कर सकता है। संरचित और प्रक्रियात्मक कोडिंग को मिलाना अच्छा नहीं है। लेकिन यह भी सच है कि OO खो देता है यह बहुत सारे स्थानों में मूल्य है जहां C चमकता है जैसे कि निचले स्तर का कोड लिखना।
डैनियल होनिग ऑक्ट

1
प्रत्येक डेवलपर को कुछ बिंदु पर सी सीखने का सुझाव देने का मेरा कारण कम से कम इस विचार पर आधारित है कि ओ भाषाएं भी उसी सटीक निर्देशों का संकलन करती हैं जो सी अंत में करता है। ऑब्जेक्ट्स के लिए वेरिएबल पॉइंटर्स का उपयोग करते हैं, कचरा संग्राहक मॉलॉक और फ्री का उपयोग करते हैं, फाइलें ओएस हैंडल का उपयोग करके लॉक की जाती हैं; जब जावा या C # एप्लिकेशन में कुछ गलत हो जाता है, तो इन मूल सिद्धांतों को जानने से आपकी समझ में सुधार हो सकता है कि क्या गलत हुआ। प्रदर्शन किया गया संसाधन आवंटन को समझना अधिक सूचित कोड लिखने की ओर ले जाता है जो एक विशिष्ट संदर्भ के लिए अधिक बेहतर प्रदर्शन करेगा।
दएक्सेनोसाइड

7

ऑब्जेक्टिव-सी सीखने से पहले C सीखना एक अच्छा विचार है, जो C का एक सख्त सुपरसेट है। इसका मतलब है कि ऑब्जेक्टिव-सी सभी सामान्य C कोड को सपोर्ट कर सकता है, इसलिए C प्रोग्राम के कॉमन कॉमन को ऑब्जेक्टिव में भी दिखाना अनिवार्य है- सी कोड।

भाषा के दृष्टिकोण से विशुद्ध रूप से चीजों को देखने के अलावा, आप पाएंगे कि मैक ओएस एक्स एक पूर्ण यूनिक्स ऑपरेटिंग सिस्टम है। सभी सिस्टम स्तर के पुस्तकालय सी में लिखे गए हैं।

यह संभव है कि एक ही समय में दोनों सीखें, लेकिन मुझे लगता है कि आप उद्देश्य-सी की सराहना करेंगे और अधिक समझेंगे यदि आपके पास पहले सी का ठोस ज्ञान है।


5

मैं ऑब्जेक्टिव-सी सीखूंगा और उतनी सी सीख लूंगा जितनी जरूरत है।

C के क्षेत्र जो आप पर ज्यादा निर्भर नहीं करेंगे:

  • सूचक अंकगणितीय और सरणियाँ। मैंने C सरणियों का उपयोग बिल्कुल नहीं किया है।
  • C तार। ऑब्जेक्टिव-सी के तार काम को अच्छा और सुरक्षित करते हैं।
  • यदि आप Obj-C 2.1 में GC का उपयोग करते हैं तो मैनुअल मेमोरी मैनेजमेंट। मैं विकास की गति और प्रदर्शन कारणों के लिए इस मार्ग की अत्यधिक अनुशंसा करता हूं।

6
एक चेतावनी: ऑब्जेक्टिव-सी में कचरा संग्रह सभी प्लेटफार्मों (विशेष रूप से आईफोन) पर उपलब्ध नहीं है, जो कि जागरूक होने के लिए कुछ है।
मार्क बेस्सी

5

जैसा कि आप ऑब्जेक्टिव-सी और कोको सीखते हैं, आप सी के सीखने के बिट्स से बच नहीं सकते। उदाहरण के लिए, आयताकार CGRect, एक सी संरचना द्वारा प्रतिनिधित्व किया जाता है।

यदि आपके पास समय है, तो हर तरह से सी सीखें। जैसा कि अन्य लोगों ने यहां कहा है, कोचन की पुस्तक (दूसरा और पहला संस्करण) पुस्तक में डुबकी लगाने के लिए उत्कृष्ट है।


4

उद्देश्य-सी में आप बहुत कुछ नहीं कर सकते हैं, इसलिए कुछ बुनियादी सी कौशल सीखना बहुत महत्वपूर्ण होगा। आपको कम से कम चर घोषणाओं और मूल सी लाइब्रेरी फ़ंक्शंस को समझने की आवश्यकता होगी, या आप निराश होंगे।


3

ईमानदारी से, इतनी सारी भाषाएं सी सिंटैक्स पर आधारित हैं जिनसे परिचित होना अच्छी बात है। मैं अपने आप को C से परिचित कराने के लिए एक या दो हफ़्ते का समय लूंगा।

उस ने कहा, मैंने सिर्फ अपने आप को ऑब्जेक्टिव सी पढ़ाया है, और मुझे ईमानदार होना है: मैंने अपने सी अनुभव को उतना उपयोगी नहीं पाया जितना मैंने सोचा था। ऑब्जेक्टिव सी निश्चित रूप से मेरे लिए आंखें खोलने वाला था।


3

आप निम्न लाभों के साथ सीधे उद्देश्य-सी में कूद सकते हैं:

  1. आप रास्ते में "कुछ" सी सीखेंगे।
  2. आप उन भागों को जानेंगे जो आपके लिए प्रासंगिक हैं।

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

यदि आप निचले स्तर की प्रोग्रामिंग में रुचि रखते हैं तो आप अपने सी ज्ञान को बाद में परिष्कृत कर सकते हैं।


3

बेहतर है, मैं नहीं जानता, यहां तक ​​कि कम से कम मैं उद्देश्य-सी से परिचित नहीं हूं।
लेकिन C के आधारों को सीखना इतना कठिन नहीं है, यह बहुत जटिल भाषा नहीं है (वाक्य रचना के संदर्भ में, परास्नातक के संदर्भ में नहीं!), इसलिए इसके लिए जाएं, यह समय बर्बाद नहीं होगा।
व्यक्तिगत रूप से, मुझे लगता है कि सी सीखना हमेशा एक अच्छा विचार है, यह कंप्यूटर कैसे काम करता है, इसकी अच्छी जानकारी देता है। आखिरकार, अधिकांश भाषाओं और प्रणालियों को अभी भी सी में लिखा गया है। :-)

पुनश्च: "पर आगे बढ़ें", मेरा मतलब यह नहीं था कि "इसे छोड़ दें", बस "और जानें, अलग सीखें"। एक बार जब आप C जानते हैं, तो आप इसे कभी नहीं छोड़ सकते: जावा निम्न स्तर के सामान के लिए C रूटीन को कॉल करने के लिए JNI का उपयोग करता है, Python, Lua, आदि को अक्सर C कोड के साथ बढ़ाया जाता है (Lua संदर्भ यहां तक ​​कि सिर्फ कुछ कार्यों के लिए कुछ C ज्ञान ग्रहण करता है जो कि बस हैं C फ़ंक्शन के पीछे एक पतली आवरण), और इसी तरह।


3

हां, किसी भी अन्य उन्नत भाषाओँ से पहले C भाषा सीखने से आपको quiclky अन्य भाषाओँ को सीखने में मदद मिलेगी।


2

विकिपीडिया के अनुसार , ऑब्जेक्टिव-सी, सी का एक सख्त सुपर-सेट है। यह मामला होने के नाते, मैं पहले सी सीखने का सुझाव दूंगा। फिर जब आप ऑब्जेक्टिव-सी सीखेंगे तो यह स्पष्ट हो जाएगा कि ऑब्जेक्टिव-सी के हिस्से के रूप में कौन से हिस्से जोड़े गए हैं।


2

C आपको असेंबली से बहुत कम अमूर्तता प्रदान करता है। कुछ सी कंपाइलर आपको इनलाइन असेंबली भी करने देंगे। यह सोचने के लिए बहुत उपयोगी हो सकता है कि कंप्यूटर कैसे काम करता है, जिसे जानना महत्वपूर्ण है।

यह कहा जा रहा है, अगर आप वास्तव में ऑब्जेक्ट-सी में रुचि रखते हैं, तो अपने आप को सी में कुछ लिखने के लिए अटकने न दें क्योंकि इसका "आपके लिए अच्छा" है। जब आप एक नया कौशल सेट सीखने की कोशिश कर रहे हों तो आपको खुद को निराश करने की ज़रूरत नहीं है। यह महत्वपूर्ण है कि आप जो कर रहे हैं उसके साथ मज़े करें।


2

क्या आप हार्ड-कोर डेवलपर बनना चाहते हैं? फिर c पहले सीखें।

जिन पुस्तकों की आपको पूरी तरह से मास्टर करने की आवश्यकता है, वे प्रौद्योगिकी के सर्वश्रेष्ठ लेखन में से कुछ हैं। यहाँ आपको क्या चाहिए:

C प्रोग्रामिंग लैंग्वेज

द स्टैंडर्ड सी लाइब्रेरी


2

उद्देश्य C, C से पर्याप्त रूप से भिन्न है क्योंकि पहले C को सीखना नहीं है।

सिंटैक्स / भाषा-पारिवारिक दृष्टिकोण से स्मॉलटॉक का अध्ययन करना लगभग बेहतर है (जिस पर उद्देश्य C आधारित है)

व्यावहारिक दृष्टिकोण से, एक समय में एक भाषा सीखने पर अपने प्रयासों पर ध्यान केंद्रित करें।

बाद में, यदि आप दूसरी भाषा सीखना चाहते हैं, तो C ++, जावा और पायथन 1) एक गुच्छा 2 के रूप में सीखना आसान है) लोकप्रिय और इस प्रकार विपणन योग्य 3) शक्तिशाली।


1
नहीं, Objective-C C का एक बहुत छोटा सुपरसेट है। C के बिना आप Objective-C में कुछ नहीं कर सकते। ज़रूर, ऑब्जेक्ट मॉडल को स्मालटाक से लिया गया है, लेकिन सिंटैक्स अधिकांश भागों के लिए है जो कि करीब भी नहीं है।
स्वेन

2

Objective_C शुरू करने से पहले आपको C का मूल ज्ञान होना चाहिए, लेकिन C के हर विवरण में मास्टर की कोई आवश्यकता नहीं है।

मैंने किसी और की मदद करने के मामले में "ऑब्जेक्टिव-प्रोग्रामिंग में प्रोग्रामिंग" पढ़ने के बाद अपने नोट्स प्रकाशित किए हैं।

प्रोग्रामिंग के साथ उद्देश्य सी जानें-


1

कई भाषाओं के आधार पर आप पहले से ही जानते हैं कि उद्देश्य-सी सीखना शुरू करना बेहतर विचार हो सकता है। ज्यादातर भाषाओं में आधार मूल रूप से एक ही है, यह वाक्य रचना है जो अलग है। जब C वस्तुनिष्ठ-C सीखने की बात आती है, तो पहले C सीखना वास्तव में बहुत फर्क नहीं करता है।


लेकिन केवल अगर कोई कम से कम एक अन्य प्रोग्रामिंग भाषा जानता है।
स्वेन

@ स्वेन की टिप्पणी के अलावा: "... जिसमें संकेत की कुछ अवधारणा है"
MANIAK_dobrii

1

मैंने ऑब्जेक्टिव-सी को सीधे सीखा और यह अब लगभग एक साल तक ठीक रहा, मुझे बस सी कोड को पढ़ने में कुछ कठिनाई हुई जब मैंने यह देखने के लिए प्रोजेक्ट डाउनलोड किया कि वे कैसे काम करते हैं, लेकिन अब मुझे वास्तव में सी सीखने की आवश्यकता महसूस होती है। सी के बिना ओबीसी, लेकिन जल्द या बाद में, आपको सी की आवश्यकता होगी।


1

IMHO को पहले कम से कम कुछ C और विशेष रूप से पॉइंटर्स के बारे में सीखना चाहिए। यह और भी महत्वपूर्ण है अगर कोई ऐसी भाषा से आता है जिसमें संकेत नहीं हैं। बहुत सारे लोग जैसे कोड के बारे में पूछते हैं

NSString *string = [[NSString alloc] init];
string = @"something";

चूंकि वे एक सूचक और उस वस्तु के बीच के अंतर के बारे में नहीं जानते हैं जो इसे इंगित करता है।

बेशक किसी को C-Object के साथ शुरू करने से पहले सभी को सीखना नहीं है, लेकिन कुछ बुनियादी चीजें बिल्कुल जरूरी हैं।


काश मैं +10 वोट कर पाता। एक बार एक obj-c dev इंटरव्यू में मुझसे पूछा गया था कि क्या NSInteger को पॉइंटर बनाना संभव है ... मैं चौंक गया, 'क्योंकि मेरे लिए यह बहुत जरूरी था, लेकिन, हर किसी के लिए ऐसा नहीं लगता। इसलिए यह महत्वपूर्ण और आसान है कि यह भी समझने की जरूरत है।
MANIAK_dobrii

0

बिल्ली नहीं, सीधे C के उद्देश्य पर जाएं!

मैं ActionScript 3 से Objective C में चला गया, और मेरे पास पहले से ही एक कंपनी में एक प्रशिक्षु है!

तुम्हें जो करना है करो।


आप ऑब्जेक्ट ओरिएंटेड स्टेट ऑफ़ माइंड को पूरी तरह से क्यों याद करेंगे और पहले C सीखना शुरू करेंगे? यह पतंग उड़ाना सीखने और पायलट बनने की उम्मीद करने जैसा है। आपको OOP को गेट गो से इंटीग्रेट करना होगा।
स्विफ्टआर्किट

0

यदि आप कुछ अन्य भाषा सीखते हैं, तो आपको हमेशा सही वाक्य रचना लिखने में भ्रम होगा। मुझे उद्देश्य का पता नहीं है, लेकिन ऑब्जेक्ट तरीकों को कॉल करने के लिए ऑब्जेक्ट सी अजीब (सामान्य नहीं) सिंटैक्स का उपयोग करता है। यह इसे संदेश भेजने के रूप में नाम देता है, हां, यह शुद्ध ऑब्जेक्ट ओरिएंटेड अवधारणा के अनुसार सही है, हालांकि अधिकांश ऑब्जेक्ट उन्मुख भाषाएं नाम देती हैं कि कॉलिंग विधि के रूप में और कॉलिंग विधियों के अधिक पारंपरिक वाक्यविन्यास का उपयोग करें। कचरा संग्रह भी कुछ बहुत ही अजीब है, ऑब्जेक्ट सी पुराने स्कूल संदर्भ गणना पर आधारित है। इसलिए यदि आप अन्य भाषा से स्विच करते हैं तो आपको इसे स्वीकार करने में कठिनाई होगी। मैं C / C ++ प्रोग्रामर के लिए एक ऑब्जेक्ट ऑब्जेक्ट सी क्विक माइग्रेशन गाइड लिख रहा हूं, जिससे लोगों को सभी अंतरों को जल्दी से भरने में मदद करने की उम्मीद है।


क्योंकि ऑब्जेक्टिव-सी में "मैसेज भेजना" "कॉलिंग ए मेथड" नहीं है, लेकिन, साथ ही मैसेज भेजने के कारण मेथड (फंक्शन) = पर कॉल करने का कारण बनता है। जब आप किसी ऑब्जेक्ट को मैसेज भेजते हैं तो वह मैसेज डिस्पैच से गुजरता है तंत्र (आप इसके बारे में यहाँ पढ़ सकते हैं: developer.apple.com/library/ios/documentation/Cocoa/Conceptual/… या यहाँ: stackoverflow.com/questions/982116/… )
MANIAK_bobrii
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.