সি ++ এ ত্রুটি পরিচালনা করার জন্য চেষ্টা করুন বা আইফএস করুন


30

ব্যতিক্রমগুলি কি গেম ইঞ্জিন ডিজাইনে ব্যাপকভাবে ব্যবহৃত হয় বা বিবৃতি থাকলে খাঁটি ব্যবহার করা আরও বেশি পছন্দনীয়? ব্যতিক্রম সহ উদাহরণস্বরূপ:

try {
    m_fpsTextId = m_statistics->createText( "FPS: 0", 16, 20, 20, 1.0f, 1.0f, 1.0f );
    m_cpuTextId = m_statistics->createText( "CPU: 0%", 16, 20, 40, 1.0f, 1.0f, 1.0f );
    m_frameTimeTextId = m_statistics->createText( "Frame time: 0", 20, 20, 60, 1.0f, 1.0f, 1.0f );
    m_mouseCoordTextId = m_statistics->createText( "Mouse: (0, 0)", 20, 20, 80, 1.0f, 1.0f, 1.0f );
    m_cameraPosTextId = m_statistics->createText( "Camera pos: (0, 0, 0)", 40, 20, 100, 1.0f, 1.0f, 1.0f );
    m_cameraRotTextId = m_statistics->createText( "Camera rot: (0, 0, 0)", 40, 20, 120, 1.0f, 1.0f, 1.0f );
} catch ... {
    // some info about error
}

এবং আইএফএস সহ:

m_fpsTextId = m_statistics->createText( "FPS: 0", 16, 20, 20, 1.0f, 1.0f, 1.0f );
if( m_fpsTextId == -1 ) {
    // show error
}
m_cpuTextId = m_statistics->createText( "CPU: 0%", 16, 20, 40, 1.0f, 1.0f, 1.0f );
if( m_cpuTextId == -1 ) {
    // show error
}
m_frameTimeTextId = m_statistics->createText( "Frame time: 0", 20, 20, 60, 1.0f, 1.0f, 1.0f );
if( m_frameTimeTextId == -1 ) {
    // show error
}
m_mouseCoordTextId = m_statistics->createText( "Mouse: (0, 0)", 20, 20, 80, 1.0f, 1.0f, 1.0f );
if( m_mouseCoordTextId == -1 ) {
    // show error
}
m_cameraPosTextId = m_statistics->createText( "Camera pos: (0, 0, 0)", 40, 20, 100, 1.0f, 1.0f, 1.0f );
if( m_cameraPosTextId == -1 ) {
    // show error
}
m_cameraRotTextId = m_statistics->createText( "Camera rot: (0, 0, 0)", 40, 20, 120, 1.0f, 1.0f, 1.0f );
if( m_cameraRotTextId == -1 ) {
    // show error
}

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


অনেক লোক দাবি করে যে বুস্টটি গেমের বিকাশের জন্য খারাপ, তবে আমি আপনাকে ["Boost.optional"] ( boost.org/doc/libs/1_52_0/libs/optional/doc/html/index.html ) দেখার পরামর্শ দিই আপনার
আইএফএসের

আন্দ্রে আলেকজান্দ্রেস্কু দ্বারা ত্রুটি পরিচালনার বিষয়ে একটি চমৎকার কথা আছে, আমি ব্যতিক্রম ছাড়াই তার সাথে একই রকম দৃষ্টিভঙ্গি ব্যবহার করেছি।
থেলভিয়ান

উত্তর:


48

সংক্ষিপ্ত উত্তর: সংক্ষিপ্ত ত্রুটি হ্যান্ডলিং 1 , সংবেদনশীল ত্রুটি হ্যান্ডলিং 2 এবং নিকলাস ফ্রাইখোলমের 3 টি সংবেদনশীল ত্রুটি হ্যান্ডলিং পড়ুন । প্রকৃতপক্ষে, blog ব্লগের সমস্ত নিবন্ধগুলি পড়ুন, আপনি যখন তাতে রয়েছেন। বলবেন না যে আমি সবকিছুর সাথে একমত, তবে এর বেশিরভাগটি সোনার।

ব্যতিক্রম ব্যবহার করবেন না। কারণগুলির আধিক্য রয়েছে। আমি বড়দের তালিকা করব।

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

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

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

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

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

মোনাডিক ত্রুটি হ্যান্ডলিং বাস্তবায়নের বিকল্প হ'ল কাস্টম হ্যান্ডেল অবজেক্টগুলি ব্যবহার না করে প্রসঙ্গের অবজেক্টগুলিতে পদ্ধতিগুলি অবৈধ হ্যান্ডেল আইডির সাথে করুণভাবে মোকাবেলা করা। উদাহরণস্বরূপ, ক্রিয়েটেক্সট () ব্যর্থ হওয়ার পরে যদি -1 ফেরত দেয়, তবে এম_স্ট্যাটিস্টিকসে অন্য যে কোনও কলগুলি সেই হ্যান্ডলগুলির একটি নেয় সেগুলি যদি -1 পাশ করা হয় তবে মনোযোগ দিয়ে প্রস্থান করতে হবে।

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

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

যতক্ষণ না আপনি (ক) কোনও লগ ফাইলে ত্রুটিটি লগ করেন এবং (খ) কেবল নিয়মিত ব্যবহারকারীর ক্রিয়াকলাপের কারণে ঘটে না এমন ত্রুটিগুলিতে কেবল এটি ক্রাশ করা পুরোপুরি ঠিক totally

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


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

শিরোনামে সি ++ দেখে এখানে এসেছিলেন এবং পুরোপুরি নিশ্চিত ছিল যে একাকী ত্রুটি পরিচালনার কাজটি এখানে ইতিমধ্যে থাকবে না। ভাল জিনিস!
আদম

যে জায়গাগুলিতে পারফরম্যান্স সমালোচিত না হয় এবং আপনি বেশিরভাগই দ্রুত বাস্তবায়নের জন্য লক্ষ্য রাখছেন সেগুলি সম্পর্কে কী বলা যায়? উদাহরণস্বরূপ আপনি যখন খেলা যুক্তি বাস্তবায়ন করছেন?
Ali1S232

এছাড়াও কেবল ডিবাগিং উদ্দেশ্যে ব্যতিক্রম হ্যান্ডলিং ব্যবহার করার ধারণা সম্পর্কে কী? আপনি যখন গেমটি প্রকাশ করবেন তখন আপনি সমস্যাগুলি ছাড়াই সবকিছু সহজেই চলে যাওয়ার প্রত্যাশা করেন। সুতরাং আপনি বিকাশকালে বাগগুলি খুঁজে পেতে এবং ঠিক করার জন্য এবং পরে রিলিজ মোডে ব্যতিক্রমগুলি ব্যবহার করেন all সমস্ত ব্যতিক্রমগুলি সরান।
Ali1S232

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

13

ডোনাল্ড নুথের পুরাতন জ্ঞান হ'ল:

"আমাদের ছোট অদক্ষতাগুলি সম্পর্কে ভুলে যাওয়া উচিত, সময়ের প্রায় 97% বলুন: অকালীন অপ্টিমাইজেশন হ'ল সমস্ত মন্দের মূল।"

এটিকে একটি বড় পোস্টার হিসাবে মুদ্রণ করুন এবং আপনি মারাত্মক প্রোগ্রামিংটি যে কোনও জায়গায় রেখে দিন।

তাই, এমনকি যদি চেষ্টা / ধরা একটু ধীর তারপর আমি ডিফল্ট করে এটিকে ব্যবহার করবেন:

  • কোডটি যতটা সম্ভব পঠনযোগ্য এবং বোধগম্য হতে হবে। আপনি পারে একবার কোড লিখতে কিন্তু আপনি হবে এই কোড ডিবাগ, বোঝার জন্য অন্য কোড ডিবাগ, উন্নতির জন্য, জন্য এটা অনেক আরো কয়েকবার পড়তে, ...

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

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

সুতরাং শেষ পয়েন্ট:

শুনেছি ব্যতিক্রমগুলি আইএফএস এর চেয়ে কিছুটা ধীর

আমি শুনেছি যে প্রায় 15 বছর আগে, সম্প্রতি কোনও বিশ্বাসযোগ্য উত্স থেকে এটি শোনেনি। সংকলকগুলির উন্নতি হতে পারে বা যাই হোক না কেন।

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


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

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

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

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

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

10

ইতিমধ্যে এই প্রশ্নের একটি দুর্দান্ত উত্তর এসেছে তবে আমি আপনার বিশেষ ক্ষেত্রে কোড পঠনযোগ্যতা এবং ত্রুটি পুনরুদ্ধার সম্পর্কে কিছু চিন্তা যুক্ত করতে চাই।

আমি বিশ্বাস করি আপনার কোডটি আসলে এর মতো দেখতে পারে:

m_fpsTextId = m_statistics->createText( "FPS: 0", 16, 20, 20, 1.0f, 1.0f, 1.0f );
m_cpuTextId = m_statistics->createText( "CPU: 0%", 16, 20, 40, 1.0f, 1.0f, 1.0f );
m_frameTimeTextId = m_statistics->createText( "Frame time: 0", 20, 20, 60, 1.0f, 1.0f, 1.0f );
m_mouseCoordTextId = m_statistics->createText( "Mouse: (0, 0)", 20, 20, 80, 1.0f, 1.0f, 1.0f );
m_cameraPosTextId = m_statistics->createText( "Camera pos: (0, 0, 0)", 40, 20, 100, 1.0f, 1.0f, 1.0f );
m_cameraRotTextId = m_statistics->createText( "Camera rot: (0, 0, 0)", 40, 20, 120, 1.0f, 1.0f, 1.0f );

কোনও ব্যতিক্রম নেই, কোনও আইএফএস নেই। ত্রুটি প্রতিবেদন করা যেতে পারে createText। এবং createTextএকটি ডিফল্ট টেক্সচার আইডি ফিরে আসতে পারে যা আপনাকে রিটার্নের মানটি পরীক্ষা করার প্রয়োজন হয় না, যাতে বাকী কোডটি ঠিক তেমনভাবে কাজ করে।

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