দৃ rob় কোড সংজ্ঞা দেয়?


42

আমার প্রফেসর এই জাভা উদাহরণটি উল্লেখ করছেন যখন তিনি "শক্তিশালী" কোডের কথা বলেন:

if (var == true) {
    ...
} else if (var == false) {
    ...
} else {
    ...
}

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

তবে আমি সন্দেহজনক। যদি ভেরিয়েবলটি বুলিয়ান হয়, তৃতীয় রাষ্ট্রটি যখন যৌক্তিকভাবে অসম্ভব হয় তখন তৃতীয় রাষ্ট্রটি পরীক্ষা করার বিষয়টি কী?

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

তাহলে "দৃust় কোড" এর আসল সংজ্ঞাটি কী?



4
এটি কেবল একটি শক্তিশালী নয়-টাইপিত ভাষায় ধারণ করবে।
দৃ strongly়ভাবে

23
তাকে জিজ্ঞাসা করুন আপনি কীভাবে তৃতীয় মামলায় কভারেজ পরীক্ষা করবেন, কারণ দৃ rob় কোডটির অবশ্যই অবশ্যই পরীক্ষার প্রয়োজন হয় এবং যদি আপনি ২ য় কেসটি পরীক্ষা না করে থাকেন তবে আপনি কোনও বাগ খুঁজে পেতে সক্ষম হবেন না যা সেখানে লুকিয়ে থাকতে পারে।
gbjbaanb

2
@ মারজান - একটি দৃ strongly়-প্রকারভেদযুক্ত ভাষায় কেউ সম্ভবত লিখতে পারেন: যদি (বর্ণ) {} অন্য {}
কেভিন cline

2
আমি এমন কোনও ভাষা জানি না যেখানে এক্স এবং! এক্স উভয়ই সত্য হতে পারে। মনে রাখবেন যে আমি "যদি (x == সত্য) ..." প্রস্তাব দিই না; আমি এই ধরনের তুলনা ঘৃণা করি।
কেভিন ক্লাইনে

উত্তর:


33

তৃতীয় রাষ্ট্র যখন যুক্তিযুক্তভাবে অসম্ভব তখন তৃতীয় রাষ্ট্রের পরীক্ষা করার কী লাভ?

এমন কি সম্পর্কে যা এমন রাষ্ট্রের Boolean?পক্ষে অনুমতি দেয় NULLযা সত্য বা মিথ্যাও নয়। এখন সফ্টওয়্যারটি কী করবে? কিছু সফ্টওয়্যার পেসমেকারের মতো অত্যন্ত ক্রাশ-প্রতিরোধী হতে হয়। কখনও কখনও কেউ দেখেছেন যে একটি ডাটাবেসে একটি কলাম যুক্ত হয়েছে Booleanযা বর্তমান তথ্যটিকে NULLপ্রাথমিকভাবে আরম্ভ করে ? আমি জানি আমি এটি দেখেছি।

এখানে কয়েকটি লিঙ্ক রয়েছে যেগুলি সফ্টওয়্যারের ক্ষেত্রে দৃust় হওয়ার অর্থ কী তা নিয়ে আলোচনা করে:

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


13
এটি যদি জাভা এবং সি # উভয়ই ননীয় বুলিয়ান হয় তবে প্রথমে নালটি পরীক্ষা করা উচিত।
এসবেন স্কভ পেডারসেন

বিড়াল বা কুকুর কী তার সংজ্ঞা অনুসারে কোনও সর্বজনমত সম্মত বলে মনে হচ্ছে না।
তুলাইনস কর্ডোভা

11

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

বিকল্প এ।

if (var == true) {
    ...
} else if (var == false) {
    ...
} else {
    ...
}

বিকল্প বি

if (var == true) {
    ...
} else {
    ...
}

আমি জোর দিয়েছি অপশন বি আরও শক্তিশালী .....

যে কোনও টুইট আপনাকে অপ্রত্যাশিত ত্রুটিগুলি পরিচালনা করতে বলতে পারে। আপনি একবার তাদের কথা চিন্তা করলে এগুলি সাধারণত তুচ্ছভাবে সনাক্ত করা সহজ। আপনার প্রফেসর যে উদাহরণ দিয়েছেন তা হ'ল এমন কিছু নয় যা এটি ঘটতে পারে so

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

বিকল্প বি পরীক্ষা করা তুচ্ছ।

পরবর্তী সমস্যা, আপনার এই অধ্যাপককে এই প্রশ্নটি জিজ্ঞাসা করুন "যদি কোনও বুলিয়ান সত্য না মিথ্যা না হয় তবে আপনি এটি সম্পর্কে আমাকে কী করতে চান?" এটি একটি খুব আকর্ষণীয় আলোচনার নেতৃত্ব দেওয়া উচিত .....

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

অপশন এ আমাকে মেরে ফেলবে অপশন বি আমাকে বেঁচে থাকার একটি এমনকি সুযোগ দেয়।

তবে অপেক্ষা করুন - এটি স্পেস শাটল রিেন্ট্রিটির সিমুলেশন - তবে কী? বাতিল করা যাতে আপনি এটি সম্পর্কে জানেন। একটি ভাল ধারণা মত শোনাচ্ছে? - না - কারণ আপনি যে কোডটি শিপ করার পরিকল্পনা করছেন তার সাথে আপনাকে পরীক্ষা করতে হবে।

বিকল্প একটি অনুকরণের জন্য ভাল, কিন্তু স্থাপন করা যাবে না। এটি অকেজো অপশন বিটি মোতায়েন করা কোড তাই সিমুলেশন লাইভ সিস্টেমগুলির মতোই সম্পাদন করে।

বলি এটি একটি বৈধ উদ্বেগ ছিল। আরও ভাল সমাধান হ'ল অ্যাপ্লিকেশন যুক্তি থেকে ত্রুটি পরিচালনার বিচ্ছিন্ন করা।

if (var != true || var != false) {
    errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
 .... 
} else {
 .... 
}

আরও পঠন - থেরাক -২৫ এক্সরে মেশিন, আরিয়েন ৫ রকেট ব্যর্থতা এবং অন্যান্য (লিঙ্কটির অনেক ভাঙ্গা লিঙ্ক রয়েছে তবে গুগল সহায়তা করবে এমন পর্যাপ্ত তথ্য)


1
".. অপ্রত্যাশিত ত্রুটিগুলি। একবার আপনি সেগুলি সম্পর্কে একবার চিন্তা করার পরে এগুলি সাধারণত ত্রুটিযুক্তভাবে সনাক্ত করা যায়" - তবে আপনি যখন এগুলি ভাবেন, সেগুলি আর অপ্রত্যাশিত হবে না।
gbjbaanb

7
আপনার কোডটি এর পরিবর্তে হওয়া উচিত কিনা তা নিয়ে কিছু প্রশ্ন রয়েছেif (var != true || var != false) {&&

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

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

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

9

আসলে আপনার কোডটি আরও শক্তিশালী নয় তবে কম জোরালো। ফাইনালটি elseহ'ল ডেড কোড যা আপনি পরীক্ষা করতে পারবেন না।

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


আমি এটি স্পেসক্র্যাফ্টে পেতে পারি না ডেড কোড নিষিদ্ধ? অর্থাৎ আপনি শেষ লিখতে পারবেন না? যেহেতু আপনি এটি পরীক্ষা করতে পারবেন না আপনি এটি putোকাতে পারবেন না? তবে তার অর্থ কী "যদি এসইইউ দৃ rob় কোডের একটি অংশকে সক্রিয় করে, (অপ্রত্যাশিত) আচরণ নিয়ন্ত্রণে থাকে" "
জঞ্জাল

5
হ্যাঁ, মহাকাশে সমালোচনামূলক সফ্টওয়্যার পরীক্ষার কভারেজ অবশ্যই 100% হওয়া উচিত এবং ফলস্বরূপ অ্যাক্সেসযোগ্য কোড (ওরফে ডেড কোড) নিষিদ্ধ।
mouviciel

7

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

আমি সম্মত হই যে অধ্যাপকের কোড উদাহরণটি নির্বোধ, তবে আমার মতো নির্বোধ নয়।

// Assign 3 to x
var x = 3;
x = 3;   // again, just for sure
while (x < 3 or x > 3) { x = 3; }  // being robust
if (x != 3) { ... }  // this got to be an error!

1
শেষটি যদি অবশ্যই ট্রিগার করা হয় তবে এটির জন্য এত বেশি প্রচেষ্টা প্রয়োজন হবে না। যে কোনও অভিজ্ঞ সি প্রোগ্রামার হঠাৎ করে মান পরিবর্তন করতে দেখেছেন। অবশ্যই যৌক্তিকভাবে, নিয়ন্ত্রিত একক থ্রেডযুক্ত পরিবেশে, এটি কখনই হওয়া উচিত নয়। বাস্তব জীবনে, আইফির অভ্যন্তরে কোডটি শেষ পর্যন্ত ঘটবে। যদি দরকারী কিছু না থাকে তবে আপনি যদি এর ভিতরে করতে পারেন তবে তা কোড করবেন না! (একটি নির্দিষ্ট সফটওয়্যার বিকাশের সময় আমার একটি মজার অভিজ্ঞতা হয়েছিল যেখানে আমি অসম্ভব কিছু ঘটলে ... অনুমান করলাম কী ঘটেছে সে ক্ষেত্রে অভিশাপের শব্দ সহ একটি ব্যতিক্রম উত্থাপন করেছি?)।
অ্যালেক্স

2
সত্য গল্প:boolean x = something(); if (x) { x = True // make sure it's really true, ... }
আন্দ্রে এফ।

6

রোবস্ট কোডের সংজ্ঞায় কোনও সম্মতি নেই , কারণ প্রোগ্রামিংয়ের অনেক কিছুই এটি কমবেশি বিষয়গত ...

আপনার অধ্যাপক উদাহরণটি ভাষার উপর নির্ভর করে:

  • হাস্কেলের মধ্যে একটি Booleanহতে পারে Trueবা Falseতৃতীয় বিকল্প নেই
  • সি ++ তে একটি boolহতে পারে true, falseবা (দুর্ভাগ্যক্রমে) এমন কিছু সন্দেহজনক কাস্ট থেকে এসেছিল যা এটি একটি অজানা মামলায় ফেলেছে ... এটি হওয়া উচিত নয়, তবে আগের ত্রুটির ফলস্বরূপ হতে পারে may

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

বিশ্ববিদ্যালয়ের ক্ষেত্রে, আপনি এমনকি নকশা দ্বারা চুক্তি কৌশল গ্রহণ করে এটি বাড়িয়ে তুলতে পারেন:

  • ক্লাসের জন্য আক্রমণকারী স্থাপন করুন (উদাহরণস্বরূপ, তালিকার sizeআইটেমের সংখ্যা data)
  • প্রতিটি ফাংশনের জন্য পূর্ব শর্ত এবং পোস্ট-শর্তাদি স্থাপন করুন (উদাহরণস্বরূপ, এই ফাংশনটি কেবল aতার চেয়ে কম হওয়ার জন্যই আহ্বান করা যেতে পারে 10)
  • আপনার প্রতিটি ক্রিয়াকলাপের এন্ট্রি এবং প্রস্থান পয়েন্টে যাদের প্রত্যেকটি পরীক্ষা করুন

উদাহরণ:

class List:
  def __init__(self, items):
    self.__size = len(items)
    self.__data = items

  def __invariant(self):
    assert self.__size == len(self.__data)

  def size(self):
    self.__invariant()

    return self.__size

  def at(self, index):
    """index should be in [0,size)"""
    self.__invariant()
    assert index >= 0 and index < self.__size

    return self.__data[index]

  def pushback(self, item):
    """the subsequent list is one item longer
       the item can be retrieved by self.at(self.size()-1)"""
    self.__invariant()

    self.__data.append(item)
    self.__size += 1

    self.__invariant()
    assert self.at(self.size()-1) == item

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

2
সি, সি ++ এবং অবজেক্টিভ-সি-তে, একটি বুলের অন্য যে কোনও ধরণের মতো একটি অনির্দিষ্ট মান থাকতে পারে তবে যে কোনও অ্যাসাইনমেন্ট এটিকে সত্য বা মিথ্যাতে সেট করবে এবং অন্য কিছুই নয়। উদাহরণস্বরূপ: বুল বি = 0; খ ++,; খ ++,; সত্য সত্য খ সেট করা হবে।
gnasher729

2

আপনার অধ্যাপকের পন্থা সম্পূর্ণ বিভ্রান্ত।

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

Spec: If var is false then the function does "this", otherwise it does "that". 

তারপরে আপনি ফাংশনটি লিখুন:

if (var == false) dothis; else dothat; 

এবং কোডটি পূরণ করে। সুতরাং আপনার অধ্যাপক বলেছেন: var == 42 হলে কী হবে? বৈশিষ্টটি দেখুন: এটি ফাংশনটি "যে" করা উচিত বলেছে। কোডটি দেখুন: ফাংশনটি "এটি" করে। ফাংশনটি অনুমানের সাথে মিলিত হয়।

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


1

আমি @ gnasher729 এর বক্তব্যের সাথে একমত: আপনার অধ্যাপকের পন্থা পুরোপুরি বিভ্রান্ত।

দৃust় অর্থ এটি ভাঙ্গা / ব্যর্থতার বিরুদ্ধে প্রতিরোধী কারণ এটি কয়েকটি অনুমান করে এবং ডিকপলড হয়: এটি স্বয়ংসম্পূর্ণ, স্ব-সংজ্ঞায়িত এবং বহনযোগ্য। এটির পরিবর্তনের প্রয়োজনীয়তার সাথে খাপ খাইয়ে নেওয়াও অন্তর্ভুক্ত। এক কথায়, আপনার কোডটি টেকসই

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


0

দৃust় কোডটি কেবল এমন কোড যা ব্যর্থতাগুলি ভালভাবে পরিচালনা করে। কোন কোন আরো কম.

ব্যর্থতাগুলির মধ্যে, অনেক ধরণের রয়েছে: ভুল কোড, অসম্পূর্ণ কোড, অপ্রত্যাশিত মান, অপ্রত্যাশিত অবস্থা, ব্যতিক্রম, সংস্থান উত্সাহ, .... শক্তসমর্থ কোডগুলি এগুলি খুব ভালভাবে পরিচালনা করে।


0

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

for (int i = 0; i != sequence.length(); ++i) {
    // do something with sequence[i]
}

বা:

for (int i = 0; i < sequence.length(); ++i) {
    // do something with sequence[i]
}

(পার্থক্যটি দেখতে আপনার যদি সমস্যা হয় তবে লুপ পরীক্ষাটি পরীক্ষা করুন: প্রথম ব্যবহারগুলি !=, দ্বিতীয়টি ব্যবহার করে <)।

এখন, বেশিরভাগ পরিস্থিতিতে দুটি লুপ ঠিক একইরকম আচরণ করবে। তবে, প্রথমটির সাথে (তুলনা করা !=) এমন একটি ধারণা তৈরি করে যা iপ্রতি পুনরাবৃত্তির জন্য কেবল একবার বাড়ানো হবে। যদি এটি মানটি এড়িয়ে যায় sequence.length()তবে লুপটি ক্রমের সীমা ছাড়িয়েও চালিয়ে যেতে পারে এবং ত্রুটির কারণ হতে পারে।

সুতরাং আপনি একটি যুক্তি দিতে পারেন যে দ্বিতীয় বাস্তবায়নটি আরও দৃust়: এটি লুপের শরীরে পরিবর্তন হয় কিনা তা অনুমানের উপর নির্ভর করে না i(দ্রষ্টব্য: বাস্তবে এটি এখনও অনুমান করে iনা যে কখনও নেতিবাচক নয়)।

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


-1

আমি ব্যক্তিগতভাবে একটি কোডকে 'মজবুত' হিসাবে বর্ণনা করি যার মধ্যে এটির একটি গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে:

  1. আমার মা যদি এর সামনে বসে কাজ করে তবে সে সিস্টেমটি ভাঙতে পারবে না

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

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