সি ++ রয়েছে তবে জাভা নেই এমন ভাষা বৈশিষ্ট্যগুলি কি আমাদের এড়ানো উচিত?


110

ধরুন আমি প্রকল্পের পরিবেশ দ্বারা সি ++ ব্যবহারের মধ্যে সীমাবদ্ধ। সি ++ রয়েছে তবে জাভা নেই এমন কিছু ভাষা বৈশিষ্ট্য ব্যবহার বন্ধ করা ভাল (যেমন: একাধিক উত্তরাধিকার, অপারেটর ওভারলোডিং)?

আমি মনে করি কারণগুলি:

  1. জাভা যেহেতু সি ++ এর চেয়ে নতুন, জাভা যদি সি ++ এর মতো বৈশিষ্ট্য না দেয় তবে এর অর্থ বৈশিষ্ট্যটি ভাল নয়, তাই আমাদের এটি ব্যবহার করা এড়ানো উচিত।
  2. সি ++ কোডটি সি ++ নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে (যেমন: বন্ধু ফাংশন, একাধিক উত্তরাধিকার) কেবল সি ++ প্রোগ্রামারদের দ্বারা বজায় রাখা বা পর্যালোচনা করা যেতে পারে, তবে আমরা কেবল জাভা (সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য ছাড়াই) এর মতো সি ++ লিখি, কোড উভয়ই বজায় রাখতে বা পর্যালোচনা করতে পারে সি ++ এবং জাভা প্রোগ্রামারগণ।
  3. আপনাকে কোনও দিন জাভাতে কোড রূপান্তর করতে বলা হতে পারে
  4. সি ++ নির্দিষ্ট বৈশিষ্ট্য ছাড়াই কোড সাধারণত আরও রক্ষণাবেক্ষণযোগ্য
  5. প্রতিটি সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য (যেমন: একাধিক উত্তরাধিকার) এর জাভাতে প্রয়োগ করার বিকল্প থাকতে হবে। যদি এটি না হয়, তার অর্থ ডিজাইন প্যাটার্ন বা কোড আর্কিটেকচার সমস্যাযুক্ত।

এটা কি সত্যি?


7
আপনি যদি আপনার পরামর্শগুলি লক্ষ্য করেন তবে আপনি কোডিং স্ট্যান্ডার্ড তৈরি করার কথা বলছেন। আপনি যে কোনও মানক তৈরি করছেন এবং অনুসরণ করছেন তা আসলে রক্ষণাবেক্ষণযোগ্যতা বাড়াতে চলেছে।
ব্র্যান্ডিন 10

63
জাভা কোডও কি বৈশিষ্ট্যগুলিতে সীমাবদ্ধ করা উচিত, যা সি ++ ভাষাতে পাওয়া যায়? সুতরাং উদাহরণস্বরূপ জাভা volatile, প্যাকেজ-ব্যক্তিগত শ্রেণীর সদস্য অ্যাক্সেস, প্রতিবিম্ব / অন্তঃকরণ, অবশেষে-ব্লক, চেক করা ব্যতিক্রম ইত্যাদি ব্যবহার করবেন না? ধরণের পুরো প্রশ্নটি খুব একটা বোঝায় না ... সি ++ এবং জাভা অতিমাত্রায় একই রকম, তবে শেষ পর্যন্ত খুব আলাদা ভাষা।
হাইড

5
লোকেরা নতুন বৈশিষ্ট্য ব্যবহার করতে ইচ্ছুক না হলে ভাষাগুলি কীভাবে বিকশিত হবে? নতুন বৈশিষ্ট্যগুলির উদ্দেশ্য হ'ল সাধারণ সমস্যাগুলি সমাধান করে আপনার জীবনকে সহজ করে তোলা। ব্যবহারকারীরা যদি নতুন বৈশিষ্ট্য ব্যবহার না করে তবে তাদের প্রয়োগের জন্য কারও প্রেরণা নেই।
ম্যাথু

72
আপনি যদি জাভা চান, জাভা ব্যবহার করুন। আপনি যদি সি ++ ব্যবহার করেন, সি ++ ব্যবহার করুন, কিছু ভয়ঙ্কর নয়, সি ++ সিনট্যাক্স সহ জাভাটির মোড়ক নকল। সি ++ ব্যবহার করে তবে নিজেকে জাভার ফিচার সেটে সীমাবদ্ধ করা আপনাকে উভয় পৃথিবীর মধ্যে সবচেয়ে খারাপ দেয়।
জেরি কফিন

11
পার্থক্যগুলি আপনাকে কত দ্রুত কাটাবে (এবং শক্ত ) তা দেখে আপনি অবাক হবেন । SomeObject a = previousObject;না খুব জাভা এবং সি ++ বিভিন্ন জিনিস। জাভাতে এটি একটি রেফারেন্স অনুলিপি করে, যখন সি ++ তে এটি বস্তুটি অনুলিপি করে। জাভাতে, পরিবর্তনগুলি aপূর্ববর্তী বস্তুকেও প্রভাবিত করবে। সি ++ এ আপনার দুটি পৃথক অবজেক্ট রয়েছে।
ক্লকওয়ার্ক-যাদুঘর

উত্তর:


307

না এটি ভীতিজনকভাবে এবং ভয়ানকভাবে বিপথগামী।

  • জাভা বৈশিষ্ট্যগুলি কোনওভাবে সি ++ বৈশিষ্ট্যের চেয়ে ভাল নয়, বিশেষত শূন্যতায়।
  • যদি আপনার প্রোগ্রামাররা কীভাবে কোনও বৈশিষ্ট্য ব্যবহার করতে জানেন, উন্নত বিকাশকারীদের প্রশিক্ষণ বা ভাড়া দিন; আপনার বিকাশকারীদেরকে আপনার দলের সবচেয়ে খারাপের মধ্যে সীমাবদ্ধ করা আপনার ভাল বিকাশকারীদের হারানোর দ্রুত এবং সহজ উপায়।
  • YAGNI । ভবিষ্যতের কোনও সমস্যার ভূত নয়, আজই আপনার আসল সমস্যাটি সমাধান করুন।

6
বিকাশকারীরা এমন একটি ভাষায় কোড পর্যালোচনা করার বিষয়ে সম্প্রতি একটি প্রশ্ন ছিল যা তারা সাধারণত লেখেন না। আমি মনে করি সেখানকার প্রজ্ঞাটি এখানে প্রযোজ্য: একজন ভাল বিকাশকারী যে কোনও ভাষায় অনেকগুলি মৌলিক ভুলকে চিহ্নিত করতে পারে, তবে প্রতিটি ভাষারই এতগুলি গোটচিয়া রয়েছে যে ভাষা-বিকাশকারীরা পর্যালোচনা করলে সর্বাধিক উপকার পাওয়া যায়। এটি এমনকি সত্য যদি আপনার সি ++ "জাভা বৈশিষ্ট্যগুলি কেবলমাত্র" হয়।
corsiKa

5
+1 আপনার দ্বিতীয় পয়েন্ট ছাড়াও। ওপিতে কোন বৈশিষ্ট্য ব্যবহার করা উচিত তা সিদ্ধান্ত নিতে "সি ++ সেরা অভ্যাসগুলি" পড়ার জন্য সময় নেওয়া উচিত। সি ++ সম্পর্কে আমার শেষ তথ্যটি হ'ল বন্ধুর ফাংশন এবং একাধিক উত্তরাধিকারকে খারাপ অভ্যাস হিসাবে বিবেচনা করা হয় । টেমপ্লেট এবং অপারেটর ওভারলোডিংয়ের মতো জিনিসগুলি যদি আপনি সেগুলি বুদ্ধিমানের সাথে ব্যবহার করেন তবে IMHO এর ভাল অভ্যাস।
কিছু_ কোডার

4
@ সোম_ কোডার: কখন, কোথায় ছিল তা জানার বিষয়। আমি যখন নীতি-ভিত্তিক প্রোগ্রামিং করি তখন আমার হোস্ট ক্লাসের কাঠামো সদস্যদের সাথে বাড়ানোর জন্য নীতি-ভিত্তিক প্রোগ্রামিং (সম্ভবত একাধিক) নীতি ক্লাস থেকে উত্তরাধিকার সূত্রে আমি নীতিনির্ধারক শ্রেণীর কাজ করতে হয়। এটি ঠিক কিভাবে এটি কাজ করে। এছাড়াও, operator<<( ostream &, T const & )সাধারণত মাধ্যমে প্রয়োগ করা হয় friend। একটি ভাল ভাষার বৈশিষ্ট্য কী এবং কী খারাপ তা সম্পর্কে কম্বল স্টেটমেন্টে এটাই সমস্যা: এগুলি ভাল পরামর্শ হয়, যখন না হয় তবে ...
দেবসোলার

142

কেবল সিনট্যাক্সটি পৃষ্ঠের সমান বলে মনে হচ্ছে এর অর্থ এই নয় যে দুটি ভাষা সামঞ্জস্যপূর্ণ।

1, 4 এবং 5 সত্যিই একই প্রশ্ন:

এখন, আমি সি ++ এর কোন অনুরাগী নই, তবে "সি ++ সুনির্দিষ্ট বৈশিষ্ট্যগুলি ছাড়াই কোডটি সাধারণত আরও রক্ষণাবেক্ষণযোগ্য" বলা কেবল হাস্যকর - আপনি কি সত্যই বিশ্বাস করেন যে জাভা সব কিছু ঠিকঠাক পেয়েছে এবং সমস্ত খারাপ বৈশিষ্ট্য উপেক্ষা করার সময় সমস্ত ভাল বৈশিষ্ট্য নিয়েছিল? আপনি কি সত্যই বিশ্বাস করেন যে এমন কিছু আছে যা সর্বজনীন একটি "খারাপ" বা "ভাল" বৈশিষ্ট্যযুক্ত? যদি সেখানে থাকে তবে আমাদের কাছে এমন একটি ভাষা নেই যা খাঁটি ভাল? আর, জাভা অবশ্যই নয় যে ভাষা। এর অর্থ কি জাভা এবং সি ++ অকেজো? অবশ্যই না.

আপনার নেতারা যদি জাভাের পরিবর্তে সি # তে বন্দরে যাচ্ছেন তা যদি সিদ্ধান্ত নেয়? কেবল সি # ওভাররাইডিং অপারেটরগুলিকে সমর্থন করে না, তবে এটি ডিফল্টও - যদি আপনার obj.Equals(obj2)পরিবর্তে লোক ব্যবহারের প্রয়োজন হয় তবে লোকেরা obj == obj2সর্বদা ভুল করতে চলেছে। এমনকি আপনি যদি দুটি ভাষার সাধারণ বৈশিষ্ট্যগুলিতে রাখেন তবে বিভিন্ন প্রত্যাশা , আলাদা সংস্কৃতি রয়েছে। আপনি যদি if (myField == null)সি ++ এর মতো কিছু করেন তবে লোকেরা আপনাকে তাত্ক্ষণিকভাবেই একজন শিক্ষানবিশ দেখতে পাবে। আপনি যদি if (null == myField)সি # তে ব্যবহার করেন, লোকেরা দেখতে পাচ্ছেন আপনি এখনও সি-নেটিভ নন - কারণ সি বিকাশকারীরা "ফ্লিপড" বৈকল্পিকটি ব্যবহার করতে শিখেছেন তার কারণগুলি সি # তে আর বিদ্যমান নেই।

আপনার যুক্তি ব্যবহার করে, আমাদের উচিত ছিল মেশিন কোড বা অ্যাসেম্বলি বা সিওবিওএল এর সাথে আটকে থাকা, কারণ আপনার প্রোগ্রামারদের শিখতে হবে এমন নতুন বৈশিষ্ট্যগুলি যুক্ত করার পরে কেন কখনও পাস্কালের মতো কিছু পরিবর্তিত হয়? কেন আমরা কখনই এসকিউএল এর মতো কিছু ব্যবহার করব, যখন এতে লুপ নেই ? যখন এসকিউএল এর লুপ নেই এবং এক্স রয়েছে তখন কেন আমরা কখনও এসকিউএল ব্যতীত অন্য কিছু ব্যবহার করব ?

সি ++ কোড অবশ্যই জাভা প্রোগ্রামারদের দ্বারা বজায় রাখা যায় না। আপনি এই ধারণাটি কোথায় পেয়েছেন তা বুঝতে পারছি না - আপনি যখন জা + তে ঠিক একইভাবে কাজ করে এমন বৈশিষ্ট্যগুলিতে C ++ সীমাবদ্ধ করেন তখন ঠিক কী থাকে? আপনি এমনকি পদ্ধতি কল পেতে যাচ্ছেন না - এমনকি ফাংশন কলও নয়। আবার, কেবলমাত্র উভয় ল্যাঙ্গুয়েজগুলি কোঁকড়া ধনুর্বন্ধনী ব্যবহার করে, এর অর্থ এই নয় যে ভাষাগুলি কোনওভাবেই বদলানো যায় able

জাভা-জাতীয় সি ++ কোড রূপান্তর করা আপনি যা কিছু করেন না কেন চরম ত্রুটিযুক্ত হতে চলেছে one এখানে অনেকগুলি পার্থক্য রয়েছে। যদি আপনি নিজের অ্যাপ্লিকেশনটিকে অন্য ভাষায় পুনরায় লেখার বিষয়ে চিন্তা করেন তবে সবকিছুকে আধুনিকীকরণের যুক্তিসঙ্গত উপায়গুলি সম্পর্কে ভাবুন, যাতে আপনি অংশগুলি পুরো না ভাঙ্গিয়ে প্রতিস্থাপন করতে পারেন। তবে শেষ পর্যন্ত, YAGNI - আপনি যা কিছু করেন না কেন, আপনার কোডটিকে "জাভাতে রূপান্তর করার জন্য প্রস্তুত" করার জন্য একটি উল্লেখযোগ্য ব্যয় হবে। সেই সময়টি সম্ভবত আপনার বৈশিষ্ট্যগুলি যুক্ত বা উন্নত করতে আরও ভাল ব্যয় করেছে।

আমরা বিভিন্ন ভাষা ব্যবহার করি কারণ তারা আমাদের সমস্যাগুলি সমাধানের জন্য বিভিন্ন সেট সরঞ্জাম দেয়। আপনার যদি "সর্বত্র" কাজ করে এমন এক্সিকিউটেবলের প্রয়োজন হয় তবে জাভা দিয়ে যান। আপনি যদি এমন কোড চান যা "সর্বত্র" সংকলিত হয়, সি ++ ভাল কাজ করে। আপনি যদি এমন কোডটি বুঝতে চান যা সহজেই বুঝতে এবং পার্স করা যায় তবে এলআইএসপি বা যেকোন কিছুতে যান। তবে আমি আপনাকে একটি কথা বলতে পারি - একটি ভাষায় কোড লিখলে যেন আপনি অন্য ভাষায় লিখছেন তবে সবসময় ভুল হয় এবং আপনি ভোগান্তি পোহাতে পারেন। এটি উল্লেখ করার দরকার নেই যে আপনি যখন সরাসরি সি ++ লোক ভাড়া করেন, তিনি দ্বিতীয়টি চালাবেন তিনি সেই "জাভা-ইশ সামঞ্জস্যপূর্ণ" কোডটি দেখেন। এবং ... জাভা লোকটি একই কাজ করতে চলেছে। আপনি জানেন, এমনকি সি ++ এবং জাভা উভয়ই "জেনে রাখা", আমি জাহান্নামের মতো ছুটে যাব :)

আমাকে আসলে একটি পাস্কাল বিকাশকারী দ্বারা লিখিত (প্লেইন) সি কোডটিতে কাজ করতে হয়েছিল যিনি আপনার মতো মনে করেন। তিনি #defineপাসকালের মতো দেখতে এবং আরও বোধ করার জন্য সি পুনরায় সংজ্ঞায়িত করতে ব্যবহার করেছিলেন , "বিগিন অনুবাদ করে {" এর মতো জিনিস দিয়ে। ফলাফলটি পূর্বাভাসযোগ্য ছিল - কোড যা সি বা পাস্কাল বিকাশকারীরা না বুঝতে পারে এবং সি এর উপরে পাস্কালের "বিমূর্ততা" ফাঁস হওয়ার ফলে যে সমস্ত বাগ রয়েছে এবং পাস্কাল এবং সি আজকের দৃষ্টিকোণ থেকে প্রায় একই রকম । এমনকি সি <-> সি ++ যাওয়া আরও অনেক পার্থক্য এবং এটি এখনও সি ++ <-> জাভার মতো কিছুতে চিনাবাদাম।


9
"আপনি যদি এমন কোডটি বুঝতে চান যা বুঝতে ও পার্স করা সহজ হয় তবে এলআইএসপি বা যেকোন কিছুতে যান" " আমি তাতে একমত হব না। লিস্প পার্স করার পক্ষে তুচ্ছ, তবে ঠিক এর কারণেই - কারণ এটি এমন এক সময়ে তৈরি হয়েছিল যখন পার্সারদের জ্ঞান এবং তাদের কার্যকরভাবে গড়ে তোলার পিছনের নীতিগুলি এখনও শৈশবকালীন ছিল, এবং তাই তারা শাস্তি দিয়েছে এবং সবচেয়ে হাস্যকরভাবে সরল জিনিস নিয়ে চলেছে এটি সম্ভবত কাজ করতে পারে - আপনি আধুনিক ভাষার সিনট্যাকটিক সুবিধাগুলি প্রচুর পাবেন না। সুতরাং এটি পার্স করা সহজ, তবে বোঝা মোটেও সহজ নয় । লোকেরা একে "অতিমাত্রায় পিতামহিনী হিসাবে হারিয়েছেন" বলে একটি কারণ রয়েছে।
ম্যাসন হুইলারের

9
@ ম্যাসনওহিলার এটি স্বাদের বিষয় - সি প্রোগ্রামাররা এটি বলেছিল, এলআইএসপিয়ার নয়: পি। প্রথম বন্ধনীগুলি গণনা করুন - আপনার সাধারণ সি ++ প্রোগ্রামে প্রায় অনেকগুলি রয়েছে। আসল পার্থক্য হ'ল তাদের অবস্থান ( myFunc()বনাম (myFunc)), এবং এটির খুব ভাল কারণ রয়েছে। এলআইএসপি-ভিত্তিক ভাষাগুলি এখনও খুব জনপ্রিয়, বিশেষত গণিত / পদার্থবিজ্ঞানের লোকদের কাছে। মূল কথাটি হ'ল এলআইএসপি ভাষা আধুনিক সি স্টাইলের প্রোগ্রামারগুলির কাছে খুব অপরিচিত - তবে এটি এড়িয়ে যাওয়ার খুব কমই কারণ reason স্কিম, ক্লোজার এবং এক পর্যায়ে এমএল-ভিত্তিক ভাষা (ওক্যামেল, এফ # ...) আসলেই খুব LISPy।
লুয়ান

4
@ লুয়ান আমি আপনাকে নিশ্চিত করে বলতে পারি যে এলআইএসপি পদার্থবিজ্ঞানে জনপ্রিয় নয়। ক্ষেত্রের দুটি প্রভাবশালী ভাষা হ'ল ফরটারন এবং সি ++। ফরট্রানটি 'জনপ্রিয়' কারণ এগুলিতে এতগুলি পুরানো কোড লেখা ছিল তবে প্রায় সমস্ত নতুন প্রোগ্রাম সি ++ তে লেখা হয়। গবেষণা পদার্থবিদ হিসাবে, আমি একবার এলআইএসপি প্রোগ্রামের মুখোমুখি হয়েছি বা শুনিনি। তাদের অস্তিত্ব নেই বলার অপেক্ষা রাখে না, তবে ভাষাগুলি অবশ্যই জনপ্রিয় নয় ।
জেমস মাতা

4
@ লুয়ান আমাদের আরও সফ্টওয়্যার বিকাশকারী প্রয়োজন বা নাও করতে পারেন। আমাদের অবশ্যই আরও সিএস গ্র্যাজুয়েট দরকার নেই। এটি বলার মতো "আমাদের আরও কাঠামোগত প্রকৌশলী প্রয়োজন, তাই আমাদের আরও তাত্ত্বিক পদার্থবিজ্ঞানের স্নাতক প্রয়োজন।"
মাইলস রুট

4
@ ব্যবহারকারী 1717828 এটি ভুল টাইপিংয়ের আনন্দদায়ক প্রভাবগুলি এড়াতে হবে যা কেবল সি / সি ++ if (myField == null)কে if (myField = null)সংকলন করবে, তবে সম্ভবত আপনি যা ইচ্ছা করেছেন তা করেন না । অন্যদিকে, if (null = myField)একটি ত্রুটি ফেলবে, যেহেতু আপনি একটি ধ্রুবককে বরাদ্দ করতে পারবেন না।
ওয়ার্লিন

94

আমি আপনার প্রশ্নের উত্তর দিতে হবে।

  1. জাভা যদি সি ++ এর বৈশিষ্ট্য সরবরাহ না করে তবে এর অর্থ বৈশিষ্ট্যটি ভাল নয়, তাই আমাদের এটি ব্যবহার করা বন্ধ করা উচিত।

হ্যাঁ, জাভাতে উপস্থিত নেই এমন কোনও বৈশিষ্ট্য হ'ল হার্ড ড্রাইভে অ্যানথেমা। এটি আপনার কোড বেস থেকে পোড়াতে হবে। যাঁরা মানেন না তারা বিদ্রূপিত হবে, তাদের প্রাণ র‌্যাড দেবতাদের প্রশংসা করত।

  1. সি ++ কোডটি সি ++ নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে (যেমন: বন্ধু ফাংশন, একাধিক উত্তরাধিকার) কেবল সি ++ প্রোগ্রামারদের দ্বারা বজায় রাখা বা পর্যালোচনা করা যেতে পারে, তবে আমরা কেবল জাভা (সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য ছাড়াই) এর মতো সি ++ লিখি, কোড উভয়ই বজায় রাখতে বা পর্যালোচনা করতে পারে সি ++ এবং জাভা প্রোগ্রামারগণ।

সন্দেহ হলে আপনার দলের নূন্যতম সক্ষম সদস্যের জন্য কোড লিখুন। কোডটি লেখার চেয়ে অনেক বেশি বার পড়া হয় এবং আপনি যে কোডটি লিখতে পারেন তেমন চালাকও পড়ার মতো নয়। কোড পর্যালোচনাগুলি যা আপনার সম্মুখ ডেস্ক কর্মীরা বুঝতে পারবেন না তা প্রত্যাখ্যান করা উচিত। সহায়তার জন্য, তাদের উইকএন্ডে ভিজ্যুয়াল বেসিক 2.0 তে কীভাবে প্রোগ্রাম করবেন তা শিখিয়ে নিন, তারপরে আপনি যে কোনও ভাষা ব্যবহার করছেন না কেন তাদের কোডিং শৈলী অনুকরণ করুন।

  1. আপনাকে কোনও দিন জাভাতে কোড রূপান্তর করতে বলা হতে পারে

সত্য! তবে জাভাতে থামবে কেন? আপনাকে একদিন কোডটিকে বেসিক, এসেম্বলার এবং / বা পার্লে রূপান্তর করতে বলা হতে পারে। যেহেতু এখানে প্রতিটি ভাষায় পার্ল দোভাষী রয়েছে, কেবল আপনার প্রোগ্রামটিকে লম্বা পার্ল স্ট্রিং হিসাবে লিখুন, এবং মার্শাল আর্গুমেন্টগুলিকে পছন্দের ভাষায় লিখুন।

এখন যখন আপনার ভাষা পরিবর্তন করতে হবে, তখন পার্ল স্ট্রিং মোড়ানো কোডটি আবার লিখুন।

  1. সি ++ নির্দিষ্ট বৈশিষ্ট্য ছাড়াই কোড সাধারণত আরও রক্ষণাবেক্ষণযোগ্য

এটি সত্য যে কোডটি কম বৈশিষ্ট্য ব্যবহার করে তা বজায় রাখা সহজ। এবং সমস্ত ভাষা যেমন একটি ট্যুরিং মেশিনের সমতুল্য, এবং একটি ট্যুরিং মেশিনের যে কোনও প্রোগ্রামিং ভাষার সবচেয়ে কম বৈশিষ্ট্য রয়েছে, উপরের পার্ল ইন্টারপ্রেটারটি আসলে একটি ট্যুরিং মেশিন (টেপ এবং সমস্ত) চালায় যা আপনার সমস্যার সমাধান করে।

  1. প্রতিটি সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য (যেমন: একাধিক উত্তরাধিকার) এর জাভাতে প্রয়োগ করার বিকল্প থাকতে হবে। যদি এটি না হয়, তার অর্থ ডিজাইন প্যাটার্ন বা কোড আর্কিটেকচার সমস্যাযুক্ত।

সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্যগুলির আসলে একটি মূল্যবান ব্যবহার রয়েছে। যেহেতু তারা জাভা নয়, তারা অ্যানথেমা এবং যাঁরা এটি ব্যবহার করেন তাদেরকে ধর্মবিদ্বেষী হিসাবে চিহ্নিত করা যেতে পারে। সি ++ এর মধ্যে যদি সেই ভাষা বৈশিষ্ট্য না থাকে তবে আপনি যেটিকে ত্যাগ করতে চান তা আপনি খুঁজে পেতে সক্ষম হবেন না। সি ++ ভাষার বৈশিষ্ট্যগুলি সমস্যার সমাধান করে!


দেখুন, সি ++ এবং জাভাতে আলাদা আলাদা ক্ষমতা রয়েছে capabilities সি ++ এবং জাভাের ছেদগুলিতে প্রোগ্রামিং এর ফলাফলের ফলে কোড উভয় ভাষার বেশিরভাগ সুবিধা ফেলে দিয়েছে ।

জাভা সি ++ বৈশিষ্ট্যগুলির কিছু অপব্যবহারের প্রতিক্রিয়া হিসাবে আংশিকভাবে বিকশিত হয়েছিল। এর অর্থ এই নয় যে প্রতিক্রিয়াটি ন্যায়সঙ্গত হয়েছিল, বিশেষত বছরগুলি পরে যখন বৈশিষ্ট্যগুলি পরিপক্ক হয়।

অপারেটর ওভারলোডিংয়ের মাধ্যমে আপনি ভয়ঙ্কর জিনিসগুলি করতে পারেন; তবে কোনও ভাষাই ভাষায় ভয়ঙ্কর কোড লেখা থেকে বিরত রাখতে পারে না, যদি না তা ভাষায় সমস্ত কোড লেখা থেকে বিরত থাকে।

এবং আপনি অপারেটর ওভারলোডিংয়ের সাথে খুব মার্জিত জিনিসগুলিও করতে পারেন। জটিল জিনিস বা ম্যাট্রিক্স ক্লাসের মতো সাধারণ জিনিস, যা জটিল সংখ্যা বা ম্যাট্রিক্সের মতো কাজ করে।

জাভাতে পাওয়া যায় না সি ++ বৈশিষ্ট্য ব্যবহার সম্পর্কে সতর্কতা সতর্কতার সাথে দেখা উচিত। আপনার বর্তমান দক্ষতা স্তরের বিকাশকারীদের বর্তমান সেট কোনও বৈশিষ্ট্য বুঝতে পারে না তার অর্থ এটি কখনই ব্যবহার করা উচিত নয়; একই সাথে, কেবলমাত্র আপনি কোনও বৈশিষ্ট্য ব্যবহার করতে পারবেন তার অর্থ এই নয় যে আপনার উচিত। যাইহোক, একটি জাভা-ভারী দোকানে, প্রতিক্রিয়াগুলি জাভা-অ্যাস্ক বৈশিষ্ট্যগুলির তুলনায় হওয়া উচিত প্রতিরোধের চেয়ে শক্তিশালী।

ভাষার মধ্যে কোডের রূপান্তর পুনর্লিখনের মাধ্যমে সর্বোত্তমভাবে সম্পন্ন করা হয়, কাঠামোগতভাবে তারা যতই কাঠামোযুক্ত হোক না কেন। এ জাতীয় পুনর্লিখন ছাড়াই এটি করার যে কোনও প্রচেষ্টা খারাপভাবে ব্যর্থ হতে চলেছে।

অনেকগুলি সি ++ নির্দিষ্ট বৈশিষ্ট্য রক্ষণাবেক্ষণের জন্য বিস্ময়কর। প্রকার মুছে ফেলা (যেমন std::function) আপনাকে ক্রমবিন্যাসকে ডিকুল করতে দেয়, যা নির্ভরতা হ্রাস করে। স্মার্ট পয়েন্টার এবং নির্ণায়ক জীবনকাল এবং আরআইআই রানটাইম বিস্ময়কে হ্রাস করে এবং রিসোর্স বয়লারপ্লেটকে পথছাড়া করে। ভারী স্ট্যাটিক টাইপ-চেকের অর্থ কোডটি কাজ করতে ব্যর্থ হওয়ার পরিবর্তে সংকলন করতে ব্যর্থ হয়। মিশ্র-ইনগুলি কোড সদৃশতা হ্রাস করে। ADL প্রকারক্রমক্রমের মধ্যে ইন্টারফেসের অ্যাড-হক স্বতন্ত্র প্রসারকে মঞ্জুরি দেয়। লাম্বদা আপনাকে যেখানে এটি ব্যবহৃত হয় তার পাশের কোডটি লিখতে দেয়। ফরোয়ার্ডিং এবং মুভিং কপিগুলি হ্রাস করে এবং কার্যক্ষম স্টাইল (পার্শ্ব-প্রতিক্রিয়া মুক্ত) প্রোগ্রামিংকে দক্ষ করে তোলে। অপারেটর ওভারলোডিং লাইনের শব্দ কমায় এবং কোডটিকে আরও মডেলিংয়ের মতো গণিতের মতো দেখায়।

টুরিং টার গর্ত থেকে সাবধান থাকুন। আপনি যে কোনও ভাষায় (টেপযুক্ত কাঁচা টুরিং মেশিন সহ) সমস্ত কিছু প্রয়োগ করতে পারেন, তবে এর অর্থ এই নয় যে আপনার উচিত । সি ++ তে জাভা-এস্কু কনস্ট্রাক্টস ব্যবহার করে সি ++ বৈশিষ্ট্যগুলি অনুকরণ করা একটি ভয়াবহ ধারণা; এটি অনাদায়ী কোডের ফলাফল করবে যা কেউ পড়তে বা বুঝতে পারে না।

আপনি জাভা ডিজাইন থেকে অনুপ্রেরণা নিতে পারেন এবং সেগুলি সি ++ এ পোর্ট করতে পারেন । আমি পাইথন ভাষার বৈশিষ্ট্যগুলি গ্রহণ এবং সেগুলিকে সি ++ এ প্রয়োগ করার দুর্দান্ত অনুরাগী, কারণ আমার বাক্য গঠনটি আমার পছন্দ like তবে এর অর্থ এই নয় যে আমি আমার ক্লাসের পদ্ধতিগুলি স্থির পদ্ধতি হিসাবে স্পষ্টভাবে গ্রহণ করে লিখি, তারপরে এমন একটি মোড়ক লিখি যা এটির স্থিতিশীল পদ্ধতিটির কলকে এগিয়ে দেয়।

আধুনিক সি ++ তেমন জাভা অনুকরণ এবং প্রত্যাখ্যান করা ভাষার মতো নয়। একটি ভাষার বৈশিষ্ট্য দ্বারা লক ডাউন করবেন না; "একটি সত্য ভাষা" নেই। নতুন ভাষা এবং সেগুলির বৈশিষ্ট্যগুলি সম্পর্কে জানুন এবং তাদের স্বাতন্ত্র্যতা শোষণ করুন।


1
-1, দীর্ঘ-ঘূর্ণিত এবং অস্পষ্ট।
djechlin

4
-1 যুক্তিযুক্ত, খড়ের লোক যুক্তি
user949300

28
+1, জিজ্ঞাসা করা প্রশ্নগুলির যথাযথ ডিকনস্ট্রাকশন এবং আমি হেসেছিলাম :)
বিড়াল

11
+1 টি। হাসিখুশি তবে বিষয়টি রাখে। লোকেরা এটি পড়ার জন্য অত্যন্ত স্পষ্ট।
লুইস মাসুয়েলি

14
"সি ++ এবং জাভাের ছেদগুলিতে প্রোগ্রামিংয়ের ফলাফলের ফলে কোড উভয় ভাষার বেশিরভাগ সুবিধা ফেলে দিয়েছে" " মাথার উপর পেরেক আঘাত! +1
Ajedi32

56

আমি কেবল আপনার কারণগুলির উত্তর দেব:

  1. আপনি কীভাবে এই সিদ্ধান্তে এসেছেন তা আমি বুঝতে পারি না। বিভিন্ন ভাষার আলাদা আলাদা বৈশিষ্ট্য রয়েছে। সুযোগ, ভাষার আর্কিটেকচার, কখনও কখনও স্রষ্টাদের পছন্দ এবং আরও অনেক কারণের উপর নির্ভর করে। কোনও ভাষার কিছু বৈশিষ্ট্য খারাপ হতে পারে তবে আপনার সাধারণীকরণটি ভুল ভুল আইএমএইচও।
  2. জাভা ঠিক যেমন সি ++ লেখার ফলে আরও খারাপ কোড হতে পারে। উদাহরণস্বরূপ, আজকাল সি ++ 11 দিয়ে আমি নতুন / মোছা ব্যবহার এড়াতে চাই না, তবে ভাগ করা পয়েন্টার ব্যবহার করি। আপনার দৃশ্যে আমি কেবল নতুন / মুছে ফেলার উপর নির্ভর করব। যদি আপনার প্রোগ্রামাররা কেবল জাভা বোঝে তবে তাদের প্রশিক্ষণ দিন বা আরও ভাল ভাড়া করুন।
  3. সম্ভবত কি তা ঘটবে? আপনি কেন প্রথমে জাভাতে লিখবেন না? আমি মনে করি একটি নতুন ভাষায় স্ক্র্যাচ থেকে পুনর্লিখন প্রোগ্রামগুলি সাধারণত একটি খারাপ ধারণা এবং এই জাতীয় ঝুঁকির জন্য আপনার সত্যিকারের ন্যায়সঙ্গততার প্রয়োজন হবে।
  4. এটি কেবল একটি অনুমান।
  5. আপনার পরিস্থিতি বা ব্যবহারের ক্ষেত্রে আইএমএইচওর উপর নির্ভর করে।

27
এবং জাভা-প্রোগ্রামাররাও ব্যবহার করবে না delete
পাওলো ইবারম্যান

8
আমি জাভা প্রোগ্রামারদের সম্পর্কে না জেনে মেমরি ফাঁস ঠিক করতে হয়েছিল delete। আমি যা স্মরণ করি, সেগুলির মধ্যে অন্তত একটির ক্ষেত্রে গতিশীল বরাদ্দ ( new) এর প্রয়োজনও ছিল না।
ইথান কামিনস্কি

16
@ ইথানকামিনস্কি হ্যাঁ, আপনি কীভাবে সহজেই একটি সি ++ নবাগত, বিশেষত জাভা ব্যাকগ্রাউন্ড থেকে আসা বা অনুরূপ কোনও ব্যক্তিকে দেখতে পাবেন। সব কিছুর জন্য নতুন ব্যবহার বন্ধ করুন!
লুয়ান

1
@ পাওলোএবারম্যান হ্যাঁ, এর চেয়েও খারাপ।
সাইমন

1
"আপনার দৃশ্যে আমি কেবল নতুন / মুছে ফেলার উপর নির্ভর করব" - মজার, আমি ভাবতাম যে "জাভা (যেমন) - কেবলমাত্র বৈশিষ্ট্যগুলি" সি ++ আইডিয়ামটি একচেটিয়াভাবে ব্যবহার করা হবে make_shared
কাইল স্ট্র্যান্ড

26

জাভাতে এমন বৈশিষ্ট্য রয়েছে যা অন্তর্নির্মিত, দ্রুত, নির্ভরযোগ্য আবর্জনা সংগ্রহকারী, একক মূলের অবজেক্ট শ্রেণিবদ্ধ, এবং শক্তিশালী অন্তর্নিবেশের মতো নয় +

জাভার অন্যান্য বৈশিষ্ট্যগুলি জাভা-এক্সক্লুসিভ বৈশিষ্ট্যগুলির সাথে একত্রে কাজ করার জন্য ডিজাইন করা হয়েছে এবং জাভার অনেকগুলি সি ++ বৈশিষ্ট্য বাদ দেওয়া সম্ভব হয়েছে কারণ নতুন বৈশিষ্ট্যগুলির অভাব রয়েছে। উদাহরণস্বরূপ, জাভাতে ডিস্ট্রিমেন্টিক ডেস্ট্রাক্টরগুলির সাথে স্ট্যাক-বরাদ্দকৃত বস্তু নেই, তবে অবশেষে জাভা 7 এর পরে সংস্থানগুলি (এবং জাভা-সহ-চেষ্টা করুন) এবং এই অভাব পূরণ করতে আবর্জনা সংগ্রহকারীকে অবরুদ্ধ করেছে।

সি ++ এর অবশেষে ব্লক বা আবর্জনা সংগ্রহ নেই। আপনি যদি ডেস্ট্রাক্টর ব্যবহার করেন না কারণ তারা জাভাতে উপস্থিত নেই (আমি চূড়ান্তকারী গণনা করি না), আপনি রিসোর্স ম্যানেজমেন্টের সি স্তরে রয়েছেন (অর্থাত্ সমস্ত ম্যানুয়াল), আপনি নিজের ক্লিনআপ এমনকি গোষ্ঠীও করতে পারবেন না আপনি যে কোনও ক্লিনআপ ব্লকে গিয়েছিলেন, তাতে জাভাও গেল না। আপনি কি সত্যিই ভাবেন যে এটি রক্ষণাবেক্ষণের উন্নতি করে?

জাভাতে একটি অবিচ্ছিন্ন অবজেক্টের শ্রেণিবিন্যাস রয়েছে যেখানে প্রতিটি শ্রেণি অবশেষে অবজেক্ট থেকে উদ্ভূত হয় এবং কয়েকটি আদিম ধরণের শ্রেণিতেও স্বয়ংক্রিয়ভাবে বাক্সযুক্ত হতে পারে। এটি একবারে অবজেক্টের পাতাগুলি লিখতে সক্ষম করে, অবজেক্টের পয়েন্টার ধরে রাখতে। জাভা 5 প্রবর্তিত জেনেরিকস, যা এই জাতীয় পাত্রে প্রয়োজনীয় ক্যাসেটগুলি থেকে মুক্তি দেয় তবে এখনও একই কোডটি সংকলন করে।

সি ++ এর মতো শ্রেণিবিন্যাস নেই। একাধিক প্রকারের জন্য কাজ করে এমন ধারকগুলির লেখার সুবিধার্থে, আপনি টেম্পলেটগুলি ব্যবহার করেন, যা বিভিন্ন ধরণের জন্য প্রয়োজনীয় হিসাবে সংকলক দ্বারা ইনস্ট্যান্ট করা ব্লুপ্রিন্ট। আপনি কি টেমপ্লেট (এবং ম্যাক্রোগ) ব্যবহার নিষিদ্ধ করবেন এবং একই ধরণের কোডটি বিভিন্ন ধরণের জন্য বারবার লিখতে, বা অকার্যকর পয়েন্টার ব্যবহারের সি রুটে যাবেন? (অপেক্ষা করুন, জাভা শূন্য পয়েন্টার নেই!) আপনি কি নিশ্চিত যে এটি রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি করবে?

একটি শালীন ভাষার অনেকগুলি বৈশিষ্ট্য রয়েছে যা একসাথে কাজ করার জন্য ডিজাইন করা হয়েছে। ভাষা A এর বৈশিষ্ট্যগুলি নিষিদ্ধ করে কারণ ভাষা বি তাদের নেই, আপনি ভাষা A কে বিকল করছেন, কারণ আপনি একই সাথে বি থেকে এমন বৈশিষ্ট্যগুলি যুক্ত করছেন না যা বিকে সুসংহত করে তোলে।

এর অর্থ এটি নয় যে আপনি অবশ্যই সি ++ এর অনুমোদিত বৈশিষ্ট্যগুলি সীমাবদ্ধ করবেন না। সি ++ হ'ল একটি বড়, historতিহাসিকভাবে বর্ধিত ভাষা যা প্রোগ্রামারকে সুরক্ষা এবং ব্যবহারের সহজলভ্যতার চেয়ে যা করতে চায় তা করতে সক্ষম করার উপর জোর দেয় এবং ভাল প্রোগ্রামগুলি তৈরি করার জন্য তার সমস্ত নমনীয়তার সমস্ত বৈশিষ্ট্যই প্রয়োজনীয় নয়। অনেকগুলি কোডিং মান রয়েছে যা কিছু বৈশিষ্ট্যগুলির ব্যবহারকে সীমাবদ্ধ করে; উদাহরণস্বরূপ গুগলের নির্দেশিকা বেশিরভাগ ক্ষেত্রে একাধিক উত্তরাধিকার, জটিল টেম্পলেট এবং ব্যতিক্রমগুলি নিষিদ্ধ করেছে (যদিও এটি শেষেরটি historicalতিহাসিক কারণে রয়েছে)। তবে কোনও বৈশিষ্ট্য নিষিদ্ধ নয় "কারণ জাভাতে এটি নেই"; বৈশিষ্ট্যগুলি কেবল সি ++ এর কাঠামোর মধ্যে বিবেচনা করা হয়।


27
পাকা সি ++ জানাতেন সাধারণত গুগল কোডিং নির্দেশিকা প্রত্যাখ্যান। আধুনিক সি ++ হ'ল যথেষ্ট ভাল কারণ এটি এই বৈশিষ্ট্যগুলি ব্যবহার করে। হ্যাঁ, এটি এটিকে আরও আলাদা করে তোলে।
জান হুডেক

17
মনে রাখবেন যে সি ++ এর অবশেষে ব্লক নেই, তবে এটির RAII রয়েছে, যা বেশিরভাগ ক্ষেত্রেই অনেক ভাল। এবং, আবার, অন্যরকম।
জান হুডেক

7
জাভা বেশিরভাগ ব্যবহারের Objectজন্য বেশ void*- হ্যাঁ, ইয়াক।
কোয়ান্টিন

1
বৈশিষ্ট্যগুলির পছন্দের বাইরেও রয়েছে স্টাইল এবং মূর্তিগুলির বিষয়। প্রোগ্রামগুলি পড়তে ও বজায় রাখা সহজ হয় যদি তারা যে ভাষায় রচিত ছিল সেগুলির জন্য সাধারণ প্রতিমা ব্যবহার করে। এমনকি যদি কেউ কেবল জাভা-জাতীয় বৈশিষ্ট্য ব্যবহার করে কোনও সি ++ প্রোগ্রামের একটি অংশ লিখতে পারে তবে ফলাফলটি অদ্ভুত, স্টিল্টেড সি ++ হবে।
প্যাট্রিসিয়া শানাহান

2
আমি এই উত্তরটি সঠিক ট্র্যাকটিতে থাকার জন্য উজ্জীবিত করব ("এটি করবেন না"), তবে আমি সি ++ এর চেয়ে জাভা একরকম "আরও উন্নত" বলে প্রাথমিক ধারণাটি দাঁড়াতে পারি না। সি ++ নেই প্রয়োজন একটি আবর্জনা সংগ্রাহক বা একটি একক রুট বস্তুর অনুক্রমের একই ভাবে জাভা দরকার নেই ... মাত্রই ভুল করে ... দুঃখিত আমি কারণ আমি কিভাবে, বাক্য শেষ জানি না মিস্ জাভা নির্ণায়ক destructors, এবং finallyতাদের জন্য প্রতিস্থাপন নয়। দুটি ভাষা মূলত পৃথক।
দেবসোলার

25

আমি ইতিমধ্যে অন্য উত্তর পোস্ট করা বিরক্ত করবেন কিনা তা নিয়ে আমি বিতর্ক করেছি যখন আপনার ইতিমধ্যে এমন একটি সংখ্যা রয়েছে যা সম্পূর্ণ যুক্তিসঙ্গত সিদ্ধান্ত বলে মনে হয়: আপনার ধারণাটি মূলত একটি বিপর্যয় যা হওয়ার অপেক্ষায় রয়েছে। আমি মনে করি, তবে, তারা এই উপসংহারের পিছনে কিছু অত্যন্ত প্রাসঙ্গিক কারণগুলি উল্লেখ করতে ব্যর্থ হয়েছে ।

জাভা এবং সি ++ এর মধ্যে পার্থক্যগুলি আপনি যে বিবরণে মনোনিবেশ করেছেন বলে মনে হচ্ছে তার থেকে অনেক গভীরতর চলে run

উদাহরণস্বরূপ, আপনি সি ++ এ একাধিক উত্তরাধিকার নিষিদ্ধ করার বিষয়ে কথা বলছেন। প্রথমত, আমি উল্লেখ করব যে এটি কেবল বিন্দুটি হারিয়েছে। জাভা "ইন্টারফেস" কে "ক্লাস" থেকে আলাদা জিনিস হিসাবে সংজ্ঞায়িত করে। একটি শ্রেণি অন্য একটি শ্রেণীর কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত, তবে ইন্টারফেসের একটি নির্বিচার সংখ্যক বাস্তবায়ন করতে পারে।

সি ++ দুটি ধারণাটিকে সেভাবে আলাদা করে না। নিকটস্থ এনালগ সি ++ জাভা একটি ইন্টারফেস বাস্তবায়ন প্রদান করা হয় আরেকটি ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। এই হিসাবে, দুটি যুক্তিসঙ্গতভাবে মোটামুটি ভাল রাখার জন্য, আপনাকে সম্ভবত সি ++ এ একাধিক উত্তরাধিকার ব্যবহার করা দরকার , তবে জাভা একটি শ্রেণীর তুলনায় মোটামুটি একইভাবে জাভা একটি ইন্টারফেসকে সীমিত করে এমন কিছু বেস ক্লাসকে সীমাবদ্ধ করতে চান (মূলত, মূলত এটি ফাংশন স্বাক্ষরগুলি নির্দিষ্ট করে তবে কমপক্ষে বেশিরভাগ ক্ষেত্রেই বাস্তবায়ন নয়)।

এটি সবেমাত্র দুজনের মধ্যে প্রকৃত পার্থক্যের পৃষ্ঠকেই স্ক্র্যাচ করে। বাস্তবে, যেখানে জাভা কোডটি ইন্টারফেসগুলি এবং সেই ইন্টারফেসগুলি প্রয়োগ করে এমন ক্লাসগুলি সংজ্ঞায়িত করার সম্ভাবনা রয়েছে, সি ++ কোড এমন কিছু টেমপ্লেট সংজ্ঞায়িত করতে পারে যা তার প্রয়োজনীয়তাগুলি পূরণ করে এমন কোনও শ্রেণীর সাথে কাজ করবে (ইন্টারফেস বাস্তবায়নের জন্য কেবল নির্দিষ্টভাবে সংজ্ঞায়িত নয়) (গুলি) এটি নির্দিষ্ট করে)।

আপনি যদি সত্যই কোডটি চান যা মূলত "সি ++ সিনট্যাক্স ব্যবহার করে জাভা" থাকে তবে আপনাকে অবশ্যই অবশ্যই পরবর্তী এবং এর মতো সমস্ত কিছু নিষিদ্ধ করতে হবে। আপনার জাভা জেনেরিকস সমর্থন করে এমন "টি এর ধারক" স্তরের মোটামুটি পর্যায়ে আপনার টেমপ্লেটগুলির ব্যবহার সীমাবদ্ধ করতে হবে। দুর্ভাগ্যক্রমে, এটি করার ফলে সি ++ কোড আসবে যে এ জাতীয় গোলমাল যে কেউ এটিকে বর্তমানে বিদ্যমান বলে ধরে রাখতে পারে না, এটি অন্য কোনও প্রোগ্রামিং ভাষায় অনুবাদ করার দীর্ঘমেয়াদী সম্ভাবনার কথা উল্লেখ না করে।

যদি আপনি সত্যিই এমন কোড চান যা ভবিষ্যতে অন্য কোনও ভাষায় রূপান্তর করতে পারে তবে এটিকে যতটা সম্ভব পরিষ্কার এবং পঠনযোগ্য করার জন্য প্রচেষ্টা করুন। আদর্শ হ'ল সিউডো-কোড লিখুন এবং এখনও এটি কার্যকর করা উচিত। ভাল-লিখিত আধুনিক সি ++ আপনার প্রস্তাবিত সাবসেটের চেয়ে আদর্শের সাথে যোগাযোগ করে। আপনি এটি কীভাবে লিখেন তা বিবেচনাধীন, আপনি যদি কখনও জাভাতে অনুবাদ করেন তবে আপনাকে অবশ্যই ব্যক্তিগতভাবে বিবৃতিগুলির বাক্য বাক্য গঠন নয়, কোডটি অনুবাদ করতে হবে।


অনেক সি ++ বৈশিষ্ট্য কিছু উপায়ে ব্যবহার করা যেতে পারে যা জাভা ধারণাগুলির জন্য সুন্দরভাবে ম্যাপ করে এবং অন্যান্য উপায়ে যা না হয়। একটি প্রোগ্রামের কিছু অংশের ভাষাগুলির কার্যকারিতার ওভারল্যাপিং উপসেটের বাইরে কিছু দরকার পড়ছে এবং "সি ++ সিনট্যাক্স ব্যবহার করে জাভা" হিসাবে এমন অংশগুলি লেখার চেষ্টা একটি ভয়াবহ গোলযোগ সৃষ্টি করতে চলেছে। অন্যদিকে, কোডের অন্যান্য অনেক অংশে ভাগ করা সাবসেটের বাইরে যে কোনও কিছু প্রয়োজন হতে পারে এবং কোডের সেই অংশগুলির জন্য ভাগ করে নেওয়া থাকার চেষ্টা করা উচিত যেখানে এটির বাইরে যাওয়ার কোনও বাধ্যতামূলক কারণ সেখানে সহায়ক হতে পারে।
সুপারক্যাট

সম্ভবত যেখানে আপনি "প্রয়োজন হতে পারে" বলছেন, আপনার সত্যিকার অর্থেই: "দরকার নেই"? ধরে নিচ্ছি, তবে আমি রাজি হই।
জেরি কফিন

হা. যদি জাভা সমর্থন করে এমন একটি প্ল্যাটফর্ম সমর্থন করা প্রয়োজন যা সি ++ নয় তবে কোডের কিছু অংশ অবশ্যই অবশ্যই স্ক্র্যাচ থেকে আবার লিখতে হবে এবং সেগুলি কিছু জাভা-বান্ধব কৌশল ব্যবহার করে লেখা হয়েছিল কিনা তা বিবেচ্য নয়, কারণ তারা ' যেভাবেই হোক নতুন করে লেখা হবে। অন্য অংশগুলি লেখা সম্ভব হতে পারে তবে পুরোপুরি পুনর্লিখন ছাড়াই এগুলি স্থানান্তরিত করার অনুমতি দেয় এবং কিছু ক্ষেত্রে এটি করার জন্য অতিরিক্ত অতিরিক্ত ব্যয়ও কম হতে পারে।
সুপারক্যাট

4
@ সুপের্যাট: ওটিওএইচ, জাভা সমর্থন করে এমন প্ল্যাটফর্মের সংখ্যা দিলেও সি ++ নয়, এটি আমাকে সমস্যার সন্ধানের প্রায় পুরোপুরি সমাধান হিসাবে আঘাত করে strikes
জেরি কফিন

কিছু সময়ের জন্য, জাভা অ্যাপলেটগুলির জন্য ব্রাউজার সমর্থন সি ++ অ্যাপলেটগুলির চেয়ে ভাল ছিল। জাভাস্ক্রিপ্টের জন্য ব্রাউজার সমর্থন (জাভা সম্পর্কিত কোনও সম্পর্ক নেই) তবে যথেষ্ট উন্নত হয়েছে যে এটি মূলত উভয় থেকেই নেওয়া হয়েছে।
সুপারক্যাট

11

যদি আপনি এক্স ভাষায় কোড লিখতে চলেছেন তবে ভাষাটি সঠিকভাবে শিখতে এবং সমস্যাটি সমাধানে সহায়তা করার জন্য এটি প্রদত্ত সমস্ত বৈশিষ্ট্যগুলি ব্যবহার করার জন্য সময় ব্যয় করুন। খারাপ জিনিসগুলি ঘটে যখন আপনি "ভাষা শব্দের" শব্দটি এক ভাষা থেকে অন্য ভাষায় অনুবাদ করার চেষ্টা করেন, তা সে জাপানি থেকে ইংরেজী হোক বা জাভা থেকে সি ++ হোক। সমস্যার ভাল বোঝাপড়া শুরু করে ভাষাটি যেভাবে ব্যবহার করা হচ্ছে তার জন্য সবচেয়ে প্রাকৃতিক সেভাবে সমাধানটি প্রকাশ করা আরও ভাল।

কয়েক বছর আগে আমি একটি সি প্রোগ্রাম দেখেছি যার কোনও ইনডেন্টেশন ছিল না এবং প্রতিটি বিবৃতি column কলামে শুরু হয়েছিল, কারণ কোডটির লেখক একটি ফোর্টরান প্রোগ্রামার ছিলেন যা সি ব্যবহার করার ক্ষেত্রে ঘটেছিল, অন্য ফোর্টরান প্রোগ্রামাররা পয়েন্টার নামক এই নতুন পদযুক্ত জিনিসগুলি সম্পর্কে ঘাবড়ে গিয়েছিলেন। পয়েন্টারগুলিতে পয়েন্টার উল্লেখ করার মতো হৃদয় আমার ছিল না, আমি মনে করি তারা ঘটনাস্থলে অজ্ঞান হয়ে গেছে।

ভবিষ্যতে এই কোড বজায় রাখার জন্য কাউকে নিয়োগ দেওয়ার কল্পনা করুন। এটি যদি ভাল সি ++ কোড হয় তবে আপনি একটি দক্ষ সি ++ বিকাশকারী নিয়োগ করতে সক্ষম হবেন এবং তাদের আশেপাশের উপায়গুলি সন্ধান করতে সক্ষম হওয়া উচিত। যদি এটি "সি ++ এ জাভা" হয় তবে সি ++ বা জাভা বিকাশকারীদের উভয়ই কোড বোঝার পক্ষে সহজ সময় পাবে না।


7

আপনার সমস্ত কারণ অস্বীকার করা যেতে পারে:

জাভা যদি সি ++ এর বৈশিষ্ট্য সরবরাহ না করে তবে এর অর্থ বৈশিষ্ট্যটি ভাল নয়, তাই আমাদের এটি ব্যবহার করা বন্ধ করা উচিত।

এর অর্থ এই নয় যে বৈশিষ্ট্যটি ভাল নয় (কোনও বৈশিষ্ট্য সহজাতভাবে খারাপ হতে পারে না)। এর অর্থ কেবল এই যে বৈশিষ্ট্যটি প্রায়শই অপব্যবহার করা হয়েছিল (বা বর্জ্য সংগ্রহের বিরুদ্ধে সরাসরি পয়েন্টারগুলির মতো মৌলিক ধারণাগুলির কারণে প্রয়োগ করা অসম্ভব)। জাভা সংজ্ঞা অনুসারে আরও সহজ এবং আরও প্রোগ্রামার বান্ধব হ'ল, অতএব এমন বৈশিষ্ট্যগুলি অপসারণ করা যা সেগুলি সহজেই আপত্তিজনক প্রমাণিত হয়।

সি ++ কোডটি সি ++ নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে (যেমন: বন্ধু ফাংশন, একাধিক উত্তরাধিকার) কেবল সি ++ প্রোগ্রামারদের দ্বারা বজায় রাখা বা পর্যালোচনা করা যেতে পারে, তবে আমরা কেবল জাভা (সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য ছাড়াই) এর মতো সি ++ লিখি, কোড উভয়ই বজায় রাখতে বা পর্যালোচনা করতে পারে সি ++ এবং জাভা প্রোগ্রামারগণ।

ওহ এটা হতে পারে? আসুন সহজ সি ++ কোডটি দেখুন:

int len = mystring->size();

ওহো, কোনও "ভাষা-নির্দিষ্ট" বৈশিষ্ট্য ব্যবহার করা হয়নি, তবে এটি ইতিমধ্যে জাভা দেবগণের দ্বারা অভাবনীয়! কারণ জাভাতে আপনি "এর সাথে অবজ্ঞা করেন।" এখানে যখন এটি "->।

আপনাকে কোনও দিন জাভাতে কোড রূপান্তর করতে বলা হতে পারে

অথবা সি #। বা হাস্কেল বা পাইথন। বা রুবি। বা কোবল (হ্যাঁ, আপনি পারেন!)। ভবিষ্যতকে কীভাবে বলতে পারেন?

সি ++ নির্দিষ্ট বৈশিষ্ট্য ছাড়াই কোড সাধারণত আরও রক্ষণাবেক্ষণযোগ্য।

একেবারে বিপরীত। প্রোগ্রামিং আরও সহজতর করার জন্য প্রতিটি বৈশিষ্ট্য চালু করা হয়েছিল। উদাহরণস্বরূপ: ফ্লোটে চলমান একটি প্রোগ্রাম নিন। জটিল নম্বর পরিচালনা করতে এখন এটি আপগ্রেড করুন। অপারেটর ওভারলোডিং উদ্ধার!

প্রতিটি সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য (যেমন: একাধিক উত্তরাধিকার) এর জাভাতে প্রয়োগ করার বিকল্প থাকতে হবে। যদি এটি না হয়, তার অর্থ ডিজাইন প্যাটার্ন বা কোড আর্কিটেকচার সমস্যাযুক্ত।

তবে জাভা একাধিক উত্তরাধিকার আছে! একে বলে "ইন্টারফেস"। জাভা বাস্তবায়ন হ'ল সবকিছু থেকে উদ্ভূত ভয়ঙ্কর হীরা এড়াতে সমস্যাযুক্ত কাজ Object। এটি উপস্থাপনের মাধ্যমে সম্পন্ন হয়েছে interfaceযার একমাত্র উদ্দেশ্যটি এমন কিছু হতে হবে যা থেকে প্রাপ্ত হয় না Object। সি ++ এ কখনও সমস্যা ছিল না - কোনও বাধ্যতামূলক সাধারণ বেস নেই তাই প্রতিটি শ্রেণি ভয়ঙ্কর হীরা ছাড়া ইন্টারফেস হিসাবে কাজ করতে পারে।

পার্শ্ব নোট: জাভা সম্প্রতি চালু হয়েছে ... ইন্টারফেসে কংক্রিট পদ্ধতি। সি ++ বৈশিষ্ট্য যুক্ত করে সর্বদা এমন সমস্যা সমাধান করতে হবে যা আগে কখনও ছিল না।

আপনি কেবলমাত্র খুব অল্প কিছু জিনিস "সি ++ তে রেখেছেন তবে জাভা নন" mentioned সি ++ এবং জাভার মধ্যে সবচেয়ে বড় পার্থক্যগুলির মধ্যে একটি হ'ল মেমরি বিন্যাসের নিয়ন্ত্রণ। আপনি বস্তুগুলিতে পয়েন্টারগুলির অ্যারে তৈরি করতে পারেন (ঠিক জাভা এর মতো) অথবা আপনি সংগত মেমরি ব্লক তৈরি করতে পারেন। এখন, যদি আমি এমন একটি সি ++ বৈশিষ্ট্য সম্পর্কে চিন্তিত ছিল যা জাভা ডিভসকে বিভ্রান্ত করতে পারে, তবে এটি লুকিয়ে থাকা এবং সূক্ষ্ম কিছু যা আমার তালিকায় সুস্পষ্ট এবং একাধিক উত্তরাধিকার বা ওভারলোডেড অপারেটরগুলির মতো প্রথম দর্শনের মতো স্বীকৃতের চেয়ে অনেক বেশি স্থান পাবে।

নীচের লাইন: ক্লিন কোডটি ক্লিন কোড। জাভা বা সি ++ - একই পার্থক্য। শুধু সহজ রাখুন। অপ্রয়োজনীয় জটিলতাগুলি খারাপ কোডের প্রধান কারণ।


জাভা কিছু বৈশিষ্ট্য এবং গ্যারান্টি সরবরাহ করে যা এমন ভাষায় অসমর্থনীয় যা সি ++ এর সমস্ত বৈশিষ্ট্য সরবরাহ করে। উদাহরণস্বরূপ, কোনও ভাষা সি ++ এ অন্তর্ভুক্ত একাধিক উত্তরাধিকারের সাধারণীকরণ ফর্মগুলি সরবরাহ করার সময় গতিশীল প্রকারের লোডিং এবং জাভার সম্পূর্ণ পরিচয়-সংরক্ষণের কাস্টের অনুমতি দিতে পারে না।
সুপারক্যাট

আপনি এখানে কেন বলছেন তা আমি বুঝতে পারি না। প্রশ্ন জাভা বৈশিষ্ট্যগুলি সম্পর্কে নয় যা সি ++ এ পুনরুত্পাদন করা যায় না, এটি জাভা বাতিল হওয়া সি ++ বৈশিষ্ট্যগুলির বিষয়ে।
এজেন্ট_এল

আমার বক্তব্যটি হ'ল জাভাতে কিছু বৈশিষ্ট্য সি ++ তে অন্তর্ভুক্ত করা হয়নি, বরং জাভার কয়েকটি বৈশিষ্ট্য সি ++ এর অন্তর্ভুক্ত থাকা অন্যান্য বৈশিষ্ট্যগুলির সাথে মূলত অসঙ্গত, যেমন কোনও ভাষার উভয়ই সমর্থন করে এমন ধরণ থাকতে পারে না (সি ++ / সি এলআই এর মতো ভাষা) সি ++ বৈশিষ্ট্য এবং জাভা-ইশ বৈশিষ্ট্যগুলিকে সমর্থনকারী প্রকারগুলিকে সমর্থন করে এমন প্রকার রয়েছে তবে তারা কার্যকরভাবে সীমাবদ্ধ আন্তঃঅযুক্তি সহ পৃথক ইউনিভার্সে বাস করে)।
সুপারক্যাট

6

না, আপনার সাধারণত সি ++ লেখা উচিত নয় যেমন এটি জাভা ছিল, এবং আপনার অবশ্যই জাভাতে উপস্থিত নয় এমন সি ++ ভাষা বৈশিষ্ট্যগুলি বাদ দেওয়া উচিত নয়।

একটি জিনিসের জন্য, জাভা হ'ল আবর্জনা সংগ্রহ করা, এবং এর ফলে সি ++ "মুছুন" কীওয়ার্ডের সমতুল্য নেই। ঠিক আছে, সুতরাং আপনি মোছা ছাড়াই একটি প্রোগ্রাম বাস্তবায়ন করুন, কারণ আপনার নিয়ম অনুযায়ী এটি অনুমোদিত নয়।

অভিনন্দন, আপনার এখন একটি স্মৃতি ফাঁস;)। এটি তাত্ত্বিক নয়, - আমি ওপেন সোর্স গেমের মধ্যে এই সঠিক পরিস্থিতিটি দেখেছি।

একইভাবে, জাভা বেশ সি ++ পয়েন্টার, যা থেকে একটি নিয়ম মত কিছু নেই অনেক সাধারণ ফাংশন কল নিয়মাবলী।

সি ++ এর বৈশিষ্ট্য রয়েছে যা আপনার সম্ভবত এড়ানো উচিত (নীচে দেখুন), তবে "জাভাতে না থাকা" ভাল লিটমাস পরীক্ষা নয়।


আরও ভাল নির্দেশিকা নিম্নলিখিত হবে:

  1. আপনার ভাষা, পরিবেশ এবং সরঞ্জামগুলির জন্য উপযুক্ত এমন কোড লিখুন।
  2. আপনার দল বুঝতে পারে এমন কোড লিখুন ।
  3. আপনার দলটি প্রদত্ত ডোমেনে সক্ষম কিনা তা নিশ্চিত করুন।

আইটেম (3) এর অর্থ হল আপনার সি ++ তে প্রশিক্ষণ না দিয়ে সি ++ তে জাভা প্রোগ্রামার কোডগুলি থাকা উচিত নয়। কিছু সূক্ষ্ম তবে অত্যন্ত গুরুত্বপূর্ণ পার্থক্য রয়েছে যা তারা এটিকে জাভার কোনও অদ্ভুত উপভাষার মতো আচরণ করার চেষ্টা করছেন কিনা তা শিখতে পারে না।

আইটেম (২) এর অর্থ হ'ল, যদি আপনার দল বিশেষত একাধিক উত্তরাধিকার নিয়ে অস্বস্তি বোধ করে (উদাহরণস্বরূপ), এবং যদি পর্যাপ্ত সমাধান রয়েছে যা এটি ব্যবহার করে না, তবে বিকল্প বিকল্পটি ব্যবহার করা ভাল। তবে এটি আপনার দলের উপর বিশেষভাবে নির্ভর করে। অন্যদিকে, আপনার দল যদি একাধিক উত্তরাধিকারের চেয়ে বিকল্প বিকল্পটি নিয়ে বেশি অস্বস্তি বোধ করে তবে একাধিক উত্তরাধিকার ব্যবহার করুন!


শেষ অবধি, সি ++ এর ভাষা বৈশিষ্ট্য রয়েছে যা তর্কাতীতভাবে এড়ানো উচিত। যদি আপনি এটি জানতে চান তবে আলাদা ভাষার প্রোগ্রামারদের চেয়ে সি ++ প্রোগ্রামারদের জিজ্ঞাসা করুন । শুরু করার কয়েকটি উদাহরণ হ'ল পয়েন্টার পাটিগণিত (সর্বজনীন conকমত্য নয়) এবং গোটো।


6

অন্যান্য উত্তরে ইতিমধ্যে কিছু ভাল পয়েন্ট রয়েছে তবে আমি আপনার প্রশ্ন এবং বিবৃতি পৃথকভাবে সম্বোধন করে আরও একটি সম্পূর্ণ উত্তর সরবরাহ করতে চাই।


জাভা যদি সি ++ এর বৈশিষ্ট্য সরবরাহ না করে তবে এর অর্থ বৈশিষ্ট্যটি ভাল নয়, তাই আমাদের এটি ব্যবহার করা বন্ধ করা উচিত।

এটি বেশ উত্তমরূপে জবাব দেওয়া হয়েছে: জাভা সি ++ এর "ভাল অংশগুলি" নয় বা এটি ভাবার কোনও কারণ নেই।

বিশেষত, যদিও প্রতিটি পৃথক সি ++ বৈশিষ্ট্যের গুণাগুণ বিতর্কযোগ্য তবে জাভা অংশ নয় এমন সি ++ 11 / সি ++ 14 এর অনেকগুলি বৈশিষ্ট্য অগত্যা বাদ দেওয়া হয় না কারণ জাভা ডিজাইনাররা ভাবেন যে তারা একটি খারাপ ধারণা। উদাহরণস্বরূপ, সংস্করণ 8 পর্যন্ত জাভাতে ল্যাম্বডাস ছিল না, তবে তারা সি ++ 11 স্ট্যান্ডার্ডে সি ++ এর সাথে পরিচিত হয়েছিল। জাভা 8 এর পূর্বে আপনার অনুমান যে জাভা থেকে সি ++ বৈশিষ্ট্যগুলি নিখোঁজ হয়েছে কারণ সেগুলি "ভাল নয়" বলতে বোঝায় যে ল্যাম্বডাস একটি ভাষা বৈশিষ্ট্য হিসাবে "ভাল নয়" (সর্বত্র এলআইএসপিয়ারদের বিভীষিকার জন্য) আপনি সম্ভবত জাভাকে পছন্দ করেছেন এমনটি শুনে সম্ভবত যথেষ্ট ভয়াবহ ঘটনা ঘটেছে )। তবে এখন জাভা ডিজাইনাররা ল্যাম্বডাসে তাদের স্ট্যাম্প অফ এপ্রোভাল (টিএম) রেখেছেন, তাই তারা এখন একটি ভাল জিনিস।

কিছুটা গভীর খনন করতে, এমনকি জাভা 8-তে, ল্যাম্বডাস-এ-ক্লোজারগুলি সি ++ 14 এর ল্যাম্বডাসের মতো নমনীয় নয়, তবে এটি জেভিএম আর্কিটেকচারের সীমাবদ্ধতার কারণে হতে পারে একটি সচেতন সিদ্ধান্তের চেয়ে যে আরও নমনীয় পদ্ধতিটি খারাপ থেকে খারাপ হয় ভাষা নকশা দৃষ্টিভঙ্গি।


সি ++ কোডটি সি ++ নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে (যেমন: বন্ধু ফাংশন, একাধিক উত্তরাধিকার) কেবল সি ++ প্রোগ্রামারদের দ্বারা বজায় রাখা বা পর্যালোচনা করা যেতে পারে, তবে আমরা কেবল জাভা (সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য ছাড়াই) এর মতো সি ++ লিখি, কোড উভয়ই বজায় রাখতে বা পর্যালোচনা করতে পারে সি ++ এবং জাভা প্রোগ্রামারগণ।

আমি যে প্রতিক্রিয়া জানাতে চেয়েছিলাম এটিই মূল বিষয়।

বিস্তৃতভাবে বলতে গেলে, প্রোগ্রামারদের কাছ থেকে কোড পর্যালোচনা পাওয়ার কিছু মূল্য থাকতে পারে যারা আপনার ব্যবহার করা ভাষার সাথে ঘনিষ্ঠভাবে পরিচিত নয়। তারা আপনাকে আপনার ফাংশন / পদ্ধতির নাম এবং মন্তব্যের স্পষ্টতা সম্পর্কে মূল্যবান মতামত দিতে পারে এবং (যেমন আপনার প্রশ্নটি সঠিকভাবে বোঝায়) যদি ভাষাটি তারা ইতিমধ্যে জানে এমন এক বা একাধিক ভাষার অনুরূপ হয় তবে তারা বেসিক প্রোগ্রামের প্রবাহটি অনুসরণ করতে সক্ষম হতে পারে এবং সম্ভাব্যভাবে যুক্তি ত্রুটিগুলি ধরা।

তবে, এটি এমন নয় যে এই ধরণের পর্যালোচনাটি আপনি যে ভাষা ব্যবহার করছেন তা বাস্তবে জানেন এমন বিকাশকারীদের কাছ থেকে "সমান হিসাবে ভাল" বা "সমতুল্য" হতে হবে। মূলত, এর কারণ এটি একটি ভাষা অন্যর মতো দেখতে তৈরি করা সাধারণত সূক্ষ্ম পার্থক্যগুলি আড়াল করে রাখে, যখন একটি ভাষার সাথে অন্যর মতো আচরণ করা হয় (বিশেষত সি ++ এবং জাভা ক্ষেত্রে) ভাষার জন্য অ-পরিচয়মূলক হতে পারে এবং / অথবা এখনও খুব বিভ্রান্তিকর হতে পারে পর্যালোচকদের জন্য।

প্রথমে, সি ++ "জাভা" এর মতো দেখতে তৈরি করার অর্থ কী তা নিয়ে ভাবুন। একটি সাধারণ কেস হিসাবে, আপনি newজাভায় যেমন অবজেক্টগুলি ইনস্ট্যান্ট করতে ব্যবহার করতে পারেন :

Foo foo = new Foo();

তবে অবজেক্টগুলি এই পদ্ধতিতে কল করার ->পরিবর্তে ব্যবহার করুন ., সুতরাং আপনি যদি জাথার মতো দেখতে কল কল করতে চান তবে আপনাকে অবশ্যই এটি লিখতে হবে:

Foo& foo = *new Foo();

তবে এটি অ-মূ ;়; বিশেষত, মেমরিটি পরে ব্যবহার করে পরিষ্কার করতে হবে delete &foo, যা কিছু অভিজ্ঞ সি ++ ডিভাস আইনী কোড হিসাবে বুঝতে পারেন না । উভয় ক্ষেত্রেই, মজার অ জাভা মত সর্বত্র সিঁচিত প্রতীক, তাই আমরা পারব না বেশ ভাষা জাভা "মত চেহারা," না। (আপনি আরও খারাপ, বা *newব্যবহার করে বাদ দিয়ে দিতে পারেন , তবে তারপরে আপনি কেবল আপনার সহকর্মী বিকাশকারীদের আপনাকে ঘৃণা করার জন্য অনুরোধ করছেন)) এবং উপরে বর্ণিত হিসাবে জাভাতে উপস্থিত নেই, সুতরাং কোনও ক্ষেত্রে (অন্য উত্তরে উল্লিখিত হিসাবে) ) আপনি কখনই স্মৃতি ফাঁস ছাড়াই জাভাতে যেভাবে অবজেক্ট-ব্যবহার "চেহারা" করতে পারেন তা করতে পারেন না।#define New *new#define new *newdelete

তবে আধুনিক সি ++ এর মধ্যে স্মার্ট শেয়ার্ড পয়েন্টার রয়েছে, যা জাভা-র মেমরি-পরিচালিত ভেরিয়েবল-রেফারেন্সের মতো আচরণ করে। জাভাতে যে কোনও জায়গায় আপনি লিখতে পারেন Foo foo = new Foo();, আপনি তার পরিবর্তে লিখতে পারেন:

std::shared_ptr<Foo> foo = std::make_shared<Foo>();

এখন আপনি এমন একটি ভাষা বৈশিষ্ট্য ব্যবহার করছেন যা জাভা হুডের নীচে আসলে অনেকটা। তবে হঠাৎ আপনার অ-সি ++ পর্যালোচকদের কাছে অনেক কিছুই ব্যাখ্যা করার আছে: এই জিনিসটি কী shared_ptr? সূক্ষ্ম কৌতুক "গটচস" make_sharedকী? (এটি নিখুঁত-ফরোয়ার্ডিং ব্যবহার করে, যার কিছু ব্যর্থতার কেস রয়েছে এবং এটি "ভুল" কনস্ট্রাক্টরকে ডেকে আনতে পারে)) কেন পদ্ধতিগুলি কল করা প্রয়োজন ->, তবে .সংকলক দ্বারা কিছু পদ্ধতি ব্যবহারের অনুমতি দেওয়া হয়েছে কেন? ( shared_ptrএর নিজস্ব পদ্ধতি Foo::reset(void)রয়েছে )) যদি পদ্ধতিটি বিদ্যমান থাকে তবে অজ্ঞান বিকাশকারী এটির সাথে কল করার চেষ্টা করতে পারে foo.reset(), যা (যদি Fooকলটি আসে তখন কেবলমাত্র একটি অংশীদারি পয়েন্টার উপস্থিত থাকে) অন্তর্নিহিত মেমরিটি মুছে ফেলবে এবং বাতিল করবে foo, এবং জাভা বিকাশকারীরা এই সমস্যাটি ধরার সম্ভাবনা নেই।

অধিকন্তু, সি ++ করেছেন অনেক এর ফাঁদ যে নির্দিষ্ট করার ভাষা। সর্বোপরি আমি বলতে পারি, বেশিরভাগ সি ++ বিকাশকারীরা "নিরাপদ" সি ++ অনুশীলনের জন্য ধীরে ধীরে তাদের নিজস্ব প্রতিভা বিকাশ করে এই সমস্যাগুলি মোকাবেলা করতে শেখে, যা তাদের বা তাদের উন্নয়ন দলের কাছে প্রায়শই কিছুটা স্বতন্ত্র থাকে (উদাহরণস্বরূপ বিদ্যমান উত্তরগুলিতে উল্লেখ রয়েছে যা দেখুন) গুগল কোডিংয়ের অনুশীলন এবং এতে মন্তব্য করে যে "সিজনেড সি ++ প্রবীণরা সাধারণত গুগল কোডিং গাইডলাইনগুলি প্রত্যাখ্যান করে")। সমস্ত দাবি যে ভাষাটি খুব জটিল হতে পারে, মনে হয় (আমার অভিজ্ঞতায়, কমপক্ষে) সাধারণত কিছুটা পরিবর্তনের সাথে দেখা হয় "ভাল, এটি ভুল ব্যবহার বন্ধ করুন" " আমি বুঝতে পারছি এই সি ++ সম্প্রদায়ের একজন অত্যন্ত নেতিবাচক দৃশ্য, এবং সেখানে অবশ্যই অভিজ্ঞ ডেভেলপার আরো ভাষা-শিক্ষার্থীদের আউট সাহায্য করতে ইচ্ছুক, কিন্তু আছে উদাহরণস্বরূপ অপরিজ্ঞাত আচরণ সম্পর্কে একটি নির্দিষ্ট প্রতিরক্ষা বলে মনে হচ্ছে (উদাহরণস্বরূপ আমার 'ক্ষতি' লিঙ্কে আলোচনার বেশিরভাগ অংশ দেখুন)।

জাভা বিকাশকারীরা কেবল কোড পর্যালোচনার মাধ্যমে এই সমস্যাগুলি খুঁজে পেতে এবং সংশোধন করতে সহায়ক হবে না।


আপনাকে কোনও দিন জাভাতে কোড রূপান্তর করতে বলা হতে পারে।

আপনি ডিজাইনের পর্যায়ে থাকাকালীন ভবিষ্যতে আপনার কোডটির কী ঘটতে পারে তা আমলে নেওয়ার চেষ্টা করার জন্য এটি সম্পূর্ণ বৈধ - প্রশংসনীয়, এমনকি -।

তবে, প্রথমে, এই বিশেষ বিবেচনাটি দূরবর্তী সম্ভাবনার মতো বলে মনে হয়: কোডটি সাধারণত হয় হয় যেমনটি পুনরায় ব্যবহার করা হয় (উদাহরণস্বরূপ আপনি কিছু বা সমস্ত কর্মরত সি ++ কোড কোনও ভবিষ্যতের জাভা সফ্টওয়্যারটিতে একটি জেএনআই ইন্টারফেস ব্যবহার করে প্লাগ করতে পারেন) বা পুরোপুরি পুনরায় লিখেছিলেন rather সরাসরি ম্যানুয়ালি "প্রতিলিপি" থেকে

এবং দ্বিতীয়, আপনি পরে বলবেন,

প্রতিটি সি ++ ভাষা নির্দিষ্ট বৈশিষ্ট্য (যেমন: একাধিক উত্তরাধিকার) এর জাভাতে প্রয়োগ করার বিকল্প থাকতে হবে ....

এটি মূলত আপনার "জাভাতে রূপান্তর" পয়েন্ট বাতিল করে। যদি সফ্টওয়্যারটি আইডেম্যাটিক সি ++ এ লিখিত হয় এবং তার পরে আইডেম্যাটিক জাভাতে রূপান্তরিত হয় তবে জাভা বৈশিষ্ট্যগুলিতে সি ++ বৈশিষ্ট্যগুলির সুনির্দিষ্ট এক থেকে এক ম্যাপিং প্রয়োগ করে এই রূপান্তরটি (বা পারে!) হওয়ার কোনও কারণ নেই।


সি ++ নির্দিষ্ট বৈশিষ্ট্য ছাড়াই কোড সাধারণত আরও রক্ষণাবেক্ষণযোগ্য।

আপনি এখানে কী বোঝাতে চেয়েছেন তা পরিষ্কার নয়, তবে আপনি এর থেকে কিছুটা অংশেই সম্মত হন: আপনি যদি খুব যত্নবান না হন এবং আপনি সতর্ক হন না কেন, সি ++ বৈশিষ্ট্যগুলি রক্ষণাবেক্ষণের সমস্যা হতে পারে। সি ++ FQA লাইট (ক ওয়েবসাইট ভাষা ও কেউ অন্তত আসলে মোটামুটি ভাল বুঝতে প্রদর্শিত হয় সেখান থেকে এর adherents সমালোচনা) বলে যে,

... 80% বিকাশকারী ভাষার প্রায় 20% ভাষা বুঝতে পারে। এটি বিভিন্ন লোকের জন্য একই 20% নয়, সুতরাং একে অপরের কোড বোঝার জন্য তাদের উপর নির্ভর করবেন না।

অনুগ্রহ করে নোট করুন: আপনি যদি সি ++ অনুরাগী হন এবং আপনি আমার উত্তরটিতে এই মুহুর্তে পৌঁছে যান এবং এই মন্তব্যটি করতে ঝোঁক বোধ করেন যে এফকিউএর লেখক আসলে সি ++ বুঝতে পারে না বা তার বেশিরভাগ যুক্তি থেকে স্বতন্ত্র , দ্রষ্টব্য যে (1) আমি তাকে উদ্ধৃত করার ঠিক দুটি বাক্য পরে আমি স্বীকার করেছি যে এফকিউএ খুব পক্ষপাতদুষ্ট উত্স, এবং (২) আমি কী বলতে চাইছি তাতে এফকিউএ লেখক সি ++ বুঝতে পেরেছেন কিনা তাতে আসলেই কিছু যায় আসে না , এবং আমি সি ++ কে ঘৃণা করার চেষ্টা করছি না, এবং আমি এফকিউএর উদ্ধৃতি দিয়েছি বলে ধরে নিই যে আপনি আমি বিরোধী-সি +++ ধরে না রেখে বাকী পোস্টটি পড়া উচিত। নোটের সমাপ্তি।

একইভাবে লিনাস টরভাল্ডস মূলত এই কারণে সি ++ ঘৃণা করে (সতর্কতা: লিঙ্কটিতে সত্যিকারের কুখ্যাত লিনাস শৈলীতে প্রচুর শপথ গ্রহণ করা হয়)।

স্পষ্টতই, এগুলি বিষয়টি খুব পক্ষপাতদুষ্ট, তবে সি ++ প্রবক্তারাও প্রায়শই বলে থাকেন যে আপনার ভাষা বৈশিষ্ট্য-সেটটির সম্পূর্ণতা ব্যবহার করা উচিত নয় (আরও একবার, গুগলের কোডিং গাইডলাইনসটি দেখুন; এছাড়াও, সি ++ এর স্রষ্টা বর্জন স্ট্রস্ট্রপ) , প্রকাশ্যে বলেছে, "সি ++ এর মধ্যেই অনেক ছোট এবং পরিষ্কার ভাষা বেরিয়ে আসার জন্য সংগ্রাম করা হচ্ছে")।

সুতরাং আমি মনে করি যে সি ++ বৈশিষ্ট্যগুলি অপব্যবহার করা খুব সহজ হতে পারে এমন ধারণার কিছু যোগ্যতা রয়েছে, বিশেষত আপনি যদি জাভা ব্যাকগ্রাউন্ড থেকে এসেছেন। তদুপরি, নিজেকে ভাষার কিছু উপসরে সীমাবদ্ধ করে এই সমস্যাগুলি দূর করার ধারণার যোগ্যতা রয়েছে।

তবে, ভিন্ন ভাষার ভিত্তিতে কোন সাবসেটটি ব্যবহার করবেন তা সিদ্ধান্ত নেওয়া সঠিক পদ্ধতির মতো বলে মনে হচ্ছে না , যদি না "ভিন্ন ভাষা" সি না হয়, যেহেতু সত্যই সি ++ ভাষার একটি সি-জাতীয় উপসেট রয়েছে। (লিনাস তার উপরের কৌতুকগুলিতে এটি উল্লেখ করে এবং স্কট মায়ার্স এমনকি এই উপসেটটিকে "উপ-ভাষা" হিসাবে উল্লেখ করেছেন) জাভার রান-টাইম দৃষ্টান্ত (আবর্জনা-সংগ্রহ, ভিএম-তে চালানো) সি ++ এর থেকে মৌলিকভাবে আলাদা is এটি থেকে সি ++ ব্যবহার সম্পর্কে আঁকতে কোনও দরকারী পাঠ রয়েছে তা পরিষ্কার নয় এবং উপরে উল্লিখিত হিসাবে, সরাসরি জাভা থেকে সি ++ সম্পর্কে পাঠগুলি আঁকার চেষ্টা করা খুব অ-পরিচয়মূলক কোডের দিকে নিয়ে যেতে পারে।

পরিবর্তে, ভাষাটি কীভাবে আইডেমিক্যালি ব্যবহার করা যায় তা বোঝার জন্য ভাষার আপনার "গ্রহণযোগ্য উপসেট" সংজ্ঞায়িত করার চেষ্টা করুন। আপনি যদি মোটামুটি বিধিনিষেধযুক্ত সাবসেট চান যা এখনও সি +++ এর অনেকগুলি বৈশিষ্ট্যের সুবিধা গ্রহণ করে তবে সি উপস্থাপিত, উল্লিখিত গুগল কোডিং গাইডলাইনটি শুরু করার জন্য ভাল জায়গা হতে পারে। অবশ্যই, আপনি এমন বিকাশকারী পাবেন যারা বলে যে গুগলের কিছু বিধিনিষেধের জন্য "কোনও যৌক্তিক যুক্তি" নেই , তবে আপনি যদি না আলেকজান্ড্রেসকুকে ডি ভাষার উপর তাঁর কাজ থেকে দূরে সরিয়ে রাখেন (যা আপনাকে নিজেই কিছু বলবে), তবে এটি সম্ভবত ঠিক আছে। এটি সি ++ কে জাভাতে পরিণত করার চেষ্টা করার চেয়ে অবশ্যই ভাল।

কোড নির্দেশিকাগুলির সেটগুলির জন্য আরেকটি ভাল সূচনা-পয়েন্ট হ'ল নতুন সি ++ কোর গাইডলাইনস , এটি বজরেন স্ট্রস্ট্রপ এবং হার্ব সটারের একটি কার্য-অগ্রগতি।

সি ++ এর ত্রুটিগুলি মোকাবেলার একমাত্র অন্য উপায় হ'ল ভিন্ন ভাষা বাছাই। দেখে মনে হচ্ছে আপনি জাভা পছন্দ করেন এবং আপনি মনে করেন যে এই প্রকল্পটি জাভাতে রূপান্তরিত হতে পারে chance অন্য উত্তরে উল্লিখিত হিসাবে, আপনি কেবল ... জাভা দিয়ে শুরু করতে পারেন।

জাভা ব্যতীত অন্য কিছু ব্যবহার করার জন্য আপনার সত্যিকারের প্রয়োজনের দুটি কারণ রয়েছে :

  1. আপনার সত্যিই রান-টাইম পারফরম্যান্স দরকার need এই ক্ষেত্রে, জাভা এর মতো সি ++ এর চিকিত্সা করা সম্ভবত আপনাকে আসলে সহায়তা করবে না, কারণ জাভা-জাতীয় কৌশলগুলি যেমন ভাগ করা-পয়েন্টারগুলি আপনার রান-টাইম পারফরম্যান্সকে হ্রাস করে।
  2. একটি অস্পষ্ট প্ল্যাটফর্মে কাজ করার জন্য আপনার সফ্টওয়্যারটি দরকার যা এখনও জেভিএম সমর্থন করে না। এই ক্ষেত্রে, আপনি সম্ভবত এমন ভাষাগুলিতে আটকে আছেন যেগুলিতে জিসিসি বা কলংয়ের সম্মুখভাগ রয়েছে। সি এবং সি ++ হ'ল সুস্পষ্ট প্রার্থী তবে আপনি মরিচা জাতীয় কিছুও দেখতে পারেন। (দ্রুত প্লাগ: আমি মরিচটি ব্যাপকভাবে ব্যবহার করি নি, তবে এটি দুর্দান্ত লাগছে এবং আমি যত তাড়াতাড়ি সম্ভব একটি বড় মরিচা প্রকল্পে কাজ করতে আগ্রহী এবং আমি মনে করি যে সি ++ প্রকল্প শুরু করার বিষয়ে বিবেচনা করা প্রত্যেকেরই মরচে বিকল্প হিসাবে বিবেচনা করা উচিত।)

প্রতিটি সি ++ ভাষার নির্দিষ্ট বৈশিষ্ট্য (যেমন: একাধিক উত্তরাধিকার) এর জাভাতে প্রয়োগ করার বিকল্প থাকতে হবে। যদি এটি না হয়, তার অর্থ ডিজাইন প্যাটার্ন বা কোড আর্কিটেকচার সমস্যাযুক্ত।

আমি ইতিমধ্যে এটি কিছুটা সম্বোধন করেছি, তবে আমি আপনার দ্বিতীয় বাক্যটি ইচ্ছাকৃতভাবে রেখে দিয়েছি।

আমি নিশ্চিত নই যে constexprজাভার মতো আংশিক-জেআইটি ভাষায় কোনও ধারণা বোধ করবে না এমন কিছু , যা অবৈধ আর্কিটেকচারের ইঙ্গিত। আমি এই ধারণায় আরও উন্মুক্ত যে টেমপ্লেট মেটা-প্রোগ্রামিংয়ের অত্যধিক ব্যবহারের পক্ষে এটি তার মূল্য অপেক্ষা আরও বেশি সমস্যা হতে পারে, বিশেষত এখন যেটি constexprকম্পাইল-টাইম ফাংশন মূল্যায়ন করার জন্য উপস্থিত রয়েছে, তবে এটি স্পষ্টভাবে প্রমাণ করে constexprযে আপনি যদি ডিজাইনের ত্রুটি না করেন তবে এটি ব্যবহার করছেন: আপনি কেবল নিশ্চিত করছেন যে কোড চালানোর আগে কিছু গণনা ঘটে যা একটি দুর্দান্ত পারফরম্যান্স উত্সাহ (উদাহরণস্বরূপ, বেনমার্ক গেমের এন-বডি সমস্যাটির জন্য এই এন্ট্রিটি দেখুন , যা অন্য একটি প্রবেশ ব্যতীত অন্য প্রতিটি প্রবেশকে ছাপিয়ে যায়) সি ++ এ লিখিত,


5
এফকিউএ লেখক অবশ্যই "ভাষার প্রায় 20% বুঝতে" গ্রুপে পড়েছেন। স্ট্রোম্যানের পরে স্ট্রোম্যানের সাথে চিত্রিত পয়েন্টটি মিস করবেন এমন বেশ কয়েকটি উত্তর সেখানে সত্যই ভুল and
বেন ভয়েগট

2
সি ++ এফকিউএ-র অনেক অভিযোগ (প্রায় সব?) বাজে। আধুনিক ভাষা বিশাল। সি ++ পাইথন, রুবি, পার্ল এবং হ্যাঁ জাভা এর তুলনায় বরং ছোট। Stackoverflow সেই ভাষায় মৌলিক প্রশ্ন জিজ্ঞাসা করুন এবং প্রথম উত্তর লাইন বরাবর প্রায় অবশ্যম্ভাবী হয় "কেন তুমি করা হয়নি import SomeVeryBasicPackageএবং মাত্র না এই ?" একটি উন্নত প্রশ্ন জিজ্ঞাসা করুন এবং প্রথম উত্তর লাইন বরাবর প্রায় অবশ্যম্ভাবী হয় "কেন তুমি করা হয়নি import SomeMagicalPackageএবং মাত্র না যে ?"
ডেভিড হামেন

1
@ ডেভিডহ্যামেন আমি মনে করি যে ৮০/২০ বিভাজনটি মূল স্ট্যান্ডার্ড লাইব্রেরির উপাদানগুলি নয়, মূল ভাষার বৈশিষ্ট্যগুলিকে বোঝায়, এক্ষেত্রে পার্লের সম্ভাব্য ব্যতিক্রম ছাড়া আপনার বর্ণিত ভাষাগুলি সি ++ এর মতো বড় এবং জটিল বলে মনে হয় না। যাই হোক না কেন, এটি আমার উত্তরের খুব সামান্য অংশ ছিল এবং আমি স্বীকার করেছি যে এটি একটি পক্ষপাতদুষ্ট উত্স।
কাইল স্ট্র্যান্ড 21

1
ভিএম / পরিচালিত ভাষাগুলি স্পষ্টতই পৃষ্ঠের নিচে আরও জটিল, তবে আমি ব্যবহারের দৃষ্টিকোণ থেকে জটিল বোঝাতে চাইছি।
কাইল স্ট্র্যান্ড 21

1
আপনার তত্ত্বটি সঠিক কিনা আমার কোনও ধারণা নেই, যদিও আমার ক্ষেত্রে আমি অবশ্যই C ++ এবং C আলাদাভাবে শিখেছি, এবং আমার সি ++ বর্গটি সত্যই বেশ পুঙ্খানুপুঙ্খ ছিল। তবে 20/80 বিভক্ত সম্পর্কে সম্পূর্ণ উক্তিটি হ'ল প্রতিটি প্রোগ্রামার বিভিন্ন 20% ভাষা জানে , যা বেশিরভাগ প্রোগ্রামাররা ভাষার সি অংশটি স্বাধীনভাবে শেখানো দ্বারা ব্যাখ্যা করা যায় না। যাইহোক, আপনি যদি সি ++ আরও বেশি শক্তিশালী প্রোগ্রামিংয়ের অনুমতি দেয় (তবে আমি দাবি করেছি যে আমি এর আগে দেখেছি তবে বুঝতে পারি না) বিশদভাবে ব্যাখ্যা করতে চাই, তবে আমরা সম্ভবত এখানে মন্তব্যগুলির চেয়ে চ্যাট রুমে বা কিছু করতে পারি best ।
কাইল স্ট্র্যান্ড 21

5

ধরুন আমি প্রকল্পের পরিবেশ দ্বারা সি ++ ব্যবহারের মধ্যে সীমাবদ্ধ। সি ++ রয়েছে তবে জাভা নেই এমন কিছু ভাষা বৈশিষ্ট্য ব্যবহার বন্ধ করা ভাল (যেমন: একাধিক উত্তরাধিকার, অপারেটর ওভাররাইডিং)?

না।

যদি "প্রকল্পের পরিবেশের দ্বারা" আপনি সি ++ ব্যবহারের মধ্যে সীমাবদ্ধ থাকেন তবে আপনি অন্য যে কোনও প্রযুক্তি সম্পর্কে চিন্তাভাবনা করার বিষয়ে খুব কম, যদি আপনি ব্যক্তিগতভাবে কতটা পছন্দ / পছন্দ করতে পারেন / প্রচার করতে চান তা বিবেচনা করুন।
"টেকনোলজি এক্স" বা "ওয়াই" কোনও প্রদত্ত বৈশিষ্ট্যকে সমর্থন করে কিনা আপনি নিজের সি ++ অ্যাপ্লিকেশনটি যেভাবে নির্মাণ করছেন তাতে যা কিছু আছে তা গ্রহণ করা উচিত নয়
এটি একটি সি ++ অ্যাপ্লিকেশন, সম্ভবত কিছু "ভাল কারণ" (এখন বা অতীতে) এর জন্য সম্ভবত এটি নির্দিষ্ট "টুলবক্স" যেটি সরবরাহ করে তা ব্যবহার করে আপনাকে এটি সি ++ অ্যাপ্লিকেশন হিসাবে লিখতে হবে ।

যদি এবং যখন তখন অ্যাপ্লিকেশনটিকে অন্য কোনও প্রযুক্তিতে পোর্ট করার প্রয়োজন হয় তখন (এবং কেবল তখনই) আপনি অন্যান্য প্ল্যাটফর্মের বৈশিষ্ট্যগুলি বিবেচনা করতে পারেন। কিছু ঘটতে পারে এমন অফ-সুযোগে "আপনার মুখের তীব্রতার জন্য নাক কেটে ফেলার" কোনও কারণ নেই । তবে মনে রাখবেন, হোলসেল রি-লিখনটি একটি ব্যয়বহুল, ঝুঁকিপূর্ণ অপারেশন যা ম্যানেজমেন্ট খুব ভাল কারণ ছাড়া এটি গ্রহণ করার সম্ভাবনা কম।

কিছু বছর আগে ভিজ্যুয়াল বেসিক [। নেট] ওয়ার্ল্ডে এখানে একইরকম ("ব্যবহার করতে বা ব্যবহার না করার") বিতর্ক হয়েছিল, যেখানে কারও কাছে উজ্জ্বল ধারণা ছিল যে [মূল ভাষা] ব্যবহার না করেই আপনার ভিজ্যুয়াল বেসিক অ্যাপ্লিকেশনগুলি লিখতে হবে bright মাইক্রোসফ্ট দ্বারা সরবরাহিত কার্যকারিতা। ভিজুয়ালবাসিক নেমস্পেস। এটি স্ট্যান্ড :: নেমস্পেস ব্যতীত সি ++ অ্যাপ্লিকেশন লেখার চেষ্টা করার মতো হবে; ঠিক আছে, এটি সম্ভব তবে কেন পৃথিবীতে তাদের ডান মনের কেউ এমনটি করতে বিরক্ত করবেন?


1
ভিজ্যুয়াল বেসিক সম্পর্কে আপনার শেষ পয়েন্ট: এই জাতীয় বিক্রেতার লাইব্রেরিতে সমস্যা হ'ল তারা মালিকানাধীন। এগুলি ব্যবহার করার অর্থ নিজেকে সেই বিক্রেতার কাছে শিকল দেওয়া। বিক্রেতা আপনাকে বেঁধে রাখা পছন্দ করবে, তবে আপনি দীর্ঘমেয়াদে পারবেন না: আপনি বিক্রেতার নির্দিষ্ট কার্যকারিতার উপর নির্ভর করে এমন সমস্ত কিছু পুনরায় লিখে না করে আপনি অন্য বিক্রেতার সফ্টওয়্যারটি ব্যবহার করতে পারবেন না। আপনি যত বেশি বিক্রেতার নির্দিষ্ট কার্যকারিতা ব্যবহার করবেন, বিক্রেতাদের পরিবর্তন করার জন্য তত বেশি দাম পড়বে এবং আপনার বিক্রেতাকে আপনার উপর পরিবর্তন আনতে বাধ্য করবে। ফ্রি (স্বাধীনতার মতো!) সফ্টওয়্যারটি এত বড় বিষয় হবার একটি কারণ।
cmaster

Microsoft.VisualBasicনামস্থান জিনিস একটি প্রসারিত একটি বিট হয়। আমি এটি শেষবার ব্যবহার করার অনেক বছর পরে এসেছি, তবে কমপক্ষে শুরুতে এটি বেশিরভাগই ভিবি 6 এর সাথে সামঞ্জস্য করার পিছনে লক্ষ্য করা হয়েছিল (এবং / অথবা ভিবি 6 প্রোগ্রামারগুলিকে "বাড়িতে" বোধ করা); এটি বেশিরভাগ কার্যকারিতা সরবরাহ করেছে যা ইতিমধ্যে একটি আরও আধুনিক (এবং আরও ভাল সংহত) আকারে বাকী ফ্রেমওয়ার্কে উপলভ্য ছিল, তাই নতুন প্রকল্পগুলিতে এটি ব্যবহার করার জন্য এটি খুব কমই বোঝা যায়। বিপরীতে, std::নামস্থানটি যেখানে পুরো স্ট্যান্ডার্ড লাইব্রেরিটি থাকে - এড়ানো এটিকে পুরো নেট বিসিএল এড়িয়ে যাওয়ার মতো হবে।
মাত্তেও ইটালিয়া

2

বর্তমানের উত্তরগুলি সকলেই বলছেন এটি করা খারাপ কাজ, কারণ আপনি যে ভাষাটি ব্যবহার করছেন সেটির সুবিধা গ্রহণ করা উচিত এবং এটি কেন জাভে না থাকায় একটি সি ++ বৈশিষ্ট্য কেন "খারাপ" নয় তা ব্যাখ্যা করুন। আমি এটি একটি ভিন্ন কোণ থেকে উত্তর করব।

একাধিক উত্তরাধিকার, অপারেটর ওভারলোডিং এবং আপনার নিজস্ব টেমপ্লেট সংজ্ঞায়িত করার মতো জটিল সি ++ বৈশিষ্ট্য এড়ানো এক জিনিস।

তবে যে কোনও সমস্যা যা সবচেয়ে সাধারণ কাজটির চেয়ে বেশি করে:

  • স্মৃতি বরাদ্দ,
  • সেই অর্থকে পয়েন্টের সাথে সংযুক্ত করে
  • সুতরাং ডেটা স্ট্রাকচার তৈরি করুন
  • তারপরে মেমরিটি যখন এটি করা নিরাপদ হয় তখন পুনরায় ব্যবহার করার অনুমতি দেয়

জাভা এবং সি ++ এর কোনও সাধারণ উপসেট নেই যা উপরেরটিকে অনুমতি দেয়, অতএব আপনি যা জিজ্ঞাসা করছেন তা করা অসম্ভব। (আপনি যদি জাভা এবং সি # সম্পর্কে জিজ্ঞাসা করতেন তবে আপনার আরও অনেক ভাল সুযোগ হবে, কারণ তারা উভয়ই আবর্জনা সংগ্রহকারী ব্যবহার করে))

তবে আপনার প্রয়োজন হতে পারে যে কোডটি লিখিত হবে যাতে কোনও জাভা বিকাশকারী বুঝতে পারে যে কী করে (তবে বিস্তারিত "কীভাবে নয়") এবং এটি বোধগম্য।

আপনি নিজের ভাষা ডিজাইন করতে পারেন যা আপনি সি ++ এবং জাভা উভয় ক্ষেত্রেই প্রয়োগ করেছেন .....


0

অন্য কোডারদের বোঝে না এমন কোনও কোড কেউ লিখতে হবে না। আপনি যদি ভাষা লককে সমস্যা মনে করেন তবে আপনার বিকাশকারী লক না হওয়া পর্যন্ত অপেক্ষা করুন। একজনের অপরটির চেয়ে বেশি আপনাকে জিম্মি রাখার সম্ভাবনা বেশি।

সত্যিই কোন প্রযুক্তিগত কারণ আছে। আপনি যা তৈরি করেছেন তা একটি দৃশ্য যেখানে কোনও কারণেই যে কোনও ভাষা ব্যবহৃত হয়েছিল, তবে অনেক বর্তমান এবং সম্ভবত ভবিষ্যতের বিকাশকারীরা সত্যিই এটি বুঝতে পারে না।

আমার অনুমান, জাভা বিকাশকারীরা জাভাতে যেভাবে তারা লিখবেন সম্ভবত সি ++ লিখতে পারে, তবে কেন এটিকে একটি নিয়ম করুন। আপনার জাভা বিকাশকারীদের জাভা জগাখিচির বড় বলের চেয়ে কিছুটা আটকে থাকতে পারে তার চেয়ে আপনি কিছু সি ++ নির্দিষ্ট বৈশিষ্ট্যগুলি কার্যকর করতে পারেন যা আপনার জাভা বিকাশকারীদের জন্য সামান্য সি ++ নির্দেশনা / ডকুমেন্টেশন দিয়ে কার্যকর করা এবং বজায় রাখা আরও সহজ।

এটি বেসিক প্রোগ্রামারদের বস্তু-ভিত্তিক ভাষাগুলিতে সরানো সমস্যাগুলি সম্পর্কে একটি যুক্তি হয়ে দাঁড়িয়েছে। এটি এমন নয় যে তারা যে নতুন ডেভসগুলি বুঝতে পারে না তাদের ক্ষতিতে ওওপি অনুশীলনগুলি বাস্তবায়িত করে, কিন্তু তারা একেবারেই এটি প্রয়োগ করে না। যদি তারা তা করে তবে তারা সাধারণত এটি ভুল করে। যদি কিছু খারাপভাবে করা হয় তবে কারণ নির্বিশেষে এটিকে অপসারণ করা দরকার।

কেবল অন্ধভাবে কোড অনুলিপি করা এবং কোড আটকে দেওয়ার ব্যতীত অন্যরা, তারা এমন অনেক জায়গায় এটি করতে যাচ্ছেন যেভাবে তারা বোঝেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.