X ভাষায় কিছু লিখতে কেন খারাপ কারণ আপনি ভাগ করা কোডিং দৃষ্টান্ত ব্যবহারের ক্ষেত্রে ওয়াই ভাষায় একটি প্রোগ্রাম লিখছেন [বন্ধ]


25

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

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

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

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

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

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

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

তারপরে প্রশ্নটি হল: কেন আপনার কোডিং স্টাইলটি ব্যবহার করেন না এমন কাউকে উপহাস করবেন?

আমার কাছে হাতে থাকা বিষয়গুলি / মহকুমাগুলি হ'ল:

  • প্রোটোটাইপ পরিস্থিতিতে আরও ত্রুটিযুক্ত প্রবণ কোডটি ব্যবহার করা কেন খারাপ প্রোগ্রামিং অনুশীলন হবে, যদি রিফ্যাক্টরিং পরে এটি আরও দৃust় করে তোলে?
  • সি ++ তে লিখিত প্রোগ্রামটি জাভাতে যেমন লেখা হয়েছিল তেমন কীভাবে হতে পারে? কী এটিকে একটি খারাপ প্রোগ্রাম করে তোলে, (আমি বিবেচনা করেছিলাম যে বর্তমান শৈলীর উদ্দেশ্য এবং উন্নতি করার জন্য পরিকল্পিত কাজটি ইঙ্গিত করেছি?)
  • আমি যদি কোনও নির্দিষ্ট প্রোগ্রামিং দৃষ্টান্তে (যেমন ওওপি / ডিপি) ব্যবহৃত একটি কনস্ট্রাক্ট ব্যবহার করতে পছন্দ করি তবে কীভাবে আমি খারাপ পেশাদার হব?

[1] দ্রুত এবং বগী বিকাশ করুন, তারপরে ত্রুটিগুলি সংশোধন করুন বা ধীর হয়ে উঠুন, কোডের প্রতিটি লাইনের জন্য সাবধান?


5
আপনি এই প্রশ্নটি সি ++ লাউঞ্জে জিজ্ঞাসা করা ভাল। প্রথমে আপনার শিখা-প্রমাণ স্যুট লাগান।
রবার্ট হার্ভে

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

13
ফোরট্রান এর মতো লেখা জাভা কোডে আপনার একই প্রতিক্রিয়া হতে পারে: intআসল দৈর্ঘ্যের উপর নজর রাখতে আলাদা ভেরিয়েবল সহ একক শ্রেণীর সমস্ত কোড, কোনও সংগ্রহ নেই, কেবল স্থির আকারের অ্যারেগুলি ।
কেভিন ক্লিন

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

5
আপনি কিছু ফর্ম সহায়তা পেতে অনলাইন পোস্ট করেছিলেন। আমি বুঝতে পেরেছি যে আপনি আপনার স্টাইলের সমস্ত প্রতিক্রিয়া চান / আশা করেননি, তবে আপনি কি কোনও সাহায্যই পছন্দ করবেন না? আপনি খারাপ সঙ্গে ভাল নিতে। প্রোগ্রামারদের কোডে ত্রুটিগুলি খুঁজতে হয়; এটা আমরা কি করি।
জেফো

উত্তর:


26

প্রশ্নে কোড না দেখে সি ++ তে জাভা কোড লেখার কয়েকটি উপায় রয়েছে যা অন্যদের চেয়ে কিছুটা খারাপ।

  1. এক চূড়ান্তভাবে, এখানে জাভা যেমন আপনার উত্স স্থাপন করা হয়েছে: একটি ফাইলে সমস্ত কিছু, শ্রেণি সংজ্ঞার মধ্যে থাকা সমস্ত কিছুই .:
    class HelloWorldApp {
    public:
        void main() {
            cout << "Hello World!" << endl;
        }
    };
    জাভা উত্স এভাবেই নির্ধারণ করা হবে। এটি প্রযুক্তিগতভাবে সি ++ তে আইনী, তবে শিরোনাম ফাইলটিতে সমস্ত কিছু এবং ইনলাইন (ক্লাস ঘোষণায় এটি সংজ্ঞায়িত করে) হ'ল ভয়ানক শৈলী এবং আপনার সংকলনের পারফরম্যান্সটিকে হত্যা করবে। এটা করবেন না।
  2. অতিমাত্রায় ওও - জাভাতে ওভারসিম্প্লিফাই করতে, এটি ওভারসিম্প্লিফাই করার জন্য এটি Nouns কিংডম , যেখানে সবকিছুই একটি বস্তু। গুড (অর্থাত্ আইডোমেটিক) সি ++ কোডে কোনও বস্তুতে সবকিছু ক্র্যাম করার চেষ্টা না করে ফ্রি ফাংশন, টেম্পলেট ইত্যাদি ব্যবহার করার সম্ভাবনা বেশি।
  3. কোনও RAII নেই - আপনি ইতিমধ্যে এটি উল্লেখ করেছেন - স্মার্ট পয়েন্টারগুলির পরিবর্তে পয়েন্টার এবং ম্যানুয়াল ক্লিনআপ ব্যবহার করে। সি ++ আপনাকে আরআইআইআই এবং স্মার্ট পয়েন্টারগুলির মতো সরঞ্জাম দেয়, সুতরাং খুব ভাল (অর্থাত্ আইডিয়োমেটিক) সি ++ কোড সেই সরঞ্জামগুলি ব্যবহার করে।
  4. কোনও উন্নত সি ++ নেই - জাভা এবং সি ++ এর মূল বিষয়গুলি একই রকম, তবে একবার আপনি আরও উন্নত বৈশিষ্ট্যগুলি (টেমপ্লেট, সি ++ এর আলগোরিদিম লাইব্রেরি, ইত্যাদি) এ প্রবেশ করার পরে সেগুলি বিভক্ত করা শুরু করে।

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

পরে এটি পরিষ্কার করার অভিপ্রায় সহ ত্রুটি-প্রবণ কোড লেখার বিশেষ প্রশ্ন সম্পর্কে, এটি কালো এবং সাদা নয়:

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

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


11
আইডিয়োমেটিক পার্ল আছে?
রাচেট ফ্রিক

21
@ অন্নো আপনি যখন জিজ্ঞাসা করবেন "এই স্ক্রুটি বাঁকানো না হয়ে আমি কীভাবে হাতুড়ি করব?" সবাই আপনাকে বলবে হাতুড়ি ব্যবহার করবেন না।
সোজর্ড

9
@ অন্নো সি ++ এ, পয়েন্টারগুলি এবং newপাওয়ারটুল হিসাবে বিবেচিত হয়। স্বয়ংক্রিয় স্টোরেজ হ্যান্ডটল।
সোজর্ড

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

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

42

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

  • for ($i = 0; $i < 42; $i++) { … }আপনি পার্ল লিখলে আমি চিৎকার করব , তবে পিএইচপি-তে নয়
    (পার্লে, ভেরিয়েবলগুলি ঘোষণা করা উচিত, এবং এই জাতীয় লুপগুলি পরিসীমাতে পুনরাবৃত্তি হওয়া উচিত)
  • আপনি যদি new Foo()বিনা কারণে সি ++ তে লিখেন তবে আমি কেঁদে যাব তবে জাভাতে নয়
    (সি ++ এর আবর্জনা সংগ্রহ নেই, তাই আরএআইআই ব্যবহার করা উচিত N
  • আপনি C89, পাস্কাল বা জাভাস্ক্রিপ্ট ব্যতীত আপনার ফাংশনের শীর্ষে আপনার সমস্ত ভেরিয়েবলগুলি ঘোষণা করলে আমি ক্রিঞ্জ করব।
  • আপনি যদি পাইথনের একটি ক্লাসে আপনার সমস্ত ফাংশন রাখেন তবে আমি ফেসপাল করব, তবে জাভাতে নয়
    (পাইথনটি "ওওপি" চাপার পরিবর্তে একটি বহুমাত্রিক ভাষা এবং শীর্ষ স্তরের ফাংশন সমর্থন করে)
  • return nullআপনি স্কালায় থাকলে আমি কাঁদব , তবে কোনও সি-জাতীয় ভাষায় নয়
    (কারণ স্কালার একটি Optionধরন রয়েছে)
  • আপনি যদি জাভাতে পুনরাবৃত্ত আলগোরিদিম লিখেন তবে আমি ওসিএএমএল-তে না অভিযোগ করব
    (কারণ জাভার স্ট্যাক দ্রুত উপচে পড়েছে, যেখানে ওসিএএমএলে টেল কল অপ্টিমাইজেশন রয়েছে)
  • ...

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

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

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

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

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


আপনি যে কিছু পয়েন্ট করেছেন তাতে আপনি বেশ সঠিক, তবে শেষে আমি মনে করি না আপনি চিহ্নটি মারছেন। আপনি অভিজ্ঞতা অর্জনের আগে জ্ঞান অর্জনের বিষয়টি ধরে নিচ্ছেন যা জ্ঞান অর্জন করবে।
ওন্নো

4
@ অন্নো আমার মূল বিষয়গুলি (যা আপনি জিজ্ঞাসা করা প্রশ্নের উত্তর দেয়) তা হল যে আপনি একটি ভাষা থেকে অভ্যাসগুলি গ্রহণ করতে পারবেন না এবং ধরে নিতে পারেন যে এটি অন্য ভাষায় সেরা অভ্যাস, এবং শুরু থেকেই পরিষ্কার কোড লেখার চেষ্টা করা পরিষ্কার করার চেয়ে পছন্দনীয় এটা পরে। কোড সাফ করা - আপনার দক্ষতার সর্বোত্তম - অন্যদের সাহায্যের জন্য জিজ্ঞাসা করার আগে এটি অবশ্যই প্রয়োজনীয় ( ভাল কোড স্নিপেটের টিপসের জন্য sscce.org দেখুন )। "দয়া করে এটি ঠিক করুন" দিয়ে এসও-তে আবর্জনা কোড ফেলা অগ্রহণযোগ্য নয় বিশেষত আপনি যদি আরও ভাল জানেন know
আমন

2
তবে আপনি যে প্রশ্নের ইঙ্গিত দিচ্ছেন তা সম্পর্কিত: jm666 এর উত্তরে একটি মূল বিষয় রয়েছে: গুরু মনে করেন "আপনি যদি নিজেকে এক্স-গুরু হতে না চান তবে আপনি কেন এক্স সম্পর্কে জিজ্ঞাসা করবেন?" আমি নিজেকে প্রায়শই এই অসহায় মানসিকতায় খুঁজে পাই । এটিকে হ্রাস করার একটি সম্ভাব্য উপায় এটি উল্লেখ করা যে আপনি এখনও শেখার বক্ররেখার একেবারে প্রথম দিকে রয়েছেন এবং পরে এটি সন্ধান করবেন তবে আপাতত এই আরও তাত্ক্ষণিক প্রশ্ন হাতে রয়েছে। তবে, এটি একটি যোগাযোগের সমস্যা, কোনও প্রোগ্রামিং সমস্যা নয়।
আমন

6
সি ++ এবং সি # উভয়ই যথাক্রমে optional<T>এবং রয়েছে Nullable<T>। এছাড়াও, কার্যত প্রত্যেকেই সি ++ এ RAII, নুব বা না ছাড়াই মেমরি ফাঁস করে।
ডেড এমএমজি

আমি দেখতে পেয়েছি যে কোনও ব্লকের শুরুতে ভেরিয়েবলগুলি ঘোষণা করা সাধারণত আপনার কোডকে বেশিরভাগ ভাষায় পড়া সহজ করে তোলে। আপনার সমস্ত ভেরিয়েবল কোন ধরণের এবং এই জাতীয় কী তা স্মরণে রাখার জন্য যখন আপনাকে সাহায্যের প্রয়োজন তখন ঠিক কোথায় তা আপনি জানেন।
12:38

12

আমি কোনও হার্ড সি ++ বিকাশকারী নই, তবে ...

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

একটি বিষয় মনে রাখবেন যে সি ++ এ ত্রুটির অর্থ সাধারণত "অপরিজ্ঞাত আচরণ" means নিরাপদ ভাষায় সবচেয়ে খারাপ যেটি ঘটতে পারে তা হ'ল আপনার প্রোগ্রামটি অবিলম্বে বন্ধ করে দেওয়া exception সি ++ এ, আপনি যদি সেগফল্ট পান তবে আপনি ভাগ্যবান। এটি সম্পূর্ণরূপে সম্ভব আপনার প্রোগ্রাম সাবটলি ভুল কিছু করে চলেছে। এটি সময়কালের জন্য সঠিকভাবে আচরণ করতে পারে এবং অনেক পরে বাগগুলি প্রকাশ করতে পারে বা এটি পুরো সময় সঠিকভাবে আচরণ করতে পারে তবে শেষ পর্যন্ত আপনার সমস্ত স্মৃতি খেয়ে ফেলে।

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

সি ++ তে লিখিত প্রোগ্রামটি জাভাতে যেমন লেখা হয়েছিল তেমন কীভাবে হতে পারে? এটি কী খারাপ প্রোগ্রাম করে?

আমি মনে করি না এর একটি উত্তর আছে যা বেশিরভাগ অনুমান এবং মতামতযুক্ত হবে না। আপনি যদি আমার এই বিষয়টি গ্রহণ করতে চান তবে জাভাতে কয়েকটা অ্যান্টিপ্যাটার্ন যুক্ত হয়ে থাকে যে সমস্ত কিছুর জন্য একটি বস্তু হতে হবে। কোথায় অন্যান্য ভাষায় আপনি একটি পয়েন্টার, functor, অথবা ফাংশন পাস করি, জাভা আপনি সাধারণত শূন্য এবং একটুর জন্য-দরকারী টন এটি ThingDoers, FooFactoriesএবং IFrobnicatorsযা ছদ্মবেশে মাত্র ফাংশন আছে।

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

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

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


1
এর বেশিরভাগ জাভা 8-এর সাথে উপশম হয় - বেশিরভাগ দিনটি বাঁচাতে ল্যাম্বডাস চড়ে :-)
মার্টিজ ভার্বার্গ

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

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

6

সামান্যভাবে বিষয়বস্তু উত্তর বন্ধ ...

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

আমি পার্ল-ওয়ার্ল্ডে আছি - কখন এমন কিছু দেখাবে:

$imax=$#array;
$str=""
for($i=0; $i<$imax; $i++) {
    $str = "$str" . $array[$i];
}

পরিবর্তে:

my $str = join '', @array;

অবশ্যই এটি সম্পর্কে মন্তব্য করবে - (পড়ুন: লেখককে পড়াবেন) সম্পর্কে the join ফাংশন ।

যাই হোক, খুব বেশী সমালোচনা কি আদৌ counterproductive হয়, এবং সেরা উদাহরণ এক পরবর্তী: (থেকে ধরলাম: http://perl-begin.org/humour/#How_can_I_switch_off_the_T.V..3F )

(এই বিটটি 23 মার্চ, 2011 এ একটি বেনামে একটি পেস্টবোটে পোস্ট করা হয়েছিল some এটি কিছু সম্পাদনার পরে উত্তরোত্তর জন্য এখানে স্থাপন করা হয়েছে)) - সামান্য সম্পাদনাও খুব বেশি

প্রশ্ন: আমি কীভাবে আমার টিভিতে স্যুইচ করতে পারি?

ওপি কি শুনতে চায়?

উদাহরণস্বরূপ: আপনার টিভি রিমোট একটি টিপুন এটি চালু / বন্ধ বোতামটি সন্ধান করুন। বোতামটি সাধারণত লাল হয় এবং রিমোটের শীর্ষতম লাইনে থাকে।

# বিশেষজ্ঞ বিশেষজ্ঞের উত্তর: প্রথমে, আপনি "স্যুইচ অন" দিয়ে কী বোঝাতে চান? প্রথমে এটি সংজ্ঞায়িত করুন। আপনার টিভি, টিভি রিমোট এবং লিভিং রুমেও ন্যাপস্টেট করুন।

... নোপস্টের পরে:

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

http://experts.blog/how_to_design_a_f مستقبل_3 D_TV.html http://experts.blog/t__basics_of_tv_repairing.html http://experts.blog/viruses_in_living_room_short_essay.html http://experts.blog/global_chide_plprepore_chip_plore

আইআরসি অতিথি: তবে, আমি টিভি বিশেষজ্ঞ হতে চাই না।

উত্তর: আপনি তখন টিভিটি স্যুইচ করতে চান কেন ?!


1
এই উত্তরটি হল না বিষয় বন্ধ। এটি ঠিক ব্যাখ্যা করেছে যে কেউ কেন কোনও ভাষার অপ্রচলিত ব্যবহারের সমালোচনা করবেন এবং কেন মাঝেমধ্যে সেই স্বয়ংক্রিয় সমালোচনা খুব বেশি দূরে যেতে পারে। আমি এটা পছন্দ করি.
ট্রিকোপল্যাক্স

1

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

পরে ফিক্সিংয়ের মনের সাথে দ্রুত এবং নোংরা লেখার সময় এমন কিছু ভুলে যাওয়ার আশঙ্কা রয়েছে যা আপনার ঠিক করতে হবে।

সি ++ তে লিখিত প্রোগ্রামটি জাভাতে যেমন লেখা হয়েছিল তেমন কীভাবে হতে পারে? কী এটিকে একটি খারাপ প্রোগ্রাম করে তোলে, (আমি বিবেচনা করেছিলাম যে বর্তমান শৈলীর উদ্দেশ্য এবং উন্নতি করার জন্য পরিকল্পিত কাজটি ইঙ্গিত করেছি?)

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

আমি যদি কোনও নির্দিষ্ট প্রোগ্রামিং দৃষ্টান্তে (যেমন ওওপি / ডিপি) ব্যবহৃত একটি কনস্ট্রাক্ট ব্যবহার করতে পছন্দ করি তবে আমি কীভাবে খারাপ পেশাদার হব?

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

আপনি যেহেতু খারাপ প্রতিক্রিয়া পেয়েছেন তা হ'ল এসও-তে বেশিরভাগ লোকেরা আপনি যে ভাষায় জিজ্ঞাসা করছেন তাতে আপনি কীভাবে বুদ্ধিমানের কোডিং করতে পারেন তার দ্বারা দক্ষতা বিচার করার ঝোঁক। সি ++ এর সাথে পরিচিত ব্যক্তিরা যখন খারাপ কোড দেখেন যা অতীতে তাদেরকে দংশন করেছিল এমন কিছু দেখায় kne


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

1
@ অন্নো: সত্যই, কেউ কেউ জানেন না বা যত্ন করে না যে আপনি ব্যক্তিগতভাবে সেই জিনিসগুলির সন্ধানের ক্ষেত্রে কতটা ভাল । জাভা বা সি এর মতো দেখতে C ++ লেখার বিশাল সংখ্যক মানুষ প্রায় এতটা ছাঁটাইও নয়। তাদের কাছে ফিরে যেতে এবং পরে এটি ঠিক করার জন্য একটি নোট লিখার চেয়ে প্রথমবার স্টাফগুলি করা শিখার পক্ষে অনেক ভাল, কারণ অভিজ্ঞতা থেকে দেখা যায় যে তারা বাস্তবে এটি কখনই করেন না।
সিএওও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.