আমি কীভাবে আমার প্রোগ্রামে বিধি এবং যাদু সংখ্যার একটি বিশাল সেট পরিচালনা করব?


21

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

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

সুতরাং, আমার কোডটি পাঠযোগ্য ও পরিচালিত রাখার সর্বোত্তম উপায় কী? আমি কীভাবে আমার সমস্ত ম্যাজিক নম্বর, সমস্ত নিয়ম, অ্যালগরিদম এবং কোডের পদ্ধতিগত অংশগুলিকে ভাগ করব? আমি খুব ভার্বোজ এবং গ্রানুলার এপিআই কীভাবে মোকাবিলা করব?

আমার মূল লক্ষ্যটি হ'ল আমার উত্সটি কাউকে হস্তান্তর করতে সক্ষম হোন এবং আমার ইনপুট ব্যতীত আমি কী করছিলাম তা তাদের বোঝানো উচিত।


7
আপনি কি এই এপিআই কলগুলির কয়েকটি উদাহরণ সরবরাহ করতে পারেন?
রবার্ট হার্ভে


"কম্পিউটার বিজ্ঞানের সমস্ত সমস্যা অন্য দিকনির্দেশের দ্বারা সমাধান করা যেতে পারে" - ডেভিড হুইলার
ফিল ফ্রস্ট

... অত্যধিক মাত্রার
ড্যান লায়োনস

1
আপনার কোডটি না দেখে আপনার প্রশ্নের উত্তর দেওয়া শক্ত। আপনি কোডরেভিউ.স্ট্যাকেক্সেক্সঞ্জ.কম এ আপনার কোড পোস্ট করতে পারেন এবং অন্যান্য প্রোগ্রামারদের পরামর্শ নিতে পারেন।
গিলবার্ট লে ব্ল্যাঙ্ক

উত্তর:


26

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

মনে রাখবেন, 'ডাটাবেসগুলি' অগত্যা মাইএসকিউএল বা এমএস-এসকিউএল বোঝায় না। আপনি কীভাবে ডেটা সঞ্চয় করবেন তা প্রোগ্রামটি কীভাবে ব্যবহৃত হয়, আপনি এটি কীভাবে লিখছেন ইত্যাদি অনেকের উপর নির্ভর করে depend এটির অর্থ এসকিউএল টাইপ ডাটাবেস হতে পারে, বা এটি কেবল বিন্যাসিত পাঠ্য ফাইলের অর্থ হতে পারে।


7
একটি ডাটাবেসে ডেটা কোডিংয়ের সাথে একমত হয়েছিলেন, যদিও মনে হয় তার বড় সমস্যা রয়েছে।
রবার্ট হার্ভে

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

1
নরম কোডিংয়ের মতো শোনাচ্ছে । ডাটাবেসগুলি পরিবর্তনীয় অবস্থার জন্য। সংজ্ঞা অনুসারে যাদু সংখ্যাগুলি পরিবর্তনযোগ্য নয়।
ফিল ফ্রস্ট

1
@ ফিলফ্রস্ট: আপনি এগুলি পরিবর্তনযোগ্য করতে পারেন। প্রাথমিক টেবিল তৈরির পরে কেবল তাদের লিখবেন না।
রবার্ট হার্ভে

1
@ ফিলফ্রস্ট: আচ্ছা, আমি এখন যে এপিআইয়ের সাথে ডিল করছি তা দেখেছি । এটি কেবলমাত্র নিছক আকারের জন্যই উল্লেখযোগ্য। যদি না করে তার কোনও উপাত্ত প্রয়োজন হয় না।
রবার্ট হার্ভে

14

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

আমি মনে করি পরিষ্কারভাবে নামকরণ করা ধ্রুবকগুলির একটি তালিকা এবং নিয়ম-প্রয়োগকারী কার্যকারিতা অনেক সহায়তা করবে will যদি আপনি সমস্ত কিছু প্রাকৃতিক নাম দেন এবং সাক্ষরিত প্রোগ্রামিং কৌশলগুলিতে মনোনিবেশ করেন তবে আপনার পঠনযোগ্য প্রোগ্রাম তৈরি করতে সক্ষম হওয়া উচিত।

আদর্শভাবে আপনি কোডটি দিয়ে শেষ করবেন যা বলে:

LeftBearingHoleDepth = BearingWidth + HoleDepthTolerance;
if (not CheckPartWidth(LeftBearingHoleDepth, {other parameters})
    {whatever you need to adjust}

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

SomeAPICall(10,324.5, 1, 0.02, 6857);

মধ্যে

const NumberOfOilDrainHoles = 10
const OilDrainHoleSpacing = 324.5
{etc}
SomeAPICall(NumberOfOilDrainHoles, OilDrainHoleSpacing, {etc}

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

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


1
একটি ফ্লুয়েন্ট ইন্টারফেস তৈরি করার কথাও বিবেচনা করুন
ইয়ান

এখানে আমার কোড থেকে একটি আসল লাইন। এখানে কী চলছে তা কি বোঝা যায় না (যুক্তিগুলি x1, y1, z1, x2, y2, z2 দ্বিগুণ হিসাবে), যদি আপনি জানেন যে চলক নামগুলি কী বোঝায়? .CreateLine(m_trunion_support_spacing / 2, -((m_flask_length / 2) + m_sand_ledge_width + m_wall_thickness), -m_flange_thickness, m_trunion_support_spacing / 2, -((m_flask_length / 2) + m_sand_ledge_width + m_wall_thickness), -m_flask_height + m_flange_thickness)
ব্যবহারকারী 2785724

ধ্রুবকগুলি সন্ধান করতে আপনি সম্পাদক সংহতকরণের সাথে ctagগুলিও ব্যবহার করতে পারেন ।
ফিল ফ্রস্ট

3
@ user2785724 এটি একটি গণ্ডগোল। এটা কি করছে? এটি কি কোনও নির্দিষ্ট দৈর্ঘ্য এবং গভীরতার খাঁজ তৈরি করছে? তারপরে আপনি একটি ফাংশন তৈরি করতে পারেন createGroove(length, depth)। আপনাকে কোনও ফাংশন বাস্তবায়ন করতে হবে যা আপনি মেকানিকাল ইঞ্জিনিয়ারকে বর্ণনা করার সাথে সাথে যা সম্পাদন করতে চান তা বর্ণনা করে। সাক্ষরতা প্রোগ্রামিং এটাই হচ্ছে।
ফিল ফ্রস্ট

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

4

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

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

এই বইগুলির সমস্ত ইঙ্গিতগুলি আপনার প্রশ্নের ক্ষেত্রে প্রযোজ্য। আমাকে বিশেষত "ম্যাজিক নম্বর" এবং "নিয়মের সেট" এর জন্য কিছু ইঙ্গিতগুলি বের করতে দিন:

  1. যাদু নম্বরগুলি প্রতিস্থাপনের জন্য নামযুক্ত ধ্রুবক এবং গণনাগুলি ব্যবহার করুন

    ধ্রুবকের উদাহরণ :

    if (partWidth > 0.625) {
        // doSomeApiCall ...
    }
    return (partWidth - 0.625)
    

    একটি নাম ধ্রুবক দিয়ে প্রতিস্থাপন করা উচিত যাতে কোনও পরবর্তী পরিবর্তনগুলি একটি টাইপো প্রবর্তন করতে না পারে এবং আপনার কোডটি ভাঙতে পারে, যেমন প্রথম পরিবর্তন 0.625করে দ্বিতীয়টি নয়।

    const double MAX_PART_WIDTH = 0.625;
    
    if (partWidth > MAX_PART_WIDTH) {
        // doSomeApiCall ...
    }
    return (partWidth - MAX_PART_WIDTH)
    

    গণনার উদাহরণ :

    গণনাগুলি আপনাকে একসাথে থাকা ডেটা একসাথে রাখতে সহায়তা করতে পারে। আপনি যদি জাভা ব্যবহার করছেন তবে মনে রাখবেন এনামগুলি বস্তু; তাদের উপাদানগুলি ডেটা ধরে রাখতে পারে এবং আপনি এমন সমস্ত পদ্ধতি নির্ধারণ করতে পারেন যা সমস্ত উপাদানকে ফিরিয়ে দেয় বা কিছু সম্পত্তি পরীক্ষা করে check এখানে একটি এনাম অন্য এনুম তৈরিতে ব্যবহৃত হয়:

    public enum EnginePart {
        CYLINDER (100, Materials.STEEL),
        FLYWHEEL (120, Materials.STEEL),
        CRANKSHAFT (200, Materials.CARBON);
    
        private final double maxTemperature;
        private final Materials composition;
        private EnginePart(double maxTemperature, Materials composition) {
            this.maxTemperature = maxTemperature;
            this.composition = composition;
        }
    }
    
    public enum Materials {
        STEEL,
        CARBON
    }
    

    সুবিধাটি হ'ল: এখন কেউ কোনও ইঞ্জিন পার্টকে ভুলভাবে সংজ্ঞায়িত করতে পারে না যা ইস্পাত বা কার্বন থেকে তৈরি নয় , এবং কেউ "এস্যাসেডফাসডেফ" নামে একটি ইঞ্জিন পার্ট প্রবর্তন করতে পারে না, যদি এটি স্ট্রিং থাকে যা বিষয়বস্তুতে পরীক্ষা করা হত।

  2. স্ট্র্যাটেজি প্যাটার্ন এবং কারখানার পদ্ধতি প্যাটার্ন , স্ট্র্যাটেজি প্যাটার্ন ক্ষেত্রে; "নিয়ম" encapsulate এবং তাদের অন্য বস্তুর করে নির্মিত হয় (তাদের ব্যবহার কারখানার প্যাটার্ন ক্ষেত্রে, ব্যবহারের কিছু নির্মাণ করছে পাস কিভাবে বর্ণনা আপনি যা চান ব্যবহার তা হ'ল)।

    কারখানার পদ্ধতি প্যাটার্নের উদাহরণ :

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

    public class EngineAssemblyLine {
        public EngineAssemblyLine() {
            EnginePart enginePart1 = makeEnginePart();
            EnginePart enginePart2 = makeEnginePart();
            enginePart1.connect(enginePart2);
            this.addEngine(engine1);
            this.addEngine(engine2);
        }
    
        protected Room makeEngine() {
            return new NormalEngine();
        }
    }
    

    এবং তারপরে অন্য একটি ক্লাসে:

    public class CompressedEngineAssemblyLine extends EngineAssemblyLine {
        @Override
        protected Room makeRoom() {
            return new CompressedEngine();
        }
    }
    

    মজার অংশটি হ'ল: এখন আপনার এসেম্বলাইন কন্সট্রাক্টর এটি কোন ধরণের ইঞ্জিন পরিচালনা করছে তার থেকে পৃথক। সম্ভবত addEngineপদ্ধতিগুলি একটি রিমোট এপিআই কল করছে ...

    কৌশল প্যাটার্নের উদাহরণ :

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

    class PartWithStrategy:
    
        def __init__(self, func=None) :
            if func:
                self.execute = func
    
        def execute(self):
            # ... call API of quality review ...
            print "Part will be reviewed"
    
    
    def polish():
        # ... call API of polishing department ...
        print "Part will be polished"
    
    
    def paint():
        # ... call API of painting department ...
        print "Part will be painted"
    
    if __name__ == "__main__" :
        strat0 = PartWithStrategy()
        strat1 = PartWithStrategy(polish)
        strat2 = PartWithStrategy(paint)
    
        strat0.execute()  # output is "Part will be reviewed"
        strat1.execute()  # output is "Part will be polished"
        strat2.execute()  # output is "Part will be painted"
    

    আপনি এটি সম্পাদন করতে চান এমন ক্রিয়াকলাপগুলির একটি তালিকা ধরে রাখা এবং তারপরে executeপদ্ধতিটি থেকে তাদের কল করার ক্ষেত্রে এটি প্রসারিত করতে পারেন । সম্ভবত এই জেনারালাইজেশনটিকে আরও ভালভাবে বিল্ডার প্যাটার্ন হিসাবে বর্ণনা করা যেতে পারে , তবে ওহে, আমরা পিক পেতে চাই না, তাই না? :)


2

আপনি কোনও নিয়ম ইঞ্জিন ব্যবহার করতে চাইতে পারেন। একটি নিয়ম ইঞ্জিন আপনাকে একটি ডিএসএল (ডোমেন নির্দিষ্ট ভাষা) দেয় যা এই প্রশ্নের মধ্যে বর্ণিত হিসাবে একটি বোধগম্য উপায়ে নির্দিষ্ট ফলাফলের জন্য প্রয়োজনীয় মানদণ্ডকে মডেল করার জন্য ডিজাইন করা হয়েছে ।

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

আপনি যদি ভাগ্যবান হন তবে আপনি যে প্রোগ্রামিং ল্যাঙ্গুয়েজটি ব্যবহার করছেন তার জন্য ব্যবহারের জন্য প্রস্তুত একটি নিয়ম ইঞ্জিন রয়েছে।

খারাপ দিকটি হ'ল আপনাকে কোনও নিয়ম ইঞ্জিনের সাথে পরিচিত হতে হবে যা আপনি যদি প্রোগ্রামিংয়ের শিক্ষানবিস হয়ে থাকেন তবে তা শক্ত হতে পারে।


1

আমার এই সমস্যার সমাধানটি বেশ আলাদা: স্তর, সেটিংস এবং এলওপি OP

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

দ্বিতীয়ত, একটি 'সেটিংস পরিচালক' প্রয়োগ করুন। গতিশীলভাবে মানগুলির সাথে নামগুলি যুক্ত করার এটি একটি উপায়। এটার মতো কিছু. আর একটি মিনি ভাষা।

Baseplate.name="Base plate"
Baseplate.length=1032.5
Baseplate.width=587.3

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

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


0

আমি নিশ্চিত না যে আমি প্রশ্নটি সঠিকভাবে পেয়েছি, তবে মনে হচ্ছে আপনার কয়েকটি কাঠামোর মধ্যে জিনিসগুলি গ্রুপ করা উচিত। বলুন আপনি সি ++ ব্যবহার করছেন, আপনি যেমন জিনিস সংজ্ঞায়িত করতে পারেন:

struct SomeParametersClass
{
    int   p1;  // this is for that
    float p2;  // this is a different parameter
    ...
    SomeParametersClass() // constructor, assigns default values
    {
        p1 = 42; // the best value that some guy told me
        p2 = 3.14; // looks like a know value, but isn't
    {
};

struct SomeOtherParametersClass
{
    int   v1;  // this is for ...
    float v2;  // this is for ...
    ...
    SomeOtherParametersClass() // constructor, assigns default values
    {
        v1 = 24; // the best value 
        v2 = 1.23; // also the best value
    }
};

আপনি প্রোগ্রামের শুরুতে এগুলি প্রশমিত করতে পারেন:

int main()
{
    SomeParametersClass params1;
    SomeOtherParametersClass params2;
    ...

তারপরে আপনার এপিআই কলগুলি দেখতে পাবেন (ধরে নিচ্ছেন আপনি স্বাক্ষরটি পরিবর্তন করতে পারবেন না):

 SomeAPICall( params1.p1, params1.p2 );

আপনি যদি API এর স্বাক্ষরটি পরিবর্তন করতে পারেন তবে আপনি পুরো কাঠামোটি পাস করতে পারেন:

 SomeAPICall( params1 );

আপনি সমস্ত পরামিতিগুলিকে বৃহত্তর মোড়কে গ্রুপ করতে পারেন:

struct AllTheParameters
{
    SomeParametersClass      SPC;
    SomeOtherParametersClass SOPC;
};

0

আমি অবাক হয়েছি যে অন্য কেউ এর উল্লেখ করেনি ...

তুমি বলেছিলে:

আমার মূল লক্ষ্যটি হ'ল আমার উত্সটি কাউকে হস্তান্তর করতে সক্ষম হোন এবং আমার ইনপুট ব্যতীত আমি কী করছিলাম তা তাদের বোঝানো উচিত।

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

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

মন্তব্য করা এবং ভাল, সংক্ষিপ্ত পরিবর্তনশীল নামগুলি পঠনযোগ্যতার সাথে প্রচুর সহায়তা করে। কোনটি বোঝা সহজ?

var x = y + z;

বা:

//Where bandwidth, which was previously defined is (1000 * Info Rate) / FEC Rate / Modulation * carrier spacing / 1000000
float endFrequency = centerFrequency + (1/2 bandwidth);

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

এরপরে those ম্যাজিক নম্বরগুলি এবং উদ্বেগের অনেকগুলি বিষয় পরিচালনা করা চলছে তবে আমি মনে করি গ্র্যান্ডমাস্টারবি'র মন্তব্যটি বেশ ভালভাবে পরিচালনা করেছে।

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