सी # इन दिनों लोकप्रिय हो रहा है। मैंने सुना है कि वाक्यात्मक रूप से यह लगभग जावा जैसा ही है। जावा और C ++ लंबे समय से मौजूद हैं। मुझे किन कारणों के लिए जावा और सी ++ पर सी # चुनना चाहिए?
सी # इन दिनों लोकप्रिय हो रहा है। मैंने सुना है कि वाक्यात्मक रूप से यह लगभग जावा जैसा ही है। जावा और C ++ लंबे समय से मौजूद हैं। मुझे किन कारणों के लिए जावा और सी ++ पर सी # चुनना चाहिए?
जवाबों:
प्रश्न यह होना चाहिए कि "आधुनिक, विशिष्ट अनुप्रयोग विकास के लिए कौन सी भाषा बेहतर है?"।
संपादित करें: मैंने नीचे कुछ टिप्पणियों को संबोधित किया। एक छोटी सी टिप्पणी: विचार करें कि जब आपके पास मुहावरों के रूप में मूल रूप से बहुत सी चीजें हैं, तो इसे लागू करने या डाउनलोड करने और हर बार खुद का उपयोग करने की तुलना में एक बड़ा अंतर है। इनमें से किसी भी भाषा में लगभग सब कुछ लागू किया जा सकता है। सवाल यह है - क्या भाषाएं आपको मूल रूप से प्रदान करती हैं।
तो मेरे सिर के ऊपर से (कुछ तर्क दोनों भाषाओं पर लागू होते हैं) ...
this
सूचक तर्क की अनदेखी ), और इसलिए कक्षाओं के बीच अधिक गतिशील और लचीले संबंध बनाते हैं। संपादित करें यदि आपको यह पता नहीं है कि इसका क्या मतलब है, तो एक सदस्य विधि को शून्य देने और शून्य को एक void (*ptr)()
चर में स्वीकार करने का प्रयास करें। C # प्रतिनिधियों ने this
सूचक को अपने साथ रखा, लेकिन उपयोगकर्ता को हमेशा इस बारे में परवाह नहीं करनी चाहिए। वे void()
किसी भी वर्ग के किसी भी अन्य void()
प्रतिनिधि को एक विधि प्रदान कर सकते हैं ।using
कथन) का समर्थन करता है । जावा 7 भी इसका समर्थन करने जा रहा है, लेकिन C # ने इसे एक लंबे समय तक ले लिया है।yield
बयान के साथ बेहतर गणना समर्थन ।this
पॉइंटर द्वारा किसी क्षेत्र तक पहुंचने की आवश्यकता है , और उस विधि को बांधें जो इसे एक जेनेरिक फ़ंक्शन पॉइंटर (यानी एक ही कक्षा में नहीं) में करता है, तो ऐसा करने का कोई मूल तरीका नहीं है। C # में आपको मुफ्त में मिलता है। आपको यह भी पता नहीं है कि यह कैसे काम करता है।this
सूचक की आवश्यकता है ।using
बयान, स्पष्ट रूप से IDisposable रैपर के साथ साथ, आरए II का एक बड़ा उदाहरण है। इस लिंक को देखें । गौर करें कि आपको C ++ में RAII की उतनी आवश्यकता नहीं है जितनी आप C ++ में करते हैं, क्योंकि आपके पास GC है। विशिष्ट समय के लिए आपको इसकी आवश्यकता होती है, आप स्पष्ट रूप से using
कथन का उपयोग कर सकते हैं । एक और थोड़ा अनुस्मारक: स्मृति को मुक्त करना एक महंगी प्रक्रिया है। जीसी ने बहुत सारे मामलों में अपने प्रदर्शन का लाभ उठाया है (विशेषकर जब आपके पास बहुत मेमोरी है)। मेमोरी लीक नहीं होगी, और आप डीलक्लॉकिंग पर बहुत समय खर्च नहीं करेंगे। क्या अधिक है, आवंटन और भी तेज़ है, क्योंकि आप हर बार मेमोरी आवंटित नहीं करते हैं, केवल एक बार ही। कॉलिंग new
बस एक अंतिम वस्तु-सूचक बढ़ रहा है।new
और delete
जो अनुभवजन्य रूप से हमेशा यहां और वहां त्रुटियों की ओर जाता है, या (C ++ 11 के साथ) आप ऑटो पॉइंटर्स को मूल रूप से उपयोग कर सकते हैं, लेकिन ध्यान रखें कि वे बहुत सारे और बहुत सारे जोड़ते हैं कोड के लिए शोर । इसलिए जीसी के पास अभी भी एक बढ़त है।क्लाइंट कंप्यूटर पर विंडोज का वर्चस्व वाला ऑपरेटिंग सिस्टम है। विंडोज अनुप्रयोगों के लिए सबसे अच्छा जीयूआई फ्रेमवर्क .NET फ्रेमवर्क के साथ एक साथ Winforms और WPF है । .NET फ्रेमवर्क के साथ काम करने के लिए सबसे अच्छी प्रोग्रामिंग भाषा है और यह एपीआई सी # है । जावा इसके लिए कोई विकल्प नहीं है। और C ++ स्वचालित मेमोरी प्रबंधन के बिना एक पुरानी भाषा है। C # C ++ के समान है, लेकिन इसमें स्वचालित मेमोरी प्रबंधन है और आपको पॉइंटर्स के साथ काम नहीं करना है, जो आपको अधिक उत्पादक बनाते हैं। C ++ अभी भी कुछ मामलों के लिए सबसे अच्छा विकल्प हो सकता है, लेकिन फॉर्म-गहन डेटाबेस अनुप्रयोगों के लिए नहीं जो व्यवसाय में सामान्य है।
यदि आप Windows परिवेश में और C # के साथ काम करने के लिए उपयोग किए जाते हैं, तो आपको मूल प्रशासन के लिए सर्वर प्रोग्रामिंग और विंडोज सर्वर के लिए IIS सीखने के लिए कम से कम निवेश की आवश्यकता होगी।
यदि आप ऐसे सॉफ़्टवेयर विकसित कर रहे हैं जो कंपनी नेटवर्क में तैनात होने जा रहे हैं, तो संभव है कि वे सक्रिय निर्देशिका के लिए Windows सर्वर का उपयोग करके Windows केंद्रित वातावरण का उपयोग करें। ऐसे वातावरण में यह C # और .NET फ्रेमवर्क में बने समाधान को एकीकृत और तैनात करने में आसान है ।
व्यक्तिगत रूप से, मैं एक जावा डेवलपर हूं, सी # डेवलपर नहीं, लेकिन मैं वेब के साथ काम करता हूं। अगर मैं विंडोज नेटवर्क के लिए नेटवर्क एप्लिकेशन विकसित कर रहा था तो मैं C # पर स्विच करूंगा। लेकिन मैं लिनक्स आधारित वेब सर्वर के लिए जावा पसंद करता हूं। मैं एम्बेडेड सिस्टम के लिए C ++ का चयन करूंगा मैं कई निर्भरताएं नहीं करूंगा।
हां, C # C ++ और Java की तुलना में अधिक आधुनिक सुविधाओं के साथ एक बेहतर भाषा है, लेकिन C # को चुनने के लिए यह सबसे महत्वपूर्ण बात नहीं है ।
आपके सॉफ़्टवेयर के लिए वातावरण C # चुनने के लिए सबसे महत्वपूर्ण है । यदि आप Windows क्लाइंट, Windows सर्वर, सक्रिय निर्देशिका, IIS और शायद SQL सर्वर के साथ वातावरण में काम करते हैं तो C # .NET फ्रेमवर्क के साथ सबसे अच्छी भाषा है ।
यदि आप उदाहरण के लिए वेब सेवाओं के साथ यूनिक्स वातावरण में काम करते हैं, तो जावा मेरी पसंद होगी। और यदि आप एम्बेडेड सिस्टम के साथ काम करते हैं या हार्डवेयर उपकरणों के साथ एकीकृत करना चाहते हैं तो C ++ एक अच्छा विकल्प होगा।
सी # और जावा
C # एक बहुत अच्छी भाषा है अगर:
C # भाषा के रूप में विभिन्न तरीकों से जावा की तुलना में अच्छा है (गुण, मूल्य प्रकार, संशोधित जेनरिक आदि के लिए बेहतर वाक्यविन्यास)। मैं जावा के लिए एक भाषा के रूप में सी # पसंद करता हूं लेकिन चीजों की भव्य योजना में वे समान भाषाएं हैं और समान अनुप्रयोगों के लिए उपयुक्त हैं।
दूसरी ओर, जावा के कुछ बड़े फायदे भी हैं:
इसलिए जावा बनाम सी # एक बहुत ही करीबी कॉल है और यह वास्तव में नीचे आता है कि क्या आप माइक्रोसॉफ्ट शिविर या ओपन सोर्स / क्रॉस-प्लेटफॉर्म शिविर में रहना चाहते हैं।
व्यक्तिगत रूप से, मुझे जावा पसंद है क्योंकि:
C / C ++
C / C ++ मूल रूप से पूरी तरह से एक अलग जानवर है। मैं निम्नलिखित कारणों से आजकल सामान्य प्रयोजन अनुप्रयोग विकास के लिए इसकी अनुशंसा नहीं करूंगा :
हालाँकि, यह विशेष रूप से कुछ विशेष डोमेन की सीमित संख्या में एक बढ़िया विकल्प है:
इसलिए मूल रूप से, C / C ++ एक बढ़िया विकल्प है यदि और केवल यदि आप एक ऐसे डोमेन पर ध्यान केंद्रित करते हैं जहाँ यह विशेष रूप से अनुकूल है।
I heard that syntactically they are almost the same.
वाक्य रचना? वाक्य रचना के बारे में उड़ने वाले बंदर कौन देता है? सिंटेक्स केवल एक ही चीज़ के लिए अच्छा है: सिंटैक्टिकली समान भाषाओं से तेज़ी से माइग्रेशन की अनुमति। बस।
C # जावा से काफी बेहतर है। उनके सामान्य और कार्यात्मक प्रोग्रामिंग समर्थन पर विचार करें- C # जावा से आगे का रास्ता है। ऑपरेटर अधिभार का उल्लेख नहीं करने के लिए, और अन्य अच्छी चीजें- C # काफी हद तक बेहतर है। कोई रास्ता नहीं है कि जावा को संभवतः C # से बेहतर माना जा सकता है।
C ++ और C # एक प्रतियोगिता से अधिक है। C ++ में एक अविश्वसनीय रूप से कष्टप्रद पुरातन संकलन मॉडल और C से विरासत में मिली बीमारियों का एक समूह है, लेकिन यह टेम्प्लेट जेनेरिक की तुलना में बहुत अधिक शक्तिशाली हैं, और यह संसाधन प्रबंधन के दृष्टिकोण सामान्य रूप using
से बहुत अधिक लचीले और शक्तिशाली हैं, जैसा कि एक पूर्ण विफलता है, और यह निष्पादित करता है और तेज।
अच्छी तरह C#
से कुछ अच्छी तरह से निर्मित सुविधाओं LINQ
और प्रतिनिधियों की तरह है । यह दोनों दुनिया से सबसे अच्छा हो रहा है - Java
और C++
। पूर्ण तुलना के लिए यहां देखें ।
लेकिन मैं Java
दुनिया को बेहतर पसंद करता हूं - बहुत अधिक ओपन सोर्स फ्रेमवर्क और यह हर प्लेटफॉर्म पर चलता है। और मुझे इसके बारे में मत बताओ Mono
- यह एक विश्वसनीय विकल्प नहीं है।
कुछ स्रोतों के अनुसार (उदाहरण के लिए देखें http://www.indeed.com/jobtrends ) C # अभी भी जावा की तुलना में कम लोकप्रिय है, और C ++ के रूप में लोकप्रिय है।
C # उन सुविधाओं को प्रदान करता है जिनमें जावा का अभाव है, जैसे कुछ प्रोग्रामिंग मुहावरों के लिए प्रत्यक्ष समर्थन जैसे गुण, कार्यात्मक प्रोग्रामिंग शैली, और इसी तरह। C # में C ++ की तुलना में अधिक उच्च स्तर है, जो कि एक लाभ है जब विकास का समय कार्यक्रम की गति से अधिक महत्वपूर्ण होता है।
व्यक्तिगत रूप से, मैं अभी भी जावा / सी ++ दुनिया को पसंद करता हूं। जैसा कि पेटार मिनचेव ने कहा, जावा में अधिक ओपन-सोर्स फ्रेमवर्क और एप्लिकेशन हैं, यह हर जगह चलता है, एक विशेष विक्रेता और ऑपरेटिंग सिस्टम से कम बंधा हुआ है। C ++ के समान फायदे हैं, भले ही कोड को अक्सर एक प्लेटफ़ॉर्म से दूसरे प्लेटफ़ॉर्म पर जाने के लिए अनुकूलन की आवश्यकता होती है। चूंकि मैं लिनक्स पर विकास करना पसंद करता हूं और मेरी जानकारी के अनुसार, मैं लिनक्स पर पूरी तरह से सी # नहीं छोड़ सकता हूं, मुझे सी # में वास्तविक रुचि कभी नहीं हुई क्योंकि मेरी प्रोग्रामिंग की जरूरतों को सी, सी ++, जावा, स्काला द्वारा कवर किया गया है।
दूसरी ओर, कई डेवलपर्स के लिए एक विशेष विक्रेता से बंधे होने के लिए कोई समस्या नहीं है: ऑपरेटिंग सिस्टम के बाजार में Microsoft का प्रमुख स्थान है और C # नौकरी के बहुत सारे अवसर देता है। इसलिए, IMO कई डेवलपर्स C # को अपनाते हैं, क्योंकि एक सुविधा-संपन्न भाषा होने के अलावा, यह एक अच्छा निवेश भी है।
"कौन सा सॉफ़्टवेयर डेवलपमेंट फ्रेमवर्क, जिसमें प्रोग्रामिंग भाषा शामिल है" के बारे में बेहतर है?
आप अन्य सामान शामिल करना भूल गए, जैसे "पर्यावरण" आप के साथ काम करेंगे।
क्या आप केवल विंडोज ओएस के लिए काम करने जा रहे हैं, लेकिन, निम्न स्तर का नहीं होना चाहिए, और बहुत सारी मेमोरी और अन्य संसाधन हैं?
Windows के ऊपर .NET के रूप में चुनें, और C # का उपयोग करें।
क्या आप केवल विंडोज के लिए काम करने जा रहे हैं, लेकिन, निम्न स्तर का नहीं होना चाहिए, लेकिन, बहुत सारे संसाधन नहीं हैं?
डेल्फी फ्रेमवर्क चुनें (और ऑब्जेक्ट पास्कल डेल्फी प्रोग्रामिंग भाषा या लाजर ऑब्जेक्ट पास्कल प्रोग्रामिंग भाषा)
आपका ऐप है अलग-अलग मोबाइलों में गेम जैसे कई प्लेटफॉर्म का समर्थन करने की आवश्यकता है?
जावा फ्रेमवर्क, और जावा प्रोग्रामिंग भाषा चुनें।
क्या यह ग्राफिक इंटरफ़ेस के रूप में केडीई के साथ लिनक्स है?
C ++ के साथ, क्यूटी फ्रेमवर्क चुनें
यह ग्राफिक इंटरफ़ेस के रूप में सूक्ति के साथ लिनक्स है?
C ++ के साथ, GObject / GLib फ्रेमवर्क चुनें
क्या आप बहुत कम स्तर के संचालन के साथ काम करने जा रहे हैं, जैसे विकासशील ड्राइवर?
सादा सी या सी ++ इसका उपयोग कई ऑपरेटिंग सिस्टम के लिए किया जाता है, मानक पुस्तकालयों के साथ, एक रूपरेखा के रूप में।
बस मेरे 2 सेंट।
यदि आप एक खोज करते हैं तो आप शीर्ष प्रोग्रामिंग भाषाओं पर चर्चा पर ठोकर खाने की संभावना रखते हैं। यहाँ खोज परिणामों में से एक है - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java अभी भी सबसे लोकप्रिय भाषा है।
जावा ने C ++ की कुछ कमियों को दूर करने की कोशिश की (और गैर-वास्तविक समय और गैर-महत्वपूर्ण अनुप्रयोगों के लिए प्रोग्रामर को जीवन को सरल बनाने)। C # पार्टी के लिए देर से आने वाला, जावा भाषा की कुछ कमियों से बचा। C # ने बहुत प्रगति की है (जैसा कि Microsoft का इस पर बहुत नियंत्रण है) जबकि जावा में अग्रिमों को हितधारकों के बीच संघर्ष के कारण काफी समय तक अवरुद्ध किया गया था।
कुछ चीजें जो पहले से उल्लेख नहीं की गई हैं:
C # C ++ से बेहतर है क्योंकि:
यह हेडर फ़ाइलों के साथ दूर करता है, जो महान सादगी में अनुवाद करता है।
C # जावा से बेहतर है क्योंकि:
यह संदर्भ-प्रकार (वर्ग) और मूल्य-प्रकार (संरचना) उपयोगकर्ता-परिभाषित दोनों प्रकारों का समर्थन करता है, जो, यदि आप जानते हैं कि आप क्या कर रहे हैं, तो महत्वपूर्ण प्रदर्शन लाभ प्राप्त कर सकते हैं।
यह प्रतिनिधियों का समर्थन करता है, जो एकल-विधि इंटरफेस की तरह हैं, इस प्रकार अक्सर होने वाले निर्माणों के कोडिंग को सरल बनाते हैं जिसमें एकल-विधि ऑब्जेक्ट शामिल होते हैं।
आपको अपने अपेक्षित माहौल और अपनी विशेषज्ञता के लिए सबसे अच्छी भाषा चुननी चाहिए।
Chose C # यदि आप Microsoft के केवल वातावरण में काम कर रहे हैं। जबकि C # को ISO / IEC 23270: 2003 के तहत मानकीकृत किया गया है, Microsoft का संस्करण केवल पूर्ण कार्यान्वयन है। भाषा के कई प्रमुख भाग मानक द्वारा कवर नहीं किए गए हैं और इस प्रकार Microsoft के पेटेंट के अधीन हैं। कोई भी अन्य सिस्टम के लिए भाषा के पूरी तरह से संगत संस्करण को लागू नहीं करेगा, इसलिए वास्तव में, आप Microsoft Windows और .Net पर तब तक के लिए बंद हैं जब तक आप भाषा का उपयोग करते हैं। यदि आप मोबाइल बाजार में उपयोग करने के लिए कौशल की तलाश कर रहे हैं, तो किसी अन्य भाषा को देखने के लिए सबसे अच्छा है।
जावा काम करता है, लेकिन कचरे के संग्रह के रूप में इस तरह की सुविधाओं के कारण भाग में एक अच्छा सौदा है। जावा भी आईएसओ / आईईसी द्वारा मानकीकृत नहीं है, इसलिए आपके पास जावा के प्लेटफार्मों और संस्करणों को स्विच करने की कोई गारंटी नहीं है, केवल सन / ओरेकल के सर्वश्रेष्ठ इरादे हैं। यदि आप अंततः एंड्रॉइड के साथ काम करने की योजना बना रहे हैं, तो यह निश्चित रूप से जाने का तरीका है। एंड्रॉइड की प्रोग्रामिंग मूल रूप से जावा है, जिसमें कुछ बदलाव हैं।
C ++ मानकीकृत है और लगभग सभी संकलक अंतरराष्ट्रीय मानक का पालन करते हैं, इसलिए आपने व्यवहार की गारंटी दी है लेकिन BUT भाषा आपको स्वयं से सुरक्षित नहीं करती है। आपको अपने दम पर सफाई और अतिप्रवाह जाँच प्रदर्शन करना होगा। यह कठिन नहीं है। C / C ++ प्रोग्रामर कई सालों से ये कर रहे हैं। Apple हर चीज के लिए Objective C का उपयोग करता है, इसलिए यदि आप Apple के लिए लक्ष्य बनाना चाहते हैं, तो मैं आपको इसके बजाय यह प्रयास करने की सलाह देता हूं।
यदि आप स्वयं को किसी बिंदु पर पीछे छोड़ते हुए देखते हैं, तो मैं इस समय C / C ++ और Java - दोनों सीखने का सुझाव दूंगा, जो दोनों ही बाजार में उपलब्ध हैं।
सी ++ बनाम सी # के संबंध में (जैसा कि मैं जावा में पर्याप्त कुशल नहीं हूं), जो मुझे यहां याद आ रहा है वह विंडोज पर लोवेल सामान तक पहुंचने की क्षमता है। उदाहरण के लिए, आप C # (अभी तक) में एक देशी डिस्प्ले ड्राइवर विकसित नहीं कर सकते, लेकिन आप C ++ के साथ कर सकते हैं। यह C ++ को बेहतर नहीं बनाता है। मुझे C ++ बनाम C # असेंबली बनाम C दिखाई देता है।
यदि आप वास्तव में किसी सुविधा को लागू करने में लगने वाले समय को देखते हैं तो C # मेरे विचार में अधिक कुशल है। विकसित अनुप्रयोगों के 99% के लिए .Net रनटाइम का प्रदर्शन दंड नगण्य है। यह महत्वपूर्ण हो सकता है यदि आप एक तंग लूप चला रहे हैं, हाँ सभी तरीकों से, लेकिन अधिकांश समय एक एप्लिकेशन निष्क्रिय है, किसी भी तरह के इनपुट, सिग्नल या इंटरप्ट (डिस्क आईओ, बटन क्लिक, नेटवर्क, एनीमेशन पूरा होने) का इंतजार कर रहा है ।
अपने सभी कार्यों के साथ CLR लाइब्रेरी का एक और बड़ा लाभ है। जब मैं जूनियर डेवलपर्स को C # प्रशिक्षण दे रहा था, तो उनमें से अधिकांश ने कहा कि उन्हें कक्षाओं, सदस्यों और नामस्थानों के तार्किक नामकरण सम्मेलन पसंद हैं। एसडीके के पार विधि की एक विशेषता खोजना तार्किक था, कुछ ऐसा जो विजुअल बेसिक 5 में गंभीर रूप से त्रुटिपूर्ण था। इससे उन्हें पुस्तकालय को अपनाने में काफी मदद मिली। किसी भाषा के वाक्य-विन्यास को सीखने के बाद, किसी भी SDK की अच्छी समझ प्राप्त करने के लिए एक नया पुस्तकालय सीखना महत्वपूर्ण है। यह आपको पहिया को फिर से लगाने से बचाता है।